Import linux_4.9.25-1.debian.tar.xz
authorBen Hutchings <ben@decadent.org.uk>
Tue, 2 May 2017 15:21:44 +0000 (15:21 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Tue, 2 May 2017 15:21:44 +0000 (15:21 +0000)
[dgit import tarball linux 4.9.25-1 linux_4.9.25-1.debian.tar.xz]

1720 files changed:
.gitignore [new file with mode: 0644]
README.Debian [new file with mode: 0644]
README.source [new file with mode: 0644]
bin/abiupdate.py [new file with mode: 0755]
bin/buildcheck.py [new file with mode: 0755]
bin/check-patches.sh [new file with mode: 0755]
bin/gencontrol.py [new file with mode: 0755]
bin/genorig.py [new file with mode: 0755]
bin/getconfig.py [new file with mode: 0755]
bin/git-tag-gpg-wrapper [new file with mode: 0755]
bin/kconfig.py [new file with mode: 0755]
bin/no-depmod [new file with mode: 0755]
bin/stable-update [new file with mode: 0755]
bin/stable-update.sh [new file with mode: 0755]
bin/test-patches [new file with mode: 0755]
bin/uscan-hook [new file with mode: 0755]
certs/benh@debian.org.cert.pem [new file with mode: 0644]
changelog [new file with mode: 0644]
compat [new file with mode: 0644]
config.defines.dump [new file with mode: 0644]
config/alpha/config [new file with mode: 0644]
config/alpha/config.alpha-generic [new file with mode: 0644]
config/alpha/config.alpha-smp [new file with mode: 0644]
config/alpha/defines [new file with mode: 0644]
config/amd64/config [new file with mode: 0644]
config/amd64/defines [new file with mode: 0644]
config/amd64/none/defines [new file with mode: 0644]
config/amd64/rt/defines [new file with mode: 0644]
config/arm64/config [new file with mode: 0644]
config/arm64/defines [new file with mode: 0644]
config/arm64/none/defines [new file with mode: 0644]
config/armel/config [new file with mode: 0644]
config/armel/config.marvell [new file with mode: 0644]
config/armel/defines [new file with mode: 0644]
config/armhf/config [new file with mode: 0644]
config/armhf/config.armmp-lpae [new file with mode: 0644]
config/armhf/defines [new file with mode: 0644]
config/config [new file with mode: 0644]
config/defines [new file with mode: 0644]
config/featureset-rt/config [new file with mode: 0644]
config/featureset-rt/defines [new file with mode: 0644]
config/hppa/config [new file with mode: 0644]
config/hppa/config.parisc [new file with mode: 0644]
config/hppa/config.parisc-smp [new file with mode: 0644]
config/hppa/config.parisc64 [new file with mode: 0644]
config/hppa/config.parisc64-smp [new file with mode: 0644]
config/hppa/defines [new file with mode: 0644]
config/i386/config [new file with mode: 0644]
config/i386/config.686 [new file with mode: 0644]
config/i386/config.686-pae [new file with mode: 0644]
config/i386/defines [new file with mode: 0644]
config/i386/none/defines [new file with mode: 0644]
config/i386/rt/defines [new file with mode: 0644]
config/kernelarch-arm/config [new file with mode: 0644]
config/kernelarch-mips/config [new file with mode: 0644]
config/kernelarch-mips/config.loongson-3 [new file with mode: 0644]
config/kernelarch-mips/config.malta [new file with mode: 0644]
config/kernelarch-mips/config.mips32r2 [new file with mode: 0644]
config/kernelarch-mips/config.mips32r6 [new file with mode: 0644]
config/kernelarch-mips/config.mips64r2 [new file with mode: 0644]
config/kernelarch-mips/config.mips64r6 [new file with mode: 0644]
config/kernelarch-mips/config.octeon [new file with mode: 0644]
config/kernelarch-powerpc/config [new file with mode: 0644]
config/kernelarch-powerpc/config-arch-64 [new file with mode: 0644]
config/kernelarch-powerpc/config-arch-64-be [new file with mode: 0644]
config/kernelarch-powerpc/config-arch-64-le [new file with mode: 0644]
config/kernelarch-sparc/config [new file with mode: 0644]
config/kernelarch-sparc/config-smp [new file with mode: 0644]
config/kernelarch-sparc/config-up [new file with mode: 0644]
config/kernelarch-x86/config [new file with mode: 0644]
config/m68k/README.build [new file with mode: 0644]
config/m68k/config [new file with mode: 0644]
config/m68k/defines [new file with mode: 0644]
config/mips/config [new file with mode: 0644]
config/mips/defines [new file with mode: 0644]
config/mips64/config [new file with mode: 0644]
config/mips64/defines [new file with mode: 0644]
config/mips64el/config [new file with mode: 0644]
config/mips64el/defines [new file with mode: 0644]
config/mips64r6/config [new file with mode: 0644]
config/mips64r6/defines [new file with mode: 0644]
config/mips64r6el/config [new file with mode: 0644]
config/mips64r6el/defines [new file with mode: 0644]
config/mipsel/config [new file with mode: 0644]
config/mipsel/defines [new file with mode: 0644]
config/mipsn32/defines [new file with mode: 0644]
config/mipsn32el/defines [new file with mode: 0644]
config/mipsn32r6/defines [new file with mode: 0644]
config/mipsn32r6el/defines [new file with mode: 0644]
config/mipsr6/config [new file with mode: 0644]
config/mipsr6/defines [new file with mode: 0644]
config/mipsr6el/config [new file with mode: 0644]
config/mipsr6el/defines [new file with mode: 0644]
config/powerpc/config.powerpc [new file with mode: 0644]
config/powerpc/config.powerpc-smp [new file with mode: 0644]
config/powerpc/defines [new file with mode: 0644]
config/powerpcspe/config [new file with mode: 0644]
config/powerpcspe/defines [new file with mode: 0644]
config/ppc64/defines [new file with mode: 0644]
config/ppc64el/defines [new file with mode: 0644]
config/s390/defines [new file with mode: 0644]
config/s390x/config [new file with mode: 0644]
config/s390x/defines [new file with mode: 0644]
config/sh3/defines [new file with mode: 0644]
config/sh4/config [new file with mode: 0644]
config/sh4/config.sh7751r [new file with mode: 0644]
config/sh4/config.sh7785lcr [new file with mode: 0644]
config/sh4/defines [new file with mode: 0644]
config/sparc/defines [new file with mode: 0644]
config/sparc64/defines [new file with mode: 0644]
config/tilegx/defines [new file with mode: 0644]
config/x32/defines [new file with mode: 0644]
control [new file with mode: 0644]
control.md5sum [new file with mode: 0644]
copyright [new file with mode: 0644]
hyperv-daemons.README.Debian [new file with mode: 0644]
hyperv-daemons.hv-fcopy-daemon.init [new file with mode: 0755]
hyperv-daemons.hv-fcopy-daemon.service [new file with mode: 0644]
hyperv-daemons.hv-kvp-daemon.init [new file with mode: 0755]
hyperv-daemons.hv-kvp-daemon.service [new file with mode: 0644]
hyperv-daemons.hv-vss-daemon.init [new file with mode: 0755]
hyperv-daemons.hv-vss-daemon.service [new file with mode: 0644]
hyperv-daemons.install [new file with mode: 0644]
installer/alpha/kernel-versions [new file with mode: 0644]
installer/alpha/modules/alpha-generic/ata-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/btrfs-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/cdrom-core-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/crc-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/crypto-dm-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/crypto-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/event-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/ext4-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/fat-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/fb-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/fuse-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/input-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/isofs-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/jfs-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/kernel-image [new file with mode: 0644]
installer/alpha/modules/alpha-generic/loop-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/md-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/mouse-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/multipath-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/nbd-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/nic-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/nic-pcmcia-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/nic-shared-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/nic-usb-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/nic-wireless-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/pata-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/pcmcia-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/ppp-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/sata-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/scsi-core-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/scsi-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/serial-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/squashfs-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/srm-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/usb-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/usb-serial-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/usb-storage-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/virtio-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/xfs-modules [new file with mode: 0644]
installer/alpha/modules/alpha-generic/zlib-modules [new file with mode: 0644]
installer/alpha/package-list [new file with mode: 0644]
installer/amd64/TODO [new file with mode: 0644]
installer/amd64/kernel-versions [new file with mode: 0644]
installer/amd64/modules/amd64/acpi-modules [new file with mode: 0644]
installer/amd64/modules/amd64/ata-modules [new file with mode: 0644]
installer/amd64/modules/amd64/btrfs-modules [new file with mode: 0644]
installer/amd64/modules/amd64/cdrom-core-modules [new file with mode: 0644]
installer/amd64/modules/amd64/crc-modules [new file with mode: 0644]
installer/amd64/modules/amd64/crypto-dm-modules [new file with mode: 0644]
installer/amd64/modules/amd64/crypto-modules [new file with mode: 0644]
installer/amd64/modules/amd64/efi-modules [new file with mode: 0644]
installer/amd64/modules/amd64/event-modules [new file with mode: 0644]
installer/amd64/modules/amd64/ext4-modules [new file with mode: 0644]
installer/amd64/modules/amd64/fat-modules [new file with mode: 0644]
installer/amd64/modules/amd64/fb-modules [new file with mode: 0644]
installer/amd64/modules/amd64/firewire-core-modules [new file with mode: 0644]
installer/amd64/modules/amd64/fuse-modules [new file with mode: 0644]
installer/amd64/modules/amd64/hyperv-modules [new file with mode: 0644]
installer/amd64/modules/amd64/i2c-modules [new file with mode: 0644]
installer/amd64/modules/amd64/input-modules [new file with mode: 0644]
installer/amd64/modules/amd64/isofs-modules [new file with mode: 0644]
installer/amd64/modules/amd64/jfs-modules [new file with mode: 0644]
installer/amd64/modules/amd64/kernel-image [new file with mode: 0644]
installer/amd64/modules/amd64/loop-modules [new file with mode: 0644]
installer/amd64/modules/amd64/md-modules [new file with mode: 0644]
installer/amd64/modules/amd64/mmc-core-modules [new file with mode: 0644]
installer/amd64/modules/amd64/mmc-modules [new file with mode: 0644]
installer/amd64/modules/amd64/mouse-modules [new file with mode: 0644]
installer/amd64/modules/amd64/multipath-modules [new file with mode: 0644]
installer/amd64/modules/amd64/nbd-modules [new file with mode: 0644]
installer/amd64/modules/amd64/nic-modules [new file with mode: 0644]
installer/amd64/modules/amd64/nic-pcmcia-modules [new file with mode: 0644]
installer/amd64/modules/amd64/nic-shared-modules [new file with mode: 0644]
installer/amd64/modules/amd64/nic-usb-modules [new file with mode: 0644]
installer/amd64/modules/amd64/nic-wireless-modules [new file with mode: 0644]
installer/amd64/modules/amd64/ntfs-modules [new file with mode: 0644]
installer/amd64/modules/amd64/pata-modules [new file with mode: 0644]
installer/amd64/modules/amd64/pcmcia-modules [new file with mode: 0644]
installer/amd64/modules/amd64/pcmcia-storage-modules [new file with mode: 0644]
installer/amd64/modules/amd64/ppp-modules [new file with mode: 0644]
installer/amd64/modules/amd64/sata-modules [new file with mode: 0644]
installer/amd64/modules/amd64/scsi-core-modules [new file with mode: 0644]
installer/amd64/modules/amd64/scsi-modules [new file with mode: 0644]
installer/amd64/modules/amd64/serial-modules [new file with mode: 0644]
installer/amd64/modules/amd64/sound-modules [new file with mode: 0644]
installer/amd64/modules/amd64/speakup-modules [new file with mode: 0644]
installer/amd64/modules/amd64/squashfs-modules [new file with mode: 0644]
installer/amd64/modules/amd64/udf-modules [new file with mode: 0644]
installer/amd64/modules/amd64/uinput-modules [new file with mode: 0644]
installer/amd64/modules/amd64/usb-modules [new file with mode: 0644]
installer/amd64/modules/amd64/usb-serial-modules [new file with mode: 0644]
installer/amd64/modules/amd64/usb-storage-modules [new file with mode: 0644]
installer/amd64/modules/amd64/virtio-modules [new file with mode: 0644]
installer/amd64/modules/amd64/xfs-modules [new file with mode: 0644]
installer/amd64/package-list [new file with mode: 0644]
installer/arm64/kernel-versions [new file with mode: 0644]
installer/arm64/modules/arm64/ata-modules [new file with mode: 0644]
installer/arm64/modules/arm64/btrfs-modules [new file with mode: 0644]
installer/arm64/modules/arm64/cdrom-core-modules [new file with mode: 0644]
installer/arm64/modules/arm64/crc-modules [new file with mode: 0644]
installer/arm64/modules/arm64/crypto-dm-modules [new file with mode: 0644]
installer/arm64/modules/arm64/crypto-modules [new file with mode: 0644]
installer/arm64/modules/arm64/efi-modules [new file with mode: 0644]
installer/arm64/modules/arm64/event-modules [new file with mode: 0644]
installer/arm64/modules/arm64/ext4-modules [new file with mode: 0644]
installer/arm64/modules/arm64/fat-modules [new file with mode: 0644]
installer/arm64/modules/arm64/fb-modules [new file with mode: 0644]
installer/arm64/modules/arm64/fuse-modules [new file with mode: 0644]
installer/arm64/modules/arm64/i2c-modules [new file with mode: 0644]
installer/arm64/modules/arm64/input-modules [new file with mode: 0644]
installer/arm64/modules/arm64/isofs-modules [new file with mode: 0644]
installer/arm64/modules/arm64/jfs-modules [new file with mode: 0644]
installer/arm64/modules/arm64/kernel-image [new file with mode: 0644]
installer/arm64/modules/arm64/leds-modules [new file with mode: 0644]
installer/arm64/modules/arm64/loop-modules [new file with mode: 0644]
installer/arm64/modules/arm64/md-modules [new file with mode: 0644]
installer/arm64/modules/arm64/mmc-modules [new file with mode: 0644]
installer/arm64/modules/arm64/multipath-modules [new file with mode: 0644]
installer/arm64/modules/arm64/nbd-modules [new file with mode: 0644]
installer/arm64/modules/arm64/nic-modules [new file with mode: 0644]
installer/arm64/modules/arm64/nic-shared-modules [new file with mode: 0644]
installer/arm64/modules/arm64/nic-usb-modules [new file with mode: 0644]
installer/arm64/modules/arm64/nic-wireless-modules [new file with mode: 0644]
installer/arm64/modules/arm64/ppp-modules [new file with mode: 0644]
installer/arm64/modules/arm64/sata-modules [new file with mode: 0644]
installer/arm64/modules/arm64/scsi-core-modules [new file with mode: 0644]
installer/arm64/modules/arm64/scsi-modules [new file with mode: 0644]
installer/arm64/modules/arm64/squashfs-modules [new file with mode: 0644]
installer/arm64/modules/arm64/udf-modules [new file with mode: 0644]
installer/arm64/modules/arm64/uinput-modules [new file with mode: 0644]
installer/arm64/modules/arm64/usb-modules [new file with mode: 0644]
installer/arm64/modules/arm64/usb-storage-modules [new file with mode: 0644]
installer/arm64/modules/arm64/virtio-modules [new file with mode: 0644]
installer/arm64/modules/arm64/xfs-modules [new file with mode: 0644]
installer/arm64/package-list [new file with mode: 0644]
installer/armel/kernel-versions [new file with mode: 0644]
installer/armel/modules/armel-marvell/btrfs-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/cdrom-core-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/crc-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/crypto-dm-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/crypto-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/event-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/ext4-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/fat-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/fb-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/fuse-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/input-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/ipv6-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/isofs-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/jffs2-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/jfs-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/kernel-image [new file with mode: 0644]
installer/armel/modules/armel-marvell/leds-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/loop-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/md-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/minix-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/mmc-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/mouse-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/mtd-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/multipath-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/nbd-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/nic-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/nic-shared-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/nic-usb-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/ppp-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/sata-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/scsi-core-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/squashfs-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/udf-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/uinput-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/usb-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/usb-serial-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/usb-storage-modules [new file with mode: 0644]
installer/armel/modules/armel-marvell/zlib-modules [new file with mode: 0644]
installer/armel/package-list [new file with mode: 0644]
installer/armhf/kernel-versions [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/ata-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/btrfs-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/crc-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/crypto-dm-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/crypto-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/efi-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/event-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/ext4-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/fat-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/fb-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/fuse-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/input-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/isofs-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/jfs-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/kernel-image [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/leds-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/loop-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/md-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/mmc-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/mtd-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/multipath-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/nbd-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/nic-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/nic-shared-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/nic-usb-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/nic-wireless-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/pata-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/ppp-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/sata-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/scsi-core-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/scsi-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/squashfs-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/udf-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/uinput-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/usb-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/usb-storage-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/virtio-modules [new file with mode: 0644]
installer/armhf/modules/armhf-armmp/zlib-modules [new file with mode: 0644]
installer/armhf/package-list [new file with mode: 0644]
installer/hppa/kernel-versions [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/ata-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/btrfs-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/cdrom-core-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/crc-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/crypto-dm-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/crypto-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/event-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/ext4-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/fat-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/fb-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/fuse-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/input-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/isofs-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/jfs-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/kernel-image [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/loop-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/md-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/mouse-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/multipath-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/nbd-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/nic-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/nic-shared-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/nic-usb-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/pata-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/ppp-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/sata-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/scsi-core-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/scsi-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/serial-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/squashfs-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/usb-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/usb-serial-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/usb-storage-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/virtio-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/xfs-modules [new file with mode: 0644]
installer/hppa/modules/hppa-parisc64-smp/zlib-modules [new file with mode: 0644]
installer/hppa/modules/hppa/ata-modules [new file with mode: 0644]
installer/hppa/modules/hppa/btrfs-modules [new file with mode: 0644]
installer/hppa/modules/hppa/cdrom-core-modules [new file with mode: 0644]
installer/hppa/modules/hppa/crc-modules [new file with mode: 0644]
installer/hppa/modules/hppa/crypto-dm-modules [new file with mode: 0644]
installer/hppa/modules/hppa/crypto-modules [new file with mode: 0644]
installer/hppa/modules/hppa/event-modules [new file with mode: 0644]
installer/hppa/modules/hppa/ext4-modules [new file with mode: 0644]
installer/hppa/modules/hppa/fat-modules [new file with mode: 0644]
installer/hppa/modules/hppa/fuse-modules [new file with mode: 0644]
installer/hppa/modules/hppa/input-modules [new file with mode: 0644]
installer/hppa/modules/hppa/isofs-modules [new file with mode: 0644]
installer/hppa/modules/hppa/jfs-modules [new file with mode: 0644]
installer/hppa/modules/hppa/kernel-image [new file with mode: 0644]
installer/hppa/modules/hppa/loop-modules [new file with mode: 0644]
installer/hppa/modules/hppa/md-modules [new file with mode: 0644]
installer/hppa/modules/hppa/mouse-modules [new file with mode: 0644]
installer/hppa/modules/hppa/multipath-modules [new file with mode: 0644]
installer/hppa/modules/hppa/nbd-modules [new file with mode: 0644]
installer/hppa/modules/hppa/nic-modules [new file with mode: 0644]
installer/hppa/modules/hppa/nic-shared-modules [new file with mode: 0644]
installer/hppa/modules/hppa/nic-usb-modules [new file with mode: 0644]
installer/hppa/modules/hppa/pata-modules [new file with mode: 0644]
installer/hppa/modules/hppa/ppp-modules [new file with mode: 0644]
installer/hppa/modules/hppa/sata-modules [new file with mode: 0644]
installer/hppa/modules/hppa/scsi-core-modules [new file with mode: 0644]
installer/hppa/modules/hppa/scsi-modules [new file with mode: 0644]
installer/hppa/modules/hppa/serial-modules [new file with mode: 0644]
installer/hppa/modules/hppa/squashfs-modules [new file with mode: 0644]
installer/hppa/modules/hppa/usb-modules [new file with mode: 0644]
installer/hppa/modules/hppa/usb-serial-modules [new file with mode: 0644]
installer/hppa/modules/hppa/usb-storage-modules [new file with mode: 0644]
installer/hppa/modules/hppa/virtio-modules [new file with mode: 0644]
installer/hppa/modules/hppa/xfs-modules [new file with mode: 0644]
installer/hppa/modules/hppa/zlib-modules [new file with mode: 0644]
installer/hppa/package-list [new file with mode: 0644]
installer/i386/kernel-versions [new file with mode: 0644]
installer/i386/modules/i386/acpi-modules [new file with mode: 0644]
installer/i386/modules/i386/ata-modules [new file with mode: 0644]
installer/i386/modules/i386/btrfs-modules [new file with mode: 0644]
installer/i386/modules/i386/cdrom-core-modules [new file with mode: 0644]
installer/i386/modules/i386/crc-modules [new file with mode: 0644]
installer/i386/modules/i386/crypto-dm-modules [new file with mode: 0644]
installer/i386/modules/i386/crypto-modules [new file with mode: 0644]
installer/i386/modules/i386/efi-modules [new file with mode: 0644]
installer/i386/modules/i386/event-modules [new file with mode: 0644]
installer/i386/modules/i386/ext4-modules [new file with mode: 0644]
installer/i386/modules/i386/fat-modules [new file with mode: 0644]
installer/i386/modules/i386/fb-modules [new file with mode: 0644]
installer/i386/modules/i386/firewire-core-modules [new file with mode: 0644]
installer/i386/modules/i386/fuse-modules [new file with mode: 0644]
installer/i386/modules/i386/hyperv-modules [new file with mode: 0644]
installer/i386/modules/i386/i2c-modules [new file with mode: 0644]
installer/i386/modules/i386/input-modules [new file with mode: 0644]
installer/i386/modules/i386/isofs-modules [new file with mode: 0644]
installer/i386/modules/i386/jfs-modules [new file with mode: 0644]
installer/i386/modules/i386/kernel-image [new file with mode: 0644]
installer/i386/modules/i386/loop-modules [new file with mode: 0644]
installer/i386/modules/i386/md-modules [new file with mode: 0644]
installer/i386/modules/i386/mmc-core-modules [new file with mode: 0644]
installer/i386/modules/i386/mmc-modules [new file with mode: 0644]
installer/i386/modules/i386/mouse-modules [new file with mode: 0644]
installer/i386/modules/i386/multipath-modules [new file with mode: 0644]
installer/i386/modules/i386/nbd-modules [new file with mode: 0644]
installer/i386/modules/i386/nic-modules [new file with mode: 0644]
installer/i386/modules/i386/nic-pcmcia-modules [new file with mode: 0644]
installer/i386/modules/i386/nic-shared-modules [new file with mode: 0644]
installer/i386/modules/i386/nic-usb-modules [new file with mode: 0644]
installer/i386/modules/i386/nic-wireless-modules [new file with mode: 0644]
installer/i386/modules/i386/ntfs-modules [new file with mode: 0644]
installer/i386/modules/i386/pata-modules [new file with mode: 0644]
installer/i386/modules/i386/pcmcia-modules [new file with mode: 0644]
installer/i386/modules/i386/pcmcia-storage-modules [new file with mode: 0644]
installer/i386/modules/i386/ppp-modules [new file with mode: 0644]
installer/i386/modules/i386/sata-modules [new file with mode: 0644]
installer/i386/modules/i386/scsi-core-modules [new file with mode: 0644]
installer/i386/modules/i386/scsi-modules [new file with mode: 0644]
installer/i386/modules/i386/serial-modules [new file with mode: 0644]
installer/i386/modules/i386/sound-modules [new file with mode: 0644]
installer/i386/modules/i386/speakup-modules [new file with mode: 0644]
installer/i386/modules/i386/squashfs-modules [new file with mode: 0644]
installer/i386/modules/i386/udf-modules [new file with mode: 0644]
installer/i386/modules/i386/uinput-modules [new file with mode: 0644]
installer/i386/modules/i386/usb-modules [new file with mode: 0644]
installer/i386/modules/i386/usb-serial-modules [new file with mode: 0644]
installer/i386/modules/i386/usb-storage-modules [new file with mode: 0644]
installer/i386/modules/i386/virtio-modules [new file with mode: 0644]
installer/i386/modules/i386/xfs-modules [new file with mode: 0644]
installer/i386/package-list [new file with mode: 0644]
installer/m68k/kernel-versions [new file with mode: 0644]
installer/m68k/modules/m68k/btrfs-modules [new file with mode: 0644]
installer/m68k/modules/m68k/cdrom-core-modules [new file with mode: 0644]
installer/m68k/modules/m68k/crc-modules [new file with mode: 0644]
installer/m68k/modules/m68k/crypto-modules [new file with mode: 0644]
installer/m68k/modules/m68k/ext4-modules [new file with mode: 0644]
installer/m68k/modules/m68k/fat-modules [new file with mode: 0644]
installer/m68k/modules/m68k/fuse-modules [new file with mode: 0644]
installer/m68k/modules/m68k/isofs-modules [new file with mode: 0644]
installer/m68k/modules/m68k/kernel-image [new file with mode: 0644]
installer/m68k/modules/m68k/md-modules [new file with mode: 0644]
installer/m68k/modules/m68k/nbd-modules [new file with mode: 0644]
installer/m68k/modules/m68k/nic-shared-modules [new file with mode: 0644]
installer/m68k/modules/m68k/ppp-modules [new file with mode: 0644]
installer/m68k/modules/m68k/scsi-modules [new file with mode: 0644]
installer/m68k/modules/m68k/squashfs-modules [new file with mode: 0644]
installer/m68k/modules/m68k/udf-modules [new file with mode: 0644]
installer/m68k/modules/m68k/zlib-modules [new file with mode: 0644]
installer/m68k/package-list [new file with mode: 0644]
installer/mips/kernel-versions [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/affs-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/ata-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/btrfs-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/cdrom-core-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/crc-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/crypto-dm-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/crypto-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/event-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/ext4-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/fat-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/fuse-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/hfs-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/i2c-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/input-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/isofs-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/jfs-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/kernel-image [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/loop-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/md-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/minix-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/mmc-core-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/mmc-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/mouse-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/multipath-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/nbd-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/nic-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/nic-shared-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/nic-usb-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/nic-wireless-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/ntfs-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/pata-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/ppp-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/qnx4-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/sata-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/scsi-core-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/scsi-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/sound-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/squashfs-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/udf-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/usb-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/usb-serial-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/usb-storage-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/virtio-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/xfs-modules [new file with mode: 0644]
installer/mips/modules/mips-4kc-malta/zlib-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/affs-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/btrfs-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/cdrom-core-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/crc-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/crypto-dm-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/crypto-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/event-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/ext4-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/fat-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/fuse-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/hfs-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/input-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/isofs-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/jfs-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/kernel-image [new file with mode: 0644]
installer/mips/modules/mips-octeon/loop-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/md-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/minix-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/multipath-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/nbd-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/nic-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/nic-shared-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/nic-usb-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/nic-wireless-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/ntfs-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/pata-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/ppp-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/qnx4-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/rtc-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/sata-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/scsi-core-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/scsi-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/sound-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/squashfs-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/udf-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/usb-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/usb-serial-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/usb-storage-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/virtio-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/xfs-modules [new file with mode: 0644]
installer/mips/modules/mips-octeon/zlib-modules [new file with mode: 0644]
installer/mips/modules/mips/btrfs-modules [new file with mode: 0644]
installer/mips/modules/mips/crc-modules [new file with mode: 0644]
installer/mips/modules/mips/crypto-dm-modules [new file with mode: 0644]
installer/mips/modules/mips/crypto-modules [new file with mode: 0644]
installer/mips/modules/mips/ext4-modules [new file with mode: 0644]
installer/mips/modules/mips/fuse-modules [new file with mode: 0644]
installer/mips/modules/mips/isofs-modules [new file with mode: 0644]
installer/mips/modules/mips/jfs-modules [new file with mode: 0644]
installer/mips/modules/mips/kernel-image [new file with mode: 0644]
installer/mips/modules/mips/loop-modules [new file with mode: 0644]
installer/mips/modules/mips/md-modules [new file with mode: 0644]
installer/mips/modules/mips/multipath-modules [new file with mode: 0644]
installer/mips/modules/mips/nbd-modules [new file with mode: 0644]
installer/mips/modules/mips/nic-shared-modules [new file with mode: 0644]
installer/mips/modules/mips/squashfs-modules [new file with mode: 0644]
installer/mips/modules/mips/udf-modules [new file with mode: 0644]
installer/mips/modules/mips/xfs-modules [new file with mode: 0644]
installer/mips/modules/mips/zlib-modules [new file with mode: 0644]
installer/mips/package-list [new file with mode: 0644]
installer/mips64/kernel-versions [new file with mode: 0644]
installer/mips64/modules/mips64 [new symlink]
installer/mips64/modules/mips64-5kc-malta [new symlink]
installer/mips64/modules/mips64-octeon [new symlink]
installer/mips64/package-list [new file with mode: 0644]
installer/mips64el/kernel-versions [new file with mode: 0644]
installer/mips64el/modules/mips64el-5kc-malta [new symlink]
installer/mips64el/modules/mips64el-loongson-3 [new symlink]
installer/mips64el/modules/mips64el-octeon [new symlink]
installer/mips64el/package-list [new file with mode: 0644]
installer/mips64r6/kernel-versions [new file with mode: 0644]
installer/mips64r6/modules/mips64r6 [new symlink]
installer/mips64r6/package-list [new file with mode: 0644]
installer/mips64r6el/kernel-versions [new file with mode: 0644]
installer/mips64r6el/modules/mips64r6 [new symlink]
installer/mips64r6el/package-list [new file with mode: 0644]
installer/mipsel/kernel-versions [new file with mode: 0644]
installer/mipsel/modules/mipsel-4kc-malta [new symlink]
installer/mipsel/modules/mipsel-loongson-3/affs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/ata-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/btrfs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/cdrom-core-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/crc-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/crypto-dm-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/crypto-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/event-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/ext4-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/fat-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/fb-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/firewire-core-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/fuse-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/hfs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/input-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/isofs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/jfs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/kernel-image [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/loop-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/md-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/minix-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/multipath-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/nbd-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/nfs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/nic-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/nic-shared-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/nic-usb-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/nic-wireless-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/ntfs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/pata-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/ppp-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/qnx4-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/sata-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/scsi-core-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/scsi-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/sound-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/speakup-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/squashfs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/udf-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/usb-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/usb-serial-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/usb-storage-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/virtio-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/xfs-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-loongson-3/zlib-modules [new file with mode: 0644]
installer/mipsel/modules/mipsel-octeon [new symlink]
installer/mipsel/package-list [new file with mode: 0644]
installer/mipsr6/kernel-versions [new file with mode: 0644]
installer/mipsr6/modules/mips32r6 [new symlink]
installer/mipsr6/package-list [new file with mode: 0644]
installer/mipsr6el/kernel-versions [new file with mode: 0644]
installer/mipsr6el/modules/mips32r6 [new symlink]
installer/mipsr6el/package-list [new file with mode: 0644]
installer/modules/acpi-modules [new file with mode: 0644]
installer/modules/affs-modules [new file with mode: 0644]
installer/modules/ata-modules [new file with mode: 0644]
installer/modules/btrfs-modules [new file with mode: 0644]
installer/modules/cdrom-core-modules [new file with mode: 0644]
installer/modules/crc-modules [new file with mode: 0644]
installer/modules/crypto-dm-modules [new file with mode: 0644]
installer/modules/crypto-modules [new file with mode: 0644]
installer/modules/efi-modules [new file with mode: 0644]
installer/modules/event-modules [new file with mode: 0644]
installer/modules/ext4-modules [new file with mode: 0644]
installer/modules/fat-modules [new file with mode: 0644]
installer/modules/firewire-core-modules [new file with mode: 0644]
installer/modules/fuse-modules [new file with mode: 0644]
installer/modules/hfs-modules [new file with mode: 0644]
installer/modules/hyperv-modules [new file with mode: 0644]
installer/modules/i2c-modules [new file with mode: 0644]
installer/modules/input-modules [new file with mode: 0644]
installer/modules/ipv6-modules [new file with mode: 0644]
installer/modules/isofs-modules [new file with mode: 0644]
installer/modules/jffs2-modules [new file with mode: 0644]
installer/modules/jfs-modules [new file with mode: 0644]
installer/modules/kernel-image [new file with mode: 0644]
installer/modules/leds-modules [new file with mode: 0644]
installer/modules/loop-modules [new file with mode: 0644]
installer/modules/lzo-modules [new file with mode: 0644]
installer/modules/md-modules [new file with mode: 0644]
installer/modules/minix-modules [new file with mode: 0644]
installer/modules/mmc-core-modules [new file with mode: 0644]
installer/modules/mmc-modules [new file with mode: 0644]
installer/modules/mouse-modules [new file with mode: 0644]
installer/modules/mtd-modules [new file with mode: 0644]
installer/modules/multipath-modules [new file with mode: 0644]
installer/modules/nbd-modules [new file with mode: 0644]
installer/modules/nfs-modules [new file with mode: 0644]
installer/modules/nic-modules [new file with mode: 0644]
installer/modules/nic-pcmcia-modules [new file with mode: 0644]
installer/modules/nic-shared-modules [new file with mode: 0644]
installer/modules/nic-usb-modules [new file with mode: 0644]
installer/modules/nic-wireless-modules [new file with mode: 0644]
installer/modules/pata-modules [new file with mode: 0644]
installer/modules/pcmcia-modules [new file with mode: 0644]
installer/modules/pcmcia-storage-modules [new file with mode: 0644]
installer/modules/ppp-modules [new file with mode: 0644]
installer/modules/qnx4-modules [new file with mode: 0644]
installer/modules/rtc-modules [new file with mode: 0644]
installer/modules/sata-modules [new file with mode: 0644]
installer/modules/scsi-core-modules [new file with mode: 0644]
installer/modules/scsi-modules [new file with mode: 0644]
installer/modules/serial-modules [new file with mode: 0644]
installer/modules/sound-modules [new file with mode: 0644]
installer/modules/speakup-modules [new file with mode: 0644]
installer/modules/squashfs-modules [new file with mode: 0644]
installer/modules/udf-modules [new file with mode: 0644]
installer/modules/ufs-modules [new file with mode: 0644]
installer/modules/uinput-modules [new file with mode: 0644]
installer/modules/usb-modules [new file with mode: 0644]
installer/modules/usb-serial-modules [new file with mode: 0644]
installer/modules/usb-storage-modules [new file with mode: 0644]
installer/modules/virtio-modules [new file with mode: 0644]
installer/modules/xfs-modules [new file with mode: 0644]
installer/modules/zlib-modules [new file with mode: 0644]
installer/package-list [new file with mode: 0644]
installer/powerpc/kernel-versions [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/affs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/ata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/btrfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/cdrom-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/crc-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/crypto-dm-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/crypto-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/event-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/ext4-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/fat-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/firewire-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/fuse-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/hfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/input-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/isofs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/jfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/kernel-image [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/loop-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/md-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/mouse-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/multipath-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/nbd-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/nic-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/nic-pcmcia-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/nic-shared-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/pata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/pcmcia-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/pcmcia-storage-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/ppp-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/sata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/scsi-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/scsi-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/serial-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/squashfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/udf-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/uinput-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/usb-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/usb-serial-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/usb-storage-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/xfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc-miboot/zlib-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/affs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/ata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/btrfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/cdrom-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/crc-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/crypto-dm-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/crypto-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/event-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/ext4-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/fancontrol-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/fat-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/firewire-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/fuse-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/hfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/hypervisor-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/input-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/isofs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/jfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/kernel-image [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/loop-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/md-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/mouse-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/multipath-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/nbd-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/nic-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/nic-pcmcia-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/nic-shared-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/pata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/pcmcia-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/pcmcia-storage-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/ppp-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/sata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/scsi-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/scsi-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/serial-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/squashfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/udf-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/uinput-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/usb-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/usb-serial-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/usb-storage-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/virtio-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc-powerpc64/xfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/affs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/ata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/btrfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/cdrom-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/crc-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/crypto-dm-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/crypto-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/event-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/ext4-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/fat-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/fb-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/firewire-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/fuse-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/hfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/input-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/isofs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/jfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/kernel-image [new file with mode: 0644]
installer/powerpc/modules/powerpc/loop-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/md-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/mouse-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/multipath-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/nbd-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/nic-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/nic-pcmcia-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/nic-shared-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/pata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/pcmcia-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/pcmcia-storage-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/ppp-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/sata-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/scsi-core-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/scsi-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/serial-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/squashfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/udf-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/uinput-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/usb-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/usb-serial-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/usb-storage-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/virtio-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/xfs-modules [new file with mode: 0644]
installer/powerpc/modules/powerpc/zlib-modules [new file with mode: 0644]
installer/powerpc/package-list [new file with mode: 0644]
installer/ppc64/kernel-versions [new file with mode: 0644]
installer/ppc64/modules/powerpc [new symlink]
installer/ppc64/modules/ppc64 [new symlink]
installer/ppc64/package-list [new symlink]
installer/ppc64el/kernel-versions [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/ata-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/btrfs-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/cdrom-core-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/crc-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/crypto-dm-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/crypto-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/event-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/ext4-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/fancontrol-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/fat-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/firewire-core-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/fuse-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/hypervisor-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/input-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/isofs-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/jfs-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/kernel-image [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/loop-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/md-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/mouse-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/multipath-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/nbd-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/nic-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/nic-shared-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/ppp-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/sata-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/scsi-core-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/scsi-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/serial-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/squashfs-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/udf-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/uinput-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/usb-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/usb-serial-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/usb-storage-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/virtio-modules [new file with mode: 0644]
installer/ppc64el/modules/ppc64el/xfs-modules [new file with mode: 0644]
installer/ppc64el/package-list [new symlink]
installer/s390x/kernel-versions [new file with mode: 0644]
installer/s390x/modules/s390x/btrfs-modules [new file with mode: 0644]
installer/s390x/modules/s390x/crc-modules [new file with mode: 0644]
installer/s390x/modules/s390x/crypto-dm-modules [new file with mode: 0644]
installer/s390x/modules/s390x/crypto-modules [new file with mode: 0644]
installer/s390x/modules/s390x/dasd-extra-modules [new file with mode: 0644]
installer/s390x/modules/s390x/dasd-modules [new file with mode: 0644]
installer/s390x/modules/s390x/ext4-modules [new file with mode: 0644]
installer/s390x/modules/s390x/fat-modules [new file with mode: 0644]
installer/s390x/modules/s390x/fuse-modules [new file with mode: 0644]
installer/s390x/modules/s390x/isofs-modules [new file with mode: 0644]
installer/s390x/modules/s390x/kernel-image [new file with mode: 0644]
installer/s390x/modules/s390x/loop-modules [new file with mode: 0644]
installer/s390x/modules/s390x/md-modules [new file with mode: 0644]
installer/s390x/modules/s390x/multipath-modules [new file with mode: 0644]
installer/s390x/modules/s390x/nbd-modules [new file with mode: 0644]
installer/s390x/modules/s390x/nic-modules [new file with mode: 0644]
installer/s390x/modules/s390x/scsi-core-modules [new file with mode: 0644]
installer/s390x/modules/s390x/scsi-modules [new file with mode: 0644]
installer/s390x/modules/s390x/udf-modules [new file with mode: 0644]
installer/s390x/modules/s390x/virtio-modules [new file with mode: 0644]
installer/s390x/modules/s390x/xfs-modules [new file with mode: 0644]
installer/s390x/modules/s390x/zlib-modules [new file with mode: 0644]
installer/s390x/package-list [new file with mode: 0644]
installer/sh4/kernel-versions [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/btrfs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/cdrom-core-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/crc-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/crypto-dm-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/crypto-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/ext4-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/fat-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/firewire-core-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/fuse-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/i2c-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/isofs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/jfs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/kernel-image [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/loop-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/md-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/minix-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/multipath-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/nbd-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/nic-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/nic-usb-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/pata-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/ppp-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/sata-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/sound-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/speakup-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/squashfs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/udf-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/usb-serial-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/usb-storage-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/virtio-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/xfs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7751r/zlib-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/btrfs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/cdrom-core-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/crc-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/crypto-dm-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/crypto-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/ext4-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/fat-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/firewire-core-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/fuse-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/isofs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/jfs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/kernel-image [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/loop-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/md-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/minix-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/multipath-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/nbd-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/nic-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/nic-usb-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/pata-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/ppp-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/sata-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/sound-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/speakup-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/squashfs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/udf-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/usb-serial-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/xfs-modules [new file with mode: 0644]
installer/sh4/modules/sh4-sh7785lcr/zlib-modules [new file with mode: 0644]
installer/sh4/package-list [new file with mode: 0644]
installer/sparc64/kernel-versions [new file with mode: 0644]
installer/sparc64/modules/sparc64/ata-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/btrfs-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/cdrom-core-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/crc-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/crypto-dm-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/crypto-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/ext4-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/fat-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/fuse-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/input-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/isofs-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/jfs-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/kernel-image [new file with mode: 0644]
installer/sparc64/modules/sparc64/md-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/multipath-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/nbd-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/nic-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/pata-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/ppp-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/sata-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/scsi-core-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/scsi-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/squashfs-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/udf-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/ufs-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/usb-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/usb-storage-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/virtio-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/xfs-modules [new file with mode: 0644]
installer/sparc64/modules/sparc64/zlib-modules [new file with mode: 0644]
installer/sparc64/package-list [new file with mode: 0644]
lib/python/debian_linux/__init__.py [new file with mode: 0644]
lib/python/debian_linux/abi.py [new file with mode: 0644]
lib/python/debian_linux/config.py [new file with mode: 0644]
lib/python/debian_linux/debian.py [new file with mode: 0644]
lib/python/debian_linux/firmware.py [new file with mode: 0644]
lib/python/debian_linux/gencontrol.py [new file with mode: 0644]
lib/python/debian_linux/kconfig.py [new file with mode: 0644]
lib/python/debian_linux/patches.py [new file with mode: 0644]
lib/python/debian_linux/utils.py [new file with mode: 0644]
libcpupower-dev.install [new file with mode: 0644]
libcpupower1.install [new file with mode: 0644]
libcpupower1.symbols [new file with mode: 0644]
liblockdep-dev.README.Debian [new file with mode: 0644]
liblockdep-dev.docs [new file with mode: 0644]
liblockdep-dev.install [new file with mode: 0644]
libusbip-dev.install [new file with mode: 0644]
linux-cpupower.install [new file with mode: 0755]
linux-cpupower.manpages [new file with mode: 0755]
linux-headers-4.9.0-3-4kc-malta.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-5kc-malta.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-686-pae.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-686.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-alpha-generic.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-alpha-smp.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-amd64.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-arm64.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-armmp-lpae.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-armmp.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-loongson-3.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-m68k.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-marvell.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-octeon.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-parisc.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-parisc64-smp.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-powerpc-smp.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-powerpc.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-powerpc64.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-powerpc64le.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-powerpcspe.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-rt-686-pae.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-rt-amd64.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-s390x.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-sh7751r.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-sh7785lcr.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-sparc64-smp.postinst [new file with mode: 0644]
linux-headers-4.9.0-3-sparc64.postinst [new file with mode: 0644]
linux-image-4.9.0-3-4kc-malta-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-4kc-malta.postinst [new file with mode: 0644]
linux-image-4.9.0-3-4kc-malta.postrm [new file with mode: 0644]
linux-image-4.9.0-3-4kc-malta.preinst [new file with mode: 0644]
linux-image-4.9.0-3-4kc-malta.prerm [new file with mode: 0644]
linux-image-4.9.0-3-5kc-malta-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-5kc-malta.postinst [new file with mode: 0644]
linux-image-4.9.0-3-5kc-malta.postrm [new file with mode: 0644]
linux-image-4.9.0-3-5kc-malta.preinst [new file with mode: 0644]
linux-image-4.9.0-3-5kc-malta.prerm [new file with mode: 0644]
linux-image-4.9.0-3-686-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-686-pae-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-686-pae.postinst [new file with mode: 0644]
linux-image-4.9.0-3-686-pae.postrm [new file with mode: 0644]
linux-image-4.9.0-3-686-pae.preinst [new file with mode: 0644]
linux-image-4.9.0-3-686-pae.prerm [new file with mode: 0644]
linux-image-4.9.0-3-686.postinst [new file with mode: 0644]
linux-image-4.9.0-3-686.postrm [new file with mode: 0644]
linux-image-4.9.0-3-686.preinst [new file with mode: 0644]
linux-image-4.9.0-3-686.prerm [new file with mode: 0644]
linux-image-4.9.0-3-alpha-generic-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-alpha-generic.postinst [new file with mode: 0644]
linux-image-4.9.0-3-alpha-generic.postrm [new file with mode: 0644]
linux-image-4.9.0-3-alpha-generic.preinst [new file with mode: 0644]
linux-image-4.9.0-3-alpha-generic.prerm [new file with mode: 0644]
linux-image-4.9.0-3-alpha-smp-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-alpha-smp.postinst [new file with mode: 0644]
linux-image-4.9.0-3-alpha-smp.postrm [new file with mode: 0644]
linux-image-4.9.0-3-alpha-smp.preinst [new file with mode: 0644]
linux-image-4.9.0-3-alpha-smp.prerm [new file with mode: 0644]
linux-image-4.9.0-3-amd64-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-amd64.postinst [new file with mode: 0644]
linux-image-4.9.0-3-amd64.postrm [new file with mode: 0644]
linux-image-4.9.0-3-amd64.preinst [new file with mode: 0644]
linux-image-4.9.0-3-amd64.prerm [new file with mode: 0644]
linux-image-4.9.0-3-arm64-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-arm64.postinst [new file with mode: 0644]
linux-image-4.9.0-3-arm64.postrm [new file with mode: 0644]
linux-image-4.9.0-3-arm64.preinst [new file with mode: 0644]
linux-image-4.9.0-3-arm64.prerm [new file with mode: 0644]
linux-image-4.9.0-3-armmp-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-armmp-lpae-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-armmp-lpae.postinst [new file with mode: 0644]
linux-image-4.9.0-3-armmp-lpae.postrm [new file with mode: 0644]
linux-image-4.9.0-3-armmp-lpae.preinst [new file with mode: 0644]
linux-image-4.9.0-3-armmp-lpae.prerm [new file with mode: 0644]
linux-image-4.9.0-3-armmp.postinst [new file with mode: 0644]
linux-image-4.9.0-3-armmp.postrm [new file with mode: 0644]
linux-image-4.9.0-3-armmp.preinst [new file with mode: 0644]
linux-image-4.9.0-3-armmp.prerm [new file with mode: 0644]
linux-image-4.9.0-3-loongson-3-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-loongson-3.postinst [new file with mode: 0644]
linux-image-4.9.0-3-loongson-3.postrm [new file with mode: 0644]
linux-image-4.9.0-3-loongson-3.preinst [new file with mode: 0644]
linux-image-4.9.0-3-loongson-3.prerm [new file with mode: 0644]
linux-image-4.9.0-3-m68k-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-m68k.postinst [new file with mode: 0644]
linux-image-4.9.0-3-m68k.postrm [new file with mode: 0644]
linux-image-4.9.0-3-m68k.preinst [new file with mode: 0644]
linux-image-4.9.0-3-m68k.prerm [new file with mode: 0644]
linux-image-4.9.0-3-marvell-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-marvell.postinst [new file with mode: 0644]
linux-image-4.9.0-3-marvell.postrm [new file with mode: 0644]
linux-image-4.9.0-3-marvell.preinst [new file with mode: 0644]
linux-image-4.9.0-3-marvell.prerm [new file with mode: 0644]
linux-image-4.9.0-3-octeon-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-octeon.postinst [new file with mode: 0644]
linux-image-4.9.0-3-octeon.postrm [new file with mode: 0644]
linux-image-4.9.0-3-octeon.preinst [new file with mode: 0644]
linux-image-4.9.0-3-octeon.prerm [new file with mode: 0644]
linux-image-4.9.0-3-parisc-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-parisc.postinst [new file with mode: 0644]
linux-image-4.9.0-3-parisc.postrm [new file with mode: 0644]
linux-image-4.9.0-3-parisc.preinst [new file with mode: 0644]
linux-image-4.9.0-3-parisc.prerm [new file with mode: 0644]
linux-image-4.9.0-3-parisc64-smp-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-parisc64-smp.postinst [new file with mode: 0644]
linux-image-4.9.0-3-parisc64-smp.postrm [new file with mode: 0644]
linux-image-4.9.0-3-parisc64-smp.preinst [new file with mode: 0644]
linux-image-4.9.0-3-parisc64-smp.prerm [new file with mode: 0644]
linux-image-4.9.0-3-powerpc-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-powerpc-smp-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-powerpc-smp.postinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpc-smp.postrm [new file with mode: 0644]
linux-image-4.9.0-3-powerpc-smp.preinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpc-smp.prerm [new file with mode: 0644]
linux-image-4.9.0-3-powerpc.postinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpc.postrm [new file with mode: 0644]
linux-image-4.9.0-3-powerpc.preinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpc.prerm [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64.postinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64.postrm [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64.preinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64.prerm [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64le-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64le.postinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64le.postrm [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64le.preinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpc64le.prerm [new file with mode: 0644]
linux-image-4.9.0-3-powerpcspe-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-powerpcspe.postinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpcspe.postrm [new file with mode: 0644]
linux-image-4.9.0-3-powerpcspe.preinst [new file with mode: 0644]
linux-image-4.9.0-3-powerpcspe.prerm [new file with mode: 0644]
linux-image-4.9.0-3-rt-686-pae-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-rt-686-pae.postinst [new file with mode: 0644]
linux-image-4.9.0-3-rt-686-pae.postrm [new file with mode: 0644]
linux-image-4.9.0-3-rt-686-pae.preinst [new file with mode: 0644]
linux-image-4.9.0-3-rt-686-pae.prerm [new file with mode: 0644]
linux-image-4.9.0-3-rt-amd64-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-rt-amd64.postinst [new file with mode: 0644]
linux-image-4.9.0-3-rt-amd64.postrm [new file with mode: 0644]
linux-image-4.9.0-3-rt-amd64.preinst [new file with mode: 0644]
linux-image-4.9.0-3-rt-amd64.prerm [new file with mode: 0644]
linux-image-4.9.0-3-s390x-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-s390x.postinst [new file with mode: 0644]
linux-image-4.9.0-3-s390x.postrm [new file with mode: 0644]
linux-image-4.9.0-3-s390x.preinst [new file with mode: 0644]
linux-image-4.9.0-3-s390x.prerm [new file with mode: 0644]
linux-image-4.9.0-3-sh7751r-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-sh7751r.postinst [new file with mode: 0644]
linux-image-4.9.0-3-sh7751r.postrm [new file with mode: 0644]
linux-image-4.9.0-3-sh7751r.preinst [new file with mode: 0644]
linux-image-4.9.0-3-sh7751r.prerm [new file with mode: 0644]
linux-image-4.9.0-3-sh7785lcr-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-sh7785lcr.postinst [new file with mode: 0644]
linux-image-4.9.0-3-sh7785lcr.postrm [new file with mode: 0644]
linux-image-4.9.0-3-sh7785lcr.preinst [new file with mode: 0644]
linux-image-4.9.0-3-sh7785lcr.prerm [new file with mode: 0644]
linux-image-4.9.0-3-sparc64-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-sparc64-smp-dbg.lintian-overrides [new file with mode: 0644]
linux-image-4.9.0-3-sparc64-smp.postinst [new file with mode: 0644]
linux-image-4.9.0-3-sparc64-smp.postrm [new file with mode: 0644]
linux-image-4.9.0-3-sparc64-smp.preinst [new file with mode: 0644]
linux-image-4.9.0-3-sparc64-smp.prerm [new file with mode: 0644]
linux-image-4.9.0-3-sparc64.postinst [new file with mode: 0644]
linux-image-4.9.0-3-sparc64.postrm [new file with mode: 0644]
linux-image-4.9.0-3-sparc64.preinst [new file with mode: 0644]
linux-image-4.9.0-3-sparc64.prerm [new file with mode: 0644]
linux-perf-4.9.lintian-overrides [new file with mode: 0644]
lockdep.dirs [new file with mode: 0644]
patches/bugfix/all/cpupower-bump-soname-version.patch [new file with mode: 0644]
patches/bugfix/all/cpupower-fix-checks-for-cpu-existence.patch [new file with mode: 0644]
patches/bugfix/all/disable-some-marvell-phys.patch [new file with mode: 0644]
patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch [new file with mode: 0644]
patches/bugfix/all/firmware_class-log-every-success-and-failure.patch [new file with mode: 0644]
patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch [new file with mode: 0644]
patches/bugfix/all/kbuild-do-not-use-hyphen-in-exported-variable-name.patch [new file with mode: 0644]
patches/bugfix/all/kbuild-fix-recordmcount-dependency.patch [new file with mode: 0644]
patches/bugfix/all/kbuild-include-addtree-remove-quotes-before-matching-path.patch [new file with mode: 0644]
patches/bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch [new file with mode: 0644]
patches/bugfix/all/liblockdep-define-the-array_size-macro.patch [new file with mode: 0644]
patches/bugfix/all/liblockdep-enable-wall-by-default.patch [new file with mode: 0644]
patches/bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch [new file with mode: 0644]
patches/bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch [new file with mode: 0644]
patches/bugfix/all/liblockdep-fix-undefined-symbol-prandom_u32.patch [new file with mode: 0644]
patches/bugfix/all/liblockdep-fix-unused-value-warnings.patch [new file with mode: 0644]
patches/bugfix/all/liblockdep-reduce-max_lock_depth-to-avoid-overflowin.patch [new file with mode: 0644]
patches/bugfix/all/lockdep-fix-oot-build.patch [new file with mode: 0644]
patches/bugfix/all/lockdep-fix-soname.patch [new file with mode: 0644]
patches/bugfix/all/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch [new file with mode: 0644]
patches/bugfix/all/macsec-dynamically-allocate-space-for-sglist.patch [new file with mode: 0644]
patches/bugfix/all/media-dvb-usb-dibusb-mc-common-add-module_license.patch [new file with mode: 0644]
patches/bugfix/all/module-disable-matching-missing-version-crc.patch [new file with mode: 0644]
patches/bugfix/all/net-packet-fix-overflow-in-check-for-tp_frame_nr.patch [new file with mode: 0644]
patches/bugfix/all/net-packet-fix-overflow-in-check-for-tp_reserve.patch [new file with mode: 0644]
patches/bugfix/all/nfsd-check-for-oversized-NFSv2-v3-arguments.patch [new file with mode: 0644]
patches/bugfix/all/nfsd-stricter-decoding-of-write-like-NFSv2-v3-ops.patch [new file with mode: 0644]
patches/bugfix/all/nfsd4-minor-NFSv2-v3-write-decoding-cleanup.patch [new file with mode: 0644]
patches/bugfix/all/partially-revert-usb-kconfig-using-select-for-usb_co.patch [new file with mode: 0644]
patches/bugfix/all/ping-implement-proper-locking.patch [new file with mode: 0644]
patches/bugfix/all/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch [new file with mode: 0644]
patches/bugfix/all/tools-build-remove-bpf-run-time-check-at-build-time.patch [new file with mode: 0644]
patches/bugfix/all/tools-lib-lockdep-use-ldflags.patch [new file with mode: 0644]
patches/bugfix/all/tools-lib-traceevent-fix-use-of-uninitialized-variables.patch [new file with mode: 0644]
patches/bugfix/all/tools-lib-traceevent-use-ldflags.patch [new file with mode: 0644]
patches/bugfix/all/tools-perf-man-date.patch [new file with mode: 0644]
patches/bugfix/all/tools-perf-remove-shebangs.patch [new file with mode: 0644]
patches/bugfix/all/usbip-document-tcp-wrappers.patch [new file with mode: 0644]
patches/bugfix/alpha/alpha-uapi-add-support-for-__sane_userspace_types__.patch [new file with mode: 0644]
patches/bugfix/alpha/revert-alpha-move-exports-to-actual-definitions.patch [new file with mode: 0644]
patches/bugfix/arm/arm-dts-kirkwood-fix-sata-pinmux-ing-for-ts419.patch [new file with mode: 0644]
patches/bugfix/ia64/revert-ia64-move-exports-to-definitions.patch [new file with mode: 0644]
patches/bugfix/m68k/revert-m68k-move-exports-to-definitions.patch [new file with mode: 0644]
patches/bugfix/powerpc/powerpc-fix-missing-crcs-add-yet-more-asm-prototypes.patch [new file with mode: 0644]
patches/bugfix/powerpc/powerpc-remove-mac-on-linux-hooks.patch [new file with mode: 0644]
patches/bugfix/s390/revert-s390-move-exports-to-definitions.patch [new file with mode: 0644]
patches/bugfix/sparc/revert-sparc-move-exports-to-definitions.patch [new file with mode: 0644]
patches/bugfix/x86/cpupower-fix-turbo-frequency-reporting-for-pre-sandy.patch [new file with mode: 0644]
patches/bugfix/x86/revert-perf-build-fix-libunwind-feature-detection-on.patch [new file with mode: 0644]
patches/bugfix/x86/tools-hv-fix-fortify-format-warning.patch [new file with mode: 0644]
patches/bugfix/x86/viafb-autoload-on-olpc-xo1.5-only.patch [new file with mode: 0644]
patches/debian/add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by-default.patch [new file with mode: 0644]
patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch [new file with mode: 0644]
patches/debian/amd64-don-t-warn-about-expected-w+x-pages-on-xen.patch [new file with mode: 0644]
patches/debian/arch-sh4-fix-uimage-build.patch [new file with mode: 0644]
patches/debian/cdc_ncm-cdc_mbim-use-ncm-by-default.patch [new file with mode: 0644]
patches/debian/dccp-disable-auto-loading-as-mitigation-against-local-exploits.patch [new file with mode: 0644]
patches/debian/decnet-Disable-auto-loading-as-mitigation-against-lo.patch [new file with mode: 0644]
patches/debian/dfsg/arch-powerpc-platforms-8xx-ucode-disable.patch [new file with mode: 0644]
patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch [new file with mode: 0644]
patches/debian/dfsg/drivers-net-appletalk-cops.patch [new file with mode: 0644]
patches/debian/dfsg/files-1 [new file with mode: 0644]
patches/debian/dfsg/firmware-cleanup.patch [new file with mode: 0644]
patches/debian/dfsg/video-remove-nvidiafb-and-rivafb.patch [new file with mode: 0644]
patches/debian/dfsg/vs6624-disable.patch [new file with mode: 0644]
patches/debian/fanotify-taint-on-use-of-fanotify_access_permissions.patch [new file with mode: 0644]
patches/debian/fjes-disable-autoload.patch [new file with mode: 0644]
patches/debian/fs-enable-link-security-restrictions-by-default.patch [new file with mode: 0644]
patches/debian/gitignore.patch [new file with mode: 0644]
patches/debian/i386-686-pae-pci-set-pci-nobios-by-default.patch [new file with mode: 0644]
patches/debian/iwlwifi-do-not-request-unreleased-firmware.patch [new file with mode: 0644]
patches/debian/kernelvariables.patch [new file with mode: 0644]
patches/debian/mips-disable-werror.patch [new file with mode: 0644]
patches/debian/modpost-symbol-prefix.patch [new file with mode: 0644]
patches/debian/powerpcspe-omit-uimage.patch [new file with mode: 0644]
patches/debian/rds-Disable-auto-loading-as-mitigation-against-local.patch [new file with mode: 0644]
patches/debian/sched-autogroup-disabled.patch [new file with mode: 0644]
patches/debian/snd-pcsp-disable-autoload.patch [new file with mode: 0644]
patches/debian/time-mark-timer_stats-as-broken.patch [new file with mode: 0644]
patches/debian/tools-perf-install.patch [new file with mode: 0644]
patches/debian/tools-perf-version.patch [new file with mode: 0644]
patches/debian/uname-version-timestamp.patch [new file with mode: 0644]
patches/debian/version.patch [new file with mode: 0644]
patches/debian/yama-disable-by-default.patch [new file with mode: 0644]
patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch [new file with mode: 0644]
patches/features/all/aufs4/aufs4-base.patch [new file with mode: 0644]
patches/features/all/aufs4/aufs4-mmap.patch [new file with mode: 0644]
patches/features/all/aufs4/aufs4-standalone.patch [new file with mode: 0644]
patches/features/all/aufs4/gen-patch [new file with mode: 0755]
patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch [new file with mode: 0644]
patches/features/all/netfilter-nft_ct-add-notrack-support.patch [new file with mode: 0644]
patches/features/all/rt/0001-futex-Cleanup-variable-names-for-futex_top_waiter.patch [new file with mode: 0644]
patches/features/all/rt/0002-futex-Use-smp_store_release-in-mark_wake_futex.patch [new file with mode: 0644]
patches/features/all/rt/0003-futex-Remove-rt_mutex_deadlock_account_.patch [new file with mode: 0644]
patches/features/all/rt/0004-futex-rt_mutex-Provide-futex-specific-rt_mutex-API.patch [new file with mode: 0644]
patches/features/all/rt/0005-futex-Change-locking-rules.patch [new file with mode: 0644]
patches/features/all/rt/0006-futex-Cleanup-refcounting.patch [new file with mode: 0644]
patches/features/all/rt/0007-futex-Rework-inconsistent-rt_mutex-futex_q-state.patch [new file with mode: 0644]
patches/features/all/rt/0008-futex-Pull-rt_mutex_futex_unlock-out-from-under-hb-l.patch [new file with mode: 0644]
patches/features/all/rt/0009-futex-rt_mutex-Introduce-rt_mutex_init_waiter.patch [new file with mode: 0644]
patches/features/all/rt/0010-futex-rt_mutex-Restructure-rt_mutex_finish_proxy_loc.patch [new file with mode: 0644]
patches/features/all/rt/0011-futex-Rework-futex_lock_pi-to-use-rt_mutex_-_proxy_l.patch [new file with mode: 0644]
patches/features/all/rt/0012-futex-Futex_unlock_pi-determinism.patch [new file with mode: 0644]
patches/features/all/rt/0013-futex-Drop-hb-lock-before-enqueueing-on-the-rtmutex.patch [new file with mode: 0644]
patches/features/all/rt/ARM-enable-irq-in-translation-section-permission-fau.patch [new file with mode: 0644]
patches/features/all/rt/HACK-printk-drop-the-logbuf_lock-more-often.patch [new file with mode: 0644]
patches/features/all/rt/KVM-arm-arm64-downgrade-preempt_disable-d-region-to-.patch [new file with mode: 0644]
patches/features/all/rt/KVM-lapic-mark-LAPIC-timer-handler-as-irqsafe.patch [new file with mode: 0644]
patches/features/all/rt/NFSv4-replace-seqcount_t-with-a-seqlock_t.patch [new file with mode: 0644]
patches/features/all/rt/acpi-rt-Convert-acpi_gbl_hardware-lock-back-to-a-raw.patch [new file with mode: 0644]
patches/features/all/rt/arch-arm64-Add-lazy-preempt-support.patch [new file with mode: 0644]
patches/features/all/rt/arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch [new file with mode: 0644]
patches/features/all/rt/arm-at91-tclib-default-to-tclib-timer-for-rt.patch [new file with mode: 0644]
patches/features/all/rt/arm-convert-boot-lock-to-raw.patch [new file with mode: 0644]
patches/features/all/rt/arm-enable-highmem-for-rt.patch [new file with mode: 0644]
patches/features/all/rt/arm-highmem-flush-tlb-on-unmap.patch [new file with mode: 0644]
patches/features/all/rt/arm-include-definition-for-cpumask_t.patch [new file with mode: 0644]
patches/features/all/rt/arm-kprobe-replace-patch_lock-to-raw-lock.patch [new file with mode: 0644]
patches/features/all/rt/arm-preempt-lazy-support.patch [new file with mode: 0644]
patches/features/all/rt/arm-unwind-use_raw_lock.patch [new file with mode: 0644]
patches/features/all/rt/arm64-xen--Make-XEN-depend-on-non-rt.patch [new file with mode: 0644]
patches/features/all/rt/at91_dont_enable_disable_clock.patch [new file with mode: 0644]
patches/features/all/rt/ata-disable-interrupts-if-non-rt.patch [new file with mode: 0644]
patches/features/all/rt/block-blk-mq-use-swait.patch [new file with mode: 0644]
patches/features/all/rt/block-mq-don-t-complete-requests-via-IPI.patch [new file with mode: 0644]
patches/features/all/rt/block-mq-drop-preempt-disable.patch [new file with mode: 0644]
patches/features/all/rt/block-mq-use-cpu_light.patch [new file with mode: 0644]
patches/features/all/rt/block-shorten-interrupt-disabled-regions.patch [new file with mode: 0644]
patches/features/all/rt/block-use-cpu-chill.patch [new file with mode: 0644]
patches/features/all/rt/bug-rt-dependend-variants.patch [new file with mode: 0644]
patches/features/all/rt/cgroups-scheduling-while-atomic-in-cgroup-code.patch [new file with mode: 0644]
patches/features/all/rt/cgroups-use-simple-wait-in-css_release.patch [new file with mode: 0644]
patches/features/all/rt/clockevents-drivers-timer-atmel-pit-fix-double-free_.patch [new file with mode: 0644]
patches/features/all/rt/clocksource-tclib-allow-higher-clockrates.patch [new file with mode: 0644]
patches/features/all/rt/completion-use-simple-wait-queues.patch [new file with mode: 0644]
patches/features/all/rt/cond-resched-lock-rt-tweak.patch [new file with mode: 0644]
patches/features/all/rt/cond-resched-softirq-rt.patch [new file with mode: 0644]
patches/features/all/rt/connector-cn_proc-Protect-send_msg-with-a-local-lock.patch [new file with mode: 0644]
patches/features/all/rt/cpu-hotplug-Document-why-PREEMPT_RT-uses-a-spinlock.patch [new file with mode: 0644]
patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/cpu-rt-rework-cpu-down.patch [new file with mode: 0644]
patches/features/all/rt/cpu_chill-Add-a-UNINTERRUPTIBLE-hrtimer_nanosleep.patch [new file with mode: 0644]
patches/features/all/rt/cpu_down_move_migrate_enable_back.patch [new file with mode: 0644]
patches/features/all/rt/cpufreq-drop-K8-s-driver-from-beeing-selected.patch [new file with mode: 0644]
patches/features/all/rt/cpumask-disable-offstack-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/cpuset-Convert-callback_lock-to-raw_spinlock_t.patch [new file with mode: 0644]
patches/features/all/rt/crypto-Reduce-preempt-disabled-regions-more-algos.patch [new file with mode: 0644]
patches/features/all/rt/debugobjects-rt.patch [new file with mode: 0644]
patches/features/all/rt/dm-make-rt-aware.patch [new file with mode: 0644]
patches/features/all/rt/drivers-block-zram-Replace-bit-spinlocks-with-rtmute.patch [new file with mode: 0644]
patches/features/all/rt/drivers-net-8139-disable-irq-nosync.patch [new file with mode: 0644]
patches/features/all/rt/drivers-net-vortex-fix-locking-issues.patch [new file with mode: 0644]
patches/features/all/rt/drivers-random-reduce-preempt-disabled-region.patch [new file with mode: 0644]
patches/features/all/rt/drivers-tty-fix-omap-lock-crap.patch [new file with mode: 0644]
patches/features/all/rt/drivers-tty-pl011-irq-disable-madness.patch [new file with mode: 0644]
patches/features/all/rt/drivers-zram-Don-t-disable-preemption-in-zcomp_strea.patch [new file with mode: 0644]
patches/features/all/rt/drm-i915-drop-trace_i915_gem_ring_dispatch-onrt.patch [new file with mode: 0644]
patches/features/all/rt/drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch [new file with mode: 0644]
patches/features/all/rt/drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch [new file with mode: 0644]
patches/features/all/rt/epoll-use-get-cpu-light.patch [new file with mode: 0644]
patches/features/all/rt/fs-aio-simple-simple-work.patch [new file with mode: 0644]
patches/features/all/rt/fs-block-rt-support.patch [new file with mode: 0644]
patches/features/all/rt/fs-dcache-include-wait.h.patch [new file with mode: 0644]
patches/features/all/rt/fs-dcache-init-in_lookup_hashtable.patch [new file with mode: 0644]
patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch [new file with mode: 0644]
patches/features/all/rt/fs-dcache-use-swait_queue-instead-of-waitqueue.patch [new file with mode: 0644]
patches/features/all/rt/fs-jbd-replace-bh_state-lock.patch [new file with mode: 0644]
patches/features/all/rt/fs-jbd2-pull-your-plug-when-waiting-for-space.patch [new file with mode: 0644]
patches/features/all/rt/fs-namespace-preemption-fix.patch [new file with mode: 0644]
patches/features/all/rt/fs-nfs-turn-rmdir_sem-into-a-semaphore.patch [new file with mode: 0644]
patches/features/all/rt/fs-ntfs-disable-interrupt-non-rt.patch [new file with mode: 0644]
patches/features/all/rt/fs-replace-bh_uptodate_lock-for-rt.patch [new file with mode: 0644]
patches/features/all/rt/ftrace-Fix-trace-header-alignment.patch [new file with mode: 0644]
patches/features/all/rt/ftrace-migrate-disable-tracing.patch [new file with mode: 0644]
patches/features/all/rt/futex-Ensure-lock-unlock-symetry-versus-pi_lock-and-.patch [new file with mode: 0644]
patches/features/all/rt/futex-requeue-pi-fix.patch [new file with mode: 0644]
patches/features/all/rt/futex-workaround-migrate_disable-enable-in-different.patch [new file with mode: 0644]
patches/features/all/rt/genirq-disable-irqpoll-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/genirq-do-not-invoke-the-affinity-callback-via-a-wor.patch [new file with mode: 0644]
patches/features/all/rt/genirq-force-threading.patch [new file with mode: 0644]
patches/features/all/rt/genirq-update-irq_set_irqchip_state-documentation.patch [new file with mode: 0644]
patches/features/all/rt/genpatch.py [new file with mode: 0755]
patches/features/all/rt/gpu_don_t_check_for_the_lock_owner.patch [new file with mode: 0644]
patches/features/all/rt/hotplug-Use-set_cpus_allowed_ptr-in-sync_unplug_thre.patch [new file with mode: 0644]
patches/features/all/rt/hotplug-light-get-online-cpus.patch [new file with mode: 0644]
patches/features/all/rt/hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch [new file with mode: 0644]
patches/features/all/rt/hotplug-use-migrate-disable.patch [new file with mode: 0644]
patches/features/all/rt/hrtimer-Move-schedule_work-call-to-helper-thread.patch [new file with mode: 0644]
patches/features/all/rt/hrtimer-enfore-64byte-alignment.patch [new file with mode: 0644]
patches/features/all/rt/hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch [new file with mode: 0644]
patches/features/all/rt/hrtimers-prepare-full-preemption.patch [new file with mode: 0644]
patches/features/all/rt/i915-bogus-warning-from-i915-when-running-on-PREEMPT.patch [new file with mode: 0644]
patches/features/all/rt/ide-use-nort-local-irq-variants.patch [new file with mode: 0644]
patches/features/all/rt/idr-use-local-lock-for-protection.patch [new file with mode: 0644]
patches/features/all/rt/infiniband-mellanox-ib-use-nort-irq.patch [new file with mode: 0644]
patches/features/all/rt/inpt-gameport-use-local-irq-nort.patch [new file with mode: 0644]
patches/features/all/rt/introduce_migrate_disable_cpu_light.patch [new file with mode: 0644]
patches/features/all/rt/iommu-amd--Use-WARN_ON_NORT.patch [new file with mode: 0644]
patches/features/all/rt/iommu-iova-don-t-disable-preempt-around-this_cpu_ptr.patch [new file with mode: 0644]
patches/features/all/rt/iommu-vt-d-don-t-disable-preemption-while-accessing-.patch [new file with mode: 0644]
patches/features/all/rt/ipc-sem-rework-semaphore-wakeups.patch [new file with mode: 0644]
patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch [new file with mode: 0644]
patches/features/all/rt/irqwork-Move-irq-safe-work-to-irq-context.patch [new file with mode: 0644]
patches/features/all/rt/irqwork-push_most_work_into_softirq_context.patch [new file with mode: 0644]
patches/features/all/rt/jump-label-rt.patch [new file with mode: 0644]
patches/features/all/rt/kconfig-disable-a-few-options-rt.patch [new file with mode: 0644]
patches/features/all/rt/kconfig-preempt-rt-full.patch [new file with mode: 0644]
patches/features/all/rt/kernel-SRCU-provide-a-static-initializer.patch [new file with mode: 0644]
patches/features/all/rt/kernel-cpu-fix-cpu-down-problem-if-kthread-s-cpu-is-.patch [new file with mode: 0644]
patches/features/all/rt/kernel-hotplug-restore-original-cpu-mask-oncpu-down.patch [new file with mode: 0644]
patches/features/all/rt/kernel-migrate_disable-do-fastpath-in-atomic-irqs-of.patch [new file with mode: 0644]
patches/features/all/rt/kernel-perf-mark-perf_cpu_context-s-timer-as-irqsafe.patch [new file with mode: 0644]
patches/features/all/rt/kernel-printk-Don-t-try-to-print-from-IRQ-NMI-region.patch [new file with mode: 0644]
patches/features/all/rt/kernel-sched-move-stack-kprobe-clean-up-to-__put_tas.patch [new file with mode: 0644]
patches/features/all/rt/kernel-softirq-unlock-with-irqs-on.patch [new file with mode: 0644]
patches/features/all/rt/kgb-serial-hackaround.patch [new file with mode: 0644]
patches/features/all/rt/latency-hist.patch [new file with mode: 0644]
patches/features/all/rt/latency_hist-update-sched_wakeup-probe.patch [new file with mode: 0644]
patches/features/all/rt/latencyhist-disable-jump-labels.patch [new file with mode: 0644]
patches/features/all/rt/leds-trigger-disable-CPU-trigger-on-RT.patch [new file with mode: 0644]
patches/features/all/rt/list_bl-fixup-bogus-lockdep-warning.patch [new file with mode: 0644]
patches/features/all/rt/list_bl.h-make-list-head-locking-RT-safe.patch [new file with mode: 0644]
patches/features/all/rt/local-irq-rt-depending-variants.patch [new file with mode: 0644]
patches/features/all/rt/locallock-add-local_lock_on.patch [new file with mode: 0644]
patches/features/all/rt/localversion.patch [new file with mode: 0644]
patches/features/all/rt/lockdep-Fix-compilation-error-for-CONFIG_MODULES-and.patch [new file with mode: 0644]
patches/features/all/rt/lockdep-Fix-per-cpu-static-objects.patch [new file with mode: 0644]
patches/features/all/rt/lockdep-Handle-statically-initialized-PER_CPU-locks-.patch [new file with mode: 0644]
patches/features/all/rt/lockdep-no-softirq-accounting-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/lockdep-selftest-fix-warnings-due-to-missing-PREEMPT.patch [new file with mode: 0644]
patches/features/all/rt/lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch [new file with mode: 0644]
patches/features/all/rt/locking-locktorture-Do-NOT-include-rwlock.h-directly.patch [new file with mode: 0644]
patches/features/all/rt/locking-percpu-rwsem-use-swait-for-the-wating-writer.patch [new file with mode: 0644]
patches/features/all/rt/md-disable-bcache.patch [new file with mode: 0644]
patches/features/all/rt/md-raid5-percpu-handling-rt-aware.patch [new file with mode: 0644]
patches/features/all/rt/mips-disable-highmem-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/mm--rt--Fix-generic-kmap_atomic-for-RT.patch [new file with mode: 0644]
patches/features/all/rt/mm-backing-dev-don-t-disable-IRQs-in-wb_congested_pu.patch [new file with mode: 0644]
patches/features/all/rt/mm-bounce-local-irq-save-nort.patch [new file with mode: 0644]
patches/features/all/rt/mm-convert-swap-to-percpu-locked.patch [new file with mode: 0644]
patches/features/all/rt/mm-disable-sloub-rt.patch [new file with mode: 0644]
patches/features/all/rt/mm-enable-slub.patch [new file with mode: 0644]
patches/features/all/rt/mm-make-vmstat-rt-aware.patch [new file with mode: 0644]
patches/features/all/rt/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch [new file with mode: 0644]
patches/features/all/rt/mm-memcontrol-do_not_disable_irq.patch [new file with mode: 0644]
patches/features/all/rt/mm-memcontrol-mem_cgroup_migrate-replace-another-loc.patch [new file with mode: 0644]
patches/features/all/rt/mm-page-alloc-use-local-lock-on-target-cpu.patch [new file with mode: 0644]
patches/features/all/rt/mm-page_alloc-reduce-lock-sections-further.patch [new file with mode: 0644]
patches/features/all/rt/mm-page_alloc-rt-friendly-per-cpu-pages.patch [new file with mode: 0644]
patches/features/all/rt/mm-perform-lru_add_drain_all-remotely.patch [new file with mode: 0644]
patches/features/all/rt/mm-protect-activate-switch-mm.patch [new file with mode: 0644]
patches/features/all/rt/mm-rt-kmap-atomic-scheduling.patch [new file with mode: 0644]
patches/features/all/rt/mm-scatterlist-dont-disable-irqs-on-RT.patch [new file with mode: 0644]
patches/features/all/rt/mm-vmalloc-use-get-cpu-light.patch [new file with mode: 0644]
patches/features/all/rt/mm-workingset-do-not-protect-workingset_shadow_nodes.patch [new file with mode: 0644]
patches/features/all/rt/mm_zsmalloc_copy_with_get_cpu_var_and_locking.patch [new file with mode: 0644]
patches/features/all/rt/mmci-remove-bogus-irq-save.patch [new file with mode: 0644]
patches/features/all/rt/move_sched_delayed_work_to_helper.patch [new file with mode: 0644]
patches/features/all/rt/mutex-no-spin-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/net-Have-__napi_schedule_irqoff-disable-interrupts-o.patch [new file with mode: 0644]
patches/features/all/rt/net-Qdisc-use-a-seqlock-instead-seqcount.patch [new file with mode: 0644]
patches/features/all/rt/net-add-a-lock-around-icmp_sk.patch [new file with mode: 0644]
patches/features/all/rt/net-add-back-the-missing-serialization-in-ip_send_un.patch [new file with mode: 0644]
patches/features/all/rt/net-another-local-irq-disable-alloc-atomic-headache.patch [new file with mode: 0644]
patches/features/all/rt/net-core-cpuhotplug-drain-input_pkt_queue-lockless.patch [new file with mode: 0644]
patches/features/all/rt/net-core-protect-users-of-napi_alloc_cache-against-r.patch [new file with mode: 0644]
patches/features/all/rt/net-dev-always-take-qdisc-s-busylock-in-__dev_xmit_s.patch [new file with mode: 0644]
patches/features/all/rt/net-fix-iptable-xt-write-recseq-begin-rt-fallout.patch [new file with mode: 0644]
patches/features/all/rt/net-make-devnet_rename_seq-a-mutex.patch [new file with mode: 0644]
patches/features/all/rt/net-move-xmit_recursion-to-per-task-variable-on-RT.patch [new file with mode: 0644]
patches/features/all/rt/net-prevent-abba-deadlock.patch [new file with mode: 0644]
patches/features/all/rt/net-provide-a-way-to-delegate-processing-a-softirq-t.patch [new file with mode: 0644]
patches/features/all/rt/net-sched-dev_deactivate_many-use-msleep-1-instead-o.patch [new file with mode: 0644]
patches/features/all/rt/net-use-cpu-chill.patch [new file with mode: 0644]
patches/features/all/rt/net-wireless-warn-nort.patch [new file with mode: 0644]
patches/features/all/rt/oleg-signal-rt-fix.patch [new file with mode: 0644]
patches/features/all/rt/panic-disable-random-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch [new file with mode: 0644]
patches/features/all/rt/pci-access-use-__wake_up_all_locked.patch [new file with mode: 0644]
patches/features/all/rt/percpu_ida-use-locklocks.patch [new file with mode: 0644]
patches/features/all/rt/perf-make-swevent-hrtimer-irqsafe.patch [new file with mode: 0644]
patches/features/all/rt/peter_zijlstra-frob-rcu.patch [new file with mode: 0644]
patches/features/all/rt/peterz-percpu-rwsem-rt.patch [new file with mode: 0644]
patches/features/all/rt/peterz-srcu-crypto-chain.patch [new file with mode: 0644]
patches/features/all/rt/pid.h-include-atomic.h.patch [new file with mode: 0644]
patches/features/all/rt/pinctrl-qcom-Use-raw-spinlock-variants.patch [new file with mode: 0644]
patches/features/all/rt/ping-sysrq.patch [new file with mode: 0644]
patches/features/all/rt/posix-timers-no-broadcast.patch [new file with mode: 0644]
patches/features/all/rt/posix-timers-thread-posix-cpu-timers-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/power-disable-highmem-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/power-use-generic-rwsem-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/powerpc-kvm-Disable-in-kernel-MPIC-emulation-for-PRE.patch [new file with mode: 0644]
patches/features/all/rt/powerpc-preempt-lazy-support.patch [new file with mode: 0644]
patches/features/all/rt/powerpc-ps3-device-init.c-adapt-to-completions-using.patch [new file with mode: 0644]
patches/features/all/rt/preempt-lazy-support.patch [new file with mode: 0644]
patches/features/all/rt/preempt-nort-rt-variants.patch [new file with mode: 0644]
patches/features/all/rt/printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch [new file with mode: 0644]
patches/features/all/rt/printk-kill.patch [new file with mode: 0644]
patches/features/all/rt/printk-rt-aware.patch [new file with mode: 0644]
patches/features/all/rt/ptrace-fix-ptrace-vs-tasklist_lock-race.patch [new file with mode: 0644]
patches/features/all/rt/radix-tree-use-local-locks.patch [new file with mode: 0644]
patches/features/all/rt/random-make-it-work-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/rbtree-include-rcu.h-because-we-use-it.patch [new file with mode: 0644]
patches/features/all/rt/rcu-Eliminate-softirq-processing-from-rcutree.patch [new file with mode: 0644]
patches/features/all/rt/rcu-disable-rcu-fast-no-hz-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/rcu-enable-rcu_normal_after_boot-by-default-for-RT.patch [new file with mode: 0644]
patches/features/all/rt/rcu-make-RCU_BOOST-default-on-RT.patch [new file with mode: 0644]
patches/features/all/rt/rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch [new file with mode: 0644]
patches/features/all/rt/rcu-update-make-RCU_EXPEDITE_BOOT-default.patch [new file with mode: 0644]
patches/features/all/rt/rcutree-rcu_bh_qs-disable-irq-while-calling-rcu_pree.patch [new file with mode: 0644]
patches/features/all/rt/re-migrate_disable-race-with-cpu-hotplug-3f.patch [new file with mode: 0644]
patches/features/all/rt/re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch [new file with mode: 0644]
patches/features/all/rt/rfc-arm-smp-__cpu_disable-fix-sleeping-function-called-from-invalid-context.patch [new file with mode: 0644]
patches/features/all/rt/rt-add-rt-locks.patch [new file with mode: 0644]
patches/features/all/rt/rt-drop_mutex_disable_on_not_debug.patch [new file with mode: 0644]
patches/features/all/rt/rt-introduce-cpu-chill.patch [new file with mode: 0644]
patches/features/all/rt/rt-local-irq-lock.patch [new file with mode: 0644]
patches/features/all/rt/rt-locking-Reenable-migration-accross-schedule.patch [new file with mode: 0644]
patches/features/all/rt/rt-preempt-base-config.patch [new file with mode: 0644]
patches/features/all/rt/rt-serial-warn-fix.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex--Handle-non-enqueued-waiters-gracefully.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex-Make-lock_killable-work.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex-Provide-locked-slowpath.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex-Provide-rt_mutex_lock_state.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex-add-a-first-shot-of-ww_mutex.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex-avoid-include-hell.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex-futex-prepare-rt.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex-lock-killable.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex-trylock-is-okay-on-RT.patch [new file with mode: 0644]
patches/features/all/rt/rtmutex_dont_include_rcu.patch [new file with mode: 0644]
patches/features/all/rt/rwsem-rt-Lift-single-reader-restriction.patch [new file with mode: 0644]
patches/features/all/rt/rxrpc-remove-unused-static-variables.patch [new file with mode: 0644]
patches/features/all/rt/sas-ata-isci-dont-t-disable-interrupts-in-qc_issue-h.patch [new file with mode: 0644]
patches/features/all/rt/sched-deadline-dl_task_timer-has-to-be-irqsafe.patch [new file with mode: 0644]
patches/features/all/rt/sched-delay-put-task.patch [new file with mode: 0644]
patches/features/all/rt/sched-disable-rt-group-sched-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/sched-disable-ttwu-queue.patch [new file with mode: 0644]
patches/features/all/rt/sched-limit-nr-migrate.patch [new file with mode: 0644]
patches/features/all/rt/sched-might-sleep-do-not-account-rcu-depth.patch [new file with mode: 0644]
patches/features/all/rt/sched-mmdrop-delayed.patch [new file with mode: 0644]
patches/features/all/rt/sched-rt-mutex-wakeup.patch [new file with mode: 0644]
patches/features/all/rt/sched-ttwu-ensure-success-return-is-correct.patch [new file with mode: 0644]
patches/features/all/rt/sched-workqueue-Only-wake-up-idle-workers-if-not-blo.patch [new file with mode: 0644]
patches/features/all/rt/scsi-fcoe-rt-aware.patch [new file with mode: 0644]
patches/features/all/rt/scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch [new file with mode: 0644]
patches/features/all/rt/seqlock-prevent-rt-starvation.patch [new file with mode: 0644]
patches/features/all/rt/signal-fix-up-rcu-wreckage.patch [new file with mode: 0644]
patches/features/all/rt/signal-revert-ptrace-preempt-magic.patch [new file with mode: 0644]
patches/features/all/rt/signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch [new file with mode: 0644]
patches/features/all/rt/skbufhead-raw-lock.patch [new file with mode: 0644]
patches/features/all/rt/slub-disable-SLUB_CPU_PARTIAL.patch [new file with mode: 0644]
patches/features/all/rt/slub-enable-irqs-for-no-wait.patch [new file with mode: 0644]
patches/features/all/rt/snd-pcm-fix-snd_pcm_stream_lock-irqs_disabled-splats.patch [new file with mode: 0644]
patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch [new file with mode: 0644]
patches/features/all/rt/softirq-preempt-fix-3-re.patch [new file with mode: 0644]
patches/features/all/rt/softirq-split-locks.patch [new file with mode: 0644]
patches/features/all/rt/softirq-split-timer-softirqs-out-of-ksoftirqd.patch [new file with mode: 0644]
patches/features/all/rt/softirq-wake-the-timer-softirq-if-needed.patch [new file with mode: 0644]
patches/features/all/rt/sparc64-use-generic-rwsem-spinlocks-rt.patch [new file with mode: 0644]
patches/features/all/rt/spinlock-types-separate-raw.patch [new file with mode: 0644]
patches/features/all/rt/stop-machine-raw-lock.patch [new file with mode: 0644]
patches/features/all/rt/stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch [new file with mode: 0644]
patches/features/all/rt/sunrpc-make-svc_xprt_do_enqueue-use-get_cpu_light.patch [new file with mode: 0644]
patches/features/all/rt/suspend-prevernt-might-sleep-splats.patch [new file with mode: 0644]
patches/features/all/rt/sysfs-realtime-entry.patch [new file with mode: 0644]
patches/features/all/rt/tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch [new file with mode: 0644]
patches/features/all/rt/thermal-Defer-thermal-wakups-to-threads.patch [new file with mode: 0644]
patches/features/all/rt/tick-broadcast--Make-hrtimer-irqsafe.patch [new file with mode: 0644]
patches/features/all/rt/timekeeping-split-jiffies-lock.patch [new file with mode: 0644]
patches/features/all/rt/timer-delay-waking-softirqs-from-the-jiffy-tick.patch [new file with mode: 0644]
patches/features/all/rt/timer-fd-avoid-live-lock.patch [new file with mode: 0644]
patches/features/all/rt/timer-hrtimer-check-properly-for-a-running-timer.patch [new file with mode: 0644]
patches/features/all/rt/timer-make-the-base-lock-raw.patch [new file with mode: 0644]
patches/features/all/rt/timers-Don-t-wake-ktimersoftd-on-every-tick.patch [new file with mode: 0644]
patches/features/all/rt/timers-prepare-for-full-preemption.patch [new file with mode: 0644]
patches/features/all/rt/trace-latency-hist-Consider-new-argument-when-probin.patch [new file with mode: 0644]
patches/features/all/rt/trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch [new file with mode: 0644]
patches/features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch [new file with mode: 0644]
patches/features/all/rt/tty-serial-8250-don-t-take-the-trylock-during-oops.patch [new file with mode: 0644]
patches/features/all/rt/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch [new file with mode: 0644]
patches/features/all/rt/usb-use-_nort-in-giveback.patch [new file with mode: 0644]
patches/features/all/rt/user-use-local-irq-nort.patch [new file with mode: 0644]
patches/features/all/rt/wait.h-include-atomic.h.patch [new file with mode: 0644]
patches/features/all/rt/work-queue-work-around-irqsafe-timer-optimization.patch [new file with mode: 0644]
patches/features/all/rt/work-simple-Simple-work-queue-implemenation.patch [new file with mode: 0644]
patches/features/all/rt/workqueue-distangle-from-rq-lock.patch [new file with mode: 0644]
patches/features/all/rt/workqueue-prevent-deadlock-stall.patch [new file with mode: 0644]
patches/features/all/rt/workqueue-use-locallock.patch [new file with mode: 0644]
patches/features/all/rt/workqueue-use-rcu.patch [new file with mode: 0644]
patches/features/all/rt/x86-UV-raw_spinlock-conversion.patch [new file with mode: 0644]
patches/features/all/rt/x86-apic-get-rid-of-warning-acpi_ioapic_lock-defined.patch [new file with mode: 0644]
patches/features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch [new file with mode: 0644]
patches/features/all/rt/x86-highmem-add-a-already-used-pte-check.patch [new file with mode: 0644]
patches/features/all/rt/x86-io-apic-migra-no-unmask.patch [new file with mode: 0644]
patches/features/all/rt/x86-kvm-require-const-tsc-for-rt.patch [new file with mode: 0644]
patches/features/all/rt/x86-mce-timer-hrtimer.patch [new file with mode: 0644]
patches/features/all/rt/x86-mce-use-swait-queue-for-mce-wakeups.patch [new file with mode: 0644]
patches/features/all/rt/x86-mm-cpa-avoid-wbinvd-for-PREEMPT.patch [new file with mode: 0644]
patches/features/all/rt/x86-preempt-lazy.patch [new file with mode: 0644]
patches/features/all/rt/x86-signal-delay-calling-signals-on-32bit.patch [new file with mode: 0644]
patches/features/all/rt/x86-stackprot-no-random-on-rt.patch [new file with mode: 0644]
patches/features/all/rt/x86-use-gen-rwsem-spinlocks-rt.patch [new file with mode: 0644]
patches/features/all/securelevel/acpi-disable-acpi-table-override-if-securelevel-is-s.patch [new file with mode: 0644]
patches/features/all/securelevel/acpi-disable-apei-error-injection-if-securelevel-is-.patch [new file with mode: 0644]
patches/features/all/securelevel/acpi-ignore-acpi_rsdp-kernel-parameter-when-securele.patch [new file with mode: 0644]
patches/features/all/securelevel/acpi-limit-access-to-custom_method-if-securelevel-is.patch [new file with mode: 0644]
patches/features/all/securelevel/add-bsd-style-securelevel-support.patch [new file with mode: 0644]
patches/features/all/securelevel/add-option-to-automatically-set-securelevel-when-in-.patch [new file with mode: 0644]
patches/features/all/securelevel/arm64-add-kernel-config-option-to-set-securelevel-wh.patch [new file with mode: 0644]
patches/features/all/securelevel/arm64-efi-disable-secure-boot-if-shim-is-in-insecure.patch [new file with mode: 0644]
patches/features/all/securelevel/asus-wmi-restrict-debugfs-interface-when-securelevel.patch [new file with mode: 0644]
patches/features/all/securelevel/efi-disable-secure-boot-if-shim-is-in-insecure-mode.patch [new file with mode: 0644]
patches/features/all/securelevel/enable-cold-boot-attack-mitigation.patch [new file with mode: 0644]
patches/features/all/securelevel/enforce-module-signatures-when-securelevel-is-greate.patch [new file with mode: 0644]
patches/features/all/securelevel/hibernate-disable-when-securelevel-is-set.patch [new file with mode: 0644]
patches/features/all/securelevel/kexec-disable-at-runtime-if-securelevel-has-been-set.patch [new file with mode: 0644]
patches/features/all/securelevel/kexec-uefi-copy-secure_boot-flag-in-boot-params-acro.patch [new file with mode: 0644]
patches/features/all/securelevel/mtd-disable-slram-and-phram-when-securelevel-is-enabled.patch [new file with mode: 0644]
patches/features/all/securelevel/pci-lock-down-bar-access-when-securelevel-is-enabled.patch [new file with mode: 0644]
patches/features/all/securelevel/restrict-dev-mem-and-dev-kmem-when-securelevel-is-se.patch [new file with mode: 0644]
patches/features/all/securelevel/uswsusp-disable-when-securelevel-is-set.patch [new file with mode: 0644]
patches/features/all/securelevel/x86-lock-down-io-port-access-when-securelevel-is-ena.patch [new file with mode: 0644]
patches/features/all/securelevel/x86-restrict-msr-access-when-securelevel-is-set.patch [new file with mode: 0644]
patches/features/all/security-perf-allow-further-restriction-of-perf_event_open.patch [new file with mode: 0644]
patches/features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch [new file with mode: 0644]
patches/features/arm/ARM-dts-orion5x-lschl-Fix-model-name.patch [new file with mode: 0644]
patches/features/arm/ARM-dts-orion5x-lschl-More-consistent-naming-on-link.patch [new file with mode: 0644]
patches/features/arm/ARM-orion5x-fix-Makefile-for-linkstation-lschl.dtb.patch [new file with mode: 0644]
patches/features/arm/arm-dts-add-support-for-turris-omnia.patch [new file with mode: 0644]
patches/features/arm/arm-dts-turris-omnia-add-support-for-ethernet-switch.patch [new file with mode: 0644]
patches/features/arm64/dts-meson-gx-add-firmware-reserved-memory-zone.patch [new file with mode: 0644]
patches/features/mips/MIPS-Loongson-3-Add-Loongson-LS3A-RS780E-1-way-machi.patch [new file with mode: 0644]
patches/features/mips/MIPS-increase-MAX-PHYSMEM-BITS-on-Loongson-3-only.patch [new file with mode: 0644]
patches/features/x86/x86-make-x32-syscall-support-conditional.patch [new file with mode: 0644]
patches/features/x86/x86-memtest-WARN-if-bad-RAM-found.patch [new file with mode: 0644]
patches/series [new file with mode: 0644]
patches/series-orig [new file with mode: 0644]
patches/series-rt [new file with mode: 0644]
rules [new file with mode: 0755]
rules.d/Makefile [new file with mode: 0644]
rules.d/Makefile.inc [new file with mode: 0644]
rules.d/scripts/Makefile [new file with mode: 0644]
rules.d/scripts/basic/Makefile [new file with mode: 0644]
rules.d/scripts/genksyms/Makefile [new file with mode: 0644]
rules.d/scripts/kconfig/Makefile [new file with mode: 0644]
rules.d/scripts/mod/Makefile [new file with mode: 0644]
rules.d/scripts/mod/Makefile.real [new file with mode: 0644]
rules.d/scripts/mod/elfconfig.h [new file with mode: 0644]
rules.d/scripts/mod/gendef.py [new file with mode: 0755]
rules.d/scripts/mod/modpost.c [new file with mode: 0644]
rules.d/scripts/mod/real-lsb-32/elfconfig.h [new file with mode: 0644]
rules.d/scripts/mod/real-lsb-32/types.h [new file with mode: 0644]
rules.d/scripts/mod/real-lsb-64/elfconfig.h [new file with mode: 0644]
rules.d/scripts/mod/real-lsb-64/types.h [new file with mode: 0644]
rules.d/scripts/mod/real-msb-32/elfconfig.h [new file with mode: 0644]
rules.d/scripts/mod/real-msb-32/types.h [new file with mode: 0644]
rules.d/scripts/mod/real-msb-64/elfconfig.h [new file with mode: 0644]
rules.d/scripts/mod/real-msb-64/types.h [new file with mode: 0644]
rules.d/scripts/mod/types.h [new file with mode: 0644]
rules.d/tools/Makefile [new file with mode: 0644]
rules.d/tools/hv/Makefile [new file with mode: 0644]
rules.d/tools/hv/check-hyperv.c [new file with mode: 0644]
rules.d/tools/lib/lockdep/Makefile [new file with mode: 0644]
rules.d/tools/lib/lockdep/lockdep.in [new file with mode: 0644]
rules.d/tools/perf/Makefile [new file with mode: 0644]
rules.d/tools/power/Makefile [new file with mode: 0644]
rules.d/tools/power/cpupower/Makefile [new file with mode: 0644]
rules.d/tools/power/x86/Makefile [new file with mode: 0644]
rules.d/tools/power/x86/turbostat/Makefile [new file with mode: 0644]
rules.d/tools/power/x86/x86_energy_perf_policy/Makefile [new file with mode: 0644]
rules.d/tools/usb/usbip/Makefile [new file with mode: 0644]
rules.defs [new file with mode: 0644]
rules.gen [new file with mode: 0644]
rules.real [new file with mode: 0644]
source/format [new file with mode: 0644]
source/include-binaries [new file with mode: 0644]
source/options [new file with mode: 0644]
templates/control.docs.in [new file with mode: 0644]
templates/control.extra.in [new file with mode: 0644]
templates/control.headers.arch.in [new file with mode: 0644]
templates/control.headers.featureset.in [new file with mode: 0644]
templates/control.headers.in [new file with mode: 0644]
templates/control.image-dbg.in [new file with mode: 0644]
templates/control.image-unsigned.in [new file with mode: 0644]
templates/control.image.in [new file with mode: 0644]
templates/control.libc-dev.in [new file with mode: 0644]
templates/control.main.in [new file with mode: 0644]
templates/control.source.in [new file with mode: 0644]
templates/control.tools.in [new file with mode: 0644]
templates/headers.postinst.in [new file with mode: 0644]
templates/image-dbg.lintian-override.in [new file with mode: 0644]
templates/image.bug/control [new file with mode: 0644]
templates/image.bug/include-0version [new file with mode: 0644]
templates/image.bug/include-1cmdline [new file with mode: 0644]
templates/image.bug/include-1tainted [new file with mode: 0644]
templates/image.bug/include-dmesg [new file with mode: 0644]
templates/image.bug/include-model [new file with mode: 0644]
templates/image.bug/include-modules [new file with mode: 0644]
templates/image.bug/include-network [new file with mode: 0644]
templates/image.bug/include-pci [new file with mode: 0644]
templates/image.bug/include-pstore [new file with mode: 0644]
templates/image.bug/include-usb [new file with mode: 0644]
templates/image.bug/presubj [new file with mode: 0644]
templates/image.bug/script [new file with mode: 0644]
templates/image.postinst.in [new file with mode: 0755]
templates/image.postrm.in [new file with mode: 0755]
templates/image.preinst.in [new file with mode: 0755]
templates/image.prerm.in [new file with mode: 0755]
templates/lintian-overrides.perf.in [new file with mode: 0644]
templates/tests-control.main.in [new file with mode: 0644]
tests/control [new file with mode: 0644]
tests/selftests [new file with mode: 0644]
upstream/rt-signing-key.pgp [new file with mode: 0644]
upstream/signing-key.pgp [new file with mode: 0644]
usbip.install [new file with mode: 0644]
usbip.manpages [new file with mode: 0644]
watch [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..d040fa3
--- /dev/null
@@ -0,0 +1,29 @@
+!/patches
+!*.patch
+!*.diff
+*.debhelper*
+*.local
+*.pyc
+*.substvars
+*-di
+/*-tmp/
+/build/
+/config.defines.dump
+/control
+/control.md5sum
+/files
+/hyperv-daemons/
+/libcpupower*/
+/liblockdep*/
+/libusbip-dev/
+/linux-*
+!/linux-cpupower.install
+!/linux-cpupower.manpages
+/lockdep/
+/po/
+/rules.gen
+/stamps/
+/tests/control
+/tmp/
+/usbip/
+/xen-linux-system-*
diff --git a/README.Debian b/README.Debian
new file mode 100644 (file)
index 0000000..3f6c39b
--- /dev/null
@@ -0,0 +1,56 @@
+Linux kernel 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 https://anonscm.debian.org/cgit/kernel/linux.git/tree/debian/patches.
+
+Config Files
+------------
+The .config files used to build the various linux-image files are dynamically
+generated during the linux 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.
+
+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_<architecture>_<featureset>_<flavour>
+
+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
+Berkeley Database (libdb-dev) installed.
+
+Non-free bits removed
+---------------------
+See the patches under debian/patches/debian/dfsg.
+
+Further information
+-------------------
+Debian Linux Kernel Handbook: https://kernel-handbook.alioth.debian.org
+                              or debian-kernel-handbook package
+Debian Wiki: https://wiki.debian.org/DebianKernel
diff --git a/README.source b/README.source
new file mode 100644 (file)
index 0000000..b488d8b
--- /dev/null
@@ -0,0 +1,239 @@
+Updating the upstream source
+============================
+
+In addition to the build-dependencies, you will need the rsync and
+unifdef packages installed.
+
+1) It is recommended to fetch the release tag from the relevant upstream git
+   repository, one of:
+
+   * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
+   * https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
+   * git://kernel.ubuntu.com/ubuntu/linux.git
+
+   However, it is also possible to use upstream tarball and patch releases.
+   Both tags and files should be signed by the relevant maintainer, which
+   you *must* verify using commands such as:
+
+   $ git tag -v v4.5
+   $ xzcat linux-4.5.tar.xz | gpg --verify linux-4.5.tar.sign -
+   $ xzcat patch-4.5.1.xz | gpg --verify patch-4.5.1.sign -
+
+   The upstream maintainers' key fingerprints are:
+
+   pub   2048R/00411886 2011-09-20
+         Key fingerprint = ABAF 11C6 5A29 70B1 30AB  E3C4 79BE 3E43 0041 1886
+   uid                  Linus Torvalds <torvalds@linux-foundation.org>
+   sub   2048R/012F54CA 2011-09-20
+
+   pub   4096R/6092693E 2011-09-23
+         Key fingerprint = 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 6092 693E
+   uid                  Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>
+   sub   4096R/76D54749 2011-09-23
+
+   pub   4096R/FDCE24FC 2011-12-10
+         Key fingerprint = D4E1 E317 4470 9144 B0F8  101A DB74 AEB8 FDCE 24FC
+   uid                  Luis Henriques <luis.henriques@canonical.com>
+   uid                  Luis Henriques <henrix@camandro.org>
+   sub   4096R/EFBC394A 2011-12-10
+
+2) Run: ./debian/bin/genorig.py <repository>
+   or:  ./debian/bin/genorig.py <tarball> [patch]
+
+   This will produce ../orig/linux_<version>.orig.tar.xz
+   (e.g. linux_3.5~rc1.orig.tar.xz).
+
+   It involves applying several patches and file deletions for DFSG
+   compliance, as listed in debian/patches/series-orig.  Occasionally
+   you will need to refresh these.
+
+3) Run: make -f debian/rules orig
+
+   This will apply the main quilt series to the upstream source, which
+   will usually fail due to conflicts with upstream changes.  You need
+   to resolve those by dropping or refreshing patches.
+
+Recording updates in the changelog
+----------------------------------
+
+Upstream commits that we already cherry-picked and included in a
+previous package upload should not be mentioned, since they don't make
+any difference to the package.  Any other commits that fix a Debian
+bug report and/or a security issue with a CVE ID should always be
+listed, along with the (Closes: #nnnnnn) and/or (CVE-yyyy-nnnn)
+reference.
+
+Aside from those general rules:
+
+* For an upstream release candidate, don't attempt to list the changes
+
+* For a stable release by Linus, refer to the summary at
+  kernelnewbies.org, e.g. http://kernelnewbies.org/Linux_4.5
+
+* For a stable update, refer to the changelog on kernel.org, e.g.
+  https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.5.1, and
+  list all changes that are relevant to our package and that fix bugs
+  that we would consider 'important' or higher severity
+
+  - The script debian/bin/stable-update updates the changelog
+    version and inserts the list of changes.  It doesn't attempt to
+    filter out irrelevant or unimportant changes.
+
+  - The script debian/bin/ckt-stable-update.sh does the same for
+    stable updates by the Canonical Kernel Team.
+
+  - If you have time, please delete irrelevant changes such as:
+    + Fixes for architectures not supported by the package
+    + Fixes for drivers that aren't enabled in any of our configurations
+    + Build fixes for configurations that we don't use
+    + Fixes for lockdep false positives
+
+If you have time, please add bracketted prefixes to the upstream
+change list as described below under "Changelog conventions".
+
+Applying patches to the Debian kernel tree
+==========================================
+
+The Debian kernel packaging uses the quilt patch system, but with
+multiple series to allow for featuresets.
+
+Patches are stored below debian/patches, loosely sorted in bugfix/,
+features/ and debian/. Patches are in the standard kernel patch
+format (unified diff to be applied with patch -p1) and generally have
+DEP-3 headers.
+
+The series file 'series' is used for all configurations and a series
+file 'series-<featureset>' is used for each optional featureset.
+
+If you want to generate a source tree with all patches applied, run
+make -f debian/rules source
+
+The resulting source can be found below debian/build.
+
+Changelog conventions
+=====================
+
+If a change only affects some architectures, flavours or featuresets,
+this should be noted with a bracketted prefix on the changelog line:
+
+* [<fset>] Change to featureset <fset>
+* [<arch>] Change that affects Debian architecture <arch>
+* [<arch1>,<arch2>...] Change that affects Debian architectures
+  <arch1>, <arch2>, ...
+* [<arch>/<flavour>] Change that affects kernel flavour <flavour>
+  on Debian architecture <arch>
+* [<arch>/{<flavour1>,<flavour2>...}] Change that affects kernel
+  flavours <flavour1>, <flavour2>, ... on Debian architecture <arch>
+
+You can use wildcards to cover multiple values, e.g. 'arm*' for armel,
+armhf and arm64 architectures.  Also 'x86' is used to cover the Debian
+architectures amd64, i386 and x32.
+
+Kernel config files
+===================
+
+Each kernel configuration file is constructed dynamically from a
+number of files under debian/config.  They are read in the following
+order, such that files later on the list can override settings from
+earlier files.  Most of the files are optional and the filenames can
+generally be overridden by explicit lists (possibly empty) specified
+in the 'defines' files.
+
+1. Common:
+   - Default filename: config
+   - Filename list: [image]configs in defines
+2. Per kernel architecture:
+   - Filename: kernelarch-<karch>/config (optional)
+3. Per architecture:
+   - Default filename: <arch>/config
+   - Filename list: [image]configs in <arch>/defines
+4. Per architecture and flavour:
+   - Default filename: <arch>/config.<flavour> (optional)
+   - Filename list: [<flavour>_image]configs in <arch>/defines
+5. Per featureset:
+   - Default filename: featureset-<fset>/config (optional)
+   - Filename list: [image]configs in featureset-<fset>/defines
+6. Per architecture and featureset:
+   - Default filename: <arch>/<fset>/config (optional)
+   - Filename list: [image]configs in <arch>/<fset>/defines
+7. Per architecture, featureset, and flavour:
+   - Default filename: <arch>/<fset>/config.<flavour> (optional)
+   - Filename list: [<flavour>_image]configs in <arch>/<fset>/defines
+
+You can check the final list of configuration files by reading
+debian/rules.gen.  Each binary-arch_<arch>_<fset>_<flavour>_real
+rule passes the list to debian/rules.real as the KCONFIG variable.
+
+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
+
+Running tests
+=============
+
+linux supports autopkgtest and should be able to run most of the
+kernel's self-tests on any architecture where kexec is supported,
+but it has higher resource requirements than most packages:
+
+- A VM with plenty of disk space (10GB is enough), RAM (1GB is
+  probably enough) and at least 2 CPUs
+- The temporary directory for adt-virt-qemu (-o option) will need
+  several GB of space, so a tmpfs may not be suitable
+
+Note that if you tell adt-run to use an 'unbuilt tree' (i.e. an
+unpacked source package) it does not exclude VCS directories such as
+.git.  Either use a packed source package or copy the working tree
+elsewhere excluding .git.
+
+Example invocation:
+
+    adt-run -B ../linux-image-4.2.0-rc6-amd64_4.2~rc6-1~exp2_amd64.deb \
+        ../linux_4.2~rc6-1~exp2.dsc \
+       --timeout-test=1200 \
+        --- adt-virt-qemu /var/cache/autopkgtest/adt-sid.img -o /var/tmp -c 2
+
+Build profiles
+==============
+
+Several build profiles are understood and supported:
+
+- stage1: Needed when bootstrapping an architecture.  A stage1 build
+  produces only the linux-libc-dev package and has no host
+  build-dependencies.
+- nodoc: Exclude most documentation
+- pkg.linux.notools: Exclude userland tool packages (linux-kbuild-<version>,
+  linux-perf-<version>, etc.)
+- cross: Needed when cross-building.  Currently this must be used together
+  with nopython as the build-dependencies will be unsatisfiable otherwise.
+- nopython: Disable Python bindings.  This currently disables building the
+  linux-perf-<version> package, as the perf program embeds Python.
diff --git a/bin/abiupdate.py b/bin/abiupdate.py
new file mode 100755 (executable)
index 0000000..d35e50b
--- /dev/null
@@ -0,0 +1,213 @@
+#!/usr/bin/env python3
+
+import sys
+sys.path.append(sys.path[0] + "/../lib/python")
+
+import optparse
+import os
+import shutil
+import tempfile
+
+from urllib.request import urlopen
+from urllib.error import HTTPError
+
+from debian_linux.abi import Symbols
+from debian_linux.config import *
+from debian_linux.debian import *
+
+default_url_base = "http://deb.debian.org/debian/"
+default_url_base_incoming = "http://incoming.debian.org/debian-buildd/"
+default_url_base_ports = "http://ftp.ports.debian.org/debian-ports/"
+default_url_base_ports_incoming = "http://incoming.ports.debian.org/"
+
+
+class url_debian_flat(object):
+    def __init__(self, base):
+        self.base = base
+
+    def __call__(self, source, filename, arch):
+        return self.base + filename
+
+
+class url_debian_pool(object):
+    def __init__(self, base):
+        self.base = base
+
+    def __call__(self, source, filename, arch):
+        return self.base + "pool/main/" + source[0] + "/" + source + "/" + filename
+
+
+class url_debian_ports_pool(url_debian_pool):
+    def __call__(self, source, filename, arch):
+        if arch == 'all':
+            return url_debian_pool.__call__(self, source, filename, arch)
+        return self.base + "pool-" + arch + "/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
+
+        self.config = ConfigCoreDump(fp=open("debian/config.defines.dump", "rb"))
+
+        self.version_abi = self.config['version', ]['abiname']
+
+    def __call__(self):
+        self.dir = tempfile.mkdtemp(prefix='abiupdate')
+        try:
+            self.log("Retrieve config\n")
+
+            try:
+                config = self.get_config()
+            except HTTPError as e:
+                self.log("Failed to retrieve %s: %s\n" % (e.filename, e))
+                sys.exit(1)
+
+            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):
+        try:
+            version_abi = (self.config['version',]['abiname_base'] + '-' +
+                           self.config['abi', arch]['abiname'])
+        except KeyError:
+            version_abi = self.version_abi
+        filename = "linux-headers-%s-%s_%s_%s.deb" % (version_abi, prefix, self.version_source, arch)
+        f = self.retrieve_package(self.url, filename, arch)
+        d = self.extract_package(f, "linux-headers-%s_%s" % (prefix, arch))
+        f1 = d + "/usr/src/linux-headers-%s-%s/Module.symvers" % (version_abi, prefix)
+        s = Symbols(open(f1))
+        shutil.rmtree(d)
+        return version_abi, s
+
+    def get_config(self):
+        # XXX We used to fetch the previous version of linux-support here,
+        # but until we authenticate downloads we should not do that as
+        # pickle.load allows running arbitrary code.
+        return self.config
+
+    def retrieve_package(self, url, filename, arch):
+        u = url(self.source, filename, arch)
+        filename_out = self.dir + "/" + filename
+
+        f_in = urlopen(u)
+        f_out = open(filename_out, 'wb')
+        while 1:
+            r = f_in.read()
+            if not r:
+                break
+            f_out.write(r)
+        return filename_out
+
+    def save_abi(self, version_abi, symbols, arch, featureset, flavour):
+        dir = "debian/abi/%s" % 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)
+
+        self.log("Updating ABI for arch %s, featureset %s, flavour %s: " % (arch, featureset, flavour))
+        try:
+            if featureset == 'none':
+                localversion = flavour
+            else:
+                localversion = featureset + '-' + flavour
+
+            version_abi, abi = self.get_abi(arch, localversion)
+            self.save_abi(version_abi, abi, arch, featureset, flavour)
+            self.log("Ok.\n")
+        except HTTPError as e:
+            self.log("Failed to retrieve %s: %s\n" % (e.filename, e))
+        except Exception:
+            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("--ports", action="store_true", dest="ports")
+    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)
+    options.add_option("--url-base-ports", dest="url_base_ports", default=default_url_base_ports)
+    options.add_option("--url-base-ports-incoming", dest="url_base_ports_incoming", default=default_url_base_ports_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_pool(opts.url_base_incoming)
+    url_base_ports = url_debian_ports_pool(opts.url_base_ports)
+    url_base_ports_incoming = url_debian_flat(opts.url_base_ports_incoming)
+    if opts.incoming_config:
+        url = url_config = url_base_incoming
+    else:
+        url_config = url_base
+        if opts.ports:
+            url = url_base_ports_incoming if opts.incoming else url_base_ports
+        else:
+            url = url_base_incoming if opts.incoming else url_base
+
+    Main(url, url_config, **kw)()
diff --git a/bin/buildcheck.py b/bin/buildcheck.py
new file mode 100755 (executable)
index 0000000..5cd0d8a
--- /dev/null
@@ -0,0 +1,258 @@
+#!/usr/bin/python3
+
+import sys
+sys.path.append('debian/lib/python')
+
+import fnmatch
+import glob
+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
+
+        try:
+            version_abi = (self.config['version',]['abiname_base'] + '-' +
+                           self.config['abi', arch]['abiname'])
+        except KeyError:
+            version_abi = self.config['version',]['abiname']
+        self.filename_ref = "debian/abi/%s/%s_%s_%s" % (version_abi, arch, featureset, flavour)
+
+    def __call__(self, out):
+        ret = 0
+
+        new = Symbols(open(self.filename_new))
+        unversioned = [name for name in new if new[name].version == '0x00000000']
+        if unversioned:
+            out.write("ABI is not completely versioned!  Refusing to continue.\n")
+            out.write("\nUnversioned symbols:\n")
+            for name in sorted(unversioned):
+                self.SymbolInfo(new[name]).write(out, False)
+            ret = 1
+
+        try:
+            ref = Symbols(open(self.filename_ref))
+        except IOError:
+            out.write("Can't read ABI reference.  ABI not checked!\n")
+            return ret
+
+        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.values():
+                    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.changelog = Changelog(version=VersionLinux)[0]
+
+        self.config_entry_base = config.merge('base', 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
+
+        dtb_size = 0
+        if self.config_entry_image.get('check-size-with-dtb'):
+            for dtb in glob.glob(
+                    os.path.join(self.dir, 'arch',
+                                 self.config_entry_base['kernel-arch'],
+                                 'boot/dts/*.dtb')):
+                dtb_size = max(dtb_size, os.stat(dtb).st_size)
+
+        size = os.stat(image).st_size + dtb_size
+
+        if size > value:
+            out.write('Image too large (%d > %d)!  Refusing to continue.\n' % (size, value))
+            return 1
+
+        # 1% overhead is desirable in order to cope with growth
+        # through the lifetime of a stable release. Warn if this is
+        # not the case.
+        usage = (float(size)/value) * 100.0
+        out.write('Image size %d/%d, using %.2f%%.  ' % (size, value, usage))
+        if size > value:
+            out.write('Too large.  Refusing to continue.\n')
+            return 1
+        elif usage >= 99.0:
+            out.write('Under 1%% space in %s.  ' % self.changelog.distribution)
+        else:
+            out.write('Image fits.  ')
+        out.write('Continuing.\n')
+
+        return 0
+
+
+class Main(object):
+    def __init__(self, dir, arch, featureset, flavour):
+        self.args = dir, arch, featureset, flavour
+
+        self.config = ConfigCoreDump(open("debian/config.defines.dump", "rb"))
+
+    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:])())
diff --git a/bin/check-patches.sh b/bin/check-patches.sh
new file mode 100755 (executable)
index 0000000..5885412
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh -e
+
+TMPDIR=$(mktemp -d)
+trap "rm -rf $TMPDIR" EXIT
+sed '/^#/d; /^[[:space:]]*$/d; /^X /d; s/^+ //; s,^,debian/patches/,' debian/patches/series* | 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 || test $? = 1
+echo
+echo "Patches without required headers"
+echo "================================"
+xargs egrep -l '^(Subject|Description):' < $TMPDIR/used | xargs egrep -l '^(From|Author|Origin):' > $TMPDIR/goodheaders || test $? = 1
+fgrep -v -f $TMPDIR/goodheaders $TMPDIR/used || test $? = 1
+echo
+echo "Patches without Origin or Forwarded header"
+echo "=========================================="
+xargs egrep -L '^(Origin:|Forwarded: (no\b|not-needed|http))' < $TMPDIR/used || test $? = 1
+echo
+echo "Patches to be forwarded"
+echo "======================="
+xargs egrep -l '^Forwarded: no\b' < $TMPDIR/used || test $? = 1
diff --git a/bin/gencontrol.py b/bin/gencontrol.py
new file mode 100755 (executable)
index 0000000..5302e56
--- /dev/null
@@ -0,0 +1,577 @@
+#!/usr/bin/env python3
+
+import sys
+sys.path.append("debian/lib/python")
+
+import codecs
+import errno
+import glob
+import io
+import os
+import os.path
+import subprocess
+
+from debian_linux import config
+from debian_linux.debian import *
+from debian_linux.gencontrol import Gencontrol as Base, merge_packages
+from debian_linux.utils import Templates, read_control
+
+class Gencontrol(Base):
+    config_schema = {
+        'abi': {
+            'ignore-changes': config.SchemaItemList(),
+        },
+        'build': {
+            'debug-info': config.SchemaItemBoolean(),
+            'signed-modules': config.SchemaItemBoolean(),
+            'vdso': config.SchemaItemBoolean(),
+        },
+        'description': {
+            'parts': config.SchemaItemList(),
+        },
+        'image': {
+            'bootloaders': config.SchemaItemList(),
+            'configs': config.SchemaItemList(),
+            'initramfs-generators': config.SchemaItemList(),
+            'check-size': config.SchemaItemInteger(),
+            'check-size-with-dtb': config.SchemaItemBoolean(),
+        },
+        'relations': {
+        },
+        'packages': {
+            'docs': config.SchemaItemBoolean(),
+            'headers-all': config.SchemaItemBoolean(),
+            'installer': config.SchemaItemBoolean(),
+            'libc-dev': config.SchemaItemBoolean(),
+            'tools': config.SchemaItemBoolean(),
+        }
+    }
+
+    def __init__(self, config_dirs=["debian/config"], template_dirs=["debian/templates"]):
+        super(Gencontrol, self).__init__(
+            config.ConfigCoreHierarchy(self.config_schema, 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 _substitute_file(self, template, vars, target, append=False):
+        with codecs.open(target, 'a' if append else 'w', 'utf-8') as f:
+            f.write(self.substitute(self.templates[template], vars))
+
+    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_version + self.abiname_part,
+            'SOURCEVERSION': self.version.complete,
+        })
+
+        # Prepare to generate debian/tests/control
+        self.tests_control = None
+
+    def do_main_makefile(self, makefile, makeflags, extra):
+        fs_enabled = [featureset
+                      for featureset in self.config['base', ]['featuresets']
+                      if self.config.merge('base', None, featureset).get('enabled', True)]
+        for featureset in fs_enabled:
+            makeflags_featureset = makeflags.copy()
+            makeflags_featureset['FEATURESET'] = featureset
+            cmds_source = ["$(MAKE) -f debian/rules.real source-featureset %s"
+                           % makeflags_featureset]
+            makefile.add('source_%s_real' % featureset, cmds=cmds_source)
+            makefile.add('source_%s' % featureset,
+                         ['source_%s_real' % featureset])
+            makefile.add('source', ['source_%s' % featureset])
+
+        triplet_enabled = []
+        for arch in iter(self.config['base', ]['arches']):
+            for featureset in self.config['base', arch].get('featuresets', ()):
+                if self.config.merge('base', None, featureset).get('enabled', True):
+                    for flavour in self.config['base', arch, featureset]['flavours']:
+                        triplet_enabled.append('%s_%s_%s' %
+                                               (arch, featureset, flavour))
+
+        makeflags = makeflags.copy()
+        makeflags['ALL_FEATURESETS'] = ' '.join(fs_enabled)
+        makeflags['ALL_TRIPLETS'] = ' '.join(triplet_enabled)
+        if not self.config.merge('packages').get('docs', True):
+            makeflags['DO_DOCS'] = False
+        if not self.config.merge('packages').get('tools', True):
+            makeflags['DO_TOOLS'] = False
+        super(Gencontrol, self).do_main_makefile(makefile, makeflags, extra)
+
+        # linux-source-$UPSTREAMVERSION will contain all kconfig files
+        makefile.add('binary-indep', deps=['setup'])
+
+    def do_main_packages(self, packages, vars, makeflags, extra):
+        packages.extend(self.process_packages(self.templates["control.main"], self.vars))
+        if self.config.merge('packages').get('docs', True):
+            packages.extend(self.process_packages(self.templates["control.docs"], self.vars))
+        if self.config.merge('packages').get('tools', True):
+            packages.extend(self.process_packages(self.templates["control.tools"], self.vars))
+
+        self._substitute_file('lintian-overrides.perf', self.vars,
+                              'debian/linux-perf-%s.lintian-overrides' %
+                              self.vars['version'])
+
+    def do_indep_featureset_setup(self, vars, makeflags, featureset, extra):
+        makeflags['LOCALVERSION'] = vars['localversion']
+        kernel_arches = set()
+        for arch in iter(self.config['base', ]['arches']):
+            if self.config.get_merge('base', arch, featureset, None, 'flavours'):
+                kernel_arches.add(self.config['base', arch]['kernel-arch'])
+        makeflags['ALL_KERNEL_ARCHES'] = ' '.join(sorted(list(kernel_arches)))
+
+        vars['featureset_desc'] = ''
+        if featureset != 'none':
+            desc = self.config[('description', None, featureset)]
+            desc_parts = desc['parts']
+            vars['featureset_desc'] = (' with the %s featureset' %
+                                       desc['part-short-%s' % desc_parts[0]])
+
+    def do_indep_featureset_packages(self, packages, makefile, featureset,
+                                     vars, makeflags, extra):
+        headers_featureset = self.templates["control.headers.featureset"]
+        packages.extend(self.process_packages(headers_featureset, vars))
+
+        cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-indep-featureset %s" %
+                            makeflags]
+        makefile.add('binary-indep_%s_real' % featureset, cmds=cmds_binary_arch)
+
+    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)
+
+        try:
+            gnu_type_bytes = subprocess.check_output(['dpkg-architecture', '-f',
+                                                      '-a', arch,
+                                                      '-q', 'DEB_HOST_GNU_TYPE'],
+                                                     stderr=subprocess.DEVNULL)
+        except subprocess.CalledProcessError:
+            # This sometimes happens for the newest ports :-/
+            print('W: Unable to get GNU type for %s' % arch, file=sys.stderr)
+        else:
+            vars['gnu-type-package'] = gnu_type_bytes.decode('utf-8').strip().replace('_', '-')
+
+    def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra):
+        if self.version.linux_modifier is None:
+            try:
+                abiname_part = '-%s' % self.config['abi', arch]['abiname']
+            except KeyError:
+                abiname_part = self.abiname_part
+            makeflags['ABINAME'] = vars['abiname'] = \
+                self.abiname_version + abiname_part
+
+        # Some userland architectures require kernels from another
+        # (Debian) architecture, e.g. x32/amd64.
+        # And some derivatives don't need the headers-all packages
+        # for other reasons.
+        if (self.config['base', arch].get('featuresets') and
+            self.config.merge('packages').get('headers-all', True)):
+            headers_arch = self.templates["control.headers.arch"]
+            packages_headers_arch = self.process_packages(headers_arch, vars)
+            packages_headers_arch[-1]['Depends'].extend(PackageRelation())
+            extra['headers_arch_depends'] = packages_headers_arch[-1]['Depends']
+        else:
+            packages_headers_arch = []
+            makeflags['DO_HEADERS_ALL'] = False
+
+        if self.config.merge('packages').get('libc-dev', True):
+            libc_dev = self.templates["control.libc-dev"]
+            packages_headers_arch[0:0] = self.process_packages(libc_dev, {})
+        else:
+            makeflags['DO_LIBC'] = False
+
+        if not self.config.merge('packages').get('tools', True):
+            makeflags['DO_TOOLS'] = False
+
+
+        merge_packages(packages, packages_headers_arch, arch)
+
+        cmds_build_arch = ["$(MAKE) -f debian/rules.real build-arch-arch %s" % makeflags]
+        makefile.add('build-arch_%s_real' % arch, cmds=cmds_build_arch)
+
+        cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags]
+        makefile.add('binary-arch_%s_real' % arch, cmds=cmds_binary_arch)
+
+        # For stage1 build profile
+        makefile.add('binary-libc-dev_%s' % arch,
+                     ['source_none_real'],
+                     ["$(MAKE) -f debian/rules.real install-libc-dev_%s %s" %
+                      (arch, makeflags)])
+
+        if os.getenv('DEBIAN_KERNEL_DISABLE_INSTALLER'):
+            if self.changelog[0].distribution == 'UNRELEASED':
+                import warnings
+                warnings.warn('Disable installer modules on request (DEBIAN_KERNEL_DISABLE_INSTALLER set)')
+            else:
+                raise RuntimeError('Unable to disable installer modules in release build (DEBIAN_KERNEL_DISABLE_INSTALLER set)')
+        elif self.config.merge('packages').get('installer', True):
+            # Add udebs using kernel-wedge
+            installer_def_dir = 'debian/installer'
+            installer_arch_dir = os.path.join(installer_def_dir, arch)
+            if os.path.isdir(installer_arch_dir):
+                # If we're going to build signed udebs later, don't actually
+                # generate udebs.  Just test that we *can* build, so we find
+                # configuration errors before building linux-signed.
+                test_build = self.config.merge('build', arch).get('signed-modules', False)
+
+                kw_env = os.environ.copy()
+                kw_env['KW_DEFCONFIG_DIR'] = installer_def_dir
+                kw_env['KW_CONFIG_DIR'] = installer_arch_dir
+                kw_proc = subprocess.Popen(
+                    ['kernel-wedge', 'gen-control', vars['abiname']],
+                    stdout=subprocess.PIPE,
+                    env=kw_env)
+                if not isinstance(kw_proc.stdout, io.IOBase):
+                    udeb_packages = read_control(io.open(kw_proc.stdout.fileno(), encoding='utf-8', closefd=False))
+                else:
+                    udeb_packages = read_control(io.TextIOWrapper(kw_proc.stdout, 'utf-8'))
+                kw_proc.wait()
+                if kw_proc.returncode != 0:
+                    raise RuntimeError('kernel-wedge exited with code %d' %
+                                       kw_proc.returncode)
+
+                # kernel-wedge currently chokes on Build-Profiles so add it now
+                for package in udeb_packages:
+                    package['Build-Profiles'] = '<!stage1>'
+
+                if not test_build:
+                    merge_packages(packages, udeb_packages, arch)
+
+                # These packages must be built after the per-flavour/
+                # per-featureset packages.  Also, this won't work
+                # correctly with an empty package list.
+                if udeb_packages:
+                    makefile.add(
+                        'binary-arch_%s' % arch,
+                        cmds=["$(MAKE) -f debian/rules.real install-udeb_%s %s "
+                              "PACKAGE_NAMES='%s' UDEB_UNSIGNED_TEST_BUILD=%s" %
+                              (arch, makeflags,
+                               ' '.join(p['Package'] for p in udeb_packages),
+                               test_build)])
+
+    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']
+
+    flavour_makeflags_base = (
+        ('compiler', 'COMPILER', False),
+        ('kernel-arch', 'KERNEL_ARCH', False),
+        ('cflags', 'CFLAGS_KERNEL', True),
+        ('override-host-type', 'OVERRIDE_HOST_TYPE', True),
+    )
+
+    flavour_makeflags_build = (
+        ('image-file', 'IMAGE_FILE', True),
+    )
+
+    flavour_makeflags_image = (
+        ('install-stem', 'IMAGE_INSTALL_STEM', 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_build = self.config.merge('build', 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
+        vars['image-stem'] = config_image.get('install-stem')
+
+        self._setup_makeflags(self.flavour_makeflags_base, makeflags, config_base)
+        self._setup_makeflags(self.flavour_makeflags_build, makeflags, config_build)
+        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_build = self.config.merge('build', 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_relations = self.config.merge('relations', arch, featureset, flavour)
+
+        compiler = config_entry_base.get('compiler', 'gcc')
+
+        # Work out dependency from linux-headers to compiler.  Drop
+        # dependencies for cross-builds.  Strip any remaining
+        # restrictions, as they don't apply to binary Depends.
+        relations_compiler_headers = PackageRelation(
+            self.substitute(config_entry_relations.get('headers%' + compiler) or
+                            config_entry_relations.get(compiler), vars))
+        relations_compiler_headers = PackageRelation(
+            PackageRelationGroup(entry for entry in group
+                                 if 'cross' not in entry.restrictions)
+            for group in relations_compiler_headers)
+        for group in relations_compiler_headers:
+            for entry in group:
+                entry.restrictions = []
+
+        relations_compiler_build_dep = PackageRelation(
+            self.substitute(config_entry_relations[compiler], vars))
+        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,))
+
+        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 = []
+
+        build_signed = config_entry_build.get('signed-modules')
+
+        image = self.templates[build_signed and "control.image-unsigned"
+                               or "control.image"]
+
+        vars.setdefault('desc', None)
+
+        image_main = self.process_real_image(image[0], image_fields, vars)
+        packages_own.append(image_main)
+        makeflags['IMAGE_PACKAGE_NAME'] = image_main['Package']
+        packages_own.extend(self.process_packages(image[1:], vars))
+
+        package_headers = self.process_package(headers[0], vars)
+        package_headers['Depends'].extend(relations_compiler_headers)
+        packages_own.append(package_headers)
+        if extra.get('headers_arch_depends'):
+            extra['headers_arch_depends'].append('%s (= ${binary:Version})' % packages_own[-1]['Package'])
+
+        if config_entry_build.get('vdso', False):
+            makeflags['VDSO'] = True
+
+        build_debug = config_entry_build.get('debug-info')
+
+        if os.getenv('DEBIAN_KERNEL_DISABLE_DEBUG'):
+            if self.changelog[0].distribution == 'UNRELEASED':
+                import warnings
+                warnings.warn('Disable debug infos on request (DEBIAN_KERNEL_DISABLE_DEBUG set)')
+                build_debug = False
+            else:
+                raise RuntimeError('Unable to disable debug infos in release build (DEBIAN_KERNEL_DISABLE_DEBUG set)')
+
+        if build_debug:
+            makeflags['DEBUG'] = True
+            packages_own.extend(self.process_packages(self.templates['control.image-dbg'], vars))
+
+        merge_packages(packages, packages_own + packages_dummy, arch)
+
+        tests_control = self.process_package(
+            self.templates['tests-control.main'][0], vars)
+        tests_control['Depends'].append(
+            PackageRelationGroup(image_main['Package'],
+                                 override_arches=(arch,)))
+        if self.tests_control:
+            self.tests_control['Depends'].extend(tests_control['Depends'])
+        else:
+            self.tests_control = tests_control
+
+        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("kernelarch-%s/config" % config_entry_base['kernel-arch'], False))
+        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)
+        makeflags['KCONFIG_OPTIONS'] = ''
+        if build_debug:
+            makeflags['KCONFIG_OPTIONS'] += ' -o DEBUG_INFO=y'
+        if build_signed:
+            makeflags['KCONFIG_OPTIONS'] += ' -o MODULE_SIG=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-arch-flavour %s" % makeflags]
+        cmds_setup = ["$(MAKE) -f debian/rules.real setup-arch-flavour %s" % makeflags]
+        makefile.add('binary-arch_%s_%s_%s_real' % (arch, featureset, flavour), cmds=cmds_binary_arch)
+        makefile.add('build-arch_%s_%s_%s_real' % (arch, featureset, flavour), cmds=cmds_build)
+        makefile.add('setup_%s_%s_%s_real' % (arch, featureset, flavour), cmds=cmds_setup)
+
+        # Substitute kernel version etc. into maintainer scripts,
+        # translations and lintian overrides
+        self._substitute_file('headers.postinst', vars,
+                              'debian/linux-headers-%s%s.postinst' %
+                              (vars['abiname'], vars['localversion']))
+        for name in ['postinst', 'postrm', 'preinst', 'prerm']:
+            self._substitute_file('image.%s' % name, vars,
+                                  'debian/%s.%s' % (image_main['Package'], name))
+        if build_debug:
+            self._substitute_file('image-dbg.lintian-override', vars,
+                                  'debian/linux-image-%s%s-dbg.lintian-overrides' %
+                                  (vars['abiname'], vars['localversion']))
+
+    def process_changelog(self):
+        act_upstream = self.changelog[0].version.upstream
+        versions = []
+        for i in self.changelog:
+            if i.version.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_part = ''
+        else:
+            self.abiname_part = '-%s' % self.config['abi', ]['abiname']
+        # We need to keep at least three version components to avoid
+        # userland breakage (e.g. #742226, #745984).
+        self.abiname_version = re.sub('^(\d+\.\d+)(?=-|$)', r'\1.0',
+                                      self.version.linux_upstream)
+        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_version + self.abiname_part,
+        }
+        self.config['version', ] = {'source': self.version.complete,
+                                    'upstream': self.version.linux_upstream,
+                                    'abiname_base': self.abiname_version,
+                                    'abiname': (self.abiname_version +
+                                                self.abiname_part)}
+
+        distribution = self.changelog[0].distribution
+        if distribution in ('unstable', ):
+            if (version.linux_revision_experimental or
+                version.linux_revision_backports 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))
+        if distribution.endswith('-security') or distribution.endswith('-lts'):
+            if (not version.linux_revision_security or
+                version.linux_revision_backports):
+                raise RuntimeError("Can't upload to %s with a version of %s" % (distribution, version))
+        if distribution.endswith('-backports'):
+            if not version.linux_revision_backports:
+                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.items():
+            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)
+        self.write_tests_control()
+
+    def write_config(self):
+        f = open("debian/config.defines.dump", 'wb')
+        self.config.dump(f)
+        f.close()
+
+    def write_tests_control(self):
+        self.write_rfc822(codecs.open("debian/tests/control", 'w', 'utf-8'),
+                          [self.tests_control])
+
+if __name__ == '__main__':
+    Gencontrol()()
diff --git a/bin/genorig.py b/bin/genorig.py
new file mode 100755 (executable)
index 0000000..59f31a8
--- /dev/null
@@ -0,0 +1,170 @@
+#!/usr/bin/env python3
+
+import sys
+sys.path.append("debian/lib/python")
+
+import os
+import os.path
+import re
+import shutil
+import subprocess
+import time
+
+from debian_linux.debian import Changelog, VersionLinux
+from debian_linux.patches import PatchSeries
+
+
+class Main(object):
+    def __init__(self, input_files, override_version):
+        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-0' % 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.xz' % (source, version.upstream)
+        self.tag = 'v' + version.linux_upstream_full
+
+    def __call__(self):
+        import tempfile
+        self.dir = tempfile.mkdtemp(prefix='genorig', dir='debian')
+        old_umask = os.umask(0o022)
+        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])
+
+            # debian_patch() will change file mtimes.  Capture the
+            # original release time so we can apply it to the final
+            # tarball.  Note this doesn't work in case we apply an
+            # upstream patch, as that doesn't carry a release time.
+            orig_date = time.strftime(
+                "%a, %d %b %Y %H:%M:%S +0000",
+                time.gmtime(
+                    os.stat(os.path.join(self.dir, self.orig, 'Makefile'))
+                    .st_mtime))
+
+            self.debian_patch()
+            os.umask(old_umask)
+            self.tar(orig_date)
+        finally:
+            os.umask(old_umask)
+            shutil.rmtree(self.dir)
+
+    def upstream_export(self, input_repo):
+        self.log("Exporting %s from %s\n" % (self.tag, input_repo))
+
+        gpg_wrapper = os.path.join(os.getcwd(),
+                                   "debian/bin/git-tag-gpg-wrapper")
+        verify_proc = subprocess.Popen(['git',
+                                        '-c', 'gpg.program=%s' % gpg_wrapper,
+                                        'tag', '-v', self.tag],
+                                        cwd=input_repo)
+        if verify_proc.wait():
+            raise RuntimeError("GPG tag verification failed")
+
+        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', '-xaf', '-'], cwd=self.dir,
+                                        stdin=archive_proc.stdout)
+
+        ret1 = archive_proc.wait()
+        ret2 = extract_proc.wait()
+        if ret1 or ret2:
+            raise RuntimeError("Can't create archive")
+
+    def upstream_extract(self, input_tar):
+        self.log("Extracting tarball %s\n" % input_tar)
+        match = re.match(r'(^|.*/)(?P<dir>linux-\d+\.\d+(\.\d+)?(-\S+)?)\.tar(\.(?P<extension>(bz2|gz|xz)))?$', input_tar)
+        if not match:
+            raise RuntimeError("Can't identify name of tarball")
+
+        cmdline = ['tar', '-xaf', input_tar, '-C', self.dir]
+
+        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<extension>(bz2|gz|xz)))?$', 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')
+        elif match.group('extension') == 'xz':
+            cmdline.append('xzcat')
+        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.log("Patching source with debian patch (series %s)\n" % name)
+        fp = open("debian/patches/series-" + name)
+        series = PatchSeries(name, "debian/patches", fp)
+        series(dir=os.path.join(self.dir, self.orig))
+
+    def tar(self, orig_date):
+        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 = '''(cd '%s' && find '%s' -print0) |
+                     LC_ALL=C sort -z |
+                     tar -C '%s' --no-recursion --null -T - --mtime '%s' --owner root --group root -caf '%s'
+                  ''' % (self.dir, self.orig, self.dir, orig_date, out)
+        try:
+            if os.spawnv(os.P_WAIT, '/bin/sh', ['sh', '-c', cmdline]):
+                raise RuntimeError("Can't patch source")
+            os.chmod(out, 0o644)
+        except:
+            try:
+                os.unlink(out)
+            except OSError:
+                pass
+            raise
+        try:
+            os.symlink(os.path.join('orig', self.orig_tar), os.path.join('..', self.orig_tar))
+        except OSError:
+            pass
+
+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")
+    options, args = parser.parse_args()
+
+    assert 1 <= len(args) <= 2
+    Main(args, options.override_version)()
diff --git a/bin/getconfig.py b/bin/getconfig.py
new file mode 100755 (executable)
index 0000000..e993f7c
--- /dev/null
@@ -0,0 +1,27 @@
+#!/usr/bin/python3
+
+import sys
+sys.path.append(sys.path[0] + "/../lib/python")
+
+from debian_linux.config import ConfigCoreDump
+
+section = tuple(s or None for s in sys.argv[1:-1])
+key = sys.argv[-1]
+config = ConfigCoreDump(fp=open("debian/config.defines.dump", "rb"))
+try:
+    value = config[section][key]
+except KeyError:
+    sys.exit(1)
+
+if isinstance(value, str):
+    # Don't iterate over it
+    print(value)
+else:
+    # In case it's a sequence, try printing each item
+    try:
+        for item in value:
+            print(item)
+    except TypeError:
+        # Otherwise use the default format
+        print(value)
+
diff --git a/bin/git-tag-gpg-wrapper b/bin/git-tag-gpg-wrapper
new file mode 100755 (executable)
index 0000000..9982b01
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/bash -e
+
+# Instead of calling gpg, call gpgv and provide a local keyring
+
+debian_dir="$(readlink -f "$(dirname "$0")/..")"
+
+# Parse the expected options.  If the next two lines are combined, a
+# failure of getopt won't cause the script to exit.
+ordered_args="$(getopt -n "$0" -o "" -l "status-fd:" -l "keyid-format:" -l "verify" -- "$@")"
+eval "set -- $ordered_args"
+gpgv_opts=()
+while true; do
+    case "$1" in
+       --status-fd)
+           gpgv_opts+=(--status-fd $2)
+           shift 2
+           ;;
+       --keyid-format)
+           # ignore
+           shift 2
+           ;;
+       --verify)
+           # ignore
+           shift 1
+           ;;
+       --)
+           shift 1
+           break
+           ;;
+    esac
+done
+
+exec gpgv "${gpgv_opts[@]}" --keyring "$debian_dir/upstream/${DEBIAN_KERNEL_KEYRING:-signing-key.pgp}" -- "$@"
diff --git a/bin/kconfig.py b/bin/kconfig.py
new file mode 100755 (executable)
index 0000000..9ee0750
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/env python3
+
+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(open(c))
+    for key, value in overrides.items():
+        kconfig.set(key, value)
+    open(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)
diff --git a/bin/no-depmod b/bin/no-depmod
new file mode 100755 (executable)
index 0000000..ed5a846
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+# This is a dummy substitute for depmod.  Since we run depmod during
+# postinst, we do not need or want to package the files that it
+# generates.
+
+if [ "x$1" = x-V ]; then
+    # Satisfy version test
+    echo 'not really module-init-tools'
+elif [ "x$1" = x-b -a "${2%/depmod.??????}" != "$2" ]; then
+    # Satisfy test of short kernel versions
+    mkdir -p "$2/lib/modules/$3"
+    touch "$2/lib/modules/$3/modules.dep"
+else
+    echo 'skipping depmod'
+fi
diff --git a/bin/stable-update b/bin/stable-update
new file mode 100755 (executable)
index 0000000..7a79348
--- /dev/null
@@ -0,0 +1,126 @@
+#!/usr/bin/python3
+
+import sys
+sys.path.append(sys.path[0] + "/../lib/python")
+
+import os, re, subprocess
+
+from debian_linux.debian import Changelog, VersionLinux
+
+def base_version(ver):
+    # Assume base version is at least 3.0, thus only 2 components wanted
+    match = re.match(r'^(\d+\.\d+)', ver)
+    assert match
+    return match.group(1)
+
+def add_update(ver, inc):
+    base = base_version(ver)
+    if base == ver:
+        update = 0
+    else:
+        update = int(ver[len(base)+1:])
+    update += inc
+    if update == 0:
+        return base
+    else:
+        return '{}.{}'.format(base, update)
+
+def next_update(ver):
+    return add_update(ver, 1)
+
+def print_stable_log(log, cur_ver, new_ver):
+    major_ver = re.sub(r'^(\d+)\..*', r'\1', cur_ver)
+    while cur_ver != new_ver:
+        next_ver = next_update(cur_ver)
+        print('    https://www.kernel.org/pub/linux/kernel/v{}.x/ChangeLog-{}'
+              .format(major_ver, next_ver),
+              file=log)
+        log.flush() # serialise our output with git's
+        subprocess.check_call(['git', 'log', '--reverse',
+                               '--pretty=    - %s',
+                               'v{}..v{}^'.format(cur_ver, next_ver)],
+                              stdout=log)
+        cur_ver = next_ver
+
+def main(repo, new_ver):
+    os.environ['GIT_DIR'] = repo + '/.git'
+
+    changelog = Changelog(version=VersionLinux)
+    cur_pkg_ver = changelog[0].version
+    cur_ver = cur_pkg_ver.linux_upstream_full
+
+    if base_version(new_ver) != base_version(cur_ver):
+        print('{} is not on the same stable series as {}'
+              .format(new_ver, cur_ver),
+              file=sys.stderr)
+        sys.exit(2)
+
+    new_pkg_ver = new_ver + '-1'
+    if cur_pkg_ver.linux_revision_experimental:
+        new_pkg_ver += '~exp1'
+
+    # Three possible cases:
+    # 1. The current version has been released so we need to add a new
+    #    version to the changelog.
+    # 2. The current version has not been released so we're changing its
+    #    version string.
+    #    (a) There are no stable updates included in the current version,
+    #        so we need to insert an introductory line, the URL(s) and
+    #        git log(s) and a blank line at the top.
+    #    (b) One or more stable updates are already included in the current
+    #        version, so we need to insert the URL(s) and git log(s) after
+    #        them.
+
+    changelog_intro = 'New upstream stable update:'
+
+    # Case 1
+    if changelog[0].distribution != 'UNRELEASED':
+        subprocess.check_call(['dch', '-v', new_pkg_ver, '-D', 'UNRELEASED',
+                               changelog_intro])
+
+    with open('debian/changelog', 'r') as old_log:
+        with open('debian/changelog.new', 'w') as new_log:
+            line_no = 0
+            inserted = False
+            intro_line = '  * {}\n'.format(changelog_intro)
+
+            for line in old_log:
+                line_no += 1
+
+                # Case 2
+                if changelog[0].distribution == 'UNRELEASED' and line_no == 1:
+                    print('{} ({}) UNRELEASED; urgency={}'
+                          .format(changelog[0].source, new_pkg_ver,
+                                  changelog[0].urgency),
+                          file=new_log)
+                    continue
+
+                if not inserted:
+                    # Case 2(a)
+                    if line_no == 3 and line != intro_line:
+                        new_log.write(intro_line)
+                        print_stable_log(new_log, cur_ver, new_ver)
+                        new_log.write('\n')
+                        inserted = True
+                    # Case 1 or 2(b)
+                    elif line_no > 3 and line == '\n':
+                        print_stable_log(new_log, cur_ver, new_ver)
+                        inserted = True
+
+                # Check that we inserted before hitting the end of the
+                # first version entry
+                assert not (line.startswith(' -- ') and not inserted)
+
+                new_log.write(line)
+
+    os.rename('debian/changelog.new', 'debian/changelog')
+
+if __name__ == '__main__':
+    if len(sys.argv) != 3:
+        print('''\
+Usage: {} REPO VERSION"
+REPO is the git repository to generate a changelog from
+VERSION is the stable version (without leading v)'''.format(sys.argv[0]),
+              file=sys.stderr)
+        sys.exit(2)
+    main(*sys.argv[1:])
diff --git a/bin/stable-update.sh b/bin/stable-update.sh
new file mode 100755 (executable)
index 0000000..bd86860
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh -e
+exec "$(dirname "$0")/stable-update" "$@"
diff --git a/bin/test-patches b/bin/test-patches
new file mode 100755 (executable)
index 0000000..98ddd9f
--- /dev/null
@@ -0,0 +1,106 @@
+#!/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|rt|vserver|xen)-}"
+    if [ "x$flavour" != "x$ff" ]; then
+       featureset="${ff%-$flavour}"
+    else
+       featureset=none
+    fi
+else
+    flavour=
+    featureset=none
+fi
+
+fuzz=0
+jobs=$(nproc)
+
+eval "set -- $(getopt -n "$0" -o "f:j:s:" -l "fuzz:" -- "$@")"
+while true; do
+    case "$1" in
+       -f) flavour="$2"; shift 2 ;;
+       -j) jobs="$2"; shift 2 ;;
+       -s) featureset="$2"; shift 2 ;;
+       --fuzz) fuzz="$2"; shift 2;;
+       --) shift 1; break ;;
+    esac
+done
+           
+if [ $# -lt 1 ]; then
+    echo >&2 "Usage: $0 [<options>] <patch>..."
+    cat >&2 <<EOF
+Options:
+     -f <flavour>     specify the 'flavour' of kernel to build, e.g. 686-pae
+     -j <jobs>        specify number of compiler jobs to run in parallel
+                      (default: number of available processors)
+     -s <featureset>  specify an optional featureset to apply, e.g. rt
+     --fuzz <num>     set the maximum patch fuzz factor (default: 0)
+EOF
+    exit 2
+fi
+
+if [ -z "$flavour" ]; then
+    echo >&2 "You must specify a flavour to build with the -f option"
+    exit 2
+fi
+
+export DEB_BUILD_PROFILES=pkg.linux.notools
+export MAKEFLAGS="$MAKEFLAGS -j$jobs"
+
+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
+
+# Make new directory for patches
+mkdir -p debian/patches/test
+
+# Ignore user's .quiltrc
+alias quilt='quilt --quiltrc -'
+
+# Try to clean up any previous test patches
+if [ "$featureset" = none ]; then
+    while patch="$(quilt next 2>/dev/null || quilt top 2>/dev/null)" && \
+       [ "${patch#test/}" != "$patch" ]; do
+        quilt delete -r "$patch"
+    done
+else
+    sed -i '/^test\//d' debian/patches/series-${featureset}
+fi
+
+# Prepare a new directory for the patches
+rm -rf debian/patches/test/
+mkdir debian/patches/test
+
+# 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 up old build; apply existing patches for featureset
+debian/rules clean
+debian/rules source
+
+# Apply the additional patches
+for patch in "$@"; do
+    patch_abs="$(readlink -f "$patch")"
+    (cd "debian/build/source_${featureset}" && \
+     quilt import -P "test/$(basename "$patch")" "$patch_abs" && \
+     quilt push --fuzz="$fuzz")
+done
+
+# Build selected binaries
+fakeroot make -f debian/rules.gen binary-arch_"$arch"_"$featureset"_"$flavour"
diff --git a/bin/uscan-hook b/bin/uscan-hook
new file mode 100755 (executable)
index 0000000..b0631c6
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash -e
+
+# This script is invoked by uscan after downloading a new tarball
+
+if [ "x$1" != "x--upstream-version" -o $# != 3 ]; then
+   echo >&2 "invalid arguments: $*"
+   exit 2
+fi
+
+version="$2"
+filename="$3"
+
+upstream_tarball="$(readlink -f "$filename")"
+rm "$filename"
+debian/bin/genorig.py --override-version "$version" "$upstream_tarball"
+
+dch -v "$version-1" 'New upstream release'
+
+debian/rules orig
diff --git a/certs/benh@debian.org.cert.pem b/certs/benh@debian.org.cert.pem
new file mode 100644 (file)
index 0000000..8d49875
--- /dev/null
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDYDCCAkgCCQCKAY3KgJMmMDANBgkqhkiG9w0BAQsFADByMQswCQYDVQQGEwJH
+QjESMBAGA1UEBwwJQ2FtYnJpZGdlMRcwFQYDVQQKDA5EZWJpYW4gUHJvamVjdDEW
+MBQGA1UEAwwNQmVuIEh1dGNoaW5nczEeMBwGCSqGSIb3DQEJARYPYmVuaEBkZWJp
+YW4ub3JnMB4XDTE2MDQwMzIyNTg1NVoXDTE2MDUwMzIyNTg1NVowcjELMAkGA1UE
+BhMCR0IxEjAQBgNVBAcMCUNhbWJyaWRnZTEXMBUGA1UECgwORGViaWFuIFByb2pl
+Y3QxFjAUBgNVBAMMDUJlbiBIdXRjaGluZ3MxHjAcBgkqhkiG9w0BCQEWD2JlbmhA
+ZGViaWFuLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMPYUchZ
+x/VmCn4klnuqyym6gehD/sUnjqAbDdVtAVMYBHTxxpujW2GDtCsyiqyeDlSlbd6X
+piXAko7u2UaBfY5SpKcw1KDDrCgzQ3y9O0QCe0DzI/7YKvE3A7FPluJ1ZhIhHIIZ
+ce6oln0WfW/H5SY6BQWE3kzxXFUXXFPvTdLQtjOBxVWeOeMTZ5CAJqG/6uHIlJms
+RTJiiiHjrI3yAfLS1wcGutmu9q9YQF1ND+lbdIT4OeyIMVGe03dVrDxWjNUL+G5h
+nBRwFAwkb5qxpDNayvA8eIlNwWJE/uu+4crlL+PdM9i2TduoG5gRE39KPTrxrUyN
+QiDe+09lJF12wQECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAieMLuk4Ky2FmMnzF
+ryaJbbRXN163bXHPrDFd0NkvWQFa+3253QXxlLwEoS4v4OFbYb0tDxcn8qkpNLCb
+DLtNUcl99slPbmBUi/RFTy/aAWc6LB4XxjbFcIlY27/c/W5bbr6/XmlVtElRW3gZ
+y3JWFjgym+6lXywbr6RVKYioM3N+LlGf794Kf/pY9y7i8PqDM8WbhurGXwoaPxjv
+/XsVTpuMCkorUya2n7Ap9Hatlref/IccdxnIOxItH3Jvze0vfygL82Mee77KN5U/
+jsvtswp6P3K08sLjtFGiAhkjim67H+nJrrhhczXjtUnLZUQuHpkzOghyKFDMpn3R
+8lchpg==
+-----END CERTIFICATE-----
diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..1e7545c
--- /dev/null
+++ b/changelog
@@ -0,0 +1,26440 @@
+linux (4.9.25-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.19
+    - net/openvswitch: Set the ipv6 source tunnel key address attribute
+      correctly
+    - net: properly release sk_frag.page
+    - [arm64] amd-xgbe: Fix jumbo MTU processing on newer hardware
+    - openvswitch: Add missing case OVS_TUNNEL_KEY_ATTR_PAD
+    - net: unix: properly re-increment inflight counter of GC discarded
+      candidates
+    - net: vrf: Reset rt6i_idev in local dst after put
+    - net/mlx5: Add missing entries for set/query rate limit commands
+    - net/mlx5e: Use the proper UAPI values when offloading TC vlan actions
+    - net/mlx5: Increase number of max QPs in default profile
+    - net/mlx5e: Count GSO/LRO packets correctly
+    - ipv6: make sure to initialize sockc.tsflags before first use
+    - ipv4: provide stronger user input validation in nl_fib_input()
+    - socket, bpf: fix sk_filter use after free in sk_clone_lock
+    - tcp: initialize icsk_ack.lrcvtime at session start time
+    - Input: iforce,ims-pcu,hanwang,yealink,cm109,kbtab,sur40 - validate
+      number of endpoints before using them
+    - ALSA: seq: Fix racy cell insertions during snd_seq_pool_done()
+    - ALSA: ctxfi: Fix the incorrect check of dma_set_mask() call
+    - ALSA: hda - Adding a group of pin definition to fix headset problem
+    - ACM gadget: fix endianness in notifications
+    - usb: gadget: f_uvc: Fix SuperSpeed companion descriptor's
+      wBytesPerInterval
+    - USB: uss720,idmouse,wusbcore: fix NULL-deref at probe
+    - usb: musb: cppi41: don't check early-TX-interrupt for Isoch transfer
+    - usb: hub: Fix crash after failure to read BOS descriptor
+    - USB: usbtmc: add missing endpoint sanity check
+    - USB: usbtmc: fix probe error path
+    - uwb: i1480-dfu: fix NULL-deref at probe
+    - mmc: ushc: fix NULL-deref at probe
+    - [armhf[ iio: adc: ti_am335x_adc: fix fifo overrun recovery
+    - iio: sw-device: Fix config group initialization
+    - iio: hid-sensor-trigger: Change get poll value function order to avoid
+      sensor properties losing after resume from S3
+    - parport: fix attempt to write duplicate procfiles
+    - ext4: mark inode dirty after converting inline directory
+    - ext4: lock the xattr block before checksuming it
+    - [powerpc*/*64*] Fix idle wakeup potential to clobber registers
+    - mmc: sdhci: Do not disable interrupts while waiting for clock
+    - mmc: sdhci-pci: Do not disable interrupts in sdhci_intel_set_power
+    - [x86] hwrng: amd - Revert managed API changes
+    - [x86] hwrng: geode - Revert managed API changes
+    - [armhf] clk: sunxi-ng: sun6i: Fix enable bit offset for hdmi-ddc module
+      clock
+    - [armhf] clk: sunxi-ng: mp: Adjust parent rate for pre-dividers
+    - mwifiex: pcie: don't leak DMA buffers when removing
+    - [x86] crypto: ccp - Assign DMA commands to the channel's CCP
+    - xen/acpi: upload PM state from init-domain to Xen
+    - [x86] iommu/vt-d: Fix NULL pointer dereference in device_to_iommu
+    - [arm64] kaslr: Fix up the kernel image alignment
+    - cpufreq: Restore policy min/max limits on CPU online
+    - cgroup, net_cls: iterate the fds of only the tasks which are being
+      migrated
+    - blk-mq: don't complete un-started request in timeout handler
+    - [x86] drm/amdgpu: reinstate oland workaround for sclk
+    - jbd2: don't leak memory if setting up journal fails
+    - [x86] intel_th: Don't leak module refcount on failure to activate
+    - [x86] Drivers: hv: vmbus: Don't leak channel ids
+    - [x86] Drivers: hv: vmbus: Don't leak memory when a channel is rescinded
+    - libceph: don't set weight to IN when OSD is destroyed
+    - [x86] device-dax: fix pmd/pte fault fallback handling
+    - [armhf] drm/bridge: analogix dp: Fix runtime PM state on driver bind
+    - nl80211: fix dumpit error path RTNL deadlocks
+    - drm: reference count event->completion
+    - fbcon: Fix vc attr at deinit
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.20
+    - xfrm: policy: init locks early
+    - [x86] KVM: cleanup the page tracking SRCU instance
+    - virtio_balloon: init 1st buffer in stats vq
+    - [mips*] ptrace: Preserve previous registers for short regset write
+    - [sparc64] ptrace: Preserve previous registers for short regset write
+    - fscrypt: remove broken support for detecting keyring key revocation
+      (CVE-2017-7374)
+    - sched/rt: Add a missing rescheduling point
+    - [armhf] usb: musb: fix possible spinlock deadlock
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.21
+    - libceph: force GFP_NOIO for socket allocations
+    - xen/setup: Don't relocate p2m over existing one
+    - xfs: only update mount/resv fields on success in __xfs_ag_resv_init
+    - xfs: use per-AG reservations for the finobt
+    - xfs: pull up iolock from xfs_free_eofblocks()
+    - xfs: sync eofblocks scans under iolock are livelock prone
+    - xfs: fix eofblocks race with file extending async dio writes
+    - xfs: fix toctou race when locking an inode to access the data map
+    - xfs: fail _dir_open when readahead fails
+    - xfs: filter out obviously bad btree pointers
+    - xfs: check for obviously bad level values in the bmbt root
+    - xfs: verify free block header fields
+    - xfs: allow unwritten extents in the CoW fork
+    - xfs: mark speculative prealloc CoW fork extents unwritten
+    - xfs: reset b_first_retry_time when clear the retry status of xfs_buf_t
+    - xfs: update ctime and mtime on clone destinatation inodes
+    - xfs: reject all unaligned direct writes to reflinked files
+    - xfs: don't fail xfs_extent_busy allocation
+    - xfs: handle indlen shortage on delalloc extent merge
+    - xfs: split indlen reservations fairly when under reserved
+    - xfs: fix uninitialized variable in _reflink_convert_cow
+    - xfs: don't reserve blocks for right shift transactions
+    - xfs: Use xfs_icluster_size_fsb() to calculate inode chunk alignment
+    - xfs: tune down agno asserts in the bmap code
+    - xfs: only reclaim unwritten COW extents periodically
+    - xfs: fix and streamline error handling in xfs_end_io
+    - xfs: Use xfs_icluster_size_fsb() to calculate inode alignment mask
+    - xfs: use iomap new flag for newly allocated delalloc blocks
+    - xfs: try any AG when allocating the first btree block when reflinking
+    - scsi: libsas: fix ata xfer length
+    - scsi: scsi_dh_alua: Check scsi_device_get() return value
+    - scsi: scsi_dh_alua: Ensure that alua_activate() calls the completion
+      function
+    - ALSA: seq: Fix race during FIFO resize
+    - ALSA: hda - fix a problem for lineout on a Dell AIO machine
+    - [x86] ASoC: Intel: Skylake: fix invalid memory access due to wrong
+      reference of pointer
+    - HID: wacom: Don't add ghost interface as shared data
+    - mmc: sdhci: Disable runtime pm when the sdio_irq is enabled
+    - NFSv4.1 fix infinite loop on IO BAD_STATEID error
+    - nfsd: map the ENOKEY to nfserr_perm for avoiding warning
+    - [hppa] Clean up fixup routines for get_user()/put_user()
+    - [hppa] Avoid stalled CPU warnings after system shutdown
+    - [hppa] Fix access fault handling in pa_memcpy()
+    - ACPI: Fix incompatibility with mcount-based function graph tracing
+    - ACPI: Do not create a platform_device for IOAPIC/IOxAPIC
+    - USB: fix linked-list corruption in rh_call_control()
+    - [x86] KVM: clear bus pointer when destroyed
+    - KVM: kvm_io_bus_unregister_dev() should never fail
+    - drm/radeon: Override fpfn for all VRAM placements in radeon_evict_flags
+    - [armhf,arm64] drm/vc4: Allocate the right amount of space for boot-time
+      CRTC state.
+    - [armhf] drm/etnaviv: (re-)protect fence allocation with GPU mutex
+    - [x86] mm/KASLR: Exclude EFI region from KASLR VA space randomization
+    - [x86] mce: Fix copy/paste error in exception table entries
+    - lib/syscall: Clear return values when no stack
+    - mm: rmap: fix huge file mmap accounting in the memcg stats
+    - mm, hugetlb: use pte_present() instead of pmd_present() in
+      follow_huge_pmd()
+    - qla2xxx: Allow vref count to timeout on vport delete.
+    - mm: workingset: fix premature shadow node shrinking with cgroups
+    - blk: improve order of bio handling in generic_make_request()
+    - blk: Ensure users for current->bio_list can see the full list.
+    - padata: avoid race in reordering
+    - nvme/core: Fix race kicking freed request_queue
+    - nvme/pci: Disable on removal when disconnected
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.22
+    - ppdev: check before attaching port
+    - ppdev: fix registering same device name
+    - [x86] drm/vmwgfx: Type-check lookups of fence objects
+    - [x86] drm/vmwgfx: avoid calling vzalloc with a 0 size in
+      vmw_get_cap_3d_ioctl()
+    - drm/ttm, drm/vmwgfx: Relax permission checking when opening surfaces
+    - [x86] drm/vmwgfx: Remove getparam error message
+    - sysfs: be careful of error returns from ops->show()
+    - [armhf,arm64] KVM: Take mmap_sem in stage2_unmap_vm
+    - [armhf,arm64] KVM: Take mmap_sem in kvm_arch_prepare_memory_region
+    - [armhf,arm64] kvm: Fix locking for kvm_free_stage2_pgd
+    - [x86] iio: bmg160: reset chip when probing
+    - [arm64] mm: unaligned access by user-land should be received as SIGBUS
+    - cfg80211: check rdev resume callback only for registered wiphy
+    - CIFS: Reset TreeId to zero on SMB2 TREE_CONNECT
+    - mm/page_alloc.c: fix print order in show_free_areas()
+    - ptrace: fix PTRACE_LISTEN race corrupting task->state
+    - dm verity fec: limit error correction recursion
+    - dm verity fec: fix bufio leaks
+    - ACPI / gpio: do not fall back to parsing _CRS when we get a deferral
+    - xfs: Honor FALLOC_FL_KEEP_SIZE when punching ends of files
+    - ring-buffer: Fix return value check in test_ringbuffer()
+    - mac80211: unconditionally start new netdev queues with iTXQ support
+    - brcmfmac: use local iftype avoiding use-after-free of virtual interface
+    - [powerpc*] Disable HFSCR[TM] if TM is not supported
+    - [powerpc*] mm: Add missing global TLB invalidate if cxl is active
+    - [powerpc*/*64*]: Fix flush_(d|i)cache_range() called from modules
+    - [powerpc*] Don't try to fix up misaligned load-with-reservation
+      instructions
+    - [powerpc*] crypto/crc32c-vpmsum: Fix missing preempt_disable()
+    - dm raid: fix NULL pointer dereference for raid1 without bitmap
+    - [s390x] decompressor: fix initrd corruption caused by bss clear
+    - [s390x] uaccess: get_user() should zero on failure (again)
+    - [mips*el/loongson-3] Check TLB before handle_ri_rdhwr() for Loongson-3
+    - [mips*el/loongson-3] Add MIPS_CPU_FTLB for Loongson-3A R2
+    - [mips*el/loongson-3] Flush wrong invalid FTLB entry for huge page
+    - [mips*el/loongson-3] c-r4k: Fix Loongson-3's vcache/scache waysize
+      calculation
+    - mm/mempolicy.c: fix error handling in set_mempolicy and mbind
+      (CVE-2017-7616)
+    - random: use chacha20 for get_random_int/long
+    - [armhf] drm/sun4i: tcon: Move SoC specific quirks to a DT matched data
+      structure
+    - [armhf] drm/sun4i: Add compatible strings for A31/A31s display pipelines
+    - [armhf] drm/sun4i: Add compatible string for A31/A31s TCON (timing
+      controller)
+    - HID: i2c-hid: add a simple quirk to fix device defects
+    - usb: dwc3: gadget: delay unmap of bounced requests
+    - [x86] ASoC: Intel: bytct_rt5640: change default capture settings
+    - [armhf,arm64] clocksource/drivers/arm_arch_timer: Don't assume clock runs
+      in suspend
+    - scsi: ufs: introduce UFSHCD_QUIRK_PRDT_BYTE_GRAN quirk
+    - HID: multitouch: do not retrieve all reports for all devices
+    - [arm64] mmc: sdhci-msm: Enable few quirks
+    - scsi: ufs: ensure that host pa_tactivate is higher than device
+    - svcauth_gss: Close connection when dropping an incoming message
+    - scsi: ufs: add quirk to increase host PA_SaveConfigTime
+    - [x86] platform: acer-wmi: Only supports AMW0_GUID1 on acer family
+    - nvme: simplify stripe quirk
+    - ACPI / sysfs: Provide quirk mechanism to prevent GPE flooding
+    - HID: usbhid: Add quirk for the Futaba TOSD-5711BB VFD
+    - [x86] drm/i915: actually drive the BDW reserved IDs
+    - scsi: ufs: issue link starup 2 times if device isn't active
+    - [armhf] serial: 8250_omap: Add OMAP_DMA_TX_KICK quirk for AM437x
+    - ACPI / button: Change default behavior to lid_init_state=open
+    - [x86] ACPI: save NVS memory for Lenovo G50-45
+    - HID: wacom: don't apply generic settings to old devices
+    - [arm64] firmware: qcom: scm: Fix interrupted SCM calls
+    - [armhf] watchdog: s3c2410: Fix infinite interrupt in soft mode
+    - [x86] platform: asus-wmi: Set specified XUSB2PR value for X550LB
+    - [x86] platform: asus-wmi: Detect quirk_no_rfkill from the DSDT
+    - [x86] reboot/quirks: Add ASUS EeeBook X205TA reboot quirk
+    - [x86] reboot/quirks: Add ASUS EeeBook X205TA/W reboot quirk
+    - usb-storage: Add ignore-residue quirk for Initio INIC-3619
+    - [x86] reboot/quirks: Fix typo in ASUS EeeBook X205TA reboot quirk
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.23
+    - [x86] drm/i915/gen9: Increase PCODE request timeout to 50ms
+    - [x86] drm/i915: Nuke debug messages from the pipe update critical section
+    - [x86] drm/i915: Avoid tweaking evaluation thresholds on Baytrail v3
+    - [x86] drm/i915: Only enable hotplug interrupts if the display interrupts
+      are enabled
+    - [x86] drm/i915: Drop support for I915_EXEC_CONSTANTS_* execbuf parameters.
+    - [x86] drm/i915: Stop using RP_DOWN_EI on Baytrail
+    - [x86] drm/i915: Avoid rcu_barrier() from reclaim paths (shrinker)
+    - [armhf,arm64] i2c: bcm2835: Fix hang for writing messages larger than 16
+      bytes
+    - rt2x00usb: fix anchor initialization
+    - rt2x00usb: do not anchor rx and tx urb's
+    - [mips*] Introduce irq_stack
+    - [mips*] Stack unwinding while on IRQ stack
+    - [mips*] Only change $28 to thread_info if coming from user mode
+    - [mips*] Switch to the irq_stack in interrupts
+    - [mips*] Select HAVE_IRQ_EXIT_ON_IRQ_STACK
+    - [mips*] IRQ Stack: Fix erroneous jal to plat_irq_dispatch
+    - [x86] Revert "drm/i915/execlists: Reset RING registers upon resume"
+    - blk-mq: Avoid memory reclaim when remapping queues
+    - usb: hub: Wait for connection to be reestablished after port reset
+    - net/mlx4_en: Fix bad WQE issue
+    - net/mlx4_core: Fix racy CQ (Completion Queue) free
+    - net/mlx4_core: Fix when to save some qp context flags for dynamic VST to
+      VGT transitions
+    - dma-buf: add support for compat ioctl
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.24
+    - cgroup, kthread: close race window where new kthreads can be migrated to
+      non-root cgroups
+    - thp: fix MADV_DONTNEED vs. MADV_FREE race
+    - thp: fix MADV_DONTNEED vs clear soft dirty race
+    - zsmalloc: expand class bit
+    - drm/nouveau/mpeg: mthd returns true on success now
+    - drm/nouveau/mmu/nv4a: use nv04 mmu rather than the nv44 one
+    - [armhf] drm/etnaviv: fix missing unlock on error in etnaviv_gpu_submit()
+    - CIFS: reconnect thread reschedule itself
+    - CIFS: store results of cifs_reopen_file to avoid infinite wait
+    - Input: xpad - add support for Razer Wildcat gamepad
+    - [x86] perf: Avoid exposing wrong/stale data in intel_pmu_lbr_read_32()
+    - [x86] efi: Don't try to reserve runtime regions
+    - [x86] signals: Fix lower/upper bound reporting in compat siginfo
+    - [x86] pmem: fix broken __copy_user_nocache cache-bypass assumptions
+    - [x86] vdso: Ensure vdso32_enabled gets set to valid values only
+    - [x86] vdso: Plug race between mapping and ELF header setup
+    - [x86] acpi, nfit, libnvdimm: fix interleave set cookie calculation
+      (64-bit comparison)
+    - ACPI / scan: Set the visited flag for all enumerated devices
+    - [hppa] fix bugs in pa_memcpy
+    - efi/libstub: Skip GOP with PIXEL_BLT_ONLY format
+    - efi/fb: Avoid reconfiguration of BAR that covers the framebuffer
+    - iscsi-target: Fix TMR reference leak during session shutdown
+    - iscsi-target: Drop work-around for legacy GlobalSAN initiator
+    - scsi: sr: Sanity check returned mode data
+    - scsi: sd: Consider max_xfer_blocks if opt_xfer_blocks is unusable
+    - scsi: qla2xxx: Add fix to read correct register value for ISP82xx.
+    - scsi: sd: Fix capacity calculation with 32-bit sector_t
+    - target: Avoid mappedlun symlink creation during lun shutdown
+    - xen, fbfront: fix connecting to backend
+    - new privimitive: iov_iter_revert()
+    - make skb_copy_datagram_msg() et.al. preserve ->msg_iter on error
+    - [x86] libnvdimm: fix blk free space accounting
+    - [x86] libnvdimm: fix reconfig_mutex, mmap_sem, and jbd2_handle lockdep
+      splat
+    - [armhf] pwm: rockchip: State of PWM clock should synchronize with PWM
+      enabled state
+    - cpufreq: Bring CPUs up even if cpufreq_online() failed
+    - [armhf] irqchip/irq-imx-gpcv2: Fix spinlock initialization
+    - ftrace: Fix removing of second function probe
+    - zram: do not use copy_page with non-page aligned address
+    - ftrace: Fix function pid filter on instances
+    - crypto: algif_aead - Fix bogus request dereference in completion function
+    - crypto: ahash - Fix EINPROGRESS notification callback (CVE-2017-7618)
+    - [hppa] Fix get_user() for 64-bit value on 32-bit kernel
+    - dvb-usb-v2: avoid use-after-free (CVE-2017-8064)
+    - drm/nouveau/disp/mcp7x: disable dptmds workaround (Closes: #850219)
+    - [x86] mm: Tighten x86 /dev/mem with zeroing reads (CVE-2017-7889)
+    - dvb-usb-firmware: don't do DMA on stack (CVE-2017-8061)
+    - cxusb: Use a dma capable buffer also for reading (CVE-2017-8063)
+    - virtio-console: avoid DMA from stack (CVE-2017-8067)
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.25
+    - KEYS: Disallow keyrings beginning with '.' to be joined as session
+      keyrings (CVE-2016-9604)
+    - KEYS: Change the name of the dead type to ".dead" to prevent user access
+      (CVE-2017-6951)
+    - KEYS: fix keyctl_set_reqkey_keyring() to not leak thread keyrings
+      (CVE-2017-7472)
+    - tracing: Allocate the snapshot buffer before enabling probe
+    - ring-buffer: Have ring_buffer_iter_empty() return true when empty
+    - mm: prevent NR_ISOLATE_* stats from going negative
+    - cifs: Do not send echoes before Negotiate is complete (Closes: #856843)
+    - CIFS: remove bad_network_name flag
+    - [s390x] mm: fix CMMA vs KSM vs others
+    - Input: elantech - add Fujitsu Lifebook E547 to force crc_enabled
+    - ACPI / power: Avoid maybe-uninitialized warning
+    - [armhf] mmc: sdhci-esdhc-imx: increase the pad I/O drive strength for
+      DDR50 card
+    - ubifs: Fix RENAME_WHITEOUT support
+    - ubifs: Fix O_TMPFILE corner case in ubifs_link()
+    - mac80211: reject ToDS broadcast data frames
+    - mac80211: fix MU-MIMO follow-MAC mode
+    - ubi/upd: Always flush after prepared for an update
+    - [powerpc*] kprobe: Fix oops when kprobed on 'stdu' instruction
+    - [x86] mce/AMD: Give a name to MCA bank 3 when accessed with legacy MSRs
+    - [x86] mce: Make the MCE notifier a blocking one
+    - device-dax: switch to srcu, fix rcu_read_lock() vs pte allocation
+
+  [ Ben Hutchings ]
+  * w1: Really enable W1_MASTER_GPIO as module (Closes: #858975)
+  * debian/rules.real: Undefine $LANGUAGE, which can break debug symbols for
+    vDSOs (Closes: #859807)
+  * Bump ABI to 3
+  * [s390x] Set NR_CPUS=256 (Closes: #858731)
+  * [x86] usbip: Increase USBIP_VHCI_NR_HCS to 8 and USBIP_VHCI_HC_PORTS to 31
+    (Closes: #859641)
+  * [powerpc/powerpc64,ppc64*] target: Enable SCSI_IBMVSCSIS as module
+  * cpupower: Fix turbo frequency reporting for pre-Sandy Bridge cores
+    (Closes: #859978)
+  * udeb: Include all AHCI drivers in sata-modules (Closes: #860335)
+  * [powerpc/powerpc64,ppc64] Set NR_CPUS=2048, matching ppc64el
+  * [powerpc*/*64*] Enable CPUMASK_OFFSTACK to reduce stack usage
+  * [mips*el/loongson-3] Set NR_CPUS=16 to allow for Loongson 3B2000
+  * [mips*/octeon] Set NR_CPUS=64 to allow for Cavium CN7890
+  * [arm64] Set NR_CPUS=256 to allow for multi-SoC systems (Closes: #861209)
+  * [powerpc/powerpc-smp,powerpcspe] Explicitly set NR_CPUS=4
+  * Move debug symbols back to the main archive, to avoid problems with the
+    current handling in dak
+  * linux-image: Disable signing until it's supported in dak
+  * [rt] Update to 4.9.20-rt16:
+    - rtmutex: Make lock_killable work
+    - rtmutex: Provide rt_mutex_lock_state()
+    - rtmutex: Provide locked slowpath
+    - rwsem/rt: Lift single reader restriction
+  * PCI: Enable PCIE_PTM (except on armel/marvell)
+  * 6lowpan: Enable Generic Header Compression modules
+  * net/sched: Enable NET_ACT_SKBMOD as module
+  * ethernet: Enable NFP_NETVF as module
+  * net/phy: Enable MICROSEMI_PHY as module
+  * input/tablet: Enable TABLET_USB_PEGASUS as module
+  * [x86] input/touchscreen: Enable TOUCHSCREEN_SURFACE3_SPI as module
+  * serial/8250: Enable SERIAL_8250_MOXA as module
+  * [x86] gpio: Enable GPIO_AMDPT as module
+  * [x86] thermal: Enable INT3406_THERMAL as module
+  * watchdog: Enable WATCHDOG_SYSFS
+  * integrity: Enable IMA, IMA_DEFAULT_HASH_SHA256, IMA_APPRAISE,
+    IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY, IMA_BLACKLIST_KEYRING
+    (except on armel/marvell) (Closes: #788290)
+  * media: Enable VIDEO_TW5864, VIDEO_TW686X as modules
+  * [x86] amdgpu,sound/soc: Enable DRM_AMD_ACP; enable SND_SOC_AMD_ACP as module
+  * hda: Set SND_HDA_PREALLOC_SIZE=2048 as recommended for PulseAudio
+  * HID: Enable HID_SENSOR_CUSTOM_SENSOR as module
+  * leds,USB: Enable USB_LEDS_TRIGGER_USBPORT as module
+  * usbip: Enable USBIP_VUDC as module
+  * USB/misc: Enable UCSI as module
+  * leds: Enable LEDS_TRIGGER_DISK, LEDS_TRIGGER_MTD, LEDS_TRIGGER_PANIC
+  * IB: Enable INFINIBAND_HFI1, INFINIBAND_I40IW, INFINIBAND_QEDR, RDMA_RXE
+    as modules
+  * [amd64] EDAC: Enable EDAC_SKX as module
+  * [x86] comedi: Enable COMEDI_ADV_PCI1720, COMEDI_ADV_PCI1760 as modules
+  * [x86] platform: Enable INTEL_HID_EVENT as module
+  * [x86] hwtracing: Enable INTEL_TH, INTEL_TH_PCI, INTEL_TH_GTH, INTEL_TH_MSU,
+    INTEL_TH_PTI as modules
+  * [rt] tracing: Enable HWLAT_TRACER
+  * [x86] crypto: Enable CRYPTO_DEV_QAT_C3XXX, CRYPTO_DEV_QAT_C62X,
+    CRYPTO_DEV_QAT_C3XXXVF, CRYPTO_DEV_QAT_C62XVF as modules
+  * crypto: Enable CRYPTO_DEV_CHELSIO as module
+  * [arm64] Enable ARMV8_DEPRECATED, SWP_EMULATION, CP15_BARRIER_EMULATION,
+    SETEND_EMULATION (Closes: #861384)
+  * udeb: Add tifm_7xx1 to mmc-modules (Closes: #861195)
+  * leds: Enable LEDS_GPIO as module for all configurations with GPIOs
+    (Closes: #860569)
+  * selinux: Set SECURITY_SELINUX_CHECKREQPROT_VALUE=0, per default.
+    This may break some old applications if SELinux is enabled, and can be
+    reverted using the kernel parameter: checkreqprot=1
+  * udeb: Move mfd-core to kernel-image, as both input-modules and
+    mmc-modules need it
+  * crypto: Change CRYPTO_SHA256 from module to built-in, as required by IMA
+
+  [ Salvatore Bonaccorso ]
+  * ping: implement proper locking (CVE-2017-2671)
+  * macsec: avoid heap overflow in skb_to_sgvec (CVE-2017-7477)
+  * macsec: dynamically allocate space for sglist
+  * nfsd: check for oversized NFSv2/v3 arguments (CVE-2017-7645)
+  * nfsd4: minor NFSv2/v3 write decoding cleanup
+  * nfsd: stricter decoding of write-like NFSv2/v3 ops (CVE-2017-7895)
+
+  [ Aurelien Jarno ]
+  * [mips*/octeon] Drop obsolete patch adding support for the UBNT E200
+    board.
+  * [mips*el/loongson-3] Disable PAGE_EXTENSION and PAGE_POISONING.
+
+  [ John Paul Adrian Glaubitz ]
+  * [m68k] udeb: Enable suffix for kernel-image (Closes: #859366)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 02 May 2017 16:21:44 +0100
+
+linux (4.9.18-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.17
+    - net/mlx5e: Register/unregister vport representors on interface
+      attach/detach
+    - net/mlx5e: Do not reduce LRO WQE size when not using build_skb
+    - net/mlx5e: Fix wrong CQE decompression
+    - vxlan: correctly validate VXLAN ID against VXLAN_N_VID
+    - vti6: return GRE_KEY for vti6
+    - vxlan: don't allow overwrite of config src addr
+    - ipv4: mask tos for input route
+    - net sched actions: decrement module reference count after table flush.
+    - l2tp: avoid use-after-free caused by l2tp_ip_backlog_recv
+    - net: phy: Avoid deadlock during phy_error()
+    - vxlan: lock RCU on TX path
+    - geneve: lock RCU on TX path
+    - tcp/dccp: block BH for SYN processing
+    - net: bridge: allow IPv6 when multicast flood is disabled
+    - net: don't call strlen() on the user buffer in packet_bind_spkt()
+    - net: net_enable_timestamp() can be called from irq contexts
+    - ipv6: orphan skbs in reassembly unit
+    - dccp: Unlock sock before calling sk_free()
+    - strparser: destroy workqueue on module exit
+    - tcp: fix various issues for sockets morphing to listen state
+    - net: fix socket refcounting in skb_complete_wifi_ack()
+    - net: fix socket refcounting in skb_complete_tx_timestamp()
+    - net/sched: act_skbmod: remove unneeded rcu_read_unlock in tcf_skbmod_dump
+    - dccp: fix use-after-free in dccp_feat_activate_values
+    - vrf: Fix use-after-free in vrf_xmit
+    - net/tunnel: set inner protocol in network gro hooks
+    - act_connmark: avoid crashing on malformed nlattrs with null parms
+    - mpls: Send route delete notifications when router module is unloaded
+    - mpls: Do not decrement alive counter for unregister events
+    - ipv6: make ECMP route replacement less greedy
+    - ipv6: avoid write to a possibly cloned skb
+    - bridge: drop netfilter fake rtable unconditionally
+    - dccp/tcp: fix routing redirect race
+    - tun: fix premature POLLOUT notification on tun devices
+    - dccp: fix memory leak during tear-down of unsuccessful connection request
+    - bpf: Detect identical PTR_TO_MAP_VALUE_OR_NULL registers
+    - bpf: fix state equivalence
+    - bpf: fix regression on verifier pruning wrt map lookups
+    - bpf: fix mark_reg_unknown_value for spilled regs on map value marking
+    - dmaengine: iota: ioat_alloc_chan_resources should not perform sleeping
+      allocations.
+    - xen: do not re-use pirq number cached in pci device msi msg data
+    - igb: Workaround for igb i210 firmware issue
+    - igb: add i211 to i210 PHY workaround
+    - [x86] hyperv: Handle unknown NMIs on one CPU when unknown_nmi_panic
+    - PCI: Separate VF BAR updates from standard BAR updates
+    - PCI: Remove pci_resource_bar() and pci_iov_resource_bar()
+    - PCI: Decouple IORESOURCE_ROM_ENABLE and PCI_ROM_ADDRESS_ENABLE
+    - PCI: Don't update VF BARs while VF memory space is enabled
+    - PCI: Update BARs using property bits appropriate for type
+    - PCI: Ignore BAR updates on virtual functions
+    - PCI: Do any VF BAR updates before enabling the BARs
+    - [powerpc*] ibmveth: calculate gso_segs for large packets
+    - [x86] Drivers: hv: ring_buffer: count on wrap around mappings in
+      get_next_pkt_raw() (v2)
+    - vfio/spapr: Postpone allocation of userspace version of TCE table
+    - [powerpc*] iommu: Stop using @current in mm_iommu_xxx
+    - [powerpc*] vfio/spapr: Reference mm in tce_container
+    - [powerpc*] mm/iommu, vfio/spapr: Put pages on VFIO container shutdown
+    - [powerpc*] vfio/spapr: Add a helper to create default DMA window
+    - [powerpc*] vfio/spapr: Postpone default window creation
+    - drm/nouveau/disp/gp102: fix cursor/overlay immediate channel indices
+    - drm/nouveau/disp/nv50-: split chid into chid.ctrl and chid.user
+    - drm/nouveau/disp/nv50-: specify ctrl/user separately when constructing
+      classes
+    - block: allow WRITE_SAME commands with the SG_IO ioctl
+    - [s390x] zcrypt: Introduce CEX6 toleration
+    - uvcvideo: uvc_scan_fallback() for webcams with broken chain
+    - [x86] ACPI / blacklist: add _REV quirks for Dell Precision 5520 and 3520
+    - [x86] ACPI / blacklist: Make Dell Latitude 3350 ethernet work
+    - serial: 8250_pci: Detach low-level driver during PCI error recovery
+    - [armhf] clk: bcm2835: Fix ->fixed_divider of pllh_aux
+    - [armhf] drm/vc4: Fix race between page flip completion event and clean-up
+    - [armhf] drm/vc4: Fix ->clock_select setting for the VEC encoder
+    - [arm64] KVM: VHE: Clear HCR_TGE when invalidating guest TLBs
+    - [armhf,arm64] irqchip/gicv3-its: Add workaround for QDF2400 ITS erratum
+      0065
+    - [x86] tsc: Fix ART for TSC_KNOWN_FREQ
+    - [x86] perf: Fix CR4.PCE propagation to use active_mm instead of mm
+    - futex: Fix potential use-after-free in FUTEX_REQUEUE_PI
+    - futex: Add missing error handling to FUTEX_REQUEUE_PI
+    - locking/rwsem: Fix down_write_killable() for
+      CONFIG_RWSEM_GENERIC_SPINLOCK=y
+    - [powerpc*] crypto: Fix initialisation of crc32c context
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.18
+    - [armhf] drm/vc4: Fix termination of the initial scan for branch targets.
+    - [armhf] drm/vc4: Use runtime autosuspend to avoid thrashing V3D power
+      state.
+    - qla2xxx: Fix memory leak for abts processing
+    - qla2xxx: Fix request queue corruption.
+    - [hppa] Optimize flush_kernel_vmap_range and invalidate_kernel_vmap_range
+    - [hppa] Fix system shutdown halt
+    - perf/core: Fix use-after-free in perf_release()
+    - perf/core: Fix event inheritance on fork()
+    - NFS prevent double free in async nfs4_exchange_id
+    - cpufreq: Fix and clean up show_cpuinfo_cur_freq()
+    - [powerpc*] boot: Fix zImage TOC alignment
+    - md/raid1/10: fix potential deadlock
+    - target/pscsi: Fix TYPE_TAPE + TYPE_MEDIMUM_CHANGER export
+    - scsi: lpfc: Add shutdown method for kexec
+    - scsi: libiscsi: add lock around task lists to fix list corruption
+      regression
+    - target: Fix VERIFY_16 handling in sbc_parse_cdb
+    - isdn/gigaset: fix NULL-deref at probe
+    - gfs2: Avoid alignment hole in struct lm_lockname
+    - percpu: acquire pcpu_lock when updating pcpu_nr_empty_pop_pages
+    - cgroup/pids: remove spurious suspicious RCU usage warning
+    - [x86] drm/amdgpu/si: add dpm quirk for Oland
+    - ext4: fix fencepost in s_first_meta_bg validation (Closes: #856808)
+
+  [ Ben Hutchings ]
+  * [powerpc*] Ignore ABI changes in cxl (fixes FTBFS) (Closes: #858530)
+    and IOMMU setup
+  * Ignore ABI changes in bpf, dccp, libiscsi
+  * [x86] Ignore ABI changes in kvm
+  * [rt] Update to 4.9.18-rt14:
+    - lockdep: Fix per-cpu static objects
+    - futex: Cleanup variable names for futex_top_waiter()
+    - futex: Use smp_store_release() in mark_wake_futex()
+    - futex: Remove rt_mutex_deadlock_account_*()
+    - futex,rt_mutex: Provide futex specific rt_mutex API
+    - futex: Change locking rules
+    - futex: Cleanup refcounting
+    - futex: Rework inconsistent rt_mutex/futex_q state
+    - futex: Pull rt_mutex_futex_unlock() out from under hb->lock
+    - futex,rt_mutex: Introduce rt_mutex_init_waiter()
+    - futex,rt_mutex: Restructure rt_mutex_finish_proxy_lock()
+    - futex: Rework futex_lock_pi() to use rt_mutex_*_proxy_lock()
+    - futex: Futex_unlock_pi() determinism
+    - futex: Drop hb->lock before enqueueing on the rtmutex
+    - futex: workaround migrate_disable/enable in different context
+    - Revert "kernel/futex: don't deboost too early"
+  * xfrm_user: validate XFRM_MSG_NEWAE XFRMA_REPLAY_ESN_VAL replay_window
+    (CVE-2017-7184)
+  * xfrm_user: validate XFRM_MSG_NEWAE incoming ESN size harder (CVE-2017-7184)
+  * scsi: sg: check length passed to SG_NEXT_CMD_LEN (CVE-2017-7187)
+  * [x86] vmwgfx: NULL pointer dereference in vmw_surface_define_ioctl()
+    (CVE-2017-7261)
+  * [x86] drm/vmwgfx: fix integer overflow in vmw_surface_define_ioctl()
+    (CVE-2017-7294)
+  * net/packet: Fix integer overflow in various range checks (CVE-2017-7308)
+  * [arm64] rtc: tegra: Implement clock handling (Closes: #858514)
+  * [armhf] sound/soc: Enable SND_SUN4I_SPDIF as module (Closes: #857410)
+  * [arm64,x86] Enable CROS_KBD_LED_BACKLIGHT as module (Closes: #856906)
+  * netfilter: nft_ct: add notrack support (Closes: #845500)
+  * w1: Enable W1_MASTER_GPIO as module (Closes: #858975)
+
+  [ James Clarke ]
+  * [sparc64] udeb: Re-add ufs-modules (Closes: #858049)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 30 Mar 2017 02:16:33 +0100
+
+linux (4.9.16-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.14
+    - [mips*] Fix special case in 64 bit IP checksumming.
+    - [mips*/octeon] Fix copy_from_user fault handling for large buffers
+    - mmc: sdhci-acpi: support deferred probe
+    - uvcvideo: Fix a wrong macro
+    - media: fix dm1105.c build error
+    - lirc_dev: LIRC_{G,S}ET_REC_MODE do not work
+    - media: Properly pass through media entity types in entity enumeration
+    - ext4: fix deadlock between inline_data and ext4_expand_extra_isize_ea()
+    - [x86] ALSA: hda/realtek - Cannot adjust speaker's volume on a Dell AIO
+    - [x86] ALSA: hda - fix Lewisburg audio issue
+    - ALSA: timer: Reject user params with too small ticks
+    - ALSA: ctxfi: Fallback DMA mask to 32bit
+    - ALSA: seq: Fix link corruption by event error handling
+    - [x86] ALSA: hda - Add subwoofer support for Dell Inspiron 17 7000 Gaming
+    - [x86] ALSA: hda - Fix micmute hotkey problem for a lenovo AIO machine
+    - hwmon: (it87) Do not overwrite bit 2..6 of pwm control registers
+    - hwmon: (it87) Ensure that pwm control cache is current before updating
+      values
+    - [x86] staging/lustre/lnet: Fix allocation size for sv_cpt_data
+    - staging: rtl: fix possible NULL pointer dereference
+    - regulator: Fix regulator_summary for deviceless consumers
+    - tpm_tis: fix the error handling of init_tis()
+    - [x86] iommu/vt-d: Fix some macros that are incorrectly specified in
+      intel-iommu
+    - [x86] iommu/vt-d: Tylersburg isoch identity map check is done too late.
+    - CIFS: Fix splice read for non-cached files
+    - [x86] mm, devm_memremap_pages: hold device_hotplug lock over
+      mem_hotplug_{begin, done}
+    - mm/page_alloc: fix nodes for reclaim in fast path
+    - mm: vmpressure: fix sending wrong events on underflow
+    - mm: do not access page->mapping directly on page_endio
+    - mm balloon: umount balloon_mnt when removing vb device
+    - mm, vmscan: cleanup lru size claculations
+    - mm, vmscan: consider eligible zones in get_scan_count
+    - sigaltstack: support SS_AUTODISARM for CONFIG_COMPAT
+    - PM / devfreq: Fix available_governor sysfs
+    - PM / devfreq: Fix wrong trans_stat of passive devfreq device
+    - dm cache: fix corruption seen when using cache > 2TB
+    - dm stats: fix a leaked s->histogram_boundaries array
+    - dm round robin: revert "use percpu 'repeat_count' and 'current_path'"
+    - dm raid: fix data corruption on reshape request
+    - [x86] scsi: storvsc: use tagged SRB requests if supported by the device
+    - [x86] scsi: storvsc: properly handle SRB_ERROR when sense message is
+      present
+    - [x86] scsi: storvsc: properly set residual data length on errors
+    - scsi: aacraid: Reorder Adapter status check
+    - scsi: use 'scsi_device_from_queue()' for scsi_dh
+    - Fix: Disable sys_membarrier when nohz_full is enabled
+    - jbd2: don't leak modified metadata buffers on an aborted journal
+    - block/loop: fix race between I/O and set_status
+    - loop: fix LO_FLAGS_PARTSCAN hang
+    - ext4: Include forgotten start block on fallocate insert range
+    - ext4: do not polute the extents cache while shifting extents
+    - ext4: trim allocation requests to group size
+    - ext4: fix data corruption in data=journal mode
+    - ext4: fix use-after-iput when fscrypt contexts are inconsistent
+    - ext4: fix inline data error paths
+    - ext4: preserve the needs_recovery flag when the journal is aborted
+    - ext4: return EROFS if device is r/o and journal replay is needed
+    - mei: remove support for broken parallel read
+    - ath10k: fix boot failure in UTF mode/testmode
+    - ath5k: drop bogus warning on drv_set_key with unsupported cipher
+    - ath9k: fix race condition in enabling/disabling IRQs
+    - ath9k: use correct OTP register offsets for the AR9340 and AR9550
+    - [x86] PCI: hv: Fix wslot_to_devfn() to fix warnings on device removal
+    - [x86] Drivers: hv: vmbus: Raise retry/wait limits in vmbus_post_msg()
+    - perf callchain: Reference count maps
+    - crypto: testmgr - Pad aes_ccm_enc_tv_template vector
+    - fuse: add missing FR_FORCE
+    - [x86] pkeys: Check against max pkey to avoid overflows
+    - [armhf,arm64] KVM: Enforce unconditional flush to PoC when mapping to
+      stage-2
+    - [arm64] dma-mapping: Fix dma_mapping_error() when bypassing SWIOTLB
+    - [arm64] fix erroneous __raw_read_system_reg() cases
+    - [armhf,arm64] KVM: vgic: Stop injecting the MSI occurrence twice
+    - can: gs_usb: Don't use stack memory for USB transfers
+    - can: usb_8dev: Fix memory leak of priv->cmd_msg_buffer
+    - w1: don't leak refcount on slave attach failure in
+      w1_attach_slave_device()
+    - w1: ds2490: USB transfer buffers need to be DMAable
+    - usb: dwc3: gadget: skip Set/Clear Halt when invalid
+    - usb: host: xhci: plat: check hcc_params after add hcd
+    - usb: gadget: udc-core: Rescan pending list on driver unbind
+    - usb: gadget: f_hid: fix: Free out requests
+    - usb: gadget: f_hid: fix: Prevent accessing released memory
+    - usb: gadget: f_hid: Use spinlock instead of mutex
+    - [x86] hv: allocate synic pages for all present CPUs
+    - [x86] hv: init percpu_list in hv_synic_alloc()
+    - [x86] hv: don't reset hv_context.tsc_page on crash
+    - [x86] Drivers: hv: vmbus: Prevent sending data on a rescinded channel
+    - [x86] Drivers: hv: vmbus: Fix a rescind handling bug
+    - [x86] Drivers: hv: util: kvp: Fix a rescind processing issue
+    - [x86] Drivers: hv: util: Fcopy: Fix a rescind processing issue
+    - [x86] Drivers: hv: util: Backup: Fix a rescind processing issue
+    - RDMA/core: Fix incorrect structure packing for booleans
+    - rdma_cm: fail iwarp accepts w/o connection params
+    - gfs2: Add missing rcu locking for glock lookup
+    - [arm64] remoteproc: qcom: mdt_loader: Don't overwrite firmware object
+    - rtlwifi: Fix alignment issues
+    - rtlwifi: rtl8192c-common: Fix "BUG: KASAN:
+    - [m68k] VME: restore bus_remove function causing incomplete module unload
+    - nfsd: minor nfsd_setattr cleanup
+    - nfsd: special case truncates some more
+    - NFSv4: Fix memory and state leak in _nfs4_open_and_get_state
+    - NFSv4: Fix reboot recovery in copy offload
+    - pNFS/flexfiles: If the layout is invalid, it must be updated before
+      retrying
+    - NFSv4: fix getacl head length estimation
+    - NFSv4: fix getacl ERANGE for some ACL buffer sizes
+    - f2fs: fix a problem of using memory after free
+    - f2fs: fix multiple f2fs_add_link() calls having same name
+    - f2fs: add ovp valid_blocks check for bg gc victim to fg_gc
+    - f2fs: avoid to issue redundant discard commands
+    - [armhf] rtc: sun6i: Disable the build as a module
+    - [armhf] rtc: sun6i: Add some locking
+    - [armhf] rtc: sun6i: Switch to the external oscillator
+    - md linear: fix a race between linear_add() and linear_congested()
+    - bcma: use (get|put)_device when probing/removing device driver
+    - [armhf] dmaengine: ipu: Make sure the interrupt routine checks all
+      interrupts.
+    - xprtrdma: Fix Read chunk padding
+    - xprtrdma: Per-connection pad optimization
+    - xprtrdma: Disable pad optimization by default
+    - xprtrdma: Reduce required number of send SGEs
+    - [powerpc*] xmon: Fix data-breakpoint
+    - [powerpc*] mm: Add MMU_FTR_KERNEL_RO to possible feature mask
+    - [powerpc*] mm/hash: Always clear UPRT and Host Radix bits when setting up
+      CPU
+    - scsi: lpfc: Correct WQ creation for pagesize
+    - ceph: update readpages osd request according to size of pages
+    - netfilter: conntrack: remove GC_MAX_EVICTS break
+    - netfilter: conntrack: refine gc worker heuristics, redux
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.15
+    - tty: n_hdlc: get rid of racy n_hdlc.tbuf (CVE-2017-2636)
+      (Closes: #858122)
+    - serial: 8250_pci: Add MKS Tenta SCOM-0800 and SCOM-0801 cards
+    - [s390x] KVM: Disable dirty log retrieval for UCONTROL guests
+    - [x86] KVM: VMX: use correct vmcs_read/write for guest segment
+      selector/base
+    - Bluetooth: Add another AR3012 04ca:3018 device
+    - [s390x] qdio: clear DSCI prior to scanning multiple input queues
+    - [s390x] dcssblk: fix device size calculation in dcssblk_direct_access()
+    - [s390x] kdump: Use "LINUX" ELF note name instead of "CORE"
+    - [s390x] chsc: Add exception handler for CHSC instruction
+    - [s390x] TASK_SIZE for kernel threads
+    - [s390x] make setup_randomness work
+    - [s390x] use correct input data address for setup_randomness
+    - [armhf] net: mvpp2: fix DMA address calculation in mvpp2_txq_inc_put()
+    - [powerpc*] cxl: Prevent read/write to AFU config space while AFU not
+      configured
+    - [powerpc*] cxl: fix nested locking hang during EEH hotplug
+    - brcmfmac: fix incorrect event channel deduction
+    - mnt: Tuck mounts under others instead of creating shadow/side mounts.
+    - IB/ipoib: Fix deadlock between rmmod and set_mode
+    - IB/IPoIB: Add destination address when re-queue packet
+    - IB/mlx5: Fix out-of-bound access
+    - IB/SRP: Avoid using IB_MR_TYPE_SG_GAPS
+    - IB/srp: Avoid that duplicate responses trigger a kernel bug
+    - IB/srp: Fix race conditions related to task management
+    - fs: Better permission checking for submounts
+    - ceph: remove req from unsafe list when unregistering it
+    - [powerpc*] pci/hotplug/pnv-php: Remove WARN_ON() in pnv_php_put_slot()
+    - [powerpc*] pci/hotplug/pnv-php: Disable surprise hotplug capability on
+      conflicts
+    - target: Fix NULL dereference during LUN lookup + active I/O shutdown
+    - [powerpc*] drivers/pci/hotplug: Handle presence detection change
+      properly
+    - [powerpc*] drivers/pci/hotplug: Fix initial state for empty slot
+    - nlm: Ensure callback code also checks that the files match
+    - nfit, libnvdimm: fix interleave set cookie calculation
+    - mac80211: flush delayed work when entering suspend
+    - mac80211: don't reorder frames with SN smaller than SSN
+    - mac80211: don't handle filtered frames within a BA session
+    - mac80211: use driver-indicated transmitter STA only for data frames
+    - [x86] drm/amdgpu: add more cases to DCE11 possible crtc mask setup
+    - [arm64,powerpc*,x86] drm/ast: Fix test for VGA enabled
+    - [arm64,powerpc*,x86] drm/ast: Call open_key before enable_mmio in POST
+      code
+    - [arm64,powerpc*,x86] drm/ast: Fix AST2400 POST failure without BMC FW or
+      VBIOS
+    - drm/edid: Add EDID_QUIRK_FORCE_8BPC quirk for Rotel RSX-1058
+    - [x86] drm/vmwgfx: Work around drm removal of control nodes
+    - [armhf] dmaengine: imx-sdma - correct the dma transfer residue
+      calculation
+    - drm/atomic: fix an error code in mode_fixup()
+    - [x86] drm/i915/gvt: Disable access to stolen memory as a guest
+    - drm: Cancel drm_fb_helper_dirty_work on unload
+    - drm: Cancel drm_fb_helper_resume_work on unload
+    - [x86] drm/i915: Avoid spurious WARNs about the wrong pipe in the PPS
+      code
+    - [x86] drm/i915: Fix not finding the VBT when it overlaps with
+      OPREGION_ASLE_EXT
+    - libceph: use BUG() instead of BUG_ON(1)
+    - [x86] mm: fix gup_pte_range() vs DAX mappings
+    - [x86] tlb: Fix tlb flushing when lguest clears PGE
+    - thp: fix another corner case of munlock() vs. THPs
+    - mm: do not call mem_cgroup_free() from within mem_cgroup_alloc()
+    - fat: fix using uninitialized fields of fat_inode/fsinfo_inode
+    - [x86] drivers: hv: Turn off write permission on the hypercall page
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.16
+    - USB: serial: digi_acceleport: fix OOB data sanity check
+    - USB: serial: digi_acceleport: fix OOB-event processing
+    - crypto: improve gcc optimization flags for serpent and wp512
+    - ucount: Remove the atomicity from ucount->count (CVE-2017-6874)
+    - dw2102: don't do DMA on stack
+    - i2c: add missing of_node_put in i2c_mux_del_adapters
+    - [ppc64el] Emulation support for load/store instructions on LE
+    - [powerpc*] xics: Work around limitations of OPAL XICS priority handling
+    - PCI: Prevent VPD access for QLogic ISP2722
+    - usb: gadget: dummy_hcd: clear usb_gadget region before registration
+    - usb: dwc3: gadget: make Set Endpoint Configuration macros safe
+    - [armhf] usb: dwc3-omap: Fix missing break in dwc3_omap_set_mailbox()
+    - usb: gadget: function: f_fs: pass companion descriptor along
+    - Revert "usb: gadget: uvc: Add missing call for additional setup data"
+    - usb: host: xhci-plat: Fix timeout on removal of hot pluggable xhci
+      controllers
+    - USB: serial: safe_serial: fix information leak in completion handler
+    - USB: serial: omninet: fix reference leaks at open
+    - USB: iowarrior: fix NULL-deref at probe (CVE-2016-2188)
+    - USB: iowarrior: fix NULL-deref in write
+    - USB: serial: io_ti: fix NULL-deref in interrupt callback
+    - USB: serial: io_ti: fix information leak in completion handler
+    - [armhf] serial: samsung: Continue to work if DMA request fails
+    - [s390x] KVM: Fix guest migration for huge guests resulting in panic
+    - [armhf.arm64] KVM: Let vcpu thread modify its own active state
+    - dm: flush queued bios when process blocks to avoid deadlock
+    - rc: raw decoder for keymap protocol is not loaded on register
+    - ext4: don't BUG when truncating encrypted inodes on the orphan list
+    - IB/mlx5: Verify that Q counters are supported
+
+  [ Ben Hutchings ]
+  * [media] dvb-usb: don't use stack for firmware load or reset
+    (Closes: #853894)
+  * Kbuild.include: addtree: Remove quotes before matching path
+    (regression in 4.8) (Closes: #856474)
+  * [rt] Update to 4.9.13-rt12:
+    - timer/hrtimer: check properly for a running timer
+  * [rt] Refresh one patch that had a textual conflict with 4.9.14
+  * Ignore various ABI changes that shouldn't affect OOT modules
+  * userns: Avoid ABI change for CVE-2017-6874 fix
+  * [amd64] Don't WARN about expected W+X pages on Xen (see #852324)
+  * fjes: Disable auto-loading, as this driver matches a very common ACPI ID
+    (Closes: #853976)
+
+  [ Salvatore Bonaccorso ]
+  * ACPI / EC: Use busy polling mode when GPE is not enabled.
+    Thanks to Jakobus Schurz <jakobus.schurz@gmail.com> (Closes: #846792)
+  * Ignore ABI changes for acpi_ec_{add,remove}_query_handler
+  * Ignore ABI change for first_ec (not declared in public header)
+
+  [ Helge Deller ]
+  * [hppa] Switch to debian default config option for bonding, irda and atalk
+
+ -- Salvatore Bonaccorso <carnil@debian.org>  Wed, 22 Mar 2017 17:01:40 +0100
+
+linux (4.9.13-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.11
+    - can: Fix kernel panic at security_sock_rcv_skb
+    - net/mlx5e: Fix update of hash function/key via ethtool
+    - net/sched: matchall: Fix configuration race
+    - ipv6: fix ip6_tnl_parse_tlv_enc_lim()
+    - ipv6: pointer math error in ip6_tnl_parse_tlv_enc_lim()
+    - tcp: fix 0 divide in __tcp_select_window()
+    - stmmac: Discard masked flags in interrupt status register
+    - net: use a work queue to defer net_disable_timestamp() work
+    - netlabel: out of bound access in cipso_v4_validate()
+    - ip6_gre: fix ip6gre_err() invalid reads (CVE-2017-5897)
+    - ipv6: tcp: add a missing tcp_v6_restore_cb()
+    - tcp: avoid infinite loop in tcp_splice_read() (CVE-2017-6214)
+    - tun: read vnet_hdr_sz once
+    - macvtap: read vnet_hdr_size once
+    - rtl8150: Use heap buffers for all register access
+    - catc: Combine failure cleanup code in catc_probe()
+    - catc: Use heap buffer for memory size test
+    - mlx4: Invoke softirqs after napi_reschedule
+    - lwtunnel: valid encap attr check should return 0 when lwtunnel
+      is disabled
+    - sit: fix a double free on error path
+    - net: introduce device min_header_len
+    - packet: round up linear to header len
+    - ping: fix a null pointer dereference
+    - net: dsa: Do not destroy invalid network devices
+    - l2tp: do not use udp_ioctl()
+    - mld: do not remove mld souce list info when set link down
+    - igmp, mld: Fix memory leak in igmpv3/mld_del_delrec()
+    - tcp: fix mark propagation with fwmark_reflect enabled
+    - net/mlx5: Don't unlock fte while still using it
+    - tcp: don't annotate mark on control socket from
+      tcp_v6_send_response()
+    - [x86] fpu/xstate: Fix xcomp_bv in XSAVES header
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.12
+    - vfs: fix uninitialized flags in splice_to_pipe()
+    - siano: make it work again with CONFIG_VMAP_STACK
+    - fuse: fix use after free issue in fuse_dev_do_read()
+    - fuse: fix uninitialized flags in pipe_buffer
+    - mmc: core: fix multi-bit bus width without high-speed mode
+    - [powerpc*/*64*] Disable use of radix under a hypervisor
+    - scsi: don't BUG_ON() empty DMA transfers
+    - Fix missing sanity check in /dev/sg
+    - [x86] Input: elan_i2c - add ELAN0605 to the ACPI table
+    - drm/radeon: Use mode h/vdisplay fields to hide out of bounds HW cursor
+    - drm/dp/mst: fix kernel oops when turning off secondary monitor
+    - futex: Move futex_init() to core_initcall
+    - [armel,armhf] 8658/1: uaccess: fix zeroing of 64-bit get_user()
+    - Revert "i2c: designware: detect when dynamic tar update is possible"
+    - PCI/PME: Restore pcie_pme_driver.remove
+    - printk: use rcuidle console tracepoint
+    - timekeeping: Use deferred printk() in debug code
+    - bcache: Make gc wakeup sane, remove set_task_state()
+    - videodev2.h: go back to limited range Y'CbCr for SRGB and, ADOBERGB
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.13
+    - net/mlx5e: Disable preemption when doing TC statistics upcall
+    - net/llc: avoid BUG_ON() in skb_orphan() (CVE-2017-6345)
+    - net: ethernet: ti: cpsw: fix cpsw assignment in resume
+      (regression in 4.9)
+    - packet: fix races in fanout_add() (CVE-2017-6346)
+    - packet: Do not call fanout_release from atomic contexts
+      (regression in 4.9)
+    - net: neigh: Fix netevent NETEVENT_DELAY_PROBE_TIME_UPDATE notification
+    - dccp: fix freeing skb too early for IPV6_RECVPKTINFO (CVE-2017-6074)
+    - vxlan: fix oops in dev_fill_metadata_dst (regression in 4.6)
+    - irda: Fix lockdep annotations in hashbin_delete(). (CVE-2017-6348)
+    - ptr_ring: fix race conditions when resizing
+    - ip: fix IP_CHECKSUM handling (regression in 4.0) (CVE-2017-6347)
+    - net: socket: fix recvmmsg not returning error from sock_error
+      (regression in 4.6)
+    - USB: serial: mos7840: fix another NULL-deref at open
+    - USB: serial: ftdi_sio: fix modem-status error handling
+    - USB: serial: ftdi_sio: fix extreme low-latency setting
+    - USB: serial: ftdi_sio: fix line-status over-reporting
+    - USB: serial: spcp8x5: fix modem-status handling
+    - USB: serial: opticon: fix CTS retrieval at open
+    - USB: serial: ark3116: fix register-accessor error handling
+    - netfilter: nf_ct_helper: warn when not applying default helper assignment
+    - block: fix double-free in the failure path of cgwb_bdi_init()
+    - rtlwifi: rtl_usb: Fix for URB leaking when doing ifconfig up/down
+    - xfs: clear delalloc and cache on buffered write failure
+
+  [ Ben Hutchings ]
+  * [armel] dts: kirkwood: Fix SATA pinmux-ing for TS419 (Closes: #855017)
+  * [armhf] Enable DRM_OMAP_PANEL_TPO_TD028TTEC1, PWM_OMAP_DMTIMER as modules
+    (Closes: #855472)
+  * net: Ignore ABI changes to can_rx_register(), ip6_xmit()
+  * net: Avoid ABI change for min_header_len
+  * udeb: Add more USB host and dual-role drivers to usb-modules
+    (Closes: #856111)
+  * [x86] kvm: fix page struct leak in handle_vmon (CVE-2017-2596)
+  * ipc/shm: Fix shmat mmap nil-page protection (CVE-2017-5669)
+  * time: Disable TIMER_STATS (CVE-2017-5967)
+  * sctp: deny peeloff operation on asocs with threads sleeping on it
+    (CVE-2017-6353)
+  * [rt] Update to 4.9.13-rt10:
+    - sched/rt: Add a missing rescheduling point
+    - lockdep: Handle statically initialized PER_CPU locks proper
+    - Change export of rt_mutex_destroy() back to GPL-only
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 27 Feb 2017 15:58:07 +0000
+
+linux (4.9.10-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.7
+    - drm: Schedule the output_poll_work with 1s delay if we have delayed event
+    - drm: Fix broken VT switch with video=1366x768 option
+    - [x86] drm/i915: Ignore bogus plane coordinates on SKL when the plane is
+      not visible
+    - [armhf,arm64] drm/vc4: Fix memory leak of the CRTC state.
+    - [armhf,arm64] drm/vc4: fix a bounds check
+    - Revert "drm/radeon: always apply pci shutdown callbacks"
+    - drm/atomic: clear out fence when duplicating state
+    - mm/huge_memory.c: respect FOLL_FORCE/FOLL_COW for thp
+    - mm/mempolicy.c: do not put mempolicy before using its nodemask
+    - mm, page_alloc: fix check for NULL preferred_zone
+    - mm, page_alloc: fix fast-path race with cpuset update or removal
+    - mm, page_alloc: move cpuset seqcount checking to slowpath
+    - mm, page_alloc: fix premature OOM when racing with cpuset mems update
+    - userns: Make ucounts lock irq-safe
+    - sysctl: fix proc_doulongvec_ms_jiffies_minmax()
+    - xfs: prevent quotacheck from overloading inode lru
+    - ISDN: eicon: silence misleading array-bounds warning
+    - Btrfs: remove old tree_root case in btrfs_read_locked_inode()
+    - Btrfs: disable xattr operations on subvolume directories
+    - Btrfs: remove ->{get, set}_acl() from btrfs_dir_ro_inode_operations
+    - RDMA/cma: Fix unknown symbol when CONFIG_IPV6 is not enabled
+    - [s390x] mm: Fix cmma unused transfer from pgste into pte
+    - [s390x] ptrace: Preserve previous registers for short regset write
+    - IB/cxgb3: fix misspelling in header guard
+    - IB/iser: Fix sg_tablesize calculation
+    - IB/srp: fix mr allocation when the device supports sg gaps
+    - IB/srp: fix invalid indirect_sg_entries parameter value
+    - can: c_can_pci: fix null-pointer-deref in c_can_start() - set device
+      pointer
+    - can: ti_hecc: add missing prepare and unprepare of the clock
+    - [hppa] Don't use BITS_PER_LONG in userspace-exported swab.h header
+    - nfs: Don't increment lock sequence ID after NFS4ERR_MOVED
+    - NFSv4.1: Fix a deadlock in layoutget
+    - NFSv4.0: always send mode in SETATTR after EXCLUSIVE4
+    - SUNRPC: cleanup ida information when removing sunrpc module
+    - iw_cxgb4: free EQ queue memory on last deref
+    - pctv452e: move buffer to heap, no mutex
+    - v4l: tvp5150: Reset device at probe time, not in get/set format handlers
+    - v4l: tvp5150: Fix comment regarding output pin muxing
+    - v4l: tvp5150: Don't override output pinmuxing at stream on/off time
+    - [x86] drm/i915: Clear ret before unbinding in i915_gem_evict_something()
+    - [x86] drm/i915: prevent crash with .disable_display parameter
+    - [x86] drm/i915: Don't leak edid in intel_crt_detect_ddc()
+    - [x86] drm/i915: Don't init hpd polling for vlv and chv from
+      runtime_suspend()
+    - [x86] drm/i915: Fix calculation of rotated x and y offsets for planar
+      formats
+    - [x86] drm/i915: Check for NULL atomic state in
+      intel_crtc_disable_noatomic()
+    - IB/umem: Release pid in error and ODP flow
+    - [x86] pinctrl: baytrail: Rectify debounce support
+    - memory_hotplug: make zone_can_shift() return a boolean value
+    - virtio_mmio: Set DMA masks appropriately
+    - mm, memcg: do not retry precharge charges
+    - perf/core: Fix concurrent sys_perf_event_open() vs. 'move_group' race
+      (CVE-2017-6001)
+    - [x86] drm/i915: Remove WaDisableLSQCROPERFforOCL KBL workaround.
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.8
+    - r8152: fix the sw rx checksum is unavailable
+    - [x86] netvsc: add rcu_read locking to netvsc callback
+    - net: lwtunnel: Handle lwtunnel_fill_encap failure
+    - net: ipv4: fix table id in getroute response
+    - tcp: fix tcp_fastopen unaligned access complaints on sparc
+    - openvswitch: maintain correct checksum state in conntrack actions
+    - mlx4: do not call napi_schedule() without care
+    - ip6_tunnel: Account for tunnel header in tunnel MTU
+    - ax25: Fix segfault after sock connection timeout
+    - net sched actions: fix refcnt when GETing of action after bind
+    - virtio: don't set VIRTIO_NET_HDR_F_DATA_VALID on xmit
+    - virtio-net: restore VIRTIO_HDR_F_DATA_VALID on receiving
+    - vxlan: fix byte order of vxlan-gpe port number
+    - net: fix harmonize_features() vs NETIF_F_HIGHDMA
+    - lwtunnel: fix autoload of lwt modules
+    - ipv6: addrconf: Avoid addrconf_disable_change() using RCU read-side lock
+    - tcp: initialize max window for a new fastopen socket
+    - net/mlx5e: Do not recycle pages from emergency reserve
+    - bridge: netlink: call br_changelink() during br_dev_newlink()
+    - net: mpls: Fix multipath selection for LSR use case
+    - r8152: don't execute runtime suspend if the tx is not empty
+    - af_unix: move unix_mknod() out of bindlock
+    - net: Specify the owning module for lwtunnel ops
+    - lwtunnel: Fix oops on state free after encap module unload
+    - [armhf] net: dsa: Bring back device detaching in dsa_slave_suspend()
+    - xfs: bump up reserved blocks in xfs_alloc_set_aside
+    - xfs: fix bogus minleft manipulations
+    - xfs: adjust allocation length in xfs_alloc_space_available
+    - xfs: don't rely on ->total in xfs_alloc_space_available
+    - xfs: don't print warnings when xfs_log_force fails
+    - xfs: make the ASSERT() condition likely
+    - xfs: sanity check directory inode di_size
+    - xfs: add missing include dependencies to xfs_dir2.h
+    - xfs: replace xfs_mode_to_ftype table with switch statement
+    - xfs: sanity check inode mode when creating new dentry
+    - xfs: sanity check inode di_mode
+    - xfs: don't wrap ID in xfs_dq_get_next_id
+    - xfs: fix xfs_mode_to_ftype() prototype
+    - xfs: fix COW writeback race
+    - xfs: verify dirblocklog correctly
+    - xfs: remove racy hasattr check from attr ops
+    - xfs: extsize hints are not unlikely in xfs_bmap_btalloc
+    - xfs: clear _XBF_PAGES from buffers when readahead page
+    - xfs: fix bmv_count confusion w/ shared extents
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.9
+    - PCI/ASPM: Handle PCI-to-PCIe bridges as roots of PCIe hierarchies
+    - ext4: validate s_first_meta_bg at mount time (CVE-2016-10208)
+    - [x86] efi: Always map the first physical page into the EFI pagetables
+    - [arm64] efi/fdt: Avoid FDT manipulation after ExitBootServices()
+      (Closes: #853170)
+    - HID: cp2112: fix sleep-while-atomic
+    - HID: cp2112: fix gpio-callback error handling
+    - [x86] pinctrl: baytrail: Add missing spinlock usage in
+      byt_gpio_irq_handler
+    - [x86] drm/amdgpu/si: fix crash on headless asics
+    - drm/nouveau/disp/gt215: Fix HDA ELD handling (thus, HDMI audio) on gt215
+    - drm/nouveau/nv1a,nv1f/disp: fix memory clock rate retrieval
+    - crypto: api - Clear CRYPTO_ALG_DEAD bit before registering an alg
+    - crypto: arm64/aes-blk - honour iv_out requirement in CBC and CTR modes
+    - perf/core: Fix use-after-free bug
+    - perf/core: Fix PERF_RECORD_MMAP2 prot/flags for anonymous memory
+    - ata: sata_mv:- Handle return value of devm_ioremap.
+    - libata: apply MAX_SEC_1024 to all CX1-JB*-HP devices
+    - libata: Fix ATA request sense
+    - [powerpc*] eeh: Fix wrong flag passed to eeh_unfreeze_pe()
+    - [powerpc*] Add missing error check to prom_find_boot_cpu()
+    - [powerpc*] mm: Use the correct pointer when setting a 2MB pte
+    - NFSD: Fix a null reference case in find_or_create_lock_stateid()
+    - svcrpc: fix oops in absence of krb5 module
+    - zswap: disable changing params if init fails
+    - cifs: initialize file_info_lock
+    - mm/memory_hotplug.c: check start_pfn in test_pages_in_a_zone()
+    - base/memory, hotplug: fix a kernel oops in show_valid_zones()
+    - mm, fs: check for fatal signals in do_generic_file_read()
+    - tracing: Fix hwlat kthread migration
+    - can: bcm: fix hrtimer/tasklet termination in bcm op removal
+    - cgroup: don't online subsystems before cgroup_name/path() are operational
+    - mmc: sdhci: Ignore unexpected CARD_INT interrupts
+    - vhost: fix initialization for vq->is_le
+    - [armhf] regulator: axp20x: AXP806: Fix dcdcb being set instead of dcdce
+    - percpu-refcount: fix reference leak during percpu-atomic transition
+    - [x86] pinctrl: baytrail: Debounce register is one per community
+    - [x86] pinctrl: intel: merrifield: Add missed check in mrfld_config_set()
+    - iwlwifi: fix double hyphen in MODULE_FIRMWARE for 8000
+    - iwlwifi: mvm: avoid crash on restart w/o reserved queues
+    - HID: usbhid: Quirk a AMI virtual mouse and keyboard with ALWAYS_POLL
+    - HID: hid-lg: Fix immediate disconnection of Logitech Rumblepad 2
+    - HID: wacom: Fix poor prox handling in 'wacom_pl_irq'
+    - [x86] perf/intel/uncore: Clean up hotplug conversion fallout
+    - [armhf] dmaengine: cppi41: Fix runtime PM timeouts with USB mass storage
+    - [armhf] dmaengine: cppi41: Fix oops in cppi41_runtime_resume
+    - [x86] KVM: do not save guest-unsupported XSAVE state
+    - USB: Add quirk for WORLDE easykey.25 MIDI keyboard
+    - usb: musb: Fix host mode error -71 regression
+    - usb: gadget: f_fs: Assorted buffer overflow checks.
+    - irqdomain: Avoid activating interrupts more than once
+    - [x86] irq: Make irq activate operations symmetric
+    - iw_cxgb4: set correct FetchBurstMax for QPs
+    - fs: break out of iomap_file_buffered_write on fatal signals
+    - [x86] drm/i915/execlists: Reset RING registers upon resume
+      (Closes: #855055)
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.10
+    - [x86] cpufreq: intel_pstate: Disable energy efficiency optimization
+    - acpi, nfit: fix acpi_nfit_flush_probe() crash
+    - [x86] libnvdimm, namespace: do not delete namespace-id 0
+    - [x86] libnvdimm, pfn: fix memmap reservation size versus 4K alignment
+    - dm rq: cope with DM device destruction while in dm_old_request_fn()
+    - crypto: algif_aead - Fix kernel panic on list_del
+    - [x86] crypto: qat - fix bar discovery for c62x
+    - [x86] crypto: qat - zero esram only for DH85x devices
+    - [x86] crypto: ccp - Fix DMA operations when IOMMU is enabled
+    - [x86] crypto: ccp - Fix double add when creating new DMA command
+    - Input: uinput - fix crash when mixing old and new init style
+    - selinux: fix off-by-one in setprocattr (CVE-2017-2618)
+    - [x86] Revert "x86/ioapic: Restore IO-APIC irq_chip retrigger callback"
+    - rtlwifi: rtl8192ce: Fix loading of incorrect firmware (Closes: #853073)
+    - cpumask: use nr_cpumask_bits for parsing functions (Closes: #848682)
+    - [armel,armhf] 8643/3: arm/ptrace: Preserve previous registers for short
+      regset write
+    - [x86] drm/i915: fix use-after-free in page_flip_completed()
+    - [x86] drm/i915/bxt: Add MST support when do DPLL calculation
+    - drm/atomic: Fix double free in drm_atomic_state_default_clear
+    - target: Don't BUG_ON during NodeACL dynamic -> explicit conversion
+    - target: Use correct SCSI status during EXTENDED_COPY exception
+    - target: Fix early transport_generic_handle_tmr abort scenario
+    - target: Fix multi-session dynamic se_node_acl double free OOPs
+    - target: Fix COMPARE_AND_WRITE ref leak for non GOOD status
+    - [armhf] dts: imx6dl: fix GPIO4 range
+    - [armhf] 8642/1: LPAE: catch pending imprecise abort on unmask
+    - [x86] drm/i915: Always convert incoming exec offsets to non-canonical
+    - nl80211: Fix mesh HT operation check
+    - mac80211: Fix adding of mesh vendor IEs
+    - net/mlx5e: Modify TIRs hash only when it's needed
+    - [x86] Drivers: hv: vmbus: Base host signaling strictly on the ring state
+    - [x86] Drivers: hv: vmbus: On write cleanup the logic to interrupt the host
+    - [x86] Drivers: hv: vmbus: On the read path cleanup the logic to interrupt
+      the host
+    - [x86] Drivers: hv: vmbus: finally fix hv_need_to_signal_on_read()
+    - [s390x] scsi: zfcp: fix use-after-free by not tracing WKA port open/close
+      on failed send
+    - scsi: aacraid: Fix INTx/MSI-x issue with older controllers
+    - scsi: mpt3sas: disable ASPM for MPI2 controllers
+    - scsi: qla2xxx: Avoid that issuing a LIP triggers a kernel crash
+    - btrfs: fix btrfs_compat_ioctl failures on non-compat ioctls
+    - [powerpc*] mm/radix: Update ERAT flushes when invalidating TLB
+    - [powerpc*] powernv: Fix CPU hotplug to handle waking on HVI
+    - xen-netfront: Delete rx_refill_timer in xennet_disconnect_backend()
+    - ALSA: hda - adding a new NV HDMI/DP codec ID in the driver
+    - ALSA: seq: Fix race at creating a queue
+    - ALSA: seq: Don't handle loop timeout at snd_seq_pool_done()
+    - Revert "ALSA: line6: Only determine control port properties if needed"
+    - [x86] mm/ptdump: Fix soft lockup in page table walker
+    - [x86] CPU/AMD: Bring back Compute Unit ID
+    - [x86] CPU/AMD: Fix Zen SMT topology
+    - IB/rxe: Fix resid update
+    - IB/rxe: Fix mem_check_range integer overflow (CVE-2016-8636)
+    - stacktrace, lockdep: Fix address, newline ugliness
+    - perf diff: Fix -o/--order option behavior (again)
+    - perf diff: Fix segfault on 'perf diff -o N' option
+    - perf/core: Fix crash in perf_event_read()
+
+  [ Ben Hutchings ]
+  * Bump ABI to 2
+  * [or1k] Remove configuration, as the port has been abandoned
+  * [arm64] Enable KEXEC (Closes: #852747)
+  * [arm64,armhf,x86] usb: gadget: Enable USB_CONFIGFS, USB_ETH, USB_GADGETFS,
+    USB_FUNCTIONFS, USB_G_SERIAL as modules;
+    USB_CONFIGFS_{SERIAL,ACM,OBEX,NCM,ECM,ECM_SUBSET,RNDIS,EEM,PHONET,MASS_STORAGE},
+    USB_CONFIGFS_F_{LB_SS,LS,UAC1,UAC2,MIDI,HID,UVC,PRINTER}, USB_ETH_RNDIS,
+    USB_FUNCTIONFS_{ETH,RNDIS,GENERIC} (thanks to Riku Voipio)
+  * [ppc64el] Disable IBMEBUS; this bus does not exist on POWER8 systems
+  * aufs: Update support patchset to aufs4.9-20170206
+  * [rt] Update to 4.9.9-rt6:
+    - Revert "btrfs: swap free() and trace point in run_ordered_work()"
+    - pinctrl: qcom: Use raw spinlock variants
+    - x86/mm/cpa: avoid wbinvd() for PREEMPT
+    - Revert "radix-tree: Make RT aware"
+    - radix-tree: use local locks
+    - softirq: wake the timer softirq if needed
+    - timers: Don't wake ktimersoftd on every tick
+    - rt: Drop mutex_disable() on !DEBUG configs and the GPL suffix from export
+      symbol
+    - cpuset: Convert callback_lock to raw_spinlock_t
+  * pegasus: Use heap buffers for all register access (Closes: #852556)
+  * test-patches: Use the pkg.linux.notools build profile
+  * test-patches: Set default number of jobs to number of available processors
+  * dccp: Disable auto-loading as mitigation against local exploits
+  * net: ipv6: check route protocol when deleting routes (Closes: #855153)
+  * [arm64] drm: Enable DRM_AST as module (Closes: #820168)
+    - udeb: Add ast to fb-modules
+  * [armel/marvell] hwmon: Enable SENSORS_G762 as module (Closes: #854662)
+  * [m68k] Change MAC8390, MAC_SCSI from built-in to modules (Closes: #826614)
+    - udeb: Add mac8390 to nic-shared-modules
+  * udeb: Add bcache to md-modules (Closes: #718548)
+  * [x86] platform: acer-wmi: setup accelerometer when machine has appropriate
+    notify event (Closes: #853067)
+  * [x86] xen: Fix APIC id mismatch warning on Intel (Closes: #853193)
+  * media: dvb-usb-dibusb-mc-common: Add MODULE_LICENSE (Closes: #853110)
+
+  [ Roger Shimizu ]
+  * [armel] ARM: dts: orion5x-lschl: Fix model name
+  * [armel] ARM: dts: orion5x-lschl: More consistent naming on linkstation
+    series
+  * [armel] ARM: orion5x: fix Makefile for linkstation-lschl.dtb
+
+  [ Salvatore Bonaccorso ]
+  * ipv4: keep skb->dst around in presence of IP options (CVE-2017-5970)
+  * sctp: avoid BUG_ON on sctp_wait_for_sndbuf (CVE-2017-5986)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 17 Feb 2017 13:18:17 +0000
+
+linux (4.9.6-3) unstable; urgency=medium
+
+  * btree,musb,st_sensors: Ignore ABI changes (fixes FTBFS on armel,armhf)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 28 Jan 2017 16:11:16 +0000
+
+linux (4.9.6-2) unstable; urgency=medium
+
+  * linux-cpupower: Use dh-exec architecture filtering for x86-specific files
+    (fixes FTBFS on !x86)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 27 Jan 2017 22:09:50 +0000
+
+linux (4.9.6-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.3
+    - iio: common: st_sensors: fix channel data parsing
+    - [mips] staging: octeon: Call SET_NETDEV_DEV()
+    - ALSA: hda - Fix up GPIO for ASUS ROG Ranger
+    - ALSA: hda - Apply asus-mode8 fixup to ASUS X71SL
+    - ALSA: usb-audio: Fix irq/process data synchronization
+    - fscrypt: fix renaming and linking special files
+    - [hppa/parisc] Add line-break when printing segfault info
+    - [hppa/parisc] Mark cr16 clocksource unstable on SMP systems
+    - HID: sensor-hub: Move the memset to sensor_hub_get_feature()
+    - mac80211: initialize fast-xmit 'info' later
+    - asm-prototypes: Clear any CPP defines before declaring the functions
+    - [x86] drm/i915: Fix oopses in the overlay code due to i915_gem_active
+      stuff
+    - [x86] drm/i915: Fix oops in overlay due to frontbuffer tracking
+    - [x86] drm/i915: Force VDD off on the new power seqeuencer before
+      starting to use it
+    - [x86] drm/i915: Initialize overlay->last_flip properly
+    - [x86] KVM: reset MMU on KVM_SET_VCPU_EVENTS
+    - [armhf] usb: musb: core: add clear_ep_rxintr() to musb_platform_ops
+    - [armhf] usb: musb: dsps: implement clear_ep_rxintr() callback
+    - usb: storage: unusual_uas: Add JMicron JMS56x to unusual device
+    - usb: gadgetfs: restrict upper bound on device configuration size
+    - USB: gadgetfs: fix unbounded memory allocation bug
+    - USB: gadgetfs: fix use-after-free bug
+    - USB: gadgetfs: fix checks of wTotalLength in config descriptors
+    - USB: fix problems with duplicate endpoint addresses
+    - usb: gadget: composite: Test get_alt() presence instead of set_alt()
+    - [arm64, armhf] usb: dwc3: core: avoid Overflow events
+    - usb: xhci: fix possible wild pointer
+    - [x86] usb: xhci: apply XHCI_PME_STUCK_QUIRK to Intel Apollo Lake
+    - xhci: free xhci virtual devices with leaf nodes first
+    - usb: xhci: fix return value of xhci_setup_device()
+    - usb: host: xhci: Fix possible wild pointer when handling abort command
+    - xhci: Handle command completion and timeout race
+    - usb: xhci: hold lock over xhci_abort_cmd_ring()
+    - USB: serial: omninet: fix NULL-derefs at open and disconnect
+    - USB: serial: quatech2: fix sleep-while-atomic in close
+    - USB: serial: pl2303: fix NULL-deref at open
+    - USB: serial: keyspan_pda: verify endpoints at probe
+    - USB: serial: spcp8x5: fix NULL-deref at open
+    - USB: serial: io_ti: fix NULL-deref at open
+    - USB: serial: io_ti: fix another NULL-deref at open
+    - USB: serial: io_ti: fix I/O after disconnect
+    - USB: serial: iuu_phoenix: fix NULL-deref at open
+    - USB: serial: garmin_gps: fix memory leak on failed URB submit
+    - USB: serial: ti_usb_3410_5052: fix NULL-deref at open
+    - USB: serial: io_edgeport: fix NULL-deref at open
+    - USB: serial: oti6858: fix NULL-deref at open
+    - USB: serial: cyberjack: fix NULL-deref at open
+    - USB: serial: kobil_sct: fix NULL-deref in write
+    - USB: serial: mos7840: fix NULL-deref at open
+    - USB: serial: mos7720: fix NULL-deref at open
+    - USB: serial: mos7720: fix use-after-free on probe errors
+    - USB: serial: mos7720: fix parport use-after-free on probe errors
+    - USB: serial: mos7720: fix parallel probe
+    - usb: xhci-mem: use passed in GFP flags instead of GFP_KERNEL
+    - xhci: Use delayed_work instead of timer for command timeout
+    - xhci: Fix race related to abort operation
+    - [armhf] usb: musb: Fix trying to free already-free IRQ 4
+    - usb: hub: Move hub_port_disable() to fix warning if PM is disabled
+    - usb: gadget: udc: core: fix return code of usb_gadget_probe_driver()
+    - ALSA: usb-audio: Fix bogus error return in snd_usb_create_stream()
+    - USB: serial: kl5kusb105: abort on open exception path
+    - usb: gadget: Fix second argument of percpu_ida_alloc()
+    - usb: gadget: fix request length error for isoc transfer
+    - [armhf] dts: sun7i: bananapi-m1-plus: Enable USB PHY for USB host
+      support
+    - dibusb: fix possible memory leak in dibusb_rc_query()
+    - USB: serial: io_ti: bind to interface after fw download
+    - [x86] mei: move write cb to completion on credentials failures
+    - iio: accel: st_accel: fix LIS3LV02 reading and scaling
+    - [arm64, armhf] usb: dwc3: ep0: add dwc3_ep0_prepare_one_trb()
+    - [arm64, armhf] usb: dwc3: ep0: explicitly call
+      dwc3_ep0_prepare_one_trb()
+    - [arm64, armhf] usb: dwc3: gadget: always unmap EP0 requests
+    - [x86] drm/i915/dp: add lane_count check in intel_dp_check_link_status
+    - [x86] drm/i915: tune down the fast link training vs boot fail
+    - mac80211: fix tid_agg_rx NULL dereference
+    - nl80211: Use different attrs for BSSID and random MAC addr in scan req
+    - ath10k: fix failure to send NULL func frame for 10.4
+    - ath10k: use the right length of "background"
+    - efi/efivar_ssdt_load: Don't return success on allocation failure
+    - debugfs: improve DEFINE_DEBUGFS_ATTRIBUTE for !CONFIG_DEBUG_FS
+    - [x86] prctl/uapi: Remove #ifdef for CHECKPOINT_RESTORE
+    - [x86] cpu: Probe CPUID leaf 6 even when cpuid_level == 6
+    - [x86] platform/x86: fujitsu-laptop: use brightness_set_blocking for
+      LED-setting callbacks
+    - hwmon: (amc6821) sign extension temperature
+    - hwmon: (ds620) Fix overflows seen when writing temperature limits
+    - [armhf] hwmon: (g762) Fix overflows and crash seen when writing limit
+      attributes
+    - hwmon: (lm90) fix temp1_max_alarm attribute
+    - Input: synaptics-rmi4 - unlock on error
+    - [armhf] clk: ti: dra7: fix "failed to lookup clock node
+      gmac_gmii_ref_clk_div" boot message
+    - [amd64] iommu/amd: Missing error code in amd_iommu_init_device()
+    - [amd64] iommu/amd: Fix the left value check of cmd buffer
+    - [x86] iommu/vt-d: Fix pasid table size encoding
+    - [x86] iommu/vt-d: Flush old iommu caches for kdump when the device gets
+      context mapped
+    - [x86] ASoC: cht_bsw_rt5645: Fix leftover kmalloc
+    - [x86] ASoC: Intel: Skylake: Fix a shift wrapping bug
+    - scsi: mvsas: fix command_active typo
+    - target/iscsi: Fix double free in lio_target_tiqn_addtpg()
+    - sbp-target: Fix second argument of percpu_ida_alloc()
+    - relay: check array offset before using it
+    - PCI/MSI: Check for NULL affinity mask in pci_irq_get_affinity()
+    - PM / wakeirq: Fix dedicated wakeirq for drivers not using autosuspend
+    - genirq/affinity: Fix node generation from cpumask
+    - mm/hugetlb.c: use the right pte val for compare in hugetlb_cow
+    - docs-rst: fix LaTeX \DURole renewcommand with Sphinx 1.3+
+    - mm: khugepaged: close use-after-free race during shmem collapsing
+    - mm: khugepaged: fix radix tree node leak in shmem collapse error path
+    - mm, compaction: fix NR_ISOLATED_* stats for pfn based migration
+    - [s390x] crypto: unlock on error in prng_tdes_read()
+    - [arm64] crypto: sha2-ce - fix for big endian
+    - [arm64] crypto: ghash-ce - fix for big endian
+    - [arm64] crypto: aes-ccm-ce: fix for big endian
+    - [arm64] crypto: sha1-ce - fix for big endian
+    - [arm64] crypto: aes-xts-ce: fix for big endian
+    - [arm64] crypto: aes-ce - fix for big endian
+    - md: MD_RECOVERY_NEEDED is set for mddev->recovery
+    - md: fix refcount problem on mddev when stopping array.
+    - f2fs: remove percpu_count due to performance regression
+    - f2fs: hide a maybe-uninitialized warning
+    - PCI: Add Mellanox device IDs
+    - PCI: Convert broken INTx masking quirks from HEADER to FINAL
+    - PCI: Convert Mellanox broken INTx quirks to be for listed devices only
+    - PCI: Support INTx masking on ConnectX-4 with firmware x.14.1100+
+    - PCI: Enable access to non-standard VPD for Chelsio devices (cxgb3)
+    - [powerpc/powerpc64,ppc64*] pci/rpadlpar: Fix device reference leaks
+    - [s390x] topology: always use s390 specific sched_domain_topology_level
+    - [s390x] pci: fix dma address calculation in map_sg
+    - drm/radeon: Always store CRTC relative radeon_crtc->cursor_x/y values
+    - [x86] drm/i915: disable PSR by default on HSW/BDW
+    - [x86] drm/i915/gen9: unconditionally apply the memory bandwidth WA
+    - [x86] drm/i915/gen9: fix the WM memory bandwidth WA for Y tiling cases
+    - xfs: don't call xfs_sb_quota_from_disk twice
+    - xfs: check return value of _trans_reserve_quota_nblks
+    - xfs: don't skip cow forks w/ delalloc blocks in cowblocks scan
+    - xfs: don't BUG() on mixed direct and mapped I/O
+    - xfs: provide helper for counting extents from if_bytes
+    - xfs: check minimum block size for CRC filesystems
+    - xfs: fix unbalanced inode reclaim flush locking
+    - xfs: new inode extent list lookup helpers
+    - xfs: factor rmap btree size into the indlen calculations
+    - xfs: always succeed when deduping zero bytes
+    - xfs: remove prev argument to xfs_bmapi_reserve_delalloc
+    - xfs: track preallocation separately in xfs_bmapi_reserve_delalloc()
+    - xfs: use new extent lookup helpers in __xfs_reflink_reserve_cow
+    - xfs: clean up cow fork reservation and tag inodes correctly
+    - xfs: use new extent lookup helpers xfs_file_iomap_begin_delay
+    - xfs: pass post-eof speculative prealloc blocks to bmapi
+    - xfs: Move AGI buffer type setting to xfs_read_agi
+    - xfs: pass state not whichfork to trace_xfs_extlist
+    - xfs: handle cow fork in xfs_bmap_trace_exlist
+    - xfs: forbid AG btrees with level == 0
+    - xfs: check for bogus values in btree block headers
+    - xfs: complain if we don't get nextents bmap records
+    - xfs: don't crash if reading a directory results in an unexpected hole
+    - xfs: error out if trying to add attrs and anextents > 0
+    - xfs: don't allow di_size with high bit set
+    - xfs: don't cap maximum dedupe request length
+    - xfs: ignore leaf attr ichdr.count in verifier during log replay
+    - xfs: use GPF_NOFS when allocating btree cursors
+    - xfs: fix double-cleanup when CUI recovery fails
+    - xfs: use the actual AG length when reserving blocks
+    - xfs: fix crash and data corruption due to removal of busy COW extents
+    - xfs: fix max_retries _show and _store functions
+    - clocksource/dummy_timer: Move hotplug callback after the real timers
+    - tick/broadcast: Prevent NULL pointer dereference
+    - Revert "rtlwifi: Fix enter/exit power_save"
+    - Revert "usb: gadget: composite: always set ep->mult to a sensible value"
+    - usb: gadget: composite: always set ep->mult to a sensible value
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.4
+    - net: vrf: Fix NAT within a VRF
+    - net: vrf: Drop conntrack data after pass through VRF device on Tx
+    - sctp: sctp_transport_lookup_process should rcu_read_unlock when transport
+      is null
+    - inet: fix IP(V6)_RECVORIGDSTADDR for udp sockets
+    - ipv6: handle -EFAULT from skb_copy_bits
+    - net, sched: fix soft lockup in tc_classify
+    - [arm64, armhf] net: stmmac: Fix race between stmmac_drv_probe and
+      stmmac_open
+    - net/sched: cls_flower: Fix missing addr_type in classify
+    - net/mlx5: Check FW limitations on log_max_qp before setting it
+    - net/mlx5: Cancel recovery work in remove flow
+    - net/mlx5: Avoid shadowing numa_node
+    - net/mlx5: Mask destination mac value in ethtool steering rules
+    - net/mlx5: Prevent setting multicast macs for VFs
+    - net/mlx5e: Don't sync netdev state when not registered
+    - net/mlx5e: Disable netdev after close
+    - rtnl: stats - add missing netlink message size checks
+    - net: fix incorrect original ingress device index in PKTINFO
+    - net: ipv4: dst for local input routes should use l3mdev if relevant
+    - drop_monitor: add missing call to genlmsg_end
+    - drop_monitor: consider inserted data in genlmsg_end
+    - flow_dissector: Update pptp handling to avoid null pointer deref.
+    - igmp: Make igmp group member RFC 3376 compliant
+    - ipv4: Do not allow MAIN to be alias for new LOCAL w/ custom rules
+    - net: vrf: Add missing Rx counters
+    - [x86] bpf: change back to orig prog on too many passes
+    - [armhf] net: dsa: bcm_sf2: Do not clobber b53_switch_ops
+    - [armhf] net: dsa: bcm_sf2: Utilize nested MDIO read/write
+    - r8152: split rtl8152_suspend function
+    - r8152: fix rx issue for runtime suspend
+    - [armhf] net: dsa: Ensure validity of dst->ds[0]
+    - net: add the AF_QIPCRTR entries to family name tables
+    - gro: Enter slow-path if there is no tailroom
+    - gro: use min_t() in skb_gro_reset_offset()
+    - gro: Disable frag0 optimization on IPv6 ext headers
+    - net/mlx5e: Remove WARN_ONCE from adaptive moderation code
+    - net: ipv4: Fix multipath selection with vrf
+    - net: vrf: do not allow table id 0
+    - HID: hid-cypress: validate length of report
+    - ALSA: firewire-tascam: Fix to handle error from initialization of stream
+      data
+    - [powerpc] Fix build warning on 32-bit PPC
+    - [arm64] dts: mt8173: Fix auxadc node
+    - [arm64] dts: bcm2837-rpi-3-b: remove incorrect pwr LED
+    - [arm64] dts: bcm2835: Fix bcm2837 compatible string
+    - svcrdma: Clear xpt_bc_xps in xprt_setup_rdma_bc() error exit arm
+    - [armhf] OMAP5: Fix mpuss_early_init
+    - [armhf] OMAP5: Fix build for PM code
+    - [armhf] OMAP4+: Fix bad fallthrough for cpuidle
+    - [armhf] omap2+: am437x: rollback to use omap3_gptimer_timer_init()
+    - [armel/marvell, armhf] spi: mvebu: fix baudrate calculation for armada
+      variant
+    - ALSA: usb-audio: Add a quirk for Plantronics BT600
+    - [x86] drm/i915/gen9: Fix PCODE polling during CDCLK change notification
+    - rtlwifi: Fix enter/exit power_save
+    - rtlwifi: rtl_usb: Fix missing entry in USB driver's private data
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.5
+    - Input: xpad - use correct product id for x360w controllers
+    - Input: i8042 - add Pegatron touchpad to noloop table
+    - [armhf] regulator: axp20x: Fix axp809 ldo_io registration error on cold
+      boot
+    - [arm64, armhf] drm/tegra: dpaux: Fix error handling
+    - [arm64, armhf] drm/vc4: Fix a couple error codes in vc4_cl_lookup_bos()
+    - drm/savage: dereferencing an error pointer
+    - zram: revalidate disk under init_lock
+    - zram: support BDI_CAP_STABLE_WRITES
+    - dax: fix deadlock with DAX 4k holes
+    - mm: pmd dirty emulation in page fault handler
+    - mm: fix devm_memremap_pages crash, use mem_hotplug_{begin, done}
+    - ocfs2: fix crash caused by stale lvb with fsdlm plugin
+    - mm, memcg: fix the active list aging for lowmem requests when memcg is
+      enabled
+    - mm: support anonymous stable page
+    - mm/slab.c: fix SLAB freelist randomization duplicate entries
+      (CVE-2017-5546)
+    - mm/hugetlb.c: fix reservation race when freeing surplus pages
+    - [x86] KVM: fix emulation of "MOV SS, null selector" (CVE-2017-2583)
+    - KVM: eventfd: fix NULL deref irqbypass consumer
+    - jump_labels: API for flushing deferred jump label updates
+    - [x86] KVM: flush pending lapic jump label updates on module unload
+    - [x86] KVM: fix NULL deref in vcpu_scan_ioapic
+    - [x86] KVM: add Align16 instruction flag
+    - [x86] KVM: add asm_safe wrapper
+    - [x86] KVM: emulate FXSAVE and FXRSTOR
+    - [x86] KVM: Introduce segmented_write_std (CVE-2017-2584)
+    - efi/libstub/arm*: Pass latest memory map to the kernel
+    - [x86] efi: Prune invalid memory map entries and fix boot regression
+    - [x86] efi: Don't allocate memmap through memblock after mm_init()
+      (Closes: #851928)
+    - nl80211: fix sched scan netlink socket owner destruction
+    - gpio: Move freeing of GPIO hogs before numbing of the device
+    - xfs: Timely free truncated dirty pages
+    - bridge: netfilter: Fix dropping packets that moving through bridge
+      interface
+    - [x86] cpu/AMD: Clean up cpu_llc_id assignment per topology feature
+    - [x86] bugs: Separate AMD E400 erratum and C1E bug
+    - [x86] CPU/AMD: Fix Bulldozer topology
+    - wusbcore: Fix one more crypto-on-the-stack bug
+    - [armhf] usb: musb: fix runtime PM in debugfs
+    - USB: serial: kl5kusb105: fix line-state error handling (CVE-2017-5549)
+    - USB: serial: ch341: fix initial modem-control state
+    - USB: serial: ch341: fix resume after reset
+    - USB: serial: ch341: fix open error handling
+    - USB: serial: ch341: fix control-message error handling
+    - USB: serial: ch341: fix open and resume after B0
+    - i2c: print correct device invalid address
+    - i2c: fix kernel memory disclosure in dev interface
+    - fix a fencepost error in pipe_advance() (CVE-2017-5550)
+    - xhci: fix deadlock at host remove by running watchdog correctly
+    - btrfs: fix crash when tracepoint arguments are freed by wq callbacks
+    - ASoC: hdmi-codec: use unsigned type to structure members with bit-field
+    - Revert "tty: serial: 8250: add CON_CONSDEV to flags"
+    - pid: fix lockdep deadlock warning due to ucount_lock
+    - mnt: Protect the mountpoint hashtable with mount_lock
+    - drivers: char: mem: Fix thinkos in kmem address checks
+    - [armhf] dmaengine: omap-dma: Fix dynamic lch_map allocation
+    - virtio_blk: avoid DMA to stack for the sense buffer
+    - orinoco: Use shash instead of ahash for MIC calculations
+    - sysrq: attach sysrq handler correctly for 32-bit kernel
+    - [arm64, armhf] extcon: return error code on failure
+    - Clearing FIFOs in RS485 emulation mode causes subsequent transmits to
+      break
+    - sysctl: Drop reference added by grab_header in proc_sys_readdir
+      (CVE-2016-9191)
+    - [s390x] net/af_iucv: don't use paged skbs for TX on HiperSockets
+    - [x86] drm/i915/gen9: Fix PCODE polling timeout in stable backport
+    - drm: Clean up planes in atomic commit helper failure path
+    - drm/radeon: update smc firmware selection for SI
+    - drm/radeon: drop verde dpm quirks
+    - [x86] drm/amdgpu: update si kicker smc firmware
+    - [x86] drm/amdgpu: drop verde dpm quirks
+    - USB: serial: ch341: fix modem-control and B0 handling
+    - net/mlx5: Only cancel recovery work when cleaning up device
+    - i2c: piix4: Avoid race conditions with IMC
+    - [x86] cpu: Fix bootup crashes by sanitizing the argument of the
+      'clearcpuid=' command-line option
+    - nvme: apply DELAY_BEFORE_CHK_RDY quirk at probe time too
+    - btrfs: fix locking when we put back a delayed ref that's too new
+    - btrfs: fix error handling when run_delayed_extent_op fails
+    - NFS: fix typo in parameter description
+    - pNFS: Fix race in pnfs_wait_on_layoutreturn
+    - NFS: Fix a performance regression in readdir
+    - NFSv4.1: nfs4_fl_prepare_ds must be careful about reporting success.
+    - [armhf] i2c: mux: pca954x: fix i2c mux selection caching
+    - [x86] drm/i915/gen9: Fix PCODE polling during SAGV disabling
+    - drm: avoid uninitialized timestamp use in wait_vblank
+    - [arm64, armhf] drm/panel: simple: Check against num_timings when setting
+      preferred for timing
+    - [x86] drm/i915: Move the min_pixclk[] handling to the end of readout
+    - drm: Initialise drm_mm.head_node.allocated
+    - block: Change extern inline to static inline
+    - block: cfq_cpd_alloc() should use @gfp
+    - [x86] ACPI / APEI: Fix NMI notification handling
+    - [x86] powercap/intel_rapl: fix and tidy up error handling
+    - iw_cxgb4: Fix error return code in c4iw_rdev_open()
+    - [arm64, armhf] power: supply: bq27xxx_battery: Fix register map for
+      BQ27510 and BQ27520
+    - blk-mq: Always schedule hctx->next_cpu
+    - [powerpc] mm: Correct process and partition table max size
+    - [powerpc*] ibmebus: Fix further device reference leaks
+    - [powerpc*] ibmebus: Fix device reference leaks in sysfs interface
+    - [powerpc*] powernv: Don't warn on PE init if unfreeze is unsupported
+    - [arm64] hugetlb: fix the wrong address for several functions
+    - [arm64] hugetlb: remove the wrong pmd check in find_num_contig()
+    - [arm64] hugetlb: fix the wrong return value for
+      huge_ptep_set_access_flags
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.6
+    - IB/core: Release allocated memory in cache setup failure
+    - IB/rxe: Increase max number of completions to 32k
+    - IB/rxe: avoid putting a large struct rxe_qp on stack
+    - IB/mlx5: Avoid system crash when enabling many VFs
+    - IB/mlx5: Fix reported max SGE calculation
+    - IB/mlx5: Assign SRQ type earlier
+    - IB/mlx5: Wait for all async command completions to complete
+    - IB/mlx4: Set traffic class in AH
+    - IB/mlx4: Fix out-of-range array index in destroy qp flow
+    - IB/mlx4: Handle well-known-gid in mad_demux processing
+    - IB/mlx4: Fix port query for 56Gb Ethernet links
+    - IB/mlx4: When no DMFS for IPoIB, don't allow NET_IF QPs
+    - IB/mlx4: Check if GRH is available before using it
+    - IB/IPoIB: Remove can't use GFP_NOIO warning
+    - perf trace: Use the syscall raw_syscalls:sys_enter timestamp
+    - perf mem: Fix --all-user/--all-kernel options
+    - perf trace: Check if MAP_32BIT is defined (again)
+    - perf diff: Do not overwrite valid build id
+    - perf callchain: Fixup help/config for no-unwinding
+    - perf scripting: Avoid leaking the scripting_context variable
+    - perf jit: Enable jitdump support without dwarf
+    - [armhf] dts: bcm283x: fix typo in mailbox address
+    - [armhf] dts: imx6q-cm-fx6: fix fec pinctrl
+    - [armhf] dts: omap3: Add DTS for Logic PD SOM-LV 37xx Dev Kit
+    - tmpfs: clear S_ISGID when setting posix ACLs (CVE-2017-5551)
+    - [x86] PCI: Ignore _CRS on Supermicro X8DTH-i/6/iF/6F
+    - rcu: Narrow early boot window of illegal synchronous grace periods
+    - sunrpc: don't call sleeping functions from the notifier block callbacks
+    - svcrpc: don't leak contexts on PROC_DESTROY
+    - libnvdimm, namespace: fix pmem namespace leak, delete when size set to
+      zero
+    - fuse: clear FR_PENDING flag when moving requests out of pending queue
+    - fuse: fix time_to_jiffies nsec sanity check
+    - PCI: Enumerate switches below PCI-to-PCIe bridges
+    - HID: corsair: fix DMA buffers on stack (CVE-2017-5547)
+    - HID: corsair: fix control-transfer error handling
+    - mmc: sdhci-acpi: Only powered up enabled acpi child devices
+    - ieee802154: atusb: do not use the stack for buffers to make them DMA able
+      (CVE-2017-5548)
+    - [s390x] KVM: do not expose random data via facility bitmap
+    - [armhf,arm64] KVM: vgic: Fix deadlock on error handling
+    - [powerpc*] icp-opal: Fix missing KVM case and harden replay
+    - [powerpc*] perf: Fix PM_BRU_CMPL event code for power9
+    - [powerpc*] ptrace: Preserve previous fprs/vsrs on short regset write
+    - [powerpc*] ptrace: Preserve previous TM fprs/vsrs on short regset write
+    - [powerpc*] Ignore reserved field in DCSR and PVR reads and writes
+    - [x86] ioapic: Restore IO-APIC irq_chip retrigger callback
+    - qla2xxx: Fix crash due to null pointer access
+    - mac80211: implement multicast forwarding on fast-RX path
+    - ubifs: Fix journal replay wrt. xattr nodes
+    - [armhf] clocksource/exynos_mct: Clear interrupt when cpu is shut down
+    - svcrdma: avoid duplicate dma unmapping during error recovery
+    - ceph: fix bad endianness handling in parse_reply_info_extra
+    - [armhf] dts: OMAP5 / DRA7: indicate that SATA port 0 is available.
+    - [arm64] avoid returning from bad_mode
+    - [arm64] ptrace: Preserve previous registers for short regset write
+    - [arm64] ptrace: Avoid uninitialised struct padding in fpr_set()
+    - [arm64] ptrace: Reject attempts to set incomplete hardware breakpoint
+      fields
+    - Input: ALPS - fix TrackStick support for SS5 hardware
+    - libceph: ceph_x_encrypt_buflen() takes in_len
+    - libceph: old_key in process_one_ticket() is redundant
+    - libceph: introduce ceph_x_encrypt_offset()
+    - libceph: introduce ceph_crypt() for in-place en/decryption
+      (CVE-2016-10153)
+    - libceph: rename and align ceph_x_authorizer::reply_buf
+    - libceph: tweak calcu_signature() a little
+    - libceph: switch ceph_x_encrypt() to ceph_crypt()
+    - libceph: switch ceph_x_decrypt() to ceph_crypt()
+    - libceph: remove now unused ceph_*{en,de}crypt*() functions
+    - [armhf] dts: Add an empty chosen node to top level DTSI
+    - [armel,armhf] 8613/1: Fix the uaccess crash on PB11MPCore
+    - ceph: fix scheduler warning due to nested blocking
+    - ceph: fix ceph_get_caps() interruption
+    - ceph: fix endianness of getattr mask in ceph_d_revalidate
+    - ceph: fix endianness bug in frag_tree_split_cmp
+    - libceph: make sure ceph_aes_crypt() IV is aligned
+    - xprtrdma: Make FRWR send queue entry accounting more accurate
+    - xprtrdma: Squelch "max send, max recv" messages at connect time
+    - [arm64] mm: avoid name clash in __page_to_voff()
+    - [arm64] Fix swiotlb fallback allocation
+    - swiotlb: Convert swiotlb_force from int to enum
+    - swiotlb: Add swiotlb=noforce debug option
+    - scsi: ses: Fix SAS device detection in enclosure
+    - scsi: mpt3sas: fix hang on ata passthrough commands
+    - [armhf] PM / devfreq: exynos-bus: Fix the wrong return value
+    - PM / devfreq: Fix the bug of devfreq_add_device when governor is NULL
+    - mtd: spi-nor: Off by one in cqspi_setup_flash()
+    - mtd: spi-nor: Fix some error codes in cqspi_setup_flash()
+    - [x86] ite-cir: initialize use_demodulator before using it
+    - [armhf] dmaengine: pl330: Fix runtime PM support for terminated transfers
+    - [armhf] soc: ti: wkup_m3_ipc: Fix error return code in wkup_m3_ipc_probe()
+    - libceph: uninline ceph_crypto_key_destroy()
+    - libceph: stop allocating a new cipher on every crypto request
+
+  [ Ben Hutchings ]
+  * [armel,armhf,s390x,x86] linux-headers: Fix regression of multilib compiler
+    support (Closes: #851481)
+  * nbd: use loff_t for blocksize and nbd_set_size args (Closes: #851533)
+  * ath9k: fix NULL pointer dereference (Closes: #851621)
+  * cfg80211,memcg,power: Avoid ABI changes
+  * bq27xxx_battery,cpuhp,libceph,orinoco,xhci: Ignore ABI changes
+  * linux-image: Increase minimum version of initramfs-tools (Closes: #808038)
+  * [x86] linux-cpupower: Add turbostat and x86_energy_perf_policy commands
+    (Closes: #778249)
+  * [arm64] Enable ARCH_MESON and related drivers (Closes: #852132)
+  * [arm64] dts: meson-gx: Add firmware reserved memory zones
+  * [x86] ASoC: Intel: select DW_DMAC_CORE since it's mandatory
+  * [x86] sound/soc/intel: Enable SND_SOC_INTEL_BDW_RT5677_MACH as module
+    (Closes: #851916)
+  * [arm64] video/fbdev: Change FB from module to built-in
+  * [arm64,armhf] video/fbdev: Enable FB_EFI (Closes: #851778)
+  * fs: Disable LOGFS, as it is unmaintained and will be removed in 4.10
+  * [rt] genpatch.py: Verify tag and tarball signatures
+  * fbdev: color map copying bounds checking (CVE-2016-8405)
+  * [armhf,arm64] drm/vc4: Fix an integer overflow in temporary allocation
+    layout. (CVE-2017-5576)
+  * [armhf,arm64] drm/vc4: Return -EINVAL on the overflow checks failing.
+    (CVE-2017-5577)
+  * [arm64] ptrace: Avoid ABI change in 4.9.6
+  * [arm64] Enable ARM64_ACPI_PARKING_PROTOCOL, ARCH_THUNDER, GPIO_PL061,
+    GPIO_XGENE, ARM_SMMU, ARM_SMMU_V3, PCI_HOST_THUNDER_PEM, and
+    PCI_HOST_THUNDER_ECAM; PINCTRL_AMD as built-in; SATA_AHCI_SEATTLE,
+    HW_RANDOM_XGENE, HW_RANDOM_CAVIUM, CPUFREQ_DT, K3_DMA, GPIO_XGENE_SB,
+    SENSORS_XGENE, I2C_THUNDERX, KEYBOARD_GPIO, TI_ST, THUNDER_NIC_PF,
+    THUNDER_NIC_VF (Closes: #852493), THUNDER_NIC_BGX, THUNDER_NIC_RGX,
+    MDIO_THUNDER, MDIO_XGENE, SPI_THUNDERX, and SND_SOC_APQ8016_SBC as
+    modules (thanks to Riku Voipio)
+
+  [ Roger Shimizu ]
+  * [armel] Add DT support of Buffalo Linkstation Live v3 (LS-CHL)
+  * drivers/input: Enable TOUCHSCREEN_GOODIX as module (Closes: #851821).
+  * [mips/octeon] hwmon: Enable SENSORS_ADM1031 as module (Closes: #851963).
+    Thanks to James Cowgill.
+  * nbd: fix 64-bit division.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 27 Jan 2017 07:44:54 +0000
+
+linux (4.9.2-2) unstable; urgency=medium
+
+  * [sparc64] Export memcpy and memset to modules again (fixes FTBFS)
+  * Revert "Remove debug symbol packages from debian/control to work around dak
+    bug", which caused most binary uploads to be rejected
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 12 Jan 2017 15:52:37 +0000
+
+linux (4.9.2-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.2
+
+  [ Ben Hutchings ]
+  * abiupdate.py: Use current config instead of downloading previous config
+  * abiupdate.py: Update base URLs
+  * abiupdate.py: Add support for incoming.ports.debian.org
+  * Make the pickled config (config.defines.dump) reproducible
+  * Remove debug symbol packages from debian/control to work around dak bug
+  * udeb: Add switch (DSA) drivers to nic-modules (Closes: #845075)
+  * netfilter: Enable NFT_NUMGEN, NFT_QUOTA as modules
+  * net/sched: Enable NET_ACT_TUNNEL_KEY, NET_IFE_SKBTCINDEX as modules
+  * vsock: Enable VSOCKETS, VHOST_VSOCK, VIRTIO_VSOCKETS as modules
+  * hci_uart: Enable BT_HCIUART_MRVL
+  * rxrpc: Enable AF_RXRPC_IPV6
+  * net: Enable NET_DEVLINK, MACSEC as modules
+  * SCSI: Enable SCSI_SMARTPQI as module
+  * target: Enable ISCSI_TARGET_CXGB4 as module
+  * cxgb4: Enable CHELSIO_T4_FCOE
+  * drm: Enable DRM_LEGACY; re-enable DRM_TDFX, DRM_R128, DRM_MGA, DRM_SIS,
+    DRM_VIA, DRM_SAVAGE as modules for some architectures
+  * 8250: Disable SERIAL_8250_LPSS, since it causes DW_DMAC_CORE to be built-in
+  * Partially revert "usb: Kconfig: using select for USB_COMMON dependency",
+    since it causes USB_COMMON to be built-in
+  * Set ABI to 1
+
+  [ John Paul Adrian Glaubitz ]
+  * [sh3] Build a linux-libc-dev package (Closes: #850732)
+
+  [ Martin Michlmayr ]
+  * [arm64] Enable MV_XOR and MV_XOR_V2.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 11 Jan 2017 04:41:33 +0000
+
+linux (4.9.1-1~exp1) experimental; urgency=medium
+
+  * New upstream release: https://kernelnewbies.org/Linux_4.9
+    - Revert "default exported asm symbols to zero"
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.1
+
+  [ Ben Hutchings ]
+  * Set ABI to trunk
+  * Enable USERFAULTFD (except on armel/marvell)
+  * [x86] PCI: Enable VMD as module
+  * mm: Enable PAGE_POISONING (Closes: #849450), PAGE_POISONING_NO_SANITY
+    (except on armel/marvell)
+  * ieee802154: Enable IEEE802154_FAKELB as module
+  * [armhf] leds,gpio: Enable LEDS_TCA6507 as module (Closes: #847770)
+  * [x86] iio,HID: Enable INTEL_ISH_HID as module
+  * hwmon,watchdog: Enable SENSORS_FTSTEUTATES as module (together with the
+    previous, Closes: #847017)
+  * net: Enable GTP as module (Closes: #846913)
+  * [armhf] gpio: Enable GPIO_MCP23S08 as module (Closes: #845064)
+  * aufs: Update support patchset to aufs4.9-20161219
+  * Use debhelper compatibility level 9
+  * [arm64] Revert "arm64/mm: Limit TASK_SIZE_64 ..." and add breaks on
+    incompatible mozjs
+  * genorig.py: Verify tag signatures (based on work by Yves-Alexis Perez)
+
+  [ Uwe Kleine-König ]
+  * enable `perf data' support; patch by Sebastian Andrzej Siewior
+    (Closes: #846597)
+  * [rt] Update to 4.9-rt1 and reenable
+  * [armhf] Add support for switch hardware on Turris Omnia
+
+  [ Aurelien Jarno ]
+  * [arm64] Enable RTC_DRV_DS1307.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 07 Jan 2017 03:44:26 +0000
+
+linux (4.9~rc8-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * radeon: Update package name in error message for missing firmware
+  * [amd64] Remove xen-linux-system-<version> package
+  * debian/control: Fix build-dependency on flex to work with new versions
+    that have M-A: allowed
+  * Revert "default exported asm symbols to zero"
+  * [arm64] remoteproc: Disable QCOM_WCNSS_PIL (fixes FTBFS)
+  * [sparc64] Don't re-add exports of string functions that are now only
+    defined as macros (fixes FTBFS, after other fixes)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 05 Dec 2016 05:02:30 +0000
+
+linux (4.9~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate:
+    - [armhf,armel] Revert "arm: move exports to definitions" (Closes: #844530)
+
+  [ Martin Michlmayr ]
+  * [arm64] Enable more QCOM options: BT_QCOMSMD, QCOM_EBI2, QCOM_TSENS,
+    QCOM_WCNSS_PIL and EXTCON_QCOM_SPMI_MISC.
+  * [arm64] Enable ARCH_MVEBU and related options.
+
+  [ Ben Hutchings ]
+  * linux-headers-common: Make these packages architecture-independent by
+    including headers for all architectures that we build a kernel for
+  * Fix exported symbol versions:
+    - Revert upstream changes moving exports to assembly sources
+    - [x86] kbuild: enable modversions for symbols exported from assembly
+    - [powerpc] Remove Mac-on-Linux hooks
+    - [powerpc*] Fix missing CRCs, add yet more asm-prototypes.h declarations
+    - Re-enable CONFIG_MODVERSIONS in a slightly weaker form
+    - module: Disable matching missing version CRC
+  * debian/bin/buildcheck.py: Add check for symbols with version CRC of 0
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 03 Dec 2016 01:46:12 +0000
+
+linux (4.9~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Aurelien Jarno ]
+  * Enable MAC802154, IEEE802154_ADF7242, IEEE802154_AT86RF230,
+    IEEE802154_ATUSB, IEEE802154_CC2520 and IEEE802154_MRF24J40.
+  * [arm64] Enable VIRTUALIZATION and KVM.
+
+  [ Ben Hutchings ]
+  * [hppa] Update build-dependencies for 64-bit kernel (fixes FTBFS)
+  * linux-perf: Exclude perf-read-vdso* from shared library dependency
+    check (fixes FTBFS on sparc64)
+  * [x86] kexec: add -fno-PIE
+  * wireless: Enable RTL8XXXU as module, replacement for R8723AU
+  * netfilter: Enable NFT_SET_RBTREE and NFT_SET_HASH as modules,
+    renamed from NFT_RBTREE and NFT_HASH
+  * tcp: Enable TCP_CONG_BBR as module
+  * [armel] Drop versatile flavour, which has been broken since version
+    4.5~rc4-1~exp1
+  * [x86] ethernet: Enable ENA_ETHERNET as module
+  * [x86] efi: Prevent mixed mode boot corruption with CONFIG_VMAP_STACK=y
+  * w1: Disable W1_MASTER_MATROX
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 14 Nov 2016 05:19:31 +0000
+
+linux (4.9~rc3-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [rt] Disable until it is updated for 4.9 or later
+  * kbuild: add -fno-PIE (Closes: #841368)
+  * Compile with gcc-6 on all architectures
+  * debian/control: Fix build-dependency on openssl to work with new
+    versions that have M-A: allowed (Closes: #839145)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 03 Nov 2016 16:51:55 -0600
+
+linux (4.8.15-2) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * [x86] Enable INTEL_VBTN as module (Closes: #848967)
+  * debian/control: Change build-dependency on asciidoc to prefer the new
+    asciidoc-base, so we don't pull in LaTeX unnecessarily
+  * [x86] Enable LEDS_DELL_NETBOOKS and DELL_SMBIOS as modules; re-enable
+    DELL_LAPTOP and DELL_WMI as modules (Closes: #849674)
+  * [powerpc*] boot: Request no dynamic linker for boot wrapper
+    (Closes: #848851, FTBFS on ppc6el)
+  * cpufreq: Enable CPU_FREQ_GOV_SCHEDUTIL as module
+  * [x86] ACPI: Enable DPTF_POWER as module
+  * [x86] perf: Enable PERF_EVENTS_AMD_POWER as module
+  * [x86] perf: Change PERF_EVENTS_INTEL_{CSTATE,RAPL,UNCORE} from built-in
+    to modules
+  * PCI: Enable PCIE_DPC (except for armel/versatile)
+  * [amd64] PCI: Enable PCI_HYPERV as module
+  * inet: Enable INET_DIAG_DESTROY
+  * tcp: Enable TCP_CONG_NV as module
+  * ipv6: Enable IPV6_ILA as module
+  * net/sched: Enable NET_CLS_MATCHALL, NET_ACT_IFE, NET_IFE_SKBMARK,
+    NET_IFE_SKBPRIO as modules
+  * hci_uart: Enable BT_HCIUART_AG6XX
+  * nvme: Enable NVME_RDMA, NVME_TARGET, NVME_TARGET_RDMA as modules
+  * [amd64] mic: Enable VOP_BUS and VOP as modules; re-enable INTEL_MIC_HOST as
+    module
+  * debian/control: Add Salvatore Bonaccorso to Uploaders
+  * [rt] Update to 4.8.15-rt10 (no functional change)
+
+  [ Salvatore Bonaccorso ]
+  * sg_write()/bsg_write() is not fit to be called under KERNEL_DS
+    (CVE-2016-10088)
+  * kvm: nVMX: Allow L1 to intercept software exceptions (#BP and #OF)
+    (CVE-2016-9588)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 04 Jan 2017 19:39:36 +0000
+
+linux (4.8.15-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.12
+    - [x86] iommu/vt-d: Fix PASID table allocation
+    - [x86] iommu/vt-d: Fix IOMMU lookup for SR-IOV Virtual Functions
+    - [x86] KVM: fix out-of-bounds access in lapic
+    - [x86] KVM: x86: drop error recovery in em_jmp_far and em_ret_far
+      (CVE-2016-9756)
+    - [x86] KVM: fix out-of-bounds accesses of rtc_eoi map (CVE-2016-9777)
+    - [x86] KVM: check for pic and ioapic presence before use
+    - [arm64, armhf] usb: chipidea: move the lock initialization to core file
+    - USB: serial: cp210x: add ID for the Zone DPMX
+    - USB: serial: ftdi_sio: add support for TI CC3200 LaunchPad
+    - scsi: mpt3sas: Fix secure erase premature termination
+    - cfg80211: limit scan results cache size
+    - apparmor: fix change_hat not finding hat after policy replacement
+    - NFSv4.x: hide array-bounds warning
+    - [x86] fpu: Fix invalid FPU ptrace state after execve()
+    - [x86] traps: Ignore high word of regs->cs in early_fixup_exception()
+    - perf/core: Fix address filter parser
+    - perf/x86/intel: Cure bogus unwind from PEBS entries
+    - [x86] thermal/powerclamp: add back module device table
+    - [hppa/parisc] Fix races in parisc_setup_cache_timing()
+    - [hppa/parisc] Switch to generic sched_clock implementation
+    - [hppa/parisc] Fix race in pci-dma.c
+    - [hppa/parisc] Also flush data TLB in flush_icache_page_asm
+    - mpi: Fix NULL ptr dereference in mpi_powm()
+    - X.509: Fix double free in x509_cert_parse()
+    - xc2028: Fix use-after-free bug properly
+    - [powerpc] Set missing wakeup bit in LPCR on POWER9
+    - [powerpc] mm: Fixup kernel read only mapping
+    - [powerpc] boot: Fix the early OPAL console wrappers
+    - can: bcm: fix support for CAN FD frames
+    - mm, oom: stop pre-mature high-order OOM killer invocations
+    - flow_dissect: call init_default_flow_dissectors() earlier
+    - scsi: mpt3sas: Unblock device after controller reset
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.13
+    - libata-scsi: Fixup ata_gen_passthru_sense()
+    - scsi: hpsa: use bus '3' for legacy HBA devices
+    - scsi: libfc: fix seconds_since_last_reset miscalculation
+    - mm, thp: propagation of conditional compilation in khugepaged.c
+    - thp: fix corner case of munlock() of PTE-mapped THPs
+    - zram: fix unbalanced idr management at hot removal
+    - mm: fix false-positive WARN_ON() in truncate/invalidate for hugetlb
+    - ovl: fix d_real() for stacked fs
+    - Input: change KEY_DATA from 0x275 to 0x277
+    - Input: psmouse - disable automatic probing of BYD touchpads
+    - rcu: Fix soft lockup for rcu_nocb_kthread
+    - mm: workingset: fix NULL ptr in count_shadow_nodes
+    - PCI: Export pcie_find_root_port
+    - PCI: Set Read Completion Boundary to 128 iff Root Port supports it
+      (_HPX)
+    - mwifiex: printk() overflow with 32-byte SSIDs
+    - [arm64] KVM: vgic: Don't notify EOI for non-SPIs
+    - [x86] drm/i915: Don't touch NULL sg on i915_gem_object_get_pages_gtt()
+      error
+    - [x86] drm/i915: drop the struct_mutex when wedged or trying to reset
+    - [x86] drm/amdgpu: fix power state when port pm is unavailable
+    - drm/radeon: fix power state when port pm is unavailable
+    - [x86] drm/amdgpu: fix check for port PM availability
+    - drm/radeon: fix check for port PM availability
+    - [arm64] dts: juno: fix cluster sleep state entry latency on all SoC
+      versions
+    - KVM: use after free in kvm_ioctl_create_device()
+    - pwm: Fix device reference leak
+    - [x86] perf: Restore TASK_SIZE check on frame pointer
+    - [armhf] clk: sunxi: Fix M factor computation for APB1
+    - batman-adv: Detect missing primaryif during tp_send as error
+    - [arm64] cpufeature: Schedule enable() calls instead of calling them via
+      IPI
+    - [arm64] mm: Set PSTATE.PAN from the cpu_enable_pan() call
+    - [arm64] suspend: Reconfigure PSTATE after resume from idle
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.14
+    - gro_cells: mark napi struct as not busy poll candidates
+    - virtio-net: add a missing synchronize_net()
+    - [armhf] net: dsa: b53: Fix VLAN usage and how we treat CPU port
+    - net: check dead netns for peernet2id_alloc()
+    - ip6_tunnel: disable caching when the traffic class is inherited
+    - net: sky2: Fix shutdown crash
+    - af_unix: conditionally use freezable blocking calls in read
+    - rtnetlink: fix FDB size computation
+    - l2tp: fix racy SOCK_ZAPPED flag check in l2tp_ip{,6}_bind()
+    - rtnl: fix the loop index update error in rtnl_dump_ifinfo()
+    - ipv6: bump genid when the IFA_F_TENTATIVE flag is clear
+    - udplite: call proper backlog handlers
+    - [armhf] net: dsa: bcm_sf2: Ensure we re-negotiate EEE during after link
+      change
+    - net, sched: respect rcu grace period on cls destruction
+    - [armhf] net: dsa: fix unbalanced dsa_switch_tree reference counting
+    - net/sched: pedit: make sure that offset is valid
+    - netlink: Call cb->done from a worker thread
+    - netlink: Do not schedule work from sk_destruct
+    - net/dccp: fix use-after-free in dccp_invalid_packet
+    - GSO: Reload iph after pskb_may_pull
+    - packet: fix race condition in packet_set_ring (CVE-2016-8655)
+    - ip6_offload: check segs for NULL in ipv6_gso_segment.
+    - cdc_ether: Fix handling connection notification
+    - tipc: check minimum bearer MTU (CVE-2016-8632)
+    - geneve: avoid use-after-free of skb->data
+    - net: avoid signed overflows for SO_{SND|RCV}BUFFORCE (CVE-2016-9793)
+    - net: ping: check minimum size on ICMP header length (CVE-2016-8399)
+    - ipv4: Restore fib_trie_flush_external function and fix call ordering
+    - ipv4: Fix memory leak in exception case for splitting tries
+    - ipv4: Drop leaf from suffix pull/push functions
+    - ipv4: Drop suffix update from resize code
+    - [sparc64] Fix find_node warning if numa node cannot be found
+    - [sparc64] fix compile warning section mismatch in find_node()
+    - [sparc] Fix inverted invalid_frame_pointer checks on sigreturns
+    - constify iov_iter_count() and iter_is_iovec()
+    - Don't feed anything but regular iovec's to blk_rq_map_user_iov
+      (CVE-2016-9576)
+    - ipv6: Set skb->protocol properly for local output
+    - ipv4: Set skb->protocol properly for local output
+    - Revert: "ip6_tunnel: Update skb->protocol to ETH_P_IPV6 in
+      ip6_tnl_xmit()"
+    - flowcache: Increase threshold for refusing new allocations
+    - esp4: Fix integrity verification when ESN are used
+    - esp6: Fix integrity verification when ESN are used
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.15
+    - [powerpc] eeh: Fix deadlock when PE frozen state can't be cleared
+    - [powerpc] mm: Fix lazy icache flush on pre-POWER5
+    - [powerpc] boot: Fix build failure in 32-bit boot wrapper
+    - fuse: fix clearing suid, sgid for chown()
+    - [hppa/parisc] Purge TLB before setting PTE
+    - [hppa/parisc] Remove unnecessary TLB purges from flush_dcache_page_asm
+      and flush_icache_page_asm
+    - [hppa/parisc] Fix TLB related boot crash on SMP machines
+    - zram: restrict add/remove attributes to root only
+    - locking/rtmutex: Prevent dequeue vs. unlock race
+    - locking/rtmutex: Use READ_ONCE() in rt_mutex_owner()
+    - device-dax: fix private mapping restriction, permit read-only
+    - scsi: lpfc: fix oops/BUG in lpfc_sli_ringtxcmpl_put()
+    - sched/autogroup: Fix 64-bit kernel nice level adjustment
+    - [x86] perf: Fix full width counter, counter overflow
+    - acpi, nfit: fix extended status translations for ACPI DSMs
+    - acpi, nfit, libnvdimm: fix / harden ars_status output length handling
+    - acpi, nfit: validate ars_status output buffer size
+    - acpi, nfit: fix bus vs dimm confusion in xlat_status
+    - [armel, armhf] crypto: marvell - Don't copy hash operation twice into
+      the SRAM
+    - crypto: caam - fix pointer size for AArch64 boot loader, AArch32 kernel
+    - [armel, armhf] crypto: marvell - Don't corrupt state of an STD req for
+      re-stepped ahash
+    - can: raw: raw_setsockopt: limit number of can_filter that can be set
+    - can: peak: fix bad memory access and free sequence
+    - [armel] dts: orion5x: fix number of sata port for linkstation ls-gl
+      (Closes: #845611)
+    - ceph: don't set req->r_locked_dir in ceph_d_revalidate
+    - [m68k] Fix ndelay() macro
+    - batman-adv: Check for alloc errors when preparing TT local data
+    - hotplug: Make register and unregister notifier API symmetric
+
+  [ Uwe Kleine-König ]
+  * [armhf] dts: armada-385: add support for Turris Omnia
+
+  [ Salvatore Bonaccorso ]
+  * Add ABI reference for 4.8.0-2
+  * Ignore ABI changes in KVM
+  * net: handle no dst on skb in icmp6_send (CVE-2016-9919)
+  * [rt] Update to 4.8.11-rt7
+  * [rt] Update to 4.8.14-rt9
+  * netfilter: ipv6: nf_defrag: drop mangled skb on ream error (CVE-2016-9755)
+  * Ignore ABI changes in libnvdimm
+  * docs: sphinx-extensions: make rstFlatTable work with docutils 0.13.
+    Thanks to Dmitry Shachnev <mitya57@debian.org> (Closes: #848349)
+
+  [ Ben Hutchings ]
+  * [amd64] Re-enable LEGACY_VSYSCALL_EMULATE instead of LEGACY_VSYSCALL_NONE.
+    There are still binaries in stable that use vsyscall (via dietlibc).
+    (Closes: #847154)
+  * debian/rules.real: Exclude *.pyc from featureset diffs
+  * debian/control: Fix build-dependency on flex to work with new versions that
+    have M-A: foreign
+  * debian/rules: Use dpkg-parsechangelog -S option to select fields
+  * debian/rules: Tighten binNMU version matching, consistent with linux-latest
+
+ -- Salvatore Bonaccorso <carnil@debian.org>  Mon, 19 Dec 2016 12:35:29 +0100
+
+linux (4.8.11-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.8
+    - net: fec: set mac address unconditionally
+    - net: pktgen: fix pkt_size
+    - net/sched: act_vlan: Push skb->data to mac_header prior calling
+      skb_vlan_*() functions
+    - net: Add netdev all_adj_list refcnt propagation to fix panic
+    - packet: call fanout_release, while UNREGISTERING a netdev
+    - netlink: do not enter direct reclaim from netlink_dump()
+    - drivers/ptp: Fix kernel memory disclosure
+    - net_sched: reorder pernet ops and act ops registrations
+    - ipv6: tcp: restore IP6CB for pktoptions skbs
+    - net: phy: Trigger state machine on state change and not polling.
+    - ip6_tunnel: fix ip6_tnl_lookup
+    - ipv6: correctly add local routes when lo goes up
+    - IB/ipoib: move back IB LL address into the hard header
+    - net/mlx4_en: fixup xdp tx irq to match rx
+    - net: pktgen: remove rcu locking in pktgen_change_name()
+    - bridge: multicast: restore perm router ports on multicast enable
+    - switchdev: Execute bridge ndos only for bridge ports
+    - rtnetlink: Add rtnexthop offload flag to compare mask
+    - net: core: Correctly iterate over lower adjacency list
+    - net: add recursion limit to GRO
+    - ipv4: disable BH in set_ping_group_range()
+    - ipv4: use the right lock for ping_group_range
+    - net: fec: Call swap_buffer() prior to IP header alignment
+    - net: sctp, forbid negative length
+    - sctp: fix the panic caused by route update
+    - udp: fix IP_CHECKSUM handling
+    - [x86] netvsc: fix incorrect receive checksum offloading
+    - net: ipv6: Do not consider link state for nexthop validation
+    - net sched filters: fix notification of filter delete with proper handle
+    - sctp: validate chunk len before actually using it (CVE-2016-9555)
+    - ip6_tunnel: Update skb->protocol to ETH_P_IPV6 in ip6_tnl_xmit()
+    - packet: on direct_xmit, limit tso and csum to supported devices
+    - [powerpc] Update parameters for csum_tcpudp_magic & csum_tcpudp_nofold
+    - [arm64, armhf] usb: dwc3: gadget: properly account queued requests
+    - scsi: megaraid_sas: Fix data integrity failure for JBOD (passthrough)
+      devices
+    - scsi: megaraid_sas: fix macro MEGASAS_IS_LOGICAL to avoid regression
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.9
+    - ALSA: info: Return error for invalid read/write
+    - ALSA: info: Limit the proc text input size
+    - dib0700: fix nec repeat handling
+    - mm, frontswap: make sure allocated frontswap map is assigned
+    - shmem: fix pageflags after swapping DMA32 object
+    - swapfile: fix memory corruption via malformed swapfile
+    - mm: hwpoison: fix thp split handling in memory_failure()
+    - mm/hugetlb: fix huge page reservation leak in private mapping error paths
+    - coredump: fix unfreezable coredumping task
+    - [s390x] hypfs: Use get_free_page() instead of kmalloc to ensure page
+      alignment
+    - PCI: Don't attempt to claim shadow copies of ROM
+    - [x86] pinctrl: cherryview: Serialize register access in suspend/resume
+    - [x86] pinctrl: cherryview: Prevent possible interrupt storm on resume
+    - cpupower: Correct return type of cpu_power_is_cpu_online() in cpufreq-set
+    - mmc: sdhci: Fix CMD line reset interfering with ongoing data transfer
+    - mmc: sdhci: Fix unexpected data interrupt handling
+    - mmc: mmc: Use 500ms as the default generic CMD6 timeout
+    - [arm64, armhf] usb: dwc3: Fix error handling for core init
+    - USB: cdc-acm: fix TIOCMIWAIT
+    - usb: gadget: u_ether: remove interrupt throttling
+    - drbd: Fix kernel_sendmsg() usage - potential NULL deref
+    - cdc-acm: fix uninitialized variable
+    - scsi: qla2xxx: Fix scsi scan hang triggered if adapter fails during init
+    - scsi: mpt3sas: Fix for block device of raid exists even after deleting
+      raid disk
+    - scsi: scsi_dh_alua: fix missing kref_put() in alua_rtpg_work()
+    - scsi: scsi_dh_alua: Fix a reference counting bug
+    - [arm64] KVM: vgic: Prevent access to invalid SPIs
+    - drm/radeon: disable runtime pm in certain cases
+    - [x86] drm/i915: Respect alternate_ddc_pin for all DDI ports
+    - [x86] drm/i915/dp: BDW cdclk fix for DP audio
+    - [x86] drm/i915/dp: Extend BDW DP audio workaround to GEN9 platforms
+    - [x86] drm/amdgpu: disable runtime pm in certain cases
+    - xprtrdma: use complete() instead complete_all()
+    - xprtrdma: Fix DMAR failure in frwr_op_map() after reconnect
+    - [amd64] iommu/amd: Free domain id when free a domain of struct
+      dma_ops_domain
+    - [x86] iommu/vt-d: Fix dead-locks in disable_dmar_iommu() path
+    - [x86] agp/intel: Flush chipset writes after updating a single PTE
+    - watchdog: core: Fix devres_alloc() allocation size
+    - perf top: Fix refreshing hierarchy entries on TUI
+    - [x86] mei: bus: fix received data size check in NFC fixup
+    - svcrdma: Skip put_page() when send_reply() fails
+    - svcrdma: Tail iovec leaves an orphaned DMA mapping
+    - nvme: Delete created IO queues on reset
+    - [s390x] dumpstack: restore reliable indicator for call traces
+    - hwrng: core - Don't use a stack buffer in add_early_randomness()
+    - i40e: fix call of ndo_dflt_bridge_getlink()
+    - [arm64] mmc: sdhci-msm: Fix error return code in sdhci_msm_probe()
+    - [x86] ACPI / APEI: Fix incorrect return value of ghes_proc()
+    - ACPI/PCI/IRQ: assign ISA IRQ directly during early boot stages
+    - ACPI/PCI: pci_link: penalize SCI correctly
+    - ACPI/PCI: pci_link: Include PIRQ_PENALTY_PCI_USING for ISA IRQs
+    - batman-adv: Modify neigh_list only with rcu-list functions
+    - [armel, armhf] gpio/mvebu: Use irq_domain_add_linear
+    - ASoC: Intel: Skylake: Always acquire runtime pm ref on unload
+    - [armhf] ASoC: sun4i-codec: return error code instead of NULL when
+      create_card fails
+    - memcg: prevent memcg caches to be both OFF_SLAB & OBJFREELIST_SLAB
+    - libceph: fix legacy layout decode with pool 0
+    - [x86] drm/amdgpu: fix fence slab teardown
+    - [x86] drm/amdgpu: fix a vm_flush fence leak
+    - [x86] drm/i915: Fix mismatched INIT power domain disabling during
+      suspend
+    - netfilter: fix namespace handling in nf_log_proc_dostring
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.10
+    - dctcp: avoid bogus doubling of cwnd after loss
+    - net: clear sk_err_soft in sk_clone_lock()
+    - net: mangle zero checksum in skb_checksum_help()
+    - ip6_tunnel: Clear IP6CB in ip6tunnel_xmit()
+    - tcp: fix potential memory corruption
+    - ipv4: allow local fragmentation in ip_finish_output_gso()
+    - tcp: fix return value for partial writes
+    - dccp: do not release listeners too soon
+    - dccp: do not send reset to already closed sockets
+    - dccp: fix out of bound access in dccp_v4_err()
+    - ipv6: dccp: fix out of bound access in dccp_v6_err()
+    - ipv6: dccp: add missing bind_conflict to dccp_ipv6_mapped
+    - sctp: assign assoc_id earlier in __sctp_connect
+    - bpf: fix htab map destruction when extra reserve is in use
+    - net: icmp6_send should use dst dev to determine L3 domain
+    - fib_trie: Correct /proc/net/route off by one error
+    - sock: fix sendmmsg for partial sendmsg
+    - net: icmp_route_lookup should use rt dev to determine L3 domain
+    - net: __skb_flow_dissect() must cap its return value
+    - ipv4: use new_gw for redirect neigh lookup
+    - tcp: take care of truncations done by sk_filter() (CVE-2016-8645)
+    - Revert "include/uapi/linux/atm_zatm.h: include linux/time.h"
+      (Closes: #844491)
+    - Revert "bnx2: Reset device during driver initialization"
+    - bnx2: Wait for in-flight DMA to complete at probe stage
+    - sctp: change sk state only when it has assocs in sctp_shutdown
+    - [arm64, armhf] net: stmmac: Fix lack of link transition for fixed PHYs
+    - [sparc] Handle negative offsets in arch_jump_label_transform
+    - [sparc64] Handle extremely large kernel TSB range flushes sanely.
+    - [sparc64] Fix illegal relative branches in hypervisor patched TLB code.
+    - [sparc64] Fix instruction count in comment for
+      __hypervisor_flush_tlb_pending.
+    - [sparc64] Fix illegal relative branches in hypervisor patched TLB
+      cross-call code.
+    - [sparc64] Handle extremely large kernel TLB range flushes more
+      gracefully.
+    - [sparc64] Delete __ret_efault.
+    - [sparc64] Prepare to move to more saner user copy exception handling.
+    - [sparc64] Convert copy_in_user to accurate exception reporting.
+    - [sparc64] Convert GENcopy_{from,to}_user to accurate exception
+      reporting.
+    - [sparc64] Convert U1copy_{from,to}_user to accurate exception reporting.
+    - [sparc64] Convert NG4copy_{from,to}_user to accurate exception
+      reporting.
+    - [sparc64] Convert NGcopy_{from,to}_user to accurate exception reporting.
+    - [sparc64] Convert NG2copy_{from,to}_user to accurate exception
+      reporting.
+    - [sparc64] Convert U3copy_{from,to}_user to accurate exception reporting.
+    - [sparc64] Delete now unused user copy assembler helpers.
+    - [sparc64] Delete now unused user copy fixup functions.
+    - usb: gadget: f_fs: edit epfile->ep under lock
+    - usb: gadget: f_fs: stop sleeping in ffs_func_eps_disable
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.11
+    - [x86] cpu/AMD: Fix cpu_llc_id for AMD Fam17h systems
+    - [x86] KVM: fix missed SRCU usage in kvm_lapic_set_vapic_addr
+    - [x86] KVM: Disable irq while unregistering user notifier
+    - ftrace: Ignore FTRACE_FL_DISABLED while walking dyn_ftrace records
+    - ftrace: Add more checks for FTRACE_FL_DISABLED in processing ip records
+    - genirq: Use irq type from irqdata instead of irqdesc
+    - fuse: fix fuse_write_end() if zero bytes were copied
+    - IB/rdmavt: rdmavt can handle non aligned page maps
+    - IB/hfi1: Fix rnr_timer addition
+    - [x86] mfd: intel-lpss: Do not put device in reset state on suspend
+    - [armhf] mfd: stmpe: Fix RESET regression on STMPE2401
+    - can: bcm: fix warning in bcm_connect/proc_register
+    - gpio: do not double-check direction on sleeping chips
+    - [x86] ALSA: usb-audio: Fix use-after-free of usb_device at disconnect
+    - [x86] ALSA: hda - add a new condition to check if it is thinkpad
+    - ALSA: hda - Fix mic regression by ASRock mobo fixup
+    - [armhf] i2c: mux: fix up dependencies
+    - [armhf] i2c: i2c-mux-pca954x: fix deselect enabling for device-tree
+    - kbuild: add -fno-PIE
+    - scripts/has-stack-protector: add -fno-PIE
+    - x86/kexec: add -fno-PIE
+    - kbuild: Steal gcc's pie from the very beginning
+    - ext4: sanity check the block and cluster size at mount time
+    - [armhf] dts: imx53-qsb: Fix regulator constraints
+    - crypto: caam - do not register AES-XTS mode on LP units
+    - [powerpc*] Fix setting of AIL in hypervisor mode
+    - [x86] drm/amdgpu: Attach exclusive fence to prime exported bo's.
+    - [x86] drm/i915: Refresh that status of MST capable connectors in
+      ->detect()
+    - [x86] drm/i915: Assume non-DP++ port if dvo_port is HDMI and there's no
+      AUX ch specified in the VBT
+    - virtio-net: drop legacy features in virtio 1 mode
+    - [armhf] clk: imx: fix integer overflow in AV PLL round rate
+    - [armhf] rtc: omap: Fix selecting external osc
+    - iwlwifi: pcie: fix SPLC structure parsing
+    - iwlwifi: pcie: mark command queue lock with separate lockdep class
+    - iwlwifi: mvm: fix netdetect starting/stopping for unified images
+    - iwlwifi: mvm: fix d3_test with unified D0/D3 images
+    - iwlwifi: mvm: wake the wait queue when the RX sync counter is zero
+    - mfd: core: Fix device reference leak in mfd_clone_cell
+    - sunrpc: svc_age_temp_xprts_now should not call setsockopt non-tcp
+      transports
+    - uwb: fix device reference leaks
+    - PM / sleep: fix device reference leak in test_suspend
+    - PM / sleep: don't suspend parent when async child suspend_{noirq,
+      late} fails
+    - perf hists: Fix column length on --hierarchy
+    - IB/mlx4: Check gid_index return value
+    - IB/mlx4: Fix create CQ error flow
+    - IB/mlx5: Validate requested RQT size
+    - IB/mlx5: Use cache line size to select CQE stride
+    - IB/mlx5: Fix memory leak in query device
+    - IB/mlx5: Fix fatal error dispatching
+    - IB/mlx5: Fix NULL pointer dereference on debug print
+    - IB/core: Avoid unsigned int overflow in sg_alloc_table
+    - IB/hfi1: Remove incorrect IS_ERR check
+    - IB/uverbs: Fix leak of XRC target QPs
+    - IB/cm: Mark stale CM id's whenever the mad agent was unregistered
+    - netfilter: nft_dynset: fix element timeout for HZ != 1000
+    - [arm64, armhf] gpio: pca953x: Move memcpy into mutex lock for set
+      multiple
+    - [arm64, armhf] gpio: pca953x: Fix corruption of other gpios in
+      set_multiple.
+
+  [ Salvatore Bonaccorso ]
+  * Bump ABI to 2 and remove ABI reference for 4.8.0-1
+  * xfs: Propagate dentry down to inode_change_ok()
+  * ceph: Propagate dentry down to inode_change_ok()
+  * fuse: Propagate dentry down to inode_change_ok()
+  * fs: Give dentry to inode_change_ok() instead of inode
+  * fs: Avoid premature clearing of capabilities (CVE-2015-1350)
+    (Closes: #770492)
+  * mpi: Fix NULL ptr dereference in mpi_powm() (CVE-2016-8650)
+  * vfio/pci: Fix integer overflows, bitmask check (CVE-2016-9083
+    CVE-2016-9084)
+  * mnt: Add a per mount namespace limit on the number of mounts
+    (CVE-2016-6213)
+
+  [ Ben Hutchings ]
+  * [arm64] Enable more drivers for X-Gene (Really closes: #840061):
+    - DMA: Enable XGENE_DMA as module
+    - EDAC: Enable EDAC and EDAC_MM_EDAC, EDAC_XGENE as modules
+  * [x86] video: Disable X86_SYSFB, FB_SIMPLE (Closes: #822575)
+
+ -- Salvatore Bonaccorso <carnil@debian.org>  Fri, 02 Dec 2016 06:35:22 +0100
+
+linux (4.8.7-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.6
+    - [armhf,arm64] drm/vc4: Fix races when the CS reads from render targets.
+    - [x86] drm/i915/backlight: setup and cache pwm alternate increment value
+    - [x86] drm/i915/backlight: setup backlight pwm alternate increment on
+      backlight enable
+    - [x86] drm/amdgpu: fix IB alignment for UVD
+    - [x86] drm/amdgpu/dce10: disable hpd on local panels
+    - [x86] drm/amdgpu/dce8: disable hpd on local panels
+    - [x86] drm/amdgpu/dce11: disable hpd on local panels
+    - [x86] drm/amdgpu/dce11: add missing drm_mode_config_cleanup call
+    - [x86] drm/amdgpu: initialize the context reset_counter in amdgpu_ctx_init
+    - [x86] drm/amdgpu: change vblank_time's calculation method to reduce
+      computational error.
+    - drm/radeon: narrow asic_init for virtualization
+    - drm/radeon/si/dpm: fix phase shedding setup
+    - drm/radeon: change vblank_time's calculation method to reduce
+      computational error.
+    - [x86] drm/vmwgfx: Limit the user-space command buffer size
+    - [x86] drm/amd/powerplay: fix mclk not switching back after multi-head
+      was disabled
+    - [x86] drm/i915/skl: Fix FIFO underrun (Closes: #844113)
+      + Update plane watermarks atomically during plane updates
+      + Move CRTC updating in atomic_commit into it's own hook
+      + Update DDB values atomically with wms/plane attrs
+      + Don't try to update plane watermarks if they haven't changed
+    - [x86] drm/i915/gen9: only add the planes actually affected by ddb changes
+    - [x86] drm/i915/gen9: fix the WaWmMemoryReadLatency implementation
+    - [x86] drm/i915/gen9: minimum scanlines for Y tile is not always 4
+    - [x86] drm/i915/gen9: fix plane_blocks_per_line on watermarks calculations
+    - [x86] drm/i915/gen9: fix the watermark res_blocks value
+    - [x86] drm/i915: SAGV is not SKL-only, so rename a few things
+    - [x86] drm/i915: introduce intel_has_sagv()
+    - [x86] drm/i915/kbl: KBL also needs to run the SAGV code
+    - [x86] Revert "drm/i915: Check live status before reading edid"
+    - [x86] drm/i915: Account for TSEG size when determining 865G stolen base
+    - [x86] drm/i915/skl: Ensure pipes with changed wms get added to the state
+    - [x86] drm/i915: Allow PCH DPLL sharing regardless of DPLL_SDVO_HIGH_SPEED
+    - [x86] drm/i915: Move long hpd handling into the hotplug work
+    - [x86] drm/i915: Allow DP to work w/o EDID
+    - [x86] drm/i915: Just clear the mmiodebug before a register access
+    - [x86] drm/i915: Unalias obj->phys_handle and obj->userptr
+    - rt2x00usb: Fix error return code
+    - uio: fix dmem_region_start computation
+    - i40e: remove a stray unlock
+    - i40e: fix broken i40e_config_rss_aq function
+    - mwifiex: correct aid value during tdls setup
+    - mwifiex: fix failed to reconnect after interface disabled/enabled
+    - ath10k: Add WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT wmi service
+    - ath10k: fix sending frame in management path in push txq logic
+    - ath10k: fix reporting channel survey data
+    - ath10k: fix throughput regression in multi client mode
+    - [armel/marvell,armhf] crypto: marvell - Don't overwrite default
+      creq->state during initialization
+    - crypto: gcm - Fix IV buffer size in crypto_gcm_setkey
+    - [armel/marvell,armhf] crypto: marvell - Update transformation context for
+      each dequeued req
+    - [x86] crypto: ccp - Fix return value check in ccp_dmaengine_register()
+    - [armhf] hwrng: omap - Only fail if pm_runtime_get_sync returns < 0
+    - ASoC: topology: Fix error return code in soc_tplg_dapm_widget_create()
+    - ASoC: dapm: Fix possible uninitialized variable in
+      snd_soc_dapm_get_volsw()
+    - ASoC: dapm: Fix value setting for _ENUM_DOUBLE MUX's second channel
+    - ASoC: dapm: Fix kcontrol creation for output driver widget
+    - staging: r8188eu: Fix scheduling while atomic splat
+    - IB/qib: Remove qpt_mask global
+    - IB/mlx5: Fix steering resource leak
+    - mm/hugetlb: check for reserved hugepages during memory offline
+    - mm/hugetlb: improve locking in dissolve_free_huge_pages()
+    - [x86] drm/vmwgfx: Avoid validating views on view destruction
+    - [s390x] cio: fix accidental interrupt enabling during resume
+    - [s390x] con3270: fix use of uninitialised data
+    - [s390x] con3270: fix insufficient space padding
+    - [armhf,arm64] clk: bcm2835: Skip PLLC clocks when deciding on a new
+      clock parent
+    - [arm64] clk: gcc-msm8996: Fix pcie 2 pipe register offset
+    - [arm64] clk: qcom: select GDSC for msm8996 gcc and mmcc
+    - clk: Return errors from clk providers in __of_clk_get_from_provider()
+    - clk: core: Force setting the phase delay when no change
+    - clk: divider: Fix clk_divider_round_rate() to use clk_readl()
+    - perf hists browser: Fix event group display
+    - perf ui/tui: Reset output width for hierarchy
+    - perf ui/stdio: Always reset output width for hierarchy
+    - perf symbols: Check symbol_conf.allow_aliases for kallsyms loading too
+    - perf symbols: Fixup symbol sizes before picking best ones
+    - iwlwifi: check for valid ethernet address provided by OEM
+    - iwlwifi: mvm: fix pending frames tracking on tx resp
+    - iwlwifi: mvm: call a different txq_enable function
+    - iwlwifi: mvm: free reserved queue on STA removal
+    - iwlwifi: mvm: support BAR in reorder buffer
+    - iwlwifi: mvm: disable P2P queue on mac context release
+    - iwlwifi: mvm: bail out if CTDP start operation fails
+    - [armhf,arm64] pinctrl: qcom: fix masking of pinmux functions
+    - mpt3sas: Don't spam logs if logging level is 0
+    - [powerpc*] Always restore FPU/VEC/VSX if hardware transactional memory
+      in use
+    - [powerpc*] Add check_if_tm_restore_required() to giveup_all()
+    - [powerpc*] nvram: Fix an incorrect partition merge
+    - [powerpc*] Fix usage of _PAGE_RO in hugepage
+    - [armhf] dts: omap3: overo: add missing unit name for lcd35 display
+    - PCI: generic: Fix pci_remap_iospace() failure path
+    - [armhf] PCI: tegra: Fix pci_remap_iospace() failure path
+    - libnvdimm: clear the internal poison_list when clearing badblocks
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.7
+    - [armhf] i2c: rk3x: Give the tuning value 0 during
+      rk3x_i2c_v0_calc_timings
+    - i2c: core: fix NULL pointer dereference under race condition
+    - drm/dp/mst: Clear port->pdt when tearing down the i2c adapter
+    - gpio / ACPI: fix returned error from acpi_dev_gpio_irq_get()
+    - gpio: GPIO_GET_CHIPINFO_IOCTL: Fix line offset validation
+    - gpio: GPIO_GET_CHIPINFO_IOCTL: Fix information leak
+    - gpio: GPIO_GET_LINEHANDLE_IOCTL: Validate line offset
+    - gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix information leak
+    - gpio: GPIO_GET_LINEEVENT_IOCTL: Validate line offset
+    - gpio: GPIO_GET_LINEHANDLE_IOCTL: Reject invalid line flags
+    - gpio: GPIO_GET_LINEEVENT_IOCTL: Reject invalid line and event flags
+    - gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix another information leak
+    - gpio: GPIO_GET_LINE{HANDLE,EVENT}_IOCTL: Fix file descriptor leak
+    - libxfs: clean up _calc_dquots_per_chunk
+    - mm/list_lru.c: avoid error-path NULL pointer deref
+    - mm/slab: fix kmemcg cache creation delayed issue
+    - mm: memcontrol: do not recurse in direct reclaim
+    - [x86] thermal/powerclamp: correct cpu support check
+    - KEYS: Fix short sprintf buffer in /proc/keys show function
+    - ALSA: usb-audio: Add quirk for Syntek STK1160
+    - ALSA: seq: Fix time account regression
+    - ALSA: hda - allow 40 bit DMA mask for NVidia devices
+    - ALSA: hda - Adding a new group of pin cfg into ALC295 pin quirk table
+    - ALSA: hda - Fix surround output pins for ASRock B150M mobo
+    - ALSA: hda - Fix headset mic detection problem for two Dell laptops
+    - [powerpc*] cxl: Fix leaking pid refs in some error paths
+    - btrfs: fix races on root_log_ctx lists
+    - [powerpc] Convert cmp to cmpd in idle enter sequence
+    - [powerpc] mm/radix: Use tlbiel only if we ever ran on the current cpu
+    - [powerpc] Re-fix race condition between going idle and entering guest
+    - [powerpc] Fix race condition in setting lock bit in idle/wakeup code
+    - [amd64] x86/microcode/AMD: Fix more fallout from
+      CONFIG_RANDOMIZE_MEMORY=y
+    - timers: Prevent base clock rewind when forwarding clock
+    - timers: Prevent base clock corruption when forwarding
+    - timers: Plug locking race vs. timer migration
+    - timers: Lock base for same bucket optimization
+    - mei: txe: don't clean an unprocessed interrupt cause.
+    - USB: serial: fix potential NULL-dereference at probe
+    - USB: serial: cp210x: fix tiocmget error handling
+    - USB: serial: ftdi_sio: add support for Infineon TriBoard TC2X7
+    - xhci: use default USB_RESUME_TIMEOUT when resuming ports.
+    - usb: increase ohci watchdog delay to 275 msec (Closes: #842863)
+    - [powerpc] GenWQE: Fix bad page access during abort of resource
+      allocation
+    - [x86] smpboot: Init apic mapping before usage
+    - vt: clear selection before resizing
+    - [x86] hv: do not lose pending heartbeat vmbus packets
+    - xhci: add restart quirk for Intel Wildcatpoint PCH
+    - xhci: workaround for hosts missing CAS bit
+    - tty: limit terminal size to 4M chars
+    - [arm64] dts: marvell: fix clocksource for CP110 master SPI0
+    - dm: free io_barrier after blk_cleanup_queue call
+    - [x86] KVM: fix wbinvd_dirty_mask use-after-free
+    - [s390] KVM: Fix STHYI buffer alignment for diag224
+    - [armhf]  mvebu: Select corediv clk for all mvebu v7 SoC
+    - nfsd: Fix general protection fault in release_lock_stateid()
+    - [mips*] KASLR: Fix handling of NULL FDT
+    - ovl: fix get_acl() on tmpfs
+    - ovl: update S_ISGID when setting posix ACLs
+    - ovl: fsync after copy-up
+    - virtio_ring: Make interrupt suppression spec compliant
+    - virtio_pci: Limit DMA mask to 44 bits for legacy virtio devices
+    - virtio: console: Unlock vqs while freeing buffers
+    - dm mirror: fix read error on recovery after default leg failure
+    - dm table: fix missing dm_put_target_type() in dm_table_add_target()
+    - dm rq: clear kworker_task if kthread_run() returned an error
+    - dm raid: fix compat_features validation (Closes: #843572)
+    - dm raid: fix activation of existing raid4/10 devices
+    - firewire: net: guard against rx buffer overflows (CVE-2016-8633)
+    - firewire: net: fix fragmented datagram_size off-by-one
+    - mac80211: discard multicast and 4-addr A-MSDUs
+    - ath10k: cache calibration data when the core is stopped
+    - scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded
+    - scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware
+    - [arm64, armhf] mmc: dw_mmc-pltfm: fix the potential NULL pointer
+      dereference
+    - RAID1: ignore discard error
+    - RAID10: ignore discard error
+    - md: be careful not lot leak internal curr_resync value into metadata.
+    - Revert "drm/radeon: fix DP link training issue with second 4K monitor"
+    - [armhf] drm/imx: ipuv3-plane: Switch EBA buffer only when we don't need
+      modeset
+    - [armhf] drm/imx: ipuv3-plane: Access old u/vbo properly in
+      ->atomic_check for YU12/YV12
+    - drm/radeon/si_dpm: Limit clocks on HD86xx part
+    - drm/radeon/si_dpm: workaround for SI kickers
+    - drm/radeon: drop register readback in cayman_cp_int_cntl_setup
+    - drm/nouveau/acpi: fix check for power resources support
+    - drm/fb-helper: Don't call dirty callback for untouched clips
+    - drm/fb-helper: Fix connector ref leak on error
+    - drm/fb-helper: Keep references for the current set of used connectors
+    - drm/i915/gen9: fix DDB partitioning for multi-screen cases
+    - drm/i915/gen9: fix watermarks when using the pipe scaler
+    - drm/dp/mst: Check peer device type before attempting EDID read
+    - drm: Release reference from blob lookup after replacing property
+    - drm/i915: Respect alternate_aux_channel for all DDI ports
+    - drm/i915: Clean up DDI DDC/AUX CH sanitation
+    - drm/i915/fbc: fix CFB size calculation for gen8+
+    - drm: i915: Wait for fences on new fb, not old
+    - i2c: mark device nodes only in case of successful instantiation
+    - netfilter: xt_NFLOG: fix unexpected truncated packet
+    - [arm64, armhf] pwm: Unexport children before chip removal
+    - [arm64, armhf] usb: dwc3: Fix size used in dma_free_coherent()
+    - [arm64, armhf] usb: chipidea: host: fix NULL ptr dereference during
+      shutdown
+    - [armhf] usb: musb: Fix hardirq-safe hardirq-unsafe lock order error
+    - tty: vt, fix bogus division in csi_J
+    - [x86] kvm: Check memopp before dereference (CVE-2016-8630)
+    - btrfs: qgroup: Prevent qgroup->reserved from going subzero
+    - [x86] cpufreq: intel_pstate: Set P-state upfront in performance mode
+    - HID: usbhid: add ATEN CS962 to list of quirky devices
+
+  [ Ben Hutchings ]
+  * debian/control: Fix build-dependency on openssl to work with new
+    versions that have M-A: allowed (Closes: #839145)
+  * [rt] Update to 4.8.6-rt5:
+    - [i386] entry: Fix preempt_lazy_count check in resume_kernel()
+    - sched: Use mmdrop_delayed() in sched_cpu_dying()
+    - Revert "mm/zsmalloc: Use get/put_cpu_light in
+      zs_map_object()/zs_unmap_object()"
+    - mm/zsmalloc: copy with get_cpu_var() and locking
+    - NFSv4: replace seqcount_t with a seqlock_t
+    - ftrace: Fix trace header alignment
+    - connector/cn_proc: Protect send_msg() with a local lock on RT
+    - drivers/zram: Don't disable preemption in zcomp_stream_get/put()
+  * HID: Enable HID_ALPS, HID_ASUS (Closes: #843085), HID_CMEDIA as modules
+  * cpupower: Fix checks for CPU existence (Closes: #843071)
+  * perf: Disable use of libcrypto (Closes: #843199)
+  * IB: Enable INFINIBAND_RDMAVT as module, re-enabling INFINIBAND_HFI1
+    and INFINIBAND_QIB (Closes: #843792)
+  * libcpupower-dev: Depend on libcpupower1 (Closes:  #840852)
+  * [arm64] Enable more drivers for X-Gene (Closes: #840061):
+    - ipmi: Enable IPMI_HANDLER, IPMI_DEVICE_INTERFACE, IPMI_SSIF as modules
+    - i2c: Enable I2C_XGENE_SLIMPRO as module
+    - mailbox: Enable XGENE_SLIMPRO_MBOX as module
+  * debian/control: Build-Depend on a recent debhelper instead of dh-systemd
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 13 Nov 2016 04:38:09 +0000
+
+linux (4.8.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.5
+    - [x86] boot/smp: Don't try to poke disabled/non-existent APIC
+      (Closes: #841850)
+    - [x86] Input: i8042 - skip selftest on ASUS laptops
+    - [x86] Input: elantech - add Fujitsu Lifebook E556 to force crc_enabled
+      (Closes: #835160)
+
+  [ Ben Hutchings ]
+  * cpufreq: Re-enable CPU_FREQ_STAT, which can no longer be modular
+  * [armhf] dts: imx53: add support for USB armory board (Closes: #840137)
+  * kconfig: Renumber SYMBOL_NEW, fixing regression of allnoconfig
+    (Closes: #841357)
+  * netfilter: xt_NFLOG: fix unexpected truncated packet (Closes: #841261)
+  * Set ABI to 1
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 28 Oct 2016 20:34:09 +0100
+
+linux (4.8.4-1~exp1) experimental; urgency=medium
+
+  * New upstream release: https://kernelnewbies.org/Linux_4.8
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.1
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.2
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.3
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.8.4
+
+  [ Ben Hutchings ]
+  * [amd64] Enable LEGACY_VSYSCALL_NONE instead of LEGACY_VSYSCALL_EMULATE.
+    This breaks (e)glibc 2.13 and earlier, and can be reverted using the kernel
+    parameter: vsyscall=emulate
+  * [arm*] Enable STRICT_DEVMEM
+  * [arm*,powerpc*,s390x,x86] Enable IO_STRICT_DEVMEM.  This breaks dosemu and
+    some old graphics drivers, and can be reverted using the kernel parameter:
+    iomem=relaxed
+  * [mips*] Enable RANDOMIZE_BASE and RELOCATABLE.
+  * Enable SLAB_FREELIST_RANDOM
+  * [arm*,powerpc*,s390x,sparc64,x86] Enable HARDENED_USERCOPY
+  * security,perf: Replace GRKERNSEC_PERF_HARDEN patch with the version
+    submitted upstream
+  * [amd64] Enable RANDOMIZE_MEMORY
+  * [powerpc*/*64*] Enable OPAL_PRD, MTD, MTD_POWERNV_FLASH as modules
+    (Closes: #838604, #838605)
+  * security,printk: Enable SECURITY_DMESG_RESTRICT, preventing non-root users
+    reading the kernel log by default (sysctl: kernel.dmesg_restrict)
+  * bug script: Optionally use sudo to read a restricted kernel log, and fall
+    back to writing a placeholder
+  * [rt] Update to 4.8.2-rt2 and re-enable
+  * aufs: Update support patchest to aufs4.8-20161010 (no functional change)
+
+  [ Aurelien Jarno ]
+  * [arm64] Enable SERIAL_8250_EXTENDED, SERIAL_8250_SHARE_IRQ and
+    SERIAL_8250_BCM2835AUX, needed for Raspberry Pi 3.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 23 Oct 2016 17:21:13 +0100
+
+linux (4.8~rc8-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Héctor Orón ]
+  * [arm64] Enable ACPI, ARM64_VA_BITS_48 (Closes: #834505)
+
+  [ Ben Hutchings ]
+  * Fix some new reproducibility issues:
+    - linux-source: Exclude Python bytecode generated when running Sphinx
+    - Set -fdebug-prefix-map=... in compiler options for kernel and userland
+    - linux-headers: Stop including unused arch/*/kernel/asm-offsets.s files
+  * linux-doc: Exclude Sphinx support code and Makefiles
+  * [arm64] mm: Limit TASK_SIZE_64 for compatibility
+  * [armhf] udeb: Replace dwmac-socfpga with dwmac-altr-socfpga in
+    nic-modules (Closes: #837110, thanks to Vagrant Cascadian)
+  * [armhf] Enable drivers for ASUS Chromebook C201 (veyron-speedy):
+    MFD_RK808, POWER_AVS, POWER_RESET_GPIO_RESTART, RTC_DRV_RK808,
+    ROCKCHIP_PM_DOMAINS as built-in; DRM_PANEL_SIMPLE, ROCKCHIP_ANALOGIX_DP,
+    ROCKCHIP_DW_MIPI_DSI, I2C_CROS_EC_TUNNEL, KEYBOARD_CROS_EC, OUSE_ELAN_I2C,
+    MFD_CROS_EC, MFD_CROS_EC_SPI, MFD_RK808, PHY_ROCKCHIP_EMMC, PHY_ROCKCHIP_DP,
+    BATTERY_SBS, CHARGER_GPIO, REGULATOR_RK808, BACKLIGHT_PWM as modules
+    (Closes: #836251, thanks to Vagrant Cascadian)
+  * [armhf] dsa: Enable drivers for Lamobo R1 (aka BPi-R1): B53,
+    B53_MDIO_DRIVER as modules (Closes: #836231, thanks to Vagrant Cascadian)
+  * [armhf] media: Enable VIDEO_V4L2_SUBDEV_API and VIDEO_OMAP3 as module
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 26 Sep 2016 04:27:06 +0100
+
+linux (4.8~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Martin Michlmayr ]
+  * [arm64] Enable more Tegra options: TEGRA_ACONNECT.
+  * [arm64] Enable more QCOM options: MSM_GCC_8996, MSM_MMCC_8996, QCOM_HIDMA,
+    QCOM_HIDMA_MGMT, PCIE_QCOM, PINCTRL_MSM8996, QCOM_Q6V5_PIL.
+  * [arm64] Enable support for BCM2837 (Raspberry Pi 3):
+    - Enable ARCH_BCM2835, DMA_BCM2835, BCM2835_MBOX, RASPBERRYPI_FIRMWARE,
+      RASPBERRYPI_POWER
+    - Enable DRM_VC4, I2C_BCM2835, PWM_BCM2835, SPI_BCM2835, SPI_BCM2835AUX,
+      BCM2835_WDT, SND_BCM2835_SOC_I2S, MMC_SDHCI_IPROC, HW_RANDOM_BCM2835
+      as modules
+  * [arm64] Enable USB_DWC2 and USB_DWC3.
+  * [arm64] Enable more HISI options: MFD_HI655X_PMIC, REGULATOR_HI655X,
+    STUB_CLK_HI6220, HI6220_MBOX, COMMON_RESET_HI6220, PHY_HI6220_USB,
+    HW_RANDOM_HISI, DRM_HISI_KIRIN, INPUT_HISI_POWERKEY, PCI_HISI,
+    SPI_HISI_SFC, SCSI_HISI_SAS (Closes: #821027).
+  * [arm64] Enable TI WLAN (WLAN_VENDOR_TI): WL1251, WL12XX, WL18XX
+  * [arm64] Enable Hisilicon Ethernet devices: HIX5HD2_GMAC, HISI_FEMAC,
+    HIP04_ETH, HNS_MDIO, HNS, HNS_DSAF, HNS_ENET, MDIO_HISI_FEMAC
+
+  [ Ben Hutchings ]
+  * Update config for 4.8:
+    - Enable HID_LED as module instead of USB_LED
+    - Enable BH1780 as module instead of SENSORS_BH1780
+    - [alpha] Enable RTC_CLASS and RTC_DRV_ALPHA instead of GEN_RTC
+    - [armhf] Rename omapdrm display config symbols
+    - [armhf] Enable IIO_ST_ACCEL_3AXIS as module instead of LIS3L02DQ
+    - [hppa] Enable RTC_CLASS and RTC_DRV_GENERIC instead of GEN_RTC
+  * liblockdep: Stop trying to build packages, as it failed to build again
+  * linux-doc: Build and install HTML pages from reStructuredText sources
+    - Add python-sphinx and python-sphinx-rtd-theme to Build-Depends-Indep
+    - Install files from both HTML output directories into the package
+    - Exclude RST sources from the package
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 07 Sep 2016 21:52:47 +0100
+
+linux (4.7.8-1) unstable; urgency=high
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.7
+    - cpuset: handle race between CPU hotplug and cpuset_hotplug_work
+    - cgroup: fix invalid controller enable rejections with cgroup namespace
+    - scripts/recordmcount.c: account for .softirqentry.text
+    - mm,ksm: fix endless looping in allocating memory when ksm enable
+    - can: dev: fix deadlock reported after bus-off
+    - [x86] init: Fix cr4_init_shadow() on CR4-less machines
+    - drm/udl: fix line iterator in damage handling
+    - drm/nouveau/fifo/nv04: avoid ramht race against cookie insertion
+    - drm/radeon/si/dpm: add workaround for for Jet parts
+    - [armel,armhf] 8616/1: dt: Respect property size when parsing CPUs
+    - [armel,armhf] 8617/1: dma: fix dma_max_pfn()
+    - mwifiex: illegal assignment
+    - i40e: avoid null pointer dereference
+    - pinctrl: Flag strict is a field in struct pinmux_ops
+    - i2c: mux: demux-pinctrl: run properly with multiple instances
+    - rcuperf: Don't treat gp_exp mis-setting as a WARN
+    - [armhf,arm64] drivers/perf: arm_pmu: Fix leak in error path
+    - perf/core: Use this_cpu_ptr() when stopping AUX events
+    - [armhf,arm64] mmc: tegra: Only advertise UHS modes if IO regulator is
+      present
+    - nvmem: Declare nvmem_cell_read() consistently
+    - hwmon: (adt7411) set bit 3 in CFG1 register
+    - sched/cputime: Fix prev steal time accouting during CPU hotplug
+    - iwlwifi: mvm: checksum IPv6 fragmented packet
+    - iwlwifi: mvm: fix txq aggregation bug
+    - iwlwifi: mvm: write the correct internal TXF index
+    - iwlwifi: mvm: unmap the paging memory before freeing it
+    - iwlwifi: pcie: fix access to scratch buffer
+    - iwlwifi: mvm: free RX reorder buffer on restart
+    - iwlwifi: mvm: avoid harmless -Wmaybe-uninialized warning
+    - iwlwifi: mvm: don't use ret when not initialised
+    - [armhf] usb: gadget: fsl_qe_udc: signedness bug in qe_get_frame()
+    - mac80211: check skb_linearize() return value
+    - i40iw: Protect req_resource_num update
+    - i40iw: Add missing check for interface already open
+    - i40iw: Change mem_resources pointer to a u8
+    - i40iw: Fix double free of allocated_buffer
+    - i40iw: Do not set self-referencing pointer to NULL after kfree
+    - i40iw: Avoid writing to freed memory
+    - i40iw: Add missing NULL check for MPA private data
+    - i40iw: Send last streaming mode message for loopback connections
+    - i40iw: Update hw_iwarp_state
+    - i40iw: Receive notification events correctly
+    - batman-adv: Add missing refcnt for last_candidate
+    - batman-adv: fix elp packet data reservation
+    - [armhf,arm64] irqchip/gicv3: Silence noisy DEBUG_PER_CPU_MAPS warning
+    - [armhf] 8618/1: decompressor: reset ttbcr fields to use TTBR0 on ARMv7
+    - [arm64] debug: avoid resetting stepping state machine when TIF_SINGLESTEP
+    - [mips*] uprobes: remove incorrect set_orig_insn
+    - [mips*] fix uretprobe implementation
+    - [mips*/*-malta] Fix IOCU disable switch read for MIPS64
+    - [mips*] uprobes: fix use of uninitialised variable
+    - printk: fix parsing of "brl=" option
+    - Bluetooth: split sk_filter in l2cap_sock_recv_cb
+    - tpm: fix byte-order for the value read by tpm2_get_tpm_pt
+    - regulator: pwm: Fix regulator ramp delay for continuous mode
+    - [arm64] regulator: qcom_spmi: Add support for S4 supply on pm8941
+    - [arm64] regulator: qcom_spmi: Add support for get_mode/set_mode on
+      switches
+    - [arm64] regulator: qcom_spmi: Update mvs1/mvs2 switches on pm8941
+    - [arm64] regulator: qcom_smd: Fix voltage ranges for pm8x41
+    - [arm64] regulator: qcom_smd: Fix voltage ranges for pma8084 ftsmps and
+      pldo
+    - [armhf] dts: imx6sx-sabreauto: Fix misspelled property
+    - [armhf] sun5i: Fix typo in trip point temperature
+    - pcmcia: ds: fix suspend/resume
+    - [armhf] hwrng: omap - Fix assumption that runtime_get_sync will always
+      succeed
+    - blk-mq: actually hook up defer list when running requests
+    - pstore: drop file opened reference count
+    - fm10k: fix incorrect index calculation in fm10k_write_reta
+    - iwlmvm: mvm: set correct state in smart-fifo configuration
+    - [armhf,arm64] em28xx-i2c: rt_mutex_trylock() returns zero on failure
+    - gspca: avoid unused variable warnings
+    - ath9k: Fix programming of minCCA power threshold
+    - qla2xxx: Fix BBCR offset
+    - fnic: pci_dma_mapping_error() doesn't return an error code
+    - tracing: Have HIST_TRIGGERS select TRACING
+    - NFS/pnfs: Do not clobber existing pgio_done_cb in nfs4_proc_read_setup
+    - svc: Avoid garbage replies when pc_func() returns rpc_drop_reply
+    - NFS: Don't drop CB requests with invalid principals
+    - pNFS/files: Fix layoutcommit after a commit to DS
+    - pNFS/flexfiles: Fix layoutcommit after a commit to DS
+    - watchdog: core: Clear WDOG_HW_RUNNING before calling the stop function
+    - xprtrdma: Remove FMRs from the unmap list after unmapping
+    - [x86] ASoC: Intel: Skylake: Fix error return code in skl_probe()
+    - brcmfmac: Fix glob_skb leak in brcmf_sdiod_recv_chain
+    - brcmsmac: Free packet if dma_mapping_error() fails in dma_rxfill
+    - brcmsmac: Initialize power in brcms_c_stf_ss_algo_channel_get()
+    - [powerpc*] prom: Fix sub-processor option passed to ibm,
+      client-architecture-support
+    - sysctl: handle error writing UINT_MAX to u32 fields
+    - IB/core: Fix possible memory leak in cma_resolve_iboe_route()
+    - kernel/fork: fix CLONE_CHILD_CLEARTID regression in nscd
+    - SUNRPC: Silence WARN_ON when NFSv4.1 over RDMA is in use
+    - pNFS/flexfiles: Fix layoutstat periodic reporting
+    - lib/test_hash.c: fix warning in preprocessor symbol evaluation
+    - [x86] KVM: nVMX: postpone VMCS changes on MSR_IA32_APICBASE write
+    - ceph: do not modify fi->frag in need_reset_readdir()
+    - IB/ipoib: Fix memory corruption in ipoib cm mode connect flow
+    - ath10k: fix get rx_status from htt context
+    - IB/core: Fix use after free in send_leave function
+    - regmap: rbtree: Avoid overlapping nodes
+    - scsi: ses: use scsi_is_sas_rphy instead of is_sas_attached
+    - IB/ipoib: Don't allow MC joins during light MC flush
+    - IB/mlx4: Fix incorrect MC join state bit-masking on SR-IOV
+    - IB/mlx4: Fix code indentation in QP1 MAD flow
+    - IB/mlx4: Use correct subnet-prefix in QP1 mads under SR-IOV
+    - IB/mlx5: Enable MAD_IFC commands for IB ports only
+    - IB/mlx5: Set source mac address in FTE
+    - batman-adv: remove unused callback from batadv_algo_ops struct
+    - aio: mark AIO pseudo-fs noexec
+    - dm log writes: fix bug with too large bios
+    - usb: misc: legousbtower: Fix NULL pointer deference
+    - [x86] usb: usbip: vudc: fix left shift overflow
+    - Revert "usbtmc: convert to devm_kzalloc"
+    - [x86] ALSA: hda - Adding one more ALC255 pin definition for headset
+      problem
+    - [x86] ALSA: hda - Fix headset mic detection problem for several Dell
+      laptops
+    - [x86] ALSA: hda - Add the top speaker pin config for HP Spectre x360
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.8
+    - [powerpc*] pseries: use pci_host_bridge.release_fn() to kfree(phb)
+    - [powerpc*] cxl: use pcibios_free_controller_deferred() when removing
+      vPHBs
+    - timekeeping: Fix __ktime_get_fast_ns() regression
+    - ALSA: ali5451: Fix out-of-bound position reporting
+    - ALSA: usb-audio: Extend DragonFly dB scale quirk to cover other variants
+    - mfd: rtsx_usb: Avoid setting ucr->current_sg.status
+    - [x86] xen: Update topology map for PV VCPUs
+    - [powerpc*] KVM: PPC: Book3s PR: Allow access to unprivileged MMCR2
+      register
+    - [arm64] KVM: arm64: Require in-kernel irqchip for PMU support
+    - [arm64] KVM: arm/arm64: vgic: Don't flush/sync without a working vgic
+    - [powerpc*] KVM: PPC: BookE: Fix a sanity check
+    - [arm64] fix dump_backtrace/unwind_frame with NULL tsk
+    - [x86] boot: Fix kdump, cleanup aborted E820_PRAM max_pfn manipulation
+    - [x86] irq: Prevent force migration of irqs which are not in the vector
+      domain
+    - [x86] apic: Get rid of apic_version[] array
+    - [x86] arch/x86: Handle non enumerated CPU after physical hotplug
+    - [x86] dumpstack: Fix x86_32 kernel_stack_pointer() previous stack access
+    - [armhf] dts: mvebu: armada-390: add missing compatibility string and
+      bracket
+    - [arm64] dts: MSM8064 remove flags from SPMI/MPP IRQs
+    - [arm64] cpuidle: Fix error return code
+    - [x86] tpm: fix a race condition in tpm2_unseal_trusted()
+    - [x86] tpm_crb: fix crb_req_canceled behavior
+
+  [ Ben Hutchings ]
+  * net: add recursion limit to GRO (CVE-2016-7039)
+  * posix_acl: Clear SGID bit when setting file permissions (CVE-2016-7097)
+  * scsi: arcmsr: Buffer overflow in arcmsr_iop_message_xfer() (CVE-2016-7425)
+
+  [ Salvatore Bonaccorso ]
+  * KEYS: Fix short sprintf buffer in /proc/keys show function (CVE-2016-7042)
+  * mm: remove gup_flags FOLL_WRITE games from __get_user_pages()
+    (CVE-2016-5195)
+
+ -- Salvatore Bonaccorso <carnil@debian.org>  Wed, 19 Oct 2016 17:56:57 +0200
+
+linux (4.7.6-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.6
+    - [arm64] crypto: arm64/aes-ctr - fix NULL dereference in tail processing
+    - [armhf] crypto: arm/aes-ctr - fix NULL dereference in tail processing
+    - crypto: skcipher - Fix blkcipher walk OOM crash
+    - crypto: echainiv - Replace chaining with multiplication
+    - ocfs2/dlm: fix race between convert and migration
+    - ocfs2: fix start offset to ocfs2_zero_range_for_truncate()
+    - Revert "ocfs2: bump up o2cb network protocol version"
+    - autofs: use dentry flags to block walks during expire
+    - xfs: prevent dropping ioend completions during buftarg wait
+    - mm: fix the page_swap_info() BUG_ON check
+    - fsnotify: add a way to stop queueing events on group shutdown
+    - fanotify: fix list corruption in fanotify_get_response()
+    - mm: memcontrol: make per-cpu charge cache IRQ-safe for socket accounting
+    - cgroup: duplicate cgroup reference when cloning sockets
+    - fix fault_in_multipages_...() on architectures with no-op access_ok()
+    - KEYS: Fix skcipher IV clobbering
+    - [arm64] Call numa_store_cpu_info() earlier.
+    - configfs: Return -EFBIG from configfs_write_bin_file.
+    - [armhf] mtd: nand: mxc: fix obiwan error in
+      mxc_nand_v[12]_ooblayout_free() functions
+    - mtd: spi-nor: fix wrong "fully unlocked" test
+    - reset: Return -ENOTSUPP when not configured
+    - rtc: ds1307: Fix relying on reset value for weekday
+    - [arm64] power: reset: hisi-reboot: Unmap region obtained by of_iomap
+    - mac80211: reject TSPEC TIDs (TSIDs) for aggregation
+    - fix memory leaks in tracing_buffers_splice_read()
+    - tracing: Move mutex to protect against resetting of seq data
+    - mm: delete unnecessary and unsafe init_tlb_ubc()
+    - iwlwifi: mvm: update TX queue before making a copy of the skb
+    - nl80211: validate number of probe response CSA counters
+    - btrfs: ensure that file descriptor used with subvol ioctls is a dir
+    - [x86] efi: Only map RAM into EFI page tables if in mixed-mode
+    - [x86] i2c-eg20t: fix race between i2c init and interrupt enable
+    - [armhf] i2c: mux: pca954x: retry updating the mux selection on failure
+    - [arm64] i2c: qup: skip qup_i2c_suspend if the device is already runtime
+      suspended
+    - [mips*] SMP: Fix possibility of deadlock when bringing CPUs online
+    - [mips*] Avoid a BUG warning during prctl(PR_SET_FP_MODE, ...)
+    - [mips*] Add a missing ".set pop" in an early commit
+    - [x86] mm/pat: Prevent hang during boot when mapping pages
+    - libceph: add an ONSTACK initializer for oids
+    - ceph: fix symbol versioning for ceph_monc_do_statfs
+    - ceph: Correctly return NXIO errors from ceph_llseek
+    - libceph: fix return value check in alloc_msg_with_page_vector()
+    - PM / hibernate: Restore processor state before using per-CPU variables
+    - PM / hibernate: Fix rtree_next_node() to avoid walking off list ends
+    - ixgbe: Force VLNCTRL.VFE to be set in all VMDq paths
+    - ixgbe: Re-enable ability to toggle VLAN filtering
+    - igb: fix adjusting PTP timestamps for Tx/Rx latency
+    - [armhf,arm64] soc/tegra: pmc: Don't probe PMC if early initialisation
+      fails
+    - qxl: check for kmap failures
+    - hostfs: Freeing an ERR_PTR in hostfs_fill_sb_common()
+    - iw_cxgb4: stop MPA_REPLY timer when disconnecting
+
+  [ Ben Hutchings ]
+  * debian/bin/gencontrol.py: Fix cross-build-dependencies if invoked under
+    dpkg-buildpackage
+  * linux-image: Exclude vmlinux from stripping by dh_strip (fixes FTBFS
+    on hppa)
+  * udeb: Fold core-modules into kernel-image
+  * udeb: Move nls_utf8 from fat-modules to kernel-image, as many other
+    filesystems need it but vfat no longer does
+  * of_mdio: Enable fixed PHY support if driver is a module
+  * of_mdio: select fixed phy support unconditionally
+  * [armhf] Enable driver for SolidRun ClearFog: USB_XHCI_MVEBU as module
+  * mm: memcontrol: use special workqueue for creating per-memcg caches
+
+  [ Cyril Brulebois ]
+  * Add nls_ascii to the fat-modules udeb, following the change of
+    iocharset default in 4.7.2-1. This fixes a regression with EFI-related
+    mounts within the Debian Installer. (Closes: #839552)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 07 Oct 2016 02:11:50 +0100
+
+linux (4.7.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.5
+    - [armhf] clocksource/drivers/sun4i: Clear interrupts after stopping timer
+      in probe function
+    - fscrypto: require write access to mount to set encryption policy
+    - [arm64] drm/msm: protect against faults from copy_from_user() in submit
+      ioctl
+    - bpf: fix method of PTR_TO_PACKET reg id generation
+    - ipv4: panic in leaf_walk_rcu due to stale node pointer
+    - vti: flush x-netns xfrm cache when vti interface is removed
+    - bpf: fix write helpers with regards to non-linear parts
+    - net/irda: handle iriap_register_lsap() allocation failure
+    - net/sctp: always initialise sctp_ht_iter::start_fail
+    - net: ipv6: Do not keep IPv6 addresses when IPv6 is disabled
+    - tipc: fix NULL pointer dereference in shutdown()
+    - net/mlx5: Fix pci error recovery flow
+    - net/mlx5: Added missing check of msg length in verifying its signature
+    - net/mlx5e: Use correct flow dissector key on flower offloading
+    - net sched: fix encoding to use real length
+    - udp: fix poll() issue with zero sized packets
+    - tcp: properly scale window in tcp_v[46]_reqsk_send_ack()
+    - sctp: fix overrun in sctp_diag_dump_one()
+    - tun: fix transmit timestamp support
+    - [armhf] net: dsa: bcm_sf2: Fix race condition while unmasking interrupts
+    - Revert "phy: IRQ cannot be shared"
+    - net: smc91x: fix SMC accesses
+    - bridge: re-introduce 'fix parsing of MLDv2 reports'
+    - bonding: Fix bonding crash
+    - Revert "af_unix: Fix splice-bind deadlock"
+    - af_unix: split 'u->readlock' into two: 'iolock' and 'bindlock'
+    - ipv6: release dst in ping_v6_sendmsg
+    - [arm64] bnxt_en: Fix TX push operation on ARM64.
+    - ipv6: addrconf: fix dev refcont leak when DAD failed
+    - tcp: fastopen: avoid negative sk_forward_alloc
+    - net/mlx5e: Fix parsing of vlan packets when updating lro header
+    - tcp: cwnd does not increase in TCP YeAH
+    - [powerpc*] tm: do not use r13 for tabort_syscall
+    - [powerpc*] powernv : Drop reference added by kset_find_obj()
+    - [powerpc*] sysdev: cpm: fix gpio save_regs functions
+    - [powerpc*] mm: Don't alias user region to other regions below PAGE_OFFSET
+    - [powerpc*] powernv: Fix corrupted PE allocation bitmap on releasing PE
+    - kernfs: don't depend on d_find_any_alias() when generating notifications
+    - pNFS/flexfiles: Fix an Oopsable condition when connection to the DS fails
+    - pNFS: The client must not do I/O to the DS if it's lease has expired
+    - NFSv4.1: Fix Oopsable condition in server callback races
+    - NFSv4.x: Fix a refcount leak in nfs_callback_up_net
+    - nfsd: Close race between nfsd4_release_lockowner and nfsd4_lock
+    - pNFS: Ensure LAYOUTGET and LAYOUTRETURN are properly serialised
+    - NFSv4.1: Fix the CREATE_SESSION slot number accounting
+    - kexec: fix double-free when failing to relocate the purgatory
+    - mm, mempolicy: task->mempolicy must be NULL before dropping final
+      reference
+    - ahci: disable correct irq for dummy ports
+    - audit: fix exe_file access in audit_exe_compare
+    - dm flakey: fix reads to be issued if drop_writes configured
+    - IB/hfi1,IB/qib: Fix qp_stats sleep with rcu read lock held
+    - IB/uverbs: Fix race between uverbs_close and remove_one
+    - IB/hfi1: Reset QSFP on every run through channel tuning
+    - [amd64] mm: fix cache mode of dax pmd mappings
+    - [x86] paravirt: Do not trace _paravirt_ident_*() functions
+    - [x86] AMD: Apply erratum 665 on machines without a BIOS fix
+    - [s390x] KVM: don't use current->thread.fpu.* when accessing registers
+    - [armhf,arm64] kvm-arm: Unmap shadow pagetables properly
+    - [x86] kvm: correctly reset dest_map->vector when restoring LAPIC state
+    - iio: sw-trigger: Fix config group initialization
+    - [armhf] iio: adc: rockchip_saradc: reset saradc controller before
+      programming it
+    - [armhf] iio: adc: ti_am335x_adc: Protect FIFO1 from concurrent access
+    - [armhf] iio: adc: ti_am335x_adc: Increase timeout value waiting for ADC
+      sample
+    - iio:ti-ads1015: fix a wrong pointer definition.
+    - [x86] iio: accel: bmc150: reset chip at init time
+    - iio: fix pressure data output unit in hid-sensor-attributes
+    - iio:core: fix IIO_VAL_FRACTIONAL sign handling
+    - iio: ensure ret is initialized to zero before entering do loop
+    - serial: 8250_mid: fix divide error bug if baud rate is 0
+    - serial: 8250: added acces i/o products quad and octal serial cards
+    - [armhf,arm64] usb: chipidea: udc: fix NULL ptr dereference in
+      isr_setup_status_phase
+    - USB: change bInterval default to 10 ms
+    - devpts: return NULL pts 'priv' entry for non-devpts nodes
+    - cpuset: make sure new tasks conform to the current config of the cpuset
+    - [armhf] dts: rockchip: add reset node for the exist saradc SoCs
+    - [armhf] imx6: add missing BM_CLPCR_BYP_MMDC_CH0_LPM_HS setting for imx6ul
+    - [armhf] imx6: add missing BM_CLPCR_BYPASS_PMIC_READY setting for imx6sx
+    - [armel] kirkwood: ib62x0: fix size of u-boot environment partition
+    - [armhf] OMAP3: hwmod data: Add sysc information for DSI
+    - [armel] dts: kirkwood: Fix PCIe label on OpenRD
+    - [armhf] dts: imx6qdl: Fix SPDIF regression
+    - [armhf] dts: armada-388-clearfog: number LAN ports properly
+    - dm log writes: fix check of kthread_run() return value
+    - dm crypt: fix free of bad values after tfm allocation failure
+    - dm log writes: move IO accounting earlier to fix error path
+    - dm crypt: fix error with too large bios
+    - [armhf] pinctrl: sunxi: fix uart1 CTS/RTS pins at PG on A23/A33
+    - [armhf] memory: omap-gpmc: allow probe of child nodes to fail
+    - [arm64] spinlocks: implement smp_mb__before_spinlock() as smp_mb()
+    - crypto: cryptd - initialize child shash_desc on import
+    - Btrfs: remove root_log_ctx from ctx list before btrfs_sync_log returns
+    - fuse: direct-io: don't dirty ITER_BVEC pages
+    - xhci: fix null pointer dereference in stop command timeout function
+    - brcmfmac: avoid potential stack overflow in brcmf_cfg80211_start_ap()
+    - md-cluster: make md-cluster also can work when compiled into kernel
+    - ath9k: fix using sta->drv_priv before initializing it
+    - ath9k: bring back direction setting in ath9k_{start_stop}
+    - [x86] perf/intel: Fix PEBSv3 record drain
+    - [x86] perf/intel/cqm: Check cqm/mbm enabled state in event init
+    - [x86] perf/amd: Make HW_CACHE_REFERENCES and HW_CACHE_MISSES measure L2
+    - [x86] perf/intel/pt: Fix an off-by-one in address filter configuration
+    - [x86] perf/intel/pt: Fix kernel address filter's offset validation
+    - [x86] perf/intel/pt: Do validate the size of a kernel address filter
+    - Revert "wext: Fix 32 bit iwpriv compatibility issue with 64 bit Kernel"
+    - sched/core: Fix a race between try_to_wake_up() and a woken up task
+    - ipv6: Don't unset flowi6_proto in ipxip6_tnl_xmit()
+    - efi: Make for_each_efi_memory_desc_in_map() cope with running on Xen
+    - efi/libstub: Allocate headspace in efi_get_memory_map()
+    - efi/libstub: Introduce ExitBootServices helper
+    - efi/libstub: Use efi_exit_boot_services() in FDT
+    - [x86] efi: Use efi_exit_boot_services()
+    - [powerpc,powerpcspe] Fix csum_partial_copy_generic()
+    - [powerpc,powerpcspe] Fix again csum_partial_copy_generic()
+    - [x86] drm/i915: Ignore OpRegion panel type except on select machines
+    - [x86] drm: Only use compat ioctl for addfb2 on X86/IA64
+    - svcauth_gss: Revert 64c59a3726f2 ("Remove unnecessary allocation")
+    - genirq: Provide irq_gc_{lock_irqsave,unlock_irqrestore}() helpers
+    - fix iov_iter_fault_in_readable()
+    - [x86] fix minor infoleak in get_user_ex()
+    - [s390x] get_user() should zero on failure
+    - asm-generic: make get_user() clear the destination on errors
+    - asm-generic: make copy_from_user() zero the destination properly
+    - [alpha,hppa,mips*,powerpc,powerpcspe,sh4] make copy_from_user() zero the
+      destination properly
+
+  [ Ben Hutchings ]
+  * [hppa,mips*,powerpc*] linux-image: Strip debug symbols from vmlinux
+    (really closes: #837588)
+  * [hppa] tracing: Re-enable FTRACE
+  * [powerpc,powerpcspe,ppc64] linux-image: Suppress automatic dbgsym packages
+  * uaccess,uio: Fix ABI changes in 4.7.5
+  * ext4: Fix checksum validation for inodes with small i_extra_isize
+    (Closes: #838544, regression in 4.7.4)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 26 Sep 2016 01:48:21 +0100
+
+linux (4.7.4-2) unstable; urgency=medium
+
+  * [arm64] Revert "arm64: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO"
+    (fixes FTBFS)
+  * [armhf] media: Disable VIDEO_V4L2_SUBDEV_API and VIDEO_OMAP3 to avoid ABI
+    change (fixes FTBFS)
+  * [hppa] Ignore ABI changes caused by disabling CONFIG_FTRACE (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 19 Sep 2016 22:09:42 +0100
+
+linux (4.7.4-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.3
+    - [x86] mm: Disable preemption during CR3 read+write
+    - [x86] uprobes: Fix RIP-relative handling of EVEX-encoded instructions
+    - [x86] platform/uv: Skip UV runtime services mapping in the
+      efi_runtime_disabled case
+    - SUNRPC: Handle EADDRNOTAVAIL on connection failures
+    - SUNRPC: allow for upcalls for same uid but different gss service
+    - [x86] ALSA: hda - Manage power well properly for resume
+    - efi/capsule: Allocate whole capsule into virtual memory
+    - virtio: fix memory leak in virtqueue_add()
+    - vfio/pci: Fix NULL pointer oops in error interrupt setup handling
+    - tracing: Fix tick_stop tracepoint symbols for user export
+    - [x86] perf intel-pt: Fix occasional decoding errors when tracing
+      system-wide
+    - [amd64] libnvdimm, nd_blk: mask off reserved status bits
+    - ACPI: CPPC: Return error if _CPC is invalid on a CPU
+    - ACPI / CPPC: Prevent cpc_desc_ptr points to the invalid data
+    - genirq/msi: Remove unused MSI_FLAG_IDENTITY_MAP
+    - genirq/msi: Make sure PCI MSIs are activated early
+    - usb: ehci: change order of register cleanup during shutdown
+    - usb: devio, do not warn when allocation fails
+    - usb: misc: usbtest: add fix for driver hang
+    - usb: misc: usbtest: usbtest_do_ioctl may return positive integer
+    - usb: dwc3: gadget: increment request->actual once
+    - usb: dwc3: gadget: fix for short pkts during chained xfers
+    - usb: dwc3: gadget: always cleanup all TRBs
+    - usb: hub: Fix unbalanced reference count/memory leak/deadlocks
+    - USB: hub: fix up early-exit pathway in hub_activate
+    - USB: hub: change the locking in hub_activate
+    - USB: validate wMaxPacketValue entries in endpoint descriptors
+    - usb/gadget: fix gadgetfs aio support.
+    - xhci: always handle "Command Ring Stopped" events
+    - usb: xhci: Fix panic if disconnect
+    - xhci: don't dereference a xhci member after removing xhci
+    - USB: serial: fix memleak in driver-registration error path
+    - uprobes: Fix the memcg accounting
+    - perf symbols: Fix annotation of objects with debuginfo files
+    - perf/core: Fix event_function_local()
+    - perf tools mem: Fix -t store option for record command
+    - iommu/dma: Don't put uninitialised IOVA domains
+    - [armhf] iommu/io-pgtable-arm-v7s: Fix attributes when splitting blocks
+    - [armhf,arm64] iommu/arm-smmu: Fix CMDQ error handling
+    - [armhf,arm64] iommu/arm-smmu: Disable stalling faults for all endpoints
+    - [armhf,arm64] iommu/arm-smmu: Don't BUG() if we find aborting STEs with
+      disable_bypass
+    - [x86] pinctrl/amd: Remove the default de-bounce time
+    - i2c: mux: demux-pinctrl: properly roll back when adding adapter fails
+    - [s390x] dasd: fix hanging device after clear subchannel
+    - mac80211: fix purging multicast PS buffer queue
+    - [arm64] kernel: avoid literal load of virtual address with MMU off
+    - [arm64] avoid TLB conflict with CONFIG_RANDOMIZE_BASE
+    - [arm64] dts: rockchip: add reset saradc node for rk3368 SoCs
+    - [arm64] kernel: Fix unmasked debug exceptions when restoring mdscr_el1
+    - of: fix reference counting in of_graph_get_endpoint_by_regs
+    - iio: fix sched WARNING "do not call blocking ops when !TASK_RUNNING"
+    - [x86] drm/amdgpu: Change GART offset to 64-bit
+    - [x86] drm/amdgpu: fix amdgpu_move_blit on 32bit systems
+    - [x86] drm/amdgpu: fix lru size grouping v2
+    - [x86] drm/amdgpu: avoid a possible array overflow
+    - [x86] drm/amdgpu: skip TV/CV in display parsing
+    - [x86] drm/amd/amdgpu: sdma resume fail during S4 on CI
+    - [x86] drm/amd/amdgpu: compute ring test fail during S4 on CI
+    - [x86] drm/amdgpu: record error code when ring test failed
+    - [x86] drm/i915: Fix iboost setting for DDI with 4 lanes on SKL
+    - [x86] drm/i915: Program iboost settings for HDMI/DVI on SKL
+    - [x86] drm/i915: Fix iboost setting for SKL Y/U DP DDI buffer translation
+      entry 2
+    - [x86] drm/i915: Acquire audio powerwell for HD-Audio registers
+    - [x86] drm/i915: fix aliasing_ppgtt leak
+    - [x86] drm/i915/vlv: Make intel_crt_reset() per-encoder
+    - [x86] drm/i915/vlv: Reset the ADPA in vlv_display_power_well_init()
+    - [x86] drm/i915/vlv: Disable HPD in valleyview_crt_detect_hotplug()
+    - [x86] drm/i915: Enable polling when we don't have hpd
+    - [arm64] mfd: cros_ec: Add cros_ec_cmd_xfer_status() helper
+    - [arm64] i2c: cros-ec-tunnel: Fix usage of cros_ec_cmd_xfer()
+    - cdc-acm: fix wrong pipe type on rx interrupt xfers
+    - mpt3sas: Fix resume on WarpDrive flash cards
+    - megaraid_sas: Fix probing cards without io port
+    - dm round robin: do not use this_cpu_ptr() without having preemption
+      disabled
+    - gpio: Fix OF build problem on UM
+    - fs/seq_file: fix out-of-bounds read
+    - soft_dirty: fix soft_dirty during THP split
+    - [amd64] dax: fix device-dax region base
+    - [amd64] mm: silently skip readahead for DAX inodes
+    - btrfs: waiting on qgroup rescan should not always be interruptible
+    - btrfs: properly track when rescan worker is running
+    - btrfs: don't create or leak aliased root while cleaning up orphans
+    - Revert "floppy: fix open(O_ACCMODE) for ioctl-only open"
+    - Input: synaptics-rmi4 - fix register descriptor subpacket map construction
+    - [x86] crypto: qat - fix aes-xts key sizes
+    - USB: avoid left shift by -1
+    - usb: chipidea: udc: don't touch DP when controller is in host mode
+    - USB: fix typo in wMaxPacketSize validation
+    - usb: gadget: udc: core: don't starve DMA resources
+    - USB: serial: mos7720: fix non-atomic allocation in write path
+    - USB: serial: mos7840: fix non-atomic allocation in write path
+    - [x86] staging/lustre/llite: Close atomic_open race with several openers
+    - [x86] staging: comedi: daqboard2000: bug fix board type matching code
+    - [x86] staging: comedi: comedi_test: fix timer race conditions
+    - [x86] staging: comedi: ni_mio_common: fix AO inttrig backwards
+      compatibility
+    - [x86] staging: comedi: ni_mio_common: fix wrong insn_write handler
+    - ACPI / drivers: fix typo in ACPI_DECLARE_PROBE_ENTRY macro
+    - ACPI / drivers: replace acpi_probe_lock spinlock with mutex
+    - ALSA: line6: Remove double line6_pcm_release() after failed acquire.
+    - ALSA: line6: Give up on the lock while URBs are released.
+    - ALSA: line6: Fix POD sysfs attributes segfault
+    - hwmon: (it87) Add missing sysfs attribute group terminator
+    - hwmon: (iio_hwmon) fix memory leak in name attribute
+    - sysfs: correctly handle read offset on PREALLOC attrs
+    - SUNRPC: Fix infinite looping in rpc_clnt_iterate_for_each_xprt
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.4
+    - Revert "floppy: refactor open() flags handling"
+    - apparmor: fix refcount race when finding a child profile
+    - fs: Check for invalid i_uid in may_follow_link()
+    - cred: Reject inodes with invalid ids in set_create_file_as()
+    - ext4: validate that metadata blocks do not overlap superblock
+    - ext4: fix xattr shifting when expanding inodes
+    - ext4: fix xattr shifting when expanding inodes part 2
+    - ext4: properly align shifted xattrs when expanding inodes
+    - ext4: avoid deadlock when expanding inode size
+    - ext4: avoid modifying checksum fields directly during checksum
+      verification
+    - block: Fix race triggered by blk_set_queue_dying()
+    - block: make sure a big bio is split into at most 256 bvecs
+    - cgroup: reduce read locked section of cgroup_threadgroup_rwsem during fork
+    - cdc-acm: added sanity checking for probe()
+    - drm/radeon: fix radeon_move_blit on 32bit systems
+    - drm/radeon: only apply the SS fractional workaround to RS[78]80
+    - drm/atomic: Don't potentially reset color_mgmt_changed on successive
+      property updates.
+    - drm: Reject page_flip for !DRIVER_MODESET
+    - [arm64] drm/msm: fix use of copy_from_user() while holding spinlock
+    - [armhf] drm/vc4: Use drm_free_large() on handles to match its allocation.
+    - [armhf] drm/vc4: Fix overflow mem unreferencing when the binner runs dry.
+    - [armhf] drm/vc4: Fix oops when userspace hands in a bad BO.
+    - xfs: fix superblock inprogress check
+    - timekeeping: Cap array access in timekeeping_debug
+    - xenbus: don't look up transaction IDs for ordinary writes
+    - ovl: proper cleanup of workdir
+    - ovl: don't copy up opaqueness
+    - ovl: remove posix_acl_default from workdir
+    - ovl: listxattr: use strnlen()
+    - ovl: fix workdir creation
+    - mei: me: disable driver on SPT SPS firmware
+    - ubifs: Fix xattr generic handler usage
+    - ubifs: Fix assertion in layout_in_gaps()
+    - bdev: fix NULL pointer dereference
+    - bcache: RESERVE_PRIO is too small by one when prio_buckets() is a power
+      of two.
+    - [mips*/*-malta] irqchip/mips-gic: Implement activate op for device domain
+    - vhost/scsi: fix reuse of &vq->iov[out] in response
+    - [x86] apic: Do not init irq remapping if ioapic is disabled
+    - xprtrdma: Create common scatterlist fields in rpcrdma_mw
+    - crypto: caam - fix IV loading for authenc (giv)decryption
+    - fscrypto: add authorization check for setting encryption policy
+    - fscrypto: only allow setting encryption policy on directories
+    - ALSA: firewire-tascam: accessing to user space outside spinlock
+    - ALSA: fireworks: accessing to user space outside spinlock
+    - ALSA: rawmidi: Fix possible deadlock with virmidi registration
+    - ALSA: timer: fix NULL pointer dereference in read()/ioctl() race
+    - ALSA: timer: fix division by zero after SNDRV_TIMER_IOCTL_CONTINUE
+    - ALSA: timer: fix NULL pointer dereference on memory allocation failure
+    - ALSA: timer: Fix zero-division by continue of uninitialized instance
+    - scsi: fix upper bounds check of sense key in scsi_sense_key_string()
+    - cpufreq: dt: Add terminate entry for of_device_id tables
+
+  [ Ben Hutchings ]
+  * [arm64] Add cpu_to_fdt32() when setting Secure Boot flag in FDT
+  * [amd64] Enable SIGNED_PE_FILE_VERIFICATION, KEXEC_FILE,
+    KEXEC_VERIFY_SIG, KEXEC_BZIMAGE_VERIFY_SIG
+  * i8042: Revert ABI break in 4.7.3
+  * mm, oom: prevent premature OOM killer invocation for high order request
+    (regression in 4.7)
+  * [arm64] pinctrl: Enable PINCTRL_SINGLE as built-in, needed for HiKey SoCs
+  * [hppa] Disable FTRACE due to huge size cost (Closes: #837588)
+  * [powerpcspe] xmon: Don't use ld on 32-bit (Closes: #836741)
+  * liblockdep-dev: Add dependency on liblockdep<version> (Closes: #837710)
+  * xen-linux-system: Relax dependency on linux-image to allow for version
+    suffix added by linux-signed
+  * [armhf] Enable drivers for Novena: MFD_STMPE as built-in; DRM_PANEL_SIMPLE,
+    MMA8452, TOUCHSCREEN_STMPE, BATTERY_SBS, BACKLIGHT_PWM, SND_SOC_IMX_ES8328
+    as modules (Closes: #837627, thanks to Vagrant Cascadian)
+  * linux-image: postrm: Make failure of rmdir on purge non-fatal
+    (Closes: #836282)
+  * [armhf] Enable drivers and options for OpenPandora console: POWER_AVS_OMAP
+    as built-in; DISPLAY_CONNECTOR_ANALOG_TV, DISPLAY_PANEL_TPO_TD043MTEA1,
+    SENSORS_TWL4030_MADC, VIDEO_OMAP3, BATTERY_TWL4030_MADC, BACKLIGHT_PANDORA,
+    HDQ_MASTER_OMAP as modules; OMAP2_DSS_DSI (Closes: #835893, thanks to
+    Vagrant Cascadian)
+  * bug script: Stop describing TAINT_UNSIGNED_MODULE as expected
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 18 Sep 2016 14:56:01 +0100
+
+linux (4.7.2-1) unstable; urgency=medium
+
+  * New upstream release: https://kernelnewbies.org/Linux_4.7
+    - media: fix airspy usb probe error path (CVE-2016-5400)
+    - libata: LITE-ON CX1-JB256-HP needs lower max_sectors (Closes: #830971)
+    - tcp: make challenge acks less predictable (CVE-2016-5696)
+  * New stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.1
+    - vfs: ioctl: prevent double-fetch in dedupe ioctl (CVE-2016-6516)
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.2
+    - [powerpc*] KVM: Book3S HV: Save/restore TM state in H_CEDE (CVE-2016-5412)
+    - audit: fix a double fetch in audit_log_single_execve_arg() (CVE-2016-6136)
+
+  [ Ben Hutchings ]
+  * sched: Enable SCHEDSTATS (Closes: #796674)
+  * Re-enable various config options disabled by name and type changes in 4.7:
+    - nfc: NFC_PN533_USB replaced NFC_PN533
+    - [armhf] dsa: NET_DSA_MV88E6XXX replaced NET_DSA_MV88E6{123,131,171}
+    - [x86] ACPI: ACPI_TABLE_UPGRADE replaced ACPI_INITRD_TABLE_OVERRIDE
+    - rxrpc: Enable RXKAD as part of af_rxrpc module
+    - [x86] 8250: Enable SERIAL_8250_FINTEK as built-in
+  * cgroups: Enable memory controller by default
+  * [armfh] udeb: Add efi-modules
+  * linux-kbuild: Include headers_install.sh and unifdef (Closes: #832359)
+  * udeb: Include cdc_ncm in nic-usb-modules (Closes: #833918)
+  * usbip: Use the locally-installed <linux/usbip.h>
+  * Exclude redundant and unreproducible files from binary packages
+    (Closes: #830268)
+    - usbip: Put all autotools-generated files in the build directory
+    - linux-headers: Exclude all .cmd files
+  * [arm*] Enable SECCOMP (Closes: #833183)
+  * [hppa] Fix automatic selection of cr16 clocksource
+  * [hppa] Fix order of EREFUSED define in errno.h
+  * aufs: Update support patches to aufs4.7-20160822 (Closes: #834764)
+  * [powerpc*] ipmi: Enable IPMI_POWERNV as module (Closes: #833861)
+  * kbuild: Do not use hyphen in exported variable name (Closes: #833561)
+  * fat: Mitigate the lack of UTF-8 case folding by enabling
+    FAT_DEFAULT_UTF8 and setting FAT_DEFAULT_IOCHARSET to "ascii"
+    (Closes: #833238)
+  * [arm64] Add support for securelevel and Secure Boot (Closes: #831827,
+    thanks to Linn Crosetto):
+    - efi: Disable secure boot if shim is in insecure mode
+    - Add kernel config option to set securelevel when in Secure Boot mode
+    - Enable EFI_SECURE_BOOT_SECURELEVEL
+  * tcp: fix use after free in tcp_xmit_retransmit_queue() (CVE-2016-6828)
+  * aacraid: Check size values after double-fetch from user (CVE-2016-6480)
+  * liblockdep: Move dummy definition of prandom_u32() to fix missing
+    declaration
+  * debian/rules.real: Avoid error message when usbip's config.h doesn't exist
+
+  [ Martin Michlmayr ]
+  * [armhf] Enable MMC_SDHCI_IPROC and HW_RANDOM_BCM2835 for BCM2835.
+  * [arm64] Add USB support for NVIDIA Jetson TX1 Developer Kit:
+    - pinctrl: max77620: add pincontrol driver for MAX77620/MAX20024
+    - gpio: max77620: add gpio driver for MAX77620/MAX20024
+    - gpio: max77620: Configure interrupt trigger level
+    - gpio: max77620: use the new open drain callback
+    - gpio: max77620: get gpio value based on direction
+    - arm64: tegra: Add PMIC support on Jetson TX1
+    - arm64: tegra: p2597: Add SDMMC power supplies
+    - arm64: tegra: Add DSI panel on Jetson TX1
+    - arm64: tegra: Add Tegra210 XUSB pad controller
+    - arm64: tegra: Add Tegra210 XUSB controller
+    - arm64: tegra: Enable debug serial on Jetson TX1
+    - arm64: tegra: Enable XUSB controller on Jetson TX1
+    - arm64: tegra: Correct Tegra210 XUSB mailbox interrupt
+  * [arm64] Enable REGULATOR_FIXED_VOLTAGE.
+  * [arm64] Enable ARM64_ERRATUM_834220.
+  * [arm64] Build in SERIAL_TEGRA.
+  * [arm64] Enable REGULATOR_PWM, DRM_PANEL_SIMPLE, BACKLIGHT_GENERIC
+    and BACKLIGHT_LP855X for Jetson TX1.
+  * [arm64] Enable BATTERY_BQ27XXX, MFD_CROS_EC_I2C, I2C_CROS_EC_TUNNEL
+    for Google Pixel C.
+  * [arm64] Enable more Qualcomm options: PINCTRL_QCOM_SPMI_PMIC,
+    SPMI_MSM_PMIC_ARB, QCOM_SPMI_IADC, QCOM_SPMI_VADC, MFD_SPMI_PMIC,
+    REGULATOR_QCOM_SPMI, QCOM_SPMI_TEMP_ALARM, CHARGER_QCOM_SMBB,
+    USB_CHIPIDEA, USB_HSIC_USB3503, RTC_DRV_PM8XXX, EXTCON_USB_GPIO,
+    QCOM_COINCELL, and INPUT_PM8941_PWRKEY.
+
+  [ Uwe Kleine-König ]
+  * Fix perf to be able to find debug info based on build-id. (Closes:
+    #833096)
+
+  [ Nicolas LE CAM ]
+  * [amd64] Suggest grub-efi-amd64 instead of grub-efi dummy transitionnal
+    package (Closes: #835459)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 28 Aug 2016 15:56:10 +0100
+
+linux (4.7~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Aurelien Jarno ]
+  * [mipsel] Remove loongson-2e and loongson-2f flavours (Closes: #827790).
+  * [mipsel/4kc-malta, mipsel/5kc-malta] Build for R2 ISA.
+
+  [ Martin Michlmayr ]
+  * [armhf, arm64] Enable DRM_TEGRA_STAGING.
+
+  [ Ben Hutchings ]
+  * [x86] KASLR, power: Remove x86 hibernation restrictions
+  * fanotify: Enable FANOTIFY_ACCESS_PERMISSIONS (Closes: #690737)
+    - Warn and taint kernel if this feature is actually used
+  * Define Auto-Built-Package field when running dpkg-gencontrol, as dpkg-source
+    doesn't like to see it in debian/control
+  * debian/lib/python/debian_linux/debian.py: Handle packages with only short
+    descriptions
+  * Change names and descriptions of linux-image debug symbol packages to match
+    debhelper
+
+  [ Bastian Blank ]
+  * Mark debug symbols packages to move them into the debug archive.
+  * Build debug symbols for all images.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 14 Jul 2016 13:35:22 +0100
+
+linux (4.7~rc4-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [armel] Disable module signing for all flavours (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 21 Jun 2016 00:41:23 +0100
+
+linux (4.7~rc3-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * bug script: Put binary package name and version in the info file so
+    linux-signed can easily replace them
+  * Move merge_packages function from debian/bin/gencontrol.py to
+    gencontrol module
+  * udeb: Drop packages for modules that will later be signed
+  * linux-image: Add '-unsigned' suffix to packages with modules that will
+    later be signed
+    - Add Conflicts and Replaces relations to signed packages (Closes: #827618)
+  * [rt] Disable until it is updated for 4.7 or later
+  * cpupower: Bump soname version and rename library package accordingly
+  * debian/rules.d/Makefile: Override architecture detection when building
+    userland headers
+  * linux-cpupower: Define PACKAGE_BUGREPORT to refer to reportbug, not upstream
+  * debian/README.source: Document the supported build profiles
+  * debian/control: Fix build-dependencies for cross-building
+    - Add workaround for libdpkg-perl bugs #827628, #827633
+  * Add support for the nopython build profile, disabling the linux-perf package
+  * Fix build rules for userland tools to support cross-building
+
+  [ Martin Michlmayr ]
+  * [armhf, arm64] Enable PHY_TEGRA_XUSB and USB_XHCI_TEGRA.
+  * [arm64] Enable MAX77620 and PCA9539 which are required by Jetson TX1.
+  * [arm64] Enable TEGRA210_ADMA.
+  * [arm64] Enable THERMAL.
+  * [armhf] Enable TEGRA_SOCTHERM.
+  * [armhf] Enable SPI_TEGRA114.
+  * [arm64] Enable more QCOM options (QCOM_SMP2P, QCOM_SMSM, QCOM_WCNSS_CTRL,
+    PHY_QCOM_UFS, QCOM_QFPROM).
+
+  [ Aurelien Jarno ]
+  * [ppc64*] Enable SPAPR_TCE_IOMMU, VFIO and VFIO_PCI (Closes: #826367).
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 18 Jun 2016 23:50:39 +0100
+
+linux (4.6.4-1) unstable; urgency=medium
+
+  * Team upload.
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.6.4
+    - net_sched: fix pfifo_head_drop behavior vs backlog
+    - act_ipt: fix a bind refcnt leak
+    - net: Don't forget pr_fmt on net_dbg_ratelimited for CONFIG_DYNAMIC_DEBUG
+    - sit: correct IP protocol used in ipip6_err
+    - esp: Fix ESN generation under UDP encapsulation
+    - netem: fix a use after free
+    - ipmr/ip6mr: Initialize the last assert time of mfc entries.
+    - Bridge: Fix ipv6 mc snooping if bridge has no ipv6 address
+    - sock_diag: do not broadcast raw socket destruction
+    - bpf, perf: delay release of BPF prog after grace period
+    - neigh: Explicitly declare RCU-bh read side critical section in neigh_xmit()
+    - AX.25: Close socket connection on session completion
+    - [powerpc] crypto: vmx - Increase priority of aes-cbc cipher
+    - crypto: user - re-add size check for CRYPTO_MSG_GETALG
+    - USB: uas: Fix slave queue_depth not being set
+    - usb: quirks: Fix sorting
+    - usb: quirks: Add no-lpm quirk for Acer C120 LED Projector
+    - [armhf] usb: musb: only restore devctl when session was set in backup
+    - [armhf] usb: musb: Stop bulk endpoint while queue is rotated
+    - [armhf] usb: musb: Ensure rx reinit occurs for shared_fifo endpoints
+    - [armhf] usb: musb: host: correct cppi dma channel for isoch transfer
+    - xhci: Cleanup only when releasing primary hcd
+    - usb: xhci-plat: properly handle probe deferral for devm_clk_get()
+    - USB: xhci: Add broken streams quirk for Frescologic device id 1009
+    - xhci: Fix handling timeouted commands on hosts in weird states.
+    - USB: mos7720: delete parport
+    - usb: gadget: fix spinlock dead lock in gadgetfs
+    - [arm64, armhf] usb: host: ehci-tegra: Grab the correct UTMI pads reset
+    - usb: dwc3: exynos: Fix deferred probing storm.
+
+  [ Uwe Kleine-König ]
+  * Cherry pick patches for rtc-s35390a from next. (Closes: #794266)
+
+  [ Salvatore Bonaccorso ]
+  * apparmor: fix oops, validate buffer size in apparmor_setprocattr()
+    (CVE-2016-6187)
+
+  [ Ben Hutchings ]
+  * bridge: Fix ABI change in 4.6.4
+  * [rt] Update to 4.6.4-rt6 (no functional change)
+
+ -- Salvatore Bonaccorso <carnil@debian.org>  Mon, 18 Jul 2016 21:57:31 +0200
+
+linux (4.6.3-1) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.6.3
+    - scsi_lib: correctly retry failed zero length REQ_TYPE_FS commands
+    - scsi: Add QEMU CD-ROM to VPD Inquiry Blacklist
+    - netlink: Fix dump skb leak/double free
+    - tipc: fix nametable publication field in nl compat
+    - switchdev: pass pointer to fib_info instead of copy
+    - tuntap: correctly wake up process during uninit
+    - bpf: Use mount_nodev not mount_ns to mount the bpf filesystem
+    - udp: prevent skbs lingering in tunnel socket queues
+    - uapi glibc compat: fix compilation when !__USE_MISC in glibc
+    - bpf, inode: disallow userns mounts
+    - [armhf] net: mvneta: Fix lacking spinlock initialization
+    - net: hwbm: Fix unbalanced spinlock in error case
+    - sfc: on MC reset, clear PIO buffer linkage in TXQs
+    - team: don't call netdev_change_features under team->lock
+    - net: alx: use custom skb allocator
+    - net: stmmac: Fix incorrect memcpy source memory
+    - vxlan: Accept user specified MTU value when create new vxlan link
+    - net: nps_enet: Disable interrupts before napi reschedule
+    - bpf, trace: use READ_ONCE for retrieving file ptr
+    - tcp: record TLP and ER timer stats in v6 stats
+    - bridge: Don't insert unnecessary local fdb entry on changing mac address
+    - l2tp: fix configuration passed to setup_udp_tunnel_sock()
+    - ipv6: Skip XFRM lookup if dst_entry in socket cache is valid
+    - [armhf,arm64] KVM: vgic-v2: Clear all dirty LRs
+    - [armhf,arm64] KVM: vgic-v3: Clear all dirty LRs
+    - [x86] KVM: fix OOPS after invalid KVM_SET_DEBUGREGS
+    - KVM: irqfd: fix NULL pointer dereference in kvm_irq_map_gsi
+    - [arm*] drivers/perf: arm_pmu: Defer the setting of __oprofile_cpu_pmu
+    - [x86] ALSA: hda - Add PCI ID for Kabylake
+    - [x86] ALSA: hda - Fix headset mic detection problem for Dell machine
+    - ALSA: hda/realtek - ALC256 speaker noise issue
+    - ALSA: hda/realtek - Add support for new codecs ALC700/ALC701/ALC703
+    - [x86] ALSA: hda/realtek: Add T560 docking unit fixup
+    - [armhf] fix PTRACE_SETVFPREGS on SMP systems
+    - gpio: bail out silently on NULL descriptors
+    - gpiolib: Fix NULL pointer deference
+    - gpiolib: Fix unaligned used of reference counters
+    - [s390x] bpf: fix recache skb->data/hlen for skb_vlan_push/pop
+    - [s390x] bpf: reduce maximum program size to 64 KB
+    - [armhf,arm64] irqchip/gic-v3: Fix ICC_SGI1R_EL1.INTID decoding mask
+    - [x86] crypto: ccp - Fix AES XTS error for request sizes above 4096
+    - [arm64] Provide "model name" in /proc/cpuinfo for PER_LINUX32 tasks
+    - [arm64] mm: always take dirty state from new pte in ptep_set_access_flags
+    - [powerpc*] pseries/eeh: Handle RTAS delay requests in configure_bridge
+    - [powerpc*] Fix definition of SIAR and SDAR registers
+    - [powerpc*] Use privileged SPR number for MMCR2
+    - [powerpc*] pseries: Add POWER8NVL support to
+      ibm,client-architecture-support call
+    - [powerpc*] mm/hash: Fix the reference bit update when handling hash fault
+    - [hppa] Fix pagefault crash in unaligned __get_user() call
+    - memcg: add RCU locking around css_for_each_descendant_pre() in
+      memcg_offline_kmem()
+    - wext: Fix 32 bit iwpriv compatibility issue with 64 bit Kernel
+    - mm: thp: broken page count after commit aa88b68c3b1d
+    - [x86] entry/traps: Don't force in_interrupt() to return true in IST
+      handlers
+    - fix d_walk()/non-delayed __d_free() race
+    - [sparc64] Reduce TLB flushes during hugepte changes
+    - [sparc64] Take ctx_alloc_lock properly in hugetlb_setup().
+    - [sparc64] Harden signal return frame checks.
+    - [sparc64] Fix return from trap window fill crashes.
+    - drm/core: Do not preserve framebuffer on rmfb, v4.
+    - [x86] Revert "drm/i915: Exit cherryview_irq_handler() after one pass"
+    - gpio: make sure gpiod_to_irq() returns negative on NULL desc
+  * [powerpc*] tm: Always reclaim in start_thread() for exec() class syscalls
+    (CVE-2016-5828)
+
+  [ Salvatore Bonaccorso ]
+  * HID: hiddev: validate num_values for HIDIOCGUSAGES, HIDIOCSUSAGES commands
+    (CVE-2016-5829)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 04 Jul 2016 20:10:24 +0200
+
+linux (4.6.2-2) unstable; urgency=medium
+
+  * [mips*] Fix ABI changes in 4.6.2
+  * [rt] Update to 4.6.2-rt5:
+    - mm/memcontrol: mem_cgroup_migrate() - replace another local_irq_disable()
+      w. local_lock_irq()
+  * KEYS: potential uninitialized variable (CVE-2016-4470)
+  * percpu: fix synchronization between chunk->map_extend_work and chunk
+    destruction (CVE-2016-4794)
+  * percpu: fix synchronization between synchronous map extension and
+    chunk destruction (CVE-2016-4794)
+  * netfilter: x_tables: Fix parsing of IPT_SO_SET_REPLACE blobs
+    (CVE-2016-4997, CVE-2016-4998)
+    - don't move to non-existent next rule
+    - validate targets of jumps
+    - add and use xt_check_entry_offsets
+    - kill check_entry helper
+    - assert minimum target size
+    - add compat version of xt_check_entry_offsets
+    - check standard target size too
+    - check for bogus target offset
+    - validate all offsets and sizes in a rule
+    - don't reject valid target size on some
+    - arp_tables: simplify translate_compat_table args
+    - ip_tables: simplify translate_compat_table args
+    - ip6_tables: simplify translate_compat_table args
+    - xt_compat_match_from_user doesn't need a retval
+    - do compat validation via translate_table
+    - introduce and use xt_copy_counters_from_user
+  * Ignore ABI change in x_tables
+  * nfsd: check permissions when setting ACLs (CVE-2016-1237)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 25 Jun 2016 11:22:27 +0200
+
+linux (4.6.2-1) unstable; urgency=medium
+
+  * Team upload.
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.6.2
+    - f2fs: fix deadlock when flush inline data
+    - [mips*] math-emu: Fix jalr emulation when rd == $0
+    - [mips*] Avoid using unwind_stack() with usermode
+    - [mips*] Fix siginfo.h to use strict posix types
+    - [mips*] Fix uapi include in exported asm/siginfo.h
+    - [mips*] Fix watchpoint restoration
+    - [mips*] Flush highmem pages in __flush_dcache_page
+    - [mips*] Handle highmem pages in __update_cache
+    - [mips*] Sync icache & dcache in set_pte_at
+    - [mips*] Reserve nosave data for hibernation
+    - [mips*el/loongson-3] Reserve 32MB for RS780E integrated GPU
+    - [mips*] Use copy_s.fmt rather than copy_u.fmt
+    - [mips*] Prevent "restoration" of MSA context in non-MSA kernels
+    - [mips*] ptrace: Fix FP context restoration FCSR regression
+    - [mips*] ptrace: Prevent writes to read-only FCSR bits
+    - [mips*] lib: Mark intrinsics notrace
+    - [mips*] VDSO: Build with `-fno-strict-aliasing'
+    - affs: fix remount failure when there are no options changed
+    - ASoC: ak4642: Enable cache usage to fix crashes on resume
+    - Input: uinput - handle compat ioctl for UI_SET_PHYS
+    - Input: xpad - move pending clear to the correct location
+    - Input: xpad - prevent spurious input from wired Xbox 360 controllers
+    - [armhf] sun4i: dt: Enable dram gate 5 (tve0 clock) for simplefb TV output
+    - [armhf] sun7i: dt: Enable dram gate 5 (tve0 clock) for simplefb TV output
+    - [armhf] mvebu: fix GPIO config on the Linksys boards
+    - [armhf] dts: exynos: Add interrupt line to MAX8997 PMIC on
+      exynos4210-trats
+    - ath9k: Fix LED polarity for some Mini PCI AR9220 MB92 cards.
+    - ath10k: fix firmware assert in monitor mode
+    - ath10k: fix rx_channel during hw reconfigure
+    - ath10k: fix kernel panic, move arvifs list head init before htt init
+    - ath5k: Change led pin configuration for compaq c700 laptop
+    - [armhf] hwrng: exynos - Fix unbalanced PM runtime put on timeout
+      error path
+    - rtlwifi: Fix logic error in enter/exit power-save mode
+    - rtlwifi: pci: use dev_kfree_skb_irq instead of kfree_skb in
+      rtl_pci_reset_trx_ring
+    - Revert "lpfc: Delete unnecessary checks before the function call
+      mempool_destroy"
+    - aacraid: Start adapter after updating number of MSIX vectors
+    - aacraid: Relinquish CPU during timeout wait
+    - aacraid: Fix for aac_command_thread hang
+    - aacraid: Fix for KDUMP driver hang
+    - regulator: Try to resolve regulators supplies on registration
+    - hwmon: (ads7828) Enable internal reference
+    - [x86] mfd: intel_quark_i2c_gpio: Remove clock tree on error path
+    - [x86] mfd: intel-lpss: Save register context on suspend
+    - [x86] mfd: intel_soc_pmic_core: Terminate panel control GPIO lookup
+      table correctly
+    - PM / Runtime: Fix error path in pm_runtime_force_resume()
+    - cpuidle: Indicate when a device has been unregistered
+    - cpuidle: Fix cpuidle_state_is_coupled() argument in cpuidle_enter()
+    - [armhf] clk: bcm2835: Fix PLL poweron
+    - [armhf] clk: bcm2835: pll_off should only update CM_PLL_ANARST
+    - [armhf] clk: bcm2835: divider value has to be 1 or more
+    - [armhf] clk: bcm2835: correctly enable fractional clock support
+    - [armhf] pinctrl: exynos5440: Use off-stack memory for pinctrl_gpio_range
+    - PCI: Disable all BAR sizing for devices with non-compliant BARs
+    - media: v4l2-compat-ioctl32: fix missing reserved field copy in
+      put_v4l2_create32
+    - PKCS#7: fix missing break on OID_sha224 case
+    - mm: use phys_addr_t for reserve_bootmem_region() arguments
+    - mm/compaction.c: fix zoneindex in kcompactd()
+    - wait/ptrace: assume __WALL if the child is traced
+    - batman-adv: Fix double neigh_node_put in batadv_v_ogm_route_update
+    - [powerpc*] book3s64: Fix branching to OOL handlers in relocatable kernel
+    - [powerpc*] eeh: Don't report error in eeh_pe_reset_and_recover()
+    - [powerpc*] Revert "powerpc/eeh: Fix crash in eeh_add_device_early()
+      on Cell"
+    - [powerpc*] eeh: Restore initial state in eeh_pe_reset_and_recover()
+    - xen/events: Don't move disabled irqs
+    - xen: use same main loop for counting and remapping pages
+    - sunrpc: fix stripping of padded MIC tokens
+    - [x86] drm/gma500: Fix possible out of bounds read
+    - [x86] drm/vmwgfx: Kill some lockdep warnings
+    - [x86] drm/amdgpu: use drm_mode_vrefresh() rather than mode->vrefresh
+    - [x86] drm/amdgpu: Fix hdmi deep color support.
+    - [x86] drm/i915/fbdev: Fix num_connector references in
+      intel_fb_initial_config()
+    - drm/fb_helper: Fix references to dev->mode_config.num_connector
+    - [x86] drm/i915: Discard previous atomic state on resume if connectors
+      change
+    - drm/atomic: Verify connector->funcs != NULL when clearing states
+    - Bluetooth: 6lowpan: Fix memory corruption of ipv6 destination address
+    - [x86] drm/i915/psr: Try to program link training times correctly
+    - [x86] drm/i915: Respect DP++ adaptor TMDS clock limit
+    - [x86] drm/i915: Enable/disable TMDS output buffers in DP++ adaptor
+      as needed
+    - [x86] drm/i915: Don't leave old junk in ilk active watermarks on readout
+    - [x86] drm/i915: Fix watermarks for VLV/CHV
+    - [armhf] drm/imx: Match imx-ipuv3-crtc components using device node in
+      platform data
+    - [x86] drm/i915: Pass the correct crtc state to .update_plane()
+    - ext4: fix data exposure after a crash
+    - ext4: fix hang when processing corrupted orphaned inode list
+    - ext4: clean up error handling when orphan list is corrupted
+    - ext4: fix check of dqget() return value in ext4_ioctl_setproject()
+    - ext4: fix oops on corrupted filesystem
+    - ext4: address UBSAN warning in mb_find_order_for_block()
+    - nfs: avoid race that crashes nfs_init_commit
+    - PM / sleep: Handle failures in device_suspend_late() consistently
+    - mm: thp: avoid false positive VM_BUG_ON_PAGE in page_move_anon_rmap()
+    - xfs: disallow rw remount on fs with unknown ro-compat features
+    - xfs: Don't wrap growfs AGFL indexes
+    - xfs: remove xfs_fs_evict_inode()
+    - xfs: xfs_iflush_cluster fails to abort on error
+    - xfs: fix inode validity check in xfs_iflush_cluster
+    - xfs: skip stale inodes in xfs_iflush_cluster
+    - [armhf] drm: msm: remove unused variable
+    - IB/hfi1: Fix hard lockup due to not using save/restore spin lock
+    - regulator: Fix deadlock during regulator registration
+
+  [ Ben Hutchings ]
+  * [armel,armhf,sh4] linux-image: Do not suggest fdutils
+  * liblockdep: Reduce MAX_LOCK_DEPTH to avoid overflowing lock_chain::depth
+  * liblockdep: Fix 'unused value' warnings
+  * liblockdep: Fix 'set but not used' warnings
+  * liblockdep: Fix 'defined but not used' warning for init_utsname()
+
+  [ Salvatore Bonaccorso ]
+  * Stack overflow via ecryptfs and /proc/$pid/environ (CVE-2016-1583)
+    - proc: prevent stacking filesystems on top
+    - ecryptfs: forbid opening files without mmap handler
+    - sched: panic on corrupted stack end
+  * tipc: fix an infoleak in tipc_nl_compat_link_dump (CVE-2016-5243)
+  * rds: fix an infoleak in rds_inc_info_copy (CVE-2016-5244)
+
+ -- Salvatore Bonaccorso <carnil@debian.org>  Wed, 15 Jun 2016 21:32:54 +0200
+
+linux (4.6.1-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.6.1
+
+  [ Ben Hutchings ]
+  * [mips*r6*] Disable these architectures until dak recognises them as valid
+    in the control file
+  * linux-image: Rewrite maintainer scripts in shell, using the new
+    linux-update-symlinks and linux-check-removal commands
+    (Closes: #692333, #815850).  Drop support for minimal_swap, no_symlinks,
+    use_hard_links and *_hook parameters in  /etc/kernel-img.conf
+    (Closes: #730073).  Remove now-redundant debconf templates.
+  * linux-image: postrm: Update default symlinks before running hook scripts
+  * linux-image: Make a newly installed kernel the default if the package
+    was previously removed
+  * mtd: Disable slram and phram when securelevel is enabled
+  * debian/patches/features/all/rt/genpatch.py: Use Python 3
+  * debian/patches/features/all/rt/genpatch.py: Fix mapping of -rt version to
+    upstream version
+  * debian/patches/features/all/rt/genpatch.py: Use upstream tarball directly
+  * debian/patches/features/all/rt/genpatch.py: Use stable URLs in patch Origin
+    headers
+  * [rt] Update to 4.6.1-rt3:
+    - trace: correct off by one while recording the trace-event
+    - sched,preempt: Fix preempt_count manipulations
+    - kernel/rtmutex: only warn once on a try lock from bad
+    - locallock: add local_lock_on()
+    - kernel/printk: Don't try to print from IRQ/NMI region
+    - mm: perform lru_add_drain_all() remotely
+  * debian/control: Drop obsolete versioned Depends and Breaks
+  * linux-libc-dev: Drop obsolete Replaces/Conflicts with linux-kernel-headers
+  * debian/control: Update policy version to 3.9.8; no changes required
+  * Disable MODULE_SIG for architectures not supported by linux-signed
+  * Set ABI to 1
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 06 Jun 2016 18:13:57 +0100
+
+linux (4.6-1~exp2) experimental; urgency=medium
+
+  [ Ben Hutchings ]
+  * [tilegx] Build a linux-libc-dev package (Closes: #824524; thanks to
+    Helmut Grohne)
+  * [tilegx] linux-libc-dev: Install <arch/*> headers in arch-specific
+    directory (Closes: #823632; thanks to Helmut Grohne)
+  * [rt] Update to 4.6-rc7-rt1 and re-enable
+    - Override SYSTEM_TRUSTED_KEYS to work from the source_rt directory
+  * Fold debian/config/README into debian/README.source
+  * debian/README.source: Rewrite and expand explanation of kernel config file
+    construction
+  * aufs: Update support patches to aufs4.6-20160523
+    - mmap: Fix use-after-free in remap_file_pages(2)
+  * [mips*] Change NFS and various storage and network drivers from built-in
+    to modules
+  * 8139too: Use same configuration on all architectures: enable
+    8139TOO_TUNE_TWISTER, 8139TOO_8129 and disable 8139TOO_PIO
+  * [mipsn32{,r6}{,el}] Build linux-libc-dev and tools packages
+  * [mips{,64}r6{,el}] Add kernel flavours for the Malta platform; build
+    linux-libc-dev and tools packages (Closes: #825024; thanks to YunQiang Su)
+  * [mips*/*-malta] udeb: Add ata-modules package
+  * linux-image: Stop setting $STEM in environment for maintainer script hooks
+  * linux-image: Add workaround for bug #817083 in debconf
+  * linux-image: prerm: Allow removal of running kernel if we can't ask debconf
+    questions (Closes: #825423)
+  * linux-image: prerm: Ignore version of running kernel inside a container or
+    chroot
+  * [s390] udeb: Drop all packages, since s390 no longer has its own kernel
+  * udeb: Drop packages for modules that will later be signed; these packages
+    will be taken over by src:linux-signed
+
+  [ Aurelien Jarno ]
+  * [mips64{,el}] Set CPU to MIPS64 R2.
+  * [mips] Set CPU to MIPS32/64 R2.
+
+  [ Martin Michlmayr ]
+  * [armhf] Enable more NVIDIA Tegra options (TEGRA_IOMMU_SMMU,
+    ARM_TEGRA_DEVFREQ, SND_SOC_TEGRA_*).
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 30 May 2016 04:44:45 +0100
+
+linux (4.6-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_4.6
+
+  [ Ben Hutchings ]
+  * Re-apply "[media] videobuf2-v4l2: Verify planes array in buffer dequeueing",
+    reverted upstream in 4.6
+  * [arm64] Enable RANDOMIZE_BASE (kASLR)
+  * [armhf] dsa: Enable NET_DSA_MV88E6123 as module, replacing
+    NET_DSA_MV88E6123_61_65
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 17 May 2016 02:39:47 +0100
+
+linux (4.6~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [hppa] Enable MLONGCALLS (fixes FTBFS)
+  * [alpha] fs: Disable BINFMT_EM86 (obsoleted by binfmt_misc; fixes FTBFS)
+
+  [ Aurelien Jarno ]
+  * [mips*/octeon] Enable EDAC, EDAC_MM_EDAC, EDAC_OCTEON_L2C,
+    EDAC_OCTEON_LMC, EDAC_OCTEON_PC, EDAC_OCTEON_PCI.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 09 May 2016 03:39:32 +0100
+
+linux (4.6~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [armhf] Enable EFI, RTC_DRV_EFI
+  * Update config for renaming/removal/replacement/merging/splitting of various
+    symbols
+  * *lockdep*,linux-perf: Remove '-rcN' from installation paths
+
+  [ Martin Michlmayr ]
+  * [armel, armhf] Use new Marvell CESA driver.
+  * [arm64] Enable support for NVIDIA Tegra.
+  * [arm64] udeb: Create fb-modules.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 29 Apr 2016 10:40:36 +0200
+
+linux (4.6~rc3-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update support patches to aufs4.x-rcN-20160328
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 14 Apr 2016 23:55:15 +0100
+
+linux (4.5.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.5.5
+    - decnet: Do not build routes to devices without decnet private data.
+    - route: do not cache fib route info on local routes with oif
+    - packet: fix heap info leak in PACKET_DIAG_MCLIST sock_diag interface
+    - net: sched: do not requeue a NULL skb
+    - bpf/verifier: reject invalid LD_ABS | BPF_DW instruction
+    - cdc_mbim: apply "NDP to end" quirk to all Huawei devices
+    - soreuseport: fix ordering for mixed v4/v6 sockets
+    - net: use skb_postpush_rcsum instead of own implementations
+    - vlan: pull on __vlan_insert_tag error path and fix csum correction
+    - openvswitch: Orphan skbs before IPv6 defrag
+    - openvswitch: use flow protocol when recalculating ipv6 checksums
+    - net/mlx5_core: Fix soft lockup in steering error flow
+    - net/mlx5e: Device's mtu field is u16 and not int
+    - net/mlx5e: Fix minimum MTU
+    - net/mlx5e: Use vport MTU rather than physical port MTU
+    - ipv4/fib: don't warn when primary address is missing if in_dev is dead
+    - net/mlx4_en: fix spurious timestamping callbacks
+    - net: Implement net_dbg_ratelimited() for CONFIG_DYNAMIC_DEBUG case
+    - gre: do not pull header in ICMP error processing
+    - net_sched: introduce qdisc_replace() helper
+    - net_sched: update hierarchical backlog too
+    - sch_htb: update backlog as well
+    - sch_dsmark: update backlog as well
+    - netem: Segment GSO packets on enqueue
+    - ipv6/ila: fix nlsize calculation for lwtunnel
+    - net/mlx4_en: Fix endianness bug in IPV6 csum calculation
+    - [x86] VSOCK: do not disconnect socket when peer has shutdown SEND only
+    - net: bridge: fix old ioctl unlocked net device walk
+    - bridge: fix igmp / mld query parsing
+    - net: fix a kernel infoleak in x25 module (CVE-2016-4580)
+    - net: thunderx: avoid exposing kernel stack
+    - tcp: refresh skb timestamp at retransmit time
+    - net/route: enforce hoplimit max value
+    - ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang
+    - ocfs2: fix posix_acl_create deadlock
+    - zsmalloc: fix zs_can_compact() integer overflow
+    - mm: thp: calculate the mapcount correctly for THP pages during WP faults
+    - [x86] crypto: qat - fix invalid pf2vf_resp_wq logic
+    - crypto: testmgr - Use kmalloc memory for RSA input
+    - ALSA: usb-audio: Quirk for yet another Phoenix Audio devices (v2)
+    - ALSA: usb-audio: Yet another Phoneix Audio device quirk
+    - ALSA: hda - Fix subwoofer pin on ASUS N751 and N551
+    - ALSA: hda - Fix white noise on Asus UX501VW headset
+    - ALSA: hda - Fix broken reconfig
+    - [armhf] spi: spi-ti-qspi: Fix FLEN and WLEN settings if bits_per_word is
+      overridden
+    - [armhf] spi: spi-ti-qspi: Handle truncated frames properly
+    - perf diff: Fix duplicated output column
+    - perf/core: Disable the event on a truncated AUX record
+    - vfs: rename: check backing inode being equal
+    - workqueue: fix rebind bound workers warning
+    - [armhf] regulator: s2mps11: Fix invalid selector mask and voltages
+      for buck9
+    - [armhf] regulator: axp20x: Fix axp22x ldo_io voltage ranges
+    - atomic_open(): fix the handling of create_error
+    - qla1280: Don't allocate 512kb of host tags
+    - tools lib traceevent: Do not reassign parg after collapse_tree()
+    - [x86] drm/i915: Update CDCLK_FREQ register on BDW after changing cdclk
+      frequency
+    - drm/radeon: fix PLL sharing on DCE6.1 (v2)
+    - [x86] drm/i915: Bail out of pipe config compute loop on LPT
+    - [x86] Revert "drm/i915: start adding dp mst audio"
+    - [x86] drm/i915/bdw: Add missing delay during L3 SQC credit programming
+    - drm/radeon: fix DP link training issue with second 4K monitor
+    - drm/radeon: fix DP mode validation
+    - [x86] drm/amdgpu: fix DP mode validation
+    - btrfs: reada: Fix in-segment calculation for reada
+    - Btrfs: fix truncate_space_check
+    - btrfs: remove error message from search ioctl for nonexistent tree
+    - btrfs: change max_inline default to 2048
+    - Btrfs: fix unreplayable log after snapshot delete + parent dir fsync
+    - Btrfs: fix file loss on log replay after renaming a file and fsync
+    - Btrfs: fix extent_same allowing destination offset beyond i_size
+    - Btrfs: fix deadlock between direct IO reads and buffered writes
+    - Btrfs: fix race when checking if we can skip fsync'ing an inode
+    - Btrfs: do not collect ordered extents when logging that inode exists
+    - btrfs: csum_tree_block: return proper errno value
+    - btrfs: do not write corrupted metadata blocks to disk
+    - Btrfs: fix invalid reference in replace_path
+    - btrfs: handle non-fatal errors in btrfs_qgroup_inherit()
+    - btrfs: fallback to vmalloc in btrfs_compare_tree
+    - Btrfs: don't use src fd for printk
+    - btrfs: Reset IO error counters before start of device replacing
+
+  [ Salvatore Bonaccorso ]
+  * tipc: check nl sock before parsing nested attributes (CVE-2016-4951)
+
+  [ Ben Hutchings ]
+  * aufs: Update support patches to aufs4.5-20160523
+    - mmap: Fix use-after-free in remap_file_pages(2)
+  * Revert "stmmac: Fix 'eth0: No PHY found' regression" (Closes: #823493)
+  * [x86] kvm:vmx: more complete state update on APICv on/off (CVE-2016-4440)
+  * USB: usbfs: fix potential infoleak in devio (CVE-2016-4482)
+  * ALSA: timer: Fix leak in SNDRV_TIMER_IOCTL_PARAMS (CVE-2016-4569)
+  * ALSA: timer: Fix leak in events via snd_timer_user_ccallback or
+    snd_timer_user_tinterrupt (CVE-2016-4578)
+  * dwc3-exynos: Fix deferred probing storm (Closes: #823552; thanks to
+    Steinar H. Gunderson)
+  * Re-apply "[media] videobuf2-v4l2: Verify planes array in buffer dequeueing",
+    reverted upstream in 4.5.5
+
+  [ Roger Shimizu ]
+  * [armhf] Enable SENSORS_PWM_FAN / PWM_SAMSUNG as module, as recommended by
+    Steinar H. Gunderson. (Closes: #824941)
+  * [armhf] For Odroid-U3 (Exynos4) support, enable ARCH_EXYNOS4 / MFD_MAX77686
+    / RTC_DRV_MAX77686 as built-in, and COMMON_CLK_MAX77686
+    / REGULATOR_MAX77686 / MMC_SDHCI_S3C as module. Thanks to
+    Vagrant Cascadian. (Closes: #825139)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 29 May 2016 22:21:11 +0100
+
+linux (4.5.4-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.5.4
+    - RDMA/iw_cxgb4: Fix bar2 virt addr calculation for T4 chips
+    - net/mlx5_core: Fix caching ATOMIC endian mode capability
+    - ipvs: handle ip_vs_fill_iph_skb_off failure
+    - ipvs: correct initial offset of Call-ID header search in SIP persistence
+      engine
+    - ipvs: drop first packet to redirect conntrack
+    - rtlwifi: Fix size of wireless mode variable
+    - [x86] mfd: intel-lpss: Remove clock tree on error path
+    - nbd: ratelimit error msgs after socket close
+    - null_blk: add lightnvm null_blk device to the nullb_list
+    - [arm64] ata: ahci_xgene: dereferencing uninitialized pointer in probe
+    - [armhf] wlcore: fix error handling in wlcore_event_fw_logger
+    - ath10k: fix pktlog in QCA99X0
+    - mwifiex: fix corner case association failure
+    - clk-divider: make sure read-only dividers do not write to their register
+    - [armhf] clk: rockchip: fix wrong mmc phase shift for rk3228
+    - [armhf] clk: rockchip: free memory in error cases when registering clock
+      branches
+    - [armel/versatile] clk: versatile: sp810: support reentrance
+    - [armhf] clk: sunxi: Fix sun8i-a23-apb0-clk divider flags
+    - [arm64] clk: xgene: Add missing parenthesis when clearing divider value
+    - [armhf] clk: bcm2835: fix check of error code returned by
+      devm_ioremap_resource()
+    - [armhf] pwm: omap-dmtimer: Fix inaccurate period and duty cycle
+      calculations
+    - [armhf] pwm: omap-dmtimer: Add sanity checking for load and match values
+    - [armhf] pwm: omap-dmtimer: Round load and match values rather than
+      truncate
+    - lpfc: fix misleading indentation
+    - gpiolib-acpi: Duplicate con_id string when adding it to the crs lookup
+      list
+    - ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p
+      initialisation
+    - mac80211: fix statistics leak if dev_alloc_name() fails
+    - tracing: Don't display trigger file for events that can't be enabled
+    - MD: make bio mergeable
+    - Minimal fix-up of bad hashing behavior of hash_64()
+    - mm: memcontrol: let v2 cgroups follow changes in system swappiness
+    - [armhf] mm, cma: prevent nr_isolated_* counters from going negative
+    - mm/zswap: provide unique zpool name
+    - propogate_mnt: Handle the first propogated copy being a slave
+      (CVE-2016-4581)
+    - modpost: fix module autoloading for OF devices with generic compatible
+      property
+    - [armhf] EXYNOS: Properly skip unitialized parent clock in power domain on
+    - [armhf] SoCFPGA: Fix secondary CPU startup in thumb2 kernel
+    - xen: Fix page <-> pfn conversion on 32 bit systems
+    - xen/balloon: Fix crash when ballooning on x86 32 bit PAE
+    - xen/evtchn: fix ring resize when binding new events
+    - HID: wacom: Add support for DTK-1651
+    - proc: prevent accessing /proc/<PID>/environ until it's ready
+    - mm: update min_free_kbytes from khugepaged after core initialization
+    - batman-adv: fix DAT candidate selection (must use vid)
+    - batman-adv: Check skb size before using encapsulated ETH+VLAN header
+    - batman-adv: Fix broadcast/ogm queue limit on a removed interface
+    - batman-adv: Reduce refcnt of removed router when updating route
+    - [x86] libnvdimm, pfn: fix memmap reservation sizing
+    - writeback: Fix performance regression in wb_over_bg_thresh()
+    - [x86] tsc: Read all ratio bits from MSR_PLATFORM_INFO
+    - [arm64] cpuidle: Pass on arm_cpuidle_suspend()'s return value
+    - [x86] sysfb_efi: Fix valid BAR address range check
+    - [arm64] dts: apq8064: add ahci ports-implemented mask
+    - ACPICA: Dispatcher: Update thread ID for recursive method calls
+    - [powerpc*] Fix bad inline asm constraint in create_zero_mask()
+    - libahci: save port map for forced port map
+    - ata: ahci-platform: Add ports-implemented DT bindings.
+    - USB: serial: cp210x: add ID for Link ECU
+    - USB: serial: cp210x: add Straizona Focusers device ids
+    - Revert "USB / PM: Allow USB devices to remain runtime-suspended when
+      sleeping"
+    - nvmem: mxs-ocotp: fix buffer overflow in read
+    - [x86] Drivers: hv: vmbus: Fix signaling logic in
+      hv_need_to_signal_on_read()
+    - [armhf] gpu: ipu-v3: Fix imx-ipuv3-crtc module autoloading
+    - [x86] drm/amdgpu: make sure vertical front porch is at least 1
+    - [x86] drm/amdgpu: set metadata pointer to NULL after freeing.
+    - [x86] iio: ak8975: Fix NULL pointer exception on early interrupt
+    - [x86] iio: ak8975: fix maybe-uninitialized warning
+    - drm/radeon: make sure vertical front porch is at least 1
+    - [x86] drm/i915: Avoid stalling on pending flips for legacy cursor updates
+    - [x86] drm/i915/ddi: Fix eDP VDD handling during booting and suspend/resume
+    - [x86] drm/i915: Fix system resume if PCI device remained enabled
+    - [x86] drm/i915: Fix eDP low vswing for Broadwell
+    - [x86] drm/i915: Make RPS EI/thresholds multiple of 25 on SNB-BDW
+    - [x86] drm/i915: Fake HDMI live status
+    - [x86] ACPI / processor: Request native thermal interrupt handling via _OSC
+
+  [ Aurelien Jarno ]
+  * [mips*] Fix PR_SET_FPMODE issues with multi-threaded programs.
+  * [i386] Stop recommending libc6-i686.
+  * [arm,x86] Fix memory corruption in KVM with THP enabled. (Closes: #821225)
+  * [mips*/octeon] Add support for byte swapped initramfs to handle u-boot and
+    kernel running with a different endianness.
+  * [mipsel/octeon] Activate flavour on mipsel.
+
+  [ Roger Shimizu ]
+  * netfilter: Enable NF_DUP_NETDEV / NFT_DUP_NETDEV / NFT_FWD_NETDEV
+    as module, as recommended by Arturo Borrero Gonzalez. (Closes: #824162)
+
+  [ Salvatore Bonaccorso ]
+  * KEYS: Fix ASN.1 indefinite length object parsing (CVE-2016-0758)
+  * net: fix infoleak in llc (CVE-2016-4485)
+  * KVM: MTRR: remove MSR 0x2f8 (CVE-2016-3713)
+
+  [ Ben Hutchings ]
+  * gencontrol.py: Fix implementation of [packages]tools config option,
+    thanks to Yves-Alexis Perez
+  * debian/control: Exclude tools from 'stage1' build profile
+  * debian/control,debian/rules: Support a 'pkg.linux.notools' build profile
+    which does not build tools packages
+  * debian/control,debian/rules,debian/rules.d: Support the 'nodoc' build
+    profile
+  * debian/control: Remove alternate build-dependency on binutils-dev that was
+    used for backports to wheezy
+  * net: fix infoleak in rtnetlink (CVE-2016-4486)
+  * nf_conntrack: avoid kernel pointer value leak in slab name
+  * vfs: do_splice_to(): cap the size before passing to ->splice_read()
+  * crypto: hash - Fix page length clamping in hash walk
+  * isofs: get_rock_ridge_filename(): handle malformed NM entries
+  * uapi glibc compat: fix compile errors when glibc net/if.h included
+    before linux/if.h (Closes: #822393)
+  * videobuf2-core: Fix crash after fixing CVE-2016-4568
+  * [armhf] Enable more Exynos drivers (Closes: #824435):
+    - drm: Enable DRM_EXYNOS as module, DRM_EXYNOS_MIXER, DRM_EXYNOS_FIMD,
+      DRM_EXYNOS_DSI, DRM_EXYNOS_DP, DRM_EXYNOS_HDMI
+    - phy: Enable PHY_EXYNOS_MIPI_VIDEO, PHY_EXYNOS_DP_VIDEO as modules
+    - cpuidle: Enable ARM_EXYNOS_CPUIDLE
+    - iio: Enable EXYNOS_ADC as module
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 16 May 2016 19:17:22 +0100
+
+linux (4.5.3-2) unstable; urgency=medium
+
+  * [s390x] PCI: Ignore zpci ABI changes; these functions are not used by
+    modules
+  * [powerpc*] Fix sstep compile on powerpcspe (Closes: #823526; thanks to
+    Lennart Sorensen)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 08 May 2016 15:03:45 +0100
+
+linux (4.5.3-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.5.3
+    - mmc: block: Use the mmc host device index as the mmcblk device index
+    - block: partition: initialize percpuref before sending out KOBJ_ADD
+    - block: loop: fix filesystem corruption in case of aio/dio
+    - [arm64] efi: Don't apply MEMBLOCK_NOMAP to UEFI memory map mapping
+    - [x86] mce: Avoid using object after free in genpool
+    - [x86] kvm: do not leak guest xcr0 into host interrupt handlers
+    - [arm*] KVM: Handle forward time correction gracefully
+    - [armhf] mvebu: Correct unit address for linksys
+    - [armhf] OMAP2: Fix up interconnect barrier initialization for DRA7
+    - [armhf] OMAP2+: hwmod: Fix updating of sysconfig register
+    - assoc_array: don't call compare_object() on a node
+    - [x86] usb: xhci: applying XHCI_PME_STUCK_QUIRK to Intel BXT B0 host
+    - xhci: resume USB 3 roothub first
+    - usb: host: xhci: add a new quirk XHCI_NO_64BIT_SUPPORT
+    - usb: xhci: fix wild pointers in xhci_mem_cleanup
+    - xhci: fix 10 second timeout on removal of PCI hotpluggable xhci
+      controllers
+    - usb: host: xhci-plat: Make enum xhci_plat_type start at a non zero value
+    - usb: hcd: out of bounds access in for_each_companion
+    - usb: gadget: f_fs: Fix use-after-free
+    - dm cache metadata: fix READ_LOCK macros and cleanup WRITE_LOCK macros
+    - dm cache metadata: fix cmd_read_lock() acquiring write lock
+    - lib: lz4: fixed zram with lz4 on big endian machines
+    - debugfs: Make automount point inodes permanently empty
+    - dmaengine: dw: fix master selection
+    - [armhf] dmaengine: omap-dma: Fix polled channel completion detection
+      and handling
+    - dmaengine: edma: Remove dynamic TPTC power management feature
+    - mtd: nand: pxa3xx_nand: fix dmaengine initialization
+    - sched/cgroup: Fix/cleanup cgroup teardown/init
+    - [x86] EDAC, sb_edac.c: Repair damage introduced when "fixing"
+      channel address
+    - [x86] EDAC, sb_edac.c: Take account of channel hashing when needed
+    - ALSA: hda - Don't trust the reported actual power state
+    - [x86] ALSA: hda/realtek - Add ALC3234 headset mode for Optiplex 9020m
+    - ALSA: hda - Keep powering up ADCs on Cirrus codecs
+    - [x86] ALSA: hda - add PCI ID for Intel Broxton-T
+    - ALSA: pcxhr: Fix missing mutex unlock
+    - [x86] ALSA: hda - Add dock support for ThinkPad X260
+    - [x86] ALSA: hda - Update BCLK also at hotplug for i915 HSW/BDW
+    - asm-generic/futex: Re-enable preemption in futex_atomic_cmpxchg_inatomic()
+    - futex: Handle unlock_pi race gracefully
+    - futex: Acknowledge a new waiter in counter before plist
+    - drm/nouveau/core: use vzalloc for allocating ramht
+    - drm/qxl: fix cursor position with non-zero hotspot
+    - [x86] drm/i915: Fix race condition in intel_dp_destroy_mst_connector()
+    - Revert "drm/radeon: disable runtime pm on PX laptops without dGPU
+      power control"
+    - [armhf] Revert "PCI: imx6: Add support for active-low reset GPIO"
+    - usbvision: revert commit 588afcc1
+    - [x86] Revert "drm/amdgpu: disable runtime pm on PX laptops without dGPU
+      power control"
+    - cpufreq: intel_pstate: Fix processing for turbo activation ratio
+    - [s390x] pci: add extra padding to function measurement block
+    - iwlwifi: pcie: lower the debug level for RSA semaphore access
+    - iwlwifi: mvm: fix memory leak in paging
+    - crypto: rsa-pkcs1pad - fix dst len
+    - [x86] crypto: ccp - Prevent information leakage on export
+    - crypto: sha1-mb - use corrcet pointer while completing jobs
+    - [powerpc*] scan_features() updates incorrect bits for REAL_LE
+    - [powerpc*] Update cpu_user_features2 in scan_features()
+    - [powerpc*] Update TM user feature bits in scan_features()
+    - nl80211: check netlink protocol in socket release notification
+    - netlink: don't send NETLINK_URELEASE for unbound sockets
+    - pinctrl: single: Fix pcs_parse_bits_in_pinctrl_entry to use __ffs than ffs
+    - [x86] iommu/amd: Fix checking of pci dma aliases
+    - iommu/dma: Restore scatterlist offsets correctly
+    - [x86] drm/amdgpu: when suspending, if uvd/vce was running. need to cancel
+      delay work.
+    - [x86] drm/amdgpu: use defines for CRTCs and AMFT blocks
+    - [x86] drm/amdgpu: bump the afmt limit for CZ, ST, Polaris
+    - [x86] amdgpu/uvd: add uvd fw version for amdgpu
+    - [x86] drm/amdgpu: fix regression on CIK (v2)
+    - drm/radeon: add a quirk for a XFX R9 270X
+    - drm/radeon: fix initial connector audio value
+    - drm/radeon: forbid mapping of userptr bo through radeon device file
+    - drm/radeon: fix vertical bars appear on monitor (v2)
+    - [mips*el/loongson-3] drm: Loongson-3 doesn't fully support wc memory
+    - drm/nouveau/gr/gf100: select a stream master to fixup tfb offset queries
+    - drm/dp/mst: Validate port in drm_dp_payload_send_msg()
+    - drm/dp/mst: Restore primary hub guid on resume
+    - drm/dp/mst: Get validated port ref in drm_dp_update_payload_part1()
+    - [x86] drm/i915: Pass the correct encoder to intel_ddi_clk_select()
+      with MST
+    - [x86] drm/i915: Cleanup phys status page too
+    - [x86] drm/i915: Use the active wm config for merging on ILK-BDW
+    - [x86] drm/i915: Start WM computation from scratch on ILK-BDW
+    - [x86] drm/i915: skl_update_scaler() wants a rotation bitmask instead of
+      bit number
+    - [x86] drm/amdkfd: uninitialized variable in
+      dbgdev_wave_control_set_registers()
+    - [x86] drm/i915/skl: Fix DMC load on Skylake J0 and K0
+    - [x86] drm/i915/skl: Fix spurious gpu hang with gt3/gt4 revs
+    - [x86] drm/i915: Fixup the free space logic in ring_prepare
+    - [x86] drm/i915: Force ringbuffers to not be at offset 0
+    - [x86] drm/i915: Use fw_domains_put_with_fifo() on HSW
+    - drm/ttm: fix kref count mess in ttm_bo_move_to_lru_tail
+    - [x86] perf intel-pt: Fix segfault tracing transactions
+    - [armhf] i2c: exynos5: Fix possible ABBA deadlock by keeping I2C
+      clock prepared
+    - ACPICA / Interpreter: Fix a regression triggered because of wrong Linux
+      ECDT support
+    - [x86] mmc: sdhci-acpi: Reduce Baytrail eMMC/SD/SDIO hangs
+    - [x86] toshiba_acpi: Fix regression caused by hotkey enabling value
+    - [x86] EDAC: i7core, sb_edac: Don't return NOTIFY_BAD from mce_decoder
+      callback
+    - [x86] ASoC: ssm4567: Reset device before regcache_sync()
+    - [x86] ASoC: rt5640: Correct the digital interface data select
+    - vb2-memops: Fix over allocation of frame vectors
+    - media: vb2: Fix regression on poll() for RW mode
+    - videobuf2-core: Check user space planes array in dqbuf
+    - videobuf2-v4l2: Verify planes array in buffer dequeueing (CVE-2016-4568)
+    - v4l2-dv-timings.h: fix polarity for 4k formats
+    - IB/core: Fix oops in ib_cache_gid_set_default_gid
+    - mwifiex: fix IBSS data path issue.
+    - IB/mlx5: Expose correct max_sge_rd limit
+    - IB/security: Restrict use of the write() interface (CVE-2016-4565)
+    - efi: Fix out-of-bounds read in variable_matches()
+    - efi: Expose non-blocking set_variable() wrapper to efivars
+    - [x86] apic: Handle zero vector gracefully in clear_vector_irq()
+    - workqueue: fix ghost PENDING flag while doing MQ IO
+    - slub: clean up code for kmem cgroup support to kmem_cache_free_bulk
+    - cgroup, cpuset: replace cpuset_post_attach_flush() with
+      cgroup_subsys->post_attach callback
+    - memcg: relocate charge moving from ->attach to ->post_attach
+    - mm: exclude HugeTLB pages from THP page_mapped() logic
+    - mm/huge_memory: replace VM_NO_THP VM_BUG_ON with actual VMA check
+    - numa: fix /proc/<pid>/numa_maps for THP
+    - mm: vmscan: reclaim highmem zone if buffer_heads is over limit
+    - mm/hwpoison: fix wrong num_poisoned_pages accounting
+    - locking/mcs: Fix mcs_spin_lock() ordering
+    - [armhf] spi/rockchip: Make sure spi clk is on in rockchip_spi_set_cs
+    - [armhf] irqchip/sunxi-nmi: Fix error check of of_io_request_and_map()
+    - [armhf] regulator: s5m8767: fix get_register() error handling
+    - scsi_dh: force modular build if SCSI is a module
+    - lib/mpi: Endianness fix
+    - [x86] misc: mic/scif: fix wrap around tests
+    - PM / OPP: Initialize u_volt_min/max to a valid value
+    - PM / Domains: Fix removal of a subdomain
+    - drivers/misc/ad525x_dpot: AD5274 fix RDAC read back errors
+    - perf evlist: Reference count the cpu and thread maps at set_maps()
+    - perf tools: Fix perf script python database export crash
+    - [x86] mm/kmmio: Fix mmiotrace for hugepages
+    - ext4: fix NULL pointer dereference in ext4_mark_inode_dirty()
+    - f2fs crypto: fix corrupted symlink in encrypted case
+    - f2fs: slightly reorganize read_raw_super_block
+    - f2fs: cover large section in sanity check of super
+    - ext4/fscrypto: avoid RCU lookup in d_revalidate
+    - f2fs: do f2fs_balance_fs when block is allocated
+    - f2fs: don't need to call set_page_dirty for io error
+    - f2fs crypto: handle unexpected lack of encryption keys
+    - f2fs crypto: make sure the encryption info is initialized on opendir(2)
+    - bus: uniphier-system-bus: fix condition of overlap check
+    - mtd: spi-nor: remove micron_quad_enable()
+    - mtd: brcmnand: Fix v7.1 register offsets
+    - mtd: nand: Drop mtd.owner requirement in nand_scan
+    - perf hists browser: Only offer symbol scripting when a symbol is under
+      the cursor
+    - perf hists browser: Fix dump to show correct callchain style
+    - perf tools: handle spaces in file names obtained from /proc/pid/maps
+    - NTB: Remove _addr functions from ntb_hw_amd
+    - perf/core: Don't leak event in the syscall error path
+    - perf/core: Fix time tracking bug with multiplexing
+    - perf hists: Fix determination of a callchain node's childlessness
+    - [armhf] OMAP3: Add cpuidle parameters table for omap3430
+    - [armhf] dts: armada-375: use armada-370-sata for SATA
+    - [armhf] dts: am33xx: Fix GPMC dma properties
+    - btrfs: fix memory leak of fs_info in block group cache
+    - btrfs: cleaner_kthread() doesn't need explicit freeze
+    - [armhf] thermal: rockchip: fix a impossible condition caused by the
+      warning
+    - sunrpc/cache: drop reference when sunrpc_cache_pipe_upcall() detects
+      a race
+    - megaraid_sas: add missing curly braces in ioctl handler
+    - tpm: fix checks for policy digest existence in tpm2_seal_trusted()
+    - tpm: fix: set continueSession attribute for the unseal operation
+
+  [ Uwe Kleine-König ]
+  * [armhf] enable I2C_MUX_PCA954x, MMC_SDHCI_PXAV3, AHCI_MVEBU
+
+  [ Ben Hutchings ]
+  * bug control: Update list of related firmware packages
+  * Revert "sp5100_tco: fix the device check for SB800 and later chipsets"
+    (Closes: #823146; probably fixes #822651)
+  * bpf: fix double-fdput in replace_map_fd_with_map_ptr() (CVE-2016-4557)
+    (Closes: #823603)
+  * bpf: fix refcnt overflow (CVE-2016-4558)
+  * bpf: fix check_map_func_compatibility logic
+  * stable-update: Rewrite stable-update.sh in Python
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 07 May 2016 21:59:15 +0100
+
+linux (4.5.2-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.5.2
+    - hwmon: (max1111) Return -ENODEV from max1111_read_channel if not
+      instantiated
+    - PKCS#7: pkcs7_validate_trust(): initialize the _trusted output argument
+    - [hppa] Fix SIGSYS signals in compat case
+    - [hppa] Fix and enable seccomp filter support
+    - [hppa] Avoid function pointers for kernel exception routines
+    - [hppa] Fix kernel crash with reversed copy_from_user()
+    - [hppa] Unbreak handling exceptions from kernel modules
+    - ALSA: timer: Use mod_timer() for rearming the system timer
+    - mm: fix invalid node in alloc_migrate_target()
+    - [powerpc*] mm: Fixup preempt underflow with huge pages
+    - [s390x] /mm: handle PTE-mapped tail pages in fast gup
+    - [x86] libnvdimm: fix smart data retrieval
+    - [x86] libnvdimm, pfn: fix uuid validation
+    - [powerpc*] process: Fix altivec SPR not being saved
+    - compiler-gcc: disable -ftracer for __noclone functions
+    - drm/dp: move hw_mutex up the call stack
+    - drm/udl: Use unlocked gem unreferencing
+    - [x86] drm/amd/powerplay: fix segment fault issue in multi-display case.
+    - [x86] drm/amdgpu/gmc: move vram type fetching into sw_init
+    - [x86] drm/amdgpu/gmc: use proper register for vram type on Fiji
+    - xen/events: Mask a moving irq
+    - net: validate variable length ll headers
+    - ax25: add link layer header validation function
+    - packet: validate variable length ll headers
+    - bpf: avoid copying junk bytes in bpf_get_current_comm()
+    - qlcnic: Remove unnecessary usage of atomic_t
+    - qlcnic: Fix mailbox completion handling during spurious interrupt
+    - macvtap: always pass ethernet header in linear
+    - bridge: allow zero ageing time
+    - ipv4: Don't do expensive useless work during inetdev destroy.
+    - net: Fix use after free in the recvmmsg exit path
+    - mlx4: add missing braces in verify_qp_parameters
+    - farsync: fix off-by-one bug in fst_add_one
+    - ath9k: fix buffer overrun for ar9287
+    - [armhf] net: mvneta: Fix spinlock usage
+    - ppp: ensure file->private_data can't be overridden
+    - tcp/dccp: remove obsolete WARN_ON() in icmp handlers
+    - qlge: Fix receive packets drop.
+    - bonding: fix bond_get_stats()
+    - ipv4: fix broadcast packets reception
+    - ipv4: initialize flowi4_flags before calling fib_lookup()
+    - ppp: take reference on channels netns
+    - xfrm: Fix crash observed during device unregistration and decryption
+    - ipv6: udp: fix UDP_MIB_IGNOREDMULTI updates
+    - bridge: Allow set bridge ageing time when switchdev disabled
+    - rtnl: fix msg size calculation in if_nlmsg_size()
+    - tun, bpf: fix suspicious RCU usage in tun_{attach, detach}_filter
+    - tuntap: restore default qdisc
+    - ipv4: l2tp: fix a potential issue in l2tp_ip_recv
+    - ipv6: l2tp: fix a potential issue in l2tp_ip6_recv
+    - ip6_tunnel: set rtnl_link_ops before calling register_netdevice
+    - ipv6: Count in extension headers in skb->network_header
+    - mpls: find_outdev: check for err ptr in addition to NULL check
+    - USB: uas: Limit qdepth at the scsi-host level
+    - USB: uas: Add a new NO_REPORT_LUNS quirk
+    - [x86] KVM: Inject pending interrupt even if pending nmi exist
+    - [x86] KVM: reduce default value of halt_poll_ns parameter
+    - pinctrl: pistachio: fix mfio84-89 function description and pinmux.
+    - pinctrl: sunxi: Fix A33 external interrupts not working
+    - pinctrl: freescale: imx: fix bogus check of of_iomap() return value
+    - au0828: fix au0828_v4l2_close() dev_state race condition
+    - au0828: Fix dev_state handling
+    - coda: fix error path in case of missing pdata on non-DT platform
+    - v4l: vsp1: Set the SRU CTRL0 register when starting the stream
+    - pcmcia: db1xxx_ss: fix last irq_to_gpio user
+    - rbd: use GFP_NOIO consistently for request allocations
+    - mac80211: properly deal with station hashtable insert errors
+    - mac80211: avoid excessive stack usage in sta_info
+    - mac80211: fix ibss scan parameters
+    - mac80211: fix unnecessary frame drops in mesh fwding
+    - mac80211: fix txq queue related crashes
+    - [armhf] gpio: pca953x: Use correct u16 value for register word write
+    - scsi: Do not attach VPD to devices that don't support it
+    - [armel,armhf]: 8550/1: protect idiv patching against undefined
+      gcc behavior
+    - iio: fix config watermark initial value
+    - iio: st_magn: always define ST_MAGN_TRIGGER_SET_STATE
+    - iio: accel: bmc150: fix endianness when reading axes
+    - iio: gyro: bmg160: fix buffer read values
+    - iio: gyro: bmg160: fix endianness when reading axes
+    - sd: Fix excessive capacity printing on devices with blocks bigger than
+      512 bytes
+    - fs: add file_dentry() (Closes: #821442)
+      + nfs: use file_dentry()
+      + ext4 crypto: use dget_parent() in ext4_d_revalidate()
+      + ext4: use dget_parent() in ext4_file_open()
+      + ext4: use file_dentry()
+    - btrfs: fix crash/invalid memory access on fsync when using overlayfs
+    - ext4: ignore quota mount options if the quota feature is enabled
+    - iommu: Don't overwrite domain pointer when there is no default_domain
+    - Btrfs: fix file/data loss caused by fsync after rename and new inode
+    - [arm64] replace read_lock to rcu lock in call_step_hook
+    - mmc: sdhci: Fix regression setting power on Trats2 board
+    - ALSA: hda - Fix regression of monitor_present flag in eld proc file
+    - [x86] ALSA: usb-audio: Skip volume controls triggers hangup on Dell
+      USB Dock
+    - HID: wacom: fix Bamboo ONE oops
+    - HID: usbhid: fix inconsistent reset/resume/reset-resume behavior
+
+  [ Salvatore Bonaccorso ]
+  * [x86] xen: suppress hugetlbfs in PV guests (CVE-2016-3961)
+  * [x86] USB: usbip: fix potential out-of-bounds write (CVE-2016-3955)
+
+  [ Ben Hutchings ]
+  * fs: Consolidate softdep declarations in each module
+  * Bump ABI to 2
+  * [armel/marvell] dts: kirkwood: fix SD slot default configuration for OpenRD
+    (Closes: #811351)
+  * atl2: Disable unimplemented scatter/gather feature (CVE-2016-2117)
+  * [x86] sound/soc/intel: Enable SND_SOC_INTEL_BYTCR_RT5640_MACH (replacing
+    SND_SOC_INTEL_BYT_RT5640_MACH; closes: #822267),
+    SND_SOC_INTEL_BYTCR_RT5651_MACH, SND_SOC_INTEL_CHT_BSW_RT5672_MACH,
+    SND_SOC_INTEL_CHT_BSW_RT5645_MACH, SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH,
+    SND_SOC_INTEL_SKL_RT286_MACH, SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH,
+    SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH as modules
+  * module: Invalidate signatures on force-loaded modules
+  * linux-source: Fix up module signing configuration in included kernel
+    config files
+  * README.Debian: Change more URLs to use https: scheme
+  * [sparc] Implement and wire up hotplug and modalias_show for vio, thanks to
+    Adrian Glaubitz (Closes: #815977)
+  * linux-headers: Avoid mixed implicit and normal rules in Makefile, thanks to
+    Thierry Herbelot (Closes: #822666)
+  * memcg: remove lru_add_drain_all() invocation from mem_cgroup_move_charge()
+    (Closes: #822084)
+  * linux-perf: Add build-time check for unversioned files that are likely to
+    result in file conflicts
+  * linux-perf: Move tips.txt to /usr/share/doc/linux-perf-<version>
+    (Closes: #821741)
+  * tools/build: Fix bpf(2) feature test (fixes FTBFS on alpha, sh4;
+    closes: #822364)
+  * [armhf] Disable FB_OMAP2; it is redundant and conflicting with DRM_OMAP
+  * [armhf] mm: Enable CMA, DMA_CMA
+  * Input: gtco - fix crash on detecting device without endpoints
+    (CVE-2016-2187)
+
+  [ Aurelien Jarno ]
+  * [mips*] Emulate unaligned LDXC1 and SDXC1 instructions.
+
+  [ Uwe Kleine-König ]
+  * [armhf] enable NET_DSA and available switch drivers as modules.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 28 Apr 2016 18:03:18 +0200
+
+linux (4.5.1-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.5.1
+    - [x86] entry/compat: Keep TS_COMPAT set during signal delivery
+    - [x86] perf/intel: Add definition for PT PMI bit
+    - [x86] KVM: fix missed hardware breakpoints
+    - [x86] KVM: i8254: change PIT discard tick policy
+    - [x86] KVM: fix spin_lock_init order on x86
+    - [x86] KVM: VMX: avoid guest hang on invalid invept instruction
+    - [x86] KVM: VMX: avoid guest hang on invalid invvpid instruction
+    - [x86] KVM: VMX: fix nested vpid for old KVM guests
+    - perf/core: Fix perf_sched_count derailment
+    - perf tools: Fix checking asprintf return value
+    - Thermal: Ignore invalid trip points
+    - sched/cputime: Fix steal_account_process_tick() to always return jiffies
+    - sched/fair: Avoid using decay_load_missed() with a negative value
+    - [x86] EDAC/sb_edac: Fix computation of channel address
+    - [x86] EDAC, amd64_edac: Shift wrapping issue in f1x_get_norm_dct_addr()
+    - [s390x] fix floating pointer register corruption (again)
+    - [s390x] cpumf: add missing lpp magic initialization
+    - [s390x] pci: enforce fmb page boundary rule
+    - [armhf] pinctrl-bcm2835: Fix cut-and-paste error in "pull" parsing
+    - [x86] irq: Cure live lock in fixup_irqs() (Closes: #817816)
+    - [x86] apic: Fix suspicious RCU usage in
+      smp_trace_call_function_interrupt()
+    - [amd64] iopl: Properly context-switch IOPL on Xen PV (CVE-2016-3157)
+    - [x86] mm: TLB_REMOTE_SEND_IPI should count pages
+    - sg: fix dxferp in from_to case
+    - aacraid: Fix RRQ overload
+    - aacraid: Fix memory leak in aac_fib_map_free
+    - aacraid: Set correct msix count for EEH recovery
+    - sd: Fix discard granularity when LBPRZ=1
+    - ncr5380: Correctly clear command pointers and lists after bus reset
+    - ncr5380: Dont release lock for PIO transfer
+    - ncr5380: Dont re-enter NCR5380_select()
+    - ncr5380: Forget aborted commands
+    - ncr5380: Fix NCR5380_select() EH checks and result handling
+    - ncr5380: Call scsi_eh_prep_cmnd() and scsi_eh_restore_cmnd() as and when
+      appropriate
+    - scsi: storvsc: fix SRB_STATUS_ABORTED handling
+    - be2iscsi: set the boot_kset pointer to NULL in case of failure
+    - aic7xxx: Fix queue depth handling
+    - libnvdimm: Fix security issue with DSM IOCTL.
+    - libnvdimm, pmem: fix kmap_atomic() leak in error path
+    - dm snapshot: disallow the COW and origin devices from being identical
+    - dm: fix excessive dm-mq context switching
+    - dm thin metadata: don't issue prefetches if a transaction abort
+      has failed
+    - dm cache: make sure every metadata function checks fail_io
+    - dm: fix rq_end_stats() NULL pointer in dm_requeue_original_request()
+    - usb: retry reset if a device times out
+    - usb: hub: fix a typo in hub_port_init() leading to wrong logic
+    - USB: cdc-acm: more sanity checking (CVE-2016-3138)
+    - USB: iowarrior: fix oops with malicious USB descriptors (incomplete fix
+      for CVE-2016-2188)
+    - USB: usb_driver_claim_interface: add sanity checking
+    - USB: mct_u232: add sanity checking in probe (CVE-2016-3136)
+    - USB: digi_acceleport: do sanity checking for the number of ports
+      (CVE-2016-3140)
+    - USB: cypress_m8: add endpoint sanity check (CVE-2016-3137)
+    - Input: powermate - fix oops with malicious USB descriptors
+      (CVE-2016-2186)
+    - ALSA: usb-audio: Fix NULL dereference in create_fixed_stream_quirk()
+      (CVE-2016-2184)
+    - ALSA: usb-audio: Add sanity checks for endpoint accesses (CVE-2016-2184)
+    - ALSA: usb-audio: Minor code cleanup in create_fixed_stream_quirk()
+    - ALSA: usb-audio: Fix double-free in error paths after
+      snd_usb_add_audio_stream() call
+    - crypto: ccp - Add hash state import and export support
+    - crypto: ccp - Limit the amount of information exported
+    - crypto: ccp - Don't assume export/import areas are aligned
+    - crypto: ccp - memset request context to zero during import
+    - crypto: keywrap - memzero the correct memory
+    - [armel/marvell,armhf] crypto: marvell/cesa - forward
+      devm_ioremap_resource() error code
+    - [x86] mei: bus: check if the device is enabled before data transfer
+    - tpm: fix the rollback in tpm_chip_register()
+    - tpm_crb: tpm2_shutdown() must be called before tpm_chip_unregister()
+    - tpm_eventlog.c: fix binary_bios_measurements
+    - tpm: fix the cleanup of struct tpm_chip
+    - HID: logitech: fix Dual Action gamepad support
+    - HID: i2c-hid: fix OOB write in i2c_hid_set_or_send_report()
+    - HID: multitouch: force retrieving of Win8 signature blob
+    - HID: fix hid_ignore_special_drivers module parameter
+    - staging: comedi: ni_tiocmd: change mistaken use of start_src for start_arg
+    - staging: comedi: ni_mio_common: fix the ni_write[blw]() functions
+    - tty: Fix GPF in flush_to_ldisc(), part 2
+    - net: irda: Fix use-after-free in irtty_open()
+    - 8250: use callbacks to access UART_DLL/UART_DLM
+    - saa7134: Fix bytesperline not being set correctly for planar formats
+    - adv7511: TX_EDID_PRESENT is still 1 after a disconnect
+    - bttv: Width must be a multiple of 16 when capturing planar formats
+    - coda: fix first encoded frame payload
+    - media: v4l2-compat-ioctl32: fix missing length copy in put_v4l2_buffer32
+    - mtip32xx: Avoid issuing standby immediate cmd during FTL rebuild
+    - mtip32xx: Fix broken service thread handling
+    - mtip32xx: Remove unwanted code from taskfile error handler
+    - mtip32xx: Fix for rmmod crash when drive is in FTL rebuild
+    - mtip32xx: Handle safe removal during IO
+    - mtip32xx: Handle FTL rebuild failure state during device initialization
+    - mtip32xx: Implement timeout handler
+    - mtip32xx: Cleanup queued requests after surprise removal
+    - ALSA: hda - Fix unexpected resume through regmap code path
+    - ALSA: hda - Apply reboot D3 fix for CX20724 codec, too
+    - [x86] ALSA: intel8x0: Add clock quirk entry for AD1981B on IBM
+      ThinkPad X41.
+    - ALSA: hda - Don't handle ELD notify from invalid port
+    - [x86] ALSA: hda - fix the mic mute button and led problem for a Lenovo AIO
+    - ALSA: hda - Fix unconditional GPIO toggle via automute
+    - [x86] ALSA: hda - Limit i915 HDMI binding only for HSW and later
+    - [x86] ALSA: hda - Fix spurious kernel WARNING on Baytrail HDMI
+    - [x86] ALSA: hda - Really restrict i915 notifier to HSW+
+    - ALSA: hda - Fix forgotten HDMI monitor_present update
+    - [x86] ALSA: hda - Workaround for unbalanced i915 power refcount by
+      concurrent probe
+    - ALSA: hda - Fix missing ELD update at unplugging
+    - jbd2: fix FS corruption possibility in jbd2_journal_destroy() on
+      umount path
+    - [arm64] Update PTE_RDONLY in set_pte_at() for PROT_NONE permission
+    - brd: Fix discard request processing
+    - IB/srpt: Simplify srpt_handle_tsk_mgmt()
+    - bcache: cleaned up error handling around register_cache()
+    - bcache: fix race of writeback thread starting before complete
+      initialization
+    - bcache: fix cache_set_flush() NULL pointer dereference on OOM
+    - mm: memcontrol: reclaim when shrinking memory.high below usage
+    - mm: memcontrol: reclaim and OOM kill when shrinking memory.max below usage
+    - watchdog: don't run proc_watchdog_update if new value is same as old
+    - Bluetooth: Fix potential buffer overflow with Add Advertising
+    - cgroup: ignore css_sets associated with dead cgroups during migration
+    - [amrhf] net: mvneta: enable change MAC address when interface is up
+    - brcmfmac: Increase nr of supported flowrings.
+    - of: alloc anywhere from memblock if range not specified
+    - vfs: show_vfsstat: do not ignore errors from show_devname method
+    - splice: handle zero nr_pages in splice_to_pipe()
+    - quota: Fix possible GPF due to uninitialised pointers
+    - xfs: fix two memory leaks in xfs_attr_list.c error paths
+    - raid1: include bio_end_io_list in nr_queued to prevent freeze_array hang
+    - md/raid5: Compare apples to apples (or sectors to sectors)
+    - RAID5: check_reshape() shouldn't call mddev_suspend
+    - RAID5: revert e9e4c377e2f563 to fix a livelock
+    - raid10: include bio_end_io_list in nr_queued to prevent freeze_array hang
+    - md/raid5: preserve STRIPE_PREREAD_ACTIVE in break_stripe_batch_list
+    - md: multipath: don't hardcopy bio in .make_request path
+    - fuse: do not use iocb after it may have been freed
+    - fuse: Add reference counting for fuse_io_priv
+    - fs/coredump: prevent fsuid=0 dumps into user-controlled directories
+    - [armhf] drm/vc4: Return -EFAULT on copy_from_user() failure
+    - [x86] drm/radeon: disable runtime pm on PX laptops without dGPU
+      power control
+    - drm/radeon: Don't drop DP 2.7 Ghz link setup on some cards.
+    - drm/radeon: rework fbdev handling on chips with no connectors
+    - drm/radeon/mst: fix regression in lane/link handling.
+    - [x86] drm/amdgpu: disable runtime pm on PX laptops without dGPU
+      power control
+    - drm/amdgpu: include the right version of gmc header files for iceland
+    - drm/amd/powerplay: add uvd/vce dpm enabling flag to fix the performance
+      issue for CZ
+    - tracing: Have preempt(irqs)off trace preempt disabled functions
+    - tracing: Fix crash from reading trace_pipe with sendfile
+    - tracing: Fix trace_printk() to print when not using bprintk()
+    - bitops: Do not default to __clear_bit() for __clear_bit_unlock()
+    - [x86] ideapad-laptop: Add ideapad Y700 (15) to the no_hw_rfkill DMI list
+    - mmc: block: fix ABI regression of mmc_blk_ioctl
+    - mmc: mmc_spi: Add Card Detect comments and fix CD GPIO case
+    - mmc: sdhci: move initialisation of command error member
+    - mmc: sdhci: clean up command error handling
+    - mmc: sdhci: fix command response CRC error handling
+    - mmc: sdhci: further fix for DMA unmapping in sdhci_post_req()
+    - mmc: sdhci: avoid unnecessary mapping/unmapping of align buffer
+    - mmc: sdhci: plug DMA mapping leak on error
+    - mmc: sdhci: fix data timeout
+    - [armhf] mmc: tegra: Disable UHS-I modes for tegra114
+    - [armhf] mmc: tegra: properly disable card clock
+    - mmc: sdhci: Fix override of timeout clk wrt max_busy_timeout
+    - [armhf] clk: rockchip: rk3368: fix cpuclk mux bit of big cpu-cluster
+    - [armhf] clk: rockchip: rk3368: fix cpuclk core dividers
+    - [armhf] clk: rockchip: rk3368: fix parents of video encoder/decoder
+    - [armhf] clk: rockchip: rk3368: fix hdmi_cec gate-register
+    - [armhf] clk: rockchip: add hclk_cpubus to the list of rk3188
+      critical clocks
+    - [armhf] clk: bcm2835: Fix setting of PLL divider clock rates
+    - target: Fix target_release_cmd_kref shutdown comp leak
+    - iser-target: Fix identification of login rx descriptor type
+    - iser-target: Separate flows for np listeners and connections cma events
+    - iser-target: Rework connection termination
+    - nfsd4: fix bad bounds checking
+    - nfsd: fix deadlock secinfo+readdir compound
+    - ACPI / PM: Runtime resume devices when waking from hibernate
+    - writeback, cgroup: fix premature wb_put() in
+      locked_inode_to_wb_and_lock_list()
+    - writeback, cgroup: fix use of the wrong bdi_writeback which mismatches
+      the inode
+    - Input: synaptics - handle spurious release of trackstick buttons, again
+    - Input: ati_remote2 - fix crashes on detecting device with invalid
+      descriptor (CVE-2016-2185)
+    - ocfs2: o2hb: fix double free bug
+    - ocfs2/dlm: fix race between convert and recovery
+    - ocfs2/dlm: fix BUG in dlm_move_lockres_to_recovery_list
+    - mm/page_alloc: prevent merging between isolated and other pageblocks
+    - mtd: onenand: fix deadlock in onenand_block_markbad
+    - [x86] intel_idle: prevent SKL-H boot failure when C8+C9+C10 enabled
+    - PM / sleep: Clear pm_suspend_global_flags upon hibernate
+    - scsi_common: do not clobber fixed sense information
+    - sched/cputime: Fix steal time accounting vs. CPU hotplug
+    - [x86] perf/pebs: Add workaround for broken OVFL status on HSW+
+    - [x86] perf/intel/uncore: Remove SBOX support for BDX-DE
+    - [x86] perf/intel: Fix PEBS warning by only restoring active PMU in pmi
+    - [x86] perf/intel: Use PAGE_SIZE for PEBS buffer size on Core2
+    - [x86] perf/intel: Fix PEBS data source interpretation on Nehalem/Westmere
+
+  [ Ben Hutchings ]
+  * mm: exclude ZONE_DEVICE from GFP_ZONE_TABLE
+  * mm: ZONE_DEVICE depends on SPARSEMEM_VMEMMAP
+  * [amd64] Re-enable ZONE_DMA and sound drivers that depend on it
+    (Closes: #814855, #819385, #820890)
+  * ntfs: Disable NTFS_RW (Closes: #566356); ntfs-3g has much more complete
+    write support
+  * Merge linux-tools source package into linux
+    (Closes: #550379, #573483, #816500)
+  * Add support for securelevel and prepare for Secure Boot (Closes: #820008):
+    - Add Matthew Garrett's securelevel patchset (see
+      Documentation/security/securelevel.txt)
+    - modules: Enable MODULE_SIG and MODULE_SIG_SHA256, but not MODULE_SIG_ALL
+      as signatures will be packaged separately
+    - debian/control: Add build-dependencies on libssl-dev, openssl
+    - debian/copyright: Note that extract-cert and sign-file are under LGPL 2.1
+    - linux-kbuild: Add extract-cert and sign-file programs
+    - scripts: Fix X.509 PEM support in sign-file
+    - certs: Set SYSTEM_TRUSTED_KEYS to my own personal certificate to support
+      initial testing of signed modules
+  * Disable UNUSED_SYMBOLS; it is now itself unused
+  * linux-support: Include udeb configuration from debian/installer for use
+    by the linux-signed package
+  * Set ABI to 1
+  * netfilter: x_tables: Fix parsing of IPT_SO_SET_REPLACE blobs (CVE-2016-3134)
+    - validate e->target_offset early
+    - make sure e->next_offset covers remaining blob size
+  * ipv4: Don't do expensive useless work during inetdev destroy (CVE-2016-3156)
+  * [x86] mm/32: Enable full randomization on i386 and X86_32 (CVE-2016-3672)
+  * fs: Add MODULE_SOFTDEP declarations for hard-coded crypto drivers
+    (Closes: #819725)
+  * aufs: Update support patches to aufs4.5-20160328 (Closes: #819748)
+  * [x86] ACPI / processor: Request native thermal interrupt handling via _OSC
+    (Closes: #817016, #819336)
+  * [armhf] Add support for octa-core big.LITTLE systems including Exynos
+    (Closes: #819379)
+  * [armhf] watchdog: Enable S3C2410_WATCHDOG as module (Closes: #819377)
+  * nbd: Create size change events for userspace (Closes: #812487)
+  * [armhf] usb-modules: Add modules required for BeagleBoard-X15, thanks to
+    Vagrant Cascadian (Closes: #815848)
+
+  [ Aurelien Jarno ]
+  * [mipsel/mips/config.loongson-2f] Disable VIDEO_CX23885, VIDEO_IVTV,
+    VIDEO_CX231XX, VIDEO_PVRUSB2 (fixes FTBFS).
+  * [mips*/octeon] Backport OCTEON SATA controller support from 4.6-rc1.
+    Enable AHCI_OCTEON and SATA_AHCI_PLATFORM.
+  * [mips*/octeon] Backport Octeon III CN7xxx interface detection from
+    4.7 queue.
+  * [mips*/octeon] Enable SPI_OCTEON.
+  * [mips*/octeon] udeb: Add ahci_octeon and ahci_platform modules to
+    sata-modules.
+  * [mips*/octeon] Bump CONFIG_NR_CPUS to 32 to accomodate recent Octeon
+    III SoCs.
+  * [mips*/octeon] Enable CRYPTO_MD5_OCTEON, CRYPTO_SHA1_OCTEON, CRYPTO_SHA256
+    and CRYPTO_SHA512_OCTEON.
+
+  [ Roger Shimizu ]
+  * [armel/marvell] Change MTD_CFI_AMDSTD from module to built-in
+    because orion5x-based Buffalo Linkstation devices still need it
+    (Closes: #818598)
+  * [armel/marvell] Add DT support for "Synology DS112" and "Zyxel NSA320".
+    Thanks to Heinrich Schuchardt. (Closes: #819393)
+  * [armel/marvell] Add DT support for "Buffalo/Revogear Kurobox Pro"
+  * [armhf/armmp] Enable DW_WATCHDOG as module, used on Firefly-RK3288.
+    Patch by Vagrant Cascadian. (Closes: #820834)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 14 Apr 2016 09:49:24 +0100
+
+linux-tools (4.5-1~exp1) experimental; urgency=medium
+
+  * New upstream release
+
+  [ Ben Hutchings ]
+  * linux-perf: Fix use of uninitialized variables
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 20 Mar 2016 21:20:22 +0000
+
+linux (4.5-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_4.5
+
+  [ Martin Michlmayr ]
+  * [arm64] Enable LEDS_GPIO.
+  * [arm64] Enable more QCOM options. (Closes: #815627)
+  * [arm64] udeb: Add leds-modules package containing leds-gpio driver.
+  * [arm64] udeb: Add regulators and SoC modules to core-modules.
+
+  [ Uwe Kleine-König ]
+  * [armhf] Enable DRM_ETNAVIV.
+
+  [ Ben Hutchings ]
+  * [armel/versatile] Enable GPIOLIB, new dependency of SMC91X (fixes FTBFS)
+  * [x86] input: Enable ASUS_WIRELESS as module (Closes: #818487)
+  * [x86] amdgpu: Enable DRM_AMD_POWERPLAY (Closes: #818174)
+  * [x86] Enable RANDOMIZE_BASE (kASLR). This is incompatible with hibernation,
+    so you must use the kernel parameter "kaslr" to enable kASLR and disable
+    hibernation at boot time. (Closes: #816067)
+  * [x86] vmxnet3: fix lock imbalance in vmxnet3_tq_xmit() (regression in 4.5)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 20 Mar 2016 12:06:57 +0000
+
+linux (4.5~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 07 Mar 2016 22:20:48 +0000
+
+linux-tools (4.5~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * Makefile.inc: Add support for wildcards in $(SCRIPTS) and $(DATA)
+  * linux-kbuild: Include scripts/Makefile.* (Closes: #815593)
+  * Makefile.inc, rules.real: Fix conflation of $(DESTDIR) and $(prefix)
+  * hyperv-daemons: Fix rule redefinition that 'make' warns about
+  * debian/control: Build-Depend on dh-python, as dh_python2 warns we should
+  * lockdep: Add '+' prefix to make invocation, so it can be parallelised
+  * tools/build: Fix 'unused variable' warning in the bpf() feature check
+  * lockdep: Add more missing macros
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 07 Mar 2016 03:07:00 +0000
+
+linux-tools (4.5~rc5-1~exp3) experimental; urgency=medium
+
+  * Adjust build fix from unstable
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 21 Feb 2016 23:45:04 +0000
+
+linux-tools (4.5~rc5-1~exp2) experimental; urgency=medium
+
+  * Merge build fix from unstable
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 21 Feb 2016 17:40:52 +0000
+
+linux-tools (4.5~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * lockdep: Add missing macros
+  * Adjust VPATH to work for check-hyperv (and simplify the modpost wrapper)
+  * tools/build: Remove bpf() run-time check at build time
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 21 Feb 2016 16:45:52 +0000
+
+linux (4.5~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [armel/versatile] Enable GPIOLIB, needed to build smc91x driver with
+    OF enabled (fixes FTBFS)
+  * [powerpc] mm: Fix HAVE_ARCH_SOFT_DIRTY dependencies (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 21 Feb 2016 13:17:27 +0000
+
+linux (4.5~rc4-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Roger Shimizu ]
+  * Enable TTY_PRINTK as module (Closes: #814540).
+
+  [ Ben Hutchings ]
+  * [rt] Disable until it is updated for 4.5 or later
+  * aufs: Update support patches to aufs4.x-rcN-20160215
+  * Compile with gcc-5 on all architectures
+  * [hppa] Update build-dependencies for renaming of binutils-hppa64
+  * [x86] udeb: Move scsi_transport_fc to scsi-core-modules, since hv_storvsc
+    now depends on it
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 18 Feb 2016 01:57:20 +0000
+
+linux-tools (4.4.6-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    - tools lib traceevent: Fix output of %llu for 64 bit values read on
+      32 bit machines
+    - perf tools: tracepoint_error() can receive e=NULL, robustify it
+    - perf kvm record/report: 'unprocessable sample' error while
+      recording/reporting guest data
+    - tools: hv: vss: fix the write()'s argument: error -> vss_msg
+    - uapi: update install list after nvme.h rename
+    - perf stat: Do not clean event's private stats
+
+  [ Mattia Dongili ]
+  * Build linux-cpupower.
+
+  [ Ben Hutchings ]
+  * debian/control: Update policy version to 3.9.7; no changes required
+  * linux-perf: Override lintian errors for perf-read-vdso{,x}32 in
+    64-bit packages
+  * debian/copyright: Move GPL-2 boilerplate to its own paragraph
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 20 Mar 2016 16:23:48 +0000
+
+linux (4.4.6-1) unstable; urgency=medium
+
+  [ Salvatore Bonaccorso ]
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.5
+    - Btrfs: fix deadlock running delayed iputs at transaction commit time
+      (regression in 4.1)
+    - btrfs: Fix no_space in write and rm loop
+      (regression in 4.4)
+    - btrfs: async-thread: Fix a use-after-free error for trace
+    - [x86] drm/amdgpu: mask out WC from BO on unsupported arches
+    - block: Initialize max_dev_sectors to 0
+    - [hppa] Fix ptrace syscall number and return value modification
+    - [x86] kvm: Update tsc multiplier on change.
+      (regression in 4.4)
+    - fbcon: set a default value to blink interval
+    - cifs: fix out-of-bounds access in lease parsing
+    - CIFS: Fix SMB2+ interim response processing for read requests
+    - [x86] vfio: fix ioctl error handling
+    - [x86] KVM: fix root cause for missed hardware breakpoints
+    - [arm*] KVM: Fix ioctl error handling
+    - [amd64] iommu: Apply workaround for ATS write permission check
+    - [amd64] iommu: Fix boot warning when device 00:00.0 is not iommu covered
+    - [x86] iommu/vt-d: Use BUS_NOTIFY_REMOVED_DEVICE in hotplug path
+    - target: Fix WRITE_SAME/DISCARD conversion to linux 512b sectors
+    - [x86,powerpc*] drm/ast: Fix incorrect register check for DRAM width
+    - drm/radeon/pm: update current crtc info after setting the powerstate
+    - [x86] drm/amdgpu/pm: update current crtc info after setting the powerstate
+    - [x86] drm/amdgpu: apply gfx_v8 fixes to gfx_v7 as well
+    - [x86] drm/amdgpu/gfx8: specify which engine to wait before vm flush
+    - [x86] drm/amdgpu: return from atombios_dp_get_dpcd only when error
+    - libata: fix HDIO_GET_32BIT ioctl
+    - writeback: flush inode cgroup wb switches instead of pinning super_block
+    - Adding Intel Lewisburg device IDs for SATA
+    - [arm64] vmemmap: use virtual projection of linear region
+      (regression in 4.1)
+    - ata: ahci: don't mark HotPlugCapable Ports as external/removable
+    - tracing: Do not have 'comm' filter override event 'comm' field
+      (regression in 4.3)
+    - Btrfs: fix loading of orphan roots leading to BUG_ON
+    - Revert "jffs2: Fix lock acquisition order bug in jffs2_write_begin"
+    - jffs2: Fix page lock / f->sem deadlock
+    - jffs2: Fix directory hardlinks from deleted directories
+    - ALSA: usb-audio: Add a quirk for Plantronics DA45
+    - [amd64] ALSA: ctl: Fix ioctls for X32 ABI
+    - [x86] ALSA: hda - Fix mic issues on Acer Aspire E1-472
+    - [amd64] ALSA: rawmidi: Fix ioctls X32 ABI
+    - [amd64] ALSA: timer: Fix ioctls for X32 ABI
+    - [amd64] ALSA: pcm: Fix ioctls for X32 ABI
+    - ALSA: seq: oss: Don't drain at closing a client
+    - ALSA: hdspm: Fix wrong boolean ctl value accesses
+    - ALSA: hdsp: Fix wrong boolean ctl value accesses
+    - ALSA: hdspm: Fix zero-division
+    - ALSA: timer: Fix broken compat timer user status ioctl
+    - [armhf] usb: chipidea: otg: change workqueue ci_otg as freezable
+    - USB: cp210x: Add ID for Parrot NMEA GPS Flight Recorder
+    - USB: qcserial: add Dell Wireless 5809e Gobi 4G HSPA+ (rev3)
+    - USB: qcserial: add Sierra Wireless EM74xx device ID
+    - USB: serial: option: add support for Telit LE922 PID 0x1045
+    - USB: serial: option: add support for Quectel UC20
+    - [mips*] scache: Fix scache init with invalid line size.
+    - [mips*] traps: Fix SIGFPE information leak from `do_ov' and
+      `do_trap_or_bp'
+    - ubi: Fix out of bounds write in volume update code
+    - thermal: cpu_cooling: fix out of bounds access in time_in_idle
+    - [x86] drm/amdgpu: Use drm_calloc_large for VM page_tables array
+    - block: check virt boundary in bio_will_gap()
+    - [x86] drm/i915: more virtual south bridge detection
+    - [x86] drm/i915: refine qemu south bridge detection
+    - modules: fix longstanding /proc/kallsyms vs module insertion race.
+    - [x86] drm/amdgpu: fix topaz/tonga gmc assignment in 4.4 stable
+
+  [ Ben Hutchings ]
+  * [x86] drm/i915: Fix oops caused by fbdev initialization failure
+  * module: Fix ABI change in 4.4.5
+  * Revert "libata: Align ata_device's id on a cacheline" to avoid ABI change
+  * [amd64] Fix more regressions due to "efi: Build our own page table
+    structure":
+    - efi: Fix boot crash by always mapping boot service regions into new EFI
+      page tables (Closes: #815125)
+    - mm/pat: Fix boot crash when 1GB pages are not supported by cpu
+  * [armhf] gpio: Enable GPIO_PCF857X as module, needed by TI DRA7xx EVMs
+    (Closes: #818386)
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.6
+    - [arm64] account for sparsemem section alignment when choosing vmemmap
+      offset
+    - [armel,armhf] mvebu: fix overlap of Crypto SRAM with PCIe memory window
+    - [armhf] dts: dra7: do not gate cpsw clock due to errata i877
+    - [armhf] OMAP2+: hwmod: Introduce ti,no-idle dt property
+    - PCI: Allow a NULL "parent" pointer in pci_bus_assign_domain_nr()
+    - kvm: cap halt polling at exactly halt_poll_ns
+    - [x86] KVM: VMX: disable PEBS before a guest entry
+    - [s390x] KVM: correct fprs on SIGP (STOP AND) STORE STATUS
+    - [powerpc*] KVM: Book3S HV: Sanitize special-purpose register values on
+      guest exit
+    - [x86] KVM: MMU: fix ept=0/pte.u=1/pte.w=0/CR0.WP=0/CR4.SMEP=1/EFER.NX=0
+      combo
+    - [x86] KVM: MMU: fix reserved bit check for
+      ept=0/CR0.WP=0/CR4.SMEP=1/EFER.NX=0
+    - [s390x] mm: four page table levels vs. fork (CVE-2016-2143)
+    - [s390x] dasd: fix diag 0x250 inline assembly
+    - tracing: Fix check for cpu online when event is disabled
+    - jffs2: reduce the breakage on recovery from halfway failed rename()
+    - ncpfs: fix a braino in OOM handling in ncp_fill_cache()
+    - ASoC: dapm: Fix ctl value accesses in a wrong type
+    - ovl: ignore lower entries when checking purity of non-directory entries
+    - ovl: fix working on distributed fs as lower layer
+    - wext: fix message delay/ordering
+    - cfg80211/wext: fix message ordering
+    - can: gs_usb: fixed disconnect bug by removing erroneous use of kfree()
+    - iwlwifi: mvm: inc pending frames counter also when txing non-sta
+    - mac80211: minstrel: Change expected throughput unit back to Kbps
+    - mac80211: fix use of uninitialised values in RX aggregation
+    - mac80211: minstrel_ht: set default tx aggregation timeout to 0
+    - mac80211: minstrel_ht: fix a logic error in RTS/CTS handling
+    - mac80211: check PN correctly for GCMP-encrypted fragmented MPDUs
+    - mac80211: Fix Public Action frame RX in AP mode
+    - [armhf] gpu: ipu-v3: Do not bail out on missing optional port nodes
+    - [i386/686-pae] mm: Fix slow_virt_to_phys() for X86_PAE again
+    - Revert "drm/radeon: call hpd_irq_event on resume"
+    - [x86] drm/amdgpu: Fix error handling in amdgpu_flip_work_func.
+    - drm/radeon: Fix error handling in radeon_flip_work_func.
+    - Revert "drm/radeon/pm: adjust display configuration after powerstate"
+    - [powerpc*] powernv: Add a kmsg_dumper that flushes console output on panic
+    - [powerpc*] powernv: Fix OPAL_CONSOLE_FLUSH prototype and usages
+    - userfaultfd: don't block on the last VM updates at exit time
+    - ovl: copy new uid/gid into overlayfs runtime inode
+    - ovl: fix getcwd() failure after unsuccessful rmdir
+    - [mips*] smp.c: Fix uninitialised temp_foreign_map
+    - block: don't optimize for non-cloned bio in bio_get_last_bvec()
+    - target: Drop incorrect ABORT_TASK put for completed commands
+  * netfilter: x_tables: check for size overflow (CVE-2016-3135)
+
+  [ Ian Campbell ]
+  * [arm64] Enable ARCH_HISI (Hisilicon) and the set of currently available
+    drivers (Power, Thermal, MMC) (Closes: #812540)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 17 Mar 2016 01:25:23 +0000
+
+linux (4.4.4-2) unstable; urgency=medium
+
+  * Ignore ABI changes in sdhci* modules (fixes FTBFS on armhf)
+  * udeb: Add dependency from mmc-modules to crc-modules (fixes FTBFS on arm64)
+  * [hppa] Ignore ABI changes in built-in drm_kms_helper code (fixes FTBFS)
+  * [powerpc*] Revert "powerpc: Simplify module TOC handling"; it is not needed
+    to fix #808043 and causes a regression on ppc64el
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 09 Mar 2016 02:15:48 +0000
+
+linux (4.4.4-1) unstable; urgency=medium
+
+  [ Salvatore Bonaccorso ]
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.3
+    - [x86] mm: Fix types used in pgprot cacheability flags translations
+    - [x86] mm/pat: Avoid truncation when converting cpa->numpages to address
+    - [x86] uaccess/64: Make the __copy_user_nocache() assembly code
+      more readable
+    - [x86] uaccess/64: Handle the caching of 4-byte nocache copies
+      properly in __copy_user_nocache()
+    - [x86] mm: Fix vmalloc_fault() to handle large pages properly
+    - ALSA: hda - Cancel probe work instead of flush at remove
+    - ALSA: pcm: Fix rwsem deadlock for non-atomic PCM stream
+    - ALSA: seq: Fix leak of pool buffer at concurrent writes
+    - ALSA: seq: Fix double port list deletion
+    - [armhf] phy: twl4030-usb: Relase usb phy on unload
+    - [armhf] phy: twl4030-usb: Fix unbalanced pm_runtime_enable on
+      module reload
+    - staging/speakup: Use tty_ldisc_ref() for paste kworker
+    - pty: fix possible use after free of tty->driver_data
+    - pty: make sure super_block is still valid in final /dev/tty close
+    - tty: Add support for PCIe WCH382 2S multi-IO card
+    - [x86] serial: 8250_pci: Add Intel Broadwell ports
+    - [armhf] serial: omap: Prevent DoS using unprivileged ioctl(TIOCSRS485)
+    - ext4: fix scheduling in atomic on group checksum failure
+    - ext4: fix potential integer overflow
+    - ext4: don't read blocks from disk after extents being swapped
+    - btrfs: handle invalid num_stripes in sys_array
+    - Btrfs: fix fitrim discarding device area reserved for boot loader's use
+    - Revert "btrfs: clear PF_NOFREEZE in cleaner_kthread()"
+    - btrfs: properly set the termination value of ctx->pos in readdir
+    - Btrfs: fix invalid page accesses in extent_same (dedup) ioctl
+    - Btrfs: fix page reading in extent_same ioctl leading to csum errors
+    - Btrfs: fix hang on extent buffer lock caused by the inode_paths ioctl
+    - Btrfs: fix direct IO requests not reporting IO error to user space
+    - ptrace: use fsuid, fsgid, effective creds for fs access checks
+    - tracing: Fix freak link error caused by branch tracer
+    - tracepoints: Do not trace when cpu is offline
+    - klist: fix starting point removed bug in klist iterators
+    - scsi: add Synology to 1024 sector blacklist
+    - iscsi-target: Fix potential dead-lock during node acl delete
+    - SCSI: fix crashes in sd and sr runtime PM
+    - drivers/scsi/sg.c: mark VMA as VM_IO to prevent migration
+    - scsi_dh_rdac: always retry MODE SELECT on command lock violation
+    - SCSI: Add Marvell Console to VPD blacklist
+    - scsi: fix soft lockup in scsi_remove_target() on module removal
+    - iio: adis_buffer: Fix out-of-bounds memory access
+    - iio:adc:ti_am335x_adc Fix buffered mode by identifying as software buffer.
+    - iio-light: Use a signed return type for ltr501_match_samp_freq()
+    - iio: add HAS_IOMEM dependency to VF610_ADC
+    - iio: add IIO_TRIGGER dependency to STK8BA50
+    - iio: dac: mcp4725: set iio name property in sysfs
+    - iio: light: acpi-als: Report data as processed
+    - iio: pressure: mpl115: fix temperature offset sign
+    - iio: inkern: fix a NULL dereference on error
+    - cifs: Ratelimit kernel log messages
+    - cifs: fix race between call_async() and reconnect()
+    - cifs_dbg() outputs an uninitialized buffer in cifs_readdir()
+    - cifs: fix erroneous return value
+    - NFS: Fix attribute cache revalidation
+    - pNFS/flexfiles: Fix an Oopsable typo in ff_mirror_match_fh()
+    - nfs: Fix race in __update_open_stateid()
+    - pNFS/flexfiles: Fix an XDR encoding bug in layoutreturn
+    - udf: limit the maximum number of indirect extents in a row
+    - udf: Prevent buffer overrun with multi-byte characters
+    - udf: Check output buffer length when converting name to CS0
+    - SUNRPC: Fixup socket wait for memory
+    - [powerpc] eeh: Fix PE location code
+    - [powerpc] eeh: Fix stale cached primary bus
+    - [powerpc] powernv: Fix stale PE primary bus
+    - [powerpc] ioda: Set "read" permission when "write" is set
+    - [armhf] mvebu: remove duplicated regulator definition in Armada 388 GP
+    - [arm64] mm: avoid calling apply_to_page_range on empty range
+    - [armel,armhf] 8519/1: ICST: try other dividends than 1
+    - [armel,armhf] 8517/1: ICST: avoid arithmetic overflow in icst_hz()
+    - [armhf] dts: Fix wl12xx missing clocks that cause hangs
+    - [armhf] dts: Fix omap5 PMIC control lines for RTC writes
+    - [armhf] dts: omap5-board-common: enable rtc and charging of backup battery
+    - [armhf] OMAP2+: Fix wait_dll_lock_timed for rodata
+    - [armhf] OMAP2+: Fix l2_inv_api_params for rodata
+    - [armhf] OMAP2+: Fix l2dis_3630 for rodata
+    - [armhf] OMAP2+: Fix save_secure_ram_context for rodata
+    - [armhf] OMAP2+: Fix ppa_zero_params and ppa_por_params for rodata
+    - [arm64] dma-mapping: fix handling of devices registered before
+      arch_initcall
+    - [arm,arm64] KVM: Fix reference to uninitialised VGIC
+    - [powerpc*] KVM: PPC: Fix emulation of H_SET_DABR/X on POWER8
+    - [powerpc*] KVM: PPC: Fix ONE_REG AltiVec support
+    - mm: soft-offline: check return value in second __get_any_page() call
+    - libnvdimm: fix namespace object confusion in is_uuid_busy()
+    - mm: fix mlock accouting
+    - mm: replace vma_lock_anon_vma with anon_vma_lock_read/write
+    - mm: fix regression in remap_file_pages() emulation
+    - Input: elantech - mark protocols v2 and v3 as semi-mt
+    - [x86] Input: i8042 - add Fujitsu Lifebook U745 to the nomux list
+    - string_helpers: fix precision loss for some inputs
+    - Input: vmmouse - fix absolute device registration
+    - [x86] iommu/vt-d: Don't skip PCI devices when disabling IOTLB
+    - [x86] iommu/amd: Correct the wrong setting of alias DTE in do_attach
+    - [x86] iommu/vt-d: Fix mm refcounting to hold mm_count not mm_users
+    - [x86] iommu/vt-d: Fix 64-bit accesses to 32-bit DMAR_GSTS_REG
+    - [x86] iommu/vt-d: Clear PPR bit to ensure we get more page
+      request interrupts
+    - Revert "xhci: don't finish a TD if we get a short-transfer event mid TD"
+    - xhci: Fix list corruption in urb dequeue at host removal
+    - fs/hugetlbfs/inode.c: fix bugs in hugetlb_vmtruncate_list()
+    - [s390x] numa: fix /proc/<pid>/numa_maps for hugetlbfs on s390
+    - memcg: only free spare array when readers are done
+    - radix-tree: fix race in gang lookup
+    - drivers/hwspinlock: fix race between radix tree insertion and lookup
+    - radix-tree: fix oops after radix_tree_iter_retry
+    - dump_stack: avoid potential deadlocks
+    - mm,thp: khugepaged: call pte flush at the time of collapse
+    - [x86] intel_scu_ipcutil: underflow in scu_reg_access()
+    - ipc/shm: handle removed segments gracefully in shm_mmap()
+    - devm_memremap_release(): fix memremap'd addr handling
+    - futex: Drop refcount if requeue_pi() acquired the rtmutex
+    - ovl: allow zero size xattr
+    - ovl: use a minimal buffer in ovl_copy_xattr
+    - ovl: check dentry positiveness in ovl_cleanup_whiteouts()
+    - ovl: root: copy attr
+    - ovl: setattr: check permissions before copy-up
+    - libxfs: pack the agfl header structure so XFS_AGFL_SIZE is correct
+    - xfs: inode recovery readahead can race with inode buffer creation
+    - Revert "xfs: clear PF_NOFREEZE for xfsaild kthread"
+    - xfs: log mount failures don't wait for buffers to be released
+    - prctl: take mmap sem for writing to protect against others
+    - timerfd: Handle relative timers with CONFIG_TIME_LOW_RES proper
+    - posix-timers: Handle relative timers with CONFIG_TIME_LOW_RES proper
+    - itimers: Handle relative timers with CONFIG_TIME_LOW_RES proper
+    - modules: fix modparam async_probe request
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.4
+    - af_iucv: Validate socket address length in iucv_sock_bind()
+    - gro: Make GRO aware of lightweight tunnels.
+    - tunnels: Allow IPv6 UDP checksums to be correctly controlled.
+    - lwt: fix rx checksum setting for lwt devices tunneling over ipv6
+    - tcp: fix NULL deref in tcp_v4_send_ack()
+    - af_unix: fix struct pid memory leak
+    - pptp: fix illegal memory access caused by multiple bind()s
+    - sctp: allow setting SCTP_SACK_IMMEDIATELY by the application
+    - tipc: fix connection abort during subscription cancel
+    - inet: frag: Always orphan skbs inside ip_defrag()
+    - tcp: beware of alignments in tcp_get_info()
+    - ipv6: enforce flowi6_oif usage in ip6_dst_lookup_tail()
+    - ipv6/udp: use sticky pktinfo egress ifindex on connect()
+    - ipv6: addrconf: Fix recursive spin lock call
+    - ipv6: fix a lockdep splat
+    - unix: correctly track in-flight fds in sending process user_struct
+      (regression in 4.3.3-6; CVE-2016-2550)
+    - tcp: do not drop syn_recv on all icmp reports
+    - net:Add sysctl_max_skb_frags
+    - tg3: Fix for tg3 transmit queue 0 timed out when too many gso_segs
+    - enic: increment devcmd2 result ring in case of timeout
+    - sctp: translate network order to host order when users get a hmacid
+    - net: Copy inner L3 and L4 headers as unaligned on GRE TEB
+    - flow_dissector: Fix unaligned access in __skb_flow_dissector when used by
+      eth_get_headlen
+    - bpf: fix branch offset adjustment on backjumps after patching
+      ctx expansion
+    - bonding: Fix ARP monitor validation
+    - ipv4: fix memory leaks in ip_cmsg_send() callers
+    - af_unix: Don't set err in unix_stream_read_generic unless there was
+      an error
+    - af_unix: Guard against other == sk in unix_dgram_sendmsg
+    - tipc: fix premature addition of node to lookup table
+    - tcp: md5: release request socket instead of listener
+    - qmi_wwan: add "4G LTE usb-modem U901"
+    - net/mlx4_en: Count HW buffer overrun only once
+    - net/mlx4_en: Choose time-stamping shift value according to HW frequency
+    - net/mlx4_en: Avoid changing dev->features directly in run-time
+    - l2tp: Fix error creating L2TP tunnels
+    - pppoe: fix reference counting in PPPoE proxy
+    - net_sched fix: reclassification needs to consider ether protocol changes
+    - route: check and remove route cache when we get route
+    - tcp/dccp: fix another race at listener dismantle
+    - IFF_NO_QUEUE: Fix for drivers not calling ether_setup()
+    - rtnl: RTM_GETNETCONF: fix wrong return value
+    - tipc: unlock in error path
+    - unix_diag: fix incorrect sign extension in unix_lookup_by_ino
+    - sctp: Fix port hash table size computation
+    - ext4: fix bh->b_state corruption
+    - [s390x] KVM: fix guest fprs memory leak
+    - devm_memremap: Fix error value when memremap failed
+    - efi: Make efivarfs entries immutable by default
+    - efi: Add pstore variables to the deletion whitelist
+    - bcache: fix a livelock when we cause a huge number of cache misses
+    - bcache: Add a cond_resched() call to gc
+    - bcache: clear BCACHE_DEV_UNLINK_DONE flag when attaching a backing device
+    - bcache: fix a leak in bch_cached_dev_run()
+    - bcache: unregister reboot notifier if bcache fails to unregister device
+    - bcache: allows use of register in udev to avoid "device_busy" error.
+    - bcache: prevent crash on changing writeback_running
+    - bcache: Change refill_dirty() to always scan entire disk if necessary
+    - dm thin: fix race condition when destroying thin pool workqueue
+    - can: ems_usb: Fix possible tx overflow
+    - usb: dwc3: Fix assignment of EP transfer resources
+    - USB: cp210x: add IDs for GE B650V3 and B850V3 boards
+    - USB: option: add support for SIM7100E
+    - USB: option: add "4G LTE usb-modem U901"
+    - [armhf] spi: omap2-mcspi: Prevent duplicate gpio_request
+    - iw_cxgb3: Fix incorrectly returning error on success
+    - [x86] drm/i915: shut up gen8+ SDE irq dmesg noise
+    - ocfs2: unlock inode if deleting inode from orphan fails
+    - mm: thp: fix SMP race condition between THP page fault and MADV_DONTNEED
+    - mm: numa: quickly fail allocations for NUMA balancing on full nodes
+    - genirq: Validate action before dereferencing it in
+      handle_irq_event_percpu()
+    - [s390x] KVM: fix memory overwrites when vx is disabled
+    - Btrfs: add missing brelse when superblock checksum fails
+    - Btrfs: igrab inode in writepage
+    - btrfs: statfs: report zero available if metadata are exhausted
+    - Btrfs: send, don't BUG_ON() when an empty symlink is found
+    - Btrfs: fix number of transaction units required to create symlink
+    - Btrfs: fix transaction handle leak on failure to create hard link
+    - Btrfs: Initialize btrfs_root->highest_objectid when loading tree root and
+      subvolume roots
+    - btrfs: initialize the seq counter in struct btrfs_device
+    - [s390x] fix normalization bug in exception table sorting
+    - [s390x] dasd: prevent incorrect length error under z/VM after PAV changes
+    - [s390x] dasd: fix refcount for PAV reassignment
+    - [s390x] dasd: fix performance drop
+    - [s390x] compat: correct restore of high gprs on signal return
+    - [s390x] fpu: signals vs. floating point control register
+    - locks: fix unlock when fcntl_setlk races with a close
+    - rtlwifi: rtl8192cu: Add missing parameter setup
+    - rtlwifi: rtl8192ce: Fix handling of module parameters
+    - rtlwifi: rtl8192de: Fix incorrect module parameter descriptions
+    - rtlwifi: rtl8723ae: Fix initialization of module parameters
+    - rtlwifi: rtl8192se: Fix module parameter initialization
+    - rtlwifi: rtl8188ee: Fix module parameter initialization
+    - rtlwifi: rtl8723be: Fix module parameter initialization
+    - [x86] mei: fix fasync return value on error
+    - [x86] mei: validate request value in client notify request ioctl
+    - namei: ->d_inode of a pinned dentry is stable only for positives
+    - [armhf] rc: sunxi-cir: Initialize the spinlock properly
+    - gspca: ov534/topro: prevent a division by 0
+    - vb2: fix a regression in poll() behavior for output,streams
+    - tda1004x: only update the frontend properties if locked
+    - dm snapshot: fix hung bios when copy error occurs
+    - dm: fix dm_rq_target_io leak on faults with .request_fn DM w/ blk-mq paths
+    - posix-clock: Fix return code on the poll method's error path
+    - mmc: sdhci-pci: Do not default to 33 Ohm driver strength for Intel SPT
+    - mmc: sdhci: Fix DMA descriptor with zero data length
+    - mmc: sdio: Fix invalid vdd in voltage switch power cycle
+    - mmc: mmc: Fix incorrect use of driver strength switching HS200 and HS400
+    - mmc: sdhci: Fix sdhci_runtime_pm_bus_on/off()
+    - mmc: core: Enable tuning according to the actual timing
+    - [armhf, arm64] mmc: mmci: fix an ages old detection error
+    - [x86] mmc: sdhci-acpi: Fix card detect race for Intel BXT/APL
+    - [x86] mmc: sdhci-pci: Fix card detect race for Intel BXT/APL
+    - mmc: sdhci: Allow override of mmc host operations
+    - mmc: sdhci: Allow override of get_cd() called from sdhci_request()
+    - [x86] Drivers: hv: vmbus: Fix a Host signaling bug
+    - Bluetooth: Use continuous scanning when creating LE connections
+    - Bluetooth: Add support of Toshiba Broadcom based devices
+    - Bluetooth: Fix incorrect removing of IRKs
+    - Bluetooth: 6lowpan: Fix kernel NULL pointer dereferences
+    - Bluetooth: 6lowpan: Fix handling of uncompressed IPv6 packets
+    - time: Avoid signed overflow in timekeeping_get_ns()
+    - cputime: Prevent 32bit overflow in time[val|spec]_to_cputime()
+    - [mips*] Revert "MIPS: Fix PAGE_MASK definition"
+    - [mips*el/loongson-3] Loongson-3: Fix SMP_ASK_C0COUNT IPI handler
+    - [mips*] hpet: Choose a safe value for the ETIME check
+    - [mips*] Fix buffer overflow in syscall_get_arguments()
+    - EDAC: Robustify workqueues destruction
+    - EDAC, mc_sysfs: Fix freeing bus' name
+    - [sparc64] fix incorrect sign extension in sys_sparc64_personality
+    - [armhf] clk: exynos: use irqsave version of spin_lock to avoid deadlock
+      with irqs
+    - [armhf] regulator: axp20x: Fix GPIO LDO enable value for AXP22x
+    - virtio_balloon: fix race by fill and leak
+    - virtio_balloon: fix race between migration and ballooning
+    - virtio_pci: fix use after free on release
+    - [x86] drm/vmwgfx: Fix an incorrect lock check
+    - [x86] drm/vmwgfx: Fix a width / pitch mismatch on framebuffer updates
+    - [x86] drm/vmwgfx: respect 'nomodeset'
+    - [x86] drm/amdgpu: Fix off-by-one errors in amdgpu_vm_bo_map
+    - [x86] drm/amdgpu: call hpd_irq_event on resume
+    - [x86] drm/amdgpu: fix lost sync_to if scheduler is enabled.
+    - [x86] drm/amdgpu: fix tonga smu resume
+    - [x86] drm/amdgpu: fix amdgpu_bo_pin_restricted VRAM placing v2
+    - [x86] drm/amdgpu: no need to load MC firmware on fiji
+    - [x86] drm/amdgpu: move gmc7 support out of CIK dependency
+    - [x86] drm/amdgpu: iceland use CI based MC IP
+    - [x86] drm/amdgpu: The VI specific EXE bit should only apply to GMC
+      v8.0 above
+    - [x86] drm/amdgpu: pull topaz gmc bits into gmc_v7
+    - [x86] drm/amdgpu: drop topaz support from gmc8 module
+    - [x86] drm/amdgpu: don't load MEC2 on topaz
+    - [x86] drm/amdgpu: remove exp hardware support from iceland
+    - [x86] drm/amdgpu: fix s4 resume
+    - [x86] drm/amdgpu: remove unnecessary forward declaration
+    - [x86] drm/amdgpu: hold reference to fences in amdgpu_sa_bo_new (v2)
+    - [x86] drm/amdgpu: fix issue with overlapping userptrs
+    - [x86] drm/amdgpu: use post-decrement in error handling
+    - [x86] drm/amdgpu: Don't hang in amdgpu_flip_work_func on disabled crtc.
+    - [x86] drm/amdgpu/pm: adjust display configuration after powerstate
+    - drm/nouveau/kms: take mode_config mutex in connector hotplug path
+    - drm/nouveau/display: Enable vblank irqs after display engine is on again.
+      (regression in 4.4)
+    - drm/nouveau/disp/dp: ensure sink is powered up before attempting
+      link training
+    - drm/nouveau: platform: Fix deferred probe
+    - drm/radeon: Fix off-by-one errors in radeon_vm_bo_set_addr
+    - drm/radeon: Fix "slow" audio over DP on DCE8+
+    - drm/radeon: clean up fujitsu quirks
+    - drm/radeon: properly byte swap vce firmware setup
+    - drm/radeon: cleaned up VCO output settings for DP audio
+    - drm/radeon: Add a common function for DFS handling
+    - drm/radeon: fix DP audio support for APU with DCE4.1 display engine
+    - drm/radeon: mask out WC from BO on unsupported arches
+    - drm/radeon: hold reference to fences in radeon_sa_bo_new
+    - drm: fix missing reference counting decrease
+    - [x86] drm/i915: Restore inhibiting the load of the default context
+    - [x86] drm/i915: intel_hpd_init(): Fix suspend/resume reprobing
+    - [x86] drm/i915: Init power domains early in driver load
+    - [x86] drm/i915: Make sure DC writes are coherent on flush.
+    - [x86] drm/i915/dp: fall back to 18 bpp when sink capability is unknown
+    - [x86] drm/i915: Don't reject primary plane windowing with color keying
+      enabled on SKL+
+    - [x86] drm/i915/skl: Don't skip mst encoders in skl_ddi_pll_select()
+    - [x86] drm/i915/dsi: defend gpio table against out of bounds access
+    - [x86] drm/i915/dsi: don't pass arbitrary data to sideband
+    - [x86] drm/i915: fix error path in intel_setup_gmbus()
+    - drm/qxl: use kmalloc_array to alloc reloc_info in
+      qxl_process_single_command
+    - drm/radeon: use post-decrement in error handling
+    - drm: No-Op redundant calls to drm_vblank_off() (v2)
+    - drm: Prevent vblank counter bumps > 1 with active vblank clients. (v2)
+      (regression in 4.4)
+    - drm: Fix drm_vblank_pre/post_modeset regression from Linux 4.4
+    - drm: Fix treatment of drm_vblank_offdelay in drm_vblank_on() (v2)
+    - drm/radeon: Don't hang in radeon_flip_work_func on disabled crtc. (v2)
+    - drm/radeon/pm: adjust display configuration after powerstate
+    - make sure that freeing shmem fast symlinks is RCU-delayed
+    - [x86] toshiba_acpi: Fix blank screen at boot if transflective backlight is
+      supported
+    - [x86] ideapad-laptop: Add Lenovo ideapad Y700-17ISK to no_hw_rfkill
+      dmi list
+    - [x86] ideapad-laptop: Add Lenovo Yoga 700 to no_hw_rfkill dmi list
+    - [x86] ACPI / video: Add disable_backlight_sysfs_if quirk for the Toshiba
+      Portege R700
+    - [x86] ACPI / video: Add disable_backlight_sysfs_if quirk for the Toshiba
+      Satellite R830
+    - [x86] ACPI: Revert "ACPI / video: Add Dell Inspiron 5737 to the blacklist"
+    - [x86] ACPI / PCI / hotplug: unlock in error path in acpiphp_enable_slot()
+    - nfit: fix multi-interface dimm handling, acpi6.1 compatibility
+    - dmaengine: dw: fix cyclic transfer setup
+    - dmaengine: dw: fix cyclic transfer callbacks
+    - dmaengine: dw: disable BLOCK IRQs for non-cyclic xfer
+    - IB/cm: Fix a recently introduced deadlock
+    - IB/qib: fix mcast detach when qp not attached
+    - IB/qib: Support creating qps with GFP_NOIO flag
+    - IB/mlx5: Expose correct maximum number of CQE capacity
+    - Thermal: initialize thermal zone device correctly
+    - Thermal: handle thermal zone device properly during system sleep
+    - Thermal: do thermal zone update after a cooling device registered
+    - hwmon: (dell-smm) Blacklist Dell Studio XPS 8000
+    - hwmon: (gpio-fan) Remove un-necessary speed_index lookup for thermal hook
+    - hwmon: (ads1015) Handle negative conversion values correctly
+    - cpufreq: pxa2xx: fix pxa_cpufreq_change_voltage prototype
+    - cpufreq: Fix NULL reference crash while accessing policy->governor_data
+    - seccomp: always propagate NO_NEW_PRIVS on tsync
+    - libceph: fix ceph_msg_revoke()
+    - libceph: don't bail early from try_read() when skipping a message
+    - libceph: use the right footer size when skipping a message
+    - libceph: don't spam dmesg with stray reply warnings
+    - sd: Optimal I/O size is in bytes, not sectors
+    - Staging: speakup: Fix getting port information
+    - cdc-acm:exclude Samsung phone 04e8:685d
+    - tick/nohz: Set the correct expiry when switching to nohz/lowres mode
+    - rfkill: fix rfkill_fop_read wait_event usage
+    - mac80211: Requeue work after scan complete for all VIF types.
+    - workqueue: handle NUMA_NO_NODE for unbound pool_workqueue lookup
+    - Revert "workqueue: make sure delayed work run in local cpu"
+    - ALSA: hda - Apply clock gate workaround to Skylake, too
+    - ALSA: hda - Fixing background noise on Dell Inspiron 3162
+    - target: Fix LUN_RESET active I/O handling for ACK_KREF
+    - target: Fix LUN_RESET active TMR descriptor handling
+    - target: Fix TAS handling for multi-session se_node_acls
+    - target: Fix remote-port TMR ABORT + se_cmd fabric stop
+    - target: Fix race with SCF_SEND_DELAYED_TAS handling
+    - qla2xxx: Fix stale pointer access.
+    - libata: fix sff host state machine locking while polling
+    - PCI/AER: Flush workqueue on device remove to avoid use-after-free
+    - cpuset: make mm migration asynchronous
+    - cgroup: make sure a parent css isn't offlined before its children
+    - writeback: keep superblock pinned during cgroup writeback
+      association switches
+    - phy: core: fix wrong err handle for phy_power_on
+    - [x86] i2c: i801: Adding Intel Lewisburg support for iTCO
+    - bio: return EINTR if copying to user space got interrupted
+    - block: fix use-after-free in dio_bio_complete
+    - nfs: fix nfs_size_to_loff_t
+    - NFSv4: Fix a dentry leak on alias use
+    - KVM: async_pf: do not warn on page allocation failures
+    - [armhf,arm64] KVM: vgic: Ensure bitmaps are long enough
+    - [x86] KVM: fix missed hardware breakpoints
+    - [x86] KVM: fix conversion of addresses to linear in 32-bit protected mode
+    - [x86] KVM: MMU: fix ubsan index-out-of-range warning
+    - [powerpc] eeh: Fix partial hotplug criterion
+    - tracing: Fix showing function event in available_events
+    - sunrpc/cache: fix off-by-one in qword_get()
+    - kernel/resource.c: fix muxed resource handling in __request_region()
+    - do_last(): don't let a bogus return value from ->open() et.al. to
+      confuse us
+    - [armhf] OMAP2+: Fix onenand initialization to avoid filesystem corruption
+    - [armhf] xen: correctly handle DMA mapping of compound pages
+    - xen/scsiback: correct frontend counting
+    - xen/pciback: Check PF instead of VF for PCI_COMMAND_MEMORY
+    - xen/pciback: Save the number of MSI-X entries to be copied later.
+    - xen/pcifront: Fix mysterious crashes when NUMA locality information
+      was extracted.
+    - should_follow_link(): validate ->d_seq after having decided to follow
+    - do_last(): ELOOP failure exit should be done after leaving RCU mode
+    - [x86] mpx: Fix off-by-one comparison with nr_registers
+    - [x86] entry/compat: Add missing CLAC to entry_INT80_32
+    - [x86] irq: Call chip->irq_set_affinity in proper context
+    - [x86] irq: Fix a race in x86_vector_free_irqs()
+    - [x86] irq: Validate that irq descriptor is still active
+    - [x86] irq: Do not use apic_chip_data.old_domain as temporary buffer
+    - [x86] irq: Reorganize the return path in assign_irq_vector
+    - [x86] irq: Reorganize the search in assign_irq_vector
+    - [x86] irq: Check vector allocation early
+    - [x86] irq: Copy vectormask instead of an AND operation
+    - [x86] irq: Remove offline cpus from vector cleanup
+    - [x86] irq: Clear move_in_progress before sending cleanup IPI
+    - [x86] irq: Remove the cpumask allocation from send_cleanup_vector()
+    - [x86] irq: Remove outgoing CPU from vector cleanup mask
+    - [x86] irq: Call irq_force_move_complete with irq descriptor
+    - [x86] irq: Plug vector cleanup race
+    - IB/cma: Fix RDMA port validation for iWarp
+    - security: let security modules use PTRACE_MODE_* with bitmasks
+    - iwlwifi: dvm: fix WoWLAN
+    - iwlwifi: pcie: properly configure the debug buffer size for 8000
+    - iwlwifi: update and fix 7265 series PCI IDs
+    - iwlwifi: mvm: don't allow sched scans without matches to be started
+
+  [ Roger Shimizu ]
+  * [armhf] dts: imx6dlq-wandboard-revb1: use unique model id
+    (Closes: #813881).
+  * [armel] dts: Add various device-tree fixes and improvements for
+    Buffalo Linkstation devices.
+
+  [ Ben Hutchings ]
+  * udeb: Include more modules, including those needed on Firefly-RK3288,
+    thanks to Vagrant Cascadian (Closes: #815476)
+    - [armhf] core-modules: Include regulator drivers by default
+    - mmc-modules: Include MMC controller drivers by default
+    - mmc-modules: Depends on usb-modules
+    - usb-modules: Include USB PHY drivers by default
+  * uas: Fix high-order alloc
+  * Fix/ignore module ABI changes in 4.4.4 as appropriate
+  * Revert "drm/radeon: call hpd_irq_event on resume", reported to cause
+    regressions (crash/hang) on some systems
+  * [powerpc*] Fix module linking to work with binutils 2.26 (Closes: #808043):
+    - Simplify module TOC handling
+    - Fix dedotify for binutils >= 2.26
+
+  [ Ian Campbell ]
+  * [armhf] dts: Add DTB for Novena, patches from Vagrant Cascadian
+    (Closes: #815324)
+
+  [ Uwe Kleine-König ]
+  * [armhf] enable AXP20X_POWER (Closes: #815971)
+  * [rt] Update to 4.4.3-rt9
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 07 Mar 2016 19:27:18 +0000
+
+linux-tools (4.4-4) unstable; urgency=medium
+
+  * hyperv-daemons: Only build the progarams on x86 (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 21 Feb 2016 16:57:55 +0000
+
+linux-tools (4.4-3) unstable; urgency=medium
+
+  * hyperv-daemons: Add init scripts
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 21 Feb 2016 15:07:55 +0000
+
+linux (4.4.2-3) unstable; urgency=medium
+
+  * [x86] efi-bgrt: Fix kernel panic when mapping BGRT data (Closes: #815125)
+  * [x86] efi-bgrt: Replace early_memremap() with memremap()
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 21 Feb 2016 13:11:18 +0000
+
+linux-tools (4.4-2) unstable; urgency=medium
+
+  * linux-perf: Include version number in strace groups installation directory
+    (Closes: #813080)
+  * [alpha,sh4] Attempt to fix build failures
+  * Build fixdep under debian/build and clean it up properly
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 19 Feb 2016 17:11:29 +0000
+
+linux (4.4.2-2) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * udeb: Make DAC960 and cciss optional in scsi-modules again
+    (fixes FTBFS on armhf, arm64)
+  * [armel,armhf] net: mv643xx_eth: fix packet corruption with TSO and tiny
+    unaligned packets. (Closes: #814681)
+  * [mipsel/loongson-2f] udeb: Add i2c-modules to avoid duplicate modules
+
+  [ Martin Michlmayr ]
+  * [arm64] Create i2c-modules udeb to avoid duplicate modules.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 19 Feb 2016 14:48:52 +0000
+
+linux-tools (4.4-1) unstable; urgency=medium
+
+  * Upload to unstable
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 18 Feb 2016 01:30:50 +0000
+
+linux (4.4.2-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.2
+    - ALSA: usb-audio: avoid freeing umidi object twice (CVE-2016-2384)
+
+  [ Ben Hutchings ]
+  * Set ABI to 1
+  * iw_cxgb3: Fix incorrectly returning error on success (CVE-2015-8812)
+  * fs/hugetlbfs/inode.c: fix bugs in hugetlb_vmtruncate_list() (CVE-2016-0617)
+    (regression in 4.3)
+  * af_unix: Guard against other == sk in unix_dgram_sendmsg
+    (regression in 4.2.6-2)
+  * Revert "workqueue: make sure delayed work run in local cpu"
+    (regression in 4.3)
+  * af_unix: Don't set err in unix_stream_read_generic unless there was an error
+    (regression in 4.4, 4.3.4)
+  * bpf: fix branch offset adjustment on backjumps after patching ctx expansion
+    (CVE-2016-2383)
+  * udeb: Combine scsi-{common,extra}-modules with scsi-modules
+  * udeb: Use wildcards to include entire classes of drivers:
+    - input-modules: Include HID drivers by default
+    - nic{,-pcmcia,-usb,-wireless}-modules: Include Ethernet, USB and wireless
+      drivers by default
+    - {pata,sata}-modules: Include ATA drivers by default
+    - sound-modules: Include sound drivers by default
+    - scsi-modules: Include SCSI drivers by default
+    - usb-modules: Include USB host drivers by default
+    - usb-serial-modules: Include USB serial drivers by default
+    - usb-storage-modules: Include USB storage drivers by default
+  * udeb: Remove some obsolete drivers:
+    - nic-modules: Remove FDDI and HIPPI drivers, and inet_lro module
+    - nic-pcmcia-modules: Remove Arcnet drivers
+  * udeb: Move most USB wireless drivers from nic-usb-modules to
+    nic-wireless-modules
+  * udeb: Really add virtio_input to virtio-modules (not input-modules)
+  * [x86] Fix issues resulting in W+X pages:
+    - [amd64] efi: Build our own page table structure
+    - [i386/686-pae] mm: Fix types used in pgprot cacheability flags
+      translations
+    - [i386/686-pae] PCI: Set pci=nobios by default
+  * IFF_NO_QUEUE: Fix for drivers not calling ether_setup() (regression in 4.3)
+  * udeb: Fix issues with wildcards that caused FTBFS on armhf, thanks to
+    Karsten Merker
+
+  [ Roger Shimizu ]
+  * Enable TTY_PRINTK as module (Closes: #814540).
+
+  [ Uwe Kleine-König ]
+  * [rt] Update to 4.4.1-rt6
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 17 Feb 2016 21:20:12 +0000
+
+linux (4.4.1-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.1
+
+  [ Ricardo Salveti ]
+  * Extending ARM64 support:
+    - config: enabling support for the AMD Seattle platform
+    - nic-modules: adding amd-xgbe
+    - sata-modules: adding ahci_platform, required by AMD Overdrive
+    - config: enabling the cpuidle ARM driver
+    - config: enable multi-core scheduler support by default
+    - config: enable PCI generic host bridge by default
+    - config: enable CRYPTO_CRC32_ARM64 by default
+
+  [ Ian Campbell ]
+  * [arm64] Enabled support for QCOM platforms, options recommended by Martin
+    Michlmayr. (Closes: #812386)
+  * [armel/marvell] Declare breaks against flash-kernel << 3.57~ in order to
+    force a version which understands about the merge of kirkwood and orion5x
+    flavours into marvell.
+
+  [ Ben Hutchings ]
+  * linux-image: Make failure of depmod fatal, rather than asking what to do
+  * [mips*] linux-image: Remove debconf question for requirement of initramfs
+  * linux-image: Remove unnecessary debconf initialisations
+  * linux-{headers,image}: Remove support for version-specific hooks
+  * linux-headers: Make postinst script less verbose (see: #734266)
+  * [armel] Replace kirkwood and orion5x flavours with a 'marvell' flavour
+  * [armel/marvell] Adjust configuration to reduce image size:
+    - Disable support for DNS-323 as the kernel image was already too large
+      for this machine
+      + Disable MACH_DNS323
+      + Change MTD_CFI_AMDSTD from built-in to module
+    - input: Disable KEYBOARD_ATKBD
+    - mtd: Change JFFS2_FS, MTD_SPI_NOR, and M25P80 from built-in to modules
+  * [rt] Update to 4.4.1-rt5:
+    - genirq: Add default affinity mask command line option
+    - latencyhist: disable jump-labels
+    - kernel/perf: mark perf_cpu_context's timer as irqsafe
+  * bnx2x: Enable BNX2X_VXLAN
+  * cgroups: Enable CGROUP_PIDS
+  * crypto: Enable CRYPTO_CHACHA20, CRYPTO_POLY1305, CRYPTO_CHACHA20POLY1305,
+    CRYPTO_USER_API_AEAD as modules
+  * [x86] crypto: Enable CRYPTO_DEV_QAT_DH895xCC, CRYPTO_DEV_QAT_DH895xCCVF
+    as modules
+  * [amd64] crypto: Enable CRYPTO_CHACHA20_X86_64, CRYPTO_DES3_EDE_X86_64,
+    CRYPTO_POLY1305_X86_64 as modules
+  * [x86] dmaengine: Enable INTEL_IDMA64 as module
+  * debug: Enable SCHED_STACK_END_CHECK
+  * dm-cache: Enable DM_CACHE_SMQ as module
+  * ethernet: Enable BNXT, QED, QEDE as modules
+  * hci_uart: Enable BT_HCIUART_QCA
+  * HID: Enable HID_CORSAIR, HID_GEMBIRD as modules
+  * [x86] hwmon: Enable SENSORS_I5500 as module
+  * [x86] IB: Enable INFINIBAND_USNIC as module
+  * iio/light: Enable ACPI_ALS as module
+  * [x86] input: Enable SURFACE_PRO3_BUTTON as module
+  * [x86] iommu: Enable INTEL_IOMMU_SVM
+  * ipvs: Enable IP_VS_OVF as module
+  * media: Enable DVB_NETUP_UNIDVB, USB_GSPCA_TOUPTEK,_VIDEO_DT3155 as modules
+  * [x86] mfd: Enable MFD_INTEL_LPSS_ACPI, MFD_INTEL_LPSS_PCI as modules
+  * [amd64] mic: Enable INTEL_MIC_X100_DMA, MIC_COSM, SCIF, SCIF_BUS as modules
+  * [powerpc*/*64*] misc: Enable GENWQE as module
+  * net: Enable LWTUNNEL, NET_L3_MASTER_DEV; and MPLS_IPTUNNEL, NET_VRF
+    as modules
+  * [amd64] net: Enable FUJITSU_ES as module
+  * netfilter: Really enable NF_TABLES_NETDEV, NFT_REDIR_IPV4, NFT_REDIR_IPV6
+    as modules
+  * net/phy: Enable AQUANTIA_PHY, DP83848_PHY, MICROCHIP_PHY, TERANETICS_PHY
+    as modules
+  * net/sched: Really enable NET_CLS_FLOWER as module
+  * net/usb: Enable USB_LAN78XX, USB_NET_CH9200 as modules
+  * nfsd: Enable NFSD_PNFS
+  * [x86] pinctrl: Enable PINCTRL_BROXTON, PINCTRL_SUNRISEPOINT
+  * [x86] rfkill: Enable DELL_RBTN as module
+  * serial: Enable SERIAL_OF_PLATFORM as module
+  * sound/firewire: Enable SND_FIREWIRE_DIGI00X, SND_FIREWIRE_TASCAM as modules
+  * [x86] thermal: Enable INTEL_PCH_THERMAL, INTEL_SOC_DTS_THERMAL as modules;
+    disable THERMAL_OF
+  * [x86] Enable INTEL_PMC_IPC as module
+  * vfs,nvdimm: Really enable FS_DAX
+  * [amd64] mm,nvdimm: Disable ZONE_DMA; enable ZONE_DEVICE, NVDIMM_PFN
+    - This disables drivers for some AC'97 sound cards
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 10 Feb 2016 02:02:14 +0000
+
+linux (4.4-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_4.4
+
+  [ Ben Hutchings ]
+  * [armhf] Enable EXTCON_USB_GPIO, ENSORS_GPIO_FAN as modules, and
+    USB_DWC3_DUAL_ROLE instead of USB_DWC3_HOST (Closes: #810048)
+  * [rt] Update to 4.4-rt2
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 19 Jan 2016 22:25:06 +0000
+
+linux-tools (4.4-1~exp2) experimental; urgency=medium
+
+  * linux-perf: Fix FTBFS with gcc 6 (used on hppa, sparc64)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 19 Jan 2016 22:11:13 +0000
+
+linux-tools (4.4-1~exp1) experimental; urgency=medium
+
+  * New upstream release
+
+  [ Ben Hutchings ]
+  * linux-perf: Fix reading of build-id from vDSO
+  * linux-perf: Leave -rc suffix out of version in package description
+  * debian.py: Implement stable order of fields not in the predefined order
+  * genorig.py: Make orig tarballs really reproducible:
+    - Override umask while extracting/exporting files
+    - Override user and group names in tarball
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 19 Jan 2016 00:31:02 +0000
+
+linux (4.4~rc8-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [rt] Update to 4.4-rc6-rt1 and re-enable
+  * [rt] Fix build error in kernel/time/hrtimer.c
+  * [rt] latency_hist: Update sched_switch probe
+  * [armhf] Add support for BCM2836 and Raspberry Pi 2:
+    - pwm: bcm2835: Calculate scaler in ->config()
+    - pwm: bcm2835: Prevent division by zero
+    - drm: Create a driver hook for allocating GEM object structs
+    - drm/vc4: Add a BO cache
+    - drm/vc4: Add create and map BO ioctls
+    - drm/vc4: Add an API for creating GPU shaders in GEM BOs
+    - drm/vc4: Fix a typo in a V3D debug register
+    - drm/vc4: Bind and initialize the V3D engine
+    - drm/vc4: Add support for drawing 3D frames
+    - drm/vc4: Add support for async pageflips
+    - drm/vc4: Add an interface for capturing the GPU state after a hang
+    - drm/vc4: copy_to_user() returns the number of bytes remaining
+    - drm/vc4: allocate enough memory in vc4_save_hang_state()
+    - drm/vc4: fix an error code
+    - bcm2835: Add a compat string for bcm2836 machine probe
+    - bcm2835: Add Kconfig support for bcm2836
+    - bcm2835: Define two new packets from the latest firmware
+    - bcm2835: add rpi power domain driver
+    - bcm2835: Split the DT for peripherals from the DT for the CPU
+    - bcm2835: Move the CPU/peripheral include out of common RPi DT
+    - bcm2835: Add devicetree for bcm2836 and Raspberry Pi 2 B
+    - bcm2835: Add the auxiliary clocks to the device tree
+    - Enable ARCH_BCM, ARCH_BCM2835, DMA_BCM2835, BCM2835_MBOX,
+      RASPBERRYPI_FIRMWARE, RASPBERRYPI_POWER
+    - Enable DRM_VC4, I2C_BCM2835, MMC_SDHCI_BCM2835, PWM_BCM2835, SPI_BCM2835,
+      SPI_BCM2835AUX, USB_DWC2, BCM2835_WDT, SND_BCM2835_SOC_I2S as modules
+    - udeb: Add sdhci-bcm2835 to mmc-modules, dwc2 to usb-modules
+  * [armhf] Enable INPUT_AXP20X_PEK, CAN_SUN4I, SND_SUN4I_CODEC as modules
+    (Closes: #808623)
+  * [x86] nvdimm: Change X86_PMEM_LEGACY from built-in to module
+  * [x86] Enable DEBUG_WX, X86_INTEL_MPX
+
+  [ Ian Campbell ]
+  * [armel/kirkwood] Updates/clarifications to kernel size limitations from
+    Martin Michlmayr. (Closes: #809528)
+  * [armhf] Enable support for Rockchip devices. (Closes: #809083)
+  * [armhf] Enable basic support for DRA7XX systems, such as Beagle-x15.
+    (Closes: #807624)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 04 Jan 2016 17:23:28 +0000
+
+linux (4.4~rc6-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+    - include/linux/mmdebug.h: should include linux/bug.h
+      (fixes FTBFS on arm64)
+
+  [ Ben Hutchings ]
+  * [sparc64] udeb: Replace mpt2sas with mpt3sas in scsi-common-modules
+    (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 21 Dec 2015 17:30:10 +0000
+
+linux (4.4~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [arm64] Drop now-redundant patches for X-Gene (fixes FTBFS)
+  * [s390x] udeb: Add crc-modules package (fixes FTBFS)
+  * cirrus,mgag200: Drop patches for compatibility with wheezy userland
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 16 Dec 2015 17:16:09 +0000
+
+linux-tools (4.4~rc4-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 14 Dec 2015 01:28:50 +0000
+
+linux (4.4~rc4-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update support patches to aufs4.x-rcN-20151123
+  * udeb: Make md-modules depend on crc-modules (Closes: #807661)
+  * [armel/kirkwood,armhf] crypto: Enable CRYPTO_DEV_MARVELL_CESA as module
+    (Closes: #807634)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 13 Dec 2015 16:25:45 +0000
+
+linux (4.3.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.3.4
+    - toshiba_acpi: Initialize hotkey_event_type variable (regression in 4.3)
+    - USB: add quirk for devices with broken LPM
+    - usb: core : hub: Fix BOS 'NULL pointer' kernel panic
+    - pppoe: fix memory corruption in padt work structure (regression in 4.1)
+    - ipv6: keep existing flags when setting IFA_F_OPTIMISTIC
+      (regression in 4.1)
+    - vxlan: fix incorrect RCO bit in VXLAN header (regression in 4.0)
+    - sctp: update the netstamp_needed counter when copying sockets
+    - sctp: also copy sk_tsflags when copying the socket (regression in 3.17)
+    - r8152: fix lockup when runtime PM is enabled (regression in 4.2)
+    - ipv6: sctp: clone options to avoid use after free
+    - phy: micrel: Fix finding PHY properties in MAC node. (regression in 4.2)
+    - openvswitch: Fix helper reference leak
+    - openvswitch: Respect conntrack zone even if invalid
+    - net: fix IP early demux races
+    - vlan: Fix untag operations of stacked vlans with REORDER_HEADER off
+    - skbuff: Fix offset error in skb_reorder_vlan_header
+    - net: check both type and procotol for tcp sockets
+    - net_sched: make qdisc_tree_decrease_qlen() work for non mq
+      (regression in 4.3.3)
+    - net: fix uninitialized variable issue
+    - ipv6: automatically enable stable privacy mode if stable_secret set
+    - inet: tcp: fix inetpeer_set_addr_v4() (regression in 4.3)
+    - rhashtable: Enforce minimum size on initial hash table (regression in 4.1)
+    - fou: clean up socket with kfree_rcu
+    - af_unix: Revert 'lock_interruptible' in stream receive code
+    - tcp: restore fastopen with no data in SYN packet (regression in 4.0)
+    - rhashtable: Fix walker list corruption (regression in 4.1)
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.3.5
+    - [x86] mpx: Fix instruction decoder condition
+    - [x86] signal: Fix restart_syscall number for x32 tasks
+    - [x86] paravirt: Prevent rtc_cmos platform device init on PV guests
+      (regression in 4.2)
+    - [powerpc*] KVM: Book3S HV: Don't dynamically split core when already split
+      (regression in 4.3)
+    - [powerpc*] KVM: Book3S HV: Prohibit setting illegal transaction state
+      in MSR
+    - [x86] boot: Double BOOT_HEAP_SIZE to 64KB
+    - [x86] mm: Add barriers and document switch_mm()-vs-flush synchronization
+      (CVE-2016-2069)
+    - timers: Use proper base migration in add_timer_on()
+    - ipmi: move timer init to before irq is setup
+    - ALSA: hda - Disable 64bit address for Creative HDA controllers
+    - ALSA: hda - Fix lost 4k BDL boundary workaround (regression in 4.2)
+    - [x86] ALSA: hda - Fix noise on Dell Latitude E6440 (regression in 4.1)
+    - ALSA: hda - Skip ELD notification during system suspend
+      (regression in 4.3)
+    - ALSA: seq: Fix missing NULL check at remove_events ioctl
+    - ALSA: usb-audio: Avoid calling usb_autopm_put_interface() at disconnect
+    - ALSA: seq: Fix race at timer setup and close
+    - [x86] ALSA: hda - Fix white noise on Dell Latitude E5550
+      (regression in 4.1)
+    - ALSA: usb-audio: Fix mixer ctl regression of Native Instrument devices
+      (regression in 3.19)
+    - ALSA: timer: Harden slave timer list handling
+    - ALSA: timer: Fix race among timer ioctls
+    - ALSA: timer: Fix double unlink of active_list
+    - [x86] ALSA: hda - Add fixup for Dell Latitidue E6540 (regression in 4.1)
+    - ALSA: seq: Fix snd_seq_call_port_info_ioctl in compat mode
+    - ALSA: pcm: Fix snd_pcm_hw_params struct copy in compat mode
+    - ALSA: control: Avoid kernel warnings from tlv ioctl with numid 0
+    - ALSA: timer: Handle disconnection more safely
+    - ASoC: rt286: Fix run time error while modifying const data
+      (regression in 4.3)
+    - airspy: increase USB control message buffer size (regression in 3.17)
+    - USB: fix invalid memory access in hub_activate()
+    - openvswitch: correct encoding of set tunnel action attributes
+      (regression in 4.3)
+    - veth: don’t modify ip_summed; doing so treats packets with bad checksums
+      as good.
+    - ipv6/addrlabel: fix ip6addrlbl_get()
+    - addrconf: always initialize sysctl table data
+    - connector: bump skb->users before callback invocation
+    - af_unix: Fix splice-bind deadlock
+    - bridge: Only call /sbin/bridge-stp for the initial network namespace
+    - net: filter: make JITs zero A for SKF_AD_ALU_XOR_X (regression in 3.16)
+    - net: sched: fix missing free per cpu on qstats (regression in 3.18)
+    - net: possible use after free in dst_release
+    - tcp: fix zero cwnd in tcp_cwnd_reduction (CVE-2016-2070)
+      (regression in 4.3)
+    - net: sctp: prevent writes to cookie_hmac_alg from accessing invalid memory
+    - ipv6: tcp: add rcu locking in tcp_v6_send_synack()
+    - tcp_yeah: don't set ssthresh below 2
+    - udp: disallow UFO for sockets with SO_NO_CHECK option (regression in 4.0)
+    - net: preserve IP control block during GSO segmentation
+    - phonet: properly unshare skbs in phonet_rcv() (regression in 4.0)
+    - net: bpf: reject invalid shifts
+    - ipv6: update skb->csum when CE mark is propagated
+    - batman-adv: Avoid recursive call_rcu for batadv_bla_claim
+    - batman-adv: Avoid recursive call_rcu for batadv_nc_node
+    - batman-adv: Drop immediate batadv_orig_ifinfo free function
+    - batman-adv: Drop immediate batadv_neigh_node free function
+    - batman-adv: Drop immediate neigh_ifinfo free function
+    - batman-adv: Drop immediate batadv_hard_iface free function
+    - batman-adv: Drop immediate orig_node free function
+    - team: Replace rcu_read_lock with a mutex in team_vlan_rx_kill_vid
+    - xfrm: dst_entries_init() per-net dst_ops
+    - [powerpc*] tm: Block signal return setting invalid MSR state
+    - [powerpc*] tm: Check for already reclaimed tasks
+    - [ppc64el] opal-irqchip: Fix double endian conversion (regression in 4.2)
+    - [powerpc*] opal-irqchip: Fix deadlock introduced by "Fix double endian
+      conversion"
+    - [powerpc*] powernv: pr_warn_once on unsupported OPAL_MSG type
+    - [powerpc*] Make value-returning atomics fully ordered
+    - [powerpc*] Make {cmp}xchg* and their atomic_ versions fully ordered
+    - [arm64] bpf: fix div-by-zero case
+    - [arm64] bpf: fix mod-by-zero case
+    - [arm64] cmpxchg_dbl: fix return value type (regression in 4.3)
+    - [arm*] KVM: test properly for a PTE's uncachedness
+    - [arm64] KVM: Fix AArch32 to AArch64 register mapping
+    - [arm*] KVM: correct PTE uncachedness check
+    - [arm64] kernel: enforce pmuserenr_el0 initialization and restore
+    - [arm*] iommu/arm-smmu: Fix error checking for ASID and VMID allocation
+    - HID: wacom: Tie cached HID_DG_CONTACTCOUNT indices to report ID
+      (regression in 4.3)
+    - HID: wacom: Expect 'touch_max' touches if HID_DG_CONTACTCOUNT not present
+      (regression in 4.3)
+    - HID: core: Avoid uninitialized buffer access
+    - staging: lustre: echo_copy.._lsm() dereferences userland pointers directly
+    - direct-io: Fix negative return from dio read beyond eof
+    - fix the regression from "direct-io: Fix negative return from dio read
+      beyond eof"
+    - [arm64] KVM: Add workaround for Cortex-A57 erratum 834220
+    - [arm64] kernel: fix architected PMU registers unconditional access
+
+  [ Ben Hutchings ]
+  * fuse: break infinite loop in fuse_fill_write_pages() (CVE-2015-8785)
+  * SCSI: fix crashes in sd and sr runtime PM (Closes: #801925)
+  * rt2x00: fix monitor mode regression (regression in 4.2)
+  * pipe: limit the per-user amount of pages allocated in pipes (CVE-2013-4312)
+    [Original reference is incorrect; should be CVE-2016-2847.]
+  * [powerpc*] Enable CRYPTO_DEV_VMX and enable CRYPTO_DEV_VMX_ENCRYPT as
+    module (Closes: #813640)
+  * debian/copyright: Add licence information for drivers/crypto/vmx/*.pl
+  * udeb: Add hid-logitech-hidpp to input-modules (Closes: #796096)
+  * hwrng: n2 - Attach on T5/M5, T7/M7 SPARC CPUs (Closes: #809815)
+
+  [ Salvatore Bonaccorso ]
+  * netfilter: nf_nat_redirect: add missing NULL pointer check (CVE-2015-8787)
+
+  [ Aurelien Jarno ]
+  * [mips*] Backport math emulation fix from 4.5.
+  * [arm64] Enable RTC_DRV_EFI.
+
+  [ Hendrik Brueckner ]
+  * [s390x] udeb: include modules to mount ISOs (loop device)
+    (Closes: #812336)
+  * [s390x] udeb: include btrfs-modules (Closes: #812340)
+
+  [ Martin Michlmayr ]
+  * Include Device Tree model in reportbug script
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 06 Feb 2016 23:25:14 +0000
+
+linux (4.3.3-7) unstable; urgency=medium
+
+  * linux-image-dbg: Don't rely on upstream makefile to make .build-id
+    links to vDSO debuginfo (fixes FTBFS on arm64, s390)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 19 Jan 2016 17:29:21 +0000
+
+linux (4.3.3-6) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * debian.py: Implement stable order of fields in debian/tests/control
+  * debian.py: Implement stable order of fields not in the predefined order
+  * genorig.py: Make orig tarballs really reproducible:
+    - Override umask while extracting/exporting files
+    - Override user and group names in tarball
+  * xen/gntdev: Grant maps should not be subject to NUMA balancing
+    (Closes: #810472)
+  * gpio: Enable GPIO_SYSFS wherever GPIOLIB is enabled (Closes: #810085)
+  * [armhf] udeb: Include usbhid in input-modules (Closes: #809521)
+  * linux-image-dbg: Include debugging symbols for VDSOs
+  * [armel/kirkwood] power/reset: Re-enable POWER_RESET, POWER_RESET_GPIO
+    (regression in 3.17~rc5-1~exp1)
+  * usb: serial: visor: fix crash on detecting device without write_urbs
+    (CVE-2015-7566)
+  * tty: Fix unsafe ldisc reference via ioctl(TIOCGETD) (CVE-2016-0723)
+  * [x86] drm/vmwgfx: Fix a width / pitch mismatch on framebuffer updates
+  * bcache: Add upstream fixes marked for stable:
+    - fix a livelock when we cause a huge number of cache misses
+    - Add a cond_resched() call to gc
+    - clear BCACHE_DEV_UNLINK_DONE flag when attaching a backing device
+    - fix a leak in bch_cached_dev_run()
+    - unregister reboot notifier if bcache fails to unregister device
+    - allows use of register in udev to avoid "device_busy" error.
+    - prevent crash on changing writeback_running
+    - Change refill_dirty() to always scan entire disk if necessary
+  * KEYS: Fix keyring ref leak in join_session_keyring() (CVE-2016-0728)
+
+  [ Salvatore Bonaccorso ]
+  * unix: properly account for FDs passed over unix sockets (CVE-2013-4312)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 19 Jan 2016 00:41:31 +0000
+
+linux (4.3.3-5) unstable; urgency=medium
+
+  * [armhf] udeb: Fix duplication and circular dependency between core-modules
+    and usb-modules (really fixes FTBFS)
+    - Add core-modules as a dependency of usb-modules
+    - Remove gpio-viperboard from core-modules as it is unlikely to be needed
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 04 Jan 2016 00:45:27 +0000
+
+linux (4.3.3-4) unstable; urgency=medium
+
+  * [armhf] udeb: Remove pbias-regulator module from mmc-modules as it's now
+    in core-modules (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 03 Jan 2016 01:50:52 +0000
+
+linux (4.3.3-3) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * [ppc64*] drm: Enable DRM_AST as module (Closes: #808338)
+  * block: ensure to split after potentially bouncing a bio (Closes: #809082)
+  * pptp: verify sockaddr_len in pptp_bind() and pptp_connect() (CVE-2015-8569)
+  * bluetooth: Validate socket address length in sco_sock_bind() (CVE-2015-8575)
+  * [xen] Fix race conditions in back-end drivers (CVE-2015-8550, XSA-155)
+  * [xen] pciback: Fix state validation in MSI control operations
+    (CVE-2015-8551, CVE-2015-8852, XSA-157)
+  * ptrace: being capable wrt a process requires mapped uids/gids
+    (CVE-2015-8709)
+  * KEYS: Fix race between read and revoke (CVE-2015-7550)
+  * [armhf] udeb: Add modular clock, GPIO, PCIe PHY and regulator drivers to
+    core-modules (Closes: #809521)
+  * [armhf] udeb: Add more USB PHY drivers to usb-modules
+  * drm/nouveau/pmu: do not assume a PMU is present (Closes: #809481)
+  * [x86] drm/i915: Don't compare has_drrs strictly in pipe config
+    (Closes: #808720)
+  * [armhf] crypto: sun4i-ss - add missing statesize (Closes: #808625)
+  * Revert "xhci: don't finish a TD if we get a short transfer event mid TD"
+    (Closes: #808602, #808953, regression in 4.3-rc7)
+  * [x86] pinctrl: Enable PINCTRL_CHERRYVIEW (Closes: #808044)
+  * [s390x] udeb: Add crc-modules package (Closes: #808051)
+
+  [ Salvatore Bonaccorso ]
+  * ovl: fix permission checking for setattr (CVE-2015-8660)
+  * [x86] kvm: Reload pit counters for all channels when restoring state
+    (CVE-2015-7513)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 02 Jan 2016 16:45:46 +0000
+
+linux-tools (4.3.1-2) unstable; urgency=medium
+
+  * Upload for Perl 5.22 transition (Closes: #808329)
+  * debian/rules: Fix check for binNMU, broken since 4.1.4-1
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 19 Dec 2015 03:47:10 +0000
+
+linux (4.3.3-2) unstable; urgency=medium
+
+  * [armhf,sparc64] Force ZONE_DMA to be enabled, reversing ABI change in
+    4.3.3 (fixes FTBFS)
+  * [sh4] Disable CC_STACKPROTECTOR_STRONG temporarily (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 17 Dec 2015 18:21:52 +0000
+
+linux (4.3.3-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.3.2
+    - X.509: Fix the time validation [ver #2]
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.3.3
+    - r8169: fix kasan reported skb use-after-free. (regression in 4.3)
+    - af-unix: fix use-after-free with concurrent readers while splicing
+      (regression in 4.2)
+    - af_unix: don't append consumed skbs to sk_receive_queue
+      (regression in 4.2)
+    - af_unix: take receive queue lock while appending new skb
+      (regression in 4.2)
+    - af-unix: passcred support for sendpage (regression in 4.2)
+    - ipv6: Avoid creating RTF_CACHE from a rt that is not managed by fib6 tree
+      (regression in 4.2)
+    - ipv6: Check expire on DST_NOCACHE route
+    - ipv6: Check rt->dst.from for the DST_NOCACHE route (regression in 4.3)
+    - Revert "ipv6: ndisc: inherit metadata dst when creating ndisc requests"
+      (regression in 4.3)
+    - packet: only allow extra vlan len on ethernet devices
+    - packet: infer protocol from ethernet header if unset
+    - packet: fix tpacket_snd max frame len
+    - sctp: translate host order to network order when setting a hmacid
+    - net/mlx5e: Added self loopback prevention (regression in 4.3)
+    - net/mlx4_core: Fix sleeping while holding spinlock at rem_slave_counters
+      (regression in 4.2)
+    - ip_tunnel: disable preemption when updating per-cpu tstats
+    - net/ip6_tunnel: fix dst leak (regression in 4.3)
+    - tcp: disable Fast Open on timeouts after handshake
+    - tcp: fix potential huge kmalloc() calls in TCP_REPAIR
+    - tcp: initialize tp->copied_seq in case of cross SYN connection
+    - net, scm: fix PaX detected msg_controllen overflow in scm_detach_fds
+    - net: ipmr: fix static mfc/dev leaks on table destruction
+    - net: ip6mr: fix static mfc/dev leaks on table destruction
+    - vrf: fix double free and memory corruption on register_netdevice failure
+    - tipc: fix error handling of expanding buffer headroom (regression in 4.3)
+    - ipv6: distinguish frag queues by device for multicast and link-local
+      packets
+    - bpf, array: fix heap out-of-bounds access when updating elements
+    - ipv6: add complete rcu protection around np->opt
+    - net/neighbour: fix crash at dumping device-agnostic proxy entries
+    - ipv6: sctp: implement sctp_v6_destroy_sock()
+    - openvswitch: fix hangup on vxlan/gre/geneve device deletion
+    - net_sched: fix qdisc_tree_decrease_qlen() races
+    - btrfs: fix resending received snapshot with parent (regression in 4.2)
+    - Btrfs: fix file corruption and data loss after cloning inline extents
+    - Btrfs: fix regression when running delayed references (regression in 4.2)
+    - Btrfs: fix race leading to incorrect item deletion when dropping extents
+    - Btrfs: fix race leading to BUG_ON when running delalloc for nodatacow
+    - Btrfs: fix race when listing an inode's xattrs
+    - rbd: don't put snap_context twice in rbd_queue_workfn()
+    - ext4 crypto: fix memory leak in ext4_bio_write_page()
+    - ext4 crypto: fix bugs in ext4_encrypted_zeroout()
+    - ext4: fix potential use after free in __ext4_journal_stop
+      (regression in 4.2)
+    - ext4, jbd2: ensure entering into panic after recording an error in
+      superblock
+    - nfsd: serialize state seqid morphing operations
+    - nfsd: eliminate sending duplicate and repeated delegations
+    - nfs4: start callback_ident at idr 1
+    - nfs4: resend LAYOUTGET when there is a race that changes the seqid
+    - nfs: if we have no valid attrs, then don't declare the attribute cache
+      valid
+    - ocfs2: fix umask ignored issue
+    - block: fix segment split (regression in 4.3)
+    - ceph: fix message length computation
+    - Btrfs: fix regression running delayed references when using qgroups
+      (regression in 4.2)
+
+  [ Ben Hutchings ]
+  * net: add validation for the socket syscall protocol argument (CVE-2015-8543)
+  * [armel/kirkwood] udeb: Override inclusion of gpio_keys in input-modules
+    (fixes FTBFS)
+  * vrf: Fix broken backport of "vrf: fix double free and memory corruption on
+    register_netdevice failure" in 4.3.3
+  * net: Ignore ABI changes due to "ipv6: add complete rcu protection around
+    np->opt", which don't appear to affect out-of-tree modules
+  * tipc: Fix kfree_skb() of uninitialised pointer (regression in 4.3.3)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 15 Dec 2015 21:25:26 +0000
+
+linux-tools (4.3.1-1) unstable; urgency=medium
+
+  * New upstream stable update
+    - [x86] Add #AC to SVM_EXIT_REASONS
+
+  [ Ben Hutchings ]
+  * debian/bin/genorig.py: Add more files under arch/*/include/asm to file list
+    (fixes FTBFS on several architectures)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 14 Dec 2015 00:43:39 +0000
+
+linux-tools (4.3-1) unstable; urgency=medium
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 13 Dec 2015 03:47:05 +0000
+
+linux (4.3.1-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.3.1
+
+  [ Ben Hutchings ]
+  * Set ABI to 1
+  * [armhf] rtc: Enable RTC_DRV_DS1307, RTC_DRV_PCF8563, RTC_DRV_ARMADA38X
+    (Closes: #807632)
+  * [armhf] Enable MACH_ARMADA_375, MACH_ARMADA_38X, MACH_ARMADA_39X
+    (Closes: #807633)
+  * [armhf] net: Enable MVPP2 as module
+  * [armel/kirkwood] dts: Fix QNAP TS219 power-off (Closes: #807696)
+  * [armhf] udeb: Add leds-modules package containing leds-gpio driver
+    (Closes: #807721)
+  * [x86] drm/i915: Mark uneven memory banks on gen4 desktop as unknown
+    swizzling (Closes: #780363)
+  * Enable CC_STACKPROTECTOR_STRONG (Closes: #805652)
+  * [x86] input: Enable KEYBOARD_GPIO, INPUT_SOC_BUTTON_ARRAY (Closes: #804864)
+  * [x86] nouveau: bios: return actual size of the buffer retrieved via _ROM
+    (Closes: #772716)
+  * [armhf] Add support for Odroid-XU4 (Closes: #804850)
+    - mfd: s2mps11: Add manual shutdown method for Odroid XU3
+    - dts: Fix power off method for exynos5422-odroidxu3-common
+    - dts: Split audio configuration to separate exynos5422-odroidxu3-audio
+    - dts: Add support Odroid XU4 board for exynos5422-odroidxu4
+  * udeb: Add hid-chicony to input-modules (Closes: #766570)
+  * sched: Enable CFS_BANDWIDTH (Closes: #802746)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 13 Dec 2015 00:38:54 +0000
+
+linux (4.3-1~exp2) experimental; urgency=medium
+
+  [ Ben Hutchings ]
+  * mv643xx_eth: Re-enable TSO, fixed upstream in 4.3
+  * debian/control: Move patchutils from Build-Depends to Build-Depends-Indep,
+    as we only use filterdiff when building linux-source-<version>
+  * debian/control,debian/rules: Support a 'stage1' build profile which
+    builds only linux-libc-dev (Closes: #695243)
+  * debian/control: Add ':any' to Build-Depends on python3, to support cross-
+    bootstrap
+  * [armhf] Enable new drivers for Allwinner chips (Closes: #804856)
+    - crypto: Enable CRYPTO_DEV_SUN4I_SS as module
+    - musb: Enable USB_MUSB_SUNXI as module
+  * aufs: Update support patches to aufs4.3-20151116
+  * [armhf] USB: Change USB, USB_GADGET, and various drivers from built-in to
+    modules
+    - musb: Enable USB_MUSB_DUAL_ROLE
+  * [armhf] musb: Disable MUSB_PIO_ONLY and enable USB_INVENTRA_DMA,
+    USB_TI_CPPI41_DMA, USB_TUSB_OMAP_DMA
+
+  [ Ian Campbell ]
+  * [armel/orion5x] Enable Device Tree for orion5x. Patch from Roger Shimizu
+    (Closes: #803159)
+  * [armel/orion5x] Enable CONFIG_DEBUG_LL_UART_8250.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 04 Dec 2015 19:36:10 +0000
+
+linux (4.3-1~exp1) experimental; urgency=medium
+
+  * New upstream release
+
+  [ Ben Hutchings ]
+  * netfilter: Enable NFT_DUP_IPV4, NFT_DUP_IPV6 as modules (Closes: #803370)
+  * tests: Add autopkgtest support
+  * [x86] Compile with gcc-5
+  * [x86] Enable PINCTRL_BAYTRAIL (Closes: #797949)
+
+  [ Salvatore Bonaccorso ]
+  * Fix typo in image.plain.postinst template.
+    Add missing space in warn message causing typo "dangling linkto".
+    Thanks to Jakub Wilk <jwilk@debian.org> (Closes: #803323)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 04 Nov 2015 07:45:13 +0000
+
+linux (4.3~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+    - [x86] smpboot: Fix CPU #1 boot timeout (Closes: #802464)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 28 Oct 2015 11:04:27 +0900
+
+linux-tools (4.3~rc5-1~exp2) experimental; urgency=medium
+
+  * Fix the build-indep and binary-indep targets (fixes FTBFS for arch:all)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 14 Oct 2015 02:08:09 +0100
+
+linux-tools (4.3~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+    - perf: Fix build on architectures without CONFIG_PERF_REGS
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 14 Oct 2015 00:49:38 +0100
+
+linux (4.3~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 14 Oct 2015 00:48:41 +0100
+
+linux-tools (4.3~rc4-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 07 Oct 2015 01:15:46 +0100
+
+linux (4.3~rc4-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [armhf] dts: Fix Makefile target for sun4i-a10-itead-iteaduino-plus
+    (fixes FTBFS)
+  * [mips*] io: Define ioremap_uc (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 06 Oct 2015 23:27:45 +0100
+
+linux (4.3~rc3-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * Disable CRAMFS; it was obsoleted by squashfs and initramfs
+  * [i386] Replace 586 flavour with 686
+    - Enable support for OLPC and other Geode-based systems in the 686 flavour
+    - udeb: Update kernel-versions
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 27 Sep 2015 21:02:54 +0100
+
+linux (4.2.6-3) unstable; urgency=medium
+
+  * Ignore some gpiochip ABI changes (fixes FTBFS on i386)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 06 Dec 2015 02:12:41 +0000
+
+linux (4.2.6-2) unstable; urgency=medium
+
+  [ Salvatore Bonaccorso ]
+  * [x86] KVM: svm: unconditionally intercept #DB (CVE-2015-8104)
+  * [x86] KVM: rename update_db_bp_intercept to update_bp_intercept
+
+  [ Ian Campbell ]
+  * [x86] Xen: expose a more realistic max p2m size in the shared info, fixes
+    migration (Closes: #797205)
+
+  [ Ben Hutchings ]
+  * media: usbvision: fix crash on detecting device with invalid configuration
+    (CVE-2015-7833, partly fixed in 4.2.6-1)
+  * udeb: Add dm-service-time to multipath-modules (Closes: #806131)
+  * unix: avoid use-after-free in ep_remove_wait_queue (CVE-2013-7446)
+  * isdn_ppp: Add checks for allocation failure in isdn_ppp_open()
+  * ppp, slip: Validate VJ compression slot parameters completely
+    (CVE-2015-7799)
+  * Btrfs: fix truncation of compressed and inlined extents (CVE-2015-8374)
+  * netfilter: Enable NFT_DUP_IPV4, NFT_DUP_IPV6 as modules (Closes: #803370)
+  * [x86] Enable PINCTRL_BAYTRAIL (Closes: #797949)
+  * qxl: Enable by default (Closes: #779515)
+  * [s390*] Update linux-compiler metapackage to gcc-4.9
+  * firmware_class: Fix condition in directory search loop (Closes: #804862)
+  * [x86] input: Enable MOUSE_ELAN_I2C as module, MOUSE_ELAN_I2C_I2C and
+    MOUSE_ELAN_I2C_SMBUS (Closes: #791631)
+  * [armhf] hsi: Enable CMT_SPEECH as module (Closes: #791819)
+  * [armhf] power: Enable BATTERY_RX51 as module (Closes: #791820)
+  * [x86] psmouse: Enable MOUSE_PS2_VMMOUSE (Closes: #802929)
+    - linux-image: Add versioned Breaks on xserver-xorg-input-vmmouse to
+      avoid driver conflicts
+  * [armhf] udeb: Add stmmac platform modules dwmac-generic, dwmac-socfpga
+    and dwmac-sunxi to nic-modules (Closes: #805098)
+  * wireless: Enable WL_MEDIATEK, MT7601U as module
+  * [x86] drm/i915: shut up gen8+ SDE irq dmesg noise (Closes: #806304)
+  * [armhf] regulator: Enable REGULATOR_PFUZE100 as module (Closes: #806284)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 04 Dec 2015 02:26:51 +0000
+
+linux (4.2.6-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.2.6
+    - mmc: core: Fix init_card in 52Mhz (regression in 4.2)
+    - rtlwifi: rtl8821ae: Fix system lockups on boot (regression in 4.2)
+    - iwlwifi: mvm: init card correctly on ctkill exit check
+      (regression in 3.18)
+    - iwlwifi: mvm: flush fw_dump_wk when mvm fails to start
+      (regression in 3.18)
+    - [x86] iommu/vt-d: fix range computation when making room for large pages
+    - [x86] iommu/amd: Fix BUG when faulting a PROT_NONE VMA
+    - [x86] iommu/amd: Don't clear DTE flags when modifying it
+    - drm: fix mutex leak in drm_dp_get_mst_branch_device
+    - drm: Correct arguments to list_tail_add in create blob ioctl
+    - drm: crtc: integer overflow in drm_property_create_blob()
+    - rtl28xxu: fix control message flaws (regression in 4.0)
+    - ALSA: hda - Fix deadlock at error in building PCM
+    - [x86] ioapic: Prevent NULL pointer dereference in setup_ioapic_dest()
+      (regression in 4.2.4)
+    - mm: make sendfile(2) killable
+    - drm/radeon/dpm: don't add pwm attributes if DPM is disabled
+      (regression in 4.0)
+    - [x86] drm/i915: Restore lost DPLL register write on gen2-4
+      (regression in 3.18)
+    - [x86] drm/i915: Deny wrapping an userptr into a framebuffer
+    - drm/radeon: don't try to recreate sysfs entries on resume
+      (regression in 4.2.5)
+    - drm/radeon: fix dpms when driver backlight control is disabled
+      (regression in 4.2.4)
+    - drm/radeon: move bl encoder assignment into bl init
+    - rbd: require stable pages if message data CRCs are enabled
+    - rbd: don't leak parent_spec in rbd_dev_probe_parent()
+    - rbd: prevent kernel stack blow up on rbd map
+    - [armhf] EXYNOS: Fix double of_node_put() when parsing child power domains
+      (regression in 4.2)
+    - [armhf] dts: Fix audio card detection on Peach boards (regression in 4.1)
+    - [arm64] Revert "ARM64: unwind: Fix PC calculation"
+    - block: don't release bdi while request_queue has live references
+      (regression in 4.2)
+    - dm btree remove: fix a bug when rebalancing nodes after removal
+    - dm cache: the CLEAN_SHUTDOWN flag was not being set
+    - dm btree: fix leak of bufio-backed block in btree_split_beneath error path
+    - Revert "serial: 8250_dma: don't bother DMA with small transfers"
+      (regression in 4.0)
+    - [armel] i2c: mv64xxx: really allow I2C offloading (regression in 3.19)
+    - clkdev: fix clk_add_alias() with a NULL alias device name
+      (regression in 4.2)
+    - fbcon: initialize blink interval before calling fb_set_par
+      (regression in 4.2)
+    - PCI: Prevent out of bounds access in numa_node override
+    - ovl: free stack of paths in ovl_fill_super (regression in 4.0)
+    - ovl: free lower_mnt array in ovl_put_super (regression in 4.0)
+    - ovl: fix dentry reference leak
+    - ovl: fix open in stacked overlay (regression in 4.2)
+    - [x86] Input: alps - only the Dell Latitude D420/430/620/630 have separate
+      stick button bits (regression in 4.1)
+    - crypto: api - Only abort operations on fatal signal
+    - md/raid1: submit_bio_wait() returns 0 on success (regression in 3.10)
+    - md/raid10: submit_bio_wait() returns 0 on success (regression in 3.10)
+    - md/raid5: fix locking in handle_stripe_clean_event() (regression in 3.13)
+    - Revert "md: allow a partially recovered device to be hot-added to an
+      array." (regression in 3.14)
+    - [amd64] EDAC, sb_edac: Fix TAD presence check for sbridge_mci_bind_devs()
+      (regression in 4.2)
+    - mvsas: Fix NULL pointer dereference in mvs_slot_task_free
+    - netfilter: ipset: Fix sleeping memory allocation in atomic context
+      (regression in 4.2)
+    - btrfs: fix possible leak in btrfs_ioctl_balance() (regression in 4.2.5)
+    - kvm: irqchip: fix memory leak (regression in 4.2)
+    - [armhf] thermal: exynos: Fix register read in TMU (regression in 4.2)
+    - blk-mq: fix use-after-free in blk_mq_free_tag_set() (regression in 4.2)
+    - IB/cm: Fix rb-tree duplicate free and use-after-free
+    - sched/deadline: Fix migration of SCHED_DEADLINE tasks (regression in 4.2)
+    - [arm64] compat: fix stxr failure case in SWP emulation
+    - NVMe: Fix memory leak on retried commands
+    - [x86] drm/vmwgfx: Fix up user_dmabuf refcounting
+    - thp: use is_zero_pfn() only after pte_present() check (regression in 4.1)
+    - xen: fix backport of previous kexec patch
+
+  [ Ben Hutchings ]
+  * usbvision: fix overflow of interfaces array (CVE-2015-7833)
+  * RDS: fix race condition when sending a message on unbound socket
+    (CVE-2015-7990)
+  * media/vivid-osd: fix info leak in ioctl (CVE-2015-7884)
+  * [x86] KVM: Intercept #AC to avoid guest->host denial-of-service
+    (CVE-2015-5307)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 10 Nov 2015 14:35:05 +0000
+
+linux (4.2.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.2.4
+    - [armhf] KVM: Fix incorrect device to IPA mapping
+    - [x86] KVM: vmx: fix VPID is 0000H in non-root operation
+    - kvm: don't try to register to KVM_FAST_MMIO_BUS for non mmio eventfd
+    - kvm: fix zero length mmio searching
+    - kvm: factor out core eventfd assign/deassign logic
+    - kvm: fix double free for fast mmio eventfd
+    - [armhf] KVM: Disable virtual timer even if the guest is not using it
+    - kvm: svm: reset mmu on VCPU reset
+    - [x86] KVM: trap AMD MSRs for the TSeg base and mask
+    - [powerpc*] KVM: Book3S: Take the kvm->srcu lock in
+      kvmppc_h_logical_ci_load/store()
+    - [powerpc*] KVM: Book3S HV: Pass the correct trap argument to
+      kvmhv_commence_exit
+    - [x86] Revert "KVM: x86: apply guest MTRR virtualization on host reserved
+      pages"
+    - [x86] Revert "KVM: SVM: use NPT page attributes"
+    - [x86] Revert "KVM: SVM: Sync g_pat with guest-written PAT value"
+    - time: Fix timekeeping_freqadjust()'s incorrect use of abs() instead of
+      abs64()
+    - target/iscsi: Fix np_ip bracket issue by removing np_ip
+    - scsi: fix scsi_error_handler vs. scsi_host_dev_release race
+    - target: Attach EXTENDED_COPY local I/O descriptors to xcopy_pt_sess
+    - target: Fix PR registration + APTPL RCU conversion regression
+    - iser-target: remove command with state ISTATE_REMOVE
+    - iser-target: Put the reference on commands waiting for unsol data
+    - toshiba_acpi: Fix hotkeys registration on some toshiba models
+    - [x86] perf/intel: Fix constraint access
+    - [x86] locking/qspinlock: Fix performance regression under unaccelerated
+      VMs
+    - [x86] locking/qspinlock: Only emit the test-and-set fallback when
+      building guest support
+    - [armhf] 8401/1: perf: Set affinity for PPI based PMUs
+    - perf hists: Update the column width for the "srcline" sort key
+    - perf stat: Get correct cpu id for print_aggr
+    - perf tools: Add missing forward declaration of struct map to probe-event.h
+    - perf tools: Add empty Build files for architectures lacking them
+    - perf tools: Fix parse_events_add_pmu caller
+    - perf header: Fixup reading of HEADER_NRCPUS feature
+    - perf probe: Use existing routine to look for a kernel module by
+      dso->short_name
+    - watchdog: sunxi: fix activation of system reset
+    - watchdog: imgpdc: Unregister restart handler on remove
+    - sched: access local runqueue directly in single_task_running
+    - hwmon: (nct6775) Swap STEP_UP_TIME and STEP_DOWN_TIME registers for most
+      chips
+    - [armhf] fix Thumb2 signal handling when ARMv6 is enabled
+    - [armel,armhf] 8429/1: disable GCC SRA optimization
+    - [powerpc*] windfarm: decrement client count when unregistering
+    - [armhf] dts: omap5-uevm.dts: fix i2c5 pinctrl offsets
+    - [armhf] dts: omap3-beagle: make i2c3, ddc and tfp410 gpio work again
+    - [armhf] EXYNOS: reset Little cores when cpu is up
+    - [armhf] dts: sunxi: Raise minimum CPU voltage for sun7i-a20 to meet SoC
+      specifications
+    - [armhf] dts: Fix wrong clock binding for sysmmu_fimd1_1 on exynos5420
+    - [armhf] dts: fix usb pin control for imx-rex dts
+    - dax: fix O_DIRECT I/O to the last block of a blockdev
+    - blockdev: don't set S_DAX for misaligned partitions
+    - block: blkg_destroy_all() should clear q->root_blkg and ->root_rl.blkg
+    - dmaengine: at_xdmac: change block increment addressing mode
+    - dmaengine: at_xdmac: clean used descriptor
+    - dmaengine: dw: properly read DWC_PARAMS register
+    - dmaengine: at_xdmac: fix bug in prep_dma_cyclic
+    - pmem: add proper fencing to pmem_rw_page()
+    - [x86] apic: Serialize LVTT and TSC_DEADLINE writes
+    - [x86] alternatives: Make optimize_nops() interrupt safe and synced
+    - [i386] platform: Fix Geode LX timekeeping in the generic x86 build
+    - [x86] ioapic: Force affinity setting in setup_ioapic_dest()
+    - [x86] pci/intel_mid_pci: Work around for IRQ0 assignment
+    - [x86] paravirt: Replace the paravirt nop with a bona fide empty function
+    - [amd64] nmi: Fix a paravirt stack-clobbering bug in the NMI code
+    - [x86] Use WARN_ON_ONCE for missing X86_FEATURE_NRIPS
+    - [x86] efi: Fix boot crash by mapping EFI memmap entries bottom-up at
+      runtime, instead of top-down
+    - [x86] kexec: Fix kexec crash in syscall kexec_file_load()
+    - [x86] process: Add proper bound checks in 64bit get_wchan()
+    - [x86] mm: Set NX on gap between __ex_table and rodata
+    - [x86] xen: Support kexec/kdump in HVM guests by doing a soft reset
+    - leds:lp55xx: Correct Kconfig dependency for f/w user helper
+    - leds/led-class: Add missing put_device()
+    - sched/core: Fix TASK_DEAD race in finish_task_switch()
+    - [s390x] compat: correct uc_sigmask of the compat signal frame
+    - [s390x] boot/decompression: disable floating point in decompressor
+    - Revert "cgroup: simplify threadgroup locking"
+    - Revert "sched, cgroup: replace signal_struct->group_rwsem with a global
+      percpu_rwsem"
+    - memcg: make mem_cgroup_read_stat() unsigned
+    - spi: Fix documentation of spi_alloc_master()
+    - spi: bcm2835: BUG: fix wrong use of PAGE_MASK
+    - spi: spidev: fix possible NULL dereference
+    - mm: migrate: hugetlb: putback destination hugepage to active list
+    - lib/iommu-common.c: do not try to deref a null iommu->lazy_flush()
+      pointer when n < pool->hint
+    - ocfs2/dlm: fix deadlock when dispatch assert master
+    - mm: hugetlbfs: skip shared VMAs when unmapping private pages to satisfy a
+      fault
+    - memcg: fix dirty page migration
+    - [armhf] ALSA: hda/tegra - async probe for avoiding module loading deadlock
+    - ALSA: synth: Fix conflicting OSS device registration on AWE32
+    - ALSA: hda: Add dock support for ThinkPad T550
+    - ALSA: hda - Apply SPDIF pin ctl to MacBookPro 12,1
+    - ALSA: hda - Disable power_save_node for IDT 92HD73xx chips
+    - ASoC: pxa: pxa2xx-ac97: fix dma requestor lines
+    - ASoC: dwc: correct irq clear method
+    - ASoC: db1200: Fix DAI link format for db1300 and db1550
+    - ASoC: sgtl5000: fix wrong register MIC_BIAS_VOLTAGE setup on probe
+    - ASoC: tas2552: fix dBscale-min declaration
+    - btrfs: skip waiting on ordered range for special files
+    - Btrfs: fix read corruption of compressed and shared extents
+    - Btrfs: update fix for read corruption of compressed and shared extents
+    - PCI: Fix devfn for VPD access through function 0
+    - PCI: Use function 0 VPD for identical functions, regular VPD for others
+    - PCI: Clear IORESOURCE_UNSET when clipping a bridge window
+    - dm thin: disable discard support for thin devices if pool's is disabled
+    - dm crypt: constrain crypt device's max_segment_size to PAGE_SIZE
+    - ath10k: fix dma_mapping_error() handling
+    - svcrdma: Fix send_reply() scatter/gather set-up
+    - md/raid0: update queue parameter in a safer location.
+    - md/raid0: apply base queue limits *before* disk_stack_limits
+    - dm raid: fix round up of default region size
+    - netfilter: nfnetlink: work around wrong endianess in res_id field
+    - netfilter: nf_tables: Use 32 bit addressing register from
+      nft_type_to_reg()
+    - netfilter: ipset: Out of bound access in hash:net* types fixed
+    - netfilter: ipset: Fixing unnamed union init
+    - netfilter: nf_log: wait for rcu grace after logger unregistration
+    - netfilter: nft_compat: skip family comparison in case of NFPROTO_UNSPEC
+    - netfilter: nf_log: don't zap all loggers on unregister
+    - regulator: core: Correct return value check in regulator_resolve_supply
+    - regulator: axp20x: Fix enable bit indexes for DCDC4 and DCDC5
+    - regulator: core: Handle probe deferral from DT when resolving supplies
+    - Bluetooth: Delay check for conn->smp in smp_conn_security()
+    - nfs: fix v4.2 SEEK on files over 2 gigs
+    - NFS: Do cleanup before resetting pageio read/write to mds
+    - NFSv4: Recovery of recalled read delegations is broken
+    - nfs: fix pg_test page count calculation
+    - NFS: Fix a write performance regression
+    - cifs: Fix sec=krb5 on smb3 mounts
+    - cifs: disabling oplocks/leases via module parm enable_oplocks broken for
+      SMB3
+    - cifs: Do not fall back to SMBWriteX in set_file_size error cases
+    - drm/qxl: only report first monitor as connected if we have no state
+    - drm/qxl: recreate the primary surface when the bo is not primary
+    - drm/amdgpu: fix overflow on 32bit systems
+    - drm/amdgpu: Disable UVD PG
+    - drm/amdgpu: fix the UVD suspend sequence order
+    - drm/amdgpu: make UVD handle checking more strict
+    - drm/amdgpu: Fix max_vblank_count value for current display engines
+    - drm/amdgpu: Restore LCD backlight level on resume
+    - [x86] drm/i915/bios: handle MIPI Sequence Block v3+ gracefully
+    - drm: Reject DRI1 hw lock ioctl functions for kms drivers
+    - drm/radeon: Restore LCD backlight level on resume (>= R5xx)
+    - drm/dp/mst: fixup handling hotplug on port removal.
+    - drm/dp/mst: drop cancel work sync in the mstb destroy path (v2)
+    - xhci: give command abortion one more chance before killing xhci
+    - xhci: Move xhci_pme_quirk() behind #ifdef CONFIG_PM
+    - usb: xhci: lock mutex on xhci_stop
+    - usb: xhci: Clear XHCI_STATE_DYING on start
+    - usb: xhci: stop everything on the first call to xhci_stop
+    - usb: xhci: exit early in xhci_setup_device() if we're halted or dying
+    - xhci: change xhci 1.0 only restrictions to support xhci 1.1
+    - xhci: init command timeout timer earlier to avoid deleting it
+      uninitialized
+    - usb: xhci: Add support for URB_ZERO_PACKET to bulk/sg transfers
+    - batman-adv: Make DAT capability changes atomic
+    - thermal: cpu_cooling: don't call kcalloc() under rcu_read_lock
+    - thermal: cpu_cooling: free power table on error or when unregistering
+    - [x86] hv: util: checking the wrong variable
+    - mmc: dw_mmc: handle data blocks > than 4kB if IDMAC is used
+    - usb: chipidea: imx: fix a typo for imx6sx
+    - cifs: use server timestamp for ntlmv2 authentication
+    - [armhf] irqchip/gic-v3-its: Add missing cache flushes
+    - docs: update HOWTO for 3.x -> 4.x versioning
+    - extcon: Fix signedness bugs about break error handling
+    - extcon: Fix attached value returned by is_extcon_changed
+    - [armhf] mtd: pxa3xx_nand: add a default chunk size
+    - mtd: nand: sunxi: fix sunxi_nand_chips_cleanup()
+    - mtd: nand: sunxi: fix OOB handling in ->write_xxx() functions
+    - hpsa: fix an sprintf() overflow in the reset handler
+    - PM / AVS: rockchip-io: depend on CONFIG_POWER_AVS
+    - device property: fix potential NULL pointer dereference
+    - ath10k: fix per-vif queue locking
+    - ath10k: reject 11b tx fragmentation configuration
+    - ath10k: fix peer limit enforcement
+    - ath10k: wake up offchannel queue properly
+    - ath10k: wake up queue upon vif creation
+    - pcmcia: sa11x0: fix missing clk_put() in sa11x0 socket drivers
+    - ipr: Enable SIS pipe commands for SIS-32 devices.
+    - regmap: debugfs: Ensure we don't underflow when printing access masks
+    - regmap: debugfs: Don't bother actually printing when calculating max
+      length
+    - security: fix typo in security_task_prctl
+    - usb: musb: dsps: fix polling in device-only mode
+    - usb: chipidea: udc: using the correct stall implementation
+    - usb: Use the USB_SS_MULT() macro to get the burst multiplier.
+    - usb: phy: phy-generic: Fix reset behaviour on legacy boot
+    - usb: musb: cppi41: allow it to work again
+    - USB: chaoskey read offset bug
+    - usb: Add device quirk for Logitech PTZ cameras
+    - USB: Add reset-resume quirk for two Plantronics usb headphones.
+    - [armel,armhf] crypto: marvell - properly handle
+      CRYPTO_TFM_REQ_MAY_BACKLOG-flagged requests
+    - cpu/cacheinfo: Fix teardown path
+    - cpufreq: dt: Tolerance applies on both sides of target voltage
+    - [mips*] Fix console output for Fulong2e system
+    - [mips*] bootmem: Fix mapstart calculation for contiguous maps
+    - [mips*] dma-default: Fix 32-bit fall back to GFP_DMA
+    - [mips*] CPS: Stop dangling delay slot from has_mt.
+    - [mips*] CPS: Don't include MT code in non-MT kernels.
+    - [mips*] CPS: #ifdef on CONFIG_MIPS_MT_SMP rather than CONFIG_MIPS_MT
+    - batman-adv: Make NC capability changes atomic
+    - batman-adv: Make TT capability changes atomic
+    - batman-adv: Make MCAST capability changes atomic
+    - batman-adv: Fix potential synchronization issues in mcast tvlv handler
+    - batman-adv: Fix potentially broken skb network header access
+    - [powerpc*] MSI: Fix race condition in tearing down MSI interrupts
+    - rsi: Fix possible leak when loading firmware
+    - UBIFS: Kill unneeded locking in ubifs_init_security
+    - UBI: Validate data_size
+    - UBI: return ENOSPC if no enough space available
+    - net: via/Kconfig: GENERIC_PCI_IOMAP required if PCI not selected
+    - iscsi-target: Avoid OFMarker + IFMarker negotiation
+    - mmc: core: Don't return an error for CD/WP GPIOs when GPIOLIB is unset
+    - mmc: core: fix dead loop of mmc_retune
+    - [arm64] efi: Fix boot crash by not padding between EFI_MEMORY_RUNTIME
+      regions
+    - [arm64] ftrace: fix function_graph tracer panic
+    - [arm64] readahead: fault retry breaks mmap file read random detection
+    - [m68k] Define asmlinkage_protect
+    - xen/blkback: free requests on disconnection
+    - net/xen-netfront: only napi_synchronize() if running
+    - igb: do not re-init SR-IOV during probe
+    - genirq: Fix race in register_irq_proc()
+    - clocksource: Fix abs() usage w/ 64bit values
+    - md/bitmap: don't pass -1 to bitmap_storage_alloc.
+    - nfs/filelayout: Fix NULL reference caused by double freeing of fh_array
+    - cpufreq: acpi_cpufreq: prevent crash on reading freqdomain_cpus
+    - [armhf] clk: ti: fix dual-registration of uart4_ick
+    - [armhf] clk: ti: clk-7xx: Remove hardwired ABE clock configuration
+    - [armhf] clk: samsung: fix cpu clock's flags checking
+    - namei: results of d_is_negative() should be checked after dentry
+      revalidation
+    - dm: fix AB-BA deadlock in __dm_destroy()
+    - dm cache: fix NULL pointer when switching from cleaner policy
+    - staging: speakup: fix speakup-r regression
+    - tty: fix stall caused by missing memory barrier in drivers/tty/n_tty.c
+    - drivers/tty: require read access for controlling terminal
+    - serial: 8250: add uart_config entry for PORT_RT2880
+    - serial: atmel: fix error path of probe function
+    - mm/slab: fix unexpected index mapping result of kmalloc_size(INDEX_NODE+1)
+    - blk-mq: avoid setting hctx->tags->cpumask before allocation
+    - sched/preempt: Fix cond_resched_lock() and cond_resched_softirq()
+    - 3w-9xxx: don't unmap bounce buffered commands
+    - sched/preempt, xen: Use need_resched() instead of should_resched()
+    - sched/preempt, powerpc, kvm: Use need_resched() instead of
+      should_resched()
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.2.5
+    - [powerpc*] net/ibm/emac: bump version numbers for correct work with
+      ethtool
+    - l2tp: protect tunnel->del_work by ref_count
+    - af_unix: Convert the unix_sk macro to an inline function for type safety
+    - af_unix: return data from multiple SKBs on recv() with MSG_PEEK flag
+    - net/unix: fix logic about sk_peek_offset
+    - skbuff: Fix skb checksum flag on skb pull
+    - skbuff: Fix skb checksum partial check.
+    - inet: fix races in reqsk_queue_hash_req()
+    - net: add pfmemalloc check in sk_add_backlog()
+    - ppp: don't override sk->sk_state in pppoe_flush_dev()
+    - inet: fix race in reqsk_queue_unlink()
+    - bpf: fix panic in SO_GET_FILTER with native ebpf programs
+    - ovs: do not allocate memory from offline numa node
+    - act_mirred: clear sender cpu before sending to tx
+    - bpf: clear sender_cpu before xmit
+    - ipv6: Don't call with rt6_uncached_list_flush_dev
+    - ethtool: Use kcalloc instead of kmalloc for ethtool_get_strings
+    - tipc: move fragment importance field to new header position
+    - netlink: Trim skb to alloc size to avoid MSG_TRUNC
+    - drm: Fix locking for sysfs dpms file
+    - [sparc*] crypto: initialize blkcipher.ivsize
+    - crypto: ahash - ensure statesize is non-zero
+    - memcg: convert threshold to bytes
+    - btrfs: check unsupported filters in balance arguments
+    - btrfs: fix use after free iterating extrefs
+    - [arm64] errata: use KBUILD_CFLAGS_MODULE for erratum #843419
+    - nfsd/blocklayout: accept any minlength
+    - [armhf] i2c: s3c2410: enable RuntimePM before registering to the core
+    - i2c: designware: Do not use parameters from ACPI on Dell Inspiron 7348
+    - i2c: designware-platdrv: enable RuntimePM before registering to the core
+    - workqueue: make sure delayed work run in local cpu
+    - [x86] KVM: fix SMI to halted VCPU
+    - [x86] KVM: fix RSM into 64-bit protected mode
+    - drm/qxl: fix framebuffer dirty rectangle tracking.
+    - drm/nouveau/fbcon: take runpm reference when userspace has an open fd
+    - drm/dp/mst: make mst i2c transfer code more robust.
+    - drm/radeon: attach tile property to mst connector
+    - drm/radeon: add pm sysfs files late
+    - dm thin: fix missing pool reference count decrement in pool_ctr error
+      path
+    - rbd: fix double free on rbd_dev->header_name
+    - timekeeping: Increment clock_was_set_seq in timekeeping_init()
+    - [arm64] Fix THP protection change logic
+    - svcrdma: handle rdma read with a non-zero initial page offset
+
+  [ Salvatore Bonaccorso ]
+  * KEYS: Fix race between key destruction and finding a keyring by name
+  * KEYS: Fix crash when attempt to garbage collect an uninstantiated keyring
+    (CVE-2015-7872)
+  * KEYS: Don't permit request_key() to construct a new keyring
+
+  [ Ben Hutchings ]
+  * [x86] drm: Enable DRM_AMDGPU and HSA_AMD as modules (Closes: #797752)
+  * media: Enable DVB_AS102, VIDEO_GO7007, VIDEO_GO7007_USB,
+    VIDEO_GO7007_LOADER, VIDEO_GO7007_USB_S2250_BOARD as modules
+  * net: Enable LIQUIDIO and MLX5_CORE as modules; enable MLX5_CORE_EN
+  * [x86] Enable X86_AMD_PLATFORM_DEVICE
+  * linux-manual: Fix regression in reproducibility in 4.2~rc8-1~exp1
+  * net: Enable GENEVE_CORE as module
+    - Re-enable GENEVE and OPENVSWITCH_GENEVE
+  * bpf: Enable BPF_SYSCALL
+  * ACPI: Enable ACPI_NFIT as module
+  * tcp: Enable TCP_CONG_CDG as module
+  * nftables: Enable NF_TABLES_NETDEV, NFT_REDIR_IPV4, NFT_REDIR_IPV6 as
+    modules
+    [This change was accidentally omitted]
+  * net/sched: Enable NET_CLS_FLOWER as module
+    [This change was accidentally omitted]
+  * SCSI: Enable SCSI_SNIC as module
+  * target: Enable TCM_USER2 as module
+  * net/phy: Enable DP83867_PHY as module
+  * drm: Enable DRM_VIRTIO_GPU as module
+  * HID: Enable HID_BETOP_FF, HID_PLANTRONICS as modules
+  * hwrng: Enable USB_CHAOSKEY as module
+  * ext4: Enable EXT4_ENCRYPTION
+  * f2fs: Enable F2FS_FS_ENCRYPTION
+  * vfs,nvdimm: Enable FS_DAX
+    [This change was accidentally omitted]
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 28 Oct 2015 05:46:49 +0900
+
+linux (4.2.3-2) unstable; urgency=medium
+
+  * nbd: Restore request timeout detection (Closes: #770479)
+  * Ignore ABI changes in all mmc host drivers (fixes FTBFS on armhf)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 14 Oct 2015 19:09:49 +0100
+
+linux (4.2.3-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.2.2
+    - nfc: netlink: Add check on NFC_ATTR_VENDOR_DATA
+    - nfc: nci: hci: Add check on skb nci_hci_send_cmd parameter
+    - blk-mq: fix buffer overflow when reading sysfs file of 'pending'
+    - blk-mq: fix race between timeout and freeing request
+    - mac80211: enable assoc check for mesh interfaces
+    - [powerpc*] cxl: Allow release of contexts which have been OPENED but not
+      STARTED (regression in 4.2)
+    - ext4: don't manipulate recovery flag when freezing no-journal fs
+      (regression in 3.18)
+    - Revert "ext4: remove block_device_ejected" (regression in 4.1)
+    - [arm64] kconfig: Move LIST_POISON to a safe value
+    - [arm64] entry: always restore x0 from the stack on syscall return
+    - [arm64] flush FP/SIMD state correctly after execve()
+    - [arm64] head.S: initialise mdcr_el2 in el2_setup
+    - [armhf,arm64] KVM: vgic: Check for !irqchip_in_kernel() when mapping
+      resources (regression in 4.0)
+    - [arm64] KVM: add workaround for Cortex-A57 erratum #852523
+    - [powerpc*] pseries: Fix corrupted pdn list (regression in 4.1)
+    - [powerpc*] eeh: Probe after unbalanced kref check (regression in 4.1)
+    - [powerpc*] eeh: Fix fenced PHB caused by eeh_slot_error_detail()
+      (regression in 3.18)
+    - [powerpc*] powernv/pci-ioda: fix 32-bit TCE table init in kdump kernel
+      (regression in 4.2)
+    - [powerpc*] powernv/pci-ioda: fix kdump with non-power-of-2 crashkernel=
+      (regression in 4.2)
+    - [powerpc*] pseries: Release DRC when configure_connector fails
+      (regression in 4.1)
+    - [powerpc*] mm: Recompute hash value after a failed update
+    - CIFS: fix type confusion in copy offload ioctl
+    - mm: check if section present during memory block registering
+      (regression in 3.19)
+    - [i386] mm: Initialize pmd_idx in page_table_range_init_count()
+    - [x86] i915: Set ddi_pll_sel in DP MST path (regression in 4.2)
+    - Btrfs: check if previous transaction aborted to avoid fs corruption
+    - nfsd: Fix an FS_LAYOUT_TYPES/LAYOUT_TYPES encode bug
+    - nfsd: ensure that the ol stateid hash reference is only put once
+    - nfsd: ensure that delegation stateid hash references are only put once
+    - NFSv4.1/pnfs: Fix atomicity of commit list updates (regression in 4.0)
+    - NFSv4: don't set SETATTR for O_RDONLY|O_EXCL
+    - NFSv4.1/pNFS: Fix borken function _same_data_server_addrs_locked()
+    - NFS: Fix a NULL pointer dereference of migration recovery ops for v4.2
+      client
+    - NFS: nfs_set_pgio_error sometimes misses errors
+    - NFS41/flexfiles: update inode after write finishes
+    - NFSv4: Force a post-op attribute update when holding a delegation
+    - NFS41/flexfiles: zero out DS write wcc
+    - NFSv4.1/flexfiles: Fix a protocol error in layoutreturn
+    - NFSv4.1: Fix a protocol issue with CLOSE stateids
+    - nfs: Fix truncated client owner id without proto type (regression in 4.2)
+    - Revert "NFSv4: Remove incorrect check in can_open_delegated()"
+      (regression in 3.19)
+    - svcrdma: Change maximum server payload back to RPCSVC_MAXPAYLOAD
+      (regression in 4.2)
+    - SUNRPC: Ensure that we wait for connections to complete before retrying
+      (regression in 4.0)
+    - SUNRPC: Lock the transport layer on shutdown
+    - [hppa] PCI: Enable 64-bit bus addresses on PA-RISC (regression in 4.2)
+    - [hppa] Use double word condition in 64bit CAS operation
+    - fs: if a coredump already exists, unlink and recreate with O_EXCL
+    - fs: Don't dump core if the corefile would become world-readable.
+    - mmc: sdhci-of-esdhc: add workaround for pre divider initial value
+      (regression in 4.2)
+    - mmc: sdhci: also get preset value and driver type for MMC_DDR52
+      (regression in 3.16)
+    - mmc: sdhci: fix dma memory leak in sdhci_pre_req() (regression in 4.0)
+    - mmc: core: fix race condition in mmc_wait_data_done
+    - [armhf] iommu/fsl: Really fix init section(s) content (regression in 4.0)
+    - [armhf] iommu/io-pgtable-arm: Unmap and free table when overwriting with
+      block
+    - [x86] iommu/vt-d: Really use upper context table when necessary
+      (regression in 4.1)
+    - eCryptfs: Invalidate dcache entries when lower i_nlink is zero
+    - hfs: fix B-tree corruption after insertion at position 0
+    - IB/srp: Handle partial connection success correctly
+    - IB/srp: Stop the scsi_eh_<n> and scsi_tmf_<n> threads if login fails
+      (regression in 4.2)
+    - IB/uverbs: reject invalid or unknown opcodes
+    - IB/uverbs: Fix race between ib_uverbs_open and remove_one
+    - IB/iser: Fix missing return status check in iser_send_data_out
+      (regression in 3.19)
+    - IB/iser: Fix possible bogus DMA unmapping (regression in 3.19)
+    - IB/mlx5: avoid destroying a NULL mr in reg_user_mr error flow
+      (regression in 3.19)
+    - IB/mlx4: Fix incorrect cq flushing in error state (regression in 4.0)
+    - hfs,hfsplus: cache pages correctly between bnode_create and bnode_free
+    - jbd2: avoid infinite loop when destroying aborted journal
+      (regression in 4.2)
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.2.3
+    - phylib: fix device deletion order in mdiobus_unregister()
+      (regression in 4.2)
+    - sock, diag: fix panic in sock_diag_put_filterinfo
+      (regression in 3.19)
+    - net/ipv6: Correct PIM6 mrt_lock handling
+    - ipv6: fix multipath route replace error recovery (regression in 4.1)
+    - netlink, mmap: transform mmap skb into full skb on taps
+    - bridge: fix igmpv3 / mldv2 report parsing (regression in 4.2)
+    - [armhf] net: mvneta: fix DMA buffer unmapping in mvneta_rx()
+      (regression in 4.2)
+    - rtnetlink: catch -EOPNOTSUPP errors from ndo_bridge_getlink
+      (regression in 4.2)
+    - macvtap: fix TUNSETSNDBUF values > 64k (regression in 3.19)
+    - netlink: Fix autobind race condition that leads to zero port ID
+      (regression in 4.1)
+    - netlink: Replace rhash_portid with bound
+    - openvswitch: Zero flows on allocation.
+    - tcp: add proper TS val into RST packets (regression in 3.18)
+    - packet: Fix AF_PACKET ABI breakage in 4.2
+    - net: revert "net_sched: move tp->root allocation into fw_init()"
+      (regression in 4.1)
+    - fib_rules: fix fib rule dumps across multiple skbs
+    - ppp: fix lockdep splat in ppp_dev_uninit() (regression in 4.2)
+    - [armhf] mvneta: use inband status only when explicitly enabled
+      (regression in 4.1)
+    - net/mlx4_core: Capping number of requested MSIXs to MAX_MSIX
+    - zram: fix possible use after free in zcomp_create()
+    - [x86] hp-wmi: limit hotkey enable
+
+  [ Ben Hutchings ]
+  * ovl: conditionally use O_LARGEFILE in ovl_copy_up() (Closes: #800724)
+  * [x86] ALSA: hda - Disable power_save_node for Thinkpads (Closes: #800694)
+  * i2c: Enable I2C_CHARDEV as a module in all configurations with I2C
+    support (Closes: #800597)
+  * [mips*/octeon] Enable CAVIUM_CN63XXP1 (Closes: #800595)
+  * [mips*/octeon] Enable MMC, MMC_BLOCK, OCTEON_MMC and other drivers as
+    modules (Closes: #800594)
+  * ath10k: add qca6164 support (Closes: #800703)
+  * [!x86] net: Disable VMXNET3, only useful in VMware x86 virtual machines
+  * netfilter: conntrack: use nf_ct_tmpl_free in CT/synproxy error paths
+    (Closes: #800445)
+  * [arm64] Defer workaround for erratum #843419
+  * [x86] crypto camellia_aesni_avx: Fix CPU feature checks (Closes: #800934)
+
+  [ Salvatore Bonaccorso ]
+  * ipc: Initialize msg/shm IPC objects before doing ipc_addid()
+    (CVE-2015-7613)
+
+  [ Ian Campbell ]
+  * [armel] Update breaks on flash-kernel to anything earlier than 3.37 since
+    that version adds the knowledge that various additional kirkwood systems
+    need a DTB appending as of v3.17-rc1. (Closes: #797878)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 06 Oct 2015 17:44:55 +0100
+
+linux-tools (4.2-2) unstable; urgency=medium
+
+  * [x32] Don't attempt to build linux-perf (fixes FTBFS)
+  * [x32] Build hyperv-daemons package
+  * [alpha] uapi: Add support for __SANE_USERSPACE_TYPES__(fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 02 Oct 2015 18:41:22 +0100
+
+linux (4.2.1-2) unstable; urgency=medium
+
+  * media: uvcvideo: Disable hardware timestamps by default (Closes: #794327)
+  * [mips*] udeb: Remove 'Provides: ata-modules' from kernel-image
+  * [hppa/parisc64-smp,mips*el/loongson-3] udeb: Remove i2c-modules again, as
+    the drivers that belong in it are actually built-in (fixes FTBFS)
+  * sctp: fix race on protocol/netns initialization (CVE-2015-5283)
+  * [mips*] pgtable-bits.h: Correct _PAGE_GLOBAL_SHIFT build failure
+    (regression in 4.0, but not a build failure for us)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 27 Sep 2015 14:17:34 +0100
+
+linux-tools (4.2-1) unstable; urgency=medium
+
+  * New upstream release
+
+  [ Ben Hutchings ]
+  * debian/bin,debian/control,debian/lib/python,debian/rules: Use Python 3
+    - debian/lib/python: Sync with linux package
+  * debian/bin/genorig.py: Make orig tarballs reproducible
+  * linux-perf: Fix installation directory for bash completions
+  * linux-perf: Remove shebang lines from perf scripts
+  * Set compiler flags according to dpkg-buildflags
+  * hyperv-daemons: Fix fortify format warning
+  * debian/rules: Add support for DEB_BUILD_OPTIONS=parallel=N
+  * debian/control: Update policy version to 3.9.6; no changes required
+  * linux-perf: Revert "perf build: Fix libunwind feature detection on 32-bit
+    x86", which was a regression for us
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 25 Sep 2015 22:55:41 +0100
+
+linux (4.2.1-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.2.1
+
+  [ Ben Hutchings ]
+  * [mips*el/loongson-3] udeb: Add fb-modules containing radeon driver
+    (Closes: #776274)
+  * [hppa/parisc64-smp,[mips*el/loongson-3] udeb: Add i2c-modules and
+    make fb-modules depend on it rather than including I2C modules
+    directly
+  * workqueue: Make flush_workqueue() available again to non GPL modules
+    (Closes: #798311)
+  * vfs: Fix possible escape from mount namespace (CVE-2015-2925):
+    - dcache: Handle escaped paths in prepend_path
+    - dcache: Reduce the scope of i_lock in d_splice_alias
+    - vfs: Test for and handle paths that are unreachable from their mnt_root
+  * aufs: Update support patches to aufs4.x-rcN-20150921
+    - mmap: Fix races in madvise_remove() and sys_msync() (Closes: #796036)
+  * RDS: verify the underlying transport exists before creating a connection
+    (CVE-2015-6937)
+  * Set ABI to 1
+  * e1000e: Fix tight loop implementation of systime read algorithm
+  * mmc: Drop "eMMC: Don't initialize partitions on RPMB flagged areas", as
+    upstream commit 4e93b9a6abc0 ("mmc: card: Don't access RPMB partitions for
+    normal read/write") looks like a cleaner solution
+  * mm: Change ZBUD back to built-in, as it's not really useful as a module
+  * USB: whiteheat: fix potential null-deref at probe (CVE-2015-5257)
+
+  [ Aurelien Jarno ]
+  * [mips*el] Fix BPF assembly code for pre-R2 CPUs. (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 25 Sep 2015 18:18:01 +0100
+
+linux (4.2-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_4.2
+
+  [ Ben Hutchings ]
+  * Remove all support for ia64 (Closes: #679545, #691576, #728706)
+  * [s390x] Compile with gcc-4.9 (Closes: #796845)
+  * linux-source: Depend on xz-utils, not bzip2 (Closes: #796940)
+  * gfs2: Make statistics unsigned, suitable for use with do_div()
+    (fixes FTBFS on mipsel,m68k)
+  * [amd64] Enable KALLSYMS_ALL (Closes: #660288), LIVEPATCH
+  * Re-enable various config options disabled by name changes in 4.2:
+    - SUNRPC_XPRT_RDMA replaced SUNRPC_XPRT_RDMA_{CLIENT,SERVER}
+    - [mips*el/loongson*] LOONGSON64 replaced LOONGSON
+    - [x86] COMEDI_8255_SA replaced COMEDI_8255
+  * [sparc] Remove linux-image, linux-header and udeb packages, as they
+    are redundant with sparc64 and neither is an official port
+  * Fix last issue that prevents a reproducible build (Closes: #769844):
+    - DocBook: Use a fixed encoding for output
+  * debian/bin,debian/control,debian/lib/python,debian/rules.real,
+    linux-support: Use Python 3
+  * debian/bin/genorig.py: Make orig tarballs reproducible
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 31 Aug 2015 02:08:19 +0100
+
+linux (4.2~rc8-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Aurelien Jarno ]
+  * [mips*] Build ext4 as module. Add core-modules and ext4-modules udeb.
+    Fixes FTBFS.
+  * [mips,mips64] Remove r4k-ip22, r5k-ip32 and sb1-bcm91250a flavours.
+  * [mipsel,mips64el] Remove sb1-bcm91250a flavour.
+
+  [ Ben Hutchings ]
+  * debian/control: Correct build-dependency on xz-utils, needed on all arches
+  * Fix more issues that prevent a reproducible build:
+    - Set LC_ALL=C.UTF-8
+    - Avoid creating man pages in source tree
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 24 Aug 2015 12:00:54 +0100
+
+linux-tools (4.2~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * genorig: Include more mips makefiles (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 17 Aug 2015 10:42:08 +0200
+
+linux-tools (4.2~rc6-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * Adjust for migration to git:
+    - Update .gitignore files
+    - debian/control: Update Vcs-* fields
+    - debian/rules: Exclude .git from maintainerclean rule
+  * Add packages of liblockdep (lockdep, liblockdep<version>, liblockdep-dev)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 14 Aug 2015 14:58:57 +0200
+
+linux (4.2~rc6-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * Adjust for migration to git:
+    - Update .gitignore files
+    - debian/control: Update Vcs-* fields
+    - README.Debian, README.source: Update references to svn
+  * [rt] Disable until it is updated for 4.2 or later
+  * debian/control: Drop Frederik Schüler from Uploaders
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 12 Aug 2015 20:48:00 +0200
+
+linux (4.1.6-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.6
+    - [mips*/*-malta] Don't reinitialise RTC (regression in 3.14)
+    - [mips*] Make set_pte() SMP safe.
+    - fsnotify: fix oops in fsnotify_clear_marks_by_group_flags()
+    - [x86] drm/i915: Declare the swizzling unknown for L-shaped configurations
+    - [x86] drm/i915: Replace WARN inside I915_READ64_2x32 with retry loop
+    - drm/radeon: rework audio detect (v4) (regression in 4.0)
+    - drm/radeon/combios: add some validation of lvds values
+      (regression in 4.0)
+    - ipr: Fix incorrect trace indexing
+    - ipr: Fix invalid array indexing for HRRQ
+    - Bluetooth: Fix NULL pointer dereference in smp_conn_security
+    - [armhf] dmaengine: pl330: Fix overflow when reporting residue in memcpy
+      (regression in 4.0)
+    - [armhf] dmaengine: pl330: Really fix choppy sound because of wrong residue
+      calculation (regression in 4.0)
+    - xhci: fix off by one error in TRB DMA address boundary check
+    - ath10k: fix qca61x4 hw2.1 support
+    - [sparc*] Fix userspace FPU register corruptions. (Closes: #789180)
+    - ASoC: dapm: Lock during userspace access
+    - ASoC: dapm: Don't add prefix to widget stream name (regression in 4.1)
+    - [x86] xen: Probe target addresses in set_aliased_prot() before the
+      hypercall
+    - xen/gntdevt: Fix race condition in gntdev_release()
+    - hwrng: core - correct error check of kthread_run call
+    - [x86] crypto: qat - Fix invalid synchronization between
+      register/unregister sym algs
+    - rbd: fix copyup completion race
+    - [armhf] OMAP2+: hwmod: Fix _wait_target_ready() for hwmods without sysc
+    - [x86] hwmon: (dell-smm) Blacklist Dell Studio XPS 8100
+    - ocfs2: fix BUG in ocfs2_downconvert_thread_do_work()
+    - ocfs2: fix shift left overflow
+    - nfsd: Drop BUG_ON and ignore SECLABEL on absent filesystem
+    - md/raid1: extend spinlock to protect raid1_end_read_request against
+      inconsistencies
+    - dm: fix dm_merge_bvec regression on 32 bit systems (regression in 3.19
+    - [x86] Input: alps - only Dell laptops have separate button bits for v2
+      dualpoint sticks (regression in 4.1)
+    - mm, vmscan: Do not wait for page writeback for GFP_NOFS allocations
+    - signalfd: fix information leak in signalfd_copyinfo
+    - signal: fix information leak in copy_siginfo_to_user
+    - signal: fix information leak in copy_siginfo_from_user32
+    - nfsd: do nfs4_check_fh in nfs4_check_file instead of nfs4_check_olstateid
+
+  [ Aurelien Jarno ]
+  * [mips*] Build ext4 as module. Add core-modules and ext4-modules udeb.
+    Fixes FTBFS.
+
+  [ Ben Hutchings ]
+  * [i386] udeb: Make gpio_keys_polled and leds-gpio optional in input-modules
+    as they are not built for the 686-pae flavour (fixes FTBFS)
+  * perf: Fix AUX buffer refcounting
+  * ovl: Revert changes in 4.1.5-1 due to regression (Reopens: #786925)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 23 Aug 2015 12:19:22 +0200
+
+linux (4.1.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.4
+    - Bluetooth: btbcm: allow btbcm_read_verbose_config to fail on Apple
+      (regression in 4.1)
+    - ath9k_htc: memory corruption calling set_bit()
+    - ieee802154: Fix sockaddr_ieee802154 implicit padding information leak.
+    - staging: vt6656: check ieee80211_bss_conf bssid not NULL
+    - staging: vt6655: check ieee80211_bss_conf bssid not NULL
+    - staging: vt6655: device_rx_srv check sk_buff is NULL
+    - staging: rtl8712: prevent buffer overrun in recvbuf2recvframe
+    - hid-sensor: Fix suspend/resume delay (regression in 4.0)
+    - ext4: fix race between truncate and __ext4_journalled_writepage()
+    - ext4: call sync_blockdev() before invalidate_bdev() in put_super()
+    - ext4: don't retry file block mapping on bigalloc fs with non-extent file
+    - ext4: fix fencepost error in lazytime optimization
+    - ext4: avoid deadlocks in the writeback path by using sb_getblk_gfp
+    - ext4: fix reservation release on invalidatepage for delalloc fs
+    - ext4: be more strict when migrating to non-extent based file
+    - ext4: correctly migrate a file with a hole at the beginning
+    - jbd2: use GFP_NOFS in jbd2_cleanup_journal_tail()
+    - jbd2: fix ocfs2 corrupt when updating journal superblock fails
+    - [armhf] rtc: snvs: fix wakealarm by call enable_irq_wake earlier
+      (regression in 3.19)
+    - i2c: mux: Use __i2c_transfer() instead of calling parent's master_xfer()
+      (regression in 4.1)
+    - i2c: use parent adapter quirks in mux (regression in 4.1)
+    - vb2: Don't WARN when v4l2_buffer.bytesused is 0 for multiplanar buffers
+      (regression in 4.1)
+    - media: Fix regression in some more dib0700 based devices
+      (regression in 3.17)
+    - rc-core: fix dib0700 scancode generation for RC5 (regression in 3.17)
+    - cx24117: fix a buffer overflow when checking userspace params
+    - af9013: Don't accept invalid bandwidth
+    - s5h1420: fix a buffer overflow when checking userspace params
+    - cx24116: fix a buffer overflow when checking userspace params
+    - libata: Fall back to unqueued READ LOG EXT if the DMA variant fails
+      (regression in 4.1)
+    - libata: Expose TRIM capability in sysfs
+    - libata: add ATA_HORKAGE_NOTRIM
+    - libata: add ATA_HORKAGE_MAX_SEC_1024 to revert back to previous
+      max_sectors limit (regression in 3.19)
+    - libata: force disable trim for SuperSSpeed S238
+    - [armhf] usb: dwc3: gadget: don't clear EP_BUSY too early
+      (regression in 3.15)
+    - USB: devio: fix a condition in async_completed()
+    - [armhf] phy: twl4030-usb: remove incorrect pm_runtime_get_sync() in
+      probe function. (regression in 3.17)
+    - usb: gadget: composite: Fix NULL pointer dereference (regression in 4.1)
+    - usb: gadget: f_fs: do not set cancel function on synchronous {read,write}
+      (regression in 4.0)
+    - USB: OHCI: Fix race between ED unlink and URB submission
+      (regression in 3.17)
+    - usb: core: lpm: set lpm_capable for root hub device (regression in 3.15)
+    - usb: xhci: Bugfix for NULL pointer deference in xhci_endpoint_init()
+      function
+    - dm cache: fix race when issuing a POLICY_REPLACE operation
+    - dm btree remove: fix bug in redistribute3
+    - block: loop: convert to per-device workqueue (regression in 4.0)
+    - block: loop: avoiding too many pending per work I/O (regression in 4.0)
+    - block: Do a full clone when splitting discard bios (Closes: #793326)
+      (regression in 3.14)
+    - [armhf] drm/tegra: dpaux: Fix transfers larger than 4 bytes
+      (regression in 3.15)
+    - drm/qxl: Do not cause spice-server to clean our objects
+    - drm/atomic: fix out of bounds read in for_each_*_in_state helpers
+      (regression in 4.1)
+    - drm/radeon: take the mode_config mutex when dealing with hpds (v2)
+    - [x86] drm/i915/ppgtt: Break loop in gen8_ppgtt_clear_range failure path
+      (regression in 4.1)
+    - [x86] drm/i915: fix backlight after resume on 855gm (regression in 3.19)
+    - [x86] drm/i915: Snapshot seqno of most recently submitted request.
+      (regression in 4.0)
+    - Revert "drm/radeon: dont switch vt on suspend" (regression in 4.1)
+    - drm/radeon: unpin cursor BOs on suspend and pin them again on resume (v2)
+      (regression in 4.1)
+    - drm/radeon: fix user ptr race condition
+    - drm/radeon/ci: silence a harmless PCC warning
+    - drm: add a check for x/y in drm_mode_setcrtc
+    - drm: Stop resetting connector state to unknown (regression in 4.1)
+    - libata: Fix regression when the NCQ Send and Receive log page is absent
+    - xfs: fix remote symlinks on V5/CRC filesystems
+    - xfs: don't truncate attribute extents if no extents exist
+      (regression in 4.1)
+    - tpm: Fix initialization of the cdev (regression in 4.0)
+    - tpm, tpm_crb: fail when TPM2 ACPI table contents look corrupted
+      (regression in 4.1)
+    - [armel,armhf] dmaengine: mv_xor: bug fix for racing condition in
+      descriptors cleanup
+    - md: clear mddev->private when it has been freed. (regression in 4.0)
+    - md: unlock mddev_lock on an error path. (regression in 4.0)
+    - md: Skip cluster setup for dm-raid (regression in 4.1)
+    - Btrfs: don't invalidate root dentry when subvolume deletion fails
+      (regression in 3.18)
+    - Btrfs: use kmem_cache_free when freeing entry in inode cache
+    - Btrfs: fix race between caching kthread and returning inode to inode
+      cache (regression in 3.15)
+    - Btrfs: fix fsync data loss after append write
+    - Btrfs: fix list transaction->pending_ordered corruption
+      (regression in 3.19)
+    - Btrfs: fix file corruption after cloning inline extents
+    - selinux: fix mprotect PROT_EXEC regression caused by mm change
+      (regression in 4.1)
+    - ceph/crush: fix a bug in tree bucket decode
+    - ACPI / PNP: Reserve ACPI resources at the fs_initcall_sync stage
+      (regression in 4.1)
+    - ACPI / LPSS: Fix up acpi_lpss_create_device() (regression in 4.0)
+    - ACPICA: Tables: Enable both 32-bit and 64-bit FACS (regression in 3.14)
+    - ACPICA: Tables: Enable default 64-bit FADT addresses favor
+    - ACPI / PCI: Fix regressions caused by resource_size_t overflow with
+      32-bit kernel (regression in 4.0)
+    - mmc: sdhci: Restore behavior while creating OCR mask (regression in 3.17)
+    - PM / clk: Fix clock error check in __pm_clk_add() (regression in 3.19)
+    - RDMA/ocrdma: fix double free on pd (regression in 4.0)
+    - mm/hugetlb: introduce minimum hugepage order (regression in 3.12)
+    - PM / sleep: Increase default DPM watchdog timeout to 60
+      (regression in 3.13)
+    - firmware: dmi_scan: Only honor end-of-table for 64-bit tables
+      (regression in 3.19)
+    - mac80211: fix the beacon csa counter for mesh and ibss
+      (regression in 3.17)
+    - iwlwifi: mvm: fix ROC reference accounting (regression in 3.17)
+    - cfg80211: ignore netif running state when changing iftype
+    - e1000e: Cleanup handling of VLAN_HLEN as a part of max frame size
+      (regression in 3.15)
+    - ovl: lookup whiteouts outside iterate_dir() (regression in 4.0)
+    - pNFS: Fix a memory leak when attempted pnfs fails
+    - pNFS/flexfiles: Fix the reset of struct pgio_header when resending
+    - nfs: fixing infinite OPEN loop in 4.0 stateid recovery
+    - NFS: Ensure we set NFS_CONTEXT_RESEND_WRITES when requeuing writes
+    - nfs: fix potential credential leak in ff_layout_update_mirror_cred
+    - nfs: always update creds in mirror, even when we have an already
+      connected ds
+    - 9p: forgetting to cancel request on interrupted zero-copy RPC
+    - 9p: don't leave a half-initialized inode sitting around
+    - p9_client_write(): avoid double p9_free_req()
+    - [arm64] bpf: fix out-of-bounds read in bpf2a64_offset()
+    - [arm64] bpf: fix endianness conversion bugs
+    - [arm64] Don't report clear pmds and puds as huge
+    - mm: avoid setting up anonymous pages into file mapping
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.5
+    - [powerpc*] powernv: Fix race in updating core_idle_state
+      (regression in 3.19)
+    - Revert "Input: synaptics - allocate 3 slots to keep stability in image
+      sensors" (regression in 4.1)
+    - [hppa] Fix some PTE/TLB race conditions and optimize __flush_tlb_range
+      based on timing results
+    - [hppa] mm: Fix a memory leak related to pmd not attached to the pgd
+      (regression in 4.0)
+    - [armel,armhf] 8404/1: dma-mapping: fix off-by-one error in bitmap size
+      check (regression in 3.15)
+    - [mips*] c-r4k: Fix cache flushing for MT cores
+    - can: replace timestamp as unique skb attribute (regression in 4.1)
+    - vfs: freeing unlinked file indefinitely delayed
+    - [armhf] crypto: omap-des - Fix unmapping of dma channels
+    - [s390x] nmi: fix vector register corruption
+    - [s390x] bpf: clear correct BPF accumulator register
+    - genirq: Prevent resend to interrupts marked IRQ_NESTED_THREAD
+    - [x86] perf: Fix static_key bug in load_mm_cr4() (regression in 4.0)
+    - Revert "dm: only run the queue on completion if congested or no requests
+      pending" (regression in 4.1)
+    - scsi: fix host max depth checking for the 'queue_depth' sysfs interface
+      (regression in 3.19)
+    - scsi: fix memory leak with scsi-mq (regression in 3.17)
+    - mnt: Clarify and correct the disconnect logic in umount_tree
+      (regressions in 4.0.2, 4.1)
+    - mnt: In detach_mounts detach the appropriate unmounted mount
+      (regression in 4.1)
+    - ftrace: Fix breakage of set_ftrace_pid (regression in 3.16)
+    - [x86] iommu/vt-d: Fix VM domain ID leak (regression in 3.17)
+    - mmc: sdhci check parameters before call dma_free_coherent
+      (regression in 3.16)
+    - iwlwifi: mvm: fix antenna selection when BT is active
+      (regression in 3.17)
+    - md/raid1: fix test for 'was read error from last working device'.
+    - [armhf] spi: imx: Fix small DMA transfers (regression in 3.18)
+    - [armhf] regulator: s2mps11: Fix GPIO suspend enable shift wrapping bug
+    - usb-storage: ignore ZTE MF 823 card reader in mode 0x1225
+    - [armhf] Revert "serial: imx: initialized DMA w/o HW flow enabled"
+      (regression in 4.0)
+    - serial: core: Fix crashes while echoing when closing (regression in 3.19)
+    - efi: Handle memory error structures produced based on old versions of
+      standard (regression in 3.13)
+    - [x86] efi: Use all 64 bit of efi_memmap in setup_e820()
+    - rds: rds_ib_device.refcount overflow
+    - n_tty: signal and flush atomically (regression in 4.0)
+    - [x86] perf/intel/cqm: Return cached counter value from IRQ context
+      (regression in 4.1)f
+    - NFS: Don't revalidate the mapping if both size and change attr are up to
+      date (regression in 3.16)
+    - NFSv4: We must set NFS_OPEN_STATE flag in nfs_resync_open_stateid_locked
+      (regression in 4.0)
+    - NFS: Fix a memory leak in nfs_do_recoalesce (regression in 4.0)
+    - iscsi-target: Fix use-after-free during TPG session shutdown
+    - iscsi-target: Fix iscsit_start_kthreads failure OOPs (regression in 4.0)
+    - iscsi-target: Fix iser explicit logout TX kthread leak
+      (regression in 4.0)
+    - qla2xxx: Fix hardware lock/unlock issue causing kernel panic.
+      (regression in 3.18)
+    - qla2xxx: release request queue reservation. (regression in 3.18)
+    - qla2xxx: Remove msleep in qlt_send_term_exchange (regression in 3.18)
+    - qla2xxx: fix command initialization in target mode. (regression in 3.18)
+    - qla2xxx: kill sessions/log out initiator on RSCN and port down efvents
+      (regression in 3.18)
+    - drm/nouveau/fbcon/nv11-: correctly account for ring space usage
+    - drm/nouveau/kms/nv50-: guard against enabling cursor on disabled heads
+    - drm/nouveau: hold mutex when calling nouveau_abi16_fini()
+    - drm/nouveau/drm/nv04-nv40/instmem: protect access to priv->heap by mutex
+    - xfs: remote attribute headers contain an invalid LSN
+    - xfs: remote attributes need to be considered data
+
+  [ Ian Campbell ]
+  * [armhf] Enable cpufreq on some sunxi platforms (Closes: #793185)
+    - Enable autoloading of the cpufreq-dt driver.
+    - Enable autoloading of AXP20x regulator driver.
+
+  [ Ben Hutchings ]
+  * [x86] iio: Enable drivers for ACPI-discoverable devices as modules:
+    AK8975, BMC150_ACCEL, BMG160, BMP280, INV_MPU6050_IIO, JSA1212, KMX61,
+    KXCJK1013, MMA9551, MMA9553, SX9500
+  * Adjust for migration to git:
+    - Update .gitignore files
+    - debian/control: Update Vcs-* fields
+    - README.Debian, README.source: Update references to svn
+  * Bump ABI to 2
+  * virtio-net: drop NETIF_F_FRAGLIST (CVE-2015-5156)
+  * ovl: Add support for NFS as lower filesystem (Closes: #786925)
+  * perf: Fix double-free of the AUX buffer
+  * linux-source: Fix compression of the source tarball (Closes: #795199)
+  * udeb: Add newly enabled drivers:
+    - [i386] Add gpio_keys_polled, leds-gpio to input-modules
+    - Add virtio-input to input-modules
+    - Add toshsd to mmc-modules
+    - Add wd719x to scsi-extra-modules
+    - Move eeprom_93cx6 to core-modules; make scsi-extra-modules depend on it
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 15 Aug 2015 23:37:20 +0200
+
+linux-tools (4.1.4-2) unstable; urgency=medium
+
+  * [mips*,alpha,hppa] linux-perf: Add empty Build files for these architectures
+    (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 04 Aug 2015 17:11:46 +0100
+
+linux-tools (4.1.4-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.4
+    - perf bench numa: Fix to show proper convergence stats
+
+  [ Ben Hutchings ]
+  * linux-tools: Set $KBUILD_BUILD_TIMESTAMP from changelog and use it as man
+    page date
+  * hyperv-daemons: Only attempt to build package on i386, amd64
+    (fixes FTBFS on other architectures)
+  * linux-tools: Rename to linux-perf-<version>, since other tools are
+    in other binary packages
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 04 Aug 2015 00:47:58 +0100
+
+linux (4.1.3-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.3
+
+  [ Ben Hutchings ]
+  * [armel/kirkwood] ubi: Change UBIFS_FS and MTD_UBI from built-in to
+    modules, to reduce kernel image size (fixes FTBFS)
+  * debian/rules.real: Use dpkg-parsechangelog -S
+  * [rt] Update to 4.1.3-rt3 and re-enable
+  * KEYS: ensure we free the assoc array edit if edit is valid (CVE-2015-1333)
+  * [armel,sh4] linux-image: Recommend u-boot-tools rather than the obsolete
+    uboot-mkimage package (Closes: #793608)
+  * [i386/586] Enable KEYBOARD_GPIO_POLLED and LEDS_GPIO as modules, and
+    ALIX, NET5501, GEOS (Closes: #734204)
+  * [s390x] cachinfo: add missing facility check to init_cache_level()
+    (Closes: #793929)
+  * md: use kzalloc() when bitmap is disabled (CVE-2015-5697)
+  * inet: Enable IPVLAN, NET_FOU as modules; enable NET_FOU_IP_TUNNELS
+  * netfilter: Enable NFT_REDIR as module
+  * net/sched: Enable NET_ACT_VLAN, NET_ACT_BPF, NET_ACT_CONNMARK as modules
+  * mpls: Enable MPLS_ROUTING as module
+  * hci_uart: Enable BT_HCIUART_INTEL, BT_HCIUART_BCM
+  * SCSI: Enable SCSI_WD719X as module
+  * dm: Enable DM_LOG_WRITES as module
+  * cxgb4: Enable CHELSIO_T4_DCB
+  * ixgbe: Enable IXGBE_VXLAN
+  * i40e: Enable I40E_FCOE
+  * drm: Enable DRM_VGEM as module
+  * virtio: Enable VIRTIO_INPUT as module
+  * mmc: Enable MMC_TOSHIBA_PCI as module
+  * [x86] block: Enable BLK_DEV_PMEM as module; enable X86_PMEM_LEGACY
+  * [x86] tpm: Enable TCG_CRB as module
+  * debug: Enable DEBUG_LIST
+  * security: Apply and enable GRKERNSEC_PERF_HARDEN feature from Grsecurity,
+    disabling use of perf_event_open() by unprivileged users by default
+    (sysctl: kernel.perf_event_paranoid)
+  * Set ABI to 1
+
+  [ Ian Campbell ]
+  * [armhf] Set CONFIG_ARM_TEGRA_CPUFREQ as builtin.
+  * [armhf] Enable new drivers for sunxi platforms (Closes: #792388)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 03 Aug 2015 22:17:15 +0100
+
+linux-tools (4.1.2-1~exp1) experimental; urgency=medium
+
+  * New upstream release
+
+  [ Bastian Blank ]
+  * Add hyperv-daemons package, thanks to Hideki Yamane (closes: #782761)
+
+  [ Ben Hutchings ]
+  * hyperv-daemons: Rewrite description
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 13 Jul 2015 01:33:27 +0100
+
+linux (4.1.2-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.2
+
+  [ Ben Hutchings ]
+  * Fix more issues that prevent a reproducible build:
+    - linux-doc: DocBook: generate consistent IDs
+    - linux-manual: DocBook: Fix duplicate man pages
+    - linux-manual: kernel-doc: Use $KBUILD_BUILD_TIMESTAMP as man page date
+  * [i386] Disable VM86 (Closes: #792003)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 11 Jul 2015 18:01:42 +0100
+
+linux (4.1.1-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_4.1
+    - i40e: start up in VEPA mode by default (Closes: #790953)
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.1
+
+  [ Ben Hutchings ]
+  * Fix some issues that prevent a reproducible build (thanks to
+    Jérémy Bobbio):
+    - linux-image: Fix timestamps in the built-in initramfs
+    - linux-source: Fix timestamps and sort files in the tarball
+    - linux-doc,linux-manual: Drop original timestamp (and name) when
+      compressing
+    - linux-doc: Parse kernel-doc deterministically
+  * aufs: Apply patches to enable building aufs out-of-tree
+  * [x86] Enable MMIOTRACE (Closes: #790808)
+
+  [ maximilian attems ]
+  * [x86] Enable SND_SOC_INTEL_BROADWELL_MACH. (closes: #785422)
+
+  [ Ian Campbell ]
+  * [arm64+armhf] Enable SYSCON poweroff driver.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 07 Jul 2015 09:15:45 +0100
+
+linux (4.0.8-2) unstable; urgency=high
+
+  [ Uwe Kleine-König ]
+  * [rt] Update to 4.0.8-rt6
+
+  [ Ben Hutchings ]
+  * [amd64] Fix nested NMI handling (CVE-2015-3290, CVE-2015-3291,
+    CVE-2015-5157)
+    - Enable nested do_nmi handling for 64-bit kernels
+    - Remove asm code that saves cr2
+    - Switch stacks on userspace NMI entry
+    - Reorder nested NMI checks
+    - Use DF to avoid userspace RSP confusing nested NMI detection
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 22 Jul 2015 21:45:07 +0100
+
+linux (4.0.8-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.8
+    - netfilter: nft_rbtree: fix locking
+    - [armhf] clk-imx6q: refine sata's parent
+    - KVM: nSVM: Check for NRIPS support before updating control field
+    - [sparc*] Use GFP_ATOMIC in ldc_alloc_exp_dring() as it can be called in
+      softirq context
+    - bridge: fix multicast router rlist endless loop
+    - net: igb: fix the start time for periodic output signals
+    - net: don't wait for order-3 page allocation
+    - sctp: fix ASCONF list handling (CVE-2015-3212)
+    - bridge: fix br_stp_set_bridge_priority race conditions
+    - packet: read num_members once in packet_rcv_fanout()
+    - packet: avoid out of bounds read in round robin fanout
+    - neigh: do not modify unlinked entries
+    - tcp: Do not call tcp_fastopen_reset_cipher from interrupt context
+    - ip: report the original address of ICMP messages
+    - net/mlx4_en: Release TX QP when destroying TX ring
+    - net/mlx4_en: Wake TX queues only when there's enough room
+    - net/mlx4_en: Fix wrong csum complete report when rxvlan offload is
+      disabled
+    - mlx4: Disable HA for SRIOV PF RoCE devices
+    - net: phy: fix phy link up when limiting speed via device tree
+    - bnx2x: fix lockdep splat
+    - sctp: Fix race between OOTB responce and route removal
+    - [armhf] net: mvneta: introduce compatible string "marvell, armada-xp-neta"
+    - [armhf] mvebu: update Ethernet compatible string for Armada XP
+    - [armhf] net: mvneta: disable IP checksum with jumbo frames for Armada 370
+    - usb: gadget: f_fs: fix check in read operation
+    - usb: gadget: f_fs: add extra check before unregister_gadget_item
+    - crypto: talitos - avoid memleak in talitos_alg_alloc()
+    - Revert "crypto: talitos - convert to use be16_add_cpu()"
+    - [armhf/armmp-lpae] iommu/arm-smmu: Fix broken ATOS check
+    - [x86] iommu/amd: Handle large pages correctly in free_pagetable
+    - mmc: sdhci: fix low memory corruption
+    - [x86] intel_pstate: set BYT MSR with wrmsrl_on_cpu()
+    - selinux: fix setting of security labels on NFS
+    - [armhf] KVM: force execution of HCPTR access on VM exit
+    - [armhf] kvm: psci: fix handling of unimplemented functions
+    - [armhf] tegra20: Store CPU "resettable" status in IRAM
+    - [powerpc*] tick/idle: Do not register idle states with
+      CPUIDLE_FLAG_TIMER_STOP set in periodic mode
+    - [powerpc*] perf: Fix book3s kernel to userspace backtraces
+    - [x86] PCI: Use host bridge _CRS info on systems with >32 bit addressing
+    - [x86] PCI: Use host bridge _CRS info on Foxconn K8M890-8237A
+    - [s390x] KVM: fix external call injection without sigp interpretation
+    - [s390x] kdump: fix REGSET_VX_LOW vector register ELF notes
+    - [s390x] KVM: virtio-ccw: don't overwrite config space values
+    - [x86] KVM: properly restore LVT0
+    - [x86] KVM: make vapics_in_nmi_mode atomic
+    - fs: Fix S_NOSEC handling
+    - fs/ufs: revert "ufs: fix deadlocks introduced by sb mutex merge"
+    - fs/ufs: restore s_lock mutex
+    - vfs: Remove incorrect debugging WARN in prepend_path
+    - vfs: Ignore unlocked mounts in fs_fully_visible
+    - ufs: Fix warning from unlock_new_inode()
+    - ufs: Fix possible deadlock when looking up directories
+    - fs/ufs: restore s_lock mutex_init()
+
+  [ Ben Hutchings ]
+  * [ppc64el] Ignore ABI changes due to disabling HIBERNATION (fixes FTBFS)
+  * [x86] kvm: fix kvm_apic_has_events to check for NULL pointer (CVE-2015-4692)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 11 Jul 2015 04:58:05 +0100
+
+linux (4.0.7-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.6
+    - crush: ensuring at most num-rep osds are selected
+    - aio: fix serial draining in exit_aio()
+    - net: core: Correct an over-stringent device loop detection.
+    - [x86] bpf_jit: fix FROM_BE16 and FROM_LE16/32 instructions
+    - [x86] bpf_jit: fix compilation of large bpf programs
+    - net: phy: Allow EEE for all RGMII variants
+    - netlink: Reset portid after netlink_insert failure
+    - rtnl/bond: don't send rtnl msg for unregistered iface
+    - tcp/ipv6: fix flow label setting in TIME_WAIT state
+    - net/ipv6/udp: Fix ipv6 multicast socket filter regression
+    - net: sched: fix call_rcu() race on classifier module unloads
+    - ipv4: Avoid crashing in ip_error
+    - cdc_ncm: Fix tx_bytes statistics
+    - bridge: fix parsing of MLDv2 reports
+    - net: dp83640: fix broken calibration routine.
+    - net: dp83640: reinforce locking rules.
+    - net: dp83640: fix improper double spin locking.
+    - unix/caif: sk_socket can disappear when state is unlocked
+    - xen/netback: Properly initialize credit_bytes
+    - net_sched: invoke ->attach() after setting dev->qdisc
+    - sctp: Fix mangled IPv4 addresses on a IPv6 listening socket
+    - bridge: fix br_multicast_query_expired() bug
+    - udp: fix behavior of wrong checksums (CVE-2015-5364)
+    - tcp: fix child sockets to use system default congestion control if not set
+    - xen: netback: read hotplug script once at start of day.
+    - ipv4/udp: Verify multicast group is ours in upd_v4_early_demux()
+    - be2net: Replace dma/pci_alloc_coherent() calls with dma_zalloc_coherent()
+    - bridge: disable softirqs around br_fdb_update to avoid lockup
+    - netlink: Disable insertions/removals during rehash
+    - drivers/base: cacheinfo: handle absence of caches
+    - n_tty: Fix auditing support for cannonical mode
+    - [x86] iommu/vt-d: Allow RMRR on graphics devices too
+    - [x86] iommu/vt-d: Fix passthrough mode with translation-disabled devices
+    - ALSA: hda/realtek - Add a fixup for another Acer Aspire 9420
+    - ALSA: usb-audio: Add mic volume fix quirk for Logitech Quickcam Fusion
+    - ALSA: usb-audio: don't try to get Outlaw RR2150 sample rate
+    - ALSA: usb-audio: add MAYA44 USB+ mixer control names
+    - ALSA: usb-audio: fix missing input volume controls in MAYA44 USB(+)
+    - ALSA: usb-audio: add native DSD support for JLsounds I2SoverUSB
+    - [armhf] dmaengine: pl330: Fix hang on dmaengine_terminate_all on certain
+      boards
+    - dmaengine: Fix choppy sound because of unimplemented resume
+    - Input: alps - do not reduce trackpoint speed by half
+    - Input: synaptics - add min/max quirk for Lenovo S540
+    - Input: elantech - fix detection of touchpads where the revision matches
+      a known rate
+    - Input: elantech - add new icbody type
+    - block: fix ext_dev_lock lockdep report
+    - block: discard bdi_unregister() in favour of bdi_destroy()
+    - USB: cp210x: add ID for HubZ dual ZigBee and Z-Wave dongle
+    - USB: serial: ftdi_sio: Add support for a Motion Tracker Development Board
+    - usb: host: xhci: add mutex for non-thread-safe data
+    - usb: make module xhci_hcd removable
+    - [x86] asm/irq: Stop relying on magic JMP behavior for early_idt_handlers
+    - [armhf] dts: am335x-boneblack: disable RTC-only sleep to avoid hardware
+      damage
+    - [x86] drm/amdkfd: fix topology bug with capability attr.
+    - drm/radeon: use proper ACR regisiter for DCE3.2
+    - [x86] drm/i915/hsw: Fix workaround for server AUX channel clock divisor
+    - [x86] drm/i915: Don't skip request retirement if the active list is empty
+    - [x86] drm/i915: Fix DDC probe for passive adapters
+    - drm/radeon: fix freeze for laptop with Turks/Thames GPU.
+    - Revert "drm/radeon: don't share plls if monitors differ in audio support"
+    - Revert "drm/radeon: adjust pll when audio is not enabled"
+    - drm/radeon: Make sure radeon_vm_bo_set_addr always unreserves the BO
+    - serial: imx: Fix DMA handling for IDLE condition aborts
+    - [powerpc*] of/dynamic: Fix test for PPC_PSERIES
+    - virtio_pci: Clear stale cpumask when setting irq affinity
+    - [armel,armhf] bus: mvebu-mbus: do not set WIN_CTRL_SYNCBARRIER on non
+      io-coherent platforms.
+    - [armel,armhf] Revert "bus: mvebu-mbus: make sure SDRAM CS for DMA don't
+      overlap the MBus bridge window"
+    - [arm64] dts: mt8173-evb: fix model name
+    - mm/memory_hotplug.c: set zone->wait_table to null after freeing it
+    - md: Close race when setting 'action' to 'idle'.
+    - md: don't return 0 from array_state_store
+    - sched, numa: do not hint for NUMA balancing on VM_MIXEDMAP mappings
+    - blk-mq: free hctx->ctxs in queue's release handler
+    - cfg80211: wext: clear sinfo struct before calling driver
+    - [armhf] irqchip: sunxi-nmi: Fix off-by-one error in irq iterator
+    - Btrfs: send, add missing check for dead clone root
+    - Btrfs: send, don't leave without decrementing clone root's send_progress
+    - btrfs: incorrect handling for fiemap_fill_next_extent return
+    - btrfs: cleanup orphans while looking up default subvolume
+    - Btrfs: fix range cloning when same inode used as source and destination
+    - Btrfs: fix uninit variable in clone ioctl
+    - Btrfs: fix regression in raid level conversion
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.7
+    - crypto: caam - improve initalization for context state saves
+    - crypto: caam - fix RNG buffer cache alignment
+    - [x86] KVM: fix lapic.timer_mode on restore
+    - ALSA: hda - adding a DAC/pin preference map for a HP Envy TS machine
+    - tracing: Have filter check for balanced ops
+    - iser-target: Fix variable-length response error completion
+    - iser-target: Fix possible use-after-free
+    - drm/mgag200: Reject non-character-cell-aligned mode widths
+    - [x86] drm/i915: Always reset vma->ggtt_view.pages cache on unbinding
+    - [x86] Revert "drm/i915: Don't skip request retirement if the active list
+      is empty"
+    - drm/radeon: Add RADEON_INFO_VA_UNMAP_WORKING query
+    - ath3k: Add support of 0489:e076 AR3012 device
+    - ath3k: add support of 13d3:3474 AR3012 device
+    - b43: fix support for 14e4:4321 PCI dev with BCM4321 chipset
+    - cdc-acm: Add support of ATOL FPrint fiscal printers
+    - [armhf] EXYNOS: Fix failed second suspend on Exynos4
+    - [x86] kprobes: Return correct length in __copy_instruction()
+    - dm: fix NULL pointer when clone_and_map_rq returns !DM_MAPIO_REMAPPED
+    - [x86] drm/i915: Avoid GPU hang when coming out of s3 or s4
+    - [powerpc*] powernv: Restore non-volatile CRs after nap
+
+  [ Ben Hutchings ]
+  * mm: Re-enable ZBUD as module (Closes: #789094)
+  * mm: Change ZSMALLOC from built-in to module
+  * Revert "tcp: fix child sockets to use system default congestion control if
+    not set" to avoid ABI change
+  * [ppc64el] Disable HIBERNATION (Closes: #789070)
+  * [mips*] Correct FP ISA requirements (Closes: #781892)
+  * udeb: Add more drivers to sound-modules, thanks to Samuel Thibault
+    (Closes: #782495)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 06 Jul 2015 02:57:42 +0100
+
+linux (4.0.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.5
+    - [x86] iommu/amd: Fix bug in put_pasid_state_wait (regression in 4.0)
+    - [x86] fpu: Disable XSAVES* support for now (regression in 3.17)
+    - [x86] KVM: MMU: fix smap permission check
+    - [x86] kvm: fix crash in kvm_vcpu_reload_apic_access_page
+    - [x86] KVM: MMU: fix SMAP virtualization
+    - ktime: Fix ktime_divns to do signed division (regression in 3.17)
+    - omfs: fix sign confusion for bitmap loop counter (regression in 3.18)
+    - xfs: xfs_attr_inactive leaves inconsistent attr fork state behind
+    - xfs: xfs_iozero can return positive errno (regression in 3.17)
+    - ovl: don't remove non-empty opaque directory (regression in 4.0)
+    - [armhf] mfd: da9052: Fix broken regulator probe (regression in 3.19)
+    - libceph: request a new osdmap if lingering request maps to no osd
+    - Revert "libceph: clear r_req_lru_item in __unregister_linger_request()"
+      (regression in 3.18)
+    - Btrfs: fix racy system chunk allocation when setting block group ro
+      (regression in 4.0)
+    - xen/events: don't bind non-percpu VIRQs with percpu chip
+    - hwmon: (tmp401) Do not auto-detect chip on I2C address 0x37
+    - clk: add missing lock when call clk_core_enable in clk_set_parent
+      (regression in 4.0)
+    - brcmfmac: avoid null pointer access when brcmf_msgbuf_get_pktid() fails
+    - lib: Fix strnlen_user() to not touch memory after specified maximum
+    - vfs: d_walk() might skip too much
+    - module: Call module notifier on failure after complete_formation()
+      (regression in 3.16)
+    - Revert "ALSA: hda - Add mute-LED mode control to Thinkpad"
+      (regression in 4.0.3)
+    - xhci: Solve full event ring by increasing TRBS_PER_SEGMENT to 256
+    - [powerpc*] mce: fix off by one errors in mce event handling
+      (regression in 3.19)
+    - pty: Fix input race when closing (regression in 3.19)
+    - ext4: fix lazytime optimization
+    - ext4: fix NULL pointer dereference when journal restart fails
+    - ext4: check for zero length extent explicitly
+    - jbd2: fix r_count overflows leading to buffer overflow in journal recovery
+    - libata: Ignore spurious PHY event on LPM policy change
+    - libata: Blacklist queued TRIM on all Samsung 800-series
+    - [arm64] bpf: fix signedness bug in loading 64-bit immediate
+      (regression in 3.18)
+    - [x86] gpio: gpio-kempld: Fix get_direction return value
+    - [s390x] crypto: ghash - Fix incorrect ghash icv buffer handling.
+    - mac80211: move WEP tailroom size check
+    - mac80211: don't use napi_gro_receive() outside NAPI context
+    - [s390x] mm: correct return value of pmd_pfn (regression in 3.17)
+    - [armhf] EXYNOS: Fix dereference of ERR_PTR returned by
+      of_genpd_get_from_provider (regression in 4.0)
+    - [arm*] fix missing syscall trace exit
+    - [hppa] Fix crashes due to stack randomization on stack-grows-upwards
+      architectures
+    - kernfs: do not account ino_ida allocations to memcg
+    - nfsd: fix the check for confirmed openowner in nfs4_preprocess_stateid_op
+    - md/raid5: don't record new size if resize_stripes fails.
+    - Revert "HID: logitech-hidpp: support combo keyboard touchpad TK820"
+      (regression in 3.19)
+    - [mips*] fix FP mode selection in lieu of .MIPS.abiflags data
+      (regression in 4.0)
+    - ACPI / init: Fix the ordering of acpi_reserve_resources()
+    - iwlwifi: mvm: Free fw_status after use to avoid memory leak
+      (regression in 3.19)
+    - iwlwifi: pcie: prevent using unmapped memory in fw monitor
+    - drm/plane-helper: Adapt cursor hack to transitional helpers
+      (regression in 4.0)
+    - drm/radeon/audio: make sure connector is valid in hotplug case
+    - Revert "drm/radeon: only mark audio as connected if the monitor supports
+      it (v3)" (regression in 4.0.3)
+    - dm: fix casting bug in dm_merge_bvec() (regression in 3.19)
+    - dm: fix reload failure of 0 path multipath mapping on blk-mq devices
+      (regression in 4.0)
+    - UBI: block: Add missing cache flushes
+    - md: fix race when unfreezing sync_action (regression in 4.0)
+    - fs/binfmt_elf.c:load_elf_binary(): return -EINVAL on zero-length mappings
+      (regression in 4.0.2)
+
+  [ Ben Hutchings ]
+  * udeb: Remove i2o modules (fixes FTBFS on amd64) (Closes: #787004)
+  * Revert "libata: Ignore spurious PHY event on LPM policy change" to avoid
+    ABI change
+
+  [ Ian Campbell ]
+  * [armhf] Enable PCIe support for IMX6 boards. Patch from Vagrant
+    Cascadian (Closes: #787029)
+  * [armhf] Add stmmac-platform module to nic-modules udeb. (Closes: #786716)
+  * [arm] Fix mvebu-mbus for non-io-coherent platforms. In particular
+    armel/{orion5x,kirkwood}.
+  * [armel/kirkwood]: Enable CONFIG_ARM_KIRKWOOD_CPUIDLE. (Closes: #787716)
+
+  [ Uwe Kleine-König ]
+  * [rt] Update to 4.0.5-rt3
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 16 Jun 2015 15:40:49 +0100
+
+linux (4.0.4-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.3
+    - bpf: fix 64-bit divide
+    - route: Use ipv4_mtu instead of raw rt_pmtu (regression in 3.19)
+    - cxgb4: Fix MC1 memory offset calculation (regression in 3.19)
+    - [mips*] Revert "MIPS: Remove race window in page fault handling"
+      (regression in 3.17)
+    - [mips*] Fix race condition in lazy cache flushing.
+    - [mips*/octeon] Remove udelay() causing huge IRQ latency
+    - [mips*] Fix cpu_has_mips_r2_exec_hazard.
+    - [mips*] asm: elf: Set O32 default FPU flags (regression in 4.0)
+    - ALSA: emux: Fix mutex deadlock in OSS emulation
+    - cdc-acm: prevent infinite loop when parsing CDC headers.
+      (regression in 4.0)
+    - [arm64] dma-mapping: always clear allocated buffers
+    - [arm64] add missing PAGE_ALIGN() to __dma_free()
+    - [armhf] usb: chipidea: otg: remove mutex unlock and lock while stop and
+      start role (regression in 3.16)
+    - btrfs: unlock i_mutex after attempting to delete subvolume during send
+      (regression in 3.16)
+    - [x86] ACPI / SBS: Enable battery manager when present (regression in 3.18)
+    - rbd: end I/O the entire obj_request on error
+    - ext4: fix data corruption caused by unwritten and delayed extents
+      (Closes: #785672)
+    - ext4: move check under lock scope to close a race.
+    - SCSI: add 1024 max sectors black list flag (regression in 3.19)
+    - 3w-xxxx: fix command completion race
+    - 3w-9xxx: fix command completion race
+    - 3w-sas: fix command completion race
+    - drm/radeon: fix lockup when BOs aren't part of the VM on release
+    - drm/radeon: reset BOs address after clearing it.
+    - drm/radeon: check new address before removing old one
+    - hfsplus: don't store special "osx" xattr prefix on-disk
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.4
+    - [x86] spinlocks: Fix regression in spinlock contention detection
+      (regression in 4.0)
+    - [x86] ACPI / SBS: Add 5 us delay to fix SBS hangs on MacBook
+      (regression in 3.18)
+    - [x86] PCI/ACPI: Make all resources except [io 0xcf8-0xcff] available on
+      PCI bus (regression in 4.0)
+    - ACPI / PNP: add two IDs to list for PNPACPI device enumeration
+      (regression in 3.16)
+    - ocfs2: dlm: fix race between purge and get lock resource
+    - nilfs2: fix sanity check of btree level in nilfs_btree_root_broken()
+    - mnt: Fix fs_fully_visible to verify the root directory is visible
+    - mm/memory-failure: call shake_page() when error hits thp tail page
+    - vfio: Fix runaway interruptible timeout (regression in 4.0)
+    - Revert "dm crypt: fix deadlock when async crypto algorithm returns -EBUSY"
+      (regression in 4.0.2)
+    - block: destroy bdi before blockdev is unregistered. (regression in 4.0)
+    - blk-mq: fix race between timeout and CPU hotplug
+    - blk-mq: fix CPU hotplug handling
+    - [armhf] dts: imx6: phyFLEX: USB VBUS control is active-high
+      (regression in 3.16)
+    - [armhf] mvebu: armada-xp-openblocks-ax3-4: Disable internal RTC
+    - [armhf] OMAP2+: Fix omap off idle power consumption creeping up
+      (regression in 3.16)
+    - [armel,armhf] net fix emit_udiv() for BPF_ALU | BPF_DIV | BPF_K
+      intruction.
+    - drm: Zero out invalid vblank timestamp in drm_update_vblank_count.
+      (regression in 3.17)
+    - [x86] drm/i915/dp: there is no audio on port A
+    - [x86] drm/amdkfd: allow unregister process with queues
+    - drm/radeon: disable semaphores for UVD V1 (v2)
+    - drm/radeon: don't setup audio on asics that don't support it
+    - drm/radeon: fix userptr BO unpin bug v3
+    - drm/radeon: make VCE handle check more strict
+    - drm/radeon: make UVD handle checking more strict
+    - drm/radeon: more strictly validate the UVD codec
+    - pinctrl: Don't just pretend to protect pinctrl_maps, do it for real
+    - mmc: card: Don't access RPMB partitions for normal read/write
+
+  [ Ben Hutchings ]
+  * Fix error messages at boot on systems without an RTC (Closes: #784146):
+    - rtc: hctosys: do not treat lack of RTC device as error
+    - rtc: hctosys: use function name in the error log
+  * [rt] Update to 4.0.4-rt1 and re-enable
+  * linux-image: Depend on kmod without an alternative of module-init-tools
+  * linux-image: Add versioned Breaks on udev (<< 208-8~) due to #752742 and
+    #756312
+  * [i386] pnp: Disable PNPBIOS_PROC_FS
+  * [arm64] USB: Add support for XHCI on APM Mustang (Closes: #785707)
+    - Change USB_XHCI_HCD to built-in and enable USB_XHCI_PLATFORM as built-in
+    - Make xhci platform driver use 64 bit or 32 bit DMA
+    - Add support for ACPI identification to xhci-platform
+  * md/raid0: fix restore to sector variable in raid0_make_request
+    (Closes: #786372) (regression in 4.0.2)
+  * [x86] e1000e: Add support for Sunrise Point (i219) (Closes: #784546)
+  * [x86] config: Enable NEED_DMA_MAP_STATE by default when SWIOTLB is selected
+    (Closes: #786551)
+  * cdc_ncm: Fix tx_bytes statistics (regression in 4.0)
+  * [armhf] USB: musb: Fix order of conditions for assigning end point
+    operations (regression in 3.19)
+  * [armel/{kirkwood,orion5x}] Disable PM again to reduce kernel image size
+  * [armel/kirkwood] Enable DEBUG_MVEBU_UART0_ALTERNATE, replacing
+    DEBUG_MVEBU_UART_ALTERNATE
+  * i2o: Disable I2O
+  * [x86] vmwgfx: Enable DRM_VMWGFX_FBCON (Closes: #714929)
+  * media: Enable DVB_SMIPCIE as module (Closes: #785153)
+  * Bump ABI to 2
+  * [x86] i2c: Change I2C to built-in and enable ACPI_I2C_OPREGION
+    (Closes: #778896)
+  * usb-storage: Enable USB_UAS for the third time, hoping that it's finally
+    robust enough (Closes: #749014)
+  * zram: Enable ZRAM_LZ4_COMPRESS (Closes: #770958)
+  * HID: Enable HID_BATTERY_STRENGTH (Closes: #783214)
+  * [x86] ALSA: Enable SND_SOC_INTEL_BROADWELL_MACH as module (Closes: #785422)
+
+  [ Ian Campbell ]
+  * [armhf+arm64] Enabled generic SYSCON regmap reset driver
+  * [arm64] Enable PCI support and related modules, adjusting udeb module lists
+    for new modules.
+  * [arm64] Build XHCI platform drivers as a module.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 26 May 2015 02:30:06 +0100
+
+linux (4.0.2-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.1
+    - udptunnels: Call handle_offloads after inserting vlan tag.
+    - tcp: tcp_make_synack() should clear skb->tstamp
+    - bnx2x: Fix busy_poll vs netpoll
+    - bpf: fix verifier memory corruption
+    - Revert "net: Reset secmark when scrubbing packet"
+    - skbuff: Do not scrub skb mark within the same name space
+    - fs: take i_mutex during prepare_binprm for set[ug]id executables
+      (CVE-2015-3339)
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.0.2
+    - tcp: fix possible deadlock in tcp_send_fin()
+    - tcp: avoid looping in tcp_send_fin() (regression in 4.0)
+    - net: do not deplete pfmemalloc reserve
+    - net: fix crash in build_skb()
+    - net: rfs: fix crash in get_rps_cpus() (regression in 4.0)
+    - md: fix md io stats accounting broken (regression in 3.19)
+    - [x86] perf/intel: Fix Core2,Atom,NHM,WSM cycles:pp events
+      (regression in 3.19)
+    - [x86] fix special __probe_kernel_write() tail zeroing case
+      (regression in 4.0)
+    - Btrfs: fix log tree corruption when fs mounted with -o discard
+    - btrfs: don't accept bare namespace as a valid xattr
+    - Btrfs: fix inode eviction infinite loop after cloning into it
+    - Btrfs: fix inode eviction infinite loop after extent_same ioctl
+    - mm/hugetlb: use pmd_page() in follow_huge_pmd() (regression in 4.0)
+    - [powerpc] hugetlb: Call mm_dec_nr_pmds() in hugetlb_free_pmd_range()
+      (regression in 4.0)
+    - [s390x] KVM: fix handling of write errors in the tpi handler
+    - [s390x] KVM: reinjection of irqs can fail in the tpi handler
+    - [s390x] KVM: fix get_all_floating_irqs (regression in 3.15)
+    - [s390x] hibernate: fix save and restore of kernel text section
+    - KVM: use slowpath for cross page cached accesses
+    - [arm*] KVM: check IRQ number on userland injection
+    - [x86] KVM: VMX: Preserve host CR4.MCE value while in guest mode.
+    - [mips*el] Loongson-3: Add IRQF_NO_SUSPEND to Cascade irqaction
+      (regression in 3.19)
+    - [mips*] Hibernate: flush TLB entries earlier
+    - md/raid0: fix bug with chunksize not a power of 2.
+    - [armhf] spi: imx: read back the RX/TX watermark levels earlier
+      (regression in 3.18)
+    - ring-buffer: Replace this_cpu_*() with __this_cpu_*()
+    - NFS: fix BUG() crash in notify_change() with patch to chown_common()
+    - [armhf] fix broken hibernation (regression in 3.16)
+    - [armel,armhf] 8320/1: fix integer overflow in ELF_ET_DYN_BASE
+    - ALSA: emu10k1: don't deadlock in proc-functions
+    - Input: alps - fix touchpad buttons getting stuck when used with trackpoint
+      (regression in 4.0)
+    - mfd: core: Fix platform-device name collisions (regression in 3.19)
+    - fs/binfmt_elf.c: fix bug in loading of PIE binaries
+    - ptrace: fix race between ptrace_resume() and wait_task_stopped()
+    - ext4: make fsync to sync parent dir in no-journal for real this time
+    - mnt: Prevent circumvention of locked mounts using umount(MNT_DETACH)
+      (CVE-2014-9717)
+    - tpm: fix: sanitized code paths in tpm_chip_register() (regression in 4.0)
+    - [powerpc/powerpc64,ppc64*] perf: Cap 64bit userspace backtraces to
+      PERF_MAX_STACK_DEPTH (Closes: #784278)
+    - UBI: account for bitflips in both the VID header and data
+    - UBI: fix out of bounds write
+    - UBI: fix check for "too many bytes"
+    - target: Fix COMPARE_AND_WRITE with SG_TO_MEM_NOALLOC handling
+    - target/file: Fix SG table for prot_buf initialization
+    - [arm64] head.S: ensure visibility of page tables (regression in 3.15)
+    - [arm64] errata: add workaround for cortex-a53 erratum #845719
+    - [powerpc/powerpc64,ppc64*] powernv: Don't map M64 segments using M32DT
+      (regression in 3.17)
+    - [powerpc/powerpc64,ppc64] cell: Fix crash in iic_setup_cpu() after per_cpu
+      changes (regression in 3.19)
+    - [powerpc/powerpc64,ppc64] cell: Fix cell iommu after it_page_shift changes
+    - [i386/686-pae] ACPICA: Utilities: split IO address types from data type
+      models.
+    - ACPICA: Store GPE register enable masks upfront (regression in 3.19)
+    - [armhf] clk: samsung: exynos4: Disable ARMCLK down feature on Exynos4210
+      SoC (regression in 3.17)
+    - [armhf] clk: tegra: Use the proper parent for plld_dsi (regression in 4.0)
+    - [armhf] serial: imx: Fix clearing of receiver overrun flag
+    - serial: 8250: Check UART_SCR is writable (regression in 4.0)
+    - sd: Unregister integrity profile (regression in 3.18)
+    - sd: Fix missing ATO tag check (regression in 3.18)
+    - [x86] Drivers: hv: vmbus: Fix a bug in the error path in vmbus_open()
+    - IB/core: disallow registering 0-sized memory region
+    - IB/iser: Fix wrong calculation of protection buffer length
+      (regression in 3.16)
+    - i2c: Mark adapter devices with pm_runtime_no_callbacks (regression in 4.0)
+    - [armhf] drm/exynos: Enable DP clock to fix display on Exynos5250 and other
+      (regression in 4.0)
+    - [x86] drm/i915: vlv: fix save/restore of GFX_MAX_REQ_COUNT reg
+      (regression in 3.16)
+    - [x86] drm/i915: cope with large i2c transfers
+    - vfs: RCU pathwalk breakage when running into a symlink overmounting
+      something
+    - Revert "nfs: replace nfs_add_stats with nfs_inc_stats when add one"
+      (regression in 3.19)
+    - nfsd4: disallow ALLOCATE with special stateids (regression in 3.19)
+    - nfsd4: fix READ permission checking (regression in 3.16)
+    - nfsd4: disallow SEEK with special stateids (regression in 3.18)
+    - nfsd: eliminate NFSD_DEBUG (regression of linux-libc-dev in 3.19)
+    - nfs: fix high load average due to callback thread sleeping
+      (regression in 4.0)
+    - nfs: fix DIO good bytes calculation (regression in 4.0)
+    - nfs: remove WARN_ON_ONCE from nfs_direct_good_bytes
+    - NFS: Add a stub for GETDEVICELIST (regression in 3.18)
+    - sched/deadline: Always enqueue on previous rq when dl_task_timer() fires
+      (regression in 4.0)
+    - mac80211: send AP probe as unicast again (regression in 3.19)
+    - lib: memzero_explicit: use barrier instead of OPTIMIZER_HIDE_VAR
+    - [armhf] crypto: omap-aes - Fix support for unequal lengths
+    - memstick: mspro_block: add missing curly braces
+    - drivers: platform: parse IRQ flags from resources (regression in 3.18)
+
+  [ Ben Hutchings ]
+  * debian.py,gencontrol.py: Fix the version sanity checks for backports and
+    security/LTS uploads
+  * ipv4: Missing sk_nulls_node_init() in ping_unhash() (CVE-2015-3636)
+  * [armel/orion5x] Increase maximum kernel image size to ~2 MB, removing
+    support for DNS-323 (fixes FTBFS)
+    - Re-enable BLK_DEV_INTEGRITY, SCSI_UFSHCD, TCM_IBLOCK, AUDIT, USER_NS,
+      PCI_QUIRKS, FTRACE, DEBUG_BUGVERBOSE, SECURITY
+    - Enable DYNAMIC_DEBUG, FRONTSWAP
+  * [arm64,armhf,powerpcspe,x86] gpio: Explicitly enable GPIOLIB, as some
+    drivers now depend on rather than selecting it (fixes FTBFS on i386)
+  * [x86] thermal: Enable INT340X_THERMAL as module, replacing
+    ACPI_INT3403_THERMAL
+  * [x86] Re-enable IOSF_MBI and INTEL_RAPL as modules
+  * sound: Enable SND_USB_POD, SND_USB_PODHD, SND_USB_TONEPORT,
+    SND_USB_VARIAX as modules, replacing LINE6_USB
+  * media/rc: Enable IR_IGORPLUGUSB as module, replacing LIRC_IGORPLUGUSB
+  * [amd64] misc: Enable INTEL_MIC_BUS and re-enable INTEL_MIC_HOST as modules
+  * sound/firewire: Enable SND_OXFW as module, replacing SND_FIREWIRE_SPEAKERS
+  * [x86] Enable DW_DMAC and re-enable SND_SOC_INTEL_HASWELL_MACH,
+    SND_SOC_INTEL_BYT_RT5640_MACH, SND_SOC_INTEL_BYT_MAX98090_MACH as modules
+  * [x86] tpm: Enable TCG_TIS_I2C_ST33 as module, replacing TCG_ST33_I2C
+  * [armel/kirkwood] regulator: Re-enable REGULATOR, REGULATOR_FIXED_VOLTAGE
+  * [armel/kirkwood] sound: Enable SND_SIMPLE_CARD as module, replacing
+    SND_KIRKWOOD_SOC_OPENRD, SND_KIRKWOOD_SOC_T5325; re-enable
+    SND_SOC_ALC5623, SND_SOC_CS42L51_I2C as modules
+  * [alpha,armel/kirkwood,hppa,ia64,mips*/{octeon,sb1-bcm91250a}] Re-enable PM
+  * [armel/orion5x] Enable PM
+  * [armhf] sound: Enable SND_SIMPLE_CARD as module
+  * path_openat(): fix double fput()
+  * [x86] serial: Enable SERIAL_8250_DW as built-in
+  * [armhf] Enable ARM_ERRATA_430973 (Closes: #768890), ARM_ERRATA_643719,
+    ARM_ERRATA_754327, ARM_ERRATA_773022
+  * [x86] nfc: Enable NFC_HCI, NFC_MEI_PHY, NFC_PN544, NFC_PN544_MEI as
+    modules (Closes: #770323)
+  * Set ABI to 1
+  * mnt: Add missing pieces of fix for CVE-2014-9717:
+    - mnt: Fail collect_mounts when applied to unmounted mounts
+    - fs_pin: Allow for the possibility that m_list or s_list go unused.
+
+  [ Ian Campbell ]
+  * [armhf] Enable support for Freescale SNVS RTC. (Closes: #782364)
+  * [armhf] Add ehci-orion module to usb-modules udeb. (Closes: #783324)
+  * [armhf] imx-hdmi module is now called dw_hdmi-imx, so update fb-modules
+    udeb. Patches from both Vagrant Cascadian and Wookey. (Closes: #783275)
+  * [arm*] Install DTBS using dtbs_install target. (Closes: #784761)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 11 May 2015 04:29:06 +0100
+
+linux-tools (4.0.2-1) unstable; urgency=medium
+
+  * New upstream release
+  * Thanks to Luca Boccassi and Lukas Wunner for some hints on upgrading
+    to 4.0 (Closes: #778588)
+  * debian/control: Add gcc-multilib to Build-Depends in order to build
+    perf-read-vdso{,x}32
+  * linux-tools: Install perf-read-vdso{,x}32 in versioned directory
+    under /usr/lib
+  * linux-tools: Set ARCH=x86 when building perf for amd64, i386 or x32
+  * linux-kbuild: Include Makefile.kasan (Closes: #783681)
+  * linux-kbuild: Enable Large File Support (Closes: #778942)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 11 May 2015 03:53:12 +0100
+
+linux (4.0-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_4.0
+
+  [ Ben Hutchings ]
+  * [i386,s390] Remove 64-bit kernel flavours, which are also available
+    through multiarch
+  * [x86] Enable PARAVIRT_SPINLOCKS
+
+ -- maximilian attems <maks@debian.org>  Tue, 21 Apr 2015 21:46:47 +0200
+
+linux (3.19.3-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.19.2
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.19.3
+
+ -- maximilian attems <maks@debian.org>  Sun, 29 Mar 2015 20:14:33 +0200
+
+linux (3.19.1-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.19.1
+    - Bluetooth: ath3k: workaround the compatibility issue with xHCI controller
+      (Closes: #778463)
+    - random: Fix fast_mix() function (regression in 3.17)
+    - xfs: inode unlink does not set AGI buffer type
+    - xfs: set buf types when converting extent formats
+    - xfs: set superblock buffer type correctly
+    - iwlwifi: mvm: validate tid and sta_id in ba_notif
+    - iwlwifi: mvm: fix failure path when power_update fails in add_interface
+      (regression in 3.15)
+    - HID: i2c-hid: Limit reads to wMaxInputLength bytes for input events
+      (regression in 3.19)
+    - cpufreq: Set cpufreq_cpu_data to NULL before putting kobject
+    - [xen] manage: Fix USB interaction issues when resuming (regression in
+      3.17)
+    - [xen] xen-scsiback: mark pvscsi frontend request consumed only after last
+      read
+    - megaraid_sas: endianness related bug fixes and code optimization
+    - rc-main: Re-apply filter for no-op protocol change (regression in 3.17)
+    - proc/pagemap: walk page tables under pte lock
+    - NFS: struct nfs_commit_info.lock must always point to inode->i_lock
+      (regression in 3.17)
+    - [mips*] asm: asmmacro: Replace "add" instructions with "addu"
+    - mm/hugetlb: pmd_huge() returns true for non-present hugepage
+    - blk-mq: fix double-free in error path
+    - nfs41: .init_read and .init_write can be called with valid pg_lseg
+      (regression in 3.15)
+    - SUNRPC: NULL utsname dereference on NFS umount during namespace cleanup
+    - NFSv4: Ensure we reference the inode for return-on-close in delegreturn
+    - NFSv4.1: Fix a kfree() of uninitialised pointers in
+      decode_cb_sequence_args
+    - sg: fix unkillable I/O wait deadlock with scsi-mq
+    - sg: fix EWOULDBLOCK errors with scsi-mq
+    - iscsi-target: Drop problematic active_ts_list usage
+    - cipso: don't use IPCB() to locate the CIPSO IP option (regression in 3.18)
+    - ring-buffer: Do not wake up a splice waiter when page is not full
+      (regression in 3.18)
+    - tty: Remove warning in tty_lock_slave() (regression in 3.19)
+    - tty: Prevent untrappable signals from malicious program
+    - USB: fix use-after-free bug in usb_hcd_unlink_urb()
+    - [armhf] usb: dwc3: gadget: add missing spin_lock() (regression in 3.19)
+    - usb: core: buffer: smallest buffer should start at ARCH_DMA_MINALIGN
+    - cdc-acm: add sanity checks
+    - ntp: Fixup adjtimex freq validation on 32-bit systems (regression in 3.19)
+    - udf: Check length of extended attributes and allocation descriptors
+    - [s390*] KVM: forward hrtimer if guest ckc not pending yet
+      (regression in 3.17)
+    - [s390*] KVM: base hrtimer on a monotonic clock
+    - [s390*] KVM: floating irqs: fix user triggerable endless loop
+    - [s390*] KVM: avoid memory leaks if __inject_vm() fails
+    - gpiolib: of: allow of_gpiochip_find_and_xlate to find more than one chip
+      per node (regression in 3.19)
+    - sb_edac: Fix detection on SNB machines (regression in 3.18)
+    - jffs2: fix handling of corrupted summary length
+    - samsung-laptop: Add use_native_backlight quirk, and enable it on some
+      models (regression in 3.16)
+    - libceph: fix double __remove_osd() problem
+    - btrfs: fix leak of path in btrfs_find_item
+    - Btrfs: fix fsync data loss after adding hard link to inode
+    - blk-throttle: check stats_cpu before reading it from sysfs
+    - [x86] efi: Avoid triple faults during EFI mixed mode calls
+    - [x86][xen] irq: Fix regression in 3.19
+    - Replace ACCESS_ONCE of non-scalar types with READ_ONCE
+    - kernel: tighten rules for ACCESS_ONCE
+    - [x86] spinlocks/paravirt: Fix memory corruption on unlock
+    - quota: Store maximum space limit in bytes
+
+  [ Ben Hutchings ]
+  * [armhf] Drop sun7i device tree patches which are included in 3.19
+    (fixes FTBFS) (Closes: #779799)
+  * nfsd: Enable NFSD_V4_SECURITY_LABEL
+
+  [ Helge Deller ]
+  * [hppa] Add virtio udeb modules
+  * [alpha] Add debian-installer udeb packages
+  * [alpha] Drop alpha-legacy kernel image
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 08 Mar 2015 15:29:45 +0000
+
+linux (3.19-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.19
+  * Enable SCSI_AM53C974 where tmscim was enabled.
+
+ -- maximilian attems <maks@debian.org>  Thu, 12 Feb 2015 23:41:05 +0100
+
+linux (3.18.6-1~exp1) experimental; urgency=medium
+
+  [ Ben Hutchings ]
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.18.6
+
+ -- maximilian attems <maks@debian.org>  Sat, 07 Feb 2015 22:38:37 +0100
+
+linux-tools (3.18.5-1~exp1) experimental; urgency=medium
+
+  * New upstream release
+  * linux-tools: Fix build configuration to avoid linking perf with libbfd
+    (Closes: #763002)
+  * linux-tools: Add a check that perf is not linked with libbfd
+  * [arm64] Enable building linux-tools, thanks to Steve Capper
+    (Closes: #771340)
+  * [armel,armhf] linux-tools: Enable use of libunwind
+  * [hppa,sparc] linux-tools: Enable use of libnuma
+  * [mips*,powerpcspe,x32] Enable building linux-tools
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 01 Feb 2015 02:53:07 +0100
+
+linux (3.18.5-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.18.4
+    - [hppa] fix out-of-register compiler error in ldcw inline assembler
+      function
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.18.5
+
+  [ Helge Deller ]
+  * [hppa] Enable CONFIG_PPDEV to avoid CUPS complaining with systemd
+
+ -- maximilian attems <maks@debian.org>  Sat, 31 Jan 2015 22:20:40 +0100
+
+linux (3.18.3-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.18.1
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.18.2
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.18.3
+
+  [ Ian Campbell ]
+  * [armel/kirkwood]: Enable DEBUG_MVEBU_UART_ALTERNATE to match the behaviour
+    of previous boardfile based kirkwood kernels. Otherwise the kernel silently
+    crashes during boot.
+  * [armel/kirkwood]: Add versioned breaks on flash-kernel << 3.30~, versions
+    before this do not append a DTB on all platforms. This is required now that
+    board file support is removed.
+  * Add xhci-pci and xhci-plat-hcd to usb-modules udeb. (Inspired by #770912).
+  * [armhf/armmp]: Enable support for Tegra124 based platforms.
+
+  [ Helge Deller ]
+  * [hppa] udeb: Fix duplicate modules in ata-modules, pata-modules
+    (Closes: #770102)
+  * [hppa] Create build-dependencies on binutils-hppa64 and gcc-4.9-hppa64
+
+  [ Ben Hutchings ]
+  * [sh4] ftrace: Remove -m32 option from recordmcount.pl (Closes: #775611)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 18 Jan 2015 20:48:06 +0000
+
+linux (3.18-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.18
+
+  [ Ben Hutchings ]
+  * Remove aufs
+  * vfs: Enable OVERLAY_FS as module
+  * drivers/base: Disable UEVENT_HELPER, only needed for compatibility
+    with wheezy's udev package
+  * net: Enable 6LOWPAN as module; re-enable BT_6LOWPAN and
+    IEEE802154_6LOWPAN as modules
+  * net: Enable GENEVE as module; enable OPENVSWITCH_GENEVE
+  * ipv4: Enable TCP_CONG_DCTCP as module
+  * netfilter: Enable IP6_NF_NAT, IP_SET_HASH_MAC, IP_VS_FO, NF_LOG_ARP,
+    NF_LOG_BRIDGE, NFT_BRIDGE_REJECT, NFT_MASQ, NFT_MASQ_IPV4, NFT_MASQ_IPV6
+    as modules
+  * SCSI,xen: Enable XEN_SCSI_FRONTEND, XEN_SCSI_BACKEND as modules
+  * SCSI: Re-enable LIBFCOE, FCOE, FCOE_FNIC, SCSI_BNX2X_FCOE as modules
+  * drivers/net: Enable ET131X as module for all architectures
+  * wireless: Enable BRCMFMAC as module for all architectures;
+    enable BRCMFMAC_USB and BRCMFMAC_PCIE
+  * wireless: Enable RTL8192EE, RTL8821AE as modules for all architectures
+    (replacing R8192EE, R8821AE for x86 only)
+  * media: Enable VIDEO_VIVID as module (replacing VIDEO_VIVI)
+  * [armel/kirkwood] Enable ARCH_MULTI_V5, ARCH_MVEBU, MACH_KIRKWOOD and
+    MACH_NETXBIG, replacing ARCH_KIRKWOOD etc.
+  * [powerpc/powerpc64,ppc64*] Enable SCSI_IBMVFC as module, replacing
+    SCSI_IBMVSCSIS
+  * input/tablet: Enable TABLET_SERIAL_WACOM4 as module
+  * media: Enable MEDIA_SDR_SUPPORT; enable DVB_PT3, DVB_USB_DVBSKY,
+    USB_AIRSPY, USB_HACKRF, VIDEO_TW68 as modules; enable VIDEO_SOLO6X10 as
+    module on all architectures (replacing SOLO6X10 on x86);
+    enable USB_MSI2500 on all architectures (replacing USB_MSI3101 on x86)
+  * au0828: Enable VIDEO_AU0828_RC
+  * HID,gpio,i2c: Enable HID_CP2112 as module
+  * HID: Enable HID_PENMOUNT as module
+  * USB,leds: Enable USB_LED_TRIG
+  * leds: Disable LEDS_PCA9532, apparently only needed on armel/iop32x
+  * [x86] platform: Enable TOSHIBA_HAPS as module
+  * [x86] serial: Enable SERIAL_8250_FINTEK as module
+  * [x86] Enable MFD_MENF21BMC, LEDS_MENF21BMC, SENSORS_MENF21BMC_HWMON,
+    MENF21BMC_WATCHDOG as modules
+  * [x86] edac: Enable EDAC_IE31200 as module
+  * [x86] drivers/crypto: Enable CRYPTO_DEV_QAT_DH895xCC as module
+  * [x86] comedi: Enable COMEDI_NI_USB6501 as module
+  * [armel] Change configuration to reduce kernel image size (fixes FTBFS)
+    - [/kirkwood] netlink: Disable NETLINK_MMAP
+    - [/kirkwood] cgroups: Disable MEMCG
+    - [/kirkwood] Disable CHECKPOINT_RESTORE
+    - [/kirkwood] mm: Disable COMPACTION, KSM
+    - [/kirkwood] crypto: Disable CRYPTO_FIPS
+    - [/kirkwood] power: Disable HIBERNATION, PM_RUNTIME
+    - [/orion5x] mm: Disable COMPACTION, MIGRATION
+    - [/orion5x] block: Disable BLK_DEV_INTEGRITY
+    - [/orion5x] SCSI: Disable SCSI_UFSHCD
+    - [/orion5x] target: Disable TCM_IBLOCK
+    - [/orion5x] Disable AUDIT, DEBUG_BUGVERBOSE, PROFILING, OPROFILE, RD_LZO
+  * [armel] Include size of appended DTBs in image size check
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 11 Dec 2014 00:43:21 +0000
+
+linux (3.17.4-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.17.1
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.17.2
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.17.3
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.17.4
+
+  [ Ben Hutchings ]
+  * Set ABI to trunk
+  * aufs: Update to aufs3.17-20141020:
+    - support for AT_EMPTY_PATH/LOOKUP_EMPTY
+    - Show union filesystem paths in /proc/*/map_files/*
+    - bugfix, fix the returning size of the branch attr
+  * Compile with gcc-4.9 (except for ia64,m68k,s390*,sh4)
+
+ -- maximilian attems <maks@debian.org>  Mon, 24 Nov 2014 00:00:27 +0100
+
+linux-tools (3.17-1~exp1) experimental; urgency=medium
+
+  * New upstream release
+    - usbip userspace moved to tools/usb/usbip
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 17 Oct 2014 14:58:51 +0200
+
+linux (3.17-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.17
+
+  * armel: Drop ixp4xx image.
+  * topconfig: Reenable renamed IP_NF_NAT. (closes #762458)
+  * udeb: refix renamed i2c-core.
+
+ -- maximilian attems <maks@debian.org>  Tue, 14 Oct 2014 23:01:39 +0200
+
+linux (3.17~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20140908
+
+  [ maximilian attems ]
+  * udeb: fix renamed i2ccore.
+
+ -- maximilian attems <maks@debian.org>  Thu, 18 Sep 2014 23:50:00 +0200
+
+linux (3.16.7-ckt9-3) unstable; urgency=high
+
+  [ Ben Hutchings ]
+  * [x86] crypto: aesni - fix memory usage in GCM decryption (Closes: #782561)
+    (CVE-2015-3331)
+  * tcp: Fix crash in TCP Fast Open (Closes: #782515) (CVE-2015-3332)
+  * kernel: Provide READ_ONCE and ASSIGN_ONCE
+  * Replace use of ACCESS_ONCE on non-scalar types with READ_ONCE or barriers
+    as appropriate
+  * kernel: tighten rules for ACCESS ONCE
+  * kernel: Change ASSIGN_ONCE(val, x) to WRITE_ONCE(x, val)
+  * fs: take i_mutex during prepare_binprm for set[ug]id executables
+    (CVE-2015-3339)
+
+  [ Ian Campbell ]
+  * [xen] release per-queue Tx and Rx resource when disconnecting, fixing
+    network after save/restore or migration. (Closes: #782698)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 23 Apr 2015 16:41:27 +0100
+
+linux (3.16.7-ckt9-2) unstable; urgency=medium
+
+  * btrfs: simplify insert_orphan_item (Closes: #782362)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 13 Apr 2015 02:01:54 +0100
+
+linux (3.16.7-ckt9-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt8
+    - usb: core: buffer: smallest buffer should start at ARCH_DMA_MINALIGN
+    - btrfs: fix leak of path in btrfs_find_item
+    - tpm_tis: verify interrupt during init
+    - xfs: ensure buffer types are set correctly
+    - xfs: inode unlink does not set AGI buffer type
+    - xfs: set buf types when converting extent formats
+    - xfs: set superblock buffer type correctly
+    - [s390*] KVM: avoid memory leaks if __inject_vm() fails
+    - samsung-laptop: Add use_native_backlight quirk, and enable it on some
+      models (regression in 3.14)
+    - staging: comedi: comedi_compat32.c: fix COMEDI_CMD copy back
+    - nfs: don't call blocking operations while !TASK_RUNNING
+    - cdc-acm: add sanity checks
+    - USB: fix use-after-free bug in usb_hcd_unlink_urb()
+    - iwlwifi: mvm: fix failure path when power_update fails in add_interface
+    - tty: Prevent untrappable signals from malicious program
+    - cpufreq: Set cpufreq_cpu_data to NULL before putting kobject
+    - nfs41: .init_read and .init_write can be called with valid pg_lseg
+      (regression in 3.15)
+    - mei: mask interrupt set bit on clean reset bit (regression in
+      3.16.7-ckt5)
+    - [s390*] KVM: floating irqs: fix user triggerable endless loop
+    - cfq-iosched: handle failure of cfq group allocation
+    - tracing: Fix unmapping loop in tracing_mark_write
+    - fsnotify: fix handling of renames in audit
+    - blk-mq: fix double-free in error path
+    - NFSv4.1: Fix a kfree() of uninitialised pointers in
+      decode_cb_sequence_args
+    - mm/hugetlb: pmd_huge() returns true for non-present hugepage
+    - mm/hugetlb: take page table lock in follow_huge_pmd()
+    - mm/hugetlb: fix getting refcount 0 page in hugetlb_fault()
+    - mm/hugetlb: add migration/hwpoisoned entry check in
+      hugetlb_change_protection
+    - mm/hugetlb: add migration entry check in __unmap_hugepage_range
+    - iscsi-target: Drop problematic active_ts_list usage
+    - mm/memory.c: actually remap enough memory
+    - mm: hwpoison: drop lru_add_drain_all() in __soft_offline_page()
+      (regression in 3.11)
+    - jffs2: fix handling of corrupted summary length
+    - dm mirror: do not degrade the mirror on discard error
+    - dm io: reject unsupported DISCARD requests with EOPNOTSUPP
+    - NFS: struct nfs_commit_info.lock must always point to inode->i_lock
+      (regression in 3.16.4)
+    - target: Add missing WRITE_SAME end-of-device sanity check
+    - target: Check for LBA + sectors wrap-around in sbc_parse_cdb
+    - Btrfs: fix fsync data loss after adding hard link to inode
+    - sg: fix read() error reporting
+    - IB/qib: Do not write EEPROM
+    - [amd64] EDAC, amd64_edac: Prevent OOPS with >16 memory controllers
+      (regression in 3.11)
+    - md/raid5: Fix livelock when array is both resyncing and degraded.
+    - locking/rtmutex: Avoid a NULL pointer dereference on deadlock
+      (regression in 3.16)
+    - time: adjtimex: Validate the ADJ_FREQUENCY values
+    - ntp: Fixup adjtimex freq validation on 32-bit systems
+    - dm: fix a race condition in dm_get_md
+    - dm snapshot: fix a possible invalid memory access on unload
+    - libceph: fix double __remove_osd() problem
+    - blk-throttle: check stats_cpu before reading it from sysfs
+    - debugfs: leave freeing a symlink body until inode eviction
+    - procfs: fix race between symlink removals and traversals
+    - autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for
+      allocation
+    - clk-gate: fix bit # check in clk_register_gate() (regression in 3.11)
+    - [powerpc*] kernel: Avoid memory corruption at early stage
+      (regression in 3.14)
+    - GFS2: Fix crash during ACL deletion in acl max entry check in
+      gfs2_set_acl() (regression in 3.14)
+    - net: llc: use correct size for sysctl timeout entries (CVE-2015-2041)
+    - net: rds: use correct size for max unacked packets and bytes
+      (CVE-2015-2042)
+    - HID: i2c-hid: Limit reads to wMaxInputLength bytes for input events
+      (regression in 3.16.7-ckt4)
+    - net: sctp: fix race for one-to-many sockets in sendmsg's auto associate
+    - ipv6: mld: fix add_grhead skb_over_panic for devs with large MTUs
+    - IB/core: When marshaling ucma path from user-space, clear unused fields
+      (regression in 3.14)
+    - IB/core: Fix deadlock on uverbs modify_qp error flow (regression in 3.14)
+    - IB/mlx4: Fix wrong usage of IPv4 protocol for multicast attach/detach
+      (regression in 3.14)
+    - IB/iser: Use correct dma direction when unmapping SGs
+      (regression in 3.15)
+    - staging: comedi: cb_pcidas64: fix incorrect AI range code handling
+    - target: Fix R_HOLDER bit usage for AllRegistrants
+    - target: Avoid dropping AllRegistrants reservation during unregister
+    - target: Allow AllRegistrants to re-RESERVE existing reservation
+    - target: Allow Write Exclusive non-reservation holders to READ
+    - vhost/scsi: potential memory corruption
+    - mm: softdirty: unmapped addresses between VMAs are clean
+    - proc/pagemap: walk page tables under pte lock
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt9
+    - netfilter: nft_compat: fix module refcount underflow
+    - netfilter: xt_socket: fix a stack corruption bug
+    - ipvs: add missing ip_vs_pe_put in sync code
+    - flowcache: Fix kernel panic in flow_cache_flush_task (regression in 3.15)
+    - tcp: make sure skb is not shared before using skb_get()
+      (regression in 3.16)
+    - gen_stats.c: Duplicate xstats buffer for later use
+    - ematch: Fix auto-loading of ematch modules.
+    - openvswitch: Fix net exit.
+    - net: reject creation of netdev names with colons
+    - macvtap: make sure neighbour code can push ethernet header
+    - udp: only allow UFO for packets from SOCK_DGRAM sockets
+    - gpiolib: of: allow of_gpiochip_find_and_xlate to find more than one chip
+      per node (regression in 3.16.7-ckt6)
+    - [x86] drm/i915: Check obj->vma_list under the struct_mutex
+      (regression in 3.15)
+    - ALSA: hda - Disable runtime PM for Panther Point again
+      (regression in 3.14)
+    - nilfs2: fix potential memory overrun on inode
+    - [armhf] usb: dwc3: dwc3-omap: Fix disable IRQ
+    - [i386] KVM: emulate: fix CMPXCHG8B on 32-bit hosts
+    - xhci: Allocate correct amount of scratchpad buffers
+    - USB: usbfs: don't leak kernel data in siginfo
+    - efi/libstub: Fix boundary checking in efi_high_alloc()
+    - USB: serial: fix potential use-after-free after failed probe
+    - USB: serial: fix tty-device error handling at probe
+    - staging: comedi: adv_pci1710: fix AI INSN_READ for non-zero channel
+    - mei: make device disabled on stop unconditionally
+    - NFSv4: Don't call put_rpccred() under the rcu_read_lock()
+    - btrfs: fix lost return value due to variable shadowing
+    - eCryptfs: don't pass fs-specific ioctl commands through
+    - drm/radeon: fix DRM_IOCTL_RADEON_CS oops
+    - [armhf] ASoC: omap-pcm: Correct dma mask
+    - [amd64] x86/asm/entry/64: Remove a bogus 'ret_from_fork' optimization
+      (CVE-2015-2830)
+    - Btrfs: fix data loss in the fast fsync path
+    - Btrfs:__add_inode_ref: out of bounds memory read when looking for
+      extended ref.
+    - svcrpc: fix memory leak in gssp_accept_sec_context_upcall
+      (regression in 3.12)
+    - SUNRPC: Always manipulate rpc_rqst::rq_bc_pa_list under xprt->bc_pa_lock
+      (regression in 3.15)
+    - net: cls_bpf: fix size mismatch on filter preparation
+    - net: cls_bpf: fix auto generation of per list handles
+    - qlge: Fix qlge_update_hw_vlan_features to handle if interface is down
+      (regression in 3.13)
+    - libsas: Fix Kernel Crash in smp_execute_task
+    - ALSA: hda - Fix regression of HD-audio controller fallback modes
+      (regression in 3.11)
+    - can: add missing initialisations in CAN related skbuffs
+    - ftrace: Fix en(dis)able graph caller when en(dis)abling record via sysctl
+    - ftrace: Fix ftrace enable ordering of sysctl ftrace_enabled
+    - [armhf] imx6qdl-sabresd: set swbst_reg as vbus's parent reg
+    - [armhf] imx6sl-evk: set swbst_reg as vbus's parent reg
+    - xen-pciback: limit guest control of command register (CVE-2015-2150)
+    - drm/vmwgfx: Reorder device takedown somewhat
+    - ALSA: control: Add sanity checks for user ctl id name string
+    - Revert "i2c: core: Dispose OF IRQ mapping at client removal time"
+      (regression in 3.16.7-ckt2)
+    - nilfs2: fix deadlock of segment constructor during recovery
+      (regression in 3.16.7-ckt7)
+    - clk: divider: fix calculation of maximal parent rate for a given divider
+      (regression in 3.15)
+    - [sparc*] Fix several bugs in memmove().
+    - net: sysctl_net_core: check SNDBUF and RCVBUF for min length
+    - inet_diag: fix possible overflow in inet_diag_dump_one_icsk()
+    - caif: fix MSG_OOB test in caif_seqpkt_recvmsg()
+    - rxrpc: bogus MSG_PEEK test in rxrpc_recvmsg()
+    - tcp: fix tcp fin memory accounting
+    - net: compat: Update get_compat_msghdr() to match copy_msghdr_from_user()
+      behaviour (regression in 3.13)
+    - tcp: make connect() mem charging friendly
+
+  [ Ian Campbell ]
+  * Initialise framebuffer console earlier. (Closes: #779935)
+  * [xen] Enable Xen MCE log support. (Closes: #779698)
+  * [armhf] mvebu: do not register custom DMA operations when coherency is
+    disabled (Closes: #780858)
+  * [armhf] Enable power control on various sunxi platforms, enable MFD_AXP20X
+    and REGULATOR_AXP20X and adding the necessary DTB nodes. (Closes: #781576)
+
+  [ Ben Hutchings ]
+  * [armel/kirkwood] linux-image: Add versioned Breaks against flash-kernel,
+    to ensure that an FDT is appended to the image if needed (Closes: #781193)
+  * Revert "quota: Store maximum space limit in bytes" to avoid ABI change
+  * IB/core: Prevent integer overflow in ib_umem_get address arithmetic
+    (CVE-2014-8159)
+  * Btrfs: make xattr replace operations atomic (CVE-2014-9710)
+  * ext4: fix ZERO_RANGE bug hidden by flag aliasing
+  * ext4: fix accidental flag aliasing in ext4_map_blocks flags
+  * ext4: allocate entire range in zero range (CVE-2015-0275)
+  * [x86] microcode/intel: Guard against stack overflow in the loader
+    (CVE-2015-2666)
+  * ipv6: Don't reduce hop limit for an interface (CVE-2015-2922)
+  * [powerpc/powerpc64,ppc64] Disable THERM_PM72 and enable its replacements
+    WINDFARM_PM72 and WINDFARM_RM31 as modules. Update the udeb config
+    accordingly. Thanks to Milan Kupcevic. (Closes: #781934)
+  * psmouse: Add support for FocalTech touchpads, thanks to Rafal Ramocki
+    (Closes: #780971)
+  * [x86] drm/i915: Add limited color range readout for HDMI/DP ports on
+    g4x/vlv/chv (Closes: #775217)
+  * HID: thingm: fix workqueue race on remove (Closes: #780055)
+  * [x86] Disable X86_VERBOSE_BOOTUP (Closes: #781953)
+  * eMMC: Don't initialize partitions on RPMB flagged areas (Closes: #782038)
+  * [x86] powercap / RAPL: change domain detection message (Closes: #781418)
+  * procfs: Avoid ABI change in 3.16.7-ckt8
+  * [powerpc/powerpc] udeb: Add fb-modules package containing radeonfb driver
+    (Closes: #782058)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 08 Apr 2015 01:03:08 +0100
+
+linux (3.16.7-ckt7-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt5
+    - [x86] vdso: Use asm volatile in __getcpu
+    - SCSI: fix regression in scsi_send_eh_cmnd() (regression in 3.16)
+    - Btrfs: don't delay inode ref updates during log replay
+      (regression in 3.16.7)
+    - mm: propagate error from stack expansion even for guard page
+    - vfio-pci: Fix the check on pci device type in vfio_pci_probe()
+    - rpc: fix xdr_truncate_encode to handle buffer ending on page boundary
+      (regression in 3.16)
+    - [arm64] efi: add missing call to early_ioremap_reset()
+      (regression in 3.16)
+    - exit: fix race between wait_consider_task() and wait_task_zombie()
+      (regression in 3.15)
+    - mm: prevent endless growth of anon_vma hierarchy
+    - mm: protect set_page_dirty() from ongoing truncation
+    - mm, vmscan: prevent kswapd livelock due to pfmemalloc-throttled process
+      being killed
+    - sched/deadline: Fix migration of SCHED_DEADLINE tasks
+    - HID: roccat: potential out of bounds in pyra_sysfs_write_settings()
+    - mm: Don't count the stack guard page towards RLIMIT_STACK
+    - mm: fix corner case in anon_vma endless growing prevention
+    - [arm*][xen] introduce xen_arch_need_swiotlb
+    - fsnotify: next_i is freed during fsnotify_unmount_inodes.
+    - [armhf] ASoC: eukrea-tlv320: Fix of_node_put() call with uninitialized
+      object (regression in 3.15)
+    - HID: i2c-hid: Do not free buffers in i2c_hid_stop() (regression in 3.15)
+    - ALSA: fireworks: fix an endianness bug for transaction length
+      (regression in 3.16)
+    - [armhf] mtd: nand: omap: Fix NAND enumeration on 3430 LDP
+      (regression in 3.13)
+    - ocfs2: fix the wrong directory passed to ocfs2_lookup_ino_from_name()
+      when link file (regression in 3.14)
+    - [powerpc*] Fix bad NULL pointer check in udbg_uart_getc_poll()
+      (regression in 3.12)
+    - nilfs2: fix the nilfs_iget() vs. nilfs_new_inode() races
+    - [armhf] OMAP4: PM: Only do static dependency configuration in
+      omap4_init_static_deps (regression in 3.11)
+    - [armel,armhf] Revert "ARM: 7830/1: delay: don't bother reporting bogomips
+      in /proc/cpuinfo" (regression in 3.12)
+    - gre: fix the inner mac header in nbma tunnel xmit path
+      (regression in 3.16.7-ckt3)
+    - netlink: Always copy on mmap TX.
+    - netlink: Don't reorder loads/stores before marking mmap netlink frame as
+      available
+    - batman-adv: Unify fragment size calculation (regression in 3.13)
+    - batman-adv: avoid NULL dereferences and fix if check (regression in 3.13)
+    - net: Fix stacked vlan offload features computation
+    - net: Reset secmark when scrubbing packet
+    - xen-netback: fixing the propagation of the transmit shaper timeout
+      (regression in 3.16)
+    - team: avoid possible underflow of count_pending value for notify_peers
+      and mcast_rejoin (regression in 3.12)
+    - usb: gadget: gadgetfs: Free memory allocated by memdup_user()
+      (regression in 3.15)
+    - iwlwifi: mvm: fix Rx with both chains (regression in 3.16)
+    - LOCKD: Fix a race when initialising nlmsvc_timeout (regression in 3.11)
+    - NFSv4.1: Fix client id trunking on Linux
+    - vhost-scsi: Add missing virtio-scsi -> TCM attribute conversion
+    - xhci: Check if slot is already in default state before moving it there
+      (regression in 3.14)
+    - USB: console: fix uninitialised ldisc semaphore (regression in 3.12)
+    - USB: console: fix potential use after free
+    - [armhf] usb: dwc3: gadget: Fix TRB preparation during SG
+    - [x86] ftrace/jprobes: Fix conflict between jprobes and function graph
+      tracing
+    - clk: Don't try to use a struct clk* after it could have been freed
+    - [x86] drm/i915: Evict CS TLBs between batches
+    - [xen] Revert "swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single"
+      (regression in 3.16.7-ckt4)
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt6
+    - ipvs: uninitialized data with IP_VS_IPV6
+    - netfilter: nfnetlink: validate nfnetlink header from batch
+    - time: settimeofday: Validate the values of tv from user
+    - drm/radeon: fix VM flush on cayman/aruba (v3)
+    - drm/radeon: fix VM flush on SI (v3)
+    - drm/radeon: fix VM flush on CIK (v3)
+    - drm/radeon: add a dpm quirk list (regression around 3.14)
+    - can: dev: fix crtlmode_supported check
+    - can: kvaser_usb: Don't free packets when tight on URBs
+    - drm/radeon: use rv515_ring_start on r5xx (regression in 3.12)
+    - PCI: Mark Atheros AR93xx to avoid bus reset (regression in 3.14)
+    - [x86] PCI: Clip bridge windows to fit in upstream windows
+      (regression in 3.16)
+    - [armhf] mvebu: completely disable hardware I/O coherency
+    - cifs: fix deadlock in cifs_ioctl_clone()
+    - ipr: wait for aborted command responses
+    - libata: allow sata_sil24 to opt-out of tag ordered submission
+      (regression in 3.14.4, 3.15)
+    - [media] vb2: fix vb2_thread_stop race conditions
+    - [i386/586] apic: Re-enable PCI_MSI support for non-SMP X86_32
+      (regression in 3.12)
+    - dm cache: share cache-metadata object across inactive and active DM
+      tables
+    - dm cache: fix problematic dual use of a single migration count variable
+    - Input: evdev - fix EVIOCG{type} ioctl
+    - tty: Fix pty master poll() after slave closes v2 (regression in 3.12)
+    - [armhf] bus: omap_l3_noc: Add resume hook to restore context
+      (regression in 3.16)
+    - decompress_bunzip2: off by one in get_next_block()
+    - kbuild: Fix removal of the debian/ directory (regression in 3.16)
+    - mm: get rid of radix tree gfp mask for pagecache_get_page
+      (regression in 3.16)
+    - regulator: core: fix race condition in regulator_put()
+    - ASoC: simple-card: Fix crash in asoc_simple_card_unref()
+      (regression in 3.15)
+    - [ppc64el] xmon: Fix another endiannes issue in RTAS call from xmon
+    - nfs: fix dio deadlock when O_DIRECT flag is flipped
+    - mac80211: properly set CCK flag in radiotap (regression in 3.12)
+    - [x86] drm/i915: Only fence tiled region of object.
+    - can: kvaser_usb: Do not sleep in atomic context
+    - can: kvaser_usb: Send correct context to URB completion
+    - rbd: fix rbd_dev_parent_get() when parent_overlap == 0
+    - rbd: drop parent_ref in rbd_dev_unprobe() unconditionally
+    - dm cache: fix missing ERR_PTR returns and handling
+    - dm thin: don't allow messages to be sent to a pool target in READ_ONLY
+      or FAIL mode
+    - [armhf] mvebu: don't set the PL310 in I/O coherency mode when I/O
+      coherency is disabled
+    - vm: add VM_FAULT_SIGSEGV handling support
+    - vm: make stack guard page errors return VM_FAULT_SIGSEGV rather than
+      SIGBUS
+    - perf: Tighten (and fix) the grouping condition
+    - iwlwifi: mvm: drop non VO frames when flushing (regression in 3.16)
+    - memcg: remove extra newlines from memcg oom kill log (regression in 3.15)
+    - ipv4: try to cache dst_entries which would cause a redirect
+      (regression in 3.16) (CVE-2015-1465)
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt7
+    - [ppc64el] powerpc: add little endian flag to syscall_get_arch()
+    - [arm64] Fix up /proc/cpuinfo
+    - cifs: Complete oplock break jobs before closing file handle
+      (regression in 3.15)
+    - [arm64,or1k] lib/checksum.c: fix carry in csum_tcpudp_nofold
+    - [mips*] Fix kernel lockup or crash after CPU offline/online
+    - md/raid5: fix another livelock caused by non-aligned writes.
+      (regression in 3.16)
+    - drm/radeon: fix PLLs on RS880 and older v2 (regression in 3.15)
+      (Closes: #770790)
+    - [armhf/armmp-lpae] 8299/1: mm: ensure local active ASID is marked as
+      allocated on rollover
+    - PCI: Handle read-only BARs on AMD CS553x devices
+      (regression in 3.16.7-ckt4)
+    - mm: pagewalk: call pte_hole() for VM_PFNMAP during walk_page_range
+    - nilfs2: fix deadlock of segment constructor over I_SYNC flag
+    - ip: zero sockaddr returned on error queue
+    - net: rps: fix cpu unplug
+    - ipv6: stop sending PTB packets for MTU < 1280
+    - udp_diag: Fix socket skipping within chain
+    - ping: Fix race in free in receive path
+    - net: don't OOPS on socket aio
+    - ipv4: tcp: get rid of ugly unicast_sock
+    - ppp: deflate: never return len larger than output buffer
+    - [x86] hyperv: Fix the error processing in netvsc_send()
+    - Bluetooth: ath3k: workaround the compatibility issue with xHCI controller
+    - ceph: introduce global empty snap context
+    - drm/vmwgfx: Don't use memory accounting for kernel-side fence objects
+    - net:socket: set msg_namelen to 0 if msg_name is passed as NULL in msghdr
+      struct from userland.
+    - virtio_pci: defer kfree until release callback
+
+  [ Ian Campbell ]
+  * [armhf] Add DTB for Olimex A20-OLinuXino-LIME2. (Closes: #777455)
+  * [armhf] Enable CONFIG_BACKLIGHT_GPIO as a module. (Closes: #778783)
+  * [armhf] Enable FB_SIMPLE on sunxi platform, backporting fixes and DTS
+    entries.
+
+  [ Ben Hutchings ]
+  * shm: add memfd.h to UAPI export list, so kdbus will build
+  * [x86] HPET force enable for e6xx based systems (Closes: #772951)
+  * vfs: read file_handle only once in handle_to_path (CVE-2015-1420)
+  * ASLR: fix stack randomization on 64-bit systems (CVE-2015-1593)
+  * Revert "quota: Switch ->get_dqblk() and ->set_dqblk() to use bytes as
+    space units" to avoid ABI change
+  * rmap: Fix ABI change in 3.16.7-ckt5
+  * perf: Fix ABI change in 3.16.7-ckt6
+  * mm: Fix pagecache_get_page() ABI change in 3.16.7-ckt6
+  * tcp: Fix ABI change in 3.16.7-ckt7
+  * [x86] ACPI / video: Add disable_native_backlight quirk for various
+    Samsung models and Dell XPS15 L521X (Closes: #772440)
+  * [x86] ALSA: Enable SND_SOC, SND_SOC_INTEL_SST, SND_SOC_INTEL_HASWELL_MACH,
+    SND_SOC_INTEL_BYT_RT5640_MACH, SND_SOC_INTEL_BYT_MAX98090_MACH as modules
+    (Closes: #773835)
+  * arcmsr: Backport changes up to Linux 3.18 (Closes: #698821)
+  * [x86] drm/i915: Quietly reject attempts to create non-pagealigned stolen
+    objects (Closes: #763155)
+  * KEYS: request_key() should reget expired keys rather than give EKEYEXPIRED
+    (Closes: #758870)
+  * drm: Enable DRM_BOCHS, DRM_QXL as modules
+    - qxl: Disable by default, as it is incompatible with wheezy's
+      xserver-xorg-video-qxl. It can be forced to load with module
+      parameter modeset=1.
+  * of.h: Keep extern declaration of of_* variables when !CONFIG_OF
+    (for simplefb)
+
+  [ Helge Deller ]
+  * [alpha] build debian-installer udeb packages
+  * [hppa] build virtio udeb packages
+
+  [ Uwe Kleine-König ]
+  * Add support for Bananapro board, thanks Karsten Merker for the patch.
+    (Closes: 779311)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 01 Mar 2015 15:13:40 +0000
+
+linux (3.16.7-ckt4-3) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * [sh4] ftrace: Remove -m32 option from recordmcount.pl (Closes: #775611)
+  * [x86] Revert "KVM: Fix of previously incomplete fix for CVE-2014-8480"
+    as that issue does not affect 3.16
+  * [amd64] tls, ldt: Stop checking lm in LDT_empty (regression in 3.16.7-ckt4)
+  * [x86] tls: Interpret an all-zero struct user_desc as "no segment"
+    (regression in 3.16.7-ckt4)
+  * net: sctp: fix slab corruption from use after free on INIT collisions
+    (CVE-2015-1421)
+
+  [ Ian Campbell ]
+  * [xen] cancel ballooning if adding new memory failed (Closes: #776448)
+  * [arm64] Only use the virtual counter (CNTVCT) on arm64. (Closes: #776957)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 03 Feb 2015 20:07:06 +0000
+
+linux-tools (3.16-3) unstable; urgency=medium
+
+  * linux-tools: Fix build configuration to avoid linking perf with libbfd
+    (Closes: #763002)
+  * linux-tools: Add a check that perf is not linked with libbfd
+  * [arm64] Enable building linux-tools, thanks to Steve Capper
+    (Closes: #771340)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 02 Feb 2015 22:05:59 +0000
+
+linux (3.16.7-ckt4-2) unstable; urgency=medium
+
+  [ Ian Campbell ]
+  * [arm64] udeb: Remove zlib-modules, as ZLIB_DEFLATE is now
+    built-in (fixes FTBFS)
+  * [xen] Revert "swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single"
+    (Closes: #776237)
+
+  [ Helge Deller ]
+  * [hppa] udeb: Fix duplicate modules in ata-modules, pata-modules
+    (Closes: #770102)
+  * [hppa] Enable CONFIG_PPDEV to avoid CUPS complaining with systemd
+
+  [ Ben Hutchings ]
+  * crypto: Fix unprivileged arbitrary module loading (CVE-2013-7421,
+    CVE-2014-9644)
+    - prefix module autoloading with "crypto-"
+    - include crypto- module prefix in template
+    - add missing crypto module aliases
+  * [x86] KVM: Fix of previously incomplete fix for CVE-2014-8480
+  * [x86] KVM: SYSENTER emulation is broken (CVE-2015-0239)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 27 Jan 2015 03:57:26 +0000
+
+linux (3.16.7-ckt4-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt3
+    - [x86] kvm: use alternatives for VMCALL vs. VMMCALL if kernel text is
+      read-only
+    - [sparc*] Fix constraints on swab helpers.
+    - inetdevice: fixed signed integer overflow
+    - ieee802154: fix error handling in ieee802154fake_probe()
+    - bonding: fix curr_active_slave/carrier with loadbalance arp monitoring
+      (regression in 3.14)
+    - pptp: fix stack info leak in pptp_getname()
+    - ipx: fix locking regression in ipx_sendmsg and ipx_recvmsg
+    - net/mlx4_en: Add VXLAN ndo calls to the PF net device ops too
+      (regression in 3.15)
+    - net/mlx4_en: Advertize encapsulation offloads features only when VXLAN
+      tunnel is set (regression in 3.15)
+    - target: Don't call TFO->write_pending if data_length == 0
+    - vhost-scsi: Take configfs group dependency during VHOST_SCSI_SET_ENDPOINT
+    - iser-target: Handle DEVICE_REMOVAL event on network portal listener
+      correctly
+    - ASoC: dpcm: Fix race between FE/BE updates and trigger
+    - mac80211: Fix regression that triggers a kernel BUG with CCMP
+      (regression in 3.13)
+    - rt2x00: do not align payload on modern H/W
+    - bitops: Fix shift overflow in GENMASK macros
+    - [x86] Require exact match for 'noxsave' command line option
+    - [x86] drm/i915: Kick fbdev before vgacon (regression in 3.16)
+    - can: dev: avoid calling kfree_skb() from interrupt context
+    - [x86] mm: Set NX across entire PMD at boot
+    - of: Fix crash if an earlycon driver is not found
+    - btrfs: fix lockups from btrfs_clear_path_blocking
+    - [i386/686-pae,armhf/armmp-lpae] PCI: Support 64-bit bridge windows if we
+      have 64-bit dma_addr_t (regression in 3.14)
+    - ACPI / PM: Ignore wakeup setting if the ACPI companion can't wake up
+      (regression in 3.13)
+    - drm/radeon: fix endian swapping in vbios fetch for tdp table
+    - Bluetooth: Fix endian and alignment issue with ath3k version handling
+    - nfs: Don't busy-wait on SIGKILL in __nfs_iocounter_wait
+    - [armhf] 8109/1: mm: Modify pte_write and pmd_write logic for LPAE
+    - aio: fix incorrect dirty pages accouting when truncating AIO ring buffer
+      (regression in 3.12)
+    - [armel,armhf] mvebu: add missing of_node_put() call in coherency.c
+      (regression in 3.16)
+    - iio: Fix IIO_EVENT_CODE_EXTRACT_DIR bit mask
+    - spi: Fix mapping from vmalloc-ed buffer to scatter list
+    - SUNRPC: Fix locking around callback channel reply receive
+    - nfsd: Fix slot wake up race in the nfsv4.1 callback code
+    - bnx2fc: do not add shared skbs to the fcoe_rx_list
+    - Revert "xhci: clear root port wake on bits if controller isn't wake-up
+      capable" (regression in 3.16)
+    - usb: xhci: rework root port wake bits if controller isn't allowed to
+      wakeup
+    - ixgbe: Correctly disable VLAN filter in promiscuous mode
+      (regression in 3.16)
+    - ixgbe: fix use after free adapter->state test in ixgbe_remove/ixgbe_probe
+      (regression in 3.15)
+    - ALSA: hda - Limit 40bit DMA for AMD HDMI controllers
+    - PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
+    - gpu/radeon: Set flag to indicate broken 64-bit MSI
+    - sound/radeon: Move 64-bit MSI quirk from arch to driver
+    - [powerpc*] pseries: Honor the generic "no_64bit_msi" flag
+    - [mips*] fix EVA & non-SMP non-FPU FP context signal handling
+      (regression in 3.15)
+    - [x86] drm/i915: Ignore SURFLIVE and flip counter when the GPU gets reset
+      (regression in 3.16)
+    - [powerpc*] 32 bit getcpu VDSO function uses 64 bit instructions
+    - [armhf] 8222/1: mvebu: enable strex backoff delay
+    - [armel,armhf] 8226/1: cacheflush: get rid of restarting block
+    - btrfs: zero out left over bytes after processing compression streams
+    - [armhf] net: sun4i-emac: fix memory leak on bad packet
+    - [armhf] i2c: omap: fix NACK and Arbitration Lost irq handling
+    - [media] s2255drv: fix payload size for JPG, MJPEG (regression in 3.15)
+    - nouveau: move the hotplug ignore to correct place. (regression in 3.16.4)
+    - mm: frontswap: invalidate expired data on a dup-store failure
+    - mm/vmpressure.c: fix race in vmpressure_work_fn()
+    - xen-netfront: Remove BUGs on paged skb data which crosses a page boundary
+    - drivers/input/evdev.c: don't kfree() a vmalloc address
+      (regression in 3.13)
+    - mm: fix anon_vma_clone() error treatment (regression in 3.12)
+    - ip_tunnel: the lack of vti_link_ops' dellink() cause kernel panic
+    - vxlan: Fix race condition between vxlan_sock_add and vxlan_sock_release
+    - bond: Check length of IFLA_BOND_ARP_IP_TARGET attributes
+    - gre: Set inner mac header in gro complete (regression in 3.16.7-ckt1)
+    - [mips*] bpf: Fix broken BPF_MOD
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt4
+    - [x86] drm/i915: don't warn if backlight unexpectedly enabled
+      (Closes: #757805)
+    - [x86] drm/i915/dp: only use training pattern 3 on platforms that
+      support it (regression in 3.15)
+    - btrfs: don't go readonly on existing qgroup items
+    - writeback: fix a subtle race condition in I_DIRTY clearing
+    - [s390*] KVM: flush CPU on load control
+    - UBI: Fix double free after do_sync_erase()
+    - [x86] Drivers: hv: util: make struct hv_do_fcopy match Hyper-V host
+      messages (regression for amd64 in 3.16.7)
+    - Drivers: hv: vmbus: Fix a race condition when unregistering a device
+    - misc: genwqe: check for error from get_user_pages_fast()
+    - drbd: merge_bvec_fn: properly remap bvm->bi_bdev
+    - PCI: Restore detection of read-only BARs
+    - scsi: correct return values for .eh_abort_handler implementations
+    - genhd: check for int overflow in disk_expand_part_tbl()
+    - Btrfs: make sure we wait on logged extents when fsycning two subvols
+    - Btrfs: make sure logged extents complete in the current transaction V3
+    - Btrfs: do not move em to modified list when unpinning
+    - [armhf] mvebu: disable I/O coherency on non-SMP situations on
+      Armada 370/375/38x/XP
+    - nfs41: fix nfs4_proc_layoutget error handling
+    - USB: cdc-acm: check for valid interfaces
+    - HID: i2c-hid: fix race condition reading reports
+    - [armhf] mfd: twl4030-power: Fix regression with missing compatible flag
+      (regression in 3.16)
+    - [armhf] serial: samsung: wait for transfer completion before clock
+      disable
+    - n_tty: Fix read_buf race condition, increment read_head after pushing
+      data (regression in 3.12)
+    - dm cache: only use overwrite optimisation for promotion when in
+      writeback mode
+    - dm cache: dirty flag was mistakenly being cleared when promoting via
+      overwrite
+    - dm bufio: fix memleak when using a dm_buffer's inline bio
+    - iwlwifi: dvm: fix flush support for old firmware (regression in
+      3.16.7-ckt1)
+    - iwlwifi: mvm: update values for Smart Fifo (regression in 3.14)
+    - iommu/vt-d: Fix an off-by-one bug in __domain_mapping()
+    - dm crypt: use memzero_explicit for on-stack buffer
+    - mnt: Implicitly add MNT_NODEV on remount when it was implicitly added by
+      mount (regression in 3.16.3)
+    - umount: Disallow unprivileged mount force
+    - md/raid5: fetch_block must fetch all the blocks handle_stripe_dirtying
+      wants.
+    - [x86] drm/i915: Only warn the first time we attempt to mmio whilst
+      suspended (regression in 3.15)
+    - drm/vmwgfx: Fix error printout on signals pending
+    - drm/radeon: check the right ring in radeon_evict_flags()
+    - swiotlb-xen: pass dev_addr to xen_dma_unmap_page and
+      xen_dma_sync_single_for_cpu
+    - [armhf/armmp] swiotlb-xen: remove BUG_ON in xen_bus_to_phys
+    - swiotlb-xen: call xen_dma_sync_single_for_device when appropriate
+    - swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single
+    - [powerpc] book3s: Fix partial invalidation of TLBs in MCE code.
+    - [armhf] clocksource: arch_timer: Fix code to use physical timers when
+      requested (regression in 3.11)
+    - userns: Prevent evasion of group negative permissions through a userns
+      (CVE-2014-8989):
+      + Don't allow setgroups until a gid mapping has been setablished
+      + Don't allow unprivileged creation of gid mappings
+      + Add a knob to disable setgroups on a per user namespace basis
+      + Allow setting gid_maps without privilege when setgroups is disabled
+    - KEYS: Fix stale key registration at error path
+    - blk-mq: Fix a use-after-free
+    - blk-mq: Fix a race between bt_clear_tag() and bt_get()
+    - nfsd4: fix xdr4 count of server in fs_location4 (regression in 3.16)
+    - [x86] drm/i915: Don't complain about stolen conflicts on gen3
+      (regression in 3.12)
+    - [x86] kvm: Clear paravirt_enabled on KVM guests for espfix32's benefit
+      (CVE-2014-8134)
+    - blk-mq: Fix uninitialized kobject at CPU hotplugging
+    - ncpfs: return proper error from NCP_IOC_SETROOT ioctl
+    - [armhf] rtc: omap: fix clock-source configuration (regression in 3.16)
+    - exit: pidns: alloc_pid() leaks pid_namespace if child_reaper is exiting
+    - [amd64] switch_to(): Load TLS descriptors before switching DS and ES
+      (CVE-2014-9419)
+    - [x86] KVM: nVMX: Disable unrestricted mode if ept=0 (regression in 3.13)
+    - [x86] KVM: em_ret_far overrides cpl (follow-up to CVE-2014-3647 fix)
+    - pstore-ram: Fix hangs by using write-combine mappings
+    - HID: i2c-hid: prevent buffer overflow in early IRQ
+    - mac80211: fix multicast LED blinking and counter (regression in
+      3.16.7-ckt2)
+    - cfg80211: avoid mem leak on driver hint set
+    - nl80211: check matches array length before acessing it
+    - cfg80211: don't WARN about two consecutive Country IE hint
+      (regression in 3.14)
+    - tracing/sched: Check preempt_count() for current when reading task->state
+      (regression in 3.13)
+    - [x86] tls: Validate TLS entries to protect espfix (CVE-2014-8133)
+    - [x86] tls: Disallow unusual TLS segments
+    - isofs: Fix infinite looping over CE entries (CVE-2014-9420)
+    - mac80211: free management frame keys when removing station
+    - ceph: do_sync is never initialized (regression in 3.12)
+    - mnt: Fix a memory stomp in umount (regression in 3.14)
+    - ocfs2: fix journal commit deadlock
+    - md/bitmap: always wait for writes on unplug.
+    - [armhf] mmc: omap_hsmmc: Fix UHS card with DDR50 support (regression in
+      3.16)
+    - [x86] mmc: sdhci-pci-o2micro: Fix Dell E5440 issue (regression in 3.14)
+    - dm space map metadata: fix sm_bootstrap_get_nr_blocks()
+    - dm thin: fix a race in thin_dtr
+    - eCryptfs: Force RO mount when encrypted view is enabled
+    - eCryptfs: Remove buggy and unnecessary write in file name decode routine
+    - tcm_loop: Fix wrong I_T nexus association
+    - Btrfs: fix fs corruption on transaction abort if device supports discard
+    - [x86] perf/intel/uncore: Make sure only uncore events are collected
+    - perf: Fix events installation during moving group
+    - iscsi,iser-target: Initiate termination only once (regression in 3.16.4)
+    - iser-target: Fix flush + disconnect completion handling
+    - iser-target: Parallelize CM connection establishment
+    - iser-target: Fix connected_handler + teardown flow race
+    - iser-target: Handle ADDR_CHANGE event for listener cm_id
+    - iser-target: Fix implicit termination of connections
+    - iser-target: Allocate PI contexts dynamically
+    - iser-target: Fix NULL dereference in SW mode DIF
+    - iscsi,iser-target: Expose supported protection ops according to t10_pi
+    - genirq: Prevent proc race against freeing of irq descriptors
+    - [powerpc] powernv: Switch off MMU before entering nap/sleep/rvwinkle mode
+    - [x86] storvsc: ring buffer failures may result in I/O freeze
+    - iscsi-target: Fail connection on short sendmsg writes
+    - [x86] drm/i915: Invalidate media caches on gen7
+    - [x86] drm/i915: Force the CS stall for invalidate flushes
+    - dm thin: fix inability to discard blocks when in out-of-data-space mode
+    - dm thin: fix missing out-of-data-space to write mode transition if blocks
+      are released
+    - dm: fix missed error code if .end_io isn't implemented by target_type
+    - [armhf] i2c: mv64xxx: rework offload support to fix several problems
+      (regression in 3.12)
+    - [x86] tls: Don't validate lm in set_thread_area() after all
+    - ALSA: usb-audio: extend KEF X300A FU 10 tweak to Arcam rPAC
+    - tick/powerclamp: Remove tick_nohz_idle abuse
+    - audit: don't attempt to lookup PIDs when changing PID filtering audit
+      rules (regression in 3.15)
+    - audit: use supplied gfp_mask from audit_buffer in
+      kauditd_send_multicast_skb (regression in 3.16)
+    - [arm64] kernel: fix __cpu_suspend mm switch on warm-boot
+    - audit: restore AUDIT_LOGINUID unset ABI (regression in 3.10)
+    - Btrfs: fix loop writing of async reclaim
+    - isofs: Fix unchecked printing of ER records (CVE-2014-9584)
+    - crypto: af_alg - fix backlog handling
+    - udf: Check path length when reading symlink
+    - udf: Verify i_size when loading inode
+    - udf: Verify symlink size before loading it
+    - udf: Check component length before reading it
+    - [x86] platform/chrome: chromeos_laptop - Add support for Acer C720
+      (Closes: #774209)
+    - batman-adv: Calculate extra tail size based on queued fragments
+      (Closes: #774155) (CVE-2014-9428)
+    - vfs: move d_rcu from overlapping d_child to overlapping d_alias
+    - vfs: deal with deadlock in d_walk() (CVE-2014-8559)
+    - KEYS: close race between key lookup and freeing (CVE-2014-9529)
+
+  [ Ben Hutchings ]
+  * [sh4] Build with gcc-4.8 (Closes: #772602)
+  * Fix inconsistent ABI name generation in
+    debian/bin/{abiupdate,buildcheck,gencontrol}.py (Closes: #773233)
+  * iov: Revert unwanted ABI 'fix' in 3.16.7-ckt2-1
+  * [armel,armhf] thread_info: Fix ABI change in 3.16.7-ckt3
+  * PCI: Fix ABI change in 3.16.7-ckt3
+  * Ignore some ABI changes that don't appear to affect OOT modules:
+    - Removal of __add_pages(), __remove_pages(), of_device_is_stdout_path(),
+      clk_divider_ro_ops, tick_nohz_idle_enter, tick_nohz_idle_exit
+    - Changes to ASoC functions
+  * [arm64] Enable PSTORE as built-in and EFI_VARS_PSTORE as module;
+    ensure efivars and efi-pstore are loaded on EFI systems (Closes: #773309)
+  * hwmon: Enable SENSORS_NCT6683 as module (Closes: #774372)
+  * udeb: Add i2c-designware-{core,platform} to i2c-modules and i2c-hid to
+    input-modules (Closes: #772578)
+  * [x86] ACPI / video: Run _BCL before deciding registering backlight
+    (regression in 3.16) (Closes: #762285)
+  * [amd64] Enable EFI_MIXED to support Bay Trail systems
+  * efi: Expose underlying UEFI firmware platform size to userland, to
+    support installation on Bay Trail systems (Closes: #775191)
+  * vfs: Changes for compatibility with CVE-2014-8559 fix:
+    - aufs: move d_rcu from overlapping d_child to overlapping d_alias
+    - vfs: Avoid ABI change for dentry union changes
+  * [powerpc/powerpc{,-smp}] video/fb: Change FB_RADEON back to module
+    (Closes: #748398) (thanks to John Paul Adrian Glaubitz for thoroughly
+    testing this change)
+  * userns: Fix ABI change in 3.16.7-ckt4
+  * netfilter: conntrack: disable generic tracking for known protocols
+    (CVE-2014-8160)
+  * [amd64] vdso: Fix the vdso address randomization algorithm (CVE-2014-9585)
+
+  [ Ian Campbell ]
+  * [armhf] Enable support for support OMAP5432 uEVM by enabling:
+    TI_SOC_THERMAL, MFD_PALMAS, REGULATOR_PALMAS, REGULATOR_PBIAS,
+    REGULATOR_TI_ABB, PINCTRL_PALMAS, GPIO_PALMAS, RTC_DRV_PALMAS,
+    OMAP5_DSS_HDMI, DISPLAY_ENCODER_TPD12S015, DISPLAY_CONNECTOR_HDMI,
+    USB_DWC3_OMAP, EXTCON_PALMAS, TI_EMIF and DDR.
+    Based on a patch from Chen Baozi (Closes: #772953)
+  * [armel] Change configuration to reduce kernel image size
+    - Warn if image size leaves less than 1% spare capacity in the flash. This
+      allows some slack for growth over the lifetime of a stable release.
+    - [/kirkwood] Disable RD_LZO and RD_LZ4
+    - [/kirkwood] mm: Disable KSM
+    - [/kirkwood] Disable CHECKPOINT_RESTORE
+    - [/kirkwood] Disable ZSMALLOC
+    - [/kirkwood] Disable CRYPTO_FIPS
+    - [/kirkwood] Disable NET_MPLS_GSO
+    - [/kirkwood] Disable NETLINK_MMAP
+    - [/kirkwood] Disable PROFILING
+    - [/kirkwood] Disable BPF_JIT
+    - [/kirkwood] Disable KPROBES
+    - [/ixp4xx,orion5x]: Disable RD_LZO
+    - [/ixp4xx,orion5x]: Disable PROFILING
+    - [/orion5x]: Make SERIO and dependants modular
+  * [arhmf] Add device-tree for LinkSprite pcDuino V3. Patch from Karsten
+    Merker (Closes: #774067)
+  * [xen] More netback fixes (including reintroducing support for
+    feature-rx-notify, which was regressed by the fix to #767261).
+  * Disable TSO in mv643xx_eth driver by default again, since previous fix
+    appears to not work on all platforms (Closes: #764162).
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 16 Jan 2015 00:15:12 +0000
+
+linux (3.16.7-ckt2-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt1
+    - drm/tilcdc: Fix the error path in tilcdc_load()
+    - usb: phy: return -ENODEV on failure of try_module_get
+    - PM / clk: Fix crash in clocks management code if !CONFIG_PM_RUNTIME
+    - rt2x00: support Ralink 5362.
+    - wireless: rt2x00: add new rt2800usb devices
+    - NFS: Fix /proc/fs/nfsfs/servers and /proc/fs/nfsfs/volumes
+    - nfs: fix duplicate proc entries
+    - mm: page_alloc: fix zone allocation fairness on UP
+    - ext4: check EA value offset when loading
+    - jbd2: free bh when descriptor block checksum fails
+    - ext4: don't check quota format when there are no quota files
+    - target: Fix queue full status NULL pointer for SCF_TRANSPORT_TASK_SENSE
+    - vfs: fix data corruption when blocksize < pagesize for mmaped data
+    - ext4: fix mmap data corruption when blocksize < pagesize
+    - ext4: grab missed write_count for EXT4_IOC_SWAP_BOOT
+    - qla_target: don't delete changed nacls
+    - target: Fix APTPL metadata handling for dynamic MappedLUNs
+    - iser-target: Disable TX completion interrupt coalescing
+    - ext4: don't orphan or truncate the boot loader inode
+    - ext4: add ext4_iget_normal() which is to be used for dir tree lookups
+    - ext4: fix reservation overflow in ext4_da_write_begin
+    - ext4: Replace open coded mdata csum feature to helper function
+    - ext4: move error report out of atomic context in ext4_init_block_bitmap()
+    - ext4: check s_chksum_driver when looking for bg csum presence
+    - drm/radeon: fix speaker allocation setup
+    - drm/radeon: use gart memory for DMA ring tests
+    - random: add and use memzero_explicit() for clearing data
+    - freezer: Do not freeze tasks killed by OOM killer
+    - OOM, PM: OOM killed task shouldn't escape PM suspend
+    - [mips*/loongson-2f] loongson2_cpufreq: Fix CPU clock rate setting mismerge
+    - drm/cirrus: bind also to qemu-xen-traditional
+    - cpufreq: intel_pstate: Fix setting max_perf_pct in performance policy
+    - cpufreq: expose scaling_cur_freq sysfs file for set_policy() drivers
+    - cpufreq: intel_pstate: Reflect current no_turbo state correctly
+    - [x86] intel_pstate: Don't lose sysfs settings during cpu offline
+    - [x86] intel_pstate: Fix BYT frequency reporting
+    - [x86] intel_pstate: Correct BYT VID values.
+    - [x86] kvm: don't kill guest on unknown exit reason
+    - kvm: fix excessive pages un-pinning in kvm_iommu_map error path.
+      (CVE-2014-8369)
+    - vfs: be careful with nd->inode in path_init() and follow_dotdot_rcu()
+    - pstore: Fix duplicate {console,ftrace}-efi entries
+    - [x86] bpf_jit: fix two bugs in eBPF JIT compiler (regression in 3.16)
+    - vxlan: fix a use after free in vxlan_encap_bypass
+    - vxlan: using pskb_may_pull as early as possible
+    - vxlan: fix a free after use
+    - ipv4: dst_entry leak in ip_send_unicast_reply()
+    - ipv4: fix a potential use after free in ip_tunnel_core.c
+      (regression in 3.11)
+    - net: tso: fix unaligned access to crafted TCP header in helper API
+    - [x86] hyperv: Fix the total_data_buflen in send path
+    - tcp: md5: do not use alloc_percpu()
+    - macvlan: fix a race on port dismantle and possible skb leaks
+      (regression in 3.16)
+    - net/mlx4_en: Don't attempt to TX offload the outer UDP checksum for VXLAN
+      (regression in 3.14)
+    - gre: Use inner mac length when computing tunnel length
+      (regression in 3.14)
+    - [armhf] spi: pl022: Fix incorrect dma_unmap_sg
+    - mac80211: fix typo in starting baserate for rts_cts_rate_idx
+    - staging: comedi: (regression) channel list must be set for COMEDI_CMD
+      ioctl (regression in 3.15)
+    - nfsd4: fix response size estimation for OP_SEQUENCE (regression in 3.16)
+    - quota: Properly return errors from dquot_writeback_dquots()
+    - i3200_edac: Report CE events properly
+    - i82860_edac: Report CE events properly
+    - cpc925_edac: Report UE events properly
+    - e7xxx_edac: Report CE events properly
+    - scsi: Fix error handling in SCSI_IOCTL_SEND_COMMAND
+    - usb: serial: ftdi_sio: add "bricked" FTDI device PID
+    - [armhf] Revert "usb: dwc3: dwc3-omap: Disable/Enable only wrapper
+      interrupts in prepare/complete" (regression in 3.16)
+    - usb: gadget: f_fs: remove redundant ffs_data_get() (regression in 3.14)
+    - [armhf] usb: ffs: fix regression when quirk_ep_out_aligned_size flag is
+      set (regression in 3.15)
+    - [armhf] usb: musb: dsps: start OTG timer on resume again
+      (regression in 3.16.6)
+    - usb: gadget: udc: core: fix kernel oops with soft-connect
+    - nfsd4: fix crash on unknown operation number
+    - Revert "iwlwifi: mvm: treat EAPOLs like mgmt frames wrt rate"
+      (regression in 3.16.4)
+    - [armhf] usb: dwc3: gadget: Properly initialize LINK TRB
+    - posix-timers: Fix stack info leak in timer_create()
+    - futex: Fix a race condition between REQUEUE_PI and task death
+    - ALSA: bebob: Uninitialized id returned by saffirepro_both_clk_src_get
+    - PM / Sleep: fix async suspend_late/freeze_late error handling
+      (regression in 3.15)
+    - Revert "block: all blk-mq requests are tagged" (regression in 3.16)
+    - ALSA: pcm: Zero-clear reserved fields of PCM status ioctl in compat mode
+    - zap_pte_range: update addr when forcing flush after TLB batching faiure
+    - staging: comedi: fix memory leak / bad pointer freeing for chanlist
+      (regression in 3.15)
+    - [x86] drm/i915: Ignore VBT backlight check on Macbook 2, 1
+      (regression in 3.15)
+    - [i386/686-pae] pageattr: Prevent overflow in slow_virt_to_phys() for
+      X86_PAE
+    - [x86] ACPI / EC: Fix regression due to conflicting firmware behavior
+      between Samsung and Acer. (regression in 3.16.3)
+    - mm: free compound page with correct order
+    - lib/bitmap.c: fix undefined shift in __bitmap_shift_{left|right}()
+    - ext4: fix overflow when updating superblock backups after resize
+    - ext4: fix oops when loading block bitmap failed
+    - ext4: enable journal checksum when metadata checksum feature enabled
+    - ext4: prevent bugon on race between write/fcntl
+    - ext4: bail out from make_indexed_dir() on first error
+    - PCI: Rename sysfs 'enabled' file back to 'enable' (regression in 3.13)
+    - fs: allow open(dir, O_TMPFILE|..., 0) with mode 0
+    - [arm*] tracing/syscalls: Ignore numbers outside NR_syscalls' range
+    - nfs: fix kernel warning when removing proc entry
+    http://kernel.ubuntu.com/stable/ChangeLog-3.16.7-ckt2
+    - rbd: Fix error recovery in rbd_obj_read_sync()
+    - regulator: max77693: Fix use of uninitialized regulator config
+    - xhci: no switching back on non-ULT Haswell (regression in 3.12)
+    - Btrfs: fix kfree on list_head in btrfs_lookup_csums_range error cleanup
+    - ocfs2: fix breakage in o2net_send_tcp_msg() (regression in 3.15)
+    - [armhf] phy: omap-usb2: Enable runtime PM of omap-usb2 phy properly
+      (regression in 3.16)
+    - USB: cdc-acm: add quirk for control-line state requests
+      (regression in 3.16)
+    - sysfs: driver core: Fix glue dir race condition by gdp_mutex
+    - drm/nouveau: make sure display hardware is reinitialised on runtime
+      resume (regression in 3.15)
+    - drm/nv50/disp: fix dpms regression on certain boards
+    - drm/nouveau/bios: memset dcb struct to zero before parsing
+    - GFS2: Make rename not save dirent location (regression in 3.14)
+    - netfilter: ipset: off by one in ip_set_nfnl_get_byindex()
+    - netfilter: nf_tables: check for NULL in nf_tables_newchain pcpu stats
+      allocation (regression in 3.16)
+    - netfilter: nfnetlink_log: fix maximum packet length logged to userspace
+    - netfilter: nft_compat: fix wrong target lookup in nft_target_select_ops()
+    - mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
+      (regression in 3.16)
+    - mmc: don't request CD IRQ until mmc_start_host()
+    - fs: make cont_expand_zero interruptible
+    - UBIFS: fix a race condition
+    - [x86] fpu: __restore_xstate_sig()->math_state_restore() needs
+      preempt_disable()
+    - [x86] fpu: shift drop_init_fpu() from save_xstate_sig() to
+      handle_signal()
+    - perf: Fix unclone_ctx() vs. locking
+    - evm: properly handle INTEGRITY_NOXATTRS EVM status
+    - [alpha] vfs: missing data dependency barrier in prepend_name()
+    - jffs2: kill wbuf_queued/wbuf_dwork_lock
+    - fix misuses of f_count() in ppp and netlink
+    - sched: Use dl_bw_of() under RCU read lock
+    - [s390*] topology: call set_sched_topology early
+    - [armhf] mfd: ti_am335x_tscadc: Fix TSC operation after ADC continouous
+      mode (regression in 3.14)
+    - [armhf] mfd: ti_am335x_tscadc: Fix TSC resume (regression in 3.14)
+    - selinux: fix inode security list corruption
+    - blk-mq: fix potential hang if rolling wakeup depth is too high
+      (regression in 3.16)
+    - block: fix alignment_offset math that assumes io_min is a power-of-2
+    - drm/nouveau/gpio: rename g92 class to g94 (regression in 3.16)
+    - [x86] drm/i915: Do not leak pages when freeing userptr objects
+    - media: v4l2-common: fix overflow in v4l_bound_align_image()
+    - sched: Use rq->rd in sched_setaffinity() under RCU read lock
+    - [powerpc*] use device_online/offline() instead of cpu_up/down()
+      (regression in 3.11)
+    - xen-blkback: fix leak on grant map error path
+    - net: skb_fclone_busy() needs to detect orphaned skb (regression in 3.16)
+    - rbd: avoid format-security warning inside alloc_workqueue()
+    - rbd: fix error return code in rbd_dev_device_setup()
+    - media: ttusb-dec: buffer overflow in ioctl (CVE-2014-8884)
+    - dm raid: ensure superblock's size matches device's logical block size
+    - ahci: disable MSI instead of NCQ on Samsung pci-e SSDs on macbooks
+      (Closes: #772435)
+    - mac80211: properly flush delayed scan work on interface removal
+    - [i386] microcode, AMD: Fix early ucode loading on 32-bit
+      (regression in 3.14)
+    - [armhf] mvebu: armada xp: Generalize use of i2c quirk
+      (regression in 3.12)
+    - mac80211: fix use-after-free in defragmentation
+    - iwlwifi: fix RFkill while calibrating (regression in 3.16)
+    - tun: Fix csum_start with VLAN acceleration (regression in 3.12)
+    - macvtap: Fix csum_start when VLAN tags are present
+    - dm thin: grab a virtual cell before looking up the mapping
+    - [x86] KVM: Fix uninitialized op->type for some immediate values
+    - [powerpc*] hwrng: pseries - port to new read API and fix stack corruption
+    - drm/radeon: set correct CE ram size for CIK
+    - drm/radeon: make sure mode init is complete in bandwidth_update
+    - cpufreq: Avoid crash in resume on SMP without OPP (regresion in 3.12)
+    - [i386] microcode, AMD: Fix ucode patch stashing on 32-bit
+      (regression in 3.14)
+    - [armhf] mfd: twl4030-power: Fix poweroff with PM configuration enabled
+      (regression in 3.16)
+    - [hppa] Use compat layer for msgctl, shmat, shmctl and semtimedop syscalls
+    - tracing: Do not busy wait in buffer splice (regresion in 3.16)
+    - param: fix crash on bad kernel arguments (regression in 3.16)
+    - audit: keep inode pinned
+    - drm/radeon: add locking around atombios scratch space usage
+    - nfs: fix pnfs direct write memory leak
+    - nfs: Fix use of uninitialized variable in nfs_getattr()
+    - NFSv4: Ensure that we remove NFSv4.0 delegations when state has expired
+    - NFSv4.1: nfs41_clear_delegation_stateid shouldn't trust
+      NFS_DELEGATED_STATE
+    - NFSv4: Fix races between nfs_remove_bad_delegation() and delegation
+      return
+    - NFSv4: Ensure that we call FREE_STATEID when NFSv4.x stateids are revoked
+    - NFS: Don't try to reclaim delegation open state if recovery failed
+    - [arm64] efi: Fix stub cache maintenance
+    - [arm64] __clear_user: handle exceptions on strb (CVE-2014-7843)
+    - [arm64] Correct the race condition in aarch64_insn_patch_text_sync()
+    - Fix thinko in iov_iter_single_seg_count
+    - libceph: do not crash on large auth tickets
+    - [armel,armhf] 8191/1: decompressor: ensure I-side picks up relocated code
+    - zram: avoid kunmap_atomic() of a NULL pointer
+    - firewire: cdev: prevent kernel stack leaking into ioctl arguments
+    - md: Always set RECOVERY_NEEDED when clearing RECOVERY_FROZEN
+      (regression in 3.13)
+    - vxlan: Do not reuse sockets for a different address family
+    - net: sctp: fix NULL pointer dereference in af->from_addr_param on
+      malformed packet (CVE-2014-7841)
+    - net: sctp: fix memory leak in auth key management
+    - [armel,m68k] ipv6: fix IPV6_PKTINFO with v4 mapped (regression in 3.15)
+    - netlink: Properly unbind in error conditions. (regression in 3.16)
+    - smsc911x: power-up phydev before doing a software reset.
+      (regression in 3.14)
+    - [sparc*] sunvdc: limit each sg segment to a page
+    - [sparc*] vio: fix reuse of vio_dring slot
+    - drm/radeon: initialize sadb to NULL in the audio code
+    - [x86] KVM: Don't report guest userspace emulation error to userspace
+    - crypto: caam - remove duplicated sg copy functions
+    - audit: correct AUDIT_GET_FEATURE return message type
+    - memory-hotplug: Remove "weak" from memory_block_size_bytes() declaration
+      (regression in 3.14)
+    - [s390*] vmcore: Remove "weak" from function declarations
+    - [s390*] clocksource: Remove "weak" from clocksource_default_clock()
+      declaration
+    - IB/core: Clear AH attr variable to prevent garbage data
+    - [amd64] x32, audit: Fix x32's AUDIT_ARCH wrt audit
+    - [armhf] dts: am335x-evm: Fix 5th NAND partition's name
+      (regression in 3.15)
+    - dell-wmi: Fix access out of memory
+
+  [ Ben Hutchings ]
+  * [x86] Complete Thunderbolt support on Apple computers (Closes: #768653)
+    - PCI: Add pci_fixup_suspend_late quirk pass
+    - PCI: Suspend/resume quirks for Apple thunderbolt
+    - Enable THUNDERBOLT as module
+  * [amd64] traps: Stop using IST for #SS (CVE-2014-9090)
+  * [amd64] traps: Fix the espfix64 #DF fixup and rewrite it in C
+  * [amd64] traps: Rework bad_iret
+  * [amd64] asm/traps: Disable tracing and kprobes in fixup_bad_iret and
+    sync_regs
+  * Fix ABI changes in iovec, of, perf and truncate
+  * Ignore ABI changes in iwlwifi, KVM and spi-nor
+  * Revert "drivers/net: Disable UFO through virtio" in macvtap and tun.
+    This removes the need to shut down VMs if migrating to a patched
+    host.
+
+  [ Ian Campbell ]
+  * [xen] Backport various netback fixes (Closes: #767261).
+  * Backport fix for TSO with mv643xx_eth driver, replacing previous workaround
+    (#764162)
+  * [armhf] Increase Ethernet phy startup delay on Banana-Pi. Patch from
+    Karsten Merker (Closes: #767042)
+  * [armhf] Enable FB_SIMPLE, used on some Exynos platforms and elsewhere.
+  * [arm64] Backport various upstream fixes and improvements to the APM X-gene
+    Ethernet driver.
+  * Honour stdout-path from Device Tree, along with supporting any supplied
+    options. (Closes: #770212)
+  * [armhf] Add udeb modules to support video and keyboard for imx6. Patch from
+    Vagrant Cascadian (Closes: #770635)
+  * [device-tree] Reserve memreserve regions even if they partially overlap
+    with an existing reservation. Fixes boot on Midway.
+  * [arm64] Enable reboot on the Xgene platform.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 08 Dec 2014 20:03:18 +0000
+
+linux (3.16.7-2) unstable; urgency=medium
+
+  [ Ian Campbell ]
+  * Disable TSO in mv643xx_eth driver by default (Closes: #764162).
+
+  [ Aurelien Jarno ]
+  * [i386] Rename 486 flavour to 586 for udebs. (Closes: #768288)
+
+  [ Ben Hutchings ]
+  * [hppa] udeb: Fix modules in multiple packages (Closes: 768297)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 06 Nov 2014 17:42:26 +0000
+
+linux (3.16.7-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.16.6
+    - rtnetlink: fix VF info size (regression in 3.11)
+    - myri10ge: check for DMA mapping errors
+    - Revert "macvlan: simplify the structure port" (regression in 3.16)
+    - tcp: don't use timestamp from repaired skb-s to calculate RTT (v2)
+      (regression in 3.15)
+    - tcp: fix tcp_release_cb() to dispatch via address family for
+      mtu_reduced()
+    - tipc: fix message importance range check (regression in 3.15)
+    - packet: handle too big packets for PACKET_V3
+    - bnx2x: Revert UNDI flushing mechanism (regression in 3.14)
+    - net: ipv6: fib: don't sleep inside atomic lock (regression in 3.15)
+    - openvswitch: fix panic with multiple vlan headers
+    - ipv6: fix rtnl locking in setsockopt for anycast and multicast
+    - l2tp: fix race while getting PMTU on PPP pseudo-wire (regression in 3.15)
+    - ipv6: restore the behavior of ipv6_sock_ac_drop()
+    - bonding: fix div by zero while enslaving and transmitting
+      (regression in 3.12)
+    - net: filter: fix possible use after free (regression in 3.15)
+    - net: allow macvlans to move to net namespace (regression in 3.13)
+    - macvlan: allow to enqueue broadcast pkt on virtual device
+      (regression in 3.16)
+    - xfrm: Generate blackhole routes only from route lookup functions
+    - xfrm: Generate queueing routes only from route lookup functions
+    - macvtap: Fix race between device delete and open.
+    - net/mlx4_core: Allow not to specify probe_vf in SRIOV IB mode
+      (regression in 3.15)
+    - net/mlx4: Correctly configure single ported VFs from the host
+      (regression in 3.15)
+    - gro: fix aggregation for skb using frag_list (regression in 3.13)
+    - hyperv: Fix bug in netvsc_start_xmit() (potential use-after-free)
+    - team: avoid race condition in scheduling delayed work
+    - hyperv: Fix bug in netvsc_send() (potential use-after-free)
+    - sctp: handle association restarts when the socket is closed.
+    - net_sched: copy exts->type in tcf_exts_change() (regression in 3.14)
+    - crypto: caam - fix addressing of struct member
+    - driver/base/node: remove unnecessary kfree of node struct from
+      unregister_one_node (regression in 3.15)
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.16.7
+    - btrfs: wake up transaction thread from SYNC_FS ioctl
+    - Btrfs: fix up bounds checking in lseek
+    - Btrfs: don't do async reclaim during log replay
+    - Btrfs: cleanup error handling in build_backref_tree
+    - Btrfs: fix build_backref_tree issue with multiple shared blocks
+    - Btrfs: fix race in WAIT_SYNC ioctl
+    - fs: Add a missing permission check to do_umount (CVE-2014-7975)
+    - kvm: fix potentially corrupt mmio cache
+    - [x86] kvm,vmx: Preserve CR4 across VM entry (CVE-2014-3690)
+    - be2iscsi: check ip buffer before copying (stack buffer overflow)
+    - mptfusion: enable no_write_same for vmware scsi disks
+    - qla2xxx: fix kernel NULL pointer access (regression in 3.16)
+      (Closes: #764804)
+    - qla2xxx: Fix shost use-after-free on device removal (regression in 3.14)
+    - dmaengine: fix xor sources continuation
+    - [arm64] debug: don't re-enable debug exceptions on return from el1_dbg
+    - mei: bus: fix possible boundaries violation
+    - nfsv4: Fixing lease renewal (regression in 3.13)
+    - lzo: check for length overrun in variable length encoding.
+    - [armhf] tty: omap-serial: fix division by zero
+    - NFSv4: Fix lock recovery when CREATE_SESSION/SETCLIENTID_CONFIRM fails
+    - NFSv4: fix open/lock state recovery error handling
+    - NFSv4.1: Fix an NFSv4.1 state renewal regression
+    - nfsd4: reserve adequate space for LOCK op (regression in 3.16)
+    - NFS: Fix an uninitialised pointer Oops in the writeback error path
+    - NFS: Fix a bogus warning in nfs_generic_pgio (regression in 3.16.4)
+    - iwlwifi: mvm: disable BT Co-running by default
+    - [armel,armhf] PCI: mvebu: Fix uninitialized variable in
+      mvebu_get_tgt_attr()
+    - Revert "ath9k_hw: reduce ANI firstep range for older chips"
+      (regression in 3.15)
+    - fanotify: enable close-on-exec on events' fd when requested in
+      fanotify_init()
+    - futex: Ensure get_futex_key_refs() always implies a barrier
+      (regression in 3.14)
+    - [ppc64el] iommu/ddw: Fix endianness
+    - [arm64] compat: fix compat types affecting struct compat_elf_prpsinfo
+    - ALSA: emu10k1: Fix deadlock in synth voice lookup
+    - ALSA: hda - Add missing terminating entry to SND_HDA_PIN_QUIRK macro
+    - [armhf] mvebu: Netgear RN104: Use Hardware BCH ECC
+    - [armhf] mvebu: Netgear RN2120: Use Hardware BCH ECC
+    - [armhf] mvebu: Netgear RN102: Use Hardware BCH ECC
+    - ecryptfs: avoid to access NULL pointer when write metadata in xattr
+    - xfs: ensure WB_SYNC_ALL writeback handles partial pages correctly
+    - [sparc*] Do not disable interrupts in nmi_cpu_busy()
+    - [sparc*] Fix pcr_ops initialization and usage bugs.
+    - [sparc*] sun4v TLB error power off events
+    - [sparc*] Fix corrupted thread fault code.
+    - [sparc*] find_node adjustment
+    - [sparc*] Let memset return the address argument
+    - [sparc*] bpf_jit: fix support for ldx/stx mem and SKF_AD_VLAN_TAG
+    - [sparc*] bpf_jit: fix loads from negative offsets
+    - [sparc*] Fix FPU register corruption with AES crypto offload.
+    - [sparc*] Do not define thread fpregs save area as zero-length array.
+    - [sparc*] Fix hibernation code refrence to PAGE_OFFSET.
+    - [sparc*] correctly recognise M6 and M7 cpu type
+    - [sparc*] T5 PMU
+    - [sparc*] Switch to 4-level page tables.
+    - [sparc*] Adjust KTSB assembler to support larger physical addresses.
+    - [sparc*] Fix physical memory management regressions with large
+      max_phys_bits.
+    - [sparc*] Use kernel page tables for vmemmap.
+    - [sparc*] Increase MAX_PHYS_ADDRESS_BITS to 53.
+    - [sparc*] sparse irq
+    - [sparc*] Fix register corruption in top-most kernel stack frame during
+      boot.
+    - [sparc*] Implement __get_user_pages_fast().
+
+  [ Ben Hutchings ]
+  * [i386] Rename 486 flavour to 586, as it has not worked on 486 processors
+    since we enabled CC_STACKPROTECTOR (Closes: #766105)
+    - Select M586TSC instead of M486
+  * [x86] r8723au: Backport changes up to Linux 3.17 (Closes: #765685)
+  * mmc_block: Increase max_devices and set MMC_BLOCK_MINORS to 256
+    (Closes: #765621)
+  * [x86] drm/i915: Initialise userptr mmu_notifier serial to 1
+    (Closes: #765590)
+  * rtsx_usb_ms: Use msleep_interruptible() in polling loop (Closes: #765717)
+  * Bump ABI to 4
+  * Add '.0' to the kernel version string (Closes: #742226, #745984)
+  * vfs,fuse: Change iov_iter_get_pages() to take both maxsize and maxpages
+    parameters (Closes: #764285)
+  * lockd: Try to reconnect if statd has moved (Closes: #767219)
+  * m25p80: Fix module device ID table
+  * HID: i2c-hid: call the hid driver's suspend and resume callbacks
+    (Closes: #767204)
+  * [x86] drm/i915: Add some L3 registers to the parser whitelist
+    (Closes: #767148)
+  * wireless: rt2x00: add new rt2800usb device (thanks to Cyril Brulebois)
+    (Closes: #766802)
+  * drivers/net,ipv6: Fix virtio/IPv6 regression in 3.16:
+    - drivers/net: Disable UFO through virtio
+    - drivers/net,ipv6: Select IPv6 fragment idents for virtio UFO packets
+  * [x86] KVM: Check non-canonical addresses upon WRMSR (CVE-2014-3610)
+  * [x86] KVM: Prevent host from panicking on shared MSR writes.
+    (CVE-2014-3610)
+  * [x86] KVM: Improve thread safety in pit (CVE-2014-3611)
+  * [x86] kvm: vmx: handle invvpid vm exit gracefully (CVE-2014-3646)
+  * [x86] KVM: Fix wrong masking on relative jump/call
+  * [x86] KVM: Emulator fixes for eip canonical checks on near branches
+    (CVE-2014-3647)
+  * [x86] KVM: Handle errors when RIP is set during far jumps (CVE-2014-3647)
+  * [x86] KVM: Fix far-jump to non-canonical check
+  * net: sctp: fix skb_over_panic when receiving malformed ASCONF chunks
+    (CVE-2014-3673)
+  * net: sctp: fix panic on duplicate ASCONF chunks (CVE-2014-3687)
+  * net: sctp: fix remote memory pressure from excessive queueing
+    (CVE-2014-3688)
+  * mnt: Prevent pivot_root from creating a loop in the mount tree
+    (CVE-2014-7970)
+  * linux-image: Recommend irqbalance if CONFIG_SMP is enabled
+    (Closes: #577788)
+  * [armhf] leds: Enable LEDS_PWM as module (for Cubox-i)
+  * [x86] Backport Thunderbolt support on Apple computers from 3.17
+  * [x86] linux-image: Remove lilo from suggested boot loaders
+  * [amd64] linux-image: Add grub-efi to suggested boot loaders
+  * [hppa] Reduce SIGRTMIN from 37 to 32 to behave like other Linux
+    architectures (Closes: #766635)
+  * [hppa] udeb: Add many more module packages (Closes: #766793)
+  * iwlwifi: Backport firmware monitor from 3.17 (Closes: #767088)
+  * bug script: Warn if the running kernel matches the ABI name of the
+    package but is not the installed version
+
+  [ Mauricio Faria de Oliveira ]
+  * [ppc64el] Disable CONFIG_CMDLINE{,_BOOL} usage for setting consoles
+    (Closes: #764745)
+
+  [ Uwe Kleine-König ]
+  * [armhf] enable rtc driver for i.MX6 
+  * [armhf] add chipidea usb host driver to usb-modules-$version-armmmp-di
+    for i.MX6 
+  * [armhf] enable PCI and NAND driver for Armada 370
+  * [armhf] enable RTC, GPIO_PCA953X, SENSORS_G762 and watchdog driver for
+    Netgear ReadyNAS 102/104
+
+  [ Ian Campbell ]
+  * [armhf] Build i2c-s3c2410 statically, it is used by the arndale power
+    controller.
+  * [armhf] Backport device tree file for Olimex A20-OLinuXino-LIME. (Closes: #764967)
+  * [armhf] Enable various drivers for the Nokia N900. Patch from Sebastian
+    Reichel. (Closes: #766070)
+  * [arm64] Enable EHCI and OHCI platform USB HCD drivers.
+  * Enable MTD and MTDBLOCK in top-level config.
+  * [armhf] Add mtd-modules udeb. Patch from Uwe Kleine-Koenig.
+
+  [ Aurelien Jarno ]
+  * [mips*] Backport a hugetlb fix for Octeon from 3.18.
+  * [mips*] Backport math emulation fix for MIPS32r2 from 3.18.
+  * [mips*] Only define MAX_PHYSMEM_BITS on Loongson-3, until a better fix
+    is committed upstream. Fixes Loongson-2 kernel and maybe more. Closes:
+    #764223.
+  * [mips*/octeon] Add support for the UBNT E200 board (EdgeRouter/EdgeRouter
+    Pro 8 port).
+  * [mips*/octeon] Enable SERIAL_8250_DW. Disable KEYBOARD_ATKBD, MOUSE_PS2,
+    SERIO_I8042.
+  * [mips*/octeon] Really enable USB_OCTEON_EHCI and USB_OCTEON_OHCI. Closes: 
+    Closes: #762066.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 04 Nov 2014 09:47:27 +0000
+
+linux (3.16.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.16.4
+    - module: Clean up ro/nx after early module load failures
+      (regression in 3.16)
+    - [armhf] cpufreq: OPP: Avoid sleeping while atomic
+    - [armhf] drm/tilcdc: Fix various bugs in removal path
+    - drm/ttm: Fix possible stack overflow by recursive shrinker calls.
+    - [x86] drm/i915: Fix crash when failing to parse MIPI VBT
+      (regression in 3.16)
+    - [x86] drm/i915: read HEAD register back in init_ring_common() to enforce
+      ordering (Closes: #763583)
+    - libata: widen Crucial M550 blacklist matching
+    - pata_scc: propagate return value of scc_wait_after_reset
+    - pwm: Fix period and polarity in pwm_get() for non-perfect matches
+    - aio: add missing smp_rmb() in read_events_ring
+    - [arm64] flush TLS registers during exec
+    - [arm64] use irq_set_affinity with force=false when migrating irqs
+      (regression in 3.15)
+    - [arm*] KVM: Nuke Hyp-mode tlbs before enabling MMU
+    - [x86] i2c: ismt: use correct length when copy buffer
+    - ftrace: Use current addr when converting to nop in
+      __ftrace_replace_code() (regression in 3.16)
+    - ALSA: core: fix buffer overflow in snd_info_get_line()
+    - ALSA: firewire-lib/dice: add arrangements of PCM pointer and interrupts
+      for Dice quirk (regression in 3.16)
+    - HID: picolcd: sanity check report size in raw_event() callback
+      (CVE-2014-3186)
+    - HID: magicmouse: sanity check report size in raw_event() callback
+      (CVE-2014-3181)
+    - HID: logitech-dj: prevent false errors to be shown (regression in 3.16.2)
+    - [x86] drm/i915: Skip load detect when intel_crtc->new_enable==true
+      (regression in 3.16)
+    - [x86] drm/i915: fix plane/cursor handling when runtime suspended
+      (regression in 3.14)
+    - [x86] drm/i915: Ignore VBT backlight presence check on Acer C720 (4005U)
+      (regression in 3.15)
+    - [x86] drm/i915: Wait for vblank before enabling the TV encoder
+      (regression in 3.16)
+    - [x86] drm/i915/hdmi: fix hdmi audio state readout (regression in 3.16)
+    - drm/radeon: Add ability to get and change dpm state when radeon PX card
+      is turned off (regression in 3.15)
+    - locks: pass correct "before" pointer to locks_unlink_lock in
+      generic_add_lease
+    - ufs: fix deadlocks introduced by sb mutex merge (regression in 3.16)
+    - USB: serial: fix potential stack buffer overflow
+    - USB: serial: fix potential heap buffer overflow
+    - USB: option: reduce interrupt-urb logging verbosity (regression in 3.16)
+    - [armhf] usb: phy: twl4030-usb: Fix lost interrupts after ID pin goes down
+      (regression in 3.13)
+    - [armhf] usb: phy: twl4030-usb: Fix regressions to runtime PM on omaps
+      (regressions in 3.14, 3.15)
+    - uwb: init beacon cache entry before registering uwb device
+    - usb: hub: take hub->hdev reference when processing from eventlist
+    - USB: EHCI: unlink QHs even after the controller has stopped
+    - Revert "ACPI / battery: fix wrong value of capacity_now reported when
+      fully charged" (regression in 3.16)
+    - [x86] iommu/vt-d: Check return value of acpi_bus_get_device()
+      (regression in 3.15)
+    - [armhf/armmp-lpae] iommu/arm-smmu: fix programming of SMMU_CBn_TCR for
+      stage 1
+    - cgroup: check cgroup liveliness before unbreaking kernfs
+      (regression in 3.15)
+    - NFSv4: Fix another bug in the close/open_downgrade code
+      (regression in 3.16.2)
+    - nfsd4: fix corruption of NFSv4 read data (regression in 3.16)
+    - nfs: check wait_on_bit_lock err in page_group_lock
+    - nfs: clear_request_commit while holding i_lock
+    - nfs: fix nonblocking calls to nfs_page_group_lock
+    - nfs: use blocking page_group_lock in add_request
+    - nfs: fix error handling in lock_and_join_requests
+    - nfs: don't sleep with inode lock in lock_and_join_requests
+    - nfs: disallow duplicate pages in pgio page vectors
+    - nfs: can_coalesce_requests must enforce contiguity
+    - [armhf] 8129/1: errata: work around Cortex-A15 erratum 830321 using dummy
+      strex
+    - [armhf] 8133/1: use irq_set_affinity with force=false when migrating irqs
+      (regression in 3.15)
+    - [armel,armhf] 8148/1: flush TLS and thumbee register state during exec
+    - [armel,armhf] 8149/1: perf: Don't sleep while atomic when enabling
+      per-cpu interrupts (regression in 3.15)
+    - [armhf] imx: fix .is_enabled() of shared gate clock (regression in 3.16)
+    - [armhf] 8165/1: alignment: don't break misaligned NEON load/store
+    - [mips*] Fix MFC1 & MFHC1 emulation for 64-bit MIPS systems
+      (regression in 3.15)
+    - ACPICA: Update to GPIO region handler interface.
+    - gpio / ACPI: Use pin index and bit length
+    - ACPI / platform / LPSS: disable async suspend/resume of LPSS devices
+      (regression in 3.16)
+    - ACPI / hotplug: Generate online uevents for ACPI containers
+      (regression in 3.14)
+    - ACPI / video: disable native backlight for ThinkPad X201s
+      (regression in 3.16)
+    - regmap: Fix regcache debugfs initialization (regression in 3.15)
+    - regmap: Fix handling of volatile registers for format_write() chips
+    - regmap: Don't attempt block writes when syncing cache on single_rw
+      devices
+    - cgroup: reject cgroup names with '\n'
+    - cgroup: delay the clearing of cgrp->kn->priv
+    - cgroup: fix unbalanced locking (regression in 3.14)
+    - [s390*] KVM: Fix user triggerable bug in dead code
+    - [s390*] KVM: mm: try a cow on read only pages for key ops
+    - [s390*] KVM: mm: Fix storage key corruption during swapping
+    - [s390*] KVM: mm: Fix guest storage key corruption in
+      ptep_set_access_flags
+    - [x86] xen: don't copy bogus duplicate entries into kernel page tables
+    - [x86] early_ioremap: Increase FIX_BTMAPS_SLOTS to 8 (regression in 3.16)
+    - shmem: fix nlink for rename overwrite directory
+    - SMB3: Fix oops when creating symlinks on smb3
+    - iio: Fix indio_dev->trig assignment in several drivers
+    - Target/iser: Don't put isert_conn inside disconnected handler
+    - target: Fix inverted logic in SE_DEV_ALUA_SUPPORT_STATE_STORE
+      (regression in 3.13)
+    - iscsi-target: Fix memory corruption in iscsit_logout_post_handler_diffcid
+    - SCSI: libiscsi: fix potential buffer overrun in __iscsi_conn_send_pdu
+    - Revert "iwlwifi: dvm: don't enable CTS to self" (regression in 3.16)
+    - iwlwifi: mvm: fix endianity issues with Smart Fifo commands
+      (regression in 3.14)
+    - iwlwifi: mvm: set MAC_FILTER_IN_BEACON correctly for STA/P2P client
+      (regression in 3.16)
+    - workqueue: apply __WQ_ORDERED to create_singlethread_workqueue()
+      (regression in 3.10)
+    - futex: Unlock hb->lock in futex_wait_requeue_pi() error path
+    - block: Fix dev_t minor allocation lifetime
+    - dm cache: fix race causing dirty blocks to be marked as clean
+    - percpu: fix pcpu_alloc_pages() failure path
+    - percpu: perform tlb flush after pcpu_map_pages() failure
+    - regulatory: add NUL to alpha2
+    - lockd: fix rpcbind crash on lockd startup failure (regression in 3.15)
+    - genhd: fix leftover might_sleep() in blk_free_devt()
+    - eventpoll: fix uninitialized variable in epoll_ctl
+    - kcmp: fix standard comparison bug
+    - fs/notify: don't show f_handle if exportfs_encode_inode_fh failed
+    - nilfs2: fix data loss with mmap()
+    - mm, slab: initialize object alignment on cache creation
+    - fs/cachefiles: add missing \n to kerror conversions (regression in 3.16)
+    - mm: softdirty: keep bit when zapping file pte
+    - sched: Fix unreleased llc_shared_mask bit during CPU hotplug
+    - brcmfmac: handle IF event for P2P_DEVICE interface (regression in 3.12)
+    - ath9k_htc: fix random decryption failure (regression in 3.15)
+    - [powerpc,ppc*] Add smp_mb() to arch_spin_is_locked()
+    - [powerpc,ppc*] Add smp_mb()s to arch_spin_unlock_wait()
+    - [hppa] Implement new LWS CAS supporting 64 bit operations.
+    - alarmtimer: Return relative times in timer_gettime
+    - alarmtimer: Do not signal SIGEV_NONE timers
+    - alarmtimer: Lock k_itimer during timer callback
+    - GFS2: fix d_splice_alias() misuses
+    - IB/qib: Correct reference counting in debugfs qp_stats
+    - IB/mlx4: Avoid null pointer dereference in mlx4_ib_scan_netdevs()
+      (regression in 3.14)
+    - IB/mlx4: Don't duplicate the default RoCE GID (regression in 3.14)
+    - IB/core: When marshaling uverbs path, clear unused fields
+      (regression in 3.14)
+    - mm: Fix unbalanced mutex in dma_pool_create(). (regression in 3.16)
+    - PCI: Add pci_ignore_hotplug() to ignore hotplug events for a device
+      (regression in 3.15)
+    - Revert "PCI: Don't scan random busses in pci_scan_bridge()"
+      (regression in 3.15)
+    - drm/nouveau/runpm: fix module unload
+    - drm/radeon/px: fix module unload
+    - fs: Fix nasty 32-bit overflow bug in buffer i/o code.
+    - blk-mq: Avoid race condition with uninitialized requests
+    - [x86] crypto: ccp - Check for CCP before registering crypto algs
+    - nl80211: clear skb cb before passing to netlink
+    - Revert "PCI: Make sure bus number resources stay within their parents
+      bounds" (regression in 3.15)
+    - cpufreq: release policy->rwsem on error (regression in 3.14)
+    - cpufreq: fix cpufreq suspend/resume for intel_pstate (regression in 3.15)
+    - media: it913x: init tuner on attach (regression in 3.15)
+    - media: videobuf2-dma-sg: fix for wrong GFP mask to
+      sg_alloc_table_from_pages (regression in 3.13)
+    - media: vb2: fix vb2 state check when start_streaming fails
+      (regression in 3.16.3)
+    - media: vb2: fix plane index sanity check in vb2_plane_cookie()
+    - md/raid1: clean up request counts properly in close_sync()
+      (regression in 3.13)
+    - md/raid1: be more cautious where we read-balance during resync.
+      (regression in 3.13)
+    - md/raid1: make sure resync waits for conflicting writes to complete.
+      (regression in 3.13)
+    - md/raid1: Don't use next_resync to determine how far resync has
+      progressed (regression in 3.13)
+    - md/raid1: update next_resync under resync_lock. (regression in 3.13)
+    - md/raid1: count resync requests in nr_pending. (regression in 3.13)
+    - md/raid1: fix_read_error should act on all non-faulty devices.
+    - md/raid1: intialise start_next_window for READ case to avoid hang
+      (regression in 3.13)
+    - netfilter: xt_hashlimit: perform garbage collection from process context
+    - mmc: mmci: Reverse IRQ handling for the arm_variant (regression in 3.15)
+    - partitions: aix.c: off by one bug (regression in 3.11)
+    - cpufreq: update 'cpufreq_suspended' after stopping governors
+    - aio: block exit_aio() until all context requests are completed
+    - ext4: propagate errors up to ext4_find_entry()'s callers
+    - ext4: avoid trying to kfree an ERR_PTR pointer
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.16.5
+    - udf: Avoid infinite loop when processing indirect ICBs (CVE-2014-6410)
+    - ASoC: core: fix possible ZERO_SIZE_PTR pointer dereferencing error.
+    - perf: fix perf bug in fork()
+    - mm: memcontrol: do not iterate uninitialized memcgs (regression in 3.14)
+    - mm: migrate: Close race between migration completion and mprotect
+    - [x86] ACPI / i915: Update the condition to ignore firmware backlight
+      change request (regression in 3.16)
+    - [x86] cpufreq: pcc-cpufreq: Fix wait_event() under spinlock
+      (regression in 3.15)
+    - md/raid5: disable 'DISCARD' by default due to safety concerns.
+    - [x86] drm/i915: Flush the PTEs after updating them before suspend
+      (regression in 3.12)
+    - cifs: Fix problem recognizing symlinks (regression in 3.13)
+    - ring-buffer: Fix infinite spin in reading buffer (regression in 3.16.3)
+    - mm: numa: Do not mark PTEs pte_numa when splitting huge pages
+    - media: vb2: fix VBI/poll regression
+
+  [ Ian Campbell ]
+  * [armhf] Add Exynos5 disk/usb/nic modules to udebs.
+  * [armhf] Backport BananaPi device tree files. Patch from Karsten
+    Merker (Closes: #763897).
+
+  [ Ben Hutchings ]
+  * [hppa/parisc64-smp] Work around gcc 4.8 miscompilation (Closes: #762390)
+  * [powerpc/powerpc64,ppc64*] video/fb: Change FB_MATROX, FB_RADEON, FB_ATY,
+    FB_SIS, FB_3DFX, FB_VOODOO1 back to modules (Closes: #748398)
+  * udeb: Add pata_rdc to pata-modules (Closes: #633128)
+  * [s390*] 3215: fix tty output containing tabs (Closes: #758264)
+  * radeon: Don't check for installed firmware if driver is built-in
+    (Closes: #763305)
+  * Bump ABI to 3
+  * vfs: fold swapping ->d_name.hash into switch_names()
+  * vfs: Don't exchange "short" filenames unconditionally. (Closes: #763700)
+  * [hppa,m68k,mips/r4k-ip22,sparc*] bluetooth: Enable BT as module
+    (Closes: #764524)
+
+  [ Aurelien Jarno ]
+  * [arm64] Change RTC_DRV_PL031 and RTC_DRV_XGENE from modules to built-ins
+    as the kernel isn't able to initialize the system clock from a hardware
+    clock whose driver is a module, and as there is no initramfs mechanism
+    to do that.
+  * [armhf] Change RTC_DRV_DA9052, RTC_DRV_IMXDI, RTC_DRV_MC13XXX,
+    RTC_DRV_MV, RTC_DRV_MXC, RTC_DRV_OMAP, RTC_DRV_PL030, RTC_DRV_PL031,
+    RTC_DRV_S5M, RTC_DRV_SUNXI, RTC_DRV_VT8500 from modules to built-ins for
+    the same reason as above.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 10 Oct 2014 09:15:17 +0100
+
+linux (3.16.3-2) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * [s390*] syscall: Fix unimplented-syscall entries added before
+    memfd_create() (fixes FTBFS) (Closes: #762221)
+  * [armel/kirkwood] Change configuration to reduce kernel image size
+    (fixes FTBFS) (Closes: #762219)
+    - block: Change IOSCHED_DEADLINE to module
+    - gpu: Disable VGA_ARB
+
+  [ Aurelien Jarno ]
+  * [mips*/octeon] Enable OCTEON_USB, USB_EHCI_HCD, USB_OHCI_HCD,
+    and USB_OCTEON_EHCI, USB_OCTEON_OHCI (Closes: #762066).
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 20 Sep 2014 11:43:05 +0200
+
+linux (3.16.3-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.16.3
+    - reiserfs: fix corruption introduced by balance_leaf refactor
+      (regression in 3.16) (Closes: #761457)
+    - reiserfs: Fix use after free in journal teardown
+    - media: v4l: vb2: Fix stream start and buffer completion race
+    - [x86] iommu/vt-d: Exclude devices using RMRRs from IOMMU API domains
+    - [powerpc*] powerpc/powernv: Fix IOMMU group lost (regression in 3.15)
+    - [x86] iommu/vt-d: Defer domain removal if device is assigned to a driver
+    - [x86] iommu/amd: Fix cleanup_domain for mass device removal
+    - [s390*] locking: Reenable optimistic spinning
+    - firmware: Do not use WARN_ON(!spin_is_locked())
+    - CAPABILITIES: remove undefined caps from all processes
+    - fanotify: fix double free of pending permission events
+    - ocfs2: do not write error flag to user structure we cannot copy from/to
+    - [powerpc*] mm: fix potential infinite loop in dissolve_free_huge_pages()
+    - drivers/mfd/rtsx_usb.c: export device table (Closes: #761428)
+    - [powerpc*] mm: Use read barrier when creating real_pte
+    - [powerpc*] thp: Add write barrier after updating the valid bit
+    - [powerpc*] thp: Invalidate old 64K based hash page mapping before insert
+      of 4k pte
+    - [powerpc*] thp: Handle combo pages in invalidate
+    - [powerpc*] thp: Invalidate with vpn in loop
+    - [powerpc*] thp: Use ACCESS_ONCE when loading pmdp
+    - SCSI: save command pool address of Scsi_Host (regression in 3.15)
+    - fix regression in SCSI_IOCTL_SEND_COMMAND (regression in 3.16)
+    - [mips*] GIC: Prevent array overrun
+    - [mips*] ptrace: Test correct task's flags in task_user_regset_view()
+    - [mips*] ptrace: Change GP regset to use correct core dump register layout
+    - [mips*] ptrace: Avoid smp_processor_id() when retrieving FPU IR
+    - [mips*] syscall: Fix AUDIT value for O32 processes on MIPS64
+    - [mips*] scall64-o32: Fix indirect syscall detection
+    - [mips,powerpc] bfa: Fix undefined bit shift on big-endian architectures
+      with 32-bit DMA address
+    - ACPI / hotplug: Check scan handlers in acpi_scan_hot_remove()
+      (regression in 3.14)
+    - ACPI: Run fixed event device notifications in process context
+      (regression in 3.15)
+    - ACPI / scan: Allow ACPI drivers to bind to PNP device objects
+      (regression in 3.16)
+    - ACPI / EC: Add support to disallow QR_EC to be issued when SCI_EVT isn't
+      set (regression in 3.14.13, 3.16)
+    - ACPI / EC: Add support to disallow QR_EC to be issued before completing
+      previous QR_EC (regression in 3.14.13, 3.16)
+    - ACPI / scan: not cache _SUN value in struct acpi_device_pnp
+      (regression in 3.14)
+    - ACPI / video: Add a disable_native_backlight quirk
+    - ACPI / video: Disable native_backlight on HP ENVY 15 Notebook PC
+    - ring-buffer: Always reset iterator to reader page
+    - ring-buffer: Up rb_iter_peek() loop count to 3
+    - vfs: get rid of propagate_umount() mistakenly treating slaves as busy.
+      (regression in 3.15)
+    - Bluetooth: Fix tracking local SSP authentication requirement
+    - Bluetooth: Avoid use of session socket after the session gets freed
+    - vfs: __generic_file_write_iter(): fix handling of sync error after DIO
+      (regression in 3.16)
+    - rbd: rework rbd_request_fn() (regression in 3.15)
+    - vfs: fix copy_tree() regression (regression in 3.14)
+    - md/raid1,raid10: always abort recover on write error.
+    - md/raid5: avoid livelock caused by non-aligned writes.
+      (regression in 3.16)
+    - md/raid6: avoid data corruption during recovery of double-degraded RAID6
+    - md/raid10: fix memory leak when reshaping a RAID10.
+    - xfs: ensure verifiers are attached to recovered buffers
+    - xfs: quotacheck leaves dquot buffers without verifiers
+    - xfs: don't dirty buffers beyond EOF
+    - xfs: don't zero partial page cache pages during O_DIRECT writes
+    - xfs: don't zero partial page cache pages during O_DIRECT reads
+    - libceph: set last_piece in ceph_msg_data_pages_cursor_init() correctly
+    - libceph: gracefully handle large reply messages from the mon
+    - libceph: do not hard code max auth ticket len (CVE-2014-6416,
+      CVE-2014-6417, CVE-2014-6418)
+    - CIFS: Fix async reading on reconnects
+    - CIFS: Possible null ptr deref in SMB2_tcon
+    - CIFS: Fix wrong directory attributes after rename
+    - mtd/ftl: fix the double free of the buffers allocated in build_maps()
+    - mtd: nand: omap: Fix 1-bit Hamming code scheme, omap_calculate_ecc()
+    - dm table: propagate QUEUE_FLAG_NO_SG_MERGE (regression in 3.16)
+    - KEYS: Fix use-after-free in assoc_array_gc()
+    - KEYS: Fix termination condition in assoc array garbage collection
+      (CVE-2014-3631)
+
+  [ Ben Hutchings ]
+  * sfc: Adding PCI ID for Solarflare 7000 series 40G network adapter.
+  * sfc: Add 40G link capability decoding
+  * Bump ABI to 2 (Closes: #761874)
+  * ata: Enable SATA_ZPODD
+  * tracing: Enable TRACER_SNAPSHOT
+  * Add memfd_create() and shared memory sealing (Closes: #760702):
+    - mm: allow drivers to prevent new writable mappings
+    - shm: add sealing API
+    - shm: add memfd_create() syscall
+    - shm: wait for pins to be released when sealing
+    - mm: Add memfd_create() system call
+    - [arm*,m68k,mips*,powerpc*,s390*,sparc*] Wire up memfd_create()
+  * udeb: Add ccm, ctr to crypto-modules (Closes: #761902)
+  * [armhf] udeb: Add ehci-platform, ohci-platform and phy-sun4i-usb to
+    usb-modules (Closes: #761591)
+
+  [ Ian Campbell ]
+  * [armhf] Enable support for Exynos5 systems. (Closes: #759291)
+  * [arm64] Enable crypto accelerator modules
+  * [arm64] Add cdrom-core-modules udeb
+
+  [ Aurelien Jarno ]
+  * [powerpc/powerpc64,ppc64el] Backport more KVM patches from 3.17. Enable
+    KVM_BOOK3S_64, KVM_BOOK3S_64_HV, KVM_BOOK3S_64_PR and KVM_XICS.  (Closes:
+    #761656).
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 18 Sep 2014 03:32:47 +0100
+
+linux (3.16.2-3) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * [armhf] udeb: Remove efi-modules, as EFI is not yet supported on ARM!
+  * [arm64] ata: Enable PHY_XYGENE, AHCI_XGENE as modules
+    - udeb: Add ahci_xgene to sata-modules (fixes FTBFS)
+  * [arm64] rtc: Enable RTC_DRV_XGENE as module
+  * mfd,mmc,memstick: Enable MFD_RTSX_USB, MMC_REALTEK_USB,
+    MEMSTICK_REALTEK_USB as modules (Closes: #761099)
+  * [mips64,mips64el] Properly add the 5kc-malta flavour (should fix FTBFS)
+  * batman-adv: Enable BATMAN_ADV_MCAST
+  * can: Enable CAN_GS_USB as module
+  * bluetooth: Enable BT_6LOWPAN
+  * ubi: Enable MTD_UBI_BLOCK
+  * md: Enable DM_ERA as module
+  * qlcnic: Enable QLCNIC_VXLAN
+  * net/wireless: Enable RSI_91X, RSI_USB as modules
+    - udeb: Add rsi_usb to nic-wireless-modules
+  * i2c: Enable I2C_ROBOTFUZZ_OSIF as module
+  * mfd,gpio,i2c,iio: Enable MFD_VIPERBOARD, GPIO_VIPERBOARD, I2C_VIPERBOARD,
+    VIPERBOARD_ADC as modules
+  * media/usb/gspca: Enable USB_GSPCA_DTCS033 as module
+  * media/pci/cx23885: Enable MEDIA_ALTERA_CI as module
+  * sound/usb: Enable SND_USB_HIFACE, SND_BCD2000 as modules
+  * usb/misc: Enable USB_EHSET_TEST_FIXTURE as module
+  * usb/gadget: Enable USB_NET2280 as module
+  * leds: Enable LEDS_TRIGGER_CPU as built-in and LEDS_TRIGGER_ONESHOT,
+    LEDS_TRIGGER_GPIO, LEDS_TRIGGER_TRANSIENT, LEDS_TRIGGER_CAMERA as modules
+  * uio: Enable UIO_MF624 as module
+  * iio: Enable HID_SENSOR_PROX, HID_SENSOR_DEVICE_ROTATION, HID_SENSOR_PRESS
+    as modules
+  * ecryptfs: Enable ECRYPT_FS_MESSAGING
+  * ceph: Enable CEPH_FSCACHE
+  * crypto: Enable CRYPTO_LZ4, CRYPTO_LZ4HC as modules
+  * [x86] mfd,gpio,i2c,watchdog: Enable KEMPLD_MFD, GPIO_KEMPLD, I2C_KEMPLD,
+    KEMPLD_WDT as modules
+  * [x86] staging: Enable R8723AU as module
+  * [x86] staging: Enable WIMAX_GDM72XX as modules
+    - gdmwm: Enable WIMAX_GDM72XX_USB, WIMAX_GDM72XX_USB_PM
+  * [x86] staging/media: Enable DVB_AS102, USB_MSI3101, MEDIA_TUNER_MSI001,
+    SOLO6X10 as modules
+  * [x86] dvb-usb-rtl28xxu: Enable DVB_RTL2832_SDR
+  * [x86] platform: Enable ALIENWARE_WMI, DELL_SMO8800, IBM_RTL,
+    SAMSUNG_Q10, INTEL_RST, INTEL_SMARTCONNECT (Closes: #749273), PVPANIC
+    as modules
+  * [x86] sony-laptop: Enable SONYPI_COMPAT
+  * [x86,ia64] firmware: Enable DMI_SYSFS
+  * [x86] Disable USB_SN9C102; this driver is deprecated in favour of the
+    gspca drivers
+  * [i386] usb/gadget: Enable USB_AMD5536UDC as module
+  * [i386] comedi: Enable COMEDI_AMPLC_DIO200_ISA, COMEDI_AMPLC_PC236_ISA,
+    COMEDI_AMPLC_PC263_ISA, COMEDI_DAS08_ISA, COMEDI_NI_LABPC_ISA as modules
+  * [i386] speakup: Enable SPEAKUP_SYNTH_DECPC as module
+  * [!x86] staging: Enable R8712U, R8188EU as modules (Closes: #742055, #760859)
+  * i2o: Disable I2O_EXT_ADAPTEC on 64-bit, as it assumes 32-bit virtual
+    addresses
+  * SCSI: aic94xx: Remove broken fallback for missing 'Ctrl-A' user settings
+  * udeb: Add ath6kl_sdio, libertas_cs, libertas_sdio, mwifiex_sdio,
+    r8192u_usb, r8723au, rtl8188eu, rtl818x_pci, rtl8723be, rtl8821ae,
+    spectrum_cs to nic-wireless-modules
+  * builddeb: put the dbg files into the correct directory
+  * [ppc64el] deb-pkg: Add support for powerpc little endian
+  * [armhf] deb-pkg: Add automatic support for armhf architecture
+  * debian/rules.real: Never make kernel-wedge errors non-fatal, as in
+    practice this meant we didn't see them until they appeared in unstable
+  * udeb: Fix typo in dependencies of speakup-modules (fixes FTBFS on
+    mips64el due to interaction with another bug in kernel-wedge)
+  * libceph: Apply critical fixes:
+    - set last_piece in ceph_msg_data_pages_cursor_init() correctly
+    - gracefully handle large reply messages from the mon
+    - add process_one_ticket() helper
+    - do not hard code max auth ticket len
+
+  [ Ian Campbell ]
+  * [armel/orion5x] udeb: Include mvmdio in nic-modules udeb.
+  * [arm64] Backport X-GENE Ethernet driver from v3.17-rcs
+  * [arm64] Including phy-xgene in sata-modules udeb since it is needed by
+    ahci_xgene.
+
+  [ Aurelien Jarno ]
+  * [mips64el] Drop loongson-2e and loongson-2f flavour as the minimum
+    supported ISA will be at least MIPS64.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 13 Sep 2014 03:49:53 +0100
+
+linux-tools (3.16-2) unstable; urgency=medium
+
+  * linux-kbuild: Change the type headers used for devicetable-offsets.c
+    to avoid depending on UAPI headers or <linux/types.h>.  This really
+    closes: #754213.  It also fixes modpost handling of input device IDs
+    when host and target have differing word size.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 09 Sep 2014 13:21:05 +0100
+
+linux-tools (3.16-1) unstable; urgency=medium
+
+  * New upstream release
+
+  [ Mauricio Faria de Oliveira ]
+  * [ppc64el] Build linux-tools binary package (Closes: #754213)
+
+  [ Ben Hutchings ]
+  * linux-kbuild: Build and install recordmcount and recordmcount.pl,
+    needed for kernels with DYNAMIC_FTRACE enabled
+  * linux-kbuild: Fix recordmcount dependency for OOT modules
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 08 Sep 2014 18:45:06 +0100
+
+linux (3.16.2-2) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * [armel,mips*] udeb: Remove lzo-modules, as LZO_COMPRESS is now built-in
+    (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 08 Sep 2014 18:39:25 +0100
+
+linux (3.16.2-1) unstable; urgency=medium
+
+  * New upstream stable update (closes: #748615):
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.16.1
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.16.2
+    - isofs: Fix unbounded recursion when processing relocated directories
+      (CVE-2014-5471, CVE-2014-5472)
+    - kvm: iommu: fix the third parameter of kvm_iommu_put_pages
+      (CVE-2014-3601)
+
+  [ Ben Hutchings ]
+  * HID: Enable HID_RMI as module (Closes: #754519)
+  * Set ABI to 1
+  * [armhf,arm64] udeb: Add efi-modules
+  * ftrace: Enable more tracers (Closes: #563847, #758469):
+    - Enable FUNCTION_TRACER and DYNAMIC_FTRACE
+    - Enable FUNCTION_GRAPH_TRACER, FTRACE_SYSCALLS and STACK_TRACER 
+      (except on armel/kirkwood)
+  * [powerpc] drm: Disable DRM_RADEON_UMS, as radeon X driver now requires KMS
+  * aio: fix reqs_available handling (regression in 3.14.10)
+  * mm: Enable FRONTSWAP, ZSWAP (except armel/{ixp4xx,orion5x})
+    (Closes: #725703)
+  * [x86] mgag200: Enable auto-loading, but require mode-setting to be
+    explicitly enabled (as xserver-xorg-video-modesetting does)
+  * [armel] Remove obsolete mv78xx0 flavour
+  * virtio-scsi: Implement change_queue_depth for virtscsi targets
+    (Closes: #760324)
+  * sound/firewire: Enable SND_DICE, SND_FIREWORKS, SND_BEBOB as modules
+    (Closes: #756842)
+  * hid-sony: Enable SONY_FF (Closes: #760684)
+  * mtd: Enable MTD_SPI_NOR as module, since M25P80 now depends on it
+  * [m68k] Enable CGROUPS, required by systemd
+  * [armhf] Re-enable SPI_IMX as module
+  * [i386] comedi: Enable COMEDI_DAC02 as module, replacing COMEDI_POC
+  * sound: Disable SND_CS5535AUDIO on all but i386 and mips*/loongson-2f
+  * [mips*/loongson-2f] video: Re-add and enable sm7xxfb driver, removed
+    upstream in 3.15
+  * mnt: Fix flag handling on remount (CVE-2014-5206, CVE-2014-5207)
+    - mnt: Only change user settable mount flags in remount
+    - mnt: Move the test for MNT_LOCK_READONLY from change_mount_flags into
+      do_remount
+    - mnt: Correct permission checks in do_remount
+    - mnt: Change the default remount atime from relatime to the existing value
+    - mnt: Add tests for unprivileged remount cases that have found to be
+      faulty
+  * [armel/kirkwood] mm: Enable HIGHMEM (Closes: #760786)
+  * aufs: Update to aufs3.16-20140908:
+    - bugfix, missing mnt_want_write in moo
+    - new ioctl BRINFO
+    - bugfix, restore the lost unlock in an error path
+    - allow deleting a branch who has an opened dir
+    - bugfix, stop passing an error code to dput()
+    - possible bugfix, ptr in an array
+    - implement fhsm (not enabled)
+    - si_files has all opened files
+    - bugfix, use id instead of index to identify a branch
+    - new move-down flag AUFS_MVDOWN_FHSM_LOWER
+    - branch attr 'fhsm' is independent from rw/ro attrib
+    - support for a branch ro+fhsm
+    - fhsm notify after fixing inode attrib
+    - bugfix, hfile test in br_del_file()
+    - bugfix, pinning in mvdown
+    - bugfix, instantiate-revalidate race
+    - possible bugfix, temporary d_inode
+    - fhsm and br_del, allow the root dir only
+    - bugfix, get a removed dentry from an inode
+  * MAINTAINERS: Change aufs entry to say it's not upstream
+
+  [ Vagrant Cascadian ]
+  * [armmp] Enable IMX_IPUV3_CORE (closes: #756810).
+
+  [ Aurelien Jarno ]
+  * [mips*] Fix FP emulation for unaligned accesses.
+  * Update Spanish debconf template translations (Matias A. Bellone)
+    (Closes: #758591).
+  * [mips*/loongson3] Backport Loongson 3B support from 3.17.
+  * [powerpc,ppc64el] Backport KVM little endian support from 3.17.
+
+  [ maximilian attems ]
+  * Redisable UAS due to trouble with Seagate expansion drives
+    (closes: #755995, #759662), (reopen: #749014).
+
+  [ Ian Campbell ]
+  * [armhf] Remove incomplete list of hardware from image description. See
+    https://wiki.debian.org/DebianKernel/ARMMP for details.
+  * [armel/kirkwood] Enable CONFIG_MTD_SPI_NOR for flash access.
+
+  * [ppc64el] debian/patches/debian/ppc64el-disable-zImage.patch: remove patch.
+    The 'powerpc/boot: 64bit little endian wrapper' patch-set is in linux 3.16,
+    thus the default make/image-y target is OK now.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 08 Sep 2014 03:17:11 +0100
+
+linux (3.16-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.16
+
+  [ Aurelien Jarno ]
+  * [x86] vfio: Enable VFIO_PCI_VGA.
+  * udeb: rename crc32c.ko into crc32c_generic.ko in crc-modules.
+  * [mips*] Fix FP emulation.
+  * [mips*/loongson3] Enable TRANSPARENT_HUGEPAGE.
+
+  [ Bastian Blank ]
+  * [x86] Enable Xen PVH support.
+  * Enable more Nftables modules.
+  * [x86] Enable EARLY_PRINTK_EFI.
+  * Enable stack protector on all supported architectures. (closes: #756898)
+  * [powerpc64, s390x] Enable PCI hotplug.
+  * Enable RTL8723BE.
+  * Enable OPROFILE.
+  * [ppc64] Enable 64KiB pages.
+
+  [ Ben Hutchings ]
+  * udeb: Add new sound drivers to sound-modules (thanks to Samuel Thibault)
+    (Closes: #756998)
+  * [armhf] touchscreen: Enable TOUCHSCREEN_SUN4I as module (Closes: #757086)
+  * [!alpha,m68k,x86] Disable USELIB, only needed by libc5
+  * [arm*,ia64,ppc64el,s390*,sh4] Disable SYSFS_SYSCALL, only needed for
+    SVR4 compatibility
+  * [armel] Disable BINFMT_AOUT
+  * [armel] Re-enable ixp4xx flavour
+  * [armel] Change configuration to reduce kernel image size
+    - [/kirkwood] Change IPV6 to module
+    - [/ixp4xx,orion5x] Change IOSCHED_DEADLINE to module
+    - [/ixp4xx,orion5x] Disable SECURITY (i.e. Linux Security Modules,
+      including SELinux)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 09 Aug 2014 21:58:12 +0100
+
+linux-tools (3.16~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * genorig: Include new directory for usbip UAPI header
+  * debian/control: Update Build-Depends for usbip switching from
+    libsysfs to libudev
+  * perf: Build with V=1 as V=2 no longer works
+  * perf: Change build command to avoid a rebuild during 'make install'
+  * linux-tools: Install traceevent plugins in
+    /usr/lib/traceevent_<version>/plugins (Closes: #756429)
+  * linux-kbuild: Install scripts/Makefile.extrawarn
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 29 Jul 2014 21:11:10 +0100
+
+linux (3.16~rc6-1~exp1) experimental; urgency=medium
+
+  * New upstream rc
+
+  [ Aurelien Jarno ]
+  * [mipsel/loongson3] Enable SND_HDA_INTEL.
+  * [mips/4kc-malta, mips/5kc-malta] Cleanup configuration file.
+  * [mips/sb1-bcm91250a] Cleanup configuration file.
+  * [mips/r4k-ip22] Cleanup configuration file.
+  * [mips/r5k-ip32] Cleanup configuration file.
+  * [mips64,mips64el] Add a 5kc-malta flavour.
+
+  [ Ben Hutchings ]
+  * [x86] wireless: Enable R8192EE as module (Closes: #755310)
+  * net: Re-enable CGROUP_NET_PRIO as builtin
+
+ -- maximilian attems <maks@debian.org>  Mon, 21 Jul 2014 21:51:45 +0200
+
+linux (3.16~rc5-1~exp1) experimental; urgency=medium
+
+  [ maximilian attems ]
+  * New upstream rc
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20140714:
+    - tiny, no msg in spinlock regeion
+    - minor bugfix, correct error value in link(2)
+    - O_TMPFILE support
+    - bugfix, handling an error in opening a FIFO
+    - propagate aufs file references to new vmas created by remap_file_pages()
+    - begin supporting fallocate(2)
+    - linux-3.16, convert iovec into iov_iter
+    - allow an unprivileged mount under user_ns (enabled by module parameter)
+    - simply handing attribute string
+    - add mount option for copy-up on open
+    - add mount option for move-up on open
+    - add dirperm1 mount option
+    - mvdown, return a subset of statfs(2) optionally
+    - mvdown, tell about the branch is at the bottom
+
+ -- maximilian attems <maks@debian.org>  Tue, 15 Jul 2014 22:57:31 +0200
+
+linux (3.15.5-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.15.4
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.15.5
+
+ -- maximilian attems <maks@debian.org>  Thu, 10 Jul 2014 16:02:29 +0200
+
+linux (3.15.3-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.15.2
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.15.3
+
+  [ Yunqiang Su ]
+  * [mips,mipsel] Move common MIPS kernel config files to kernelarch-mips.
+  * [mips,mipsel] Clean mipsel installer by using symlinks to the mips
+    versions.
+  * [mips,mipsel] Add mips64 and mips64el support (Closes: #749688).
+
+ -- maximilian attems <maks@debian.org>  Wed, 02 Jul 2014 20:30:41 +0200
+
+linux (3.15.1-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.15
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.15.1
+
+  [ maximilian attems ]
+  * Update policy version to 3.9.5 without changes
+
+  [ Ian Campbell ]
+  * [armhf] Enable HDMI on imx6qdl-wandboard, SolidRun HummingBoard and
+    Cubox -i. (Closes: #750406)
+
+  [ Ben Hutchings ]
+  * [powerpc] Build-depend on gcc-4.8 (>= 4.8.2-1) to ensure that
+    JUMP_LABEL works
+
+ -- maximilian attems <maks@debian.org>  Fri, 20 Jun 2014 23:13:13 +0200
+
+linux (3.15~rc8-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ian Campbell ]
+  * [armhf] Enable Broadcom IEEE802.11n embedded FullMAC WLAN driver
+    (Closes: #734430)
+  * [armhf] Backport and enable sunxi MMC driver (Closes: #749484)
+
+ -- maximilian attems <maks@debian.org>  Tue, 03 Jun 2014 11:43:26 +0200
+
+linux (3.15~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ maximilian attems ]
+  * Enable USB_UAS in topconfig (closes: #749014)
+
+  [ Ian Campbell ]
+  * [armhf] Enable SERIAL_OF_PLATFORM.
+  * [armhf] Enable DRM drivers DRM_IMX_* for IMX platform (Closes: #748406)
+  * [armhf] Enable SND_SOC_IMX_SPDIF (Closes: #748890)
+
+ -- maximilian attems <maks@debian.org>  Tue, 27 May 2014 10:55:32 +0200
+
+linux (3.15~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20140421
+  * [rt] Disable until it is updated for 3.15 or later
+
+  [ Aurelien Jarno ]
+  * [mipsel] Add a loongson-3 flavour to support Loongson 3A/3B machines.
+  * [mips/mipsel] Remove the sb1a-bcm91480b flavour.
+
+  [ Ian Campbell ]
+  * [armel/orion5x] Disable BPF_JIT, MEMCG, USER_NS to reduce kernel
+    size.
+  * [armel/kirkwood] Enable PCI_MVEBU for PCI support when booted via Device
+    Tree.
+
+ -- maximilian attems <maks@debian.org>  Fri, 16 May 2014 14:33:57 +0200
+
+linux (3.14.15-2) unstable; urgency=medium
+
+  [ Aurelien Jarno ]
+  * [mips*/4kc-malta] Remove ABI reference as previous kernels were not
+    really usable, and the fix changes the ABI.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 09 Aug 2014 01:09:38 +0100
+
+linux (3.14.15-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.14
+    - Bluetooth: Ignore H5 non-link packets in non-active state
+    - fuse: timeout comparison fix
+    - tracing: instance_rmdir() leaks ftrace_event_file->filter
+      (regression in 3.11)
+    - xen/balloon: set ballooned out pages as invalid in p2m
+      (regression in 3.12)
+    - quota: missing lock in dqcache_shrink_scan() (regression in 3.12)
+    - shmem: fix faulting into a hole, not taking i_mutex (CVE-2014-4171)
+    - shmem: fix splicing from a hole while it's punched (CVE-2014-4171)
+    - e1000e: Fix SHRA register access for 82579 (regression in 3.12)
+    - ip_tunnel: fix ip_tunnel_lookup
+    - net: sctp: check proc_dointvec result in proc_sctp_do_auth
+    - 8021q: fix a potential memory leak
+    - net: fix UDP tunnel GSO of frag_list GRO packets
+    - ipv4: fix dst race in sk_dst_get()
+    - ipv4: irq safe sk_dst_[re]set() and ipv4_sk_update_pmtu() fix
+    - bnx2x: fix possible panic under memory stress
+    - tcp: Fix divide by zero when pushing during tcp-repair
+    - ipv4: icmp: Fix pMTU handling for rare case
+    - net: Fix NETDEV_CHANGE notifier usage causing spurious arp flush
+      (regression in 3.11)
+    - igmp: fix the problem when mc leave group
+    - appletalk: Fix socket referencing in skb
+    - netlink: Fix handling of error from netlink_dump().
+    - tipc: clear 'next'-pointer of message fragments before reassembly
+      (regression in 3.13)
+    - net: sctp: fix information leaks in ulpevent layer
+    - bonding: fix ad_select module param check (regression in 3.14)
+    - net-gre-gro: Fix a bug that breaks the forwarding path
+      (regression in 3.14)
+    - perf/x86/intel: ignore CondChgd bit to avoid false NMI handling
+    - mwifiex: fix Tx timeout issue
+    - [x86] tsc: Fix cpufreq lockup (regression in 3.14)
+    - dm thin metadata: do not allow the data block size to change
+    - dm cache metadata: do not allow the data block size to change
+    - locking/mutex: Disable optimistic spinning on some architectures
+    - sched: Fix possible divide by zero in avg_atom() calculation
+    - aio: protect reqs_available updates from changes in interrupt handlers
+      (regression in 3.14.10)
+    - Don't trigger congestion wait on dirty-but-not-writeout pages
+      (regression in 3.11)
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.15
+    - nfs: only show Posix ACLs in listxattr if actually present
+      (regression in 3.14)
+    - block: don't assume last put of shared tags is for the host
+    - libata: support the ata host which implements a queue depth less than 32
+      (regression in 3.14.4)
+    - libata: introduce ata_host->n_tags to avoid oops on SAS controllers
+    - blkcg: don't call into policy draining if root_blkg is already gone
+    - coredump: fix the setting of PF_DUMPCORE
+    - [hppa] Remove SA_RESTORER define
+    - hwmon: (smsc47m192) Fix temperature limit and vrm write operations
+    - fs: umount on symlink leaks mnt count (CVE-2014-5045)
+    - [x86] x86_32, entry: Store badsys error code in %eax
+      (regression in 3.14.10)
+    - drm/radeon: fix irq ring buffer overflow handling (regression in 3.14)
+    - mm: hugetlb: fix copy_hugetlb_page_range() (regression in 3.14.12)
+    - [x86] efi: Include a .bss section within the PE/COFF headers
+    - nl80211: move set_qos_map command into split state (regression in 3.14)
+    - platform_get_irq: Revert to platform_get_resource if of_irq_get fails
+      (regression in 3.14.6)
+
+  [ Aurelien Jarno ]
+  * Update German debconf template translations (Holger Wansing) (Closes:
+    #756049).
+  * Update French debconf template translations (David Prévot) (Closes:
+    #756134).
+  * Rewrite postinst to not require File::stat perl module (Closes: #756207).
+  * [mips*] Avoid smp_processor_id() in preemptible code.
+  * [mips*/octeon] Fix /proc/cpuinfo issues.
+  * [mips,mipsel/4kc-malta] Fix bug which can cause incorrect system call
+    restarts (fix hang on boot).
+  * [mips*] Fix hugepage support on machines with R4K like TLB.
+  * [mips*] Prevent user from setting FCSR cause bits and cause possible
+    kernel oops.
+  * Update Japanese debconf template translations (Victory).
+
+  [ Ben Hutchings ]
+  * [amd64] Reject x32 executables if x32 ABI not supported
+  * [amd64] Make x32 syscall support conditional on a kernel parameter
+  * [amd64] Enable X86_X32 (Closes: #708070) and X86_X32_DISABLED.
+    Use the kernel parameter "syscall.x32=y" to enable support for x32.
+  * [s390,s390x] 3215: fix hanging console issue (Closes: #747922)
+  * [armhf] Enable BRCMFMAC, BRCMFMAC_SDIO as modules (Closes: #734430)
+  * net: sctp: inherit auth_capable on INIT collisions (CVE-2014-5077)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 07 Aug 2014 16:47:21 +0100
+
+linux (3.14.13-2) unstable; urgency=medium
+
+  [ Aurelien Jarno ]
+  * [mips64,mips64el] Really enable mips64 and mips64el architectures.
+  * [mips64,mips64el] Build udebs for 5kc-malta flavour. 
+  * [mipsel,mips64el/loongson-3] Disable not built modules in nic-modules,
+    scsi-common-modules, scsi-extra-modules, scsi-modules (fixes FTBFS).
+  * Add scsi_transport_sas and scsi_transport_spi to scsi-core-modules udeb
+    as optional so that these modules do not end up in two different udebs
+    as dependencies. Remove them from the i386, ia64, powerpc and sparc
+    definition.
+  * [mipsel,mips64el/loongson-2e,2f] Enable CONFIG_RTC_DRV_CMOS as built-in.
+  * [mips*] Add few new udebs and use standard udebs configuration when
+    possible.
+  * [s390,s390x] ptrace: fix PSW mask check (CVE-2014-3534).
+  * [mipsel,mips64el/loongson-3] Enable PREEMPT instead of PREEMPT_VOLUNTARY
+    as it workarounds SMP issues.
+
+ -- Aurelien Jarno <aurel32@debian.org>  Thu, 24 Jul 2014 21:05:08 +0200
+
+linux (3.14.13-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.13
+    - iio: ti_am335x_adc: Fix: Use same step id at FIFOs both ends
+      (regression in 3.11)
+    - [hppa] Do not hardcode maximum userspace stack size (regression in 3.14)
+    - workqueue: fix dev_set_uevent_suppress() imbalance (regression in 3.10)
+    - workqueue: zero cpumask of wq_numa_possible_cpumask on init
+      (regression in 3.10)
+    - i8k: Fix non-SMP operation (regression in 3.14)
+    - Revert "ACPI / AC: Remove AC's proc directory." (regression in 3.13)
+    - ACPI / resources: only reject zero length resources based at address zero
+      (regression in 3.14)
+    - ACPI / EC: Avoid race condition related to advance_transaction()
+    - ACPI / EC: Fix race condition in ec_transaction_completed()
+    - [x86] crypto: sha512_ssse3 - fix byte count to bit count conversion
+    - [arm64] implement TASK_SIZE_OF
+    - phy: core: Fix error path in phy_create()
+    - dm io: fix a race condition in the wake up code for sync_io
+    - [x86] intel_pstate: Fix setting VID (regression in 3.14.6)
+    - PCI: Fix unaligned access in AF transaction pending test
+      (regression in 3.14)
+    - ext4: fix unjournalled bg descriptor while initializing inode bitmap
+    - ext4: fix a potential deadlock in __ext4_es_shrink()
+    - drm/radeon: stop poisoning the GART TLB
+    - [x86] drm/i915: Don't clobber the GTT when it's within stolen memory
+
+  [ Ian Campbell ]
+  * [armel] Remove drivers/net/phy configs which are redundant with toplevel.
+  * [armhf] Add MMC and NIC modules for BeagleBone Black to udebs.
+    (Closes: #754491)
+  * [arm64] Add xfs-modules udeb and add xen-netfront to nic-modules udeb.
+  * aufs: Fix build on arm64.
+
+  [ Aurelien Jarno ]
+  * [mips,mipsel] Add a debconf note to warn users that they have to
+    configure the system bootloader to load initramfs.
+  * Update Polish debconf template translations (Łukasz Dulny).
+  * Update Czech debconf template translations (Michal Simunek) (Closes:
+    #755060).
+  * Update Russian debconf template translations (Yuri Kozlov) (Closes:
+    #755085).
+  * Update Portuguese debconf template translations (Américo Monteiro)
+    (Closes: #755100).
+  * Update Swedish debconf template translations (Martin Bagge) (Closes:
+    #755145).
+  * Update Slovak debconf template translation (Slavko) (Closes: #755152).
+  * Update Turkish debconf template translation (Mert Dirik) (Closes:
+    #755223).
+  * Update Danish debconf template translation (Joe Dalton) (Closes:
+    #755400).
+  * [mips,mipsel] Cleanup configuration files.
+  * [mips,mipsel] Move common MIPS kernel config files to kernelarch-mips.
+  * [mips,mipsel] Clean mipsel installer by using symlinks to the mips
+    versions.
+  * [mipsel] Backport Loongson 3A/3B support from 3.15 and add the
+    corresponding flavour.
+  * [mips,mipsel] Remove the sb1a-bcm91480b flavour.
+  * [mips,mipsel] Add mips64 and mips64el support (Closes: #749688).
+  * [mips/octeon] Backport from upstream PCIe2 support and interface
+    mode detection for Octeon.
+  * [mips/sb1-91250a] Backport from upstream additional build flags
+    to fix excessive kernel warnings.
+  * [mips/malta] Backport from upstream power management support for
+    Malta.
+  * [mipsel/loongson3] Add support for Loongson 3 LS3A RS780E 1-way
+    boards.
+
+  [ Ben Hutchings ]
+  * net/l2tp: don't fall back on UDP [get|set]sockopt (CVE-2014-4943)
+  * Bump ABI to 2 (Closes: #754902)
+  * [powerpc/powerpc64] Re-enable JUMP_LABEL
+  * [powerpc/powerpc64,ppc64] Enable PPC_TRANSACTIONAL_MEM
+  * Enable DYNAMIC_DEBUG (except for armel/orion5x) (Closes: #694884)
+  * [rt] Update to 3.14.12-rt9 (no functional changes)
+  * udeb: Add sdhci-acpi to mmc-modules (Closes: #747284)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 21 Jul 2014 14:02:14 +0100
+
+linux (3.14.12-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.11
+    - iscsi-target: Avoid rejecting incorrect ITT for Data-Out
+    - iscsi-target: Explicily clear login response PDU in exception path
+      (regression in 3.10)
+    - iscsi-target: fix iscsit_del_np deadlock on unload (regression in 3.13)
+    - Input: synaptics - fix resolution for manually provided min/max
+      (regression in 3.14)
+    - [mips] MSC: Prevent out-of-bounds writes to MIPS SC ioremap'd region
+    - UBIFS: fix an mmap and fsync race condition
+    - UBIFS: Remove incorrect assertion in shrink_tnc()
+    - IB/ipath: Translate legacy diagpkt into newer extended diagpkt
+    - IB/srp: Fix a sporadic crash triggered by cable pulling
+    - IB/umad: Fix error handling
+    - IB/umad: Fix use-after-free on close
+    - nfsd4: fix FREE_STATEID lockowner leak (regression in 3.14.6)
+    - nfsd: getattr for FATTR4_WORD0_FILES_AVAIL needs the statfs buffer
+    - NFS: Don't declare inode uptodate unless all attributes were checked
+    - nfs: Fix cache_validity check in nfs_write_pageuptodate()
+    - [powerpc] mm: Check paca psize is up to date for huge mappings
+    - [powerpc] perf: Ensure all EBB register state is cleared on fork()
+    - xfs: xfs_readsb needs to check for magic numbers (regression in 3.14)
+    - reiserfs: call truncate_setsize under tailpack mutex
+    - ipvs: Fix panic due to non-linear skb
+    - tracing: Fix syscall_*regfunc() vs copy_process() race
+    - ALSA: usb-audio: Fix races at disconnection and PCM closing
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.12
+    - [powerpc] ibmvscsi: Abort init sequence during error recovery
+    - [powerpc] ibmvscsi: Add memory barriers for send / receive
+    - virtio-scsi: avoid cancelling uninitialized work items
+    - scsi_error: fix invalid setting of host byte
+    - virtio-scsi: fix various bad behavior on aborted requests
+    - xhci: Use correct SLOT ID when handling a reset device command
+      (regression in 3.13)
+    - usb: chipidea: udc: delete td from req's td list at ep_dequeue
+    - mtd: eLBC NAND: fix subpage write support (regression in 3.10)
+    - mtd: nand: omap: fix BCHx ecc.correct to return detected bit-flips in
+      erased-page
+    - [x86] drm/i915: Avoid div-by-zero when pixel_multiplier is zero
+      (regression in 3.13)
+    - [x86] drm/i915: set backlight duty cycle after backlight enable for gen4
+      (regression in 3.14)
+    - Bluetooth: Fix SSP acceptor just-works confirmation without MITM
+    - Bluetooth: Fix check for connection encryption
+    - rbd: use reference counts for image requests
+    - rbd: handle parent_overlap on writes correctly
+    - mac80211: fix a memory leak on sta rate selection table
+      (regression in 3.10)
+    - hugetlb: fix copy_hugetlb_page_range() to handle migration/hwpoisoned
+      entry
+    - [arm64] mm: Make icache synchronisation logic huge page aware
+    - [arm64] Bug fix in stack alignment exception
+    - fs/cifs: fix regression in cifs_create_mf_symlink() (regression in 3.14)
+    - blkcg: fix use-after-free in __blkg_release_rcu() by making
+      blkcg_gq refcnt an atomic_t
+    - ext4: Fix buffer double free in ext4_alloc_branch()
+    - ext4: Fix hole punching for files with indirect blocks
+    - [x86] KVM: preserve the high 32-bits of the PAT register
+    - [x86] kvm: fix wrong address when writing Hyper-V tsc page
+    - nfsd: fix rare symlink decoding bug
+    - tracing: Remove ftrace_stop/start() from reading the trace file
+    - md: flush writes before starting a recovery.
+    - mlx4_core: Fix incorrect FLAGS1 bitmap test in mlx4_QUERY_FUNC_CAP
+      (regression in 3.14)
+    - netfilter: nf_nat: fix oops on netns removal
+    - brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to
+      BCMA_IOCTL (regression in 3.14)
+    - mmc: rtsx: add R1-no-CRC mmc command type handle (regression in 3.13)
+    - aio: block io_destroy() until all context requests are completed
+      (regression in 3.11)
+    - audit: remove superfluous new- prefix in AUDIT_LOGIN messages
+      (regression in 3.14)
+    - mm/numa: Remove BUG_ON() in __handle_mm_fault() (regression in 3.13)
+    - slab: fix oops when reading /proc/slab_allocators
+    - sym53c8xx_2: Set DID_REQUEUE return code when aborting squeue
+    - mm: fix crashes from mbind() merging vmas
+
+  [ Ben Hutchings ]
+  * [rt] Update to 3.14.10-rt7:
+    - rtmutex: Resolve conflicts with changes in 3.14.10
+    - sched: Do not clear PF_NO_SETAFFINITY flag in select_fallback_rq()
+    - workqueue: Prevent deadlock/stall on RT
+  * [rt] random: Restore interrupt randomness dropped in 3.14.10-rt6
+  * [s390,s390x] Ignore ABI change in lowcore structure (fixes FTBFS)
+  * [m68k] block: Change IOSCHED_CFQ to built-in and make it the default
+    I/O scheduler, consistent with other architectures
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 11 Jul 2014 17:56:20 +0100
+
+linux (3.14.10-1) unstable; urgency=high
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.10
+    - [s390] af_iucv: wrong mapping of sent and confirmed skbs
+    - Staging: rtl8188eu: overflow in update_sta_support_rate()
+    - USB: option: fix runtime PM handling
+    - hugetlb: restrict hugepage_migration_support() to x86_64
+    - kthread: fix return value of kthread_create() upon SIGKILL.
+    - mm/memory-failure.c-failure: send right signal code to correct thread
+    - mm/memory-failure.c: don't let collect_procs() skip over processes for
+      MF_ACTION_REQUIRED
+    - ptrace: fix fork event messages across pid namespaces
+    - idr: fix overflow bug during maximum ID calculation at maximum height
+    - [s390] time: cast tv_nsec to u64 prior to shift in update_vsyscall
+      (regression in 3.13)
+    - [s390] lowcore: reserve 96 bytes for IRB in lowcore
+    - ext4: fix data integrity sync in ordered mode
+    - ext4: fix zeroing of page during writeback
+    - ext4: fix wrong assert in ext4_mb_normalize_request()
+    - USB: usb_wwan: fix race between write and resume
+    - USB: usb_wwan: fix write and suspend race
+    - USB: usb_wwan: fix urb leak at shutdown
+    - USB: sierra: fix use after free at suspend/resume
+    - USB: sierra: fix remote wakeup
+    - USB: serial: fix potential runtime pm imbalance at device remove
+    - media: stk1160: Avoid stack-allocated buffer for control URBs
+    - rtmutex: Detect changes in the pi lock chain
+    - rtmutex: Handle deadlock detection smarter
+    - rtmutex: Plug slow unlock race
+    - media: uvcvideo: Fix clock param realtime setting
+    - media: saa7134: fix regression with tvtime (regression in 3.14)
+    - Bluetooth: Fix L2CAP deadlock
+    - Target/iser: Wait for proper cleanup before unloading
+    - target: Set CMD_T_ACTIVE bit for Task Management Requests
+    - target: Use complete_all for se_cmd->t_transport_stop_comp
+    - iscsi-target: Fix ABORT_TASK + connection reset iscsi_queue_req memory
+      leak
+    - target: Explicitly clear ramdisk_mcp backend pages
+    - [x86] x86-32, espfix: Remove filter for espfix32 due to race
+    - aio: fix aio request leak when events are reaped by userspace
+    - aio: fix kernel memory disclosure in io_getevents() introduced in v3.10
+      (CVE-2014-0206)
+    - CIFS: Fix memory leaks in SMB2_open
+    - Btrfs: fix double free in find_lock_delalloc_range
+    - Btrfs: make sure there are not any read requests before stopping workers
+    - Btrfs: mark mapping with error flag to report errors to userspace
+    - Btrfs: set right total device count for seeding support
+    - fs: btrfs: volumes.c: Fix for possible null pointer dereference
+    - Btrfs: don't check nodes for extent items
+    - Btrfs: fix scrub_print_warning to handle skinny metadata extents
+    - btrfs: fix use of uninit "ret" in end_extent_writepage()
+    - btrfs: allocate raid type kobjects dynamically
+    - lz4: fix another possible overrun
+    - epoll: fix use-after-free in eventpoll_release_file
+    - builddeb: use $OBJCOPY variable instead of objcopy (regression in 3.12)
+    - [i386] efi-pstore: Fix an overflow on 32-bit builds
+
+  [ Ben Hutchings ]
+  * [amd64] ptrace,x86: force IRET path after a ptrace_stop() (CVE-2014-4699)
+  * shmem: fix faulting into a hole while it's punched (CVE-2014-4171)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 07 Jul 2014 09:54:10 +0100
+
+linux (3.14.9-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.8
+    - Target/iscsi,iser: Avoid accepting transport connections during stop
+      stage
+    - iser-target: Fix multi network portal shutdown regression
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.9
+    - target: Fix NULL pointer dereference for XCOPY in target_put_sess_cmd
+      (regression in 3.14.6)
+    - iscsi-target: Reject mutual authentication with reflected CHAP_C
+    - ima: audit log files opened with O_DIRECT flag
+    - ima: introduce ima_kernel_read() (regression in 3.10)
+    - evm: prohibit userspace writing 'security.evm' HMAC value
+    - net: Use netlink_ns_capable to verify the permisions of netlink messages
+      (CVE-2014-0181)
+    - netlink: Only check file credentials for implicit destinations
+    - qlcnic: info leak in qlcnic_dcb_peer_app_info()
+    - ipv6: Fix regression caused by efe4208 in udp_v6_mcast_next()
+      (regression in 3.13)
+    - netlink: rate-limit leftover bytes warning and print process name
+    - bridge: Prevent insertion of FDB entry with disallowed vlan
+    - net: tunnels - enable module autoloading
+    - [sparc] net: filter: fix typo in sparc BPF JIT
+    - sfc: PIO:Restrict to 64bit arch and use 64-bit writes.
+      (regression in 3.13)
+    - ipv4: fix a race in ip4_datagram_release_cb()
+    - sctp: Fix sk_ack_backlog wrap-around problem
+    - udp: ipv4: do not waste time in __udp4_lib_mcast_demux_lookup
+      (regression in 3.13)
+    - USB: cdc-acm: Fix various bugs in power management
+    - USB: cdc-acm: fix I/O after failed open
+    - [x86] hv: use correct order when freeing monitor_pages
+    - ASoC: dapm: Make sure to always update the DAPM graph in _put_volsw()
+      (regression in 3.12)
+    - lzo: properly check for overruns (CVE-2014-4608)
+    - lz4: ensure length does not wrap (CVE-2014-4608)
+    - ALSA: compress: Cancel the optimization of compiler and fix the size of
+      struct for all platform.
+    - ALSA: control: Protect user controls against concurrent access
+      (CVE-2014-4652)
+    - ALSA: control: Fix replacing user controls (CVE-2014-4654, CVE-2014-4655)
+    - ALSA: control: Don't access controls outside of protected regions
+      (CVE-2014-4653)
+    - ALSA: control: Make sure that id->index does not overflow;
+      Handle numid overflow (CVE-2014-4656)
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.14-20140616:
+    - tiny, no msg in spinlock regeion
+    - minor bugfix, correct error value in link(2)
+    - O_TMPFILE support
+    - bugfix, handling an error in opening a FIFO
+    - propagate aufs file references to new vmas created by remap_file_pages()
+  * linux-image: Make initramfs support unconditional
+  * [x86] x86_32, entry: Do syscall exit work on badsys (CVE-2014-4508)
+  * [rt] Fix latency histogram after "hrtimer: Set expiry time before
+    switch_hrtimer_base()" in 3.14.6
+
+  [ Aurelien Jarno ]
+  * [arm64] Enable COMPAT to support 32-bit binaries.
+  * [mips,mipsel] Enable initramfs for all flavours, but keep the disk
+    related drivers built-in for now.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 30 Jun 2014 13:57:11 +0100
+
+linux (3.14.7-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.6
+    - [mipsel] loongson2_cpufreq: Fix CPU clock rate setting
+      (regression in 3.14)
+    - rtmutex: Fix deadlock detector for real
+    - kernfs: add back missing error check in kernfs_fop_mmap()
+      (regression in 3.14)
+    - coredump: fix va_list corruption (regression in 3.11)
+    - mm: make fixup_user_fault() check the vma access rights too
+    - serial: 8250: Fix thread unsafe __dma_tx_complete function
+    - 8250_core: Fix unwanted TX chars write
+    - iwlwifi: 7000: bump API to 9
+    - timer: Prevent overflow in apply_slack
+    - cfg80211: free sme on connection failures (regression in 3.11)
+    - cfg80211: add cfg80211_sched_scan_stopped_rtnl (regression in 3.14)
+    - mac80211: fix nested rtnl locking on ieee80211_reconfig
+      (regression in 3.14)
+    - mm, thp: close race between mremap() and split_huge_page()
+    - [x86] mm, hugetlb: Add missing TLB page invalidation for hugetlb_cow()
+    - hwpoison, hugetlb: lock_page/unlock_page does not match for handling a
+      free hugepage
+    - iwlwifi: mvm: delay enabling smart FIFO until after beacon RX
+      (regression in 3.14)
+    - aio: fix potential leak in aio_run_iocb().
+    - Revert "hwmon: (coretemp) Refine TjMax detection"
+    - hrtimer: Prevent remote enqueue of leftmost timers
+    - hrtimer: Set expiry time before switch_hrtimer_base()
+    - dm verity: fix biovecs hash calculation regression (regression in 3.14)
+    - dm cache: fix writethrough mode quiescing in cache_map
+      (regression in 3.13)
+    - md/raid10: call wait_barrier() for each request submitted.
+      (regression in 3.14)
+    - PNP / ACPI: Do not return errors if _DIS or _SRS are not present
+      (regression in 3.14)
+    - ACPI / EC: Process rather than discard events in acpi_ec_clear
+      (regression in 3.13.7, 3.14)
+    - irqchip: armada-370-xp: fix invalid cast of signed value into unsigned
+      variable (regression in 3.13)
+    - irqchip: armada-370-xp: implement the ->check_device() msi_chip
+      operation (regression in 3.13)
+    - irqchip: armada-370-xp: Fix releasing of MSIs (regression in 3.13)
+    - [x86] drm/i915: Allow user modes to exceed DVI 165MHz limit
+      (regression in 3.14)
+    - [x86] drm/i915: Don't check gmch state on inherited configs
+      (regression in 3.13?)
+    - [x86] drm/i915: Don't WARN nor handle unexpected hpd interrupts on gmch
+      platforms (regression in 3.13)
+    - [x86] drm/radeon: fix runpm handling on APUs (v4) (regression in 3.13)
+    - drm/radeon: disable mclk dpm on R7 260X (regression in 3.14)
+    - drm/radeon: add support for newer mc ucode on SI (v2)
+    - drm/radeon: add support for newer mc ucode on CI (v2)
+    - drm/radeon: re-enable mclk dpm on R7 260X asics
+    - drm/radeon/uvd: use lower clocks on old UVD to boot v2
+      (regression in 3.13)
+    - drm/radeon: check buffer relocation offset
+    - USB: Nokia 305 should be treated as unusual dev
+    - USB: Nokia 5300 should be treated as unusual dev
+    - Revert "Bluetooth: Enable autosuspend for Intel Bluetooth device"
+      (regression in 3.14)
+    - posix_acl: handle NULL ACL in posix_acl_equiv_mode
+    - fs/affs/super.c: bugfix / double free (regression in 3.14)
+    - [armel/orion5x] fix target ID for crypto SRAM window
+      (regression in 3.12)
+    - [armel/kirkwood]: dts: fix mislocated pcie-controller nodes
+      (regression in 3.12)
+    - [armhf/armmp-lpae] 8012/1: kdump: Avoid overflow when converting pfn to
+      physaddr
+    - drm/nouveau: fix another lock unbalance in nouveau_crtc_page_flip
+      (regression in 3.11)
+    - drm/i915/vlv: reset VLV media force wake request register
+      (regression in 3.14?)
+    - i40e: potential array underflow in i40e_vc_process_vf_msg()
+    - igb: Fix Null-pointer dereference in igb_reset_q_vector
+      (regression in 3.14)
+    - igb: Unset IGB_FLAG_HAS_MSIX-flag when falling back to msi-only
+      (regression in 3.14)
+    - leds: leds-pwm: properly clean up after probe failure
+    - device_cgroup: rework device access check and exception checking
+    - device_cgroup: check if exception removal is allowed
+    - media: media-device: fix infoleak in ioctl media_enum_entities()
+      (CVE-2014-1739)
+    - Input: Add INPUT_PROP_TOPBUTTONPAD device property
+    - Input: synaptics - report INPUT_PROP_TOPBUTTONPAD property
+    - e1000e: Fix no connectivity when driver loaded with cable out
+      (regression in 3.12)
+    - autofs: fix lockref lookup
+    - vfs: fix races between __d_instantiate() and checks of dentry flags
+    - ALSA: hda - hdmi: Set converter channel count even without sink
+      (regression in 3.13)
+    - NFSd: Move default initialisers from create_client() to alloc_client()
+    - NFSd: call rpc_destroy_wait_queue() from free_client()
+    - NFSD: Call ->set_acl with a NULL ACL structure if no entries
+    - nfsd4: remove lockowner when removing lock stateid
+    - workqueue: fix bugs in wq_update_unbound_numa() failure path
+    - workqueue: fix a possible race condition between rescuer and pwq-release
+    - [arm] mvebu: mvebu-soc-id: add missing clk_put() call
+      (regression in 3.14)
+    - [arm] mvebu: mvebu-soc-id: keep clock enabled if PCIe unit is enabled
+      (regression in 3.14)
+    - ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets()
+      (regression in 3.14)
+    - [hppa] ratelimit userspace segfault printing
+    - [amd64] modify_ldt: Make support for 16-bit segments a runtime option
+    - sysfs: make sure read buffer is zeroed (possible regression in 3.13)
+    - Target/iser: Fix wrong connection requests list addition
+    - Target/iser: Fix iscsit_accept_np and rdma_cm racy flow
+    - iscsi-target: Change BUG_ON to REJECT in iscsit_process_nop_out
+      (regression in 3.11)
+    - target: fix memory leak on XCOPY
+    - [x86] drm/i915: Disable self-refresh for untiled fbs on i915gm
+      (regression in 3.14)
+    - [x86] drm/i915: move power domain init earlier during system resume
+      (regression in 3.14?)
+    - [x86] drm/i915: Fix unsafe loop iteration over vma whilst unbinding them
+      (regression in 3.12)
+    - iwlwifi: mvm: BT Coex - fix Look Up Table (regression in 3.13)
+    - PCI: Wrong register used to check pending traffic (regression in 3.14)
+    - dm crypt: fix cpu hotplug crash by removing per-cpu structure
+    - dm thin: allow metadata commit if pool is in PM_OUT_OF_DATA_SPACE mode
+      (regression in 3.14)
+    - dm thin: add timeout to stop out-of-data-space mode holding IO forever
+    - dmaengine: fix dmaengine_unmap failure
+    - dma: mv_xor: Flush descriptors before activating a channel
+    - tcm_fc: Fix free-after-use regression in ft_free_cmd
+      (regression in 3.13)
+    - ACPICA: Tables: Restore old behavor to favor 32-bit FADT addresses.
+      (regression in 3.14)
+    - ACPI: Revert "ACPI: Remove CONFIG_ACPI_PROCFS_POWER and cm_sbsc.c"
+      (regression in 3.13)
+    - ACPI: Revert "ACPI / Battery: Remove battery's proc directory"
+      (regression in 3.13)
+    - [x86] ACPI / video: Add use_native_backlight quirks for more systems
+    - ACPI: Revert "ACPI / AC: convert ACPI ac driver to platform bus"
+      (regression in 3.13)
+    - [x86] ACPI / TPM: Fix resume regression on Chromebooks
+      (regression in 3.14)
+    - i2c: s3c2410: resume race fix
+    - [x86] intel_pstate: Set turbo VID for BayTrail
+    - [s390] crypto: fix aes,des ctr mode concurrency finding.
+    - clk: Fix double free due to devm_clk_register()
+    - clk: Fix slab corruption in clk_unregister()
+    - [powerpc] powernv: Reset root port in firmware (regression in 3.14)
+    - [powerpc] irq work racing with timer interrupt can result in timer
+      interrupt hang (regression in 3.14)
+    - [powerpc] kexec: Fix "Processor X is stuck" issue during kexec from ST
+      mode (regression in 3.13)
+    - spi: core: Ignore unsupported Dual/Quad Transfer Mode bits
+      (regression in 3.12)
+    - libceph: fix corruption when using page_count 0 page in rbd
+    - media: V4L2: ov7670: fix a wrong index, potentially Oopsing the kernel
+      from user-space
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.7
+    - perf: Limit perf_event_attr::sample_period to 63 bits
+    - perf: Fix race in removing an event
+    - SCSI: scsi_transport_sas: move bsg destructor into sas_rphy_remove
+      (regression in 3.13)
+    - [arm] 8051/1: put_user: fix possible data corruption in put_user
+    - [arm] 8064/1: fix v7-M signal return (regression in 3.11)
+    - cpufreq: remove race while accessing cur_policy
+    - firewire: revert to 4 GB RDMA, fix protocols using Memory Space
+      (regression in 3.14)
+    - [mips] Fix typo when reporting cache and ftlb errors for ImgTec cores
+      (regression in 3.14)
+    - dm cache: always split discards on cache block boundaries
+    - virtio_blk: fix race between start and stop queue
+    - sched/deadline: Restrict user params max value to 2^63 ns
+    - sched/dl: Fix race in dl_task_timer()
+    - drm/radeon: avoid crash if VM command submission isn't available
+    - [x86] drm/i915: Only copy back the modified fields to userspace from
+      execbuffer
+    - drm/radeon/dpm: resume fixes for some systems (regression in 3.14)
+    - libata: Blacklist queued trim for Crucial M500 (regression in 3.14.4)
+    - md: always set MD_RECOVERY_INTR when aborting a reshape or other
+      "resync".
+    - md: always set MD_RECOVERY_INTR when interrupting a reshape thread.
+      (regression in 3.12.9, 3.13)
+    - xhci: delete endpoints from bandwidth list before freeing whole device
+    - staging: comedi: ni_daq_700: add mux settling delay
+    - staging: r8192e_pci: fix htons error (regression in 3.14)
+    - ALSA: hda/analog - Fix silent output on ASUS A8JN (regression in 3.12)
+    - USB: io_ti: fix firmware download on big-endian machines (part 2)
+    - usb: pci-quirks: Prevent Sony VAIO t-series from switching usb ports
+      (regression in 3.12)
+    - percpu-refcount: fix usage of this_cpu_ops
+    - [x86] intel_pstate: Remove C0 tracking (regression in 3.14)
+    - [x86] intel_pstate: Correct rounding in busy calculation
+      (regression in 3.14)
+    - [x86] intel_pstate: add sample time scaling
+    - [x86] intel_pstate: Improve initial busy calculation
+    - mm: add !pte_present() check on existing hugetlb_entry callbacks
+      (CVE-2014-3940)
+    - mm: rmap: fix use-after-free in __put_anon_vma
+    - iser-target: Add missing target_put_sess_cmd for ImmedateData failure
+    - iscsi-target: Fix wrong buffer / buffer overrun in
+      iscsi_change_param_value()
+    - target: Fix alua_access_state attribute OOPs for un-configured devices
+    - netfilter: Fix potential use after free in ip6_route_me_harder()
+    - netfilter: nfnetlink: Fix use after free when it fails to process batch
+    - [x86] iommu/vt-d: Fix missing IOTLB flush in intel_iommu_unmap()
+
+  [ Ian Campbell ]
+  * [armhf] Enable VIRTIO_BALLOON and VIRTIO_PCI (Closes: #750742)
+  * [arm64] Update modules included in installer udebs.
+  * Include virtio_mmio in virtio-modules udeb when available.
+
+  [ Aurelien Jarno ]
+  * topconfig: Enable modular HW_RANDOM.
+  * [kernelarch-powerpc] Remove HW_RANDOM.
+  * [kernelarch-x86] Remove HW_RANDOM.
+  * [mips/4kc-malta] Remove HW_RANDOM.
+  * [mips/5kc-malta] Remove HW_RANDOM.
+  * [mips/octeon] Remove HW_RANDOM.
+  * [arm64] Enable modular RTC_DRV_PL031. 
+
+  [ Ben Hutchings ]
+  * [ppc64el] Add kernel image, thanks to Mauricio Faria de Oliveira:
+    - Split common/big-endian powerpc64 options
+    - Add little-endian powerpc64 options
+    - Temporarily disable zImage
+    - powerpc/powernv: Add calls to support little endian host
+    - Add 'ppc64le' (uname output) to bug/include-model script
+    - udeb: Add packages based on ppc64 configuration
+  * netfilter: ipv4: defrag: set local_df flag on defragmented skb
+    (regression in 3.14.5)
+  * [mips] seccomp: Check system calls whenever seccomp is enabled,
+    even if audit and trace are disabled (Closes: #751417)
+  * auditsc: audit_krule mask accesses need bounds checking (CVE-2014-3917)
+  * fs,userns: Change inode_capable to capable_wrt_inode_uidgid
+    (CVE-2014-4014)
+  * SCSI: Fix spurious request sense in error handling (regression in 3.14)
+  * PCI/MSI: Fix memory leak in free_msi_irqs() (regression in 3.14)
+  * [rt] hrtimer: Disable MISSED_TIMER_OFFSETS_HIST as it will currently
+    result in a panic
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 16 Jun 2014 09:51:49 +0100
+
+linux (3.14.5-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.5
+    - SCSI: dual scan thread bug fix
+    - SCSI: megaraid: missing bounds check in mimd_to_kioc()
+    - [x86] KVM: remove WARN_ON from get_kernel_ns()
+    - audit: convert PPIDs to the inital PID namespace.
+    - netfilter: nf_tables: fix nft_cmp_fast failure on big endian for size < 4
+    - netfilter: nf_conntrack: reserve two bytes for nf_ct_ext->len
+      (Closes: #741667)
+    - netfilter: Can't fail and free after table replacement
+    - [i386] x86,preempt: Fix preemption for i386
+    - rbd: fix error paths in rbd_img_request_fill()
+    - [x86] drm/i915: restore QUIRK_NO_PCH_PWM_ENABLE (regression in 3.14)
+    - tick-sched: Don't call update_wall_time() when delta is lesser than
+      tick_period (regression in 3.14)
+    - tick-sched: Check tick_nohz_enabled in tick_nohz_switch_to_nohz()
+      (regression in 3.13)
+    - [hppa] change value of SHMLBA from 0x00400000 to PAGE_SIZE
+    - [hppa] fix epoll_pwait syscall on compat kernel
+    - [hppa] remove _STK_LIM_MAX override
+    - vfs: don't bother with {get,put}_write_access() on non-regular files
+    - cifs: Wait for writebacks to complete before attempting write.
+    - xen/spinlock: Don't enable them unconditionally. (regression in 3.12)
+    - thp: close race between split and zap huge pages (regression in 3.13)
+    - mm/hugetlb.c: add cond_resched_lock() in return_unused_surplus_pages()
+    - mm: use paravirt friendly ops for NUMA hinting ptes
+    - USB: io_ti: fix firmware download on big-endian machines
+    - fs: Don't return 0 from get_anon_bdev (regression in 3.14)
+    - [x86] drm/vmwgfx: Make sure user-space can't DMA across buffer object
+      boundaries v2
+    - [x86] drm/i915: Do not dereference pointers from ring buffer in evict
+      event (regression in 3.13)  
+    - net: core: don't account for udp header size when computing seglen
+      (regression in 3.14)
+    - bridge: Fix double free and memory leak around br_allowed_ingress
+    - filter: prevent nla extensions to peek beyond the end of the message
+      (CVE-2014-3144, CVE-2014-3145)
+    - Revert "net: sctp: Fix a_rwnd/rwnd management to reflect real state of
+      the receiver's buffer" (regression in 3.14)
+    - ip6_gre: don't allow to remove the fb_tunnel_dev
+    - net: sctp: cache auth_enable per endpoint
+    - net: Fix ns_capable check in sock_diag_put_filterinfo
+    - rtnetlink: Warn when interface's information won't fit in our packet
+    - rtnetlink: Only supply IFLA_VF_PORTS information when RTEXT_FILTER_VF
+      is set
+    - tcp_cubic: fix the range of delayed_ack
+    - net: cdc_ncm: fix buffer overflow (regression in 3.13)
+    - ip_tunnel: Set network header properly for IP_ECN_decapsulate()
+      (regression in 3.11)
+    - ipv4: ip_tunnels: disable cache for nbma gre tunnels (regression in 3.14)
+    - net: cdc_mbim: __vlan_find_dev_deep need rcu_read_lock
+      (regression in 3.13)
+    - net: ipv4: ip_forward: fix inverted local_df test (regression in 3.14)
+    - net: ipv6: send pkttoobig immediately if orig frag size > mtu
+      (regression in 3.14)
+    - ip6_tunnel: fix potential NULL pointer dereference
+    - neigh: set nud_state to NUD_INCOMPLETE when probing router reachability
+      (regression in 3.14)
+    - batman-adv: fix neigh_ifinfo imbalance (regression in 3.14)
+    - batman-adv: fix neigh reference imbalance (regression in 3.14)
+    - batman-adv: always run purge_orig_neighbors (regression in 3.14)
+    - batman-adv: fix removing neigh_ifinfo (regression in 3.14)
+    - [s390,x86] net: filter: fix JIT address randomization
+    - net: avoid dependency of net_get_random_once on nop patching
+      (regression in 3.13)
+    - ipv6: fix calculation of option len in ip6_append_data
+      (regression in 3.13)
+    - rtnetlink: wait for unregistering devices in rtnl_link_unregister()
+    - bonding: fix out of range parameters for bond_intmax_tbl
+      (regression in 3.14)
+    - net: gro: make sure skb->cb[] initial content has not to be zero
+      (regression in 3.13)
+    - batman-adv: fix indirect hard_iface NULL dereference (regression in 3.14)
+    - batman-adv: fix reference counting imbalance while sending fragment
+      (regression in 3.14)
+    - batman-adv: increase orig refcount when storing ref in gw_node
+    - batman-adv: fix local TT check for outgoing arp requests in DAT
+      (regression in 3.13)
+    - net_sched: fix an oops in tcindex filter (regression in 3.14)
+    - ipv6: gro: fix CHECKSUM_COMPLETE support (regression in 3.14)
+    - ipv4: initialise the itag variable in __mkroute_input
+    - net-gro: reset skb->truesize in napi_reuse_skb()
+
+  [ Ben Hutchings ]
+  * [x86] ACPICA: Tables: Fix invalid pointer accesses in
+    acpi_tb_parse_root_table(). (Closes: #748574)
+  * net: Revert lockdep changes in 3.14.5 to avoid an ABI change
+  * futex: Add another early deadlock detection check
+  * futex: Prevent attaching to kernel threads
+  * futex: Forbid uaddr == uaddr2 in futex_requeue(..., requeue_pi=1)
+    (CVE-2014-3153)
+  * futex: Validate atomic acquisition in futex_lock_pi_atomic()
+  * futex: Always cleanup owner tid in unlock_pi
+  * futex: Make lookup_pi_state more robust
+
+  [ Ian Campbell ]
+  * [arm64] Initial kernel configuration and packaging (Closes: #745349).
+  * [armhf] Add virtio-modules udeb.
+
+  [ Aurelien Jarno ]
+  * [mips,mipsel] Fix branch emulation of branch likely instructions. 
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 05 Jun 2014 13:49:15 +0100
+
+linux (3.14.4-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.3
+    - ASoC: pcm: Drop incorrect double/extra frees
+    - [s390] KVM: Optimize ucontrol path (regression in 3.11)
+    - [s390] bitops,atomic: add missing memory barriers
+    - [s390] fix control register update (regression in 3.14)
+    - mei: me: do not load the driver if the FW doesn't support MEI interface
+    - staging: comedi: usbdux: bug fix for accessing 'ao_chanlist' in private
+      data
+    - [x86] AVX-512: AVX-512 Feature Detection
+    - [x86] AVX-512: Enable AVX-512 States Context Switch
+    - [x86] ftrace: One more missing sync after fixup of function modification
+      failure
+    - [amd64] modify_ldt: Ban 16-bit segments on 64-bit kernels
+    - [armhf] PCI: imx6: Wait for retraining (regression in 3.14)
+    - [arm] PCI: mvebu: Fix potential issue in range parsing
+      (regression in 3.12)
+    - NFSv4: Fix a use-after-free problem in open()
+    - nfsd: revert v2 half of "nfsd: don't return high mode bits"
+      (regression in 3.14)
+    - nfsd4: buffer-length check for SUPPATTR_EXCLCREAT
+    - nfsd4: fix test_stateid error reply encoding
+    - nfsd: notify_change needs elevated write count
+    - nfsd: check passed socket's net matches NFSd superblock's one
+    - nfsd4: fix memory leak in nfsd4_encode_fattr()
+    - nfsd4: fix setclientid encode size
+    - NFSD: Traverse unconfirmed client through hash-table
+    - IB/ipath: Fix potential buffer overrun in sending diag packet routine
+    - IB/nes: Return an error on ib_copy_from_udata() failure instead of NULL
+    - IB/mthca: Return an error on ib_copy_to_udata() failure
+    - IB/ehca: Returns an error on ib_copy_to_udata() failure
+    - IB/core: Don't resolve passive side RoCE L2 address in CMA REQ handler
+      (regression in 3.14)
+    - ib_srpt: Use correct ib_sg_dma primitives
+    - SCSI: arcmsr: upper 32 of dma address lost
+    - iscsi-target: Fix ERL=2 ASYNC_EVENT connection pointer bug
+    - target/iblock: Fix double bioset_integrity_free bug
+    - target/tcm_fc: Fix use-after-free of ft_tpg
+    - [x86] efi: Correct EFI boot stub use of code32_start
+    - efi: Pass correct file handle to efi_file_{read,close}
+    - reiserfs: fix race in readdir
+    - media: v4l2-dv-timings: add module name, description, license
+    - media: em28xx-audio: fix user counting in snd_em28xx_capture_open()
+    - [armhf] usb: musb: fix PHY power on/off (regression in 3.14)
+    - mtip32xx: Unmap the DMA segments before completing the IO request
+    - mtip32xx: mtip_async_complete() bug fixes
+    - iser-target: Match FRMR descriptors to available session tags
+    - iser-target: Add missing se_cmd put for WRITE_PENDING in tx_comp_err
+    - [sh] fix format string bug in stack tracer
+    - mm: page_alloc: spill to remote nodes before waking kswapd
+      (regression in 3.12/3.13)
+    - mm: try_to_unmap_cluster() should lock_page() before mlocking
+      (CVE-2014-3122) (Closes: #747326)
+    - xattr: guard against simultaneous glibc header inclusion
+    - ocfs2: do not put bh when buffer_uptodate failed
+    - ocfs2: fix panic on kfree(xattr->name)
+    - vfs: smarter propagate_mnt()
+    - block: Fix for_each_bvec()
+    - ext4: FIBMAP ioctl causes BUG_ON due to handle EXT_MAX_BLOCKS
+    - ext4: note the error in ext4_end_bio()
+    - ext4: move ext4_update_i_disksize() into mpage_map_and_submit_extent()
+    - ext4: use i_size_read in ext4_unaligned_aio()
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.4
+    - tty: Fix lockless tty buffer race
+    - n_tty: Fix n_tty_write crash when echoing in raw mode (CVE-2014-0196)
+      (Closes: #747166)
+    - floppy: ignore kernel-only members in FDRAWCMD ioctl input (CVE-2014-1737)
+    - floppy: don't write kernel-only members to FDRAWCMD ioctl output
+      (CVE-2014-1738)
+    - KVM: async_pf: mm->mm_users can not pin apf->mm
+    - KVM: ioapic: fix assignment of ioapic->rtc_status.pending_eoi
+      (CVE-2014-0155)
+    - [powerpc] KVM: Book3S HV: Fix KVM hang with CONFIG_KVM_XICS=n
+      (regression in 3.14)
+    - [mips] Hibernate: Flush TLB entries in swsusp_arch_resume()
+    - [powerpc] Fix Oops in rtas_stop_self() (regression in 3.14)
+    - [s390] bpf,jit: initialize A register if 1st insn is BPF_S_LDX_B_MSH
+    - SUNRPC: Ensure that call_connect times out correctly (regression in 3.13)
+    - SUNRPC: Ensure call_connect_status() deals correctly with SOFTCONN tasks
+      (regression in 3.13)
+    - Revert "net: mvneta: fix usage as a module on RGMII configurations"
+      (regression in 3.14)
+    - iwlwifi: dvm: take mutex when sending SYNC BT config command
+    - mac80211: fix potential use-after-free
+    - mac80211: fix WPA with VLAN on AP side with ps-sta again
+    - locks: allow __break_lease to sleep even when break_time is 0
+    - rtlwifi: rtl8192se: Fix regression due to commit 1bf4bbb
+      (regression in 3.13)
+    - dm cache: prevent corruption caused by discard_block_size >
+      cache_block_size
+    - dm transaction manager: fix corruption due to non-atomic transaction
+      commit
+    - dm: take care to copy the space map roots before locking the superblock
+    - dm thin: fix dangling bio in process_deferred_bios error path
+    - aio: v4 ensure access to ctx->ring_pages is correctly serialised for
+      migration
+    - cpufreq: loongson2_cpufreq: don't declare local variable as static
+      (regression in 3.14)
+
+  [ Ben Hutchings ]
+  * [or1k] Build a linux-libc-dev package (Closes: #746309)
+  * net: Start with correct mac_len in skb_network_protocol (Closes: #746453)
+  * [x86] ACPI/Processor: Fix failure of loading acpi-cpufreq driver
+    (Closes: #746448)
+  * [armhf] ARM: sun4i: dt: Add bindings for USB clocks (fixes FTBFS,
+    Closes: #746420)
+  * [x86] udeb: Add hyperv-keyboard to hyperv-modules
+  * drm: Enable auto-loading of ast, udl
+  * [ppc64el] Build a linux-libc-dev package (Closes: #747367)
+  * net: ipv4: current group_info should be put after using. (CVE-2014-2851)
+  * filter: prevent nla extensions to peek beyond the end of the message
+    (CVE-2014-3144, CVE-2014-3145)
+  * [powerpc,ppc64] Add versioned build-dependency on gcc-4.8, as compiler
+    changes have resulted in a different kernel module ABI
+    - [powerpc] Bump ABI to 1a as 3.14.2-1 was built with an older compiler
+  * [armhf] Enable IR_GPIO_CIR as module (Closes: #747762)
+  * [hppa/parisc64-smp] ipmi: Enable IPMI_HANDLER, IPMI_DEVICE_INTERFACE,
+    IPMI_SI, IPMI_WATCHDOG, IPMI_POWEROFF as modules (Closes: #747482)
+  * [armhf] Enable various drivers to support BeagleBone Black
+    (Closes: #747364)
+  * [hppa] udeb: Add xfs-modules (Closes: #746506)
+  * udeb: Add mtip32xx, nvme to sata-modules
+  * [rt] Update to 3.14.3-rt5:
+    - tracing: use migrate_disable() to prevent beeing pushed off the cpu
+    - rwsem-rt: Do not allow readers to nest
+    - Revert "migrate_disable pushd down in atomic_dec_and_spin_lock"
+    - rwlock: disable migration before taking a lock
+    - timer: do not spin_trylock() on UP
+    - stomp-machine: Fix wait for completion
+    - stomp-machine: create lg_global_trylock_relax() primitive
+    - stomp-machine: use lg_global_trylock_relax() to dead with
+      stop_cpus_lock lglock
+    - blk-mq: revert raw locks, post pone notifier to POST_DEAD
+    - use EXPORT_SYMBOL() on __rt_mutex_init() and rt_down_write_nested_lock()
+    - netconsole: Allow use with PREEMPT_RT_FULL
+  * aufs: Update to aufs3.14-20140512:
+    - bugfix, stop calling security_mmap_file() again
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 14 May 2014 00:46:05 +0100
+
+linux-tools (3.14-1) unstable; urgency=medium
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 28 Apr 2014 17:46:24 +0100
+
+linux (3.14.2-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.2
+
+  [ Ian Campbell ]
+  * [armhf] Drop suffix from kernel udeb.
+  * [armhf] Backport sunxi AHCI and GMAC drivers from v3.15-rc1
+
+  [ Ben Hutchings ]
+  * [x86] Enable X86_INTEL_LPSS (Closes: #745331)
+  * [x86] thinkpad_acpi: Add support for X1 Carbon 2nd generation's adaptive
+    keyboard (Closes: #745252)
+  * [armhf] Enable more Allwinner/sunxi drivers (Closes: #745972):
+    - spi: sunxi: Add Allwinner A31 SPI controller driver
+    - ARM: dt: sun4i: Add A10 SPI controller nodes
+    - PHY: sunxi: Add driver for sunxi usb phy
+    - ARM: sun4i: dt: Add USB host bindings
+    - Enable PHY_SUN4I_USB, RTC_DRV_SUNXI, SPI_SUN6I, USB_EHCI_HCD_PLATFORM,
+      USB_OHCI_HCD_PLATFORM and CONFIG_SUNXI_WATCHDOG as modules
+  * Set ABI to 1
+  * Staging: speakup: Move pasting into a work item and update it to match vt
+    (Closes: #735202,  #744015)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 28 Apr 2014 17:12:03 +0100
+
+linux (3.14.1-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.14.1
+
+  [ Ben Hutchings ]
+  * [armel] Disable ixp4xx flavour (fixes FTBFS)
+  * [armhf] Enable SECURITY_APPARMOR, SECURITY_TOMOYO
+  * [rt] Update to 3.14.0-rt1 and reenable
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 17 Apr 2014 13:17:18 +0100
+
+linux (3.14-1~exp1) experimental; urgency=medium
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.14
+
+  [ Ben Hutchings ]
+  * nftables: Enable NF_TABLES_BRIDGE, NF_TABLES_IPV4, NFT_CHAIN_ROUTE_IPV4,
+    NFT_CHAIN_NAT_IPV4, NF_TABLES_ARP, NF_TABLES_IPV6, NFT_CHAIN_ROUTE_IPV6,
+    NFT_CHAIN_NAT_IPV6 as modules (Closes: #742763)
+  * udeb: Update sound-modules, thanks to Samuel Thibault (Closes: #743319)
+  * aufs: Update to aufs3.14-20140407 (no functional changes)
+  * mtd: Enable MTD_NAND_ECC_BCH (Closes: #743933)
+  * drm: Enable DRM_LOAD_EDID_FIRMWARE (Closes: #728275)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 09 Apr 2014 09:53:05 +0100
+
+linux-tools (3.14~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 17 Mar 2014 19:31:14 +0000
+
+linux (3.14~rc7-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * bfa,bna: Replace large udelay() with mdelay() (fixes FTBFS on arm)
+    (Closes: #741142)
+  * aufs: Update to aufs3.x-rcN-20140310
+    - bugfix, Fix unmount to properly free anonymous block devices
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 17 Mar 2014 13:30:03 +0000
+
+linux (3.14~rc5-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * mm: Enable ZSMALLOC as built-in, ZRAM as module (except for
+    armel/{ixp4xx,orion5x}) (Closes: #676779)
+  * iio,HID: Enable HID_SENSOR_INCLINOMETER_3D as module
+  * media/radio: Enable USB_RAREMONO as module
+  * i40e: Enable I40E_VXLAN, I40E_DCB
+  * net: Enable I40EVF, USB_NET_SR9800 as modules
+  * serial: Enable USB_SERIAL_MXUPORT as module
+  * ceph: Enable CEPH_FS_POSIX_ACL
+  * netfilter: Enable NF_TABLES_INET, NFT_QUEUE, NFT_REJECT,
+    NETFILTER_XT_MATCH_CGROUP, NETFILTER_XT_MATCH_IPCOMP as modules
+  * net/sched: Enable NET_SCH_HHF, NET_SCH_PIE as modules
+  * [x86] crypto: Enable CRYPTO_DEV_CCP, CRYPTO_DEV_CCP_DD,
+    CRYPTO_DEV_CCP_CRYPTO as modules
+  * [x86] platform: Enable CHROMEOS_PSTORE, HP_WIRELESS as modules
+  * [x86] comedi: Enable COMEDI_MF6X4 as modules
+  * [x86] staging: Enable R8821AE, RTS5208 as modules
+  * [x86] thermal: Enable ACPI_INT3403_THERMAL as module
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 07 Mar 2014 03:36:35 +0000
+
+linux (3.13.10-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.8
+    - ALSA: compress: Pass through return value of open ops callback
+    - [hppa] partly revert commit 8a10bc9: parisc/sti_console: prefer Linux
+      fonts over built-in ROM fonts (regression in 3.13.2)
+    - [armhf] net: davinci_emac: Replace devm_request_irq with request_irq
+      (regression in 3.11)
+    - NFSv4: Use the correct net namespace in nfs4_update_server
+    - media: cxusb: unlock on error in cxusb_i2c_xfer() (regression in 3.13)
+    - media: dw2102: some missing unlocks on error (regression in 3.13)
+    - libceph: block I/O when PAUSE or FULL osd map flags are set
+    - libceph: resend all writes after the osdmap loses the full flag
+    - stop_machine: Fix^2 race between stop_two_cpus() and stop_cpus()
+    - [arm] 7941/2: Fix incorrect FDT initrd parameter override
+      (regression in 3.13)
+    - [x86] bpf_jit: support negative offsets
+    - printk: fix syslog() overflowing user buffer
+    - Fix uses of dma_max_pfn() when converting to a limiting address
+    - deb-pkg: Fix building for MIPS big-endian or ARM OABI
+    - deb-pkg: Fix cross-building linux-headers package
+    - fs/proc/proc_devtree.c: remove empty /proc/device-tree when no
+      openfirmware exists.
+    - KVM: MMU: handle invalid root_hpa at __direct_map
+    - [x86] KVM: x86: handle invalid root_hpa everywhere
+    - KVM: VMX: fix use after free of vmx->loaded_vmcs
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.9
+    - ext4: atomically set inode->i_flags in ext4_set_inode_flags()
+    - rcuwalk: recheck mount_lock after mountpoint crossing attempts
+    - Input: mousedev - fix race when creating mixed device
+    - xen/balloon: flush persistent kmaps in correct position
+    - Revert "xen: properly account for _PAGE_NUMA during xen pte translations"
+      (regression in 3.13.5)
+    - drm/i915: Undo gtt scratch pte unmapping again (regression in 3.12)
+    - [i386/486] fix boot on uniprocessor systems
+    - random32: avoid attempt to late reseed if in the middle of seeding
+    - rcuwalk: switch mnt_hash to hlist
+    - mm: close PageTail race
+    - cgroup: protect modifications to cgroup_idr with cgroup_mutex
+    - netfilter: nf_conntrack_dccp: fix skb_header_pointer API usages
+      (CVE-2014-2523)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.10
+    - selinux: correctly label /proc inodes in use before the policy is loaded
+    - net: sctp: fix skb leakage in COOKIE ECHO path of chunk->auth_chunk
+    - bridge: multicast: add sanity check for query source addresses
+    - tipc: allow connection shutdown callback to be invoked in advance
+    - tipc: fix connection refcount leak
+    - tipc: drop subscriber connection id invalidation
+    - inet: frag: make sure forced eviction removes all frags
+    - vlan: Set correct source MAC address with TX VLAN offload enabled
+      (regression in 3.13)
+    - tcp: tcp_release_cb() should release socket ownership
+    - bridge: multicast: add sanity check for general query destination
+    - bridge: multicast: enable snooping on general queries only
+    - net: socket: error on a negative msg_namelen (regression in 3.11.10)
+    - bonding: set correct vlan id for alb xmit path (regression in 3.12)
+    - ipv6: Avoid unnecessary temporary addresses being generated
+    - net: cdc_ncm: fix control message ordering (regression in 3.13)
+    - tcp: syncookies: do not use getnstimeofday() (regression in 3.13)
+    - tipc: fix spinlock recursion bug for failed subscriptions
+    - ip_tunnel: Fix dst ref-count. (regression in 3.13.7)
+    - tg3: Do not include vlan acceleration features in vlan_features
+    - virtio-net: correct error handling of virtqueue_kick()
+      (regression in 3.13)
+    - usbnet: include wait queue head in device structure
+    - vhost: fix total length when packets are too short (CVE-2014-0077)
+    - vhost: validate vhost_get_vq_desc return value (CVE-2014-0055)
+    - tcp: fix get_timewait4_sock() delay computation on 64bit
+      (regression in 3.13)
+    - xen-netback: remove pointless clause from if statement
+    - netlink: don't compare the nul-termination in nla_strcmp
+    - xen-netback: disable rogue vif in kthread context
+    - net: vxlan: fix crash when interface is created with no group
+    - rds: prevent dereference of a NULL device in rds_iw_laddr_check
+      (CVE-2014-2678)
+    - powernow-k6: disable cache when changing frequency
+    - [m68k] Skip futex_atomic_cmpxchg_inatomic() test
+    - crypto: ghash-clmulni-intel - use C implementation for setkey()
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 15 Apr 2014 22:12:38 +0100
+
+linux (3.13.7-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.7
+    - mm: page_alloc: exempt GFP_THISNODE allocations from zone fairness
+      (regression in 3.12)
+    - mm: include VM_MIXEDMAP flag in the VM_SPECIAL list to avoid m(un)locking
+      (regression in 3.12)
+    - ocfs2: fix quota file corruption
+    - ocfs2 syncs the wrong range...
+    - memcg: fix endless loop in __mem_cgroup_iter_next()
+      (regression in 3.13.3)
+    - net-tcp: fastopen: fix high order allocations
+    - ipv6: reuse ip6_frag_id from ip6_ufo_append_data
+    - ipv4: ipv6: better estimate tunnel header cut for correct ufo handling
+    - ip_tunnel:multicast process cause panic due to skb->_skb_refdst NULL
+      pointer
+    - mac80211: clear sequence/fragment number in QoS-null frames
+    - ath9k: Fix ETSI compliance for AR9462 2.0
+    - ath9k: protect tid->sched check
+    - cpuset: fix a locking issue in cpuset_migrate_mm()
+    - cpuset: fix a race condition in __cpuset_node_allowed_softwall()
+    - firewire: net: fix use after free
+    - firewire: don't use PREPARE_DELAYED_WORK
+    - libata: disable queued TRIM for Crucial M500 mSATA SSDs
+    - libata: use wider match for blacklisting Crucial M500
+    - NFSv4: Fix another nfs4_sequence corruptor (Closes: #734268)
+    - cpufreq: use cpufreq_cpu_get() to avoid cpufreq_get() race conditions
+    - cpufreq: Skip current frequency initialization for ->setpolicy drivers
+      (regression in 3.13)
+    - iscsi/iser-target: Use list_del_init for ->i_conn_node
+    - iser-target: Ignore completions for FRWRs in isert_cq_tx_work
+    - iser-target: Fix post_send_buf_count for RDMA READ/WRITE
+    - mm/readahead.c: fix do_readahead() for no readpage(s)
+      (regression in 3.13)
+    - fs/proc/base.c: fix GPF in /proc/$PID/map_files
+    - drm/i915: fix pch pci device enumeration (regression in 3.11)
+    - drm/i915: Reject >165MHz modes w/ DVI monitors (regression in 3.11)
+    - drm/radeon: fix runpm disabling on non-PX harder
+      (may fix #741619, #742507)
+    - PCI: Enable INTx in pci_reenable_device() only when MSI/MSI-X not enabled
+      (fixes regression in 3.13.6)
+    - [x86] vmxnet3: fix netpoll race condition
+    - mm/compaction: break out of loop on !PageBuddy in isolate_freepages_block
+    - dm space map metadata: fix refcount decrement below 0 which caused
+      corruption
+    - dm cache: fix truncation bug when copying a block to/from >2TB fast
+      device
+    - net: unix socket code abuses csum_partial
+    - SCSI: qla2xxx: Fix multiqueue MSI-X registration.
+    - [x86] fpu: Check tsk_used_math() in kernel_fpu_end() for eager FPU
+    - Btrfs: fix tree mod logging
+    - Btrfs: fix data corruption when reading/updating compressed extents
+    - intel_pstate: Add setting voltage value for baytrail P states.
+    - Fix mountpoint reference leakage in linkat
+    - bio-integrity: Fix bio_integrity_verify segment start bug
+    - memcg: reparent charges of children before processing parent
+
+  [ Ben Hutchings ]
+  * [arm] mm: Avoid ABI change in 3.13.6 (fixes FTBFS)
+  * nfqueue: Orphan frags in nfqnl_zcopy() and handle errors (CVE-2014-2568)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 25 Mar 2014 17:23:31 +0000
+
+linux-tools (3.13.6-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.5
+    - Modpost: fixed USB alias generation for ranges including 0x9 and 0xA
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.6
+    - perf trace: Fix ioctl 'request' beautifier build problems on
+      !(i386 || x86_64) arches
+
+  [ Ben Hutchings ]
+  * linux-tools: Remove the 'trace_3.13' link to perf
+  * Clean another autoconf-generated file so double-builds work
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 19 Mar 2014 22:33:21 +0000
+
+linux (3.13.6-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.6
+    - drm/nouveau/fb: use correct ram oclass for nv1a hardware
+      (regression in 3.13)
+    - ext4: fix xfstest generic/299 block validity failures
+    - ext4: fix error paths in swap_inode_boot_loader()
+    - ext4: don't try to modify s_flags if the the file system is read-only
+    - ext4: fix online resize with a non-standard blocks per group setting
+    - [arm] 7950/1: mm: Fix stage-2 device memory attributes
+    - [arm] 7953/1: mm: ensure TLB invalidation is complete before enabling MMU
+    - [arm] 7957/1: add DSB after icache flush in __flush_icache_all()
+    - powerpc: Set the correct ksp_limit on ppc32 when switching to irq stack
+      (regression in 3.12)
+    - jbd2: fix use after free in jbd2_journal_start_reserved()
+    - cifs: ensure that uncached writes handle unmapped areas correctly
+      (CVE-2014-0069)
+    - NFS: Do not set NFS_INO_INVALID_LABEL unless server supports labeled NFS
+      (regression in 3.11)
+    - NFS fix error return in nfs4_select_rw_stateid (regression in 3.12)
+    - bridge: fix netconsole setup over bridge (regression in 3.12)
+    - net: fix 'ip rule' iif/oif device rename
+    - net: asix: add missing flag to struct driver_info
+    - gre: add link local route when local addr is any (regression in 3.13)
+    - ipv4: fix counter in_slow_tot
+    - net: use __GFP_NORETRY for high order allocations
+    - batman-adv: fix soft-interface MTU computation (regression in 3.13)
+    - batman-adv: fix TT-TVLV parsing on OGM reception
+    - batman-adv: release vlan object after checking the CRC
+    - batman-adv: properly check pskb_may_pull return value
+    - batman-adv: avoid potential race condition when adding a new neighbour
+    - batman-adv: fix TT CRC computation by ensuring byte order
+      (regression in 3.13)
+    - batman-adv: free skb on TVLV parsing success
+    - batman-adv: avoid double free when orig_node initialization fails
+    - batman-adv: fix potential kernel paging error for unicast transmissions
+    - cgroup: fix error return value in cgroup_mount()
+    - cgroup: fix error return from cgroup_create()
+    - cgroup: fix locking in cgroup_cfts_commit()
+    - cgroup: update cgroup_enable_task_cg_lists() to grab siglock
+    - fs: fix iversion handling
+    - kvm: x86: fix emulator buffer overflow (CVE-2014-0049)
+    - kvm, vmx: Really fix lazy FPU on nested guest
+    - SUNRPC: Ensure that gss_auth isn't freed before its upcall messages
+    - powerpc/powernv: Fix opal_xscom_{read,write} prototype
+    - powerpc/powernv: Fix indirect XSCOM unmangling
+    - perf/x86: Fix event scheduling
+    - sata_sil: apply MOD15WRITE quirk to TOSHIBA MK2561GSYN
+    - cpufreq: powernow-k8: Initialize per-cpu data-structures properly
+      (regression in 3.12)
+    - Revert "writeback: do not sync data dirtied after sync start"
+      (regression in 3.13)
+    - [arm] PCI: mvebu: Use Device ID and revision from underlying endpoint
+    - PCI: Enable INTx if BIOS left them disabled
+    - i7core_edac: Fix PCI device reference count
+    - can: kvaser_usb: check number of channels returned by HW
+    - usb: chipidea: need to mask when writting endptflush and endptprime
+    - mei: set client's read_cb to NULL when flow control fails
+    - workqueue: ensure @task is valid across kthread_stop()
+    - regulator: da9063: Bug fix when setting max voltage on LDOs 5-11
+    - [armhf] mtd: nand: omap: fix ecclayout to be in sync with u-boot NAND
+      driver (regression in 3.13)
+    - [armhf] mtd: nand: omap: fix ecclayout->oobfree->offset
+    - [armhf] mtd: nand: omap: fix ecclayout->oobfree->length
+    - [armhf/armmp-lpae] iommu/arm-smmu: fix pud/pmd entry fill sequence
+    - [armhf/armmp-lpae] iommu/arm-smmu: really fix page table locking
+    - [armhf/armmp-lpae] iommu/arm-smmu: fix table flushing during initial
+      allocations
+    - [armhf/armmp-lpae] iommu/arm-smmu: set CBARn.BPSHCFG to NSH for
+      s1-s2-bypass contexts
+    - perf: Fix hotplug splat
+    - quota: Fix race between dqput() and dquot_scan_active()
+    - ipc,mqueue: remove limits for the amount of system-wide queues
+    - mm, thp: fix infinite loop on memcg OOM
+    - qla2xxx: Fix kernel panic on selective retransmission request
+    - i7300_edac: Fix device reference count
+    - dm cache: move hook_info into common portion of per_bio_data structure
+      (regression in 3.13)
+    - drm/radeon: fix missing bo reservation
+    - drm/radeon: free uvd ring on unload
+
+  [ Ben Hutchings ]
+  * xhci: Revert more sg changes (Closes: #741989; also see #738113):
+    - Revert "xhci 1.0: Limit arbitrarily-aligned scatter gather."
+    - Revert "USBNET: ax88179_178a: enable tso if usb host supports sg dma"
+  * aufs: Update to aufs3.13-20140303
+    - bugfix, Fix unmount to properly free anonymous block devices
+  * net: fix for a race condition in the inet frag code (CVE-2014-0100)
+  * net: sctp: fix sctp_sf_do_5_1D_ce to verify if we/peer is AUTH capable
+    (CVE-2014-0101)
+  * KEYS: Make the keyring cycle detector ignore other keyrings of the
+    same name (CVE-2014-0102)
+  * skbuff: skb_segment: orphan frags before copying (CVE-2014-0131)
+  * ipv6: don't set DST_NOCOUNT for remotely added routes (CVE-2014-2309)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 19 Mar 2014 16:18:42 +0000
+
+linux (3.13.5-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.5
+    - xen: properly account for _PAGE_NUMA during xen pte translations
+    - mm: fix page leak at nfs_symlink()
+    - mm/memory-failure.c: move refcount only in !MF_COUNT_INCREASED
+    - CIFS: Fix SMB2 mounts so they don't try to set or get xattrs via cifs
+    - CIFS: Add protocol specific operation for CIFS xattrs
+    - CIFS: retrieving CIFS ACLs when mounted with SMB2 fails dropping session
+    - mac80211: release the channel in error path in start_ap
+    - mac80211: Fix IBSS disconnect
+    - mac80211: fix fragmentation code, particularly for encryption
+    - ath9k_htc: Do not support PowerSave by default
+    - ath9k: Do not support PowerSave by default
+    - [s390x] fix kernel crash due to linkage stack instructions
+    - raw: test against runtime value of max_raw_minors
+    - hwmon: (ntc_thermistor) Avoid math overflow
+    - lockd: send correct lock when granting a delayed lock.
+    - drm/i915: Pair va_copy with va_end in i915_error_vprintf
+    - vt: Fix secure clear screen
+    - staging: lustre: fix quotactl permission denied (LU-4530)
+    - staging: comedi: adv_pci1710: fix analog output readback value
+    - iio: adis16400: Set timestamp as the last element in chan_spec
+    - iio: ak8975: Fix calculation formula for convert micro tesla to gauss
+      unit
+    - usb-storage: add unusual-devs entry for BlackBerry 9000
+    - usb-storage: restrict bcdDevice range for Super Top in Cypress ATACB
+    - xhci 1.0: Limit arbitrarily-aligned scatter gather.
+    - Revert "usbcore: set lpm_capable field for LPM capable root hubs"
+      (regression in 3.12.1)
+    - block: __elv_next_request() shouldn't call into the elevator if bypassing
+    - block: Fix nr_vecs for inline integrity vectors
+    - block: add cond_resched() to potentially long running ioctl discard loop
+    - compiler/gcc4: Make quirk for asm_volatile_goto() unconditional
+    - misc: mic: fix possible signed underflow (undefined behavior) in
+      userspace API
+    - KVM: return an error code in kvm_vm_ioctl_register_coalesced_mmio()
+    - md/raid1: restore ability for check and repair to fix read errors.
+      (regression in 3.10.5)
+    - i2c: mv64xxx: refactor message start to ensure proper initialization
+    - target: Fix free-after-use regression in PR unregister
+    - drivers/edac/edac_mc_sysfs.c: poll timeout cannot be zero
+    - EDAC: Poll timeout cannot be zero, p2
+    - EDAC: Correct workqueue setup path
+
+  [ Ben Hutchings ]
+  * [armhf] net/wireless: Really enable WL_TI and dependent modules
+  * aufs: Update to aufs3.13-20140127 (no functional changes)
+  * [powerpc] Change I2C_POWERMAC from module to built-in (Closes: #713943)
+  * [mips] rtl8187: fix regression on MIPS without coherent DMA
+    (Closes: #739978)
+  * [x86] Enable CHROME_PLATFORMS and re-enable CHROMEOS_LAPTOP as module
+    (Closes: #740042)
+  * [armel/!kirkwood] udeb: Re-add lzo-modules udeb as lzo_compress is a
+    module again (Closes: #740219)
+  * debian/control: Simplify build-dependencies:
+    - Remove versions for debhelper, python, kernel-wedge that are
+      satisfied by stable
+    - Remove module-init-tools as alternative to kmod, which is in stable
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 04 Mar 2014 19:49:27 +0000
+
+linux-tools (3.13.4-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.2
+    - perf kvm: Fix kvm report without guestmount.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 22 Feb 2014 15:39:27 +0000
+
+linux (3.13.4-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.1
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.2
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.3
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.13.4
+
+  [ Ben Hutchings ]
+  * [x86] Enable POWERCAP, INTEL_RAPL as module (Closes: #736399)
+  * [arm] Disable OABI_COMPAT and enable AUDITSYSCALL (except for
+    armel/{ixp4xx,orion5x}) (Closes: #728975, #736843)
+  * [x86] Enable R8188EU as module, 88EU_AP_MODE and 88EU_P2P (Closes: #736905)
+  * [x86] Enable I2C_DESIGNWARE_PLATFORM as module (Closes: #737163)
+  * [x86] snd-pcsp: Disable autoload (Closes: #697709)
+  * DFSG: Remove the af9005 initialisation script and vs6624 driver again
+    (they were renamed in 3.7)
+  * linux-image.postinst: Use lstat() to check symlink existence
+    (Closes: #738707)
+  * [hppa] Update configuration, thanks to Helge Deller (Closes: #738487)
+    - megaraid: Enable MEGARAID_NEWGEN as module; disable MEGARAID_LEGACY
+    - drm: Change DRM from module to built-in
+    - [/parisc64-smp] udeb: Add fb-modules package containing radeon driver
+  * udeb: Add various recently enabled drivers
+    - Add i40e to nic-modules
+    - Add r815x to nic-usb-modules
+    - Add ath10k_core, ath10k_pci, brcmfmac to nic-wireless-modules
+    - Add esas2r to scsi-modules
+  * Bluetooth: allocate static minor for vhci (fixes depmod error)
+  * Set ABI to 1
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 22 Feb 2014 11:54:57 +0000
+
+linux-tools (3.13-1~exp3) experimental; urgency=medium
+
+  * linux-tools: Fix/revert unportable code in perf trace (fixes FTBFS
+    on powerpc, sparc)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 07 Feb 2014 20:36:29 +0000
+
+linux-tools (3.13-1~exp2) experimental; urgency=medium
+
+  * Merge changes from sid up to 3.12.6-3
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 02 Feb 2014 16:57:49 +0100
+
+linux-tools (3.13-1~exp1) experimental; urgency=low
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 02 Feb 2014 12:02:29 +0100
+
+linux (3.13-1~exp1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.13
+
+  [ Ben Hutchings ]
+  * [armhf] xen/pci: Fix build on non-x86
+  * [hppa/parisc64-smp] Disable MLONGCALLS (Closes: #733897)
+  * [armel] Remove iop32x flavour (fixes FTBFS)
+  * aufs: Update to aufs3.x-rcN-20140120
+    - bugfix, removed /proc/PID/fd/N
+
+  [ Bastian Blank ]
+  * Initial Python 3 support:
+    - Build-depend on python-six.
+
+  [ Aurelien Jarno ]
+  * [mipsel] Remove cobalt d-i files.
+  * [mipsel] Enable KEXEC like on mips.
+  * [mipsel] Explicitly unset RAPIDIO like on mips. 
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 20 Jan 2014 05:43:51 +0000
+
+linux (3.13~rc6-1~exp1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [rt] Disable until it is updated for 3.13 or later
+  * aufs: Update to aufs3.x-rcN-20131223
+  * [x86] staging: lustre: Make LUSTRE_LLITE_LLOOP tristate
+  * mm: Enable MEM_SOFT_DIRTY, NUMA_BALANCING but not
+    NUMA_BALANCING_DEFAULT_ENABLED
+  * ipv6: Enable IPV6_VTI as module
+  * netfilter: Enable NF_TABLES, NFT_EXTHDR, NFT_META, NFT_CT, NFT_RBTREE,
+    NFT_HASH, NFT_COUNTER, NFT_LOG, NFT_LIMIT, NFT_NAT, NFT_COMPAT,
+    IP_SET_HASH_NETPORTNET, IP_SET_HASH_NETNET, IP_NF_TARGET_SYNPROXY,
+    IP6_NF_TARGET_SYNPROXY as modules
+  * net/sched: Enable NET_CLS_BPF as module
+  * nfc: Enable NFC_DIGITAL, NFC_PORT100 as modules
+  * block: Enable BLK_DEV_NULL_BLK, BLK_DEV_SKD as modules
+  * SCSI: Enable SCSI_ESAS2R as module
+  * net/usb: Enable USB_NET_HUAWEI_CDC_NCM as module
+  * touchscreen: Enable TOUCHSCREEN_SUR40 as module
+  * [x86] video: Enable X86_SYSFB, FB_SIMPLE
+  * [x86] ACPI: Enable ACPI_EXTLOG
+  * [x86] touchscreen: Enable TOUCHSCREEN_TSC_SERIO as module
+  * [x86] tpm: Enable TCG_TIS_I2C_ATMEL, TCG_TIS_I2C_INFINEON,
+    TCG_TIS_I2C_NUVOTON, TCG_ST33_I2C, TCG_XEN as modules
+  * [amd64] misc: Enable INTEL_MIC_HOST as module
+  * [powerpc/powerpc64] block: Enable AIX_PARTITION
+  * net/sched: Change NET_CLS_CGROUP from built-in to module
+  * nfc: Disable NFC_NCI as no enabled drivers need it
+  * misc: Disable BMP085_I2C as unlikely to be useful
+
+  [ Aurelien Jarno ]
+  * [mipsel] Remove r5k-cobalt flavour.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 30 Dec 2013 02:36:11 +0100
+
+linux-tools (3.12.6-3) unstable; urgency=medium
+
+  * linux-tools: Explicitly enable/disable libunwind usage for all
+    architectures (fixes FTBFS on s390x and sparc)
+  * linux-tools: Only use libunwind on x86, as perf needs additional
+    porting work for other architectures (fixes FTBFS on arm and powerpc)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 02 Feb 2014 16:46:44 +0100
+
+linux-tools (3.12.6-2) unstable; urgency=medium
+
+  * linux-tools: Replace build-dependency on libunwind7-dev with
+    libunwind8-dev
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 02 Feb 2014 11:51:18 +0100
+
+linux (3.12.9-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.9
+    - Revert "ACPI: Add BayTrail SoC GPIO and LPSS ACPI IDs"
+      (regression in 3.12.7)
+    - GFS2: Increase i_writecount during gfs2_setattr_chown
+    - vfs: Fix a regression in mounting proc (regression in 3.12)
+    - fork: Allow CLONE_PARENT after setns(CLONE_NEWPID) (regression in 3.12)
+    - i2c: Re-instate body of i2c_parent_is_i2c_adapter() (regression in 3.12)
+    - writeback: Fix data corruption on NFS
+    - thp: fix copy_page_rep GPF by testing is_huge_zero_pmd once only
+    - [x86] ftrace: Load ftrace_ops in parameter not the variable holding it
+    - nilfs2: fix segctor bug that causes file system corruption
+    - md: fix problem when adding device to read-only array with bitmap.
+    - md/raid10: fix bug when raid10 recovery fails to recover a block.
+    - md/raid10: fix two bugs in handling of known-bad-blocks.
+    - md/raid5: Fix possible confusion when multiple write errors occur.
+    - mm: Make {,set}page_address() static inline if WANT_PAGE_VIRTUAL
+      (fixes FTBFS on sparc and m68k)
+    - [x86] drm/i915: Don't grab crtc mutexes in intel_modeset_gem_init()
+      (regression in 3.12.7)
+    - [arm] 7938/1: OMAP4/highbank: Flush L2 cache before disabling
+
+  [ Ben Hutchings ]
+  * HID: Enable HID_ELO, HID_XINMO as modules (Closes: #736369)
+  * xhci: Revert generalised sg support (Closes: #733826, #736274)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 01 Feb 2014 18:50:01 +0100
+
+linux (3.12.8-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.7
+    - [powerpc] kvm: fix rare but potential deadlock scene
+    - [m68k] TTY: pmac_zilog, check existence of ports in pmz_console_init()
+    - xhci: Limit the spurious wakeup fix only to HP machines (fixes
+      regression in 3.12)
+    - usb: chipidea: host: Only disable the vbus regulator if it is not NULL
+      (fixes regression in 3.12)
+    - aio: fix kioctx leak introduced by "aio: Fix a trinity splat"
+    - iser-target: Move INIT_WORK setup into isert_create_device_ib_res
+    - [x86] idle: Repair large-server 50-watt idle-power regression
+      (fixes regression in 3.10)
+    - ext4: call ext4_error_inode() if jbd2_journal_dirty_metadata() fails
+    - ext4: fix use-after-free in ext4_mb_new_blocks
+    - ext4: fix del_timer() misuse for ->s_err_report
+    - ext4: add explicit casts when masking cluster sizes
+    - ext4: fix bigalloc regression
+    - sched/rt: Fix rq's cpupri leak while enqueue/dequeue child RT entities
+    - net_dma: mark broken (fixes potential data loss)
+    - drm/i915: Take modeset locks around intel_modeset_setup_hw_state()
+    - drm/i915: Hold mutex across i915_gem_release
+    - drm/i915: Fix use-after-free in do_switch
+    - drm/i915: don't update the dri1 breadcrumb with modesetting
+    - drm/i915: Fix erroneous dereference of batch_obj inside reset_status
+    - ceph: Avoid data inconsistency due to d-cache aliasing in readpage()
+    - tg3: Expand 4g_overflow_test workaround to skb fragments of any size.
+    - cgroup: fix cgroup_create() error handling path
+    - [powerpc] auxvec.h: account for AT_HWCAP2 in AT_VECTOR_SIZE_BASE
+    - ath9k_htc: properly set MAC address and BSSID mask (CVE-2013-4579)
+      (Closes: #729573)
+    - KVM: nVMX: Unconditionally uninit the MMU on nested vmexit
+    - [x86] KVM: Fix APIC map calculation after re-enabling
+    - [powerpc] Fix bad stack check in exception entry
+    - libata: implement ATA_HORKAGE_NO_NCQ_TRIM and apply it to Micro M500 SSDs
+      (fixes potential data loss)
+    - radiotap: fix bitmap-end-finding buffer overrun
+    - mm: numa: serialise parallel get_user_page against THP migration
+    - mm: numa: call MMU notifiers on THP migration
+    - mm: clear pmd_numa before invalidating
+    - mm: numa: do not clear PTE for pte_numa update
+    - mm: numa: ensure anon_vma is locked to prevent parallel THP splits
+    - sched: numa: skip inaccessible VMAs
+    - mm: numa: clear numa hinting information on mprotect
+    - mm: fix TLB flush race between migration, and change_protection_range
+    - mm: numa: guarantee that tlb_flush_pending updates are visible before
+      page table updates
+    - mm/mempolicy: correct putback method for isolate pages if failed
+    - mm/compaction: respect ignore_skip_hint in update_pageblock_skip
+    - mm/hugetlb: check for pte NULL pointer in __page_check_address()
+    - mm: munlock: fix a bug where THP tail page is encountered
+    - mm: munlock: fix deadlock in __munlock_pagevec()
+    - mm: fix use-after-free in sys_remap_file_pages
+    - Input: allocate absinfo data when setting ABS capability
+    - GFS2: Fix use-after-free race when calling gfs2_remove_from_ail
+    - GFS2: Fix slab memory leak in gfs2_bufdata
+    - GFS2: Fix incorrect invalidation for DIO/buffered I/O
+    - [s390] 3270: fix allocation of tty3270_screen structure
+    - [sh] always link in helper functions extracted from libgcc
+    - selinux: look for IPsec labels on both inbound and outbound packets
+    - selinux: process labeled IPsec TCP SYN-ACK packets properly in
+      selinux_ip_postroute()
+    - aio: clean up and fix aio_setup_ring page mapping
+    - aio/migratepages: make aio migrate pages sane
+    - ACPIPHP / radeon / nouveau: Fix VGA switcheroo problem related to hotplug
+      (regression in 3.12)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.8
+    - IPv6: Fixed support for blackhole and prohibit routes
+    - net: do not pretend FRAGLIST support
+    - tun: unbreak truncated packet signalling
+    - macvtap: signal truncated packets
+    - br: fix use of ->rx_handler_data in code executed on non-rx_handler path
+    - inet: fix NULL pointer Oops in fib(6)_rule_suppress
+    - vxlan: release rt when found circular route
+    - ipv6: fix illegal mac_header comparison on 32bit
+    - ip_gre: fix msg_name parsing for recvfrom/recvmsg
+    - net: inet_diag: zero out uninitialized idiag_{src,dst} fields
+    - drivers/net/hamradio: Integer overflow in hdlcdrv_ioctl()
+    - hamradio/yam: fix info leak in ioctl
+    - net: fec: fix potential use after free
+    - rds: prevent dereference of a NULL device
+    - arc_emac: fix potential use after free
+    - net: rose: restore old recvmsg behavior (regression in 3.12.4)
+    - vlan: Fix header ops passthru when doing TX VLAN offload.
+    - virtio-net: fix refill races during restore
+    - net: llc: fix use after free in llc_ui_recvmsg
+    - netpoll: Fix missing TXQ unlock and and OOPS.
+    - bridge: use spin_lock_bh() in br_multicast_set_hash_max
+    - sfc: Add length checks to efx_xmit_with_hwtstamp() and
+      efx_ptp_is_ptp_tx()
+    - sfc: PTP: Moderate log message on event queue overflow
+    - sfc: Rate-limit log message for PTP packets without a matching timestamp
+      event
+    - [arm] fix "bad mode in ... handler" message for undefined instructions
+    - [arm] 7923/1: mm: fix dcache flush logic for compound high pages
+    - [hppa] Ensure full cache coherency for kmap/kunmap
+    - clk: clk-divider: fix divisor > 255 bug
+    - mfd: rtsx_pcr: Disable interrupts before cancelling delayed works
+    - netfilter: fix wrong byte order in nf_ct_seqadj_set internal information
+      (regression in 3.12)
+    - netfilter: nf_nat: fix access to uninitialized buffer in IRC NAT helper
+    - x86, fpu, amd: Clear exceptions in AMD FXSAVE workaround
+      (CVE-2014-1438) (Closes: #733551)
+    - sched: Fix race on toggling cfs_bandwidth_used
+    - sched: Fix cfs_bandwidth misuse of hrtimer_expires_remaining
+    - sched: Fix hrtimer_cancel()/rq->lock deadlock
+
+  [ Ben Hutchings ]
+  * [hppa] Update configuration, thanks to Helge Deller (Closes: #733895)
+    - Change AGP, AGP_PARISC from modules to built-in, to work around
+      race condition between DRM and AGP
+    - Enable DEBUG_STACKOVERFLOW
+    - udeb: Build packages for the parisc64-smp flavour instead of the
+      removed parisc flavour (fixes FTBFS)
+  * linux-image: Make maintainer scripts less verbose (Closes: #734266)
+  * [m68k] Enable EARLY_PRINTK (Closes: #734289)
+  * crypto: Enable more processor-specific algorithms and drivers:
+    - [amd64] Enable CRYPTO_CRCT10DIF_PCLMUL, CRYPTO_SHA256_SSSE3,
+      CRYPTO_SHA512_SSSE3, CRYPTO_GHASH_CLMUL_NI_INTEL,
+      CRYPTO_CAMELLIA_AESNI_AVX_X86_64, CRYPTO_CAMELLIA_AESNI_AVX2_X86_64,
+      CRYPTO_CAST5_AVX_X86_64, CRYPTO_CAST6_AVX_X86_64,
+      CRYPTO_SERPENT_AVX2_X86_64 as modules (Closes: #734376)
+    - [arm] Enable CRYPTO_SHA1_ARM, CRYPTO_AES_ARM as modules
+    - [powerpc] Enable CRYPTO_SHA1_PPC as module
+    - [sparc] Enable CRYPTO_CRC32C_SPARC64, CRYPTO_MD5_SPARC64,
+      CRYPTO_SHA1_SPARC64, CRYPTO_SHA256_SPARC64, CRYPTO_SHA512_SPARC64,
+      CRYPTO_AES_SPARC64, CRYPTO_CAMELLIA_SPARC64, CRYPTO_DES_SPARC64,
+      CRYPTO_DEV_NIAGARA2 as modules
+    - [x86] Enable CRYPTO_CRC32_PCLMUL as module
+  * [powerpc] Remove AT_HWCAP2 from auxv to avoid module ABI change
+  * [rt] Update to 3.12.6-rt9:
+    - rcu: Don't activate RCU core on NO_HZ_FULL CPUs
+    - timers: do not raise softirq unconditionally
+    - rcutree/rcu_bh_qs: disable irq while calling rcu_preempt_qs()
+  * Revert "net: unix: allow set_peek_off to fail", included in 3.12.8,
+    as it would cause an ABI change
+  * media: Enable VIDEO_STK1160_COMMON (new dependency of VIDEO_STK1160)
+    as module (Closes: #735870)
+  * [x86] brcm80211: Enable BRCMFMAC as module, and BRCMFMAC_SDIO
+    (Closes: #735245)
+  * [x86] staging: lustre: Make LUSTRE_LLITE_LLOOP tristate
+
+  [ Ian Campbell ]
+  * [armel/kirkwood] Fix interrupt handling on non-DT platforms (Closes: #735172)
+  * [armhf/armmp] Add mmci driver to mmc-module udeb.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 19 Jan 2014 19:22:22 +0000
+
+linux (3.12.6-2) unstable; urgency=medium
+
+  [ Bastian Blank ]
+  * [x86] Make MICROCODE built-in for early microcode loading.
+
+  [ Ben Hutchings ]
+  * [armhf] linux-headers: Fix typo in compiler dependency
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 29 Dec 2013 16:56:20 +0100
+
+linux (3.12.6-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.4
+    - net: x86: bpf: don't forget to free sk_filter (v2)
+    - net: Fix "ip rule delete table 256" (Closes: #724783)
+    - net-tcp: fix panic in tcp_fastopen_cache_set()
+    - inet: prevent leakage of uninitialized memory to user in recv syscalls
+      (CVE-2013-6405)
+    - ping: prevent NULL pointer dereference on write to msg_name
+      (CVE-2013-6432)
+    - ipv6: fix leaking uninitialized port number of offender sockaddr
+    - netfilter: push reasm skb through instead of original frag skbs
+    - packet: fix use after free race in send path when dev is released
+    - gso: handle new frag_list of frags GRO packets
+    - net: update consumers of MSG_MORE to recognize MSG_SENDPAGE_NOTLAST
+    - xfs: add capability check to free eofblocks ioctl
+    - iommu/vt-d: Fixed interaction of VFIO_IOMMU_MAP_DMA with IOMMU address
+      limits
+    - aio: Fix a trinity splat
+    - aio: prevent double free in ioctx_alloc
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.5
+    - [s390,s390x] crypto: Fix aes-xts parameter corruption
+    - crypto: scatterwalk - Set the chain pointer indication bit
+    - crypto: ccm - Fix handling of zero plaintext when computing mac
+    - crypto: authenc - Find proper IV address in ablkcipher callback
+    - [armhf] mvebu: use the virtual CPU registers to access coherency
+      registers
+    - vfs: fix subtle use-after-free of pipe_inode_info
+    - SCSI: bfa: Fix crash when symb name set for offline vport
+    - SCSI: hpsa: do not discard scsi status on aborted commands
+    - [hppa] fix mmap(MAP_FIXED|MAP_SHARED) to already mmapped address
+    - net: update consumers of MSG_MORE to recognize MSG_SENDPAGE_NOTLAST
+    - SCSI: Disable WRITE SAME for RAID and virtual host adapter drivers
+    - tg3: avoid double-freeing of rx data memory
+    - crypto: scatterwalk - Use sg_chain_ptr on chain entries
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.6
+    - ALSA: memalloc.h - fix wrong truncation of dma_addr_t
+    - [arm] 7912/1: check stack pointer in get_wchan
+    - [arm] 7913/1: fix framepointer check in unwind_frame
+    - KVM: Improve create VCPU parameter (CVE-2013-4587)
+    - [x86] KVM: Fix potential divide by 0 in lapic (CVE-2013-6367)
+    - [x86] KVM: Convert vapic synchronization to _cached functions
+      (CVE-2013-6368)
+    - [x86] KVM: fix guest-initiated crash with x2apic (CVE-2013-6376)
+    - xfs: growfs overruns AGFL buffer on V4 filesystems
+    - futex: fix handling of read-only-mapped hugepages
+    - nfsd: when reusing an existing repcache entry, unhash it first
+    - [armhf] usb: musb: musb_cppi41: handle pre-mature TX complete interrupt
+    - powerpc: Fix PTE page address mismatch in pgtable ctor/dtor
+    - mm: memcg: do not allow task about to OOM kill to bypass the limit
+    - mm: memcg: fix race condition between memcg teardown and swapin
+    - cfg80211: disable 5/10 MHz support for all drivers
+    - Revert "mac80211: allow disable power save in mesh"
+    - mac80211: fix scheduled scan rtnl deadlock
+    - iwlwifi: mvm: check sta_id/drain values in debugfs
+    - Btrfs: fix access_ok() check in btrfs_ioctl_send()
+    - dm snapshot: avoid snapshot space leak on crash
+    - dm array: fix a reference counting bug in shadow_ablock
+    - dm space map metadata: return on failure in sm_metadata_new_block
+    - dm space map: disallow decrementing a reference count below zero
+    - dm table: fail dm_table_create on dm_round_up overflow
+    - dm thin: switch to read only mode if a mapping insert fails
+    - dm thin: switch to read-only mode if metadata space is exhausted
+    - dm thin: always fallback the pool mode if commit fails
+    - dm thin: re-establish read-only state when switching to fail mode
+    - dm thin: allow pool in read-only mode to transition to read-write mode
+    - media/cxd2820r_core: Fix regression in 3.12.3
+    - sched: Avoid throttle_cfs_rq() racing with period_timer stopping
+    - Btrfs: do a full search everytime in btrfs_search_old_slot
+    - Btrfs: reset intwrite on transaction abort
+    - Btrfs: fix memory leak of chunks' extent map
+    - Btrfs: fix hole check in log_one_extent
+    - Btrfs: fix incorrect inode acl reset
+    - Btrfs: take ordered root lock when removing ordered operations inode
+    - Btrfs: do not run snapshot-aware defragment on error
+    - Btrfs: fix a crash when running balance and defrag concurrently
+    - Btrfs: fix lockdep error in async commit
+
+  [ Ben Hutchings ]
+  * udeb: Add ohci-pci to usb-modules (Closes: #730789)
+  * cifs: Enable CIFS_SMB2
+  * [hppa] Update flavours and configuration, thanks to Helge Deller
+    (Closes: #721191)
+    - Remove parisc-smp and parisc64 (UP) flavours
+    - Build with gcc-4.8
+    - rtc: Enable HP_SDC_RTC as module
+    - megaraid: Enable MEGARAID_NEWGEN
+    - [/parisc64-smp] Enable MLONGCALLS, DISCONTIGMEM_MANUAL
+    - [/parisc64-smp] Enable PATA_SIL680, AGP, AGP_PARISC, DRM,
+      DRM_RADEON as modules
+  * firmware: Disable FW_LOADER_USER_HELPER (see #725714)
+  * firmware: Improve logging of success/failure for direct file loading
+  * media: az6007: support Technisat Cablestar Combo HDCI (minus remote)
+    (Closes: #732106)
+  * linux-source: Compress with gzip -1 (Closes: #725492)
+  * [alpha] Prevent a NULL ptr dereference in csum_partial_copy
+  * Set ABI to 1
+  * [ia64] Enable PSTORE, EFI_VARS_PSTORE
+  * [x86,ia64] udeb: Remove zlib-modules as zlib is now built-in
+  * [rt] Update to 3.12.5-rt7:
+    - ptrace: fix ptrace vs tasklist_lock race
+    - migrate_disable pushd down in atomic_dec_and_spin_lock
+    - migrate_disable pushd down in rt_spin_trylock_irqsave
+    - migrate_disable pushd down in rt_write_trylock_irqsave
+    - Revert "sched/rt: Fix wait_task_interactive() to test rt_spin_lock state"
+    - seqlock: consolidate spin_lock/unlock waiting with spin_unlock_wait
+    - softirq: make migrate disable/enable conditioned on softirq_nestcnt
+
+  [ Ian Campbell ]
+  * [armel/kirkwood+orion] Reenable MARVELL_PHY (Closes: #723177)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 21 Dec 2013 03:12:38 +0000
+
+linux (3.12.3-1~exp1) experimental; urgency=medium
+
+  * New upstream stable update:
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.1
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.2
+    - libertas: potential oops in debugfs (CVE-2013-6378)
+    - exec/ptrace: fix get_dumpable() incorrect tests (CVE-2013-2929)
+    https://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.12.3
+
+  [ Ben Hutchings ]
+  * [rt] Update to 3.12.0-rt2 and reenable
+  * HID: Enable UHID as module (Closes: #729338)
+  * [sh4] Remove some accidental inconsistencies in config
+  * Enable CHECKPOINT_RESTORE (Closes: #682700)
+  * Enable JUMP_LABEL (Closes: #730071)
+  * [x86] staging: Enable CRYSTALHD as module (Closes: #730832)
+  * aufs: Update to aufs3.12-20131111 (no functional change)
+  * [rt] Update to 3.12.1-rt4
+  * udeb: Add snd-usb-hiface to sound-modules, thanks to Samuel Thibault
+    (Closes: #730418)
+  * linux-image-dbg: Use correct objcopy command when cross-compiling,
+    thanks to Jon Severinsson
+
+  [ Bastian Blank ]
+  * Use compiler name instead of Linux version in compiler meta-packages.
+
+  [ Ian Campbell ]
+  * [armhf]: Enable AHCI_IMX in armmp+lpae flavours.
+
+  [ Aurelien Jarno ]
+  * [mips/octeon] Add kernel udebs.
+  * [mipsel] Add a loongson-2e flavour.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 05 Dec 2013 14:34:39 +0000
+
+linux-tools (3.12.6-1) unstable; urgency=medium
+
+  * New upstream stable update
+    - perf tools: Remove cast of non-variadic function to variadic
+    - perf tools: Synthesize anon MMAP records again
+
+  [ Ben Hutchings ]
+  * linux-tools: Replace build-dependency on binutils-dev with
+    libiberty-dev (or old binutils-dev, for ease of backporting)
+    (Closes: #730883)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 30 Nov 2013 23:48:32 +0000
+
+linux-tools (3.12-1~exp1) experimental; urgency=low
+
+  * New upstream release (Closes: #729197)
+  * [x86, powerpc, ppc64] linux-tools: Build perf with libnuma
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 18 Nov 2013 05:14:34 +0000
+
+linux (3.12-1~exp1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.12
+
+  [ Ben Hutchings ]
+  * namespaces: Enable USER_NS (Closes: #712870)
+    - Restrict creation of user namespaces to root (CAP_SYS_ADMIN) by
+      default (sysctl: kernel.unprivileged_userns_clone)
+  * aufs: Update to aufs3.x-rcN-20131104
+    - mmap() holds a reference to the union file as well as the branch file
+  * [armel/{iop32x,ixp4xx}] Disable BPF_JIT, MEMCG, USER_NS to reduce kernel
+    size
+  * [arm,x86,s390,s390x] Introduce linux-compiler meta-packages to allow use
+    of foreign linux-headers packages with a native multilib compiler
+  * perf/ftrace: Fix paranoid level for enabling function tracer
+    (CVE-2013-2930)
+  * media/usb/gspca: Enable USB_GSPCA_STK1135 as module
+  * net/ethernet: Enable I40E as module
+  * net/usb: Enable USB_NET_SR9700 as module
+  * net/wireless/rt2x00: Enable RT2800USB_RT3573
+  * openvswitch: Enable OPENVSWITCH_VXLAN
+  * net/sched: Enable NET_SCH_FQ as module
+  * [x86] HID: Enable I2C_HID as module (Closes: #729801)
+  * [x86] input/misc: Enable INPUT_IDEAPAD_SLIDEBAR as module
+  * [x86] fs: Enable LUSTRE_FS, LUSTRE_LLITE_LOOP, LNET_XPRT_IB as modules
+  * [x86] thermal: Enable INTEL_POWERCLAMP, X86_PKG_TEMP_THERMAL as modules
+  * [armhf/armmp] udeb: Add zlib-modules
+
+  [ Thorsten Glaser ]
+  * Update m68k config (Closes: #728392):
+    - enable COMPAT_BRK by explicit upstream (m68k maintainer) request
+    - re-enable FPU emulation after discussion upstream, by popular request
+    - disable ADB_MACIISI by upstream (Mac68k maintainer) request
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 17 Nov 2013 22:41:26 +0000
+
+linux (3.12~rc7-1~exp1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20131014
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 28 Oct 2013 04:12:20 +0000
+
+linux (3.11.10-1) unstable; urgency=medium
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.9
+    - net/mlx4_core: Fix call to __mlx4_unregister_mac
+    - net: sctp: do not trigger BUG_ON in sctp_cmd_delete_tcb
+    - cxgb3: Fix length calculation in write_ofld_wr() on 32-bit architectures
+    - tcp: gso: fix truesize tracking
+    - xen-netback: Handle backend state transitions in a more robust way
+    - xen-netback: transition to CLOSED when removing a VIF
+    - [x86] hyperv-fb: add pci stub
+    - tracing: Fix potential out-of-bounds in trace_get_user()
+    - perf: Fix perf ring buffer memory ordering
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.10
+    - ACPICA: DeRefOf operator: Update to fully resolve FieldUnit and
+      BufferField refs.
+    - libertas: potential oops in debugfs (CVE-2013-6378)
+    - aacraid: prevent invalid pointer dereference
+    - ACPICA: Return error if DerefOf resolves to a null package element.
+    - ACPICA: Fix for a Store->ArgX when ArgX contains a reference to a field.
+    - USB: mos7840: fix tiocmget error handling
+    - Btrfs: relocate csums properly with prealloc extents
+    - [s390,s390x] crypto: s390 - Fix aes-cbc IV corruption
+    - can: c_can: Fix RX message handling, handle lost message before EOB
+    - ipc,shm: correct error return value in shmctl (SHM_UNLOCK)
+    - ipc,shm: fix shm_file deletion races
+    - drm/nvc0-/gr: fix a number of missing explicit array terminators...
+    - sched, idle: Fix the idle polling state logic
+    - [x86] ACPI / EC: Ensure lock is acquired before accessing ec struct
+      members
+    - [x86] ACPI / video: Quirk initial backlight level 0
+    - Staging: zram: Fix access of NULL pointer
+    - Drivers: hv: vmbus: Fix a bug in channel rescind code
+    - rt2x00: fix a crash bug in the HT descriptor handling fix
+    - Bluetooth: revert: "Bluetooth: Add missing reset_resume dev_pm_ops"
+    - exec/ptrace: fix get_dumpable() incorrect tests (CVE-2013-2929)
+
+  [ Ben Hutchings ]
+  * net: clamp ->msg_namelen instead of returning an error
+  * tcp: tsq: restore minimal amount of queueing
+  * rds: prevent BUG_ON triggered on congestion update to loopback
+    (CVE-2012-2372)
+  * ipv6: fix headroom calculation in udp6_ufo_fragment (CVE-2013-4563)
+  * [s390,s390x] qeth: avoid buffer overflow in snmp ioctl (CVE-2013-6381)
+  * xfs: underflow bug in xfs_attrlist_by_handle() (CVE-2013-6382)
+  * [x86] Enable CHROMEOS_LAPTOP as module (Closes: #731271)
+    - iio/light: Enable SENSORS_TSL2563, SENSORS_ISL29018, TSL2583 as modules
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 04 Dec 2013 14:49:01 +0000
+
+linux (3.11.8-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.8
+    - bcache: Fixed incorrect order of arguments to bio_alloc_bioset()
+    - cgroup: fix to break the while loop in cgroup_attach_task() correctly
+    - mac80211: drop spoofed packets in ad-hoc mode
+    - mac80211: fix crash if bitrate calculation goes wrong
+    - rtlwifi: rtl8192cu: Fix error in pointer arithmetic
+    - jfs: fix error path in ialloc
+    - SCSI: sd: call blk_pm_runtime_init before add_disk
+    - ecryptfs: Fix memory leakage in keystore.c
+    - eCryptfs: fix 32 bit corruption issue
+    - raid5: set bio bi_vcnt 0 for discard request
+    - raid5: avoid finding "discard" stripe
+    - libata: make ata_eh_qc_retry() bump scmd->allowed on bogus failures
+    - Revert "epoll: use freezable blocking call"
+    - Revert "select: use freezable blocking call"
+    - md: Fix skipping recovery for read-only arrays.
+    - vhost/scsi: Fix incorrect usage of get_user_pages_fast write parameter
+    - Fix a few incorrectly checked [io_]remap_pfn_range() calls
+    - lib/scatterlist.c: don't flush_kernel_dcache_page on slab page
+    - aacraid: missing capable() check in compat ioctl
+    - mm: Wait for THP migrations to complete during NUMA hinting faults
+    - mm: Prevent parallel splits during THP migration
+    - mm: Close races between THP migration and PMD numa clearing
+    - mm/pagewalk.c: fix walk_page_range() access of wrong PTEs
+    - drm: Prevent overwriting from userspace underallocating core ioctl
+      structs
+    - seq_file: always update file->f_pos in seq_lseek()
+
+  [ Ben Hutchings ]
+  * perf/ftrace: Fix paranoid level for enabling function tracer
+    (CVE-2013-2930)
+  * [armhf] Bump ABI to 2
+  * [armhf/armmp] udeb: Add zlib-modules (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 13 Nov 2013 05:36:36 +0000
+
+linux (3.11.7-1) unstable; urgency=low
+  
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.7
+    - tcp: TSO packets automatic sizing
+    - tcp: TSQ can use a dynamic limit
+    - tcp: must unclone packets before mangling them
+    - tcp: fix incorrect ca_state in tail loss probe (Closes: #728726)
+
+  [ Ben Hutchings ]
+  * [armel] udeb: Re-enable iop32x flavour
+  * Bump ABI to 2 due to TCP changes
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 09 Nov 2013 20:18:02 +0000
+
+linux (3.11.6-2) unstable; urgency=medium
+
+  [ Ben Hutchings ]
+  * [sh4] Reduce compiler version to gcc-4.7, as gcc-4.8 is not yet
+    available
+  * [ia64] Reduce compiler version to gcc-4.6, matching gcc-defaults
+    (fixes FTBFS)
+  * [armhf] Bump ABI to 1a, as enabling Xen and KVM support changes ABI
+  * net: Fix infinite loop in in skb_flow_dissect() (CVE-2013-4348)
+  * net: do not call sock_put() on TIMEWAIT sockets
+  * l2tp: fix kernel panic when using IPv4-mapped IPv6 addresses
+  * net: heap overflow in __audit_sockaddr()
+  * proc connector: fix info leaks
+  * bridge: update mdb expiration timer upon reports.
+  * Revert "bridge: only expire the mdb entry when query is received"
+  * unix_diag: fix info leak
+  * be2net: pass if_id for v1 and V2 versions of TX_CREATE cmd
+  * net: fix cipso packet validation when !NETLABEL
+  * inet: fix possible memory corruption with UDP_CORK and UFO
+  * [arm] 7851/1: check for number of arguments in syscall_get/set_arguments()
+  * ext[34]: fix double put in tmpfile
+  * dm snapshot: fix data corruption (CVE-2013-4299)
+  * i2c: ismt: initialize DMA buffer
+  * mm: fix BUG in __split_huge_page_pmd
+  * writeback: fix negative bdi max pause
+
+  [ Aurelien Jarno ]
+  * UAPI: include <asm/byteorder.h> in linux/raid/md_p.h.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 01 Nov 2013 05:23:13 +0000
+
+linux-tools (3.11-3) unstable; urgency=low
+
+  * linux-tools: Replace build-dependency on libunwind8-dev with
+    libunwind7-dev, as the new libunwind will not enter testing soon
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 29 Oct 2013 02:12:36 +0000
+
+linux (3.11.6-1) unstable; urgency=low
+  
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.6
+    - random: run random_int_secret_init() run after all late_initcalls
+    - ext4: fix memory leak in xattr
+    - KVM: PPC: Book3S HV: Fix typo in saving DSCR
+    - ipc: Apply mainline changes up to 3.12-rc5
+
+  [ Ian Campbell ]
+  * [armhf] Enable Xen and virtio for armmp and armmp-lpae as well as KVM for
+    armmp-lpae only.
+
+  [ Ben Hutchings ]
+  * kbuild: Use -nostdinc in compile tests (Closes: #726861, workaround
+    for #717557)
+  * Disable CC_OPTIMIZE_FOR_SIZE (Closes: #635899, fixes FTBFS on mips,
+    mipsel, powerpc) [!armel/{iop32x,ixp4xx,kirkwood,orion5x},m68k]
+  * aufs: Update to aufs3.11-20131014
+    - Remove dependency on loop module (Closes: #727243)
+  * [armhf/armmp] udeb: Add ppp-modules
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 27 Oct 2013 19:02:04 +0000
+
+linux-tools (3.11-2) unstable; urgency=low
+
+  * linux-tools: Limit build-dependency on libunwind8-dev to architectures
+    where it is available and needed
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 27 Oct 2013 18:01:37 +0000
+
+linux-tools (3.11-1) unstable; urgency=low
+
+  * New upstream release
+  * linux-tools: Build perf with libaudit and libunwind
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 19 Oct 2013 02:38:59 +0100
+
+linux (3.11.5-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.1
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.2
+    - media: siano: fix divide error on 0 counters (Closes: #719623)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.3
+    - HID: multitouch: validate indexes details (CVE-2013-2897)
+    - HID: LG: validate HID output report details (CVE-2013-2893)
+    - HID: zeroplus: validate output report details (CVE-2013-2889)
+    - HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails (CVE-2013-2894)
+    - HID: steelseries: validate output report details (CVE-2013-2891)
+    - HID: logitech-dj: validate output report details (CVE-2013-2895)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.4
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.11.5
+    - cpqarray: fix info leak in ida_locked_ioctl() (CVE-2013-2147)
+    - cciss: fix info leak in cciss_ioctl32_passthru() (CVE-2013-2147)
+    - tuntap: correctly handle error in tun_set_iff() (CVE-2013-4343)
+    - net: sctp: fix ipv6 ipsec encryption bug in sctp_v6_xmit (CVE-2013-4350)
+    - ipv6: udp packets following an UFO enqueued packet need also be handled
+      by UFO (CVE-2013-4387)
+
+  [ Ben Hutchings ]
+  * udeb: Update config to match previous kernel config changes:
+    - Remove ext{2,3}-modules
+    - Update description of ext4-modules and let it provide ext{2,3}-modules
+    - Remove aic7xxx_old, enc28j60 and imm from module lists
+    - [sh4] kernel-image no longer provides ext3-modules
+  * [hppa] udeb: kernel-image does not provide ext2-modules (since 3.2.7-1)
+  * [arm] thermal: Re-enable CPU_THERMAL as built-in (regression in
+    3.10~rc4-1~exp1)
+  * Stop providing virtual packages linux-image (Closes: #724569),
+    linux-headers and linux-source
+  * hwmon: Enable SENSORS_JC42, SENSORS_NCT6775 as modules (Closes: #722062)
+  * compiler/gcc4: Add quirk for 'asm goto' miscompilation bug
+  * [arm64] Build a linux-libc-dev package (Closes: #695241)
+  * crypto: ansi_cprng - Fix off by one error in non-block size request
+    (CVE-2013-4345)
+  * mvsas: Recognise device/subsystem 9485/9485 as 88SE9485
+  * Set ABI to 1
+  * [i386] Remove xen-linux-system-<version> packages (Closes: #726010)
+
+  [ Ian Campbell ]
+  * [armhf] Enable CONFIG_PCI for multiplatform flavour.
+    - Enable standard NIC and SCSI modules and include in udebs.
+  * [armhf] Add multiplatform + LPAE flavour (armmp-lpae).
+  * [armhf] Remove mx5, omap and vexpress flavours. These are all supported
+    by the multiplatform flavour.
+  * [armel/kirkwood] Add orion-ehci, mvmdio and of_mdio modules to udebs.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 17 Oct 2013 14:46:41 +0100
+
+linux (3.11-1~exp1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.11
+
+  [ Ben Hutchings ]
+  * Disable drivers for various platform/undetectable devices by default:
+    - ata: Disable PATA_ARASAN_CF
+    - hwrng: Disable HW_RANDOM_TIMERIOMEM
+    - mdio: Disable MDIO_BITBANG
+    - media: Disable SOC_CAMERA
+    - media/radio: Disable I2C_SI470X, RADIO_SAA7706H, RADIO_SI4713,
+      RADIO_TEA5764, RADIO_TEF6862, RADIO_WL1273
+    - mfd: Disable HTC_PASIC3, MFD_PCF50633, MFD_SM501, TPS65010
+    - mtd: Disable MTD_ONENAND_GENERIC
+    - mmc: Disable MMC_SPI, MMC_SDHCI_PLTFM
+    - net/can: Disable CAN_MCP251X
+    - net/ethernet: Disable DNET, ENC28J60, ETHOC, KS8842, KS8851, KS8851_MLL,
+      WIZNET_W5100, WIZNET_W5300
+    - net/wireless: Disable LIBERTAS_SPI, P54_SPI
+    - parport: Disable PARPORT_AX88796
+    - power: Disable BATTERY_BQ27x00, BATTERY_DS2760, BATTERY_DS2782,
+      BATTERY_MAX17040
+    - regulator: Disable all drivers
+    - rtc: Disable all drivers except RTC_DRV_CMOS
+    - serial: Disable SERIAL_MAX3100
+    - spi: Disable SPI_TLE62X0
+    - uio: Disable UIO_PDRV, UIO_PDRV_GENIRQ
+    - USB: Disable USB_C67X00_HCD, USB_ISP116X_HCD, USB_R8A66597_HCD
+    - video: Disable FB_METRONOME
+    - w1: Disable W1_SLAVE_DS2760
+  * [x86] mtd: Disable MTD_NAND_PLATFORM
+  * [x86] power: Disable PDA_POWER
+  * [x86] video: Disable FB_S1D13XXX
+  * Disable some old non-hotplug PCI drivers:
+    - SCSI: Disable SCSI_AIC7XXX_OLD
+    - [x86] mtd: Disable MTD_PMC551
+    - [x86] net/wan: Disable SBNI
+  * Disable parport drivers that are no longer likely to be useful:
+    - block: Disable PARIDE
+    - media: Disable VIDEO_BWQCAM, VIDEO_CQCAM, VIDEO_W9966
+    - SCSI: Disable SCSI_IMM, SCSI_PPA
+    - [x86] net/ethernet: Disable ATP
+  * bluetooth: Disable BT_HCIBTUART; the serial_cs and hci_uart drivers
+    should be used instead
+  * PCI: Disable PCIEPORTBUS in configurations for systems without PCI
+    Express: armel/{iop32x,ixp4xx}, mips/!octeon, mipsel/*, sh4/*
+  * [armhf/{armmp,mx5}] cpufreq: Enable GENERIC_CPUFREQ_CPU0 as module,
+    replacing CPU_FREQ_IMX
+  * [armhf/armmp] Enable PINCTRL_WM8850, replacing GPIO_VT8500
+  * [powerpc/powerpc64] Enable CPU_FREQ_CBE (previously CBE_CPUFREQ) as module
+  * [armel] Re-enable iop32x and ixp4xx flavours
+  * aufs: Update to aufs3.x-rcN-20130909
+
+  [ Bastian Blank ]
+  * Symlink doc directory in linux-headers packages.
+  * Make gcc-4.8 the default compiler.
+  * Use default font selection.
+  * Enable NFS 4.2 client support.
+  * Use ext4 for all ext-variants.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 12 Sep 2013 03:57:27 +0100
+
+linux (3.11~rc7-1~exp1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [arm,mips,s390,sh4] Enable KPROBES
+  * trace: Enable KPROBE_EVENT (Closes: #640953)
+  * trace: Enable UPROBES, UPROBE_EVENT (Closes: #691167)
+  * irq: Always define devm_{request_threaded,free}_irq() (fixes FTBFS on
+    s390,s390x)
+  * [armel] Disable iop32x and ixp4xx flavours (fixes FTBFS)
+  * Clean up maintainer scripts and templating system
+    - Move all templates under debian/templates
+    - linux-image: Remove undocumented $KERNEL_ARCH variable from hook
+      environment
+    - Use only one template syntax (@keyword@) and do all substitutions
+      in gencontrol.py
+    - linux-image.postinst: Remove debconf warning about ramdisk variable in
+      /etc/kernel-img.conf
+    - linux-image.postinst: Remove debconf warning about missing firmware;
+      this should now be redundant and it annoys users that don't need the
+      files (Closes: #612822)
+  * Update Brazilian Portugese debconf template translations
+    (Fernando Ike de Oliveira) (Closes: #719725)
+  * hid: Enable HID_HUION as module (Closes: #721002)
+  * [powerpc,x86] hid: Enable HID_APPLEIR as module
+  * ACPI: Enable ACPI_INITRD_TABLE_OVERRIDE (Closes: #721310)
+  * net: Enable NET_MPLS_GSO
+  * nfc: Enable NFC_SIM as module
+  * md: Enable DM_SWITCH as module
+  * net: Enable NLMON as module
+  * wireless: Enable ATH10K, ATH10K_PCI as modules
+  * media: Enable VIDEO_USBTV as module
+  * video: Enable FB_SMSCUFX as module
+  * usb/serial: Enable USB_SERIAL_WISHBONE, USB_SERIAL_FLASHLOADER,
+    USB_SERIAL_SUUNTO as modules
+  * infiniband: Enable INFINIBAND_ISERT as module
+  * xen: Enable XEN_BALLOON_MEMORY_HOTPLUG
+  * fs: Enable QNX6FS_FS as module
+  * f2fs: Enable F2FS_FS_SECURITY
+  * 9p: Enable 9P_FS_SECURITY
+  * sunrpc: Enable SUNRPC_DEBUG
+  * vhost: Enable VHOST_SCSI as module
+  * [x86] video: Enable FB_HYPERV as module
+  * [x86] snd-hda-intel: Enable SND_HDA_I915
+  * [x86] mmc: Enable MMC_SDHCI_ACPI as module
+  * [x86] comedi: Enable COMEDI_ADV_PCI1724, COMEDI_NI_LABPC_PCI (formerly
+    COMEDI_NI_LABPC) as modules
+  * [x86] Enable MLX5_INFINIBAND as module
+  * [amd64] iommu: Enable AMD_IOMMU_V2
+  * [x86,ia64] fs: Enable EFIVAR_FS as module
+  * wireless/ti: Disable WL_TI on all configurations except armhf/armmp
+  * [hppa,mips,mipsel,sh4,sparc] ehci-hcd: Enable USB_EHCI_ROOT_HUB_TT and
+    USB_EHCI_TT_NEWSCHED in all configurations, consistent with other
+    architectures
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 01 Sep 2013 05:15:57 +0100
+
+linux-tools (3.11~rc4-1~exp1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * linux-tools: Build perf documentation out-of-tree, as this now works
+    and our previous workaround does not
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 08 Aug 2013 16:21:00 +0200
+
+linux (3.11~rc4-1~exp1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20130805
+
+  [ Hector Oron ]
+  * [armhf/armmp] Enable NET_CALXEDA_XGMAC as module (Closes: #717269) 
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 08 Aug 2013 13:09:47 +0200
+
+linux (3.10.11-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.8
+    - [arm] perf/arm: Fix armpmu_map_hw_event()
+    - memcg: don't initialize kmem-cache destroying work for root caches
+    - fs/proc/task_mmu.c: fix buffer overflow in add_page_map()
+    - elevator: Fix a race in elevator switching
+    - mac80211: fix infinite loop in ieee80211_determine_chantype
+    - can: pcan_usb: fix wrong memcpy() bytes length
+    - cfg80211: fix P2P GO interface teardown
+    - ASoC: dapm: Fix empty list check in dapm_new_mux()
+    - ALSA: 6fire: make buffers DMA-able (pcm)
+    - ALSA: 6fire: make buffers DMA-able (midi)
+    - USB: ti_usb_3410_5052: fix big-endian firmware handling
+    - USB: mos7720: fix broken control requests
+    - Fix TLB gather virtual address range invalidation corner cases
+    - [arm] 7809/1: perf: fix event validation for software group leaders
+      (CVE-2013-4254)
+    - jbd2: Fix use after free after error in jbd2_journal_dirty_metadata()
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.9
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.10
+    - [s390] KVM: s390: move kvm_guest_enter,exit closer to sie
+    - mac80211: don't wait for TX status forever
+    - tracing/kprobe: Wait for disabling all running kprobe handlers
+    - tracing: Fix many race conditions including potential use-after-free
+    - tracing/kprobes: Fail to unregister if probe event files are in use
+    - tracing/uprobes: Fail to unregister if probe event files are in use
+    - ftrace: Check module functions being traced on reload
+    - zd1201: do not use stack as URB transfer_buffer
+    - VFS: collect_mounts() should return an ERR_PTR
+    - [arm] davinci: nand: specify ecc strength
+    - drm/radeon/r7xx: fix copy paste typo in golden register setup
+    - drm/radeon: fix UVD message buffer validation
+    - drm/i915: Invalidate TLBs for the rings after a reset
+    - nilfs2: remove double bio_put() in nilfs_end_bio_write() for
+      BIO_EOPNOTSUPP error
+    - Hostap: copying wrong data prism2_ioctl_giwaplist()
+    - SCSI: zfcp: fix lock imbalance by reworking request queue locking
+    - SCSI: zfcp: fix schedule-inside-lock in scsi_device list loops
+    - SCSI: sg: Fix user memory corruption when SG_IO is interrupted by a
+      signal
+    - [x86] get_unmapped_area: Access mmap_legacy_base through mm_struct member
+    - bcache: FUA fixes
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.11
+    - drm/nouveau/mc: fix race condition between constructor and request_irq()
+    - jfs: fix readdir cookie incompatibility with NFSv4 (Closes: #714974)
+    - [powerpc] Work around gcc miscompilation of __pa() on 64-bit
+    - [powerpc] Don't Oops when accessing /proc/powerpc/lparcfg without
+      hypervisor
+    - timer_list: correct the iterator for timer_list
+    - drivers/base/memory.c: fix show_mem_removable() to handle missing sections
+    - memcg: check that kmem_cache has memcg_params before accessing it
+    - SUNRPC: Fix memory corruption issue on 32-bit highmem systems
+    - ath9k_htc: Restore skb headroom when returning skb to mac80211
+    - iscsi-target: Fix ImmediateData=Yes failure regression in >= v3.10
+    - iscsi-target: Fix potential NULL pointer in solicited NOPOUT reject
+    - ACPI / EC: Add ASUSTEK L4R to quirk list in order to validate ECDT
+    - regmap: rbtree: Fix overlapping rbnodes.
+
+  [ Ben Hutchings ]
+  * [rt] Update to 3.10.10-rt7:
+    - hwlat-detector: Update hwlat_detector to add outer loop detection
+    - hwlat-detector: Use thread instead of stop machine
+    - hwlat-detector: Use trace_clock_local if available
+    - genirq: do not invoke the affinity callback via a workqueue
+    - simple-wait: rename and export the equivalent of waitqueue_active()
+    - simple-wait: Fix a race condition with swait wakeups vs adding items
+      to the list
+    - rcu: Use swait_wake_all() in rcu_nocb_gp_cleanup()
+  * aufs: Update to aufs3.10-20130826
+  * aufs: mvdown, don't let unprivileged users provoke a WARNING
+  * [x86] ACPI: Re-enable ACPI_HOTPLUG_MEMORY as built-in
+  * [x86] amd64_edac: Fix single-channel setups (Closes: #717473)
+  * [x86] efi: Ensure efi-pstore is loaded on EFI systems
+  * bug script: Prompt to include crash logs from pstore
+  * ipv6: remove max_addresses check from ipv6_create_tempaddr (CVE-2013-0343)
+  * HID: validate HID report id size (CVE-2013-2888)
+  * HID: pantherlord: validate output report details (CVE-2013-2892)
+  * HID: ntrig: validate feature report details (CVE-2013-2896)
+  * HID: sensor-hub: validate feature report details (CVE-2013-2898)
+  * HID: picolcd_core: validate output report details (CVE-2013-2899)
+  * HID: check for NULL field when setting values
+
+  [ Ian Campbell ]
+  * [armel]: Enable MVMDIO and USB_EHCI_HCD_ORION on Kirkwood and Orion
+    (Closes: #719680)
+  * Bump ABI to 3
+  * [armhf]: Add udebs for armmp flavour
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 10 Sep 2013 14:13:16 +0100
+
+linux-tools (3.10-4) unstable; urgency=low
+
+  * Sourceful upload for the perl 5.18 transition
+  * usbip: Fix package version override to be binNMU-safe
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 30 Aug 2013 12:44:56 +0100
+
+linux (3.10.7-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.6
+    - [arm] Modify vectors page to defend against ROP buffer overflow attacks
+    - [armel] 7790/1: Fix deferred mm switch on VIVT processors
+    - [armel] 7791/1: a.out: remove partial a.out support
+    - [powerpc] VPHN topology change updates all siblings
+    - hwmon: (max6697) fix MAX6581 ideality
+    - USB: mos7840: fix race in register handling
+    - USB: mos7840: fix race in led handling
+    - mac80211: fix duplicate retransmission detection
+    - mac80211: fix ethtool stats for non-station interfaces
+    - ixgbe: Fix Tx Hang issue with lldpad on 82598EB
+    - Bluetooth: ath3k: don't use stack memory for DMA
+    - Bluetooth: fix wrong use of PTR_ERR() in btusb
+    - svcrpc: fix gss-proxy xdr decoding oops
+    - svcrpc: fix gss_rpc_upcall create error
+    - svcrpc: fix kfree oops in gss-proxy code
+    - zram: avoid invalid memory access in zram_exit()
+    - zram: use zram->lock to protect zram_free_page() in swap free notify path
+    - zram: avoid double free in function zram_bvec_write()
+    - zram: avoid access beyond the zram device
+    - zram: protect sysfs handler from invalid memory access
+    - Revert "cpuidle: Quickly notice prediction failure in general case"
+    - cpufreq: Fix cpufreq driver module refcount balance after suspend/resume
+    - Revert "cpuidle: Quickly notice prediction failure for repeat mode"
+    - drm/radeon: Disable dma rings for bo moves on r6xx
+    - xen-blkfront: use a different scatterlist for each request
+    - drm/radeon: never unpin UVD bo v3
+    - Btrfs: fix crash regarding to ulist_add_merge
+    - [s390] bitops: fix find_next_bit_left
+    - userns: unshare_userns(&cred) should not populate cred on failure
+      (CVE-2013-4205)
+    - ipv6: take rtnl_lock and mark mrt6 table as freed on namespace cleanup
+    - usbnet: do not pretend to support SG/TSO
+    - net_sched: Fix stack info leak in cbq_dump_wrr().
+    - af_key: more info leaks in pfkey messages
+    - net_sched: info leak in atm_tc_dump_class()
+    - 8139cp: Add dma_mapping_error checking
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.7
+    - [powerpc] Save the TAR register earlier
+    - [powerpc] tm: Fix context switching TAR, PPR and DSCR SPRs
+    - ext4: make sure group number is bumped after a inode allocation race
+    - regmap: cache: Make sure to sync the last register in a block
+    - hwmon: (adt7470) Fix incorrect return code check
+    - media: em28xx: fix assignment of the eeprom data
+    - ACPI / PM: Walk physical_node_list under physical_node_lock
+    - ALSA: 6fire: fix DMA issues with URB transfer_buffer usage
+    - Btrfs: release both paths before logging dir/changed extents
+    - LOCKD: Don't call utsname()->nodename from nlmclnt_setlockargs
+    - SUNRPC: Don't auto-disconnect from the local rpcbind socket
+    - SUNRPC: If the rpcbind channel is disconnected, fail the call to
+      unregister
+    - virtio/console: Quit from splice_write if pipe->nrbufs is 0
+    - virtio/console: Add pipe_lock/unlock for splice_write
+    - virtio: console: fix race with port unplug and open/close
+    - virtio: console: fix race in port_fops_open() and port unplug
+    - virtio: console: clean up port data immediately at time of unplug
+    - virtio: console: fix raising SIGIO after port unplug
+    - virtio: console: return -ENODEV on all read operations after unplug
+    - drm/radeon: stop sending invalid UVD destroy msg
+    - ext4: flush the extent status cache during EXT4_IOC_SWAP_BOOT
+    - cifs: extend the buffer length enought for sprintf() using
+    - zram: allow request end to coincide with disksize
+    - reiserfs: fix deadlock in umount
+    - [x86] drm/i915: initialize gt_lock early with other spin locks
+
+  [ Ben Hutchings ]
+  * [x86] Enable ASUS_OLED as module (Closes: #680016)
+  * [armel/orion5x] I2C: mv64xxx: fix race between FSM/interrupt and process
+    context (Closes: #622325)
+  * [rt] Update to 3.10.6-rt3
+    - hpsa: fix warning with smp_processor_id() in preemptible
+  * [arm] Change SERIAL_8250_PCI from built-in to module
+  * net: Change WIZNET_W5{1,3}00 from built-in(!) to module
+  * net: Change DROP_MONITOR from built-in to module
+  * netlink: Change NETLINK_DIAG from built-in to module; enable on
+    armel/{iop32x,ixp4xx,orion5x}
+
+  [ Thorsten Glaser ]
+  * [m68k] debian/patches/bugfix/m68k/atari-irqs.patch: patch from mailing list
+    to silence IRQ problems on Atari platforms with multi-platform kernel
+  * [m68k] debian/patches/bugfix/m68k/type-fix-div64.patch: patch from Andreas
+    Schwab to handle do_div being called with a non-u32 second argument
+  * [m68k] begin working on d-i kernel configs (just enough to not FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 17 Aug 2013 22:35:15 +0200
+
+linux-tools (3.10-3) unstable; urgency=low
+
+  * linux-kbuild: Fix no-modules case in modpost wrapper (Closes: #719129)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 08 Aug 2013 21:49:02 +0200
+
+linux (3.10.5-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.4
+    - ipv6,mcast: always hold idev->lock before mca_lock
+    - ipv6: call udp_push_pending_frames when uncorking a socket with AF_INET
+      pending data (CVE-2013-4162)
+    - ipv6: ip6_append_data_mtu did not care about pmtudisc and frag_size
+      (CVE-2013-4163)
+    - sunvnet: vnet_port_remove must call unregister_netdev
+    - ipv6: only static routes qualify for equal cost multipathing
+      (CVE-2013-4125)
+    - atl1e: fix dma mapping warnings
+    - atl1e: unmap partially mapped skb on dma error and free skb
+    - vlan: mask vlan prio bits
+    - vlan: fix a race in egress prio management
+    - fuse: readdirplus: fix dentry leak
+    - fuse: readdirplus: fix instantiate
+    - fuse: readdirplus: sanity checks
+    - bcache: Fix a dumb race
+    - bcache: Advertise that flushes are supported
+    - bcache: Shutdown fix (possibly fixes #715019)
+    - bcache: Fix a sysfs splat on shutdown
+    - bcache: Journal replay fix
+    - ext4: fix error handling in ext4_ext_truncate()
+    - media: saa7134: Fix unlocked snd_pcm_stop() call
+    - media: dmxdev: remove dvb_ringbuffer_flush() on writer side
+    - lockd: protect nlm_blocked access in nlmsvc_retry_blocked
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.5
+    - mm: fix the TLB range flushed when __tlb_remove_page() runs out of slots
+    - iscsi-target: Fix tfc_tpg_nacl_auth_cit configfs length overflow
+    - iser-target: Fix session reset bug with RDMA_CM_EVENT_DISCONNECTED
+    - iscsi-target: Fix ISCSI_OP_SCSI_TMFUNC handling for iser
+    - firewire: fix libdc1394/FlyCap2 iso event regression
+    - SCSI: sd: fix crash when UA received on DIF enabled device
+    - tracing: Remove locking trace_types_lock from
+      tracing_reset_all_online_cpus()
+    - usb: host: xhci: Enable XHCI_SPURIOUS_SUCCESS for all controllers with
+      xhci 1.0
+    - xhci: fix null pointer dereference on ring_doorbell_for_active_rings
+    - xhci: Avoid NULL pointer deref when host dies.
+    - staging: comedi: fix a race between do_cmd_ioctl() and read/write
+    - Btrfs: fix wrong write offset when replacing a device
+    - Btrfs: fix lock leak when resuming snapshot deletion
+    - Btrfs: re-add root to dead root list if we stop dropping it
+    - xen-netfront: pull on receive skb may need to happen earlier
+    - md: Remove recent change which allows devices to skip recovery.
+    - md/raid1: fix bio handling problems in process_checks()
+    - md/raid5: fix interaction of 'replace' and 'recovery'.
+    - md/raid10: remove use-after-free bug.
+    - svcrdma: underflow issue in decode_write_list()
+    - nfsd: nfsd_open: when dentry_open returns an error do not propagate as
+      struct file
+    - ACPI / scan: Do not try to attach scan handlers to devices having them
+    - drm/radeon: fix endian issues with DP handling (v3)
+    - drm/radeon: fix combios tables on older cards
+    - drm/i915: fix up ring cleanup for the i830/i845 CS tlb w/a
+    - drm/i915: Fix write-read race with multiple rings
+    - Partially revert "drm/i915: unconditionally use mt forcewake on hsw/ivb"
+    - drm/i915: Fix incoherence with fence updates on Sandybridge+
+    - drm/i915: fix long-standing SNB regression in power consumption after resume v2
+    - drm/i915: Fix dereferencing invalid connectors in is_crtc_connector_off()
+    - drm/i915: correctly restore fences with objects attached
+    - drm/i915: Serialize almost all register access
+    - drm/radeon/atom: initialize more atom interpretor elements to 0
+    - mm: mempolicy: fix mbind_range() && vma_adjust() interaction
+    - tty_port: Fix refcounting leak in tty_port_tty_hangup()
+    - vfs: livelock avoidance in sget()
+    - iscsi-target: Fix iscsit_add_reject* usage for iser
+    - drm/i915: Correct obj->mm_list link to
+      dev_priv->dev_priv->mm.inactive_list
+
+  [ Ben Hutchings ]
+  * [hppa] udeb: Add core-modules package (Closes: #718270)
+  * nl80211: fix another nl80211_fam.attrbuf race
+  * Bump ABI to 2
+  * ext4: fix retry handling in ext4_ext_truncate()
+  * atl1c: Fix misuse of netdev_alloc_skb in refilling rx ring
+    (Closes: #718505)
+  * [rt] genpatch.py: Accept missing series-rt
+  * [rt] Update to 3.10.4-rt1 and reenable
+  * [rt] genpatch.py: Fix parsing of upstream patches with no header
+  * aufs: Update to aufs3.10-20130805
+  * [rt] md: Disable BCACHE, as it fails to build
+  * SCSI: Don't attempt to send extended INQUIRY command if skip_vpd_pages is
+    set (Closes: #719002)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 07 Aug 2013 22:38:45 +0200
+
+linux (3.10.3-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.2
+    - CIFS: Fix a deadlock when a file is reopened
+    - jbd2: move superblock checksum calculation to jbd2_write_superblock()
+    - jbd2: fix theoretical race in jbd2__journal_restart
+    - ext4: fix corruption when online resizing a fs with 1K block size
+    - ext3,ext4: don't mess with dir_file->f_pos in htree_dirblock_to_tree()
+    - ext4: check error return from ext4_write_inline_data_end()
+    - xhci: check for failed dma pool allocation
+    - [x86] drivers: hv: switch to use mb() instead of smp_mb()
+    - cgroup: fix umount vs cgroup_event_remove() race
+    - cgroup: fix RCU accesses to task->cgroups
+    - [hppa] Fix gcc miscompilation in pa_memcpy()
+    - [hppa] Ensure volatile space register %sr1 is not clobbered
+    - genirq: Fix can_request_irq() for IRQs without an action
+      (Closes: #709647)
+    - [x86] ACPI: Fix HP Folio 13 EC register access (Closes: #684186)
+      + ACPI: Add CMOS RTC Operation Region handler support
+      + ACPI / EC: Add HP Folio 13 to ec_dmi_table in order to skip DSDT scan
+    - ocfs2: xattr: fix inlined xattr reflink
+    - iwlwifi: pcie: fix race in queue unmapping
+    - Btrfs: fix estale with btrfs send
+    - Btrfs: hold the tree mod lock in __tree_mod_log_rewind
+    - Btrfs: only do the tree_mod_log_free_eb if this is our last ref
+    - ext4: fix data offset overflow on 32-bit archs in
+      ext4_inline_data_fiemap()
+    - ext4: fix overflows in SEEK_HOLE, SEEK_DATA implementations
+    - ext4: fix data offset overflow in ext4_xattr_fiemap() on 32-bit archs
+    - ext4: fix overflow when counting used blocks on 32-bit architectures
+    - ext4: fix ext4_get_group_number()
+    - ext4: don't allow ext4_free_blocks() to fail due to ENOMEM
+    - [arm] 7767/1: let the ASID allocator handle suspended animation
+    - [arm] 7768/1: prevent risks of out-of-bound access in ASID allocator
+    - [arm] 7769/1: Cortex-A15: fix erratum 798181 implementation
+    - [arm] 7778/1: smp_twd: twd_update_frequency need be run on all online CPUs
+    - [armhf] dts: imx: cpus/cpu nodes dts updates
+    - [armhf] drivers/dma/pl330.c: fix locking in pl330_free_chan_resources()
+    - memcg, kmem: fix reference count handling on the error path
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.3
+    - cpufreq: Revert commit a66b2e to fix suspend/resume regression
+    - iio: Fix iio_channel_has_info
+    - iio: inkern: fix iio_convert_raw_to_processed_unlocked
+    - ALSA: seq-oss: Initialize MIDI clients asynchronously
+    - ALSA: Fix unlocked snd_pcm_stop() calls in various drivers
+    - libata-zpodd: Use ata_tf_init() to select the right device
+    - md/raid10: fix bug which causes all RAID10 reshapes to move no data.
+    - md/raid10: fix two bugs affecting RAID10 reshape.
+    - md/raid10: fix two problems with RAID10 resync. (Closes: #717681)
+    - mac80211: close AP_VLAN interfaces before unregistering all
+    - svcrpc: fix failures to handle -1 uid's
+    - svcrpc: fix handling of too-short rpc's
+    - drm/i915: Fix context sizes on HSW
+    - drm/i915: Only clear write-domains after a successful wait-seqno
+    - drm/gem: fix not to assign error value to gem name
+    - drm/nv50-/disp: Use output specific mask in interrupt (Closes: #717590)
+    - iommu/amd: Only unmap large pages from the first pte
+    - MIPS: Octeon: Don't clobber bootloader data structures.
+    - perf: Clone child context from parent context pmu
+    - perf: Remove WARN_ON_ONCE() check in __perf_event_enable() for valid
+      scenario
+    - perf: Fix perf_lock_task_context() vs RCU
+    - tracing: Protect ftrace_trace_arrays list in trace_events.c
+    - tracing: Fix race between deleting buffer and setting events
+
+  [ Arnaud Patard ]
+  * udeb: add ehci-pci to usb-modules
+
+  [ Ben Hutchings ]
+  * udeb: Add snd-cmi8328 and snd-scs1x to sound-modules, thanks to
+    Samuel Thibault (Closes: #717183)
+  * be2net: Fix to avoid hardware workaround when not needed
+  * iwlwifi: Update 3160 and 7260 support to work with production firmware
+  * rtlwifi: rtl8723ae: Fix typo in firmware names
+  * [x86] Change INTEL_MEI_ME back to a module (Closes: #717383)
+  * [armhf/armmp] Enable NET_CALXEDA_XGMAC as module (Closes: #717269)
+  * linux-source: Switch compression of tarball and patch to xz.  Disable
+    compression of package (but use gzip, to keep old tools happy).
+  * linux-source: Install kernel config files for linux-image packages in
+    /usr/src/linux-config-$UPSTREAMVERSION directory
+  * ata: Disable SATA_INIC162X - this driver corrupts data and is not
+    expected to be fixed (Closes: #714295)
+  * writeback: Fix periodic writeback after fs mount
+  * sfc: Fix memory leak when discarding scattered packets
+  * neighbour: fix a race in neigh_destroy()
+  * virtio: support unlocked queue poll
+  * virtio_net: fix race in RX VQ processing
+  * vhost-net: fix use-after-free in vhost_net_flush
+  * tuntap: correctly linearize skb when zerocopy is used
+  * macvtap: correctly linearize skb when zerocopy is used
+  * ipv6: in case of link failure remove route directly instead of
+    letting it expire
+  * 9p: fix off by one causing access violations and memory corruption
+
+  [ Thorsten Glaser ]
+  * Update m68k configs (Closes: #717689):
+    - disable some functionality due to size constraints
+    - switch to using initrd
+    - drop all flavours; build a generic image that runs on
+      multiple subarchitectores (old Amiga, Atari, Macintosh tested;
+      old BVME6000, MVME147, MVME16x, new Apollo, Q40/Q60 untested)
+    - use gcc-4.8
+    - add patch to make Atari EtherNAT actually selectable
+  * nfs: Enable swap on NFS
+  * fs/nls: Enable Macintosh HFS+ codepage modules
+  * debian/control: Fix Vcs-Svn: use anonscm.debian.org
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 28 Jul 2013 00:33:32 +0100
+
+linux-tools (3.10-2) unstable; urgency=low
+
+  * linux-kbuild: Fix use of getline() in modpost wrapper (Closes: #717195)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 18 Jul 2013 04:02:11 +0100
+
+linux-tools (3.10-1) unstable; urgency=low
+
+  * New upstream release
+
+  [ Chris Boot ]
+  * Update modpost-symbol-prefix.patch for 3.10
+
+  [ Ben Hutchings ]
+  * debian/patches: Add DEP-3 headers (From, Subject, Forwarded) to all patches
+  * debian/copyright: Convert to machine-readable format (fka DEP-5)
+  * debian/copyright: Add explanation of indirect linking of perf to OpenSSL
+  * debian/rules.real: Remove support for pre-multiarch dpkg
+  * Update policy version to 3.9.4
+    - debian/rules: Implement build-arch and build-indep targets
+  * linux-kbuild: Update modpost wrapper for 3.10
+    - Implement the -T option
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 16 Jul 2013 13:29:22 +0100
+
+linux (3.10.1-1) unstable; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.10
+    - netfilter: nf_nat_sip: fix mangling (Closes: #715822)
+    - drm/i915: Add HPD IRQ storm detection (Closes: #572537)
+    - ipv6: ip6_sk_dst_check() must not assume ipv6 dst (CVE-2013-2232)
+    - af_key: fix info leaks in notify messages (CVE-2013-2234)
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.10.1
+    - libceph: Fix NULL pointer dereference in auth client code (CVE-2013-1059)
+    - ceph: fix sleeping function called from invalid context.
+    - libceph: fix invalid unsigned->signed conversion for timespec encoding
+    - module: do percpu allocation after uniqueness check. No, really!
+    - charger-manager: Ensure event is not used as format string
+    - hpfs: better test for errors
+    - crypto: sanitize argument for format string
+    - MAINTAINERS: add stable_kernel_rules.txt to stable maintainer information
+    - futex: Take hugepages into account when generating futex_key
+    - tty: Reset itty for other pty
+    - Revert "serial: 8250_pci: add support for another kind of NetMos
+      Technology PCI 9835 Multi-I/O Controller"
+    - NFSv4.1 end back channel session draining
+    - nfsd4: fix decoding of compounds across page boundaries
+    - KVM: VMX: mark unusable segment as nonpresent
+    - SCSI: sd: Fix parsing of 'temporary ' cache mode prefix
+    - cpufreq: Fix cpufreq regression after suspend/resume
+    - Revert "memcg: avoid dangling reference count in creation failure"
+       
+  [ Ben Hutchings ]
+  * cassini: Make missing firmware non-fatal (Closes: #714128)
+  * debian/patches: Add DEP-3 headers (From/Author, Subject/Description,
+    Forwarded/Origin) to all patches
+  * aufs: Add DEP-3 headers to generated/copied patches
+  * [rt] genpatch.py: Work with upstream patch series as well as git
+    - Fold convert-series into genpatch.py
+  * [rt] genpatch.py: Add Origin header to all patches
+  * debian/bin/check-patches.sh: Report missing DEP-3 headers
+  * alx: Use upstream minimal driver
+    - Update to 3.11-rc1
+  * [x86] efivars: Reenable 'paranoid' size check by default, as it should
+    no longer have false positives
+  * debian/patches: Reorder and group patches in series
+  * debian/rules.real: Remove support for pre-multiarch dpkg
+  * Update policy version to 3.9.4
+    - debian/control: Put xen-linux-system-* in the 'metapackages' section
+  * linux-source: Add bc to recommended packages (Closes: #715413)
+  * udeb: Add ath6kl_usb and mwifiex_usb to nic-wireless-modules
+  * udeb: Add pm80xx (previously pm8001) to scsi-extra-modules
+  * udeb: Add virtio_scsi to virtio-modules
+  * Set ABI to 1
+  * xen/blkback: Check device permissions before allowing OP_DISCARD
+    (CVE-2013-2140)
+  * udeb: Remove obsolete and unsupported drivers and filesystems
+    - Remove ppa from scsi-modules
+    - Remove floppy-modules, irda-modules, parport-modules, plip-modules,
+      qnx4-modules, reiserfs-modules, ufs-modules
+  * [x86] efivars: Re-enable pstore support by default.  It can be disabled
+    by setting module parameter pstore_disable=Y.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 16 Jul 2013 02:06:53 +0100
+
+linux (3.10~rc7-1~exp1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [armhf/armmp] Add EMAC ethernet driver found on Allwinner A10 SoCs,
+    thanks to Niall Walsh (Closes: #711998)
+    - Add MDIO bus driver for the Allwinner EMAC
+    - Add EMAC controller node to sun4i DTSI
+    - cubieboard: Enable ethernet (EMAC) support in dts
+    - Add EMAC Controller to Hackberry dt
+  * [x86] cpufreq: Enable X86_INTEL_PSTATE (Closes: #712062)
+  * debian/control: Add Homepage field
+  * debian/watch: Add watch file and update script
+  * misc/bmp085: Enable building as a module
+  * misc: Enable BMP085_I2C as module
+  * team: Enable NET_TEAM_MODE_RANDOM as module
+  * 8021q: Enable VLAN_8021Q_MVRP
+  * batman: Enable BATMAN_ADV_NC
+  * netlink: Enable NETLINK_MMAP, NETLINK_DIAG [!armel/{iop32x,ixp4xx,orion5x}]
+  * sctp: Enable SCTP_COOKIE_HMAC_SHA1
+  * tipc: Enable TIPC_MEDIA_IB
+  * [x86] cpufreq: Enable X86_AMD_FREQ_SENSITIVITY as module
+  * [x86] i2c: Enable I2C_ISMT, I2C_DESIGNWARE_PCI as modules
+  * [x86] mouse: Enable MOUSE_CYAPA as modules
+  * [armel/{iop32x,ixp4xx,orion5x}] Disable features to reduce kernel size
+    - Disable KSM, YAMA
+    - [armel/orion5x] Disable FTRACE
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 24 Jun 2013 14:55:23 +0100
+
+linux (3.10~rc5-1~exp1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [x86] Enable HYPERVISOR_GUEST
+  * udeb: Clean up configuration:
+    - Move i2c-algo-bit to i2c-modules
+    - Remove redundant control file overrides
+    - [s390] Use symlinks to follow s390x configuration
+    - [sparc64] Use symlinks to follow sparc configuration
+    - Only list the 'new' firewire modules in firewire-core-modules
+    - Remove obsolete eth1394 and firewire-core-modules dependency from
+      nic-modules
+    - Move ide-modules and ide-core-modules into ia64 configuration
+    - [powerpc,x86] Fold nic-extra-modules into nic-modules
+  * iwlegacy: Use consistent condition for il_pm_ops (fixes FTBFS on ia64)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 11 Jun 2013 04:44:05 +0100
+
+linux (3.10~rc4-1~exp1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20130520
+  * alx: Update VLAN tag handling for 3.10
+  * md: Enable BCACHE as module
+  * net/usb: Enable USB_RTL8152 as module
+    - udeb: Add r8152 to nic-usb-modules
+  * rt2800usb: Enable RT2800USB_RT55XX
+  * net/wireless: Enable RTL8188EE
+    - udeb: Add rtl8188ee to nic-wireless-modules
+  * linux-image: Restore package date (in ISO format) to utsname version
+    string ('uname -v' output)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 03 Jun 2013 02:43:51 +0100
+
+linux (3.9.8-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.9.7
+    - b43: stop format string leaking into error msgs (CVE-2013-2852)
+    - ACPI / video: Do not bind to device objects with a scan handler
+    - libceph: must hold mutex for reset_changed_osds()
+    - ceph: ceph_pagelist_append might sleep while atomic
+    - rbd: don't destroy ceph_opts in rbd_add()
+    - Bluetooth: Fix missing length checks for L2CAP signalling PDUs
+    - kmsg: honor dmesg_restrict sysctl on /dev/kmsg
+    - memcg: don't initialize kmem-cache destroying work for root caches
+    - md/raid1: consider WRITE as successful only if at least one non-Faulty
+      and non-rebuilding drive completed it.
+    - md/raid1,5,10: Disable WRITE SAME until a recovery strategy is in place
+    - [x86] Modify UEFI anti-bricking code
+    - powerpc: Fix stack overflow crash in resume_kernel when ftracing
+    - USB: pl2303: fix device initialisation at open
+    - USB: f81232: fix device initialisation at open
+    - USB: spcp8x5: fix device initialisation at open
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.9.8
+    - ARM: 7752/1: errata: LoUIS bit field in CLIDR register is incorrect
+    - clk: remove notifier from list before freeing it
+    - [hppa] make interrupt and interruption stack allocation reentrant
+    - ACPI / dock: Take ACPI scan lock in write_undock()
+    - net: fec: fix kernel oops when plug/unplug cable many times
+    - tcp: fix tcp_md5_hash_skb_data()
+    - net/802/mrp: fix lockdep splat
+    - ipv6: fix possible crashes in ip6_cork_release()
+    - r8169: fix offloaded tx checksum for small packets.
+    - xfrm: properly handle invalid states as an error
+    - ip_tunnel: fix kernel panic with icmp_dest_unreach
+    - net: Block MSG_CMSG_COMPAT in send(m)msg and recv(m)msg
+    - net: force a reload of first item in hlist_nulls_for_each_entry_rcu
+    - vhost_net: clear msg.control for non-zerocopy case during tx
+    - net: sctp: fix NULL pointer dereference in socket destruction
+    - team: check return value of team_get_port_by_index_rcu() for NULL
+    - team: move add to port list before port enablement
+    - l2tp: Fix PPP header erasure and memory leak
+    - sctp: fully initialize sctp_outq in sctp_outq_init
+    - macvtap: set transport header before passing skb to lower device
+    - tuntap: set transport header before passing it to kernel
+    - packet: set transport header before doing xmit
+    - netback: set transport header before passing it to kernel
+    - net_sched: better precise estimation on packet length for untrusted
+      packets
+    - firmware loader: fix use-after-free by double abort
+    - target/iscsi: don't corrupt bh_count in iscsit_stop_time2retain_timer()
+    - rbd: use the correct length for format 2 object names
+    - perf: Fix perf mmap bugs
+    - perf: Fix mmap() accounting hole
+
+  [ Ben Hutchings ]
+  * yama: Disable ptrace restrictions by default, and change boot message
+    to indicate this (Closes: #712740)
+  * fanotify: info leak in copy_event_to_user() (CVE-2013-2148)
+  * drivers/cdrom/cdrom.c: use kzalloc() for failing hardware (CVE-2013-2164)
+  * block: do not pass disk names as format strings (CVE-2013-2851)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 29 Jun 2013 18:44:21 +0100
+
+linux (3.9.6-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.9.6
+    - xhci - correct comp_mode_recovery_timer on return from hibernate
+    - usb: musb: make use_sg flag URB specific
+    - USB: keyspan: fix bogus array index
+    - [arm] 7747/1: pcpu: ensure __my_cpu_offset cannot be re-ordered across
+      barrier()
+    - hpfs: fix warnings when the filesystem fills up
+    - cifs: fix off-by-one bug in build_unc_path_to_root
+    - ecryptfs: fixed msync to flush data
+    - eCryptfs: Check return of filemap_write_and_wait during fsync
+    - hwmon: (adm1021) Strengthen chip detection for ADM1021, LM84 and MAX1617
+    - drm: fix a use-after-free when GPU acceleration disabled
+    - [powerpc] pseries: Force 32 bit MSIs for devices that require it
+    - [powerpc] pseries: Make 32-bit MSI quirk work on systems lacking firmware
+      support
+
+  [ Ben Hutchings ]
+  * [armel/orion5x] Enable EXPERT; disable FIPS, OABI_COMPAT, PCI_QUIRKS,
+    VGA_ARB to reduce kernel size (really fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 15 Jun 2013 04:53:13 +0100
+
+linux (3.9.5-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.9.5
+    - [arm] 7723/1: crypto: sha1-armv4-large.S: fix SP handling
+    - mac80211: use just spin_lock() in ieee80211_get_tkip_p2k()
+    - USB: cxacru: potential underflow in cxacru_cm_get_array()
+    - TTY: Fix tty miss restart after we turn off flow-control
+      (Closes: #465823)
+    - cifs: only set ops for inodes in I_NEW state
+    - drivers/char/random.c: fix priming of last_data
+    - random: fix accounting race condition with lockless irq entropy_count
+      update
+    - fat: fix possible overflow for fat_clusters
+    - tg3: Fix data corruption on 5725 with TSO
+    - ocfs2: goto out_unlock if ocfs2_get_clusters_nocache() failed in
+      ocfs2_fiemap()
+    - mm compaction: fix of improper cache flush in migration code
+    - klist: del waiter from klist_remove_waiters before wakeup waitting process
+    - wait: fix false timeouts when using wait_event_timeout()
+    - nilfs2: fix issue of nilfs_set_page_dirty() for page at EOF boundary
+    - mm: mmu_notifier: re-fix freed page still mapped in secondary MMU
+    - mm: memcg: remove incorrect VM_BUG_ON for swap cache pages in uncharge
+    - mm/pagewalk.c: walk_page_range should avoid VM_PFNMAP areas
+    - mm/THP: use pmd_populate() to update the pmd with pgtable_t pointer
+    - module: don't unlink the module until we've removed all exposure.
+    - xfs: kill suid/sgid through the truncate path.
+    - SUNRPC: Prevent an rpc_task wakeup race
+    - cifs: fix potential buffer overrun when composing a new options string
+    - cgroup: initialize xattr before calling d_instantiate()
+    - [powerpc] 32bit:Store temporary result in r0 instead of r8
+    - [powerpc] tm: Fix userspace stack corruption on signal delivery for active
+      transactions
+    - [powerpc] tm: Abort on emulation and alignment faults
+    - iscsi-target: fix heap buffer overflow on error
+    - KVM: fix sil/dil/bpl/spl in the mod/rm fields
+    - reiserfs: fix deadlock with nfs racing on create/lookup
+    - reiserfs: fix problems with chowning setuid file w/ xattrs
+    - reiserfs: fix spurious multiple-fill in reiserfs_readdir_dentry
+    - jfs: fix a couple races
+    - IB/iser: Return error to upper layers on EAGAIN registration failures
+    - fuse: fix readdirplus Oops in fuse_dentry_revalidate
+    - target: Re-instate sess_wait_list for target_wait_for_sess_cmds
+    - xen-netback: Fix regressions caused by fix for CVE-2013-0216
+      + coalesce slots in TX path and fix regressions
+      + don't disconnect frontend when seeing oversize packet
+
+  [ Ben Hutchings ]
+  * [powerpcspe] Remove installer udebs (really fixes FTBFS)
+  * [s390] Add pgste to ptep_modify_prot_start()
+  * [s390] Enable PCI, PCI and USB drivers
+  * [powerpc] Fix build error in stable/3.9
+  * [armel/iop32x,armel/ixp4xx] Disable OABI_COMPAT, PCI_QUIRKS to reduce
+    kernel size (fixes FTBFS)
+  * ath9k: Disable PowerSave by default (Closes: #695968)
+  * [i386] udeb: Add viafb to fb-modules (Closes: #705788)
+    - [i386] udeb: Move i2c-algo-bit to i2c-modules and make fb-modules
+      depend on it
+    - viafb: Autoload on OLPC XO 1.5 only
+  * fs: Enable F2FS_FS as module (Closes: #711342)
+  * iio,HID: Enable IIO, HID_SENSOR_HUB, HID_SENSOR_ACCEL_3D,
+    HID_SENSOR_ALS, HID_SENSOR_GYRO_3D, HID_SENSOR_MAGNETOMETER_3D
+    as modules (Closes: #711690)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 10 Jun 2013 02:41:53 +0100
+
+linux-tools (3.9.4-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 03 Jun 2013 13:45:52 +0100
+
+linux (3.9.4-1) unstable; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.9
+    - ALSA: hda - Add generic parser support to Analog Device codec driver
+      (Closes: #659033)
+    - Input: add support for Cypress PS/2 Trackpads (Closes: #703607)
+    - [armel] media: VIDEO_ZORAN is disabled as it requires virt_to_bus()
+    - [armhf/omap] OMAP_MBOX_FWK and TIDSPBRIDGE is disabled as they are
+      not yet compatible with ARM multiplatform
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.9.1
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.9.2
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.9.3
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.9.4
+
+  [ Ben Hutchings ]
+  * [rt] Disable until it is updated for Linux 3.9 or later
+  * Build-Depend on bc, needed to build kernel/timeconst.h
+  * [x86] Enable VMWARE_VMCI, VSOCKETS, VMWARE_VMCI_VSOCKETS as modules
+    (Closes: #707676)
+  * README.Debian: Correct reference to Berkeley Database development package
+  * aufs: Update to aufs3.9-20130506
+  * [powerpcspe] Prevent building uImage with missing mkimage, thanks to
+    Roland Stigge (Closes: #708094)
+  * udeb: Fix yet more configuration errors causing FTBFS:
+    - [powerpc/powerpc64] Replace ibmvscsic with ibmvscsi in scsi-modules
+    - [ppc64] Use symlinks to follow powerpc/powerpc64 configuration
+    - [powerpcspe] Use symlinks to follow powerpc configuration
+      (Closes: #708336, #708662)
+    - Add raid6_pq to md-modules, and make btrfs-modules depend on it
+  * netfilter: Enable NETFILTER_XT_MATCH_BPF, NETFILTER_XT_MATCH_CONNLABEL
+    as modules
+  * bridge: Enable BRIDGE_VLAN_FILTERING
+  * batman: Enable BATMAN_ADV_DAT
+  * nfc: Enable NFC_LLCP
+  * can: Enable CAN_PEAK_USB, CAN_8DEV_USB as modules
+  * hci_uart: Enable BT_HCIUART_3WIRE
+  * [amd64,powerpc/powerpc64,ppc64] block: Enable BLK_DEV_RSXX as module
+  * SCSI: Enable SCSI_CHELSIO_FCOE, SCSI_MPT3SAS, SCSI_UFSHCD as modules
+    - udeb: Add csiostor, mpt3sas, ufshcd, ufshcd-pci to scsi-extra-modules
+  * md: Enable DM_CACHE as module
+  * net/usb: Enable USB_NET_AX88179_178A as module (Closes: #704129)
+    - udeb: Add ax88179_178a to nic-usb-modules
+  * net/wireless: Enable AR5523 (Closes: #701777), IWLMVM,
+    RTL8723AE (Closes: #708348), WIL6210 as modules
+    - udeb: Add ar5523, iwldvm, iwlmvm, rtl8723ae, wil6210 to
+      nic-wireless-modules
+  * serial: Enable SERIAL_RP2 as module
+    - udeb: Add rp2 to serial-modules
+  * hw_random: Enable HW_RANDOM_TPM as module
+  * [x86] watchdog: Enable IE6XX_WDT, VIA_WDT as modules
+  * media/usb: Enable DVB_USB_AZ6007, USB_GSPCA_JL2005BCD as modules
+  * stk1160: Enable VIDEO_STK1160_AC97
+  * ivtv: Enable VIDEO_IVTV_ALSA as module
+  * radio: Enable RADIO_SHARK, RADIO_SHARK2, USB_KEENE, USB_MA901 as modules
+  * hda: Enable SND_HDA_CODEC_CA0132_DSP
+  * sound/firewire: Enable SND_SCS1X as module
+  * hid-holtek: Enable HOLTEK_FF
+  * hid: Enable HID_ICADE, HID_PS3REMOTE, HID_STEELSERIES, HID_THINGM as
+    modules
+  * usb/serial: Enable USB_SERIAL_F81232, USB_SERIAL_METRO, USB_SERIAL_QT2,
+    USB_SERIAL_XSENS_MT, USB_SERIAL_ZTE as modules
+    - udeb: Add f81232, quatech2, zte_ev to usb-serial-modules
+  * infiniband: Enable INFINIBAND_OCRDMA as module
+  * [x86] vfio: Enable VFIO, VFIO_PCI as modules
+  * [x86] hv: Enable HYPERV_BALLOON as module
+  * security: Enable SECURITY_YAMA, SECURITY_YAMA_STACKED (Closes: #704750)
+  * iscsi-target: fix heap buffer overflow on error (CVE-2013-2850)
+
+  [ Aurelien Jarno ]
+  * [mips] Enable KEXEC.
+
+  [ Arnaud Patard ]
+  * [armhf] Add armmp flavour
+  * [armhf] backport usb support for imx53 through chipidea and usb phy nop fixes
+  * [armhf] backport armada 370/xp thermal support
+  * [armhf] fix hard freeze when mvneta is used as module
+  * [arm] backport ehci split patches for omap and orion
+  * [armel] enable thermal
+  * [armel] kirkwood: enable more DT configs, thermal, POWER_RESET_*
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 01 Jun 2013 23:13:01 +0100
+
+linux (3.8.13-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.13
+    - autofs - remove autofs dentry mount check
+    - hugetlbfs: fix mmap failure in unaligned size request
+      (fixes regression in 3.4)
+    - perf/x86/intel/lbr: Fix LBR filter
+    - perf/x86/intel/lbr: Demand proper privileges for PERF_SAMPLE_BRANCH_KERNEL
+    - ipvs: ip_vs_sip_fill_param() BUG: bad check of return value
+    - netfilter: ctnetlink: don't permit ct creation with random tuple
+    - ext4: add check for inodes_count overflow in new resize ioctl
+    - r8169: fix 8168evl frame padding.
+    - drm/prime: keep a reference from the handle to exported dma-buf (v6)
+    - Btrfs: compare relevant parts of delayed tree refs
+    - Btrfs: fix extent logging with O_DIRECT into prealloc
+    - kernel/audit_tree.c: tree will leak memory when failure occurs in
+      audit_trim_trees()
+
+  [ Ben Hutchings ]
+  * udeb: Fix more configuration errors causing FTBFS:
+    - [m68k,mips,mipsel,ppc64,sparc64] Add crc-modules as common dependency
+      of btrfs-modules and xfs-modules (and others)
+    - [powerpc] Add llc to nic-shared-modules
+  * Bump ABI to 2
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 16 May 2013 00:28:04 +0100
+
+linux (3.8.12-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.12
+    - [powerpc] spufs: Initialise inode->i_ino in spufs_new_inode()
+      (possibly fixes: #707175)
+    - iwlwifi: fix freeing uninitialized pointer
+    - tty: fix up atime/mtime mess, take three
+    - sysfs: fix use after free in case of concurrent read/write and readdir
+    - [ia64] Fix initialization of CMCI/CMCP interrupts
+    - [ia64] Wrong asm register contraints in the futex implementation
+      (Closes: #702641)
+    - [ia64] Wrong asm register contraints in the kvm implementation
+      (Closes: #702639)
+    - fs/fscache/stats.c: fix memory leak
+    - hrtimer: Fix ktime_add_ns() overflow on 32bit architectures
+    - swap: redirty page if page write fails on swap file
+    - mm: swap: mark swap pages writeback before queueing for direct IO
+    - ACPI: Fix wrong parameter passed to memblock_reserve
+    - cgroup: fix an off-by-one bug which may trigger BUG_ON()
+    - cgroup: fix broken file xattrs
+    - clockevents: Set dummy handler on CPU_DEAD shutdown (Closes: #700333)
+    - inotify: invalid mask should return a error number but not set it
+      (fixes regression in 3.8.1)
+    - exec: do not abuse ->cred_guard_mutex in threadgroup_lock()
+    - md: bad block list should default to disabled.
+    - MD: ignore discard request for hard disks of hybid raid1/raid10 array
+      (fixes regression in 3.6)
+    - nfsd4: don't close read-write opens too soon
+    - wireless: regulatory: fix channel disabling race condition
+    - ext4/jbd2: don't wait (forever) for stale tid caused by wraparound
+    - jbd2: fix race between jbd2_journal_remove_checkpoint and
+      ->j_commit_callback
+    - ext4: fix journal callback list traversal
+    - ext4: fix big-endian bug in metadata checksum calculations
+    - [x86] KVM: X86 emulator: fix source operand decoding for 8bit mov[zs]x
+      instructions
+
+  [ Ben Hutchings ]
+  * [rt] Remove xen-linux-system packages and references to Xen support,
+    as Xen does not support real-time scheduling
+  * udeb: Fix configuration errors causing FTBFS:
+    - [armhf/vexpress] Remove ipv6-modules; ipv6 is now built-in
+    - [mipsel/sb1-bcm91250a,sparc] Add crc-modules as common dependency of
+      btrfs-modules and xfs-modules (and others)
+    - [powerpc] Add nic-shared-modules as common dependency of nic-modules
+      and nic-extra-modules
+    - Unify module list for nic-shared-modules across architectures [!m68k]
+  * [rt] Update to 3.8.11-rt8:
+    - time/timekeeping: shadow tk->cycle_last together with clock->cycle_last
+    - sched/workqueue: Only wake up idle workers if not blocked on sleeping
+      spin lock
+  * aufs: Update to aufs3.8-20130506
+    - for linux-3.7, btrfs limits the link count explicitly
+    - for linux-3.6, push mnt_want_write() outside of i_mutex
+    - possible bugfix, make sure the target branch is upper
+    - possible bugfix, error handling in reopen_nondir()
+    - new copyup implementation
+    - pin the branch dir
+    - convert the plink list into hlist
+  * linux-doc: Include aufs documentation
+  * [x86] zsmalloc: Change to built-in, as it can no longer be modular
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 10 May 2013 04:46:36 +0100
+
+linux-tools (3.8.11-1) unstable; urgency=low
+
+  * New upstream stable update
+
+  [ Ben Hutchings ]
+  * Upload to unstable (Closes: #707023)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 07 May 2013 02:11:16 +0100
+
+linux (3.8.11-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.6
+    - sysfs: fix race between readdir and lseek
+    - sysfs: handle failure path correctly for readdir()
+    - rtlwifi: usb: add missing freeing of skbuff
+    - b43: A fix for DMA transmission sequence errors
+    - tg3: fix length overflow in VPD firmware parsing (CVE-2013-1929)
+    - xen-blkback: fix dispatch_rw_block_io() error path
+    - net/irda: add missing error path release_sock call
+    - usb: xhci: Fix TRB transfer length macro used for Event TRB.
+    - Btrfs: fix locking on ROOT_REPLACE operations in tree mod log
+    - Btrfs: fix race between mmap writes and compression
+    - USB: serial: fix use-after-free in TIOCMIWAIT
+    - loop: prevent bdev freeing while device in use
+    - virtio: console: add locking around c_ovq operations
+    - nfsd4: reject "negative" acl lengths
+    - Btrfs: fix space leak when we fail to reserve metadata space
+    - net: remove a WARN_ON() in net_enable_timestamp()
+    - 8021q: fix a potential use-after-free
+    - unix: fix a race condition in unix_release()
+    - atl1e: drop pci-msi support because of packet corruption
+      (possibly fixes: #577747)
+    - ipv6: fix bad free of addrconf_init_net
+    - ipv6: don't accept multicast traffic with scope 0
+    - ipv6: don't accept node local multicast traffic from the wire
+    - pch_gbe: fix ip_summed checksum reporting on rx
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.7
+    - drm/nouveau: fix handling empty channel list in ioctl's
+    - drm/i915: Be sure to turn hsync/vsync back on at crt enable (v2)
+      (fixes regression in 3.8.3)
+    - drm: correctly restore mappings if drm_open fails
+    - mm: prevent mmap_cache race in find_vma()
+    - mwifiex: limit channel number not to overflow memory
+    - spinlocks and preemption points need to be at least compiler barriers
+    - crypto: gcm - fix assumption that assoc has one segment
+    - NFSv4/4.1: Fix bugs in nfs4[01]_walk_client_list
+    - vfio-pci: Fix possible integer overflow
+    - can: gw: use kmem_cache_free() instead of kfree()
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.8
+    - ipc: set msg back to -EAGAIN if copy wasn't performed
+    - GFS2: Fix unlock of fcntl locks during withdrawn state
+    - cifs: Allow passwords which begin with a delimitor (fixes
+      regression in 3.8)
+    - [i386] Fix possible incomplete TLB invalidate with PAE pagetables
+    - sched_clock: Prevent 64bit inatomicity on 32bit systems
+    - [x86] mm, paravirt: Fix vmalloc_fault oops during lazy MMU updates
+    - tty: don't deadlock while flushing workqueue
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.9
+    - [powerpc] add a missing label in resume_kernel
+    - [powerpc] kvm/powerpc/e500mc: fix tlb invalidation on cpu migration
+    - kthread: Prevent unpark race which puts threads on the wrong cpu
+    - hrtimer: Don't reinitialize a cpu_base lock on CPU_UP
+    - hugetlbfs: add swap entry check in follow_hugetlb_page()
+    - kernel/signal.c: stop info leak via the tkill and the tgkill syscalls
+    - hfsplus: fix potential overflow in hfsplus_file_truncate()
+    - md: raid1,10: Handle REQ_WRITE_SAME flag in write bios
+    - [x86] KVM: Allow cross page reads and writes from cached translations.
+      (fixes regression in fix for CVE-2013-1796)
+    - hsched: Convert BUG_ON()s in try_to_wake_up_local() to WARN_ON_ONCE()s
+    - [armel] Fix kexec by setting outer_cache.inv_all for Feroceon
+    - ath9k_htc: accept 1.x firmware newer than 1.3
+    - mac80211: fix cfg80211 interaction on auth/assoc request
+    - crypto: algif - suppress sending source address information in recvmsg
+      (CVE-2013-3076)
+    - vm: add and use vm_iomap_memory() helper function
+    - Btrfs: make sure nbytes are right after log replay
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.10
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.11
+    - TTY: do not update atime/mtime on read/write
+    - TTY: fix atime/mtime regression
+    - [sparc] sparc64: Fix race in TLB batch processing.
+    - atm: update msg_namelen in vcc_recvmsg() (CVE-2013-3222)
+    - ax25: fix info leak via msg_name in ax25_recvmsg() (CVE-2013-3223)
+    - Bluetooth: fix possible info leak in bt_sock_recvmsg() (CVE-2013-3224)
+    - Bluetooth: RFCOMM - Fix missing msg_namelen update in
+      rfcomm_sock_recvmsg() (CVE-2013-3225)
+    - Bluetooth: SCO - Fix missing msg_namelen update in sco_sock_recvmsg()
+    - caif: Fix missing msg_namelen update in caif_seqpkt_recvmsg()
+      (CVE-2013-3227)
+    - irda: Fix missing msg_namelen update in irda_recvmsg_dgram()
+      (CVE-2013-3228)
+    - [s390] iucv: Fix missing msg_namelen update in iucv_sock_recvmsg()
+      (CVE-2013-3229)
+    - l2tp: fix info leak in l2tp_ip6_recvmsg()
+    - llc: Fix missing msg_namelen update in llc_ui_recvmsg() (CVE-2013-3231)
+    - netrom: fix info leak via msg_name in nr_recvmsg()
+    - NFC: llcp: fix info leaks via msg_name in llcp_sock_recvmsg()
+    - rose: fix info leak via msg_name in rose_recvmsg() (CVE-2013-3234)
+    - tipc: fix info leaks via msg_name in recv_msg/recv_stream
+      (CVE-2013-3235)
+    - atl1e: limit gso segment size to prevent generation of wrong ip length
+      fields (Closes: #565404)
+    - af_unix: If we don't care about credentials coallesce all messages
+    - ipv6/tcp: Stop processing ICMPv6 redirect messages
+    - rtnetlink: Call nlmsg_parse() with correct header length
+    - tcp: incoming connections might use wrong route under synflood
+    - tcp: Reallocate headroom if it would overflow csum_start
+    - net: cdc_mbim: remove bogus sizeof()
+    - net: fix incorrect credentials passing (CVE-2013-1979)
+    - net: drop dst before queueing fragments
+
+  [ Ben Hutchings ]
+  * [rt] Update to 3.8.10-rt6
+  * aufs: Update to aufs3.8-20130325
+    - ftruncate() supports sb_{start,end}_write()
+    - replace mnt_drop_write_file() by __mnt_drop_write()
+    - support for vfs_truncate()
+  * udeb: Move modules and adjust dependencies to avoid duplicates
+    (Closes: #706646)
+    - Move crc16 to crc-modules; make ext4-modules and nic-usb-modules depend
+      on it
+    - Make xfs-modules depends on crc-modules
+    - Move pps_core and ptp to nic-common-modules or nic-modules as appropriate
+  * udeb: Merge redundant configuration for ext{2,3} dependency on mbcache
+  * Set ABI to 1
+  * bug script: Remove broken sound functions (Closes: #705619)
+  * [i386/486] udeb: Add lxfb to fb-modules (Closes: #705780)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 04 May 2013 21:45:23 +0100
+
+linux (3.8.5-1~experimental.1) experimental; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.4
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.5
+
+  [ Ben Hutchings ]
+  * signal: Fix use of missing sa_restorer field (build regression
+    introduced by fix for CVE-2013-0914)
+  * udeb: Add hid-generic, hid-holtek-kbd, hid-lenovo-tpkbd,
+    hid-roccat-isku, hid-roccat-lua, hid-roccat-savu to input-modules
+  * cdc_ncm,cdc_mbim: Use NCM by default
+  * [rt] Update to 3.8.4-rt2 and reenable
+  * [rt] wireless: orinoco_usb is BROKEN
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 31 Mar 2013 07:35:31 +0100
+
+linux (3.8.3-1~experimental.1) experimental; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.3
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.8-20130311
+  * USB: cdc-wdm: fix buffer overflow (CVE-2013-1860)
+  * signal: always clear sa_restorer on execve (CVE-2013-0914)
+  * ext3: Fix format string issues (CVE-2013-1848)
+  * net/sctp: Validate parameter size for SCTP_GET_ASSOC_STATS (CVE-2013-1828)
+  * bridge: fix mdb info leaks
+  * rtnl: fix info leak on RTM_GETLINK request for VF devices
+  * dcbnl: fix various netlink info leaks
+  * ALSA: seq: Fix missing error handling in snd_seq_timer_open()
+
+  [ Ian Campbell ]
+  * arm: correct path to DTB files. Patch from Nobuhiro Iwamatsu.
+    (Closes: #703082)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 19 Mar 2013 04:52:46 +0000
+
+linux-tools (3.8.2-1~experimental.1) experimental; urgency=low
+
+  * New upstream release (Closes: #702450)
+
+  [ Ben Hutchings ]
+  * linux-tools: Install bash_completion script for perf with a version-
+    dependent name (Closes: #701790)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 07 Mar 2013 05:32:40 +0000
+
+linux (3.8.2-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.1
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.2
+
+  [ Ben Hutchings ]
+  * linux-image: Increase minimum version of initramfs-tools to 0.110~
+    which copes with the recently renamed EHCI and NFS modules
+  * genorig: Accept xz-compressed upstream tarballs and patches,
+    thanks to Sedat Dilek
+  * net: Enable USB_NET_CDC_MBIM as module (Closes: #701869)
+  * mfd,mmc,memstick: Enable MFD_RTSX_PCI, MMC_REALTEK_PCI and
+    MEMSTICK_REALTEK_PCI as modules, replacing RTS_PSTOR (Closes: #702108)
+  * [mips,mipsel] Add dependencies for HAVE_ARCH_TRANSPARENT_HUGEPAGE
+    (fixes FTBFS)
+
+  [ Aurelien Jarno ]
+  * [mips/octeon] Change HW_RANDOM and HW_RANDOM_OCTEON to modules.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 07 Mar 2013 04:00:04 +0000
+
+linux (3.8-1~experimental.1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.8
+    - pidns: Support unsharing the pid namespace. (Closes: #595920)
+    - fsnotify: Rework locking and reference counting (Closes: #602966)
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20130204
+  * sock_diag: Fix out-of-bounds access to sock_diag_handlers[]
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 25 Feb 2013 05:29:53 +0000
+
+linux (3.7.8-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.7.4
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.7.5
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.7.6
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.7.7
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.7.8
+
+  [ Ben Hutchings ]
+  * Add powerpcspe architecture, thanks to Roland Stigge (Closes: #693042)
+  * aufs: Hide CONFIG_AUFS_PROC_MAP, which requires a patch we don't apply
+    (Closes: #693332)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 15 Feb 2013 00:42:03 +0000
+
+linux (3.7.3-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.7.2
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.7.3
+
+  [ Ben Hutchings ]
+  * [ia64] nouveau: Disable another bit of ACPI support (fixes FTBFS)
+  * [armhf/omap] Make OMAP_DMA built-in (fixes FTBFS)
+  * ath6kl: Do not use virt_addr_valid() (fixes FTBFS on mips,mipsel)
+  * [armel/iop32x,armel/ixp4xx,armel/orion5x] Make IPV6 a module again due
+    to kernel size limit (fixes FTBFS)
+  * ALSA: usb-audio: Avoid autopm calls after disconnection; Fix missing
+    autopm for MIDI input (Closes: #664068)
+  * [!x86] Disable ZRAM, ZSMALLOC as modules (Reopens: #676779), as they
+    really aren't portable yet.
+  * udeb: Remove ipv6-modules on all architectures/flavours where it's
+    now built-in (fixes FTBFS)
+
+  [ Ian Campbell ]
+  * [x86/xen] Update microcode driver to use new API.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 18 Jan 2013 01:36:15 +0000
+
+linux (3.7.1-1~experimental.2) experimental; urgency=low
+
+  [ Ben Hutchings ]
+  * linux-headers-common: Include the include/uapi/asm-generic directory
+    (Closes: #696664)
+  * linux-headers-common: Do not use link-vmlinux.sh when cleaning external
+    modules (Closes: #696775)
+  * Enable ZRAM, ZSMALLOC as modules on all architectures (Closes: #676779)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 05 Jan 2013 17:48:05 +0000
+
+linux-tools (3.7.1-1~experimental.1) experimental; urgency=low
+
+  * New upstream release
+
+  [ Ben Hutchings ]
+  * [amd64] linux-tools: Enable optimisations and special-casing of x86_64
+    (Closes: #694759)
+
+  [ Uwe Kleine-König ]
+  * linux-kbuild: debian/control: Use Section: kernel (Closes: #545017)
+
+ -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 28 Dec 2012 09:29:53 -0800
+
+linux (3.7.1-1~experimental.1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.7
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.7.1
+
+  [ maximilian attems ]
+  * Enable WIZNET_W5100, WIZNET_W5300, AMD_PHY, BCM87XX_PHY.
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20121210
+  * [rt] Disable until it is updated for Linux 3.7 or later
+  * Make gcc-4.7 the default compiler
+  * [mips,mipsel,sparc] media/parpot: Disable VIDEO_PMS in all
+    configurations where the other parport video drivers are disabled
+  * [x86] fs: Re-enable PSTORE_RAM (formerly known as RAMOOPS) as module
+  * net/wireless: Enable WL_TI; re-enable WL1251 and WL12XX as modules
+  * staging: Enable RTLLIB; re-enable RTL8192E as module
+  * media: Enable IR_TTUSBIR as module, replacing LIRC_TTUSBIR
+  * media: Enable VIDEO_STK1160 as module, replacing EASYCAP
+  * [armhf/mx5] Update configuration:
+    - Enable MACH_IMX51_DT, replacing MACH_MX51_EFIKAMX (but not fully
+      working in this kernel version)
+    - Enable SOC_IMX53, replacing MACH_MX53_{EVK,SMD,LOCO,ARD}
+    - Re-enable MFD_MC13XXX_SPI (formerly included in MFD_MC13XXX)
+    - Enable PWM and re-enable PWM_IMX (formerly known as MXC_PWM)
+  * [i386] comedi: Re-enable COMEDI_ISA_DRIVERS
+  * [i386,alpha] media/radio: Enable V4L_RADIO_ISA_DRIVERS and re-enable
+    the ISA drivers
+  * PCI: Enable PCI_REALLOC_ENABLE_AUTO
+  * [x86] PCI: Enable PCI_PRI, PCI_PASID, PCI_IOAPIC
+  * [amd64] ACPI: Enable ACPI_BGRT
+  * net: Enable INET_UDP_DIAG, NET_IPVTI, PACKET_DIAG, UNIX_DIAG as modules
+  * netfilter: Enable NF_NAT_IPV6, IP6_NF_TARGET_MASQUERADE, IP6_NF_TARGET_NPT,
+    NF_CT_NETLINK_HELPER as modules
+  * net/sched: Enable NET_EMATCH_CANID, NET_EMATCH_IPSET as modules
+  * can: Enable CAN_PEAK_PCIEC, CAN_PEAK_PCMCIA, CAN_PEAK_USB as modules
+  * [i386] can: Enable CAN_CC770, CAN_CC770_ISA as module
+  * block: Enable BLK_DEV_NVME, BLK_DEV_PCIESSD_MTIP32XX as modules
+  * qla2xxx: Enable TCM_QLA2XXX as module
+  * team: Enable NET_TEAM_MODE_BROADCAST as module
+  * net: Enable VXLAN as module
+  * phy: Enable AT803X_PHY as module
+  * rt2800pci: Enable RT2800PCI_RT3290
+  * wireless/ti: Enable WL18XX as module
+  * ptp: Enable clock drivers along with associated net/PHY drivers
+  * [!x86] drm: Disable DRM_VMWGFX
+  * drm: Enable DRM_UDL as module
+    - Disable autoloading as it is incompatible with older versions of
+      xserver-xorg-video-displaylink
+  * [x86] drm: Enable DRM_AST, DRM_MGAG200 as modules
+    - Disable autoloading as they are incompatible with older versions of
+      xserver-xorg-video-ast and xserver-xorg-video-mga
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 24 Dec 2012 02:50:21 +0000
+
+linux (3.6.9-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.9
+
+  [ maximilian attems ]
+  * Enable NETFILTER_XT_TARGET_HMARK, NET_EMATCH_IPSET, USB_NET_QMI_WWAN.
+  * Enable more HID drivers.
+  * [x86] Enable INTEL_MEI.
+  * [ARM]: 7492/1: add strstr declaration for decompressors.
+
+  [ Ben Hutchings ]
+  * HID: Add Apple wireless keyboard 2011 ANSI to special driver list
+    (Closes: #694546)
+
+  [ Arnaud Patard ]
+  * [ARM]: add patch from staging-next to fix lis3l02dq on omap
+  * [ARM]: backport omap usb fixes to make it build again.
+  * Change musb Kconfig so that our configuration of USB_MUSB_OMAP2PLUS
+  is used and not set to 'm'.
+
+ -- maximilian attems <maks@debian.org>  Wed, 05 Dec 2012 16:16:50 +0100
+
+linux (3.6.8-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.7
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.8
+
+  [ Bastian Blank ]
+  * Enable POWER_SUPPLY, BLK_DEV_THROTTLING and NETPRIO_CGROUP.
+  * [amd64] Enable CRYPTO_CAMELLIA_X86_64, CRYPTO_SERPENT_AVX_X86_64 and
+    CRYPTO_TWOFISH_AVX_X86_64.
+  * [x86] Enable more platform drivers.
+  * [s390/s390x-tape, s390x/s390x-tape] Remove not longer supported image
+    variant.
+  * [s390, s390x] Enable support for transparent hugepages.
+  * Use XZ for kernel images if supported.
+
+  [ maximilian attems ]
+  * Enable DVB_USB_RTL28XXU. (closes: #692749)
+  * Enable SBP_TARGET. (closes: #685341)
+
+ -- maximilian attems <maks@debian.org>  Wed, 28 Nov 2012 18:35:41 +0100
+
+linux-tools (3.6-1~experimental.1) experimental; urgency=low
+
+  * New upstream release (Closes: #690011)
+
+  [ Ben Hutchings ]
+  * genorig: Accept xz-compressed upstream tarballs and patches, and
+    generate an xz-compressed orig tarball, thanks to Sedat Dilek
+  * source: Enable xz-compression for debian directory tarball
+
+  [ Jonathan Nieder ]
+  * Add myself to uploaders list.
+
+ -- Jonathan Nieder <jrnieder@gmail.com>  Sat, 24 Nov 2012 13:40:28 -0800
+
+linux (3.6.6-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.5
+    - [x86] mm: Find_early_table_space based on ranges that are actually
+      being mapped (Closes: #692067)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.6
+    - ext4: fix unjournaled inode bitmap modification (Closes: #692411)
+
+  [ Uwe Kleine-König ]
+  * [rt] bump to 3.6.4-rt10
+
+  [ Ben Hutchings ]
+  * [x86] staging: Re-enable ZSMALLOC as module, previously selected by
+    ZRAM but now a dependency (Closes: #692024)
+  * fs: Re-enable link security restrictions that are disabled by default
+    in 3.6.5
+  * [rt] Update to 3.6.6-rt17
+  * rc: Enable RC_DEVICES; re-enable LIRC; re-enable the drivers that
+    depend on those; enable IR_SANYO_DECODER and IR_IGUANA as modules
+
+  [ Bastian Blank ]
+  * [sparc] Remove IP_PNP, IP_PNP_RARP, NET_IPGRE and ARPD overrides.
+  * Enable IPv6 globally.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 15 Nov 2012 04:49:50 +0000
+
+linux (3.6.4-1~experimental.1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.6
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.1
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.2
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.3
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.6.4
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.6-20121015
+  * cirrus: Disable by default, as it is currently incompatible with
+    xserver-xorg-video-cirrus. It can be forced to load with module
+    parameter modeset=1.
+
+  [ Uwe Kleine-König ]
+  * reenable the rt featureset using 3.6.3-rt8
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 29 Oct 2012 04:22:02 +0000
+
+linux (3.5.5-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.5.3
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.5.4
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.5.5
+
+  [ Ben Hutchings ]
+  * mfd: lpc_ich: Fix a 3.5 kernel regression for iTCO_wdt driver
+    (Closes: #686040)
+  * drm: Enable various drivers (Closes: #685479):
+    - [x86] Enable DRM_GMA500 (previously DRM_PSB) as module
+    - Enable DRM_CIRRUS_QEMU as module
+  * media/dvb: Enable DVB_USB_AF9035 as module (Closes: #687050)
+
+  [ Bastian Blank ]
+  * Remove superfluous dependency in debugging packages.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 04 Oct 2012 15:19:30 +0200
+
+linux-tools (3.5-1~experimental.1) experimental; urgency=low
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 20 Aug 2012 00:57:12 +0100
+
+linux (3.5.2-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.5.1
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.5.2
+
+  [ Ben Hutchings ]
+  * genorig: Fix linux_upstream_full compute for version with modifier,
+    thanks to Julien Danjou (Closes: #683824)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 19 Aug 2012 21:36:04 +0100
+
+linux (3.5-1~experimental.1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.5
+
+  [ Ben Hutchings ]
+  * net: Enable OPENVSWITCH as module (Closes: #675010)
+  * aufs: Update to aufs3.5-20120730
+  * rt: Disable until it is updated for Linux 3.5 or later
+  * debian/copyright: Convert to machine-readable format (fka DEP-5)
+  * debian/copyright: Add copyright notice for newly-added Unicode data
+  * [x86] seccomp: Enable SECCOMP_FILTER
+  * [x86] applesmc: Update to Linux 3.6, including fixes for new MacBook models
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 01 Aug 2012 14:08:55 +0100
+
+linux (3.4.4-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.4.2
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.4.3
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.4.4
+
+  [ Ben Hutchings ]
+  * [ia64] Export <asm/cmpxchg.h> to userland (fixes FTBFS)
+  * [x86] Enable BATTERY_SBS as module (Closes: #662902)
+  * team: Enable NET_TEAM_MODE_LOADBALANCE as module
+  * [x32] Build a linux-libc-dev package
+  * input: Enable MOUSE_SYNAPTICS_USB (Closes: #678071)
+  * [x86] staging: zsmalloc: Finish conversion to a separate module
+    (Closes: #677273)
+  * [rt] Update to 3.4.4-rt13
+
+  [ Arnaud Patard ]
+  * [armel] disable FIPS, VGA_ARB, FTRACE on iop32x and ixp4xx to reduce
+  kernel size.
+  * [armel] disable virtio modules on all platforms except versatile
+  * [armel] enable PHYSMAP on all platforms except ixp4xx
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 26 Jun 2012 07:28:41 +0100
+
+linux-tools (3.4-1~experimental.1) experimental; urgency=low
+
+  * New upstream release
+  * Build-Depend on bison and flex, now required to build perf
+  * Fix version insertion in perf man pages
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 09 Jun 2012 20:51:12 +0100
+
+linux-2.6 (3.4.1-1~experimental.1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.4
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.4.1
+
+  [ maximilian attems ]
+  * Enable DM_VERITY, NF_CONNTRACK_TIMEOUT, NF_CT_NETLINK_TIMEOUT,
+    IP_NF_MATCH_RPFILTER, IP6_NF_MATCH_RPFILTER, NETFILTER_NETLINK_ACCT,
+    NETFILTER_XT_MATCH_NFACCT, NET_SCH_PLUG, SCSI_UFSHCD, SCSI_VIRTIO,
+    NET_TEAM, ATH6KL.
+
+  [ Ben Hutchings ]
+  * DFSG: Remove the new vs6624 driver, which contains non-free firmware
+  * aufs: Update to aufs3.4-20120521
+  * [rt] Update to 3.4-rt8 and reenable
+
+ -- maximilian attems <maks@debian.org>  Wed, 06 Jun 2012 10:25:57 +0200
+
+linux-2.6 (3.3.6-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.3.5
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.3.6
+    - USB: cdc-wdm: fix race leading leading to memory corruption
+    - autofs: make the autofsv5 packet file descriptor use a packetized pipe
+      (Closes: #633423)
+    - PM / Hibernate: fix the number of pages used for hibernate/thaw buffering
+      (Closes: #659363)
+    - efi: Validate UEFI boot variables
+    - efivars: Improve variable validation
+    - fs/cifs: fix parsing of dfs referrals
+    - hfsplus: Fix potential buffer overflows (CVE-2012-2319)
+    - exit_signal: fix the "parent has changed security domain" logic
+    - net: l2tp: unlock socket lock before returning from l2tp_ip_sendmsg
+    - sky2: fix receive length error in mixed non-VLAN/VLAN traffic
+      (Closes: #492853)
+    - [s390] KVM: do store status after handling STOP_ON_STOP bit
+    - [s390] KVM: Sanitize fpc registers for KVM_SET_FPU
+    - KVM: Fix write protection race during dirty logging
+    - KVM: mmu_notifier: Flush TLBs before releasing mmu_lock
+    - KVM: Ensure all vcpus are consistent with in-kernel irqchip settings
+      (CVE-2012-1601)
+    - KVM: nVMX: Fix erroneous exception bitmap check
+    - KVM: VMX: Fix kvm_set_shared_msr() called in preemptible context
+    - KVM: lock slots_lock around device assignment
+    - hugepages: fix use after free bug in "quota" handling
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 18 May 2012 03:53:16 +0100
+
+linux-2.6 (3.3.4-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.3.3
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.3.4
+
+  [ Ben Hutchings ]
+  * [x86] dell-laptop: Terminate quirks list properly
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 01 May 2012 01:23:59 +0100
+
+linux-2.6 (3.3.2-1~experimental.1) experimental; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.3.1
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.3.2
+
+  [ Ben Hutchings ]
+  * [armel/iop32x] Add missing #includes (fixes FTBFS)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 15 Apr 2012 16:36:13 +0100
+
+linux-tools (3.3-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+  * linux-kbuild: debian/control: Set Multi-Arch: foreign
+  * linux-tools: Build perf on alpha and hppa (Closes: #664834)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 24 Mar 2012 23:15:59 +0000
+
+linux-2.6 (3.3-1~experimental.1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.3
+
+  [ Ben Hutchings ]
+  * [x86] crypto: Enable CRYPTO_SERPENT_SSE2_586, CRYPTO_SERPENT_SSE2_X86_64
+  * aufs: Update to aufs3.x-rcN-20120312
+  * IB: Enable INFINIBAND_SRPT as module (Closes: #663041)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 21 Mar 2012 03:08:36 +0000
+
+linux-2.6 (3.3~rc6-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20120123
+  * rt: Disable until it is updated for Linux 3.3 or later
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 04 Mar 2012 20:27:42 +0000
+
+linux (3.2.41-2) unstable; urgency=low
+
+  * [ia64] udeb: Remove efi-modules package; make kernel-image provide
+    efi-modules (fixes FTBFS)
+  * linux-headers: Fix file installation on architectures without
+    Kbuild.platforms (Closes: #703800)
+  * [x86] drm/i915: bounds check execbuffer relocation count (CVE-2013-0913)
+  * [x86] drm: Enable DRM_GMA500 as module, replacing DRM_PSB (Closes: #703506)
+    - Enable DRM_GMA600, DRM_GMA3600, DRM_MEDFIELD
+  * [x86] KVM: x86: fix for buffer overflow in handling of MSR_KVM_SYSTEM_TIME
+    (CVE-2013-1796)
+  * [x86] KVM: x86: Convert MSR_KVM_SYSTEM_TIME to use gfn_to_hva_cache
+    functions (CVE-2013-1797)
+  * KVM: Fix bounds checking in ioapic indirect register reads (CVE-2013-1798)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 25 Mar 2013 15:17:44 +0000
+
+linux (3.2.41-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.40
+    - ext4: return ENOMEM if sb_getblk() fails
+    - ext4: fix possible use-after-free with AIO
+    - s390/kvm: Fix store status for ACRS/FPRS
+    - staging: comedi: disallow COMEDI_DEVCONFIG on non-board minors
+    - ext4: fix race in ext4_mb_add_n_trim()
+    - UBIFS: fix double free of ubifs_orphan objects
+    - hrtimer: Prevent hrtimer_enqueue_reprogram race
+    - nfsd: Fix memleak
+    - x86: Do not leak kernel page mapping locations
+    - USB: usb-storage: unusual_devs update for Super TOP SATA bridge
+    - posix-cpu-timers: Fix nanosleep task_struct leak
+    - NFSv4.1: Don't decode skipped layoutgets
+    - cgroup: fix exit() vs rmdir() race
+    - cpuset: fix cpuset_print_task_mems_allowed() vs rename() race
+    - ext4: fix xattr block allocation/release with bigalloc
+    - mm: fix pageblock bitmap allocation
+    - target: Add missing mapped_lun bounds checking during make_mappedlun
+      setup
+    - b43: Increase number of RX DMA slots
+    - posix-timer: Don't call idr_find() with out-of-range ID
+    - fs: Fix possible use-after-free with AIO
+    - powerpc/kexec: Disable hard IRQ before kexec
+    - mmu_notifier_unregister NULL Pointer deref and multiple ->release()
+      callouts
+    - tmpfs: fix use-after-free of mempolicy object (CVE-2013-1767)
+    - ocfs2: fix possible use-after-free with AIO
+    - ocfs2: fix ocfs2_init_security_and_acl() to initialize acl correctly
+    - ocfs2: ac->ac_allow_chain_relink=0 won't disable group relink
+    - idr: fix a subtle bug in idr_get_next()
+    - idr: make idr_get_next() good for rcu_read_lock()
+    - idr: fix top layer handling
+    - sysctl: fix null checking in bin_dn_node_address()
+    - nbd: fsync and kill block device on shutdown
+    - s390/timer: avoid overflow when programming clock comparator
+      (regression in 3.2.38)
+    - xen-pciback: rate limit error messages from xen_pcibk_enable_msi{,x}()
+      (CVE-2013-0231)
+    - xen-netback: correctly return errors from netbk_count_requests()
+    - xen-netback: cancel the credit timer when taking the vif down
+    - ipv6: use a stronger hash for tcp
+    - staging: comedi: ni_labpc: correct differential channel sequence for
+      AI commands
+    - staging: comedi: ni_labpc: set up command4 register *after* command3
+    - vhost: fix length for cross region descriptor (CVE-2013-0311)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.41
+    - NFS: Don't allow NFS silly-renamed files to be deleted, no signal
+    - ARM: VFP: fix emulation of second VFP instruction
+    - md: fix two bugs when attempting to resize RAID0 array.
+    - proc connector: reject unprivileged listener bumps
+    - cifs: ensure that cifs_get_root() only traverses directories
+    - dm: fix truncated status strings
+    - hw_random: make buffer usable in scatterlist. (real fix for #701784)
+    - efi_pstore: Check remaining space with QueryVariableInfo() before
+      writing data
+    - efi: be more paranoid about available space when creating variables
+      (Closes: #703574)
+    - vfs: fix pipe counter breakage
+    - xen/pciback: Don't disable a PCI device that is already disabled.
+    - ALSA: seq: Fix missing error handling in snd_seq_timer_open()
+    - ext3: Fix format string issues (CVE-2013-1848)
+    - keys: fix race with concurrent install_user_keyrings() (CVE-2013-1792)
+    - USB: cdc-wdm: fix buffer overflow (CVE-2013-1860)
+    - signal: always clear sa_restorer on execve (CVE-2013-0914)
+    - crypto: user - fix info leaks in report API (CVE-2013-2546,
+      CVE-2013-2547, CVE-2013-2548)
+    - Fix: compat_rw_copy_check_uvector() misuse in aio, readv, writev, and
+      security keys
+    - batman-adv: bat_socket_read missing checks
+    - batman-adv: Only write requested number of byte to user buffer
+    - mm/hotplug: correctly add new zone to all other nodes' zone lists
+      (CVE-2012-5517)
+    - btrfs: use rcu_barrier() to wait for bdev puts at unmount
+
+  [ Aurelien Jarno]
+  * [mips,mipsel] Disable VGA_CONSOLE and ignore the corresponding ABI
+    change. It is completely broken on MIPS.
+  * headers: Include Kbuild.platforms and Platform files in -common to
+    fix out-of-tree building on mips and mipsel.
+  * [{mips,mipsel}/{4,5}kc-malta] Enable HW_RANDOM as module so that both
+    flavours have a consistent configuration.
+
+  [ Ben Hutchings ]
+  * [x86] ata_piix: reenable MS Virtual PC guests (fixes regression in
+    3.2.19-1)
+  * test-patches: Clean up all previous test patches, whether or not they
+    were applied
+  * test-patches: Add --fuzz option to allow testing patches that have fuzz
+  * [x86] efi: Fix processor-specific memcpy() build error (Closes: #698581)
+  * udeb: Add hid-topseed to input-modules (Closes: #702611)
+  * [x86] drm/i915: Unconditionally initialise the interrupt workers,
+    thanks to Bjørn Mork (Closes: #692607)
+  * efi: Ensure efivars is loaded on EFI systems (Closes: #703363)
+    - [x86] Use a platform device to trigger loading of efivars
+    - [ia64] Change EFI_VARS from module to built-in
+  * efivars: Work around serious firmware bugs
+    - Allow disabling use as a pstore backend
+    - Add module parameter to disable use as a pstore backend
+      * [x86] Set EFI_VARS_PSTORE_DEFAULT_DISABLE=y
+    - explicitly calculate length of VariableName
+    - Handle duplicate names from get_next_variable()
+  * efi_pstore: Introducing workqueue updating sysfs
+  * efivars: pstore: Do not check size when erasing variable
+  * efivars: Remove check for 50% full on write
+  * kmsg_dump: Only dump kernel log in error cases (Closes: #703386)
+    - kexec: remove KMSG_DUMP_KEXEC
+    - kmsg_dump: don't run on non-error paths by default
+  * [x86] i915: initialize CADL in opregion (Closes: #703271)
+  * drm, agp: Update to 3.4.37:
+    - drm/radeon/dce6: fix display powergating
+    - drm: don't add inferred modes for monitors that don't support them
+    - drm/i915: Increase the RC6p threshold.
+  * signal: Fix use of missing sa_restorer field (build regression
+    introduced by fix for CVE-2013-0914)
+  * rds: limit the size allocated by rds_message_alloc()
+  * rtnl: fix info leak on RTM_GETLINK request for VF devices
+  * dcbnl: fix various netlink info leaks
+  * [s390] mm: fix flush_tlb_kernel_range()
+  * [powerpc] Fix cputable entry for 970MP rev 1.0
+  * vhost/net: fix heads usage of ubuf_info
+  * udf: avoid info leak on export (CVE-2012-6548)
+  * isofs: avoid info leak on export (CVE-2012-6549)
+  * [x86,powerpc/powerpc64] random: Change HW_RANDOM back from built-in to
+    module, as we now have a real fix for #701784
+  * [rt] Update to 3.2.40-rt60
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 23 Mar 2013 03:54:34 +0000
+
+linux (3.2.39-2) unstable; urgency=high
+
+  * [s390,s390x] virtio: Ignore ABI changes in 3.2.39 (fixes FTBFS)
+  * [sparc] drm: Ignore ABI changes in 3.2.39 (fixes FTBFS)
+  * [sparc] drm: Change from built-in to module
+  * [rt] Update to 3.2.39-rt59:
+    - acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t
+    - printk: Fix rq->lock vs logbuf_lock unlock lock inversion
+    - wait-simple: Simple waitqueue implementation
+    - rcutiny: Use simple waitqueue
+  * [x86] efi: Fix ABI change for introduction of efi_enabled() function
+    in 3.2.38 (Closes: #701690)
+  * [armel/versatile] i2c: Re-enable I2C_PCA_PLATFORM as module, erroneously
+    disabled in 3.2.39-1 (fixes FTBFS)
+  * [x86,powerpc/powerpc64] random: Change HW_RANDOM from module to built-in,
+    to work around virtio-rng bug (Closes: #701784)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 27 Feb 2013 03:48:30 +0000
+
+linux (3.2.39-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.36
+    - freezer: PF_FREEZER_NOSIG should be cleared along with PF_NOFREEZE
+      (Closes: #697077)
+    - tmpfs: fix shared mempolicy leak
+    - virtio: 9p: correctly pass physical address to userspace for high pages
+    - virtio: force vring descriptors to be allocated from lowmem
+    - USB: EHCI: bugfix: urb->hcpriv should not be NULL
+    - rcu: Fix batch-limit size problem
+    - Bluetooth: ath3k: Add support for VAIO VPCEH [0489:e027]
+      (Closes: #700550)
+    - mvsas: fix undefined bit shift
+    - ALSA: usb-audio: Avoid autopm calls after disconnection; Fix missing
+      autopm for MIDI input (Closes: #664068)
+    - target/file: Fix 32-bit highmem breakage for SGL -> iovec mapping
+    - SCSI: fix Null pointer dereference on disk error
+    - proc: pid/status: show all supplementary groups
+    - nfsd4: fix oops on unusual readlike compound
+    - ARM: missing ->mmap_sem around find_vma() in swp_emulate.c
+    - sctp: fix memory leak in sctp_datamsg_from_user() when copy from user
+      space fails
+    - ne2000: add the right platform device
+    - irda: sir_dev: Fix copy/paste typo
+    - ipv4: ip_check_defrag must not modify skb before unsharing
+    - telephony: ijx: buffer overflow in ixj_write_cid()
+    - udf: fix memory leak while allocating blocks during write
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.37
+    - ext4: fix extent tree corruption caused by hole punch
+    - jbd2: fix assertion failure in jbd2_journal_flush()
+    - tmpfs mempolicy: fix /proc/mounts corrupting memory
+    - sparc: huge_ptep_set_* functions need to call set_huge_pte_at()
+    - inet: Fix kmemleak in tcp_v4/6_syn_recv_sock and
+      dccp_v4/6_request_recv_sock
+    - net: sched: integer overflow fix
+    - tcp: implement RFC 5961 3.2
+    - tcp: implement RFC 5961 4.2
+    - tcp: refine SYN handling in tcp_validate_incoming
+    - tcp: tcp_replace_ts_recent() should not be called from
+      tcp_validate_incoming()
+    - tcp: RFC 5961 5.2 Blind Data Injection Attack Mitigation
+    - RDMA/nes: Fix for crash when registering zero length MR for CQ
+    - ACPI : do not use Lid and Sleep button for S5 wakeup
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.38
+    - staging: comedi: comedi_test: fix race when cancelling command
+    - mm: use aligned zone start for pfn_to_bitidx calculation
+    - [s390] s390/time: fix sched_clock() overflow (Closes: #698382) 
+    - [i386] xen: Fix stack corruption in xen_failsafe_callback for 32bit
+      PVOPS guests. (CVE-2013-0190)
+    - KVM: PPC: Emulate dcbf
+    - evm: checking if removexattr is not a NULL
+    - ath9k_htc: Fix memory leak
+    - ath9k: do not link receive buffers during flush
+    - ath9k: fix double-free bug on beacon generate failure
+    - x86/msr: Add capabilities check
+    - can: c_can: fix invalid error codes
+    - can: ti_hecc: fix invalid error codes
+    - can: pch_can: fix invalid error codes
+    - smp: Fix SMP function call empty cpu mask race
+    - xfs: Fix possible use-after-free with AIO
+    - EDAC: Test correct variable in ->store function
+    - samsung-laptop: Disable on EFI hardware, to avoid damaging it
+    - NFS: Don't silently fail setattr() requests on mountpoints
+    - intel-iommu: Prevent devices with RMRRs from being placed into SI Domain
+    - ALSA: usb-audio: Fix regression by disconnection-race-fix patch
+      (Closes: #696321)
+    - printk: fix buffer overflow when calling log_prefix function from
+      call_console_drivers
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.39
+    - USB: XHCI: fix memory leak of URB-private data
+    - sched/rt: Use root_domain of rt_rq not current processor
+    - mwifiex: fix incomplete scan in case of IE parsing error
+    - x86-64: Replace left over sti/cli in ia32 audit exit code
+    - Bluetooth: Fix handling of unexpected SMP PDUs
+    - ptrace/x86: Partly fix set_task_blockstep()->update_debugctlmsr() logic
+    - Fix race condition with PTRACE_SETREGS and fatal signal (CVE-2013-0871)
+      + ptrace: introduce signal_wake_up_state() and ptrace_signal_wake_up()
+      + ptrace: ensure arch_ptrace/ptrace_request can never race with SIGKILL
+      + wake_up_process() should be never used to wakeup a TASK_STOPPED/TRACED
+        task
+    - net: prevent setting ttl=0 via IP_TTL
+    - ipv6: fix header length calculation in ip6_append_data()
+    - netxen: fix off by one bug in netxen_release_tx_buffer()
+    - r8169: remove the obsolete and incorrect AMD workaround
+    - net: loopback: fix a dst refcounting issue
+    - packet: fix leakage of tx_ring memory
+    - net: sctp: sctp_setsockopt_auth_key: use kzfree instead of kfree
+    - net: sctp: sctp_endpoint_free: zero out secret key data
+    - xen/netback: shutdown the ring if it contains garbage. (CVE-2013-0216)
+    - xen/netback: don't leak pages on failure in xen_netbk_tx_check_gop.
+    - xen/netback: free already allocated memory on failure in
+      xen_netbk_get_requests
+    - netback: correct netbk_tx_err to handle wrap around. (CVE-2013-0217)
+    - tcp: frto should not set snd_cwnd to 0
+    - tcp: fix for zero packets_in_flight was too broad
+    - tcp: fix MSG_SENDPAGE_NOTLAST logic
+    - bridge: Pull ip header into skb->data before looking into ip header.
+      (Closes: #697903)
+    - x86/xen: don't assume %ds is usable in xen_iret for 32-bit PVOPS.
+      (CVE-2013-0228)
+
+  [ Aurelien Jarno ]
+  * [armhf/vexpress] Add kernel udebs.
+
+  [ Julien Cristau ]
+  * Backport drm and agp subsystems from Linux 3.4.29 (closes: #687442)
+    - [x86] i915: Fixes freezes on Ivy Bridge (Closes: #689268)
+    - nouveau: Support for newer nvidia chipsets (Closes: #690284)
+    - radeon: Support for HD7000 'Southern Islands' chips
+    - [x86] drm/i915: add Ivy Bridge GT2 Server entries (Closes: #684767)
+    - [x86] drm/i915: Close race between processing unpin task and queueing
+      the flip
+
+  [ Ben Hutchings ]
+  * Input: wacom - fix touch support for Bamboo Fun CTH-461
+  * media/rc: Add iguanair driver from Linux 3.7 (Closes: #696925)
+  * rt2800: add chipset revision RT5390R support (Closes: #696592)
+  * [armhf/mx5] mtd: Enable MTD_BLOCK as module
+  * [armhf/mx5] udeb: Add missing storage drivers (Closes: #697128)
+    - Add ata-modules including libata, pata-modules including pata_imx,
+      sata-modules including ahci_platform
+    - Add sdhci-esdhc-imx to mmc-modules
+    - Add mtd-modules including mtd, mtdblock and m25p80
+  * [armhf] udeb: Fix network driver selection
+    - [armhf/mx5] Remove nic-modules
+    - [armhf/vexpress] Add usb-modules
+    - Add standard set of USB drivers to nic-usb-modules
+    - Add nic-wireless-modules
+  * be2net: Apply backported fixes requested by Emulex (Closes: #697479)
+    - be2net: do not modify PCI MaxReadReq size
+    - be2net: fix reporting number of actual rx queues
+    - be2net: do not use SCRATCHPAD register
+    - be2net: reduce gso_max_size setting to account for ethernet header.
+    - be2net: Increase statistics structure size for skyhawk.
+    - be2net: Explicitly clear the reserved field in the Tx Descriptor
+    - be2net: Regression bug wherein VFs creation broken for multiple cards.
+    - be2net: Fix to trim skb for padded vlan packets to workaround an ASIC Bug
+    - be2net: Fix Endian
+    - be2net: Enable RSS UDP hashing for Lancer and Skyhawk
+    - be2net: dont pull too much data in skb linear part
+    - be2net: Fix to parse RSS hash from Receive completions correctly.
+    - be2net: Avoid disabling BH in be_poll()
+  * udeb: Add specialised USB keyboard/mouse drivers to input-modules:
+    hid-a4tech, hid-cypress, hid-ezkey (Closes: #697035), hid-kensington,
+    hid-keytouch, hid-kye, hid-multitouch, hid-ortek, hid-primax,
+    hid-quanta, hid-samsung, hid-speedlink
+  * radeon: Firmware is required for DRM and KMS on R600 onward, but not
+    for KMS on earlier chips (Closes: #697229)
+  * [!powerpc] radeon: Reenable DRM_RADEON_KMS, as it apparently works on
+    most non-PowerMac systems
+  * fs: cachefiles: add support for large files in filesystem caching
+    (Closes: #698376)
+  * [rt] Update to 3.2.38-rt57:
+    - sched: Adjust sched_reset_on_fork when nothing else changes
+    - sched: Queue RT tasks to head when prio drops
+    - sched: Consider pi boosting in setscheduler
+    - sched: Init idle->on_rq in init_idle()
+    - sched: Check for idle task in might_sleep()
+    - mm: swap: Initialize local locks early
+  * [armel/versatile,armhf/vexpress] i2c: Enable I2C, I2C_VERSATILE as modules
+    (Closes: #696182)
+  * ext4: Fix corruption by hole punch in large files (Closes: #685726)
+    - rewrite punch hole to use ext4_ext_remove_space()
+    - fix hole punch failure when depth is greater than 0
+    - fix kernel BUG on large-scale rm -rf commands
+  * md: protect against crash upon fsync on ro array (Closes: #696650)
+  * net: Add alx driver for Atheros AR8161 and AR8162 (Closes: #699129)
+    - Mark as staging, since it has not been accepted upstream
+  * [armel/kirkwood] rtc-s35390a: add wakealarm support (Closes: #693997)
+  * [x86] i915: Invert backlight brightness control for various models
+    including Packard Bell NCL20 (Closes: #627372) and eMachines G725
+    (Closes: #680737)
+    - Also allow this behaviour to be enabled via module parameter
+      invert_brightness=1
+  * [amd64] edac: Enable EDAC_SBRIDGE as module (Closes: #699283)
+  * SCSI: Add virtio_scsi driver (Closes: #686636)
+  * [x86] sound: Enable LINE6_USB as module (Closes: #700211)
+    - Apply upstream changes up to Linux 3.8-rc1
+  * [armhf/mx5] Update description to mention i.MX53
+  * mm: Try harder to allocate vmemmap blocks (Closes: #699913)
+  * aufs: Update to aufs3.2-20130204:
+    - support for syncfs(2)
+    - possible bugfix, race in lookup
+    - bugfix, half refreshed iinfo
+    - possible bugfix, au_lkup_by_ino() returns ESTALE
+  * [x86] efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot
+    parameter
+  * [x86] efi: Make "noefi" really disable EFI runtime serivces
+  * drm, agp: Update to 3.4.32
+    - drm/radeon: add WAIT_UNTIL to the non-VM safe regs list for cayman/TN
+    - drm/radeon: prevent crash in the ring space allocation
+  * linux-image-dbg: Add symlinks to vmlinux from the locations expected by
+    kdump-tools (Closes: #700418), systemtap and others
+  * mm: fix pageblock bitmap allocation (fixes regression in 3.2.38)
+  * USB: usb-storage: unusual_devs update for Super TOP SATA bridge
+
+  [ Cyril Brulebois ]
+  * Bump python build-dep, needed since the switch from local SortedDict
+    to collections.OrderedDict (new in version 2.7). (Closes: #697740)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 25 Feb 2013 00:36:51 +0000
+
+linux (3.2.35-2) unstable; urgency=low
+
+  * [ia64] Make IPV6 built-in (fixes FTBFS)
+  * [rt] Update to 3.2.35-rt52
+  * audit: Increase maximum number of names logged per syscall to 30
+    (Closes: #631799)
+  * asix: Add support for Lenovo 10/100 USB dongle (Closes: #696248)
+  * udeb: Add ums-eneub6250, ums-realtek (Closes: #694348) to
+    usb-storage-modules
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 19 Dec 2012 03:41:35 +0000
+
+linux (3.2.35-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.33
+    - samsung-laptop: don't handle backlight if handled by acpi/video
+      (Closes: #693190)
+    - e1000: fix vlan processing regression (Closes: #690956)
+    - [x86] drm/i915: no lvds quirk for Zotac ZDBOX SD ID12/ID13
+      (Closes: #691122)
+    - au0828: fix case where STREAMOFF being called on stopped stream
+      causes BUG()
+    - net: Fix skb_under_panic oops in neigh_resolve_output
+    - vlan: don't deliver frames for unknown vlans to protocols
+    - RDS: fix rds-ping spinlock recursion
+    - tcp: resets are misrouted
+    - nfsd4: fix nfs4 stateid leak
+    - [arm] vfp: fix saving d16-d31 vfp registers on v6+ kernels
+    - scsi_debug: Fix off-by-one bug when unmapping region
+    - storvsc: Account for in-transit packets in the RESET path
+    - tmpfs,ceph,gfs2,isofs,reiserfs,xfs: fix fh_len checking
+    - ext4: race-condition protection for ext4_convert_unwritten_extents_endio
+      (CVE-2012-4508)
+    - md/raid10: use correct limit variable
+    - net/wireless: ipw2200: Fix panic occurring in ipw_handle_promiscuous_tx()
+    - USB: cdc-acm: fix pipe type of write endpoint
+    - [x86] xen: don't corrupt %eip when returning from a signal handler
+    - sysfs: sysfs_pathname/sysfs_add_one: Use strlcat() instead of strcat()
+    - fs/compat_ioctl.c: VIDEO_SET_SPU_PALETTE missing error check
+    - netfilter: nf_conntrack: fix racy timer handling with reliable events
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.34
+    - x86: Remove the ancient and deprecated disable_hlt() and enable_hlt()
+      facility (Closes: #667501)
+    - ALSA: PCM: Fix some races at disconnection
+    - ALSA: usb-audio: Fix races at disconnection
+    - crypto: cryptd - disable softirqs in cryptd_queue_worker to prevent
+      data corruption
+    - mac80211: Only process mesh config header on frames that RA_MATCH
+    - mac80211: fix SSID copy on IBSS JOIN
+    - mac80211: check management frame header length
+    - mac80211: verify that skb data is present
+    - mac80211: make sure data is accessible in EAPOL check
+    - ath9k: Test for TID only in BlockAcks while checking tx status
+    - nfs: Show original device name verbatim in /proc/*/mount{s,info}
+      (Closes: #669314)
+    - target: Avoid integer overflow in se_dev_align_max_sectors()
+    - hwmon: (w83627ehf) Force initial bank selection
+    - xfs: fix reading of wrapped log data
+    - fanotify: fix missing break
+    - drm/vmwgfx: Fix a case where the code would BUG when trying to pin
+      GMR memory
+    - sctp: fix call to SCTP_CMD_PROCESS_SACK in sctp_cmd_interpreter()
+    - netlink: use kfree_rcu() in netlink_release()
+    - tcp: fix FIONREAD/SIOCINQ
+    - net: fix divide by zero in tcp algorithm illinois (CVE-2012-4565)
+    - af-packet: fix oops when socket is not present
+    - r8169: Fix WoL on RTL8168d/8111d. (Closes: #674154)
+    - sky2: Fix for interrupt handler (Closes: #681280)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.35
+    - UBIFS: fix mounting problems after power cuts
+    - [s390] gup: add missing TASK_SIZE check to get_user_pages_fast()
+    - [x86] Exclude E820_RESERVED regions and memory holes above 4 GB from
+      direct mapping.
+    - netfilter: Mark SYN/ACK packets as invalid from original direction
+    - netfilter: Validate the sequence number of dataless ACK packets as well
+    - ipv4: avoid undefined behavior in do_ip_setsockopt()
+    - Input: i8042 - also perform controller reset when suspending
+      (Closes: #693934)
+    - brcm80211: smac: only print block-ack timeout message at trace level
+      (Closes: #674430)
+    - GFS2: Test bufdata with buffer locked and gfs2_log_lock held
+    - [x86] mce, therm_throt: Don't report power limit and package level
+      thermal throttle events in mcelog (Closes: #695209)
+    - [hppa] fix virtual aliasing issue in get_shared_area()
+    - xfs: drop buffer io reference when a bad bio is built
+    - reiserfs: Protect reiserfs_quota_{on,write}() with write lock
+    - md: Reassigned the parameters if read_seqretry returned true in func
+      md_is_badblock.
+    - md: Avoid write invalid address if read_seqretry returned true.
+    - [i386] Fix invalid stack address while in softirq
+    - selinux: fix sel_netnode_insert() suspicious rcu dereference
+    - [hppa] fix user-triggerable panic on parisc
+    - block: Don't access request after it might be freed
+    - futex: avoid wake_futex() for a PI futex_q
+
+  [ Ben Hutchings ]
+  * [x86] udeb: Re-add isci to scsi-extra-modules (Closes: #690886;
+    regression of #652897 in version 3.2~rc7-1~experimental.1 due to
+    mis-merge)
+  * udeb: Add missing net drivers:
+    - Add 8021q (Closes: #689159), cxgb4, cxgb4vf, igbvf, ixgbevf, micrel,
+      mlx4_en, pch_gbe, qlge, smsc9420, tehuti, vxge to nic-extra-modules
+    - Add int51x1, smsc75xx, smsc95xx to nic-usb-modules
+    - Add adm8211, at76c50x-usb, b43legacy, iwl4965, libertas_tf_usb,
+      mwifiex_pcie, mwl8k, orinoco_usb, prism2_usb, r8187se, r8192e_pci,
+      r8712u, rtl8192ce (Closes: #686605), rtl8192cu, rtl8192de, rtl8192se
+      vt6656_stage to nic-wireless-modules
+    - Move broadcom to nic-modules, as it may be needed by tg3
+  * udeb: Add bnx2fc, fnic, pmcraid to scsi-extra-modules
+  * udeb: Move rtl8180 to nic-wireless-modules
+  * [x86] asus-laptop: Do not call HWRS on init (Closes: #692436)
+  * [x86] drm/i915: Only kick out vesafb if we takeover the fbcon with KMS
+    (Closes: #686284)
+  * [!x86] radeon: Disable DRM_RADEON_KMS, as this is still not expected to
+    work (Closes: #628972)
+  * radeon: Disable KMS earlier if firmware is not installed (Closes: #607194)
+  * [amd64] linux-image: Include VIA Nano in package description
+  * linux-image-dbg: Change package description to use the phrase
+    'debugging symbols' and correct grammar
+  * usb: Disable UAS; it is known to be broken, and the supported devices
+    can also work with usb-storage
+  * ipv6: Treat ND option 31 as userland (DNSSL support) (Closes: #694522)
+  * rt2x00: Add device IDs 5362, 5392, 539b (Closes: #694312)
+  * udeb: Add pata_piccolo to pata-modules (Closes: #695437)
+  * firmware_class: Log every success and failure against given device
+  * firmware: Remove redundant log messages from drivers
+  * [x86] ACPI / video: ignore BIOS initial backlight value for
+    HP Folio 13-2000 (Closes: #692361)
+  * [x86] KVM: x86: invalid opcode oops on SET_SREGS with OSXSAVE bit set
+    (CVE-2012-4461)
+  * kmod: make __request_module() killable (CVE-2012-4398)
+  * exec: do not leave bprm->interp on stack (CVE-2012-4530)
+  * exec: use -ELOOP for max recursion depth
+  * [rt] Update to 3.2.34-rt51:
+    - hrtimer: Raise softirq if hrtimer irq stalled
+    - rcu: Disable RCU_FAST_NO_HZ on RT
+    - net: netfilter: Serialize xt_write_recseq sections on RT
+  * megaraid_sas: fix memory leak if SGL has zero length entries
+    (Closes: #688198)
+
+  [ Ian Campbell ]
+  * [xen] add support for microcode updating. (Closes: #693053)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 10 Dec 2012 00:14:55 +0000
+
+linux (3.2.32-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.31
+    - target: Fix ->data_length re-assignment bug with SCSI overflow
+    - hpsa: fix handling of protocol error
+    - cifs: fix return value in cifsConvertToUTF16
+    - asix: Support DLink DUB-E100 H/W Ver C1 (Closes: #687567)
+    - dj: memory scribble in logi_dj
+    - dm: handle requests beyond end of device instead of using BUG_ON
+    - md/raid10: fix "enough" function for detecting if array is failed.
+    - libata: Prevent interface errors with Seagate FreeAgent GoFlex
+    - vfs: dcache: fix deadlock in tree traversal
+    - Revert "drm/radeon: rework pll selection (v3)" (regression in 3.2.30)
+    - HID: hidraw: don't deallocate memory when it is in use
+    - xfrm: Workaround incompatibility of ESN and async crypto
+    - xfrm_user: fix various information leaks
+    - xfrm_user: ensure user supplied esn replay window is valid
+    - net: guard tcp_set_keepalive() to tcp sockets
+    - ipv4: raw: fix icmp_filter()
+    - ipv6: raw: fix icmpv6_filter()
+    - ipv6: mip6: fix mip6_mh_filter()
+    - netrom: copy_datagram_iovec can fail
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.32
+    - mtd: nand: Use the mirror BBT descriptor when reading its version
+    - TTY: ttyprintk, don't touch behind tty->write_buf
+    - n_gsm: fix various serious bugs
+    - hpsa: Use LUN reset instead of target reset
+    - staging: comedi: don't dereference user memory for INSN_INTTRIG
+    - ext4: fix potential deadlock in ext4_nonda_switch()
+    - staging: comedi: fix memory leak for saved channel list
+    - scsi_remove_target: fix softlockup regression on hot remove
+      (Closes: #690990)
+    - usb: host: xhci: Fix Null pointer dereferencing with 71c731a for
+      non-x86 systems (regression in 3.2.30)
+    - ext4: online defrag is not supported for journaled files
+    - staging: comedi: s626: don't dereference insn->data
+    - serial: pl011: handle corruption at high clock speeds
+    - ext4: always set i_op in ext4_mknod()
+    - ext4: fix fdatasync() for files with only i_size changes
+    - [x86] drm/i915: use adjusted_mode instead of mode for checking the
+      6bpc force flag (regression in 3.2.29)
+    - staging: comedi: jr3_pci: fix iomem dereference
+    - JFFS2: don't fail on bitflips in OOB
+    - mtd: nandsim: bugfix: fail if overridesize is too big
+    - pnfsblock: fix partial page buffer wirte
+    - target/file: Re-enable optional fd_buffered_io=1 operation
+    - iscsit: remove incorrect unlock in iscsit_build_sendtargets_resp
+    - rapidio/rionet: fix multicast packet transmit logic
+    - ALSA: aloop - add locking to timer access
+    - [armhf/omap] counter: add locking to read_persistent_clock
+    - mm: fix invalidate_complete_page2() lock ordering
+    - mm: thp: fix pmd_present for split_huge_page and PROT_NONE with THP
+    - mm: hugetlb: fix pgoff computation when unmapping page from vma
+    - hugetlb: do not use vma_hugecache_offset() for vma_prio_tree_foreach
+    - [x86] firewire: cdev: fix user memory corruption (i386 userland on
+      amd64 kernel)
+    - udf: fix retun value on error path in udf_load_logicalvol
+    - eCryptfs: Unlink lower inode when ecryptfs_create() fails
+    - eCryptfs: Initialize empty lower files when opening them
+    - eCryptfs: Revert to a writethrough cache model
+    - eCryptfs: Write out all dirty pages just before releasing the lower file
+    - eCryptfs: Call lower ->flush() from ecryptfs_flush()
+    - mempolicy: remove mempolicy sharing
+    - mempolicy: fix a race in shared_policy_replace()
+    - mempolicy: fix refcount leak in mpol_set_shared_policy()
+    - mempolicy: fix a memory corruption by refcount imbalance in
+      alloc_pages_vma()
+    - hpsa: dial down lockup detection during firmware flash
+    - netfilter: nf_ct_ipv4: packets with wrong ihl are invalid
+    - netfilter: nf_nat_sip: fix incorrect handling of EBUSY for RTCP
+      expectation
+    - netfilter: nf_ct_expect: fix possible access to uninitialized timer
+    - ipvs: fix oops on NAT reply in br_nf context
+
+  [ Ben Hutchings ]
+  * codel: refine one condition to avoid a nul rec_inv_sqrt
+  * [mips,mipsel] Ignore NFS/SunRPC ABI changes in 3.2.30 (fixes FTBFS)
+  * tg3: Fix TSO CAP for 5704 devs w / ASF enabled
+  * SUNRPC: Set alloc_slot for backchannel tcp ops (regression in 3.2.30)
+  * iwlwifi: Do not request unreleased firmware for IWL6000 (Closes: #689416)
+  * aufs: Update to aufs3.2-20120827:
+    - Fix statfs() values when different block sizes are in use
+  * udeb: Add hid-logitech-dj to input-modules (Closes: #661379)
+  * connector: Make CONNECTOR built-in; enable PROC_EVENTS (Closes: #588200)
+  * e1000e: Change wthresh to 1 to avoid possible Tx stalls
+  * [x86] efi: Build EFI stub with EFI-appropriate options
+  * [rt] Update to 3.2.32-rt48:
+    - random: Make add_interrupt_randomness() work on rt
+    - softirq: Init softirq local lock after per cpu section is set up
+    - mm: slab: Fix potential deadlock
+    - mm: page_alloc: Use local_lock_on() instead of plain spinlock
+    - rt: rwsem/rwlock: lockdep annotations
+    - sched: Better debug output for might sleep
+    - stomp_machine: Use mutex_trylock when called from inactive cpu
+  * [x86] storvsc: Account for in-transit packets in the RESET path
+  * fs: handle failed audit_log_start properly
+  * fs: prevent use after free in auditing when symlink following was denied
+  * kernel/sys.c: fix stack memory content leak via UNAME26 (CVE-2012-0957)
+  * ALSA: hda: Fix oops caused by "Fix internal mic for Lenovo Ideapad U300s"
+    in 3.2.32
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 22 Oct 2012 06:25:37 +0100
+
+linux (3.2.30-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.30
+    - ext3: Fix fdatasync() for files with only i_size changes
+    - UBI: fix a horrible memory deallocation bug
+    - fuse: fix retrieve length
+    - mmc: card: Skip secure erase on MoviNAND; causes unrecoverable corruption
+    - udf: Fix data corruption for files in ICB
+    - xen: Use correct masking in xen_swiotlb_alloc_coherent.
+    - CIFS: Fix error handling in cifs_push_mandatory_locks
+    - [x86] drm/i915: Wait for all pending operations to the fb before
+      disabling the pipe
+    - xhci: Fix bug after deq ptr set to link TRB
+    - NFS: Fix the initialisation of the readdir 'cookieverf' array
+    - staging: comedi: das08: Correct AI encoding for das08jr-16-ao
+    - staging: comedi: das08: Correct AO output for das08jr-16-ao
+    - rt2800usb: Added rx packet length validity check
+    - staging: zcache: fix cleancache race condition with shrinker
+    - NFS: return error from decode_getfh in decode open
+    - ARM: 7526/1: traps: send SIGILL if get_user fails on undef handling path
+    - ahci: Add alternate identifier for the 88SE9172
+
+  [ Ben Hutchings ]
+  * [s390/s390x-tape] udeb: Remove fuse-modules configuration (fixes FTBFS)
+
+ -- dann frazier <dannf@debian.org>  Wed, 26 Sep 2012 16:00:58 +0900
+
+linux (3.2.29-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.24
+    - sched/nohz: Rewrite and fix load-avg computation -- again
+      (Closes: #674153)
+    - libsas: fix taskfile corruption in sas_ata_qc_fill_rtf
+    - md/raid1: fix use-after-free bug in RAID1 data-check code.
+    - PCI: EHCI: fix crash during suspend on ASUS computers
+    - cpufreq / ACPI: Fix not loading acpi-cpufreq driver (regression in 3.2.2)
+    - block: fix infinite loop in __getblk_slow (regression in 3.2.19)
+      (Closes: #684293)
+    - PM / Hibernate: Hibernate/thaw fixes/improvements
+    - tcm_fc: Fix crash seen with aborts and large reads
+    - fifo: Do not restart open() if it already found a partner
+    - cifs: on CONFIG_HIGHMEM machines, limit the rsize/wsize to the kmap space
+    - UBIFS: fix a bug in empty space fix-up
+    - ore: Fix NFS crash by supporting any unaligned RAID IO
+    - ore: Remove support of partial IO request (NFS crash)
+    - pnfs-obj: don't leak objio_state if ore_write/read fails
+    - pnfs-obj: Fix __r4w_get_page when offset is beyond i_size
+    - dm raid1: fix crash with mirror recovery and discard
+    - dm raid1: set discard_zeroes_data_unsupported
+    - time: Fix bugs in leap-second handling (Closes: #679882)
+      + ntp: Fix leap-second hrtimer livelock
+      + timekeeping: Fix leapsecond triggered load spike issue
+    - bnx2x: fix checksum validation
+    - bnx2x: fix panic when TX ring is full
+    - eCryptfs: Gracefully refuse miscdev file ops on inherited/passed files
+    - ACPI / PM: Make acpi_pm_device_sleep_state() follow the specification
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.25
+    - mm: Fix various performance problems, particularly affecting use of
+      transparent hugepages (Closes: #675493)
+    - target: Add range checking to UNMAP emulation
+    - target: Fix reading of data length fields for UNMAP commands
+    - target: Fix possible integer underflow in UNMAP emulation
+    - target: Check number of unmap descriptors against our limit
+    - ext4: don't let i_reserved_meta_blocks go negative
+    - ext4: undo ext4_calc_metadata_amount if we fail to claim space
+    - locks: fix checking of fcntl_setlease argument
+    - Btrfs: call the ordered free operation without any locks held
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.26
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.27
+    - lirc_sir: make device registration work (Closes: #680762)
+    - random: Improve random number generation on non-interactive systems
+      + random: Use arch_get_random_int instead of cycle counter if avail
+      + random: Use arch-specific RNG to initialize the entropy store
+      + random: make 'add_interrupt_randomness()' do something sane
+      + usb: feed USB device information to the /dev/random driver
+      + net: feed /dev/random with the MAC address when registering a device
+      + rtc: wm831x: Feed the write counter into device_add_randomness()
+      + mfd: wm831x: Feed the device UUID into device_add_randomness()
+    - futex: Test for pi_mutex on fault in futex_wait_requeue_pi()
+    - futex: Forbid uaddr == uaddr2 in futex_wait_requeue_pi()
+    - s390/mm: downgrade page table after fork of a 31 bit process
+    - asus-wmi: use ASUS_WMI_METHODID_DSTS2 as default DSTS ID.
+      (Closes: #679158)
+    - md/raid1: don't abort a resync on the first badblock.
+    - [arm] 7467/1: mutex: use generic xchg-based implementation for ARMv6+
+    - [arm] 7476/1: vfp: only clear vfp state for current cpu in vfp_pm_suspend
+    - [arm] 7477/1: vfp: Always save VFP state in vfp_pm_suspend on UP
+    - [arm] 7478/1: errata: extend workaround for erratum #720789
+    - [arm] Fix undefined instruction exception handling
+    - mm: mmu_notifier: fix freed page still mapped in secondary MMU
+    - mm: hugetlbfs: close race during teardown of hugetlbfs shared page tables
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.28
+    - bnx2: Fix bug in bnx2_free_tx_skbs().
+    - sch_sfb: Fix missing NULL check
+    - sctp: Fix list corruption resulting from freeing an association on a list
+    - cipso: don't follow a NULL pointer when setsockopt() is called
+    - caif: fix NULL pointer check
+    - net/tun: fix ioctl() based info leaks
+    - rtlwifi: rtl8192cu: Change buffer allocation for synchronous reads
+    - hfsplus: fix overflow in sector calculations in hfsplus_submit_bio
+    - drm/i915: fixup seqno allocation logic for lazy_request
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.29
+    - pnfs: defer release of pages in layoutget
+    - fuse: verify all ioctl retry iov elements
+    - usb: serial: mos7840: Fixup mos7840_chars_in_buffer()
+    - sched: fix divide by zero at {thread_group,task}_times
+    - vfs: canonicalize create mode in build_open_flags()
+    - dccp: check ccid before dereferencing
+    - md: Don't truncate size at 4TB for RAID0 and Linear
+    - target: fix NULL pointer dereference bug alloc_page() fails to get memory
+    - USB: CDC ACM: Fix NULL pointer dereference
+    - alpha: Don't export SOCK_NONBLOCK to user space. (Closes: #658460)
+    - radeon: Fix various bugs in reading vbios (Closes: #685604)
+    - vfs: missed source of ->f_pos races
+    - svcrpc: fix BUG() in svc_tcp_clear_pages
+    - svcrpc: sends on closed socket should stop immediately
+    - fbcon: fix race condition between console lock and cursor timer (v1.1)
+    - mm: hugetlbfs: correctly populate shared pmd
+    - fs/buffer.c: remove BUG() in possible but rare condition
+    - block: replace __getblk_slow misfix by grow_dev_page fix
+    - Staging: speakup: fix an improperly-declared variable. (Closes: #685953)
+    - NFS: Fix Oopses in nfs_lookup_revalidate and nfs4_lookup_revalidate
+
+  [ Ben Hutchings ]
+  * Bump ABI to 4
+  * linux-image: Include package version in utsname version string
+    ('uname -v' output) (Closes: #638878)
+  * linux-source: Drop support for version.$DISTRIBUTION
+  * [arm,ia64,powerpc,s390,sh,x86] linux-image: Include package version
+    in stack traces from WARN, BUG, Oops etc.
+  * udeb: Add snd-hda-codec-ca0132 to sound-modules (Closes: #682368)
+  * linux-source: Suggest pkg-config, needed to build kconfig GUIs
+    (Closes: #682726)
+  * debugfs: Add mode, uid and gid mount options; set default mode to 700
+    (Closes: #681418)
+  * net: new counter for tx_timeout errors in sysfs
+  * net: Add byte queue limits (bql) for reduced buffer-bloat
+  * bnx2,bnx2x,e1000e,forcedeth,igb,ixgbe,sfc,skge,sky2,tg3:
+    Add support for bql
+  * fs: Update link security restrictions to match Linux 3.6:
+    - Drop kconfig options; restrictions can only be disabled by sysctl
+    - Change the audit message type from AUDIT_AVC (1400) to
+      AUDIT_ANON_LINK (1702)
+  * [rt] Update to 3.2.28-rt42:
+    - time/rt: Fix up leap-second backport for RT changes
+    - fix printk flush of messages
+  * rds: set correct msg_namelen (CVE-2012-3430)
+  * e1000: add dropped DMA receive enable back in for WoL (Closes: #684618)
+  * PCI/PM/Runtime: make PCI traces quieter (Closes: #684049)
+  * rc: ite-cir: Initialise ite_dev::rdev earlier (Closes: #684441)
+  * input: Enable TOUCHSCREEN_ATMEL_MXT as module (Closes: #685123)
+  * usb: Add USB_QUIRK_RESET_RESUME for all Logitech UVC webcams
+    (Closes: #668211)
+  * [alpha] Use gcc-4.6 (Closes: #685894)
+    - Use large data model to work around link failure
+  * [i386/486] video: Change FB_GEODE_LX from built-in to module (lxfb)
+    (Closes: #686528)
+  * [i386/686-pae] video: Disable Geode framebuffer drivers, not used with
+    any chips that support PAE
+  * [x86] drm/i915: Fix i8xx interrupt handling (Closes: #655152)
+  * [armel/kirkwood] ahci: Add JMicron 362 device IDs (Closes: #634180)
+  * speakup: lower default software speech rate (Closes: #686742)
+  * e1000e: Fix potential DoS when TSO enabled
+  * mm: Remove user-triggerable BUG from mpol_to_str
+  * sfc: Fix maximum number of TSO segments and minimum TX queue size
+    (CVE-2012-3412)
+    - tcp: Apply device TSO segment limit earlier
+  * net_sched: gact: Fix potential panic in tcf_gact().
+  * af_packet: remove BUG statement in tpacket_destruct_skb
+  * net: Fix various information leaks
+  * af_packet: don't emit packet on orig fanout group
+  * af_netlink: force credentials passing (CVE-2012-3520)
+  * netlink: fix possible spoofing from non-root processes
+  * net: ipv4: ipmr_expire_timer causes crash when removing net namespace
+  * [i386] i810fb: Enable FB_I810_GTF, FB_I810_I2C (Closes: #687644)
+  * udeb: Add fuse-modules to support os-prober (see #684265)
+
+  [ Bastian Blank ]
+  * Make xen-linux-system meta-packages depend on xen-system. This allows
+    automatic updates. (closes: #681637)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 16 Sep 2012 06:16:38 +0100
+
+linux (3.2.23-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.22
+    - nilfs2: ensure proper cache clearing for gc-inodes
+    - ath9k_hw: avoid possible infinite loop in ar9003_get_pll_sqsum_dvc
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.23
+    - splice: fix racy pipe->buffers uses
+    - NFC: Prevent multiple buffer overflows in NCI (CVE-2012-3364)
+    - NFC: Return from rawsock_release when sk is NULL
+    - md/raid5: Do not add data_offset before call to is_badblock
+    - md/raid5: In ops_run_io, inc nr_pending before calling
+      md_wait_for_blocked_rdev
+    - md/raid10: fix failure when trying to repair a read error.
+    - udf: Improve sanity checking of filesystem metadata (CVE-2012-3400)
+      + udf: Avoid run away loop when partition table length is corrupted
+      + udf: Fortify loading of sparing table
+    - l2tp: fix a race in l2tp_ip_sendmsg()
+    - netpoll: fix netpoll_send_udp() bugs
+    - Btrfs: run delayed directory updates during log replay
+    - ocfs2: clear unaligned io flag when dio fails
+    - aio: make kiocb->private NUll in init_sync_kiocb()
+    - mm: Hold a file reference in madvise_remove
+
+  [ Ben Hutchings ]
+  * linux-libc-dev: Fix redundant 'GNU glibc' in description (Closes: #631228)
+  * README.source: Correct name of main patch series file
+  * [sh] Fix up store queue code for subsys_interface changes (Closes: #680025)
+  * scsi: Silence unnecessary warnings about ioctl to partition
+    (Closes: #656899)
+  * Update Czech debconf template translations (Michal Simunek)
+    (Closes: #679674)
+  * linux-image: Remove versioned relations where stable version is new enough
+  * udf: Improve table length check to avoid possible overflow
+  * CIFS: Respect negotiated MaxMpxCount (deferred from 3.2.14)
+  * epoll: clear the tfile_check_list on -ELOOP (CVE-2012-3375)
+  * nouveau: Update to support Fermi (NVC0+) acceleration (Closes: #679566)
+    - Refactor sub-channel use
+    - Bump version to 1.0.0
+  * e100: ucode is optional in some cases
+  * [x86] drm/i915: prefer wide & slow to fast & narrow in DP configs
+    (Closes: #658662)
+  * cipso: don't follow a NULL pointer when setsockopt() is called
+  * [x86] hwmon: Enable SENSORS_SCH5636 as module (Closes: #680934)
+  * atl1c: fix issue of transmit queue 0 timed out
+  * raid5: delayed stripe fix (Closes: #680366)
+  * fs: Remove easily user-triggerable BUG from generic_setlease
+  * tcp: drop SYN+FIN messages
+  * fifo: Do not restart open() if it already found a partner (Closes: #678852)
+  * [rt] linux-source: Include -rt version suffix
+  * [rt] Update to 3.2.23-rt37:
+    - Latency histogramms: Cope with backwards running local trace clock
+    - Latency histograms: Adjust timer, if already elapsed when programmed
+    - Disable RT_GROUP_SCHED in PREEMPT_RT_FULL
+    - Latency histograms: Detect another yet overlooked sharedprio condition
+    - slab: Prevent local lock deadlock
+    - fs, jbd: pull your plug when waiting for space
+    - perf: Make swevent hrtimer run in irq instead of softirq
+    - cpu/rt: Rework cpu down for PREEMPT_RT
+    - cpu/rt: Fix cpu_hotplug variable initialization
+    - workqueue: Revert workqueue: Fix PF_THREAD_BOUND abuse
+    - workqueue: Revert workqueue: Fix cpuhotplug trainwreck
+
+  [ Arnaud Patard ]
+  * [mipsel] add r8169 to d-i udeb.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 22 Jul 2012 23:25:47 +0100
+
+linux (3.2.21-3) unstable; urgency=low
+
+  * driver core: remove __must_check from device_create_file
+    (fixes FTBFS on sparc)
+  * i2400m: Disable I2400M_SDIO; hardware did not reach production
+  * apparmor: remove advertising the support of network rules from
+    compat iface (Closes: #676515)
+  * xen/netfront: teardown the device before unregistering it (Closes: #675190)
+  * linux-{doc,manual,source,support}: Mark as capable of satisfying
+    relations from foreign packages (Multi-Arch: foreign) (Closes: #679202)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 28 Jun 2012 04:58:18 +0100
+
+linux (3.2.21-2) unstable; urgency=low
+
+  * [i386] cpufreq/gx: Fix the compile error
+  * [powerpc] Enable PPC_DISABLE_WERROR (fixes FTBFS)
+  * tracing/mm: Move include of trace/events/kmem.h out of header into slab.c
+    (fixes FTBFS on sparc)
+  * [i386] Disable incomplete lguest support
+  * udeb: Add missing dependencies for various modules (see #678587)
+    - [armel/kirkwood] fb-modules depends on kernel-image
+    - [ia64] nic-usb-modules depends on kernel-image, nic-shared-modules,
+      usb-modules
+    - [ia64] sata-modules depends on kernel-image, scsi-core-modules
+    - [ia64] scsi-modules depends on scsi-core-modules
+    - [ia64,powerpc,ppc64] pcmcia-modules depends on kernel-image
+    - [powerpc,ppc64] nic-pcmcia-modules depends on kernel-image,
+      nic-shared-modules, pcmcia-modules
+    - [powerpc,ppc64,x86] scsi-modules depends on ata-modules
+    - [x86] nic-extra-modules depends on i2c-modules
+  * wacom: do not crash when retrieving touch_max (Closes: #678798)
+  * wacom: Revert unintended changes to handling of Tablet PCs
+    (Closes: #677164)
+  * linux-image, README.Debian: Suggest debian-kernel-handbook package
+
+  [ Arnaud Patard ]
+  * [armel, armhf] backport BPF JIT support
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 26 Jun 2012 01:56:42 +0100
+
+linux-tools (3.2.17-1) unstable; urgency=low
+
+  * New upstream stable updates:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.15
+    - modpost: fix ALL_INIT_DATA_SECTIONS
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.16
+    - perf hists: Catch and handle out-of-date hist entry maps.
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.17
+    - Perf: fix build breakage
+
+  * Fix version insertion in perf man pages
+  * Build usbip userland packages (Closes: #568362)
+    - Do not build a shared library package; the API and ABI have changed
+      from libusbip0 but there has been no upstream soversion change
+  * usbipd: Enable TCP wrappers for access control
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 24 Jun 2012 02:52:26 +0100
+
+linux (3.2.21-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.21
+    - NFSv4.1: Fix a request leak on the back channel
+    - target: Return error to initiator if SET TARGET PORT GROUPS emulation
+      fails
+    - USB: add NO_D3_DURING_SLEEP flag and revert 151b61284776be2
+    - USB: fix gathering of interface associations
+
+  [ Ben Hutchings ]
+  * [ia64,powerpc] udeb: Add crc-itu-t to crc-modules; make
+    firewire-core-modules depend on it (fixes FTBFS)
+  * [arm,m68k,sh4] udeb: Build ipv6-modules
+  * ethtool: allow ETHTOOL_GSSET_INFO for users
+  * [rt] bump version to 3.2.20-rt32
+  * cpu: Convert 'cpu' and 'machinecheck' sysdev_class to a regular subsystem
+  * [x86] Add driver auto probing for x86 features
+    - crypto: Add support for x86 cpuid auto loading for x86 crypto drivers
+      (Closes: #568008)
+    - intel-idle: convert to x86_cpu_id auto probing
+    - HWMON: Convert coretemp to x86 cpuid autoprobing
+    - HWMON: Convert via-cputemp to x86 cpuid autoprobing
+    - cpufreq: Add support for x86 cpuinfo auto loading (Closes: #664813)
+  * [x86] ACPI: Load acpi-cpufreq from processor driver automatically
+  * Bump ABI to 3
+  * input: Add Synaptics USB device driver (Closes: #678071)
+  * [x86] udeb: Fix dependencies for nic-wireless-modules
+
+  [ Aurelien Jarno ]
+  * [mips,mipsel] udeb: Remove rivafb and nvidiafb.
+  * [ppc64]: add udebs, based on powerpc/powerpc64.
+
+  [ Bastian Blank ]
+  * Support build-arch and build-indep make targets.
+
+  [ Arnaud Patard ]
+  * [armel/kirkwood] Add dreamplug and iconnect support (Closes: #675922)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 22 Jun 2012 13:54:15 +0100
+
+linux (3.2.20-1) unstable; urgency=low
+
+  * The "Confused? You Won't Be" release
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.20
+   - cifs: fix oops while traversing open file list (try #4)
+   - mm/fork: fix overflow in vma length when copying mmap on clone
+   - mm: fix faulty initialization in vmalloc_init()
+   - x86, amd, xen: Avoid NULL pointer paravirt references
+   - ext4: force ro mount if ext4_setup_super() fails
+   - ext4: disallow hard-linked directory in ext4_lookup
+   - ext4: add missing save_error_info() to ext4_error()
+   - ALSA: usb-audio: fix rate_list memory leak
+   - Bluetooth: btusb: typo in Broadcom SoftSailing id (Closes: #674565)
+   - ipv4: Do not use dead fib_info entries.
+   - ipv4: fix the rcu race between free_fib_info and ip_route_output_slow
+   - l2tp: fix oops in L2TP IP sockets for connect() AF_UNSPEC case
+   - btree: fix tree corruption in btree_get_prev()
+   - asix: allow full size 8021Q frames to be received (Closes: #676545)
+   - ext4: don't trash state flags in EXT4_IOC_SETFLAGS
+   - ext4: fix the free blocks calculation for ext3 file systems w/ uninit_bg
+
+  [ Ben Hutchings ]
+  * Rename source package to 'linux' (Closes: #636010)
+  * Convert source package format to 3.0 (quilt)
+    - Convert patch system to quilt, except for the 'orig' patch series
+    - Use xz compression for upstream and Debian tarballs
+    - README.source: Update description of patch system to match current
+      usage
+    - linux-patch-debian: Remove; it is no longer necessary for GPL
+      compliance and does not work with our current patch management
+  * linux-image: Change package name for bugs to 'src:linux' (Closes: #644198)
+  * DFSG: video: Remove nvidiafb and rivafb, which include apparently
+    obfuscated code (Closes: #383481, #609615).  The nouveau driver supports
+    all the same hardware, aside from RIVA 128 (NV3).
+  * udeb: Add udf-modules containing UDF filesystem module (Closes: #613972)
+  * [mipsel/loongson2f] linux-image: Recommend libc6-loongson2f
+    (Closes: #629410)
+  * Build-Depend on kmod or module-init-tools, not just the latter
+  * test-patches: Recognise the rt featureset automatically
+  * udeb: Build-Depend on kernel-wedge >= 2.84; this allows us to list
+    modules as required even if they are built-in in some configurations
+  * filter: Allow to create sk-unattached filters
+  * proc: Backport hidepid mount option from Linux 3.4 (Closes: #669028)
+  * NFSv4: Reduce the footprint of the idmapper (Closes: #657078)
+  * [i386] thp: avoid atomic64_read in pmd_read_atomic for 32bit PAE
+    (Closes: #676360)
+  * linux-source: Add single patch for each featureset
+  * [x86] Enable CRASH_DUMP, PROC_VMCORE (Closes: #623177)
+  * media/dvb: Enable DVB_DDBRIDGE as module (Closes: #676952)
+  * net: sock: validate data_len before allocating skb in
+    sock_alloc_send_pskb() (CVE-2012-2136)
+  * macvtap: zerocopy: fix offset calculation when building skb
+  * macvtap: zerocopy: fix truesize underestimation
+  * macvtap: zerocopy: put page when fail to get all requested user pages
+  * macvtap: zerocopy: set SKBTX_DEV_ZEROCOPY only when skb is built
+    successfully
+  * macvtap: zerocopy: validate vectors before building skb (CVE-2012-2119)
+  * KVM: Fix buffer overflow in kvm_set_irq() (CVE-2012-2137)
+
+  [ Bastian Blank ]
+  * [s390/s390x,s390x/s390x] Build debugging symbols.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 11 Jun 2012 02:46:34 +0100
+
+linux-2.6 (3.2.19-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.19
+    - hpsa: Fix problem with MSA2xxx devices (Closes: #661057)
+    - IB/core: Fix mismatch between locked and pinned pages
+    - iommu: Fix off by one in dmar_get_fault_reason()
+    - vfs: make AIO use the proper rw_verify_area() area helpers
+    - HID: logitech: read all 32 bits of report type bitfield (Closes: #671292)
+    - USB: Remove races in devio.c
+    - ext{3,4}: Fix error handling on inode bitmap corruption
+    - uvcvideo: Fix ENUMINPUT handling
+    - dl2k: Clean up rio_ioctl (CVE-2012-2313)
+    - [x86] MCE: Fix vm86 handling for 32bit mce handler
+    - [x86] mce: Fix check for processor context when machine check was taken.
+    - ethtool: Null-terminate filename passed to ethtool_ops::flash_device
+    - NFSv4: Fix buffer overflows in ACL support (CVE-2012-2375)
+      + Avoid reading past buffer when calling GETACL
+      + Avoid beyond bounds copy while caching ACL
+
+  [ Ben Hutchings ]
+  * be2net: Backport most changes up to Linux 3.5-rc1, thanks to
+    Sarveshwar Bandi (Closes: #673391)
+    - Add support for Skyhawk cards
+  * net/sched: Add codel and fq_codel from Linux 3.5-rc1
+  * [x86] udeb: Add hyperv-modules containing Hyper-V paravirtualised drivers
+  * [x86] ata_piix: defer disks to the Hyper-V drivers by default
+  * [x86] drm/i915:: Disable FBC on SandyBridge (Closes: #675022)
+  * AppArmor: compatibility patch for v5 interface (Closes: #661151)
+  * hugepages: fix use after free bug in "quota" handling (CVE-2012-2133)
+  * [x86] mm: pmd_read_atomic: fix 32bit PAE pmd walk vs pmd_populate SMP race
+    condition (CVE-2012-2373)
+  * hugetlb: fix resv_map leak in error path (CVE-2012-2390)
+  * [SCSI] fix scsi_wait_scan (Closes: #647436)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 01 Jun 2012 13:15:48 +0100
+
+linux-2.6 (3.2.18-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.18
+    - hugetlb: prevent BUG_ON in hugetlb_fault() -> hugetlb_cow()
+    - net: l2tp: unlock socket lock before returning from l2tp_ip_sendmsg
+    - [sparc] sparc64: Do not clobber %g2 in xcall_fetch_glob_regs().
+    - ext4: avoid deadlock on sync-mounted FS w/o journal
+    - brcm80211: smac: fix endless retry of A-MPDU transmissions
+      (Closes: #672891)
+    - target: Fix SPC-2 RELEASE bug for multi-session iSCSI client setups
+    - ALSA: hda/idt - Fix power-map for speaker-pins with some HP laptops
+      (Closes: #672582)
+    - usbnet: fix skb traversing races during unlink(v2)
+    - [arm] prevent VM_GROWSDOWN mmaps extending below FIRST_USER_ADDRESS
+
+  [ Jonathan Nieder ]
+  * wacom: Add support for various tablet models (Closes: #671801)
+  * rt2800usb: Add support for Ralink RT5392/RF5372 chipset (Closes: #673186)
+
+  [ Ben Hutchings ]
+  * test-patches: Fix -j option, broken since 3.1.0-1~experimental.1
+  * rt2800usb: Re-enable powersaving by default, as it should work better
+    than in 2.6.38
+  * [sparc,sparc64] Build virtio-modules-udeb for use in qemu (Closes: #673320)
+  * KVM: mmu_notifier: Flush TLBs before releasing mmu_lock
+  * [x86] KVM: nVMX: Fix erroneous exception bitmap check
+  * [x86] KVM: VMX: vmx_set_cr0 expects kvm->srcu locked
+  * [s390] KVM: do store status after handling STOP_ON_STOP bit
+  * [s390] KVM: Sanitize fpc registers for KVM_SET_FPU
+  * ACPI battery: only refresh the sysfs files when pertinent information
+    changes (Closes: #670958)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 21 May 2012 04:07:08 +0100
+
+linux-2.6 (3.2.17-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.17
+    - md: fix possible corruption of array metadata on shutdown.
+    - ext4: fix endianness breakage in ext4_split_extent_at()
+    - KVM: unmap pages from the iommu when slots are removed (CVE-2012-2121)
+    - btrfs: btrfs_root_readonly() broken on big-endian
+    - ocfs2: Fix various bugs affecting big-endian architectures
+    - lockd: fix the endianness bug
+    - phonet: Check input from user before allocating
+    - netlink: fix races after skb queueing
+    - net: fix a race in sock_queue_err_skb()
+    - net/ethernet: ks8851_mll fix rx frame buffer overflow
+    - x86, apic: APIC code touches invalid MSR on P5 class machines
+    - drm/i915: fix integer overflow in i915_gem_execbuffer2()
+    - drm/i915: fix integer overflow in i915_gem_do_execbuffer()
+    - USB: cdc-wdm: fix race leading leading to memory corruption
+    - autofs: make the autofsv5 packet file descriptor use a packetized pipe
+      (Closes: #633423)
+    - efi: Validate UEFI boot variables
+    - efivars: Improve variable validation
+    - fs/cifs: fix parsing of dfs referrals
+    - hfsplus: Fix potential buffer overflows (CVE-2012-2319)
+    - exit_signal: fix the "parent has changed security domain" logic
+
+  [ Ben Hutchings ]
+  * aufs: Enable AUFS_EXPORT
+  * ext4: Report max_batch_time option correctly (Closes: #654206)
+  * [i386/rt-686-pae] Enable HIGHMEM64G as intended for this configuration
+  * NFSv4: Revalidate uid/gid after open (Closes: #659111)
+  * sky2: propogate rx hash when packet is copied
+  * sky2: fix receive length error in mixed non-VLAN/VLAN traffic
+    (Closes: #492853)
+  * KVM: Ensure all vcpus are consistent with in-kernel irqchip settings
+    (CVE-2012-1601)
+  * KVM: lock slots_lock around device assignment (CVE-2012-2121)
+  * [rt] bump version to 3.2.16-rt27
+
+  [ Bastian Blank ]
+  * [s390] Enable IUCV special message support. (closes: #671238)
+
+  [ Arnaud Patard ]
+  * [armhf] Add vexpress support from Vagrant Cascadian with a slightly
+    modified kernel configuration (Closes: #670462)
+  * [armel] Introduce a new udeb module for leds and use it on kirkwoord
+    kernel thanks to Simon Guinot (Closes: #671200)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 12 May 2012 15:29:09 +0100
+
+linux-2.6 (3.2.16-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.16
+    - drm/i915: properly compute dp dithering for user-created modes
+      (Closes: #666360)
+    - md/bitmap: prevent bitmap_daemon_work running while initialising bitmap
+    - [ia64] Fix futex_atomic_cmpxchg_inatomic() (Closes: #659485)
+    - USB: serial: fix race between probe and open
+    - fcaps: clear the same personality flags as suid when fcaps are used
+      (CVE-2012-2123)
+    - ACPICA: Fix to allow region arguments to reference other scopes
+      (Closes: #661581)
+    - futex: Do not leak robust list to unprivileged process
+    - drm/radeon/kms: fix the regression of DVI connector check
+      (Closes: #670047)
+
+  [ Ben Hutchings ]
+  * rt2x00: Identify rt2800usb chipsets. (Closes: #658067)
+  * [x86] Add EFI boot stub support (Closes: #669033)
+  * brcmsmac: "INTERMEDIATE but not AMPDU" only when tracing
+  * NFSv4: Fix error handling and improve error reporting for file locking
+    (Closes: #669270)
+    - Rate limit the state manager for lock reclaim warning messages
+    - Ensure that the LOCK code sets exception->inode
+    - Ensure that we check lock exclusive/shared type against open modes
+  * [x86] i915: Fix integer overflows in i915_gem_{do_execbuffer,execbuffer2}
+  * Revert "autofs: work around unhappy compat problem on x86-64".
+    Reopens #633423.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 29 Apr 2012 08:00:53 +0100
+
+linux-2.6 (3.2.15-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.15
+    - drm/radeon/kms: fix fans after resume (Closes: #596741)
+    - sysctl: fix write access to dmesg_restrict/kptr_restrict
+    - [x86] PCI: use host bridge _CRS info on MSI MS-7253 (Closes: #619034)
+    - nfs: Fix length of buffer copied in __nfs4_get_acl_uncached
+    - [x86] ioat: fix size of 'completion' for Xen (Closes: #660554)
+    - cred: copy_process() should clear child->replacement_session_keyring
+
+  [ Ben Hutchings ]
+  * net: fix /proc/net/dev regression (Closes: #659499)
+  * [armel/orion5x] Fix GPIO enable bits for MPP9 (Closes: #667446)
+  * [x86] drm/i915: mask transcoder select bits before setting them on LVDS
+  * [armhf/mx5,mipsel/loongson-2f] input: Enable INPUT_TOUCHSCREEN
+    (Closes: #668036)
+  * [x86] hv: Update all Hyper-V drivers to 3.4-rc1 (Closes: #661318)
+  * hugetlb: fix race condition in hugetlb_fault()
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 14 Apr 2012 18:23:44 +0100
+
+linux-2.6 (3.2.14-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.14
+    - mm: thp: fix pmd_bad() triggering in code paths holding mmap_sem
+      read mode (CVE-2012-1179)
+    - hugetlbfs: avoid taking i_mutex from hugetlbfs_read()
+    - md/bitmap: ensure to load bitmap when creating via sysfs
+      (Closes: #661558)
+    - md: dont set md arrays to readonly on shutdown
+    - md/raid1,raid10: avoid deadlock during resync/recovery (Closes: #584881)
+    - md: fix clearing of the changed flags for the bad blocks list
+    - xfs: fix inode lookup race
+    - sysctl: protect poll() in entries that may go away
+    - NFSv4: Rate limit the state manager warning messages (Closes: #666121)
+    - jbd2: clear BH_Delay & BH_Unwritten in journal_unmap_buffer
+    - ext4: ignore EXT4_INODE_JOURNAL_DATA flag with delalloc
+    - ext4: fix race between sync and completed io work
+    - ext4: check for zero length extent
+    - vfs: fix d_ancestor() case in d_materialize_unique
+    - udf: Fix deadlock in udf_release_file()
+    - dm crypt: add missing error handling
+    - dm thin: fix stacked bi_next usage
+    - xfs: Fix oops on IO error during xlog_recover_process_iunlinks()
+    - NFSv4: Fix two infinite loops in the mount code
+    - drm/i915: suspend fbdev device around suspend/hibernate
+      (Closes: #645547)
+    - net: fix a potential rcu_read_lock() imbalance in rt6_fill_node()
+    - [x86] tls: Off by one limit check
+    - PCI: ASPM: Fix pcie devices with non-pcie children (Closes: #665420)
+
+  [ Jonathan Nieder ]
+  * ata: Enable PATA_IT8213 as module (Closes: #666506)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 05 Apr 2012 05:02:45 +0100
+
+linux-2.6 (3.2.13-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.13
+
+  [ Ben Hutchings ]
+  * kbuild: do not check for ancient modutils tools
+
+  [ Uwe Kleine-König ]
+  * [rt] bump version to 3.2.12-rt22
+
+  [ Bastian Blank ]
+  * [s390x] Ignore ABI change.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 28 Mar 2012 13:40:26 +0200
+
+linux-tools (3.2.7-2) unstable; urgency=high
+
+  * Apply upstream changes to fix various buffer overflow bugs:
+    - perf tools: Use scnprintf where applicable
+    - perf tools: Incorrect use of snprintf results in SEGV
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 20 Mar 2012 04:54:22 +0000
+
+linux-2.6 (3.2.12-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.11
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.12
+    - aio: fix io_setup/io_destroy race
+    - aio: fix the "too late munmap()" race
+    - vfs: fix double put after complete_walk()
+    - acer-wmi: No wifi rfkill on Lenovo machines (Closes: #655941)
+    - tcp: fix false reordering signal in tcp_shifted_skb
+    - r8169: corrupted IP fragments fix for large mtu
+    - tcp: don't fragment SACKed skbs in tcp_mark_head_lost()
+    - tcp: fix tcp_shift_skb_data() to not shift SACKed data below snd_una
+    - block: Fix NULL pointer dereference in sd_revalidate_disk
+      (Closes: #649735)
+    - block: fix __blkdev_get and add_disk race condition
+
+  [ Ben Hutchings ]
+  * [powerpc] Enable KVM_GUEST
+  * [s390] Ignore arch_pick_mmap_layout version change; it should not be
+    needed by modules (fixes FTBFS)
+  * [x86] Disable POHMELFS; this version is obsolete
+  * epoll: Don't limit non-nested epoll paths
+  * CIFS: Fix a spurious error in cifs_push_posix_locks
+  * [rt] bump rt patch to version 3.2.11-rt20
+  * aufs: Update to aufs3.2-20120312
+  * tcp: fix syncookie regression
+  * ipv6: Don't dev_hold(dev) in ip6_mc_find_dev_rcu
+
+  [ Jonathan Nieder ]
+  * [x86] Enable RTS5139 as module (Closes: #663912)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 20 Mar 2012 04:32:51 +0000
+
+linux-2.6 (3.2.10-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.10
+    - regset: Prevent null pointer reference on readonly regsets
+      (CVE-2012-1097)
+
+  [ Uwe Kleine-König ]
+  * [rt] bump rt patch to version 3.2.9-rt17
+  * [rt] fix conflict between the security restrictions on links introduced in
+    3.2.9-1 and rt (Closes: #663269)
+
+  [ Aurelien Jarno ]
+  * [mips,mipsel] Mark ext4-modules as provided by the kernel-image udeb, remove
+    ide-core-modules provide.
+
+  [ Ben Hutchings ]
+  * [x86,ia64] PCI/hotplug: Build-in common hotplug drivers:
+    - Change HOTPLUG_PCI, HOTPLUG_PCI_PCIE to built-in
+    - [x86] Change HOTPLUG_PCI_ACPI to built-in (Closes: #663433)
+    - [ia64] Enable HOTPLUG_PCI_SGI as built-in
+  * linux-headers: Remove unused, broken symlinks to Kbuild (Closes: #663597)
+  * udeb: Remove dependency of {pcmcia,usb}-storage-modules on ide-core-modules
+  * [mips,mipsel] Mark ata-modules as provided by the kernel-image udeb
+    for most flavours
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 13 Mar 2012 17:19:32 +0100
+
+linux-tools (3.2.7-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.7
+    - perf tools: Fix perf stack to non executable on x86_64
+    - perf evsel: Fix an issue where perf report fails to show the proper
+      percentage
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 05 Mar 2012 00:19:02 +0000
+
+linux-2.6 (3.2.9-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.8
+    - [i386] i387: move TS_USEDFPU flag from thread_info to task_struct
+    - [x86] additional refactoring of FPU/SSE state save and restore
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.9
+    - vfs: fix d_inode_lookup() dentry ref leak
+    - target: Allow control CDBs with data > 1 page
+    - epoll: introduce POLLFREE to flush ->signalfd_wqh before kfree()
+    - epoll: ep_unregister_pollwait() can use the freed pwq->whead
+    - epoll: limit paths (CVE-2011-1083)
+    - cdrom: use copy_to_user() without the underscores
+
+  [ Bastian Blank ]
+  * [mips,mipsel] Also remove ext4 modules from installer.
+
+  [ Ben Hutchings ]
+  * Update debconf template translations:
+    - Update Dutch (Willem Kuyn) (Closes: #658736)
+    - Add Polish (Michał Kułach) (Closes: #658912)
+  * Bump ABI to 2
+  * fs: Introduce and enable security restrictions on links:
+    - Do not follow symlinks in /tmp that are owned by other users
+      (sysctl: fs.protected_symlinks)
+    - Do not allow unprivileged users to create hard links to sensitive files
+      (sysctl: fs.protected_hardlinks) (Closes: #609455)
+      + This breaks the 'at' package in stable, which will be fixed shortly
+        (see #597130)
+    The precise restrictions are specified in Documentation/sysctl/fs.txt in
+    the linux-doc-3.2 and linux-source-3.2 packages.
+  * iwlwifi: fix key removal (Closes: #651199)
+  * cgroups: Set CGROUP_PERF
+  * hid: Enable HID_HOLTEK, HID_PRIMAX, HID_SPEEDLINK, HID_WIIMOTE as modules,
+    HID_ACRUX_FF
+  * media/rc: Enable RC_ATI_REMOTE as module
+  * gspca: Enable USB_GSPCA_TOPRO as module
+  * dvb-usb: Enable DVB_USB_PCTV452E, DVB_USB_MXL111SF as modules
+
+  [ Uwe Kleine-König ]
+  * [x86] Update rt featureset to 3.2.9-rt15
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 04 Mar 2012 15:32:20 +0000
+
+linux-2.6 (3.2.7-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.7
+
+  [ Ben Hutchings ]
+  * Add Turkish debconf template translations (Mert Dirik) (Closes: #660117)
+  * [amd64] Disable BLK_DEV_IDEPNP, BLK_DEV_OPTI621, IDE_GENERIC
+  * Use libata-based drivers for most of the remaining PATA controllers:
+    - pata_legacy replaces ide-generic
+    - pata_isapnp replaces ide-pnp
+    - pata_opti replaces opti621
+    - pata_hpt366 and pata_hpt37x replace hpt366
+    - pata_ninja32 replaces delkin_cb
+    - pata_cs5535 replaces cs5535
+    - pata_winbond replaces sl82c105
+    - [alpha] pata_cypress replaces cy82c693
+    - [hppa] pata_ns87415 replaces ns87415
+    - [sparc] Various replacements, as for x86 in 2.6.32-10
+  * Disable old IDE subsystem [!ia64,m68k]:
+    - Disable BLK_DEV_IT8172, BLK_DEV_IT8213, BLK_DEV_TC86C001, BLK_DEV_TRM290
+    - [alpha] Disable BLK_DEV_4DRIVES, BLK_DEV_ALI14XX, BLK_DEV_DTC2278,
+      BLK_DEV_HT6560B, BLK_DEV_QD65XX, BLK_DEV_UMC8672
+  * fs: Enable EFI_PARTITION in all configurations (Closes: #660582)
+  * [i386] Re-enable INTEL_IOMMU, IRQ_REMAP
+  * [mips/r5k-ip32] Enable INPUT_SGI_BTNS (previously INPUT_SGIO2_BTNS)
+  * [powerpc/powerpc64] Enable IBM_EMAC (previously IBM_NEW_EMAC)
+  * [x86] drm/i915: do not enable RC6p on Sandy Bridge (Closes: #660265)
+  * ipsec: be careful of non existing mac headers (Closes: #660804)
+  * version: Use maintainer rather than uploader address for official
+    binary packages
+
+  [ Bastian Blank ]
+  * Don't advertise Xen support for rt images. (closes: #659988)
+  * [m68k,mips,mipsel] Use ext4 for all ext-variants. (closes: #660446)
+  * [m68k,mips,mipsel] Don't built-in ramdisk support.
+  * [hppa,mips,mipsel] Don't built-in cramfs support.
+  * [alpha,hppa] Don't built-in ext2.
+  * Remove IDE trigger for LED support.
+  * Remove all framebuffer bootup logos.
+  * NFSv4: Fix an Oops in the NFSv4 getacl code.
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 28 Feb 2012 16:00:41 +0100
+
+linux-2.6 (3.2.6-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.5
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.6
+    - ALSA: hda - Apply 0x0f-VREF fix to all ASUS laptops with ALC861/660
+      (Closes: #657302)
+    - [armhf] vfp: flush thread hwstate before restoring context from sigframe
+    - proc: mem_release() should check mm != NULL
+    - proc: make sure mem_open() doesnt pin the targets memory
+    - [arm] sched/rt: Fix task stack corruption under
+      __ARCH_WANT_INTERRUPTS_ON_CTXSW
+    - eCryptfs: Infinite loop due to overflow in ecryptfs_write()
+    - iscsi-target: Fix reject release handling in iscsit_free_cmd()
+    - iscsi-target: Fix double list_add with iscsit_alloc_buffs reject
+    - pcmcia: fix socket refcount decrementing on each resume
+
+  [ Aurelien Jarno ]
+  * hwmon: backport IT8728F support for linux 3.3. 
+
+  [ Uwe Kleine-König ]
+  * [amd64] Update rt featureset to 3.2.5-rt12
+  * [i386] enable rt featureset for 686-pae
+
+  [ Arnaud Patard ]
+  * Merge ixp4xx oops fix when probing mtd.
+
+  [ Ben Hutchings ]
+  * Change linux-image dependencies to allow kmod as an alternative to
+    module-init-tools
+  * relay: prevent integer overflow in relay_open()
+  * builddeb: Don't create files in /tmp with predictable names
+  * ath9k: fix a WEP crypto related regression (Closes: #659484)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 16 Feb 2012 02:38:38 +0000
+
+linux-2.6 (3.2.4-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.3
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.4
+    - eCryptfs: Sanitize write counts of /dev/ecryptfs
+    - eCryptfs: Make truncate path killable
+    - eCryptfs: Check inode changes in setattr
+    - drm/i915: paper over missed irq issues with force wake voodoo
+    - tpm_tis: add delay after aborting command (Closes: #649033)
+    - USB: ftdi_sio: fix initial baud rate (Closes: #658164)
+    - USB: Realtek cr: fix autopm scheduling while atomic (Closes: #656724)
+
+  [ Ben Hutchings ]
+  * [armel] Add mv78xx0 flavour; thanks to Steve McIntyre for the config
+  * net: Disable FIXED_PHY; this driver only causes trouble
+  * PCI: Rework ASPM disable code (fixes power usage regression on some
+    systems)
+
+  [ Bastian Blank ]
+  * Remove unneeded scmversion workaround.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 05 Feb 2012 15:42:21 +0100
+
+linux-2.6 (3.2.2-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.2
+    - ext4: fix undefined behavior in ext4_fill_flex_info() (CVE-2009-4307)
+    - Unused iocbs in a batch should not be accounted as active (CVE-2012-0058)
+    - uvcvideo: Fix integer overflow in uvc_ioctl_ctrl_map()
+    - [arm] proc: clear_refs: do not clear reserved pages
+
+  [ Ben Hutchings ]
+  * Clean up linux-image maintainer scripts:
+    - Stop changing 'build' and 'source' symlinks; these now belong to the
+      linux-headers packages
+    - Remove unused configuration variables
+    - prerm: Remove last vestige of /usr/doc transition
+    - postrm: Remove modules.*.bin; currently modules.builtin.bin is left
+      behind
+  * [alpha] Build with gcc-4.5 (Closes: #657112)
+  * aufs: Update to aufs3.2-20120109 (fixes FTBFS on m68k)
+  * [m68k] Fix assembler constraint to prevent overeager gcc optimisation
+  * sdhci-pci: Include driver in installer
+  * [armel] udeb: Do not attempt to build lzo-modules udeb as lzo_compress
+    is now built-in (fixes FTBFS)
+  * [armhf] udeb: Include rt2800usb in nic-modules, replacing rt2870sta
+    which was removed from the kernel
+  * drm: Fix authentication kernel crash
+  * xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink()
+  * jbd: Issue cache flush after checkpointing
+  * crypto: sha512 - make it work, undo percpu message schedule
+    - crypto: sha512 - reduce stack usage to safe number
+  * [x86] xen: size struct xen_spinlock to always fit in arch_spinlock_t
+  * l2tp: l2tp_ip - fix possible oops on packet receive
+  * macvlan: fix a possible use after free
+  * tcp: fix tcp_trim_head() to adjust segment count with skb MSS
+  * [x86] KVM: fix missing checks in syscall emulation (CVE-2012-0045)
+
+  [ Thorsten Glaser ]
+  * [m68k] Use gcc-4.6 like (almost) all other architectures
+  * Pass the cflags define as CFLAGS_KERNEL and CFLAGS_MODULE to kbuild
+  * [m68k] Use cflags -ffreestanding (Closes: #648996)
+
+  [ Aurelien Jarno ]
+  * [mips,octeon] Disabled CONFIG_FIXED_PHY as it conflicts with the octeon
+    phy driver.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 01 Feb 2012 01:44:05 +0000
+
+linux-tools (3.2.1-2) unstable; urgency=low
+
+  * Add Vcs-{Svn,Browser} fields
+  * Reduce minimum version of linux-base to 3.4~ to support backports
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 24 Jan 2012 04:26:24 +0000
+
+linux-2.6 (3.2.1-2) unstable; urgency=high
+
+  [ Stefan Lippers-Hollmann ]
+  * udeb: Add missing modules to nic-wireless-modules:
+    - lib80211 encryption algorithms (lib80211_crypt_{wep,ccmptkip})
+      needed for e.g. ipw2x00 wlan modules (Closes: #636259)
+    - ath9k_htc, carl9170 and rt2800{pci,usb} drivers
+      (Closes: #636321, #636353, #636385)
+
+  [ Ben Hutchings ]
+  * Update Vcs-Browser URL for the switch to ViewVC
+  * Point Vcs-{Svn,Browser} at trunk branch, since the sid branch does
+    not always exist
+  * Build linux-libc-dev without multiarch if dpkg does not support it,
+    to support backports
+  * proc: clean up and fix /proc/<pid>/mem handling (CVE-2012-0056)
+
+  [ Aurelien Jarno ]
+  * [x86] Backport KVM nested VMX fixes from 3.3 to fix warnings and
+    crashes of L1 guests.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 23 Jan 2012 15:10:04 +0000
+
+linux-tools (3.2.1-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 19 Jan 2012 04:17:19 +0000
+
+linux-2.6 (3.2.1-1) unstable; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.2
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.1
+
+  [ Aurelien Jarno ]
+  * [arm, mips, mipsel, sh4] Add a virtio-modules udeb on flavours which
+    can be emulated by QEMU.
+
+  [ Ben Hutchings ]
+  * media/dvb: Enable DVB_USB_IT913X as module (Closes: #653776)
+  * [arm] Remove use of possibly undefined BUILD_BUG_ON in <asm/bug.h>
+    (fixes FTBFS)
+  * Install /lib/modules/<kernel-version>/modules.builtin in linux-image
+    packages
+  * [ia64] Add accept4() syscall (Closes: #647825)
+  * [x86] staging: Enable STAGING_MEDIA, which various drivers now depend on
+    (Closes: #654800)
+  * [um,m68k] Register a generic CPU device (fixes regression introduced by
+    the fix for #649216)
+  * [alpha] add io{read,write}{16,32}be functions, thanks to Michael Cree
+  * net: reintroduce missing rcu_assign_pointer() calls
+  * Input: ALPS - add support for protocol versions 3 and 4
+    (Closes: #618422, #648207)
+  * [powerpc/powerpc64] udeb: Drop zlib-modules; ZLIB_DEFLATE is built-in
+  * [amd64] iommu: Enable INTEL_IOMMU, INTEL_IOMMU_FLOPPY_WA, IRQ_REMAP
+  * [amd64] cpufreq: Enable X86_P4_CLOCKMOD (Closes: #656328)
+  * Refresh list of related firmware packages for bug script
+
+  [ Bastian Blank ]
+  * [amd64] crypt: Enable some amd64 only ciphers.
+  * Packaging updates:
+    - Use unicode.
+    - Cleanup config handling.
+    - Remove support for plain-xen image type.
+    - Allow disabling debug infos for unreleased builds.
+
+  [ Arnaud Patard ]
+  * [armel] disable tomoyo and apparmor to allow kernel image to fit into flash.
+  * [armel] add back ixp4xx gpiolib patch
+  * [arm] backport topdown mmap support from rmk's tree
+  * [armel] Enable support from LaCIE kirkwood devices, thanks to Simon Guinot
+    (Closes: #655344)
+  * [armel] Backport 88f6282 A1 support
+
+  [ Jurij Smakov ]
+  * [sparc] Add mpt2sas to scsi-common-modules udeb on sparc and sparc64,
+    needed by Niagara T3 machines.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 18 Jan 2012 16:14:12 +0000
+
+linux-2.6 (3.2~rc7-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+    - [powerpc] pasemi_mac: Fix building as module
+    - [x86] mpparse: Account for bus types other than ISA and PCI
+      (Closes: #586494)
+    - EHCI : Fix a regression in the ISO scheduler (Closes: #651382)
+    - [arm] setup: initialize arm_dma_zone_size earlier (Closes: #651215)
+
+  [ Ben Hutchings ]
+  * [x86] et131x: Include driver in installer (Closes: #651440)
+  * security: Enable APPARMOR (Closes: #598408)
+
+  [ Uwe Kleine-König ]
+  * [amd64] Update rt featureset to 3.2-rc5-rt8
+
+  [ Bastian Blank ]
+  * Use xz compression for all packages.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 28 Dec 2011 14:55:38 +0100
+
+linux-tools (3.2~rc4-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 07 Dec 2011 01:53:15 +0000
+
+linux-2.6 (3.2~rc4-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Update to aufs3.x-rcN-20111114
+  * ieee802154: Enable IEEE802154_6LOWPAN as module
+  * can: Enable CAN_GW, CAN_EMS_PCMCIA, CAN_PEAK_PCI as modules
+  * nfc: enable NFC_NCI as module
+  * scsi: Enable MVUMI as module
+  * dm: Enable DM_THIN_PROVISIONING as module
+  * b43: Enable B43_PHY_HT
+  * [ia64,powerpc,sparc,x86] wireless: Enable MWIFIEX_PCIE as module
+  * udeb: Update configuration for 3.2:
+    - Provide the default configuration instead of including it from the
+      kernel-wedge package
+    - iwlagn is renamed to iwlwifi
+    - blowfish is renamed to blowfish_generic
+
+  [ Uwe Kleine-König ]
+  * [amd64] reenable rt featureset with 3.2-rc4-rt5
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 03 Dec 2011 23:07:41 +0000
+
+linux-2.6 (3.1.8-2) unstable; urgency=high
+
+  * igmp: Avoid zero delay when receiving odd mixture of IGMP queries
+    (Closes: #654876) (CVE-2012-0207)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 10 Jan 2012 00:14:39 +0000
+
+linux-2.6 (3.1.8-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.1.7
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.1.8
+    - Revert "clockevents: Set noop handler in clockevents_exchange_device()",
+      included in stable update 3.1.5 (Closes: #653398)
+    - cfq-iosched: fix cfq_cic_link() race condition
+    - binary_sysctl(): fix memory leak
+    - cgroups: fix a css_set not found bug in cgroup_attach_proc
+    - iwlwifi: allow to switch to HT40 if not associated (Closes: #653423)
+    - futex: Fix uninterruptible loop due to gate_area
+    - drm/radeon/kms: bail on BTC parts if MC ucode is missing
+    - [sparc] sparc64: Fix masking and shifting in VIS fpcmp emulation.
+    - llc: llc_cmsg_rcv was getting called after sk_eat_skb.
+    - ipv4: reintroduce route cache garbage collector
+    - Revert "rtc: Disable the alarm in the hardware" (Closes: #652869)
+
+  [ Ben Hutchings ]
+  * snapshot: Implement compat_ioctl (Closes: #502816)
+  * drm/radeon: flush read cache for gtt with fence on r6xx and newer GPU
+    (Closes: #646376)
+  * rtc: Fix alarm rollover when day or month is out-of-range (Closes: #646429)
+  * l2tp: ensure sk->dst is still valid (Closes: #652503)
+  * Update Russian debconf template translations (Yuri Kozlov)
+    (Closes: #653716)
+  * v4l2-ioctl: integer overflow in video_usercopy()
+  * Restrict ioctl forwarding on partitions and logical volumes (CVE-2011-4127)
+  * [x86] KVM: Prevent starting PIT timers in the absence of irqchip support
+    (CVE-2011-4622)
+
+  [ Jonathan Nieder ]
+  * prerm: Print an error message when aborting removal of the running
+    kernel (Closes: #601962)
+  
+  [ Aurelien Jarno ]
+  * [sh4] Remove core-modules udeb as it is empty.
+  * [sh4/sh7751r] Disable CONFIG_RTS7751R2D_1. Support for this board 
+    implies IRQless IDE, which causes data corruption.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 08 Jan 2012 16:31:16 +0000
+
+linux-2.6 (3.1.6-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.1.6
+    - staging: r8712u: Add new USB ID (Closes: #651622)
+    - [arm] setup: initialize arm_dma_zone_size earlier (Closes: #651215)
+
+  [ Ben Hutchings ]
+  * [x86] Enable HYPERV, HYPERV_STORAGE, HYPERV_NET, HYPERV_UTILS,
+    HYPERV_MOUSE as modules (Closes: #652014)
+  * cciss: Add IRQF_SHARED back in for the non-MSI(X) interrupt handler
+    (Closes: #650119)
+  * udeb: Update configuration:
+    - Provide the default configuration instead of including it from the
+      kernel-wedge package
+    - [x86] Include et131x (Closes: #651440)
+    - [x86] Include isci (Closes: #652897)
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 23 Dec 2011 17:02:26 +0100
+
+linux-tools (3.1.1-3) unstable; urgency=low
+
+  * Fix s390x support.
+
+ -- Aurelien Jarno <aurel32@debian.org>  Sun, 18 Dec 2011 19:32:12 +0100
+
+linux-2.6 (3.1.5-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.1.5
+    - bridge: correct IPv6 checksum after pull (Closes: #651469)
+    - USB: EHCI: fix HUB TT scheduling issue with iso transfer
+      (Closes: #651015)
+    - [x86] mpparse: Account for bus types other than ISA and PCI
+      (Closes: #586494)
+
+  [ Bastian Blank ]
+  * Fix generation of revisions for the patch list.
+
+  [ Hector Oron ]
+  * regulator: backport fix for nullpointer dereference in core.
+
+  [ Ben Hutchings ]
+  * [x86] Enable MEMTEST (Closes: #613321, #646361)
+    - If bad RAM is detected, WARN and recommend a more thorough test
+  * brcmsmac: Fix I/O functions for MIPS and for big-endian architectures
+  * [x86] Enable GPIO_PCH, GPIO_ML_IOH, I2C_EG20T, PCH_CAN, PCH_DMA,
+    PCH_GBE, PCH_PHUB, SERIAL_PCH_UART, SPI_TOPCLIFF_PCH, USB_GADGET,
+    USB_EG20T as modules
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 11 Dec 2011 05:28:40 +0000
+
+linux-2.6 (3.1.4-1) unstable; urgency=low
+
+  * New upstream stable updates:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.1.2
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.1.3
+    - TTY: ldisc, wait for ldisc infinitely in hangup (Closes: #645071)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.1.4
+
+  [ Martin Michlmayr ]
+  * [armel] Set the priority of pata-modules to standard since the
+    GLAN Tank uses PATA.
+
+  [ Ben Hutchings ]
+  * Enable BCMA as module, BCMA_HOST_PCI and B43_BCMA (Closes: #649567)
+    but limit these to devices not supported by brcmsmac
+  * brcmsmac: Enable as module for all architectures
+  * Include module taint flags in bug reports
+  * lirc_serial: Fix various bugs that may result in a crash, deadlock or
+    other failure (Closes: #645811)
+  * amilo-rfkill: Use proper functions to write to the i8042 safely
+  * topology: Provide CPU topology in sysfs in !SMP configurations
+    (Closes: #649216)
+
+  [ Bastian Blank ]
+  * Include generated headers. (closes: #650085)
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 29 Nov 2011 14:14:14 +0100
+
+linux-tools (3.1.1-2) unstable; urgency=low
+
+  * Change the check for stale debian/control to tolerate binNMUs
+    (Closes: #649005)
+  * Rebuild with perl 5.14 (Closes: #649006)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 17 Nov 2011 03:18:03 +0000
+
+linux-tools (3.1.1-1) unstable; urgency=low
+
+  * New upstream release
+
+  [ Bastian Blank ]
+  * Rename to linux-tools.
+  * Use 3.0 (quilt) source format.
+  * Properly patch modpost symbol prefix setting.
+  * Build linux-tools binary package.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 14 Nov 2011 04:57:47 +0000
+
+linux-2.6 (3.1.1-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.1.1
+
+  [ Aurelien Jarno ]
+  * [s390x] Add s390x udebs, based on linux-kernel-di-s390x-2.6.
+  * [sparc64] Sync udebs with sparc.
+
+  [ Ben Hutchings ]
+  * [powerpc] Fix module selection for {ata,ide,scsi-core}-modules udebs
+  * [alpha] wire up accept4 syscall, thanks to Michael Cree
+  * iwlagn: fix modinfo display for 135 ucode (Closes: #647958)
+  * [powerpc] ptrace: Fix build with gcc 4.6
+  * [arm] add io{read,write}{16,32}be functions (fixes FTBFS)
+  * cifs, freezer: add wait_event_freezekillable and have cifs use it
+    (Closes: #488794)
+  * [alpha] Remove old, broken udeb configuration (Closes: #647586)
+  * DFSG: Remove drivers/staging/ft1000/ft1000-*/*.img, non-free
+    firmware for drivers we don't build
+  * hfs: fix hfs_find_init() sb->ext_tree NULL ptr oops (CVE-2011-2203)
+  * vmscan: fix shrinker callback bug in fs/super.c
+  * block: Always check length of all iov entries in blk_rq_map_user_iov()
+  * [x86] Add amilo-rfkill driver for some Fujitsu-Siemens Amilo laptops
+    (Closes: #631664)
+
+  [ Arnaud Patard ]
+  * [arm] add missing ioread/write be functions to ixp4xx to fix FTBFS
+  * [armhf] allow to build kernel image for iMX51 and iMX53 and enable some
+    iMX53 platforms.
+  * [armhf] add ahci for iMX53, pata for iMX51
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 13 Nov 2011 20:08:09 +0000
+
+linux-2.6 (3.1.0-1~experimental.1) experimental; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.1
+    - drm/i915: FBC off for ironlake and older, otherwise on by default
+      (Closes: #641622)
+    - drm/radeon: Update AVIVO cursor coordinate origin before x/yorigin
+      calculation (Closes: #585130)
+    - crypto: ghash - Avoid null pointer dereference if no key is set
+
+  [ Ben Hutchings ]
+  * [powerpc/powerpc64] Add missing #include to LPAR console selection fix
+  * Make kernel-wedge package checks non-fatal in experimental builds
+  * [x86/!486] Enable INTEL_IDLE
+  * aufs: Update to aufs3.1-20111031 (Closes: #644687)
+
+  [ Bastian Blank ]
+  * Use xz compression for debug packages.
+  * Make gcc-4.6 the default compiler.
+  * Use shorter versions in the package names.
+  * Remove linux-tools-* binary package.
+  * Drop external module packages stuff.
+  * Set default security module to Unix Discretionary Access Controls.
+    - Remove unneeded selinux boot parameter.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 03 Nov 2011 20:03:14 +0100
+
+linux-2.6 (3.1.0~rc7-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * Build udebs for the installer
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 25 Sep 2011 22:52:50 +0100
+
+linux-2.6 (3.1.0~rc6-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * [ia64] Disable GENERIC_GPIO (fixes FTBFS)
+  * [i386] libertas: prioritize usb8388_olpc.bin firmware on OLPC machines
+  * [armel/ixp4xx] Add gpioblib support (fixes FTBFS)
+  * [i386] Fix alignment of alternative instruction entries (Closes: #640964)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 21 Sep 2011 05:45:40 +0100
+
+linux-2.6 (3.1.0~rc4-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+
+  [ Ben Hutchings ]
+  * aufs: Disable until it is updated for Linux 3.1
+  * rt: Disable until it is updated for Linux 3.1
+  * nfs: Enable NFSv4.1/pNFS (Closes: #627655)
+  * [x86] ACPI: Enable ACPI_APEI_GHES as built-in (no longer modular).
+    Enable ACPI_APEI_MEMORY_FAILURE.
+  * netfilter: Enable IP_SET_HASH_NETIFACE as module
+  * net: Enable NFC, NFC_PN533 as modules
+  * video: Enable FB_UDL as module (Closes: #618261)
+  * target: Enable ISCSI_TARGET as module
+  * skge: Enable SKGE_GENESIS
+  * net/wireless: Enable RTL8192DE as module
+  * hwmon: Enable SENSORS_EMC2103, SENSORS_LM95245, SENSORS_MAX1668,
+    SENSORS_NTC_THERMISTOR, SENSORS_SMM665 as modules
+  * [i386] Enable GPIO_CS5535, MFD_CS5535, CS5535_MFGPT,
+    CS5535_CLOCK_EVENT_SRC, GPIO_VX855, MFD_VX855 as modules;
+    [i386/486] Enable OLPC_XO1_PM, OLPC_XO1_RTC, OLPC_XO1_SCI, OLPC_XO15_SCI
+    (Closes: #639113)
+  * media/dvb: Enable DVB_NET
+  * media/rc: Enable IR_MCE_KBD_DECODER as module
+  * gspca: Enable USB_GSPCA_SE401 as module
+  * de4x5: Disable on all architectures except alpha (Closes: #639538)
+  * wl128x: Disable on all flavours except armhf/omap
+  * Make bug script accept failure of lspci (Closes: #639439)
+  * [alpha] Disable GENERIC_GPIO (Closes: #638696)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 29 Aug 2011 14:48:28 +0100
+
+linux-2.6 (3.0.0-6) unstable; urgency=high
+
+  [ Uwe Kleine-König ]
+  * [amd64] Update rt featureset to 3.0.7-rt20
+
+  [ Bastian Blank ]
+  * Add stable 3.0.7, including:
+    - drm/radeon: Update AVIVO cursor coordinate origin before x/yorigin
+      calculation (Closes: #585130)
+    - ipv6: fix NULL dereference in udp6_ufo_fragment() (Closes: #643817)
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.7
+
+  [ Ben Hutchings ]
+  * [powerpc] Change ATA, PATA_MACIO from module to built-in (Closes: #641210)
+  * [powerpc] Change IDE, IDE_GD from built-in to module
+  * Add stable 3.0.8, including:
+    - cputimer: Cure lock inversion
+    - drm/ttm: ensure ttm for new node is bound before calling move_notify()
+    - drm/ttm: unbind ttm before destroying node in accel move cleanup
+    - CIFS: Fix ERR_PTR dereference in cifs_get_root
+    - xfs: start periodic workers later
+    - mm: fix race between mremap and removing migration entry
+    - x25: Prevent skb overreads when checking call user data
+    - crypto: ghash - Avoid null pointer dereference if no key is set
+      (CVE-2011-4081)
+    - hfsplus: Fix kfree of wrong pointers in hfsplus_fill_super() error path
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.8
+  * [{mips,mipsel}/{4,5}kc-malta] Disable X.25, as in all other configurations
+  * ark3116: Fix initialisation order (Closes: #640391)
+  * Add empty files to trigger generation of kernel-image udebs
+  * aufs: Update to aufs3.0-20111031 (Closes: #644687)
+  * xfs: Fix possible memory corruption in xfs_readlink (CVE-2011-4077)
+  * oom: fix integer overflow of points in oom_badness (CVE-2011-4097)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 01 Nov 2011 14:50:06 +0000
+
+linux-2.6 (3.0.0-5) unstable; urgency=low
+
+  [ Ben Hutchings ]
+  * Bump ABI to 2
+  * kobj_uevent: Ignore if some listeners cannot handle message
+    (Closes: #641661)
+  * Build udebs for the installer
+  * Add stable 3.0.5 and 3.0.6, including:
+    - TTY: pty, fix pty counting
+    - pata_via: disable ATAPI DMA on AVERATEC 3200
+    - atm: br2684: Fix oops due to skb->dev being NULL
+    - alarmtimers: Avoid possible null pointer traversal
+    - alarmtimers: Memset itimerspec passed into alarm_timer_get
+    - alarmtimers: Avoid possible denial of service with high freq periodic
+      timers
+    - rtc: Fix RTC PIE frequency limit
+    - x86, perf: Check that current->mm is alive before getting user callchain
+    - xen/smp: Warn user why they keel over - nosmp or noapic and what to use
+      instead. (Closes: #637308)
+    - drm/nouveau: properly handle allocation failure in nouveau_sgdma_populate
+    - net/9p: fix client code to fail more gracefully on protocol error
+    - virtio: Fix the size of receive buffer packing onto VirtIO ring.
+    - virtio: VirtIO can transfer VIRTQUEUE_NUM of pages.
+    - fs/9p: Fid is not valid after a failed clunk.
+    - fs/9p: When doing inode lookup compare qid details and inode mode bits.
+    - fs/9p: Always ask new inode in create
+    - net/9p: Fix the msize calculation.
+    - 9p: close ACL leaks
+    - fs/9p: Add fid before dentry instantiation
+    - net/9p: Fix kernel crash with msize 512K
+    - fs/9p: Always ask new inode in lookup for cache mode disabled
+    - vfs: restore pinning the victim dentry in vfs_rmdir()/vfs_rename_dir()
+    - cifs: fix possible memory corruption in CIFSFindNext (CVE-2011-3191)
+    - writeback: introduce .tagged_writepages for the WB_SYNC_NONE sync stage
+    - writeback: update dirtied_when for synced inode to prevent livelock
+    - fib:fix BUG_ON in fib_nl_newrule when add new fib rule
+    - scm: Capture the full credentials of the scm sender
+    - vlan: reset headers on accel emulation path
+    - xfrm: Perform a replay check after return from async codepaths
+    - bridge: Pseudo-header required for the checksum of ICMPv6
+    - bridge: fix a possible use after free
+    - TPM: Call tpm_transmit with correct size (CVE-2011-1161)
+    - TPM: Zero buffer after copying to userspace (CVE-2011-1162)
+    - ALSA: fm801: Gracefully handle failure of tuner auto-detect
+      (Closes: #641946)
+    - btrfs: fix d_off in the first dirent
+    - ARM: 7091/1: errata: D-cache line maintenance operation by MVA may not
+      succeed
+    - ARM: 7099/1: futex: preserve oldval in SMP __futex_atomic_op
+    - ALSA: usb-audio: Check for possible chip NULL pointer before clearing
+      probing flag
+    - cfg80211: Fix validation of AKM suites
+    - iwlagn: fix dangling scan request
+    - block: Free queue resources at blk_release_queue() (Closes: #631187)
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.5
+     http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.6
+  * Make taskstats require root access (CVE-2011-2494)
+
+  [ Uwe Kleine-König ]
+  * [amd64] Update rt featureset to 3.0.6-rt16 (Closes: #643301)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 05 Oct 2011 15:14:34 +0100
+
+linux-2.6 (3.0.0-4) unstable; urgency=low
+
+  [ Ben Hutchings ]
+  * Make bug script accept failure of lspci (Closes: #639439)
+  * [alpha] Disable GENERIC_GPIO (Closes: #638696)
+  * Add stable 3.0.4, including:
+    - loop: fix deadlock when sysfs and LOOP_CLR_FD race against each other
+    - Btrfs: fix an oops of log replay
+    - ext4: Fix ext4_should_writeback_data() for no-journal mode
+    - ext4: call ext4_ioend_wait and ext4_flush_completed_IO in ext4_evict_inode
+    - ext4: Resolve the hang of direct i/o read in handling
+      EXT4_IO_END_UNWRITTEN.
+    - ext4: fix nomblk_io_submit option so it correctly converts uninit blocks
+    - xen-blkfront: Drop name and minor adjustments for emulated scsi devices
+    - xen/x86: replace order-based range checking of M2P table by linear one
+    - rt2x00: fix order of entry flags modification
+    - Add a personality to report 2.6.x version numbers
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.4
+  * sendmmsg/sendmsg: fix unsafe user pointer access
+  * rt2x00: fix crash in rt2800usb_write_tx_desc
+  * rt2x00: fix crash in rt2800usb_get_txwi (Closes: #636531)
+  * [sparc] Only Panther cheetah+ chips have POPC (Closes: #639949)
+  * uvcvideo: Fix crash when linking entities (Closes: #637740)
+  * Update Spanish debconf template translations (Omar Campagne)
+    (Closes: #636242)
+
+  [ Moritz Muehlenhoff ]
+  * Update German Debconf translation. Thanks to Holger Wansing
+    (Closes: #641487)
+
+  [ Uwe Kleine-König ]
+  * [amd64] Update rt featureset to 3.0.4-rt14
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 19 Sep 2011 14:40:42 +0100
+
+linux-2.6 (3.0.0-3) unstable; urgency=low
+
+  [ Ben Hutchings ]
+  * Disable SENSORS_SHT15, unlikely to be usable on any supported platform
+    (Closes: #638696)
+  * Add stable 3.0.3, including:
+    - atm: br2864: sent packets truncated in VC routed mode (Closes: #638656)
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.3
+  * netfilter: TCP and raw fix for ip_route_me_harder (fixes case where
+    SNAT/masquerading is not done)
+  * Remove net device features from bug reports (Closes: #638956)
+  * [mips,mipsel] Ignore nfs ABI changes made in 3.0.0-2; fixes FTBFS
+  * genirq: Fix wrong bit operation
+  * befs: Validate length of long symbolic links (CVE-2011-2928)
+  * CIFS: Fix memory corruption on mount (Closes: #635344)
+  * x86-32, vdso: On system call restart after SYSENTER, use int $0x80
+  * drm/ttm: fix ttm_bo_add_ttm(user) failure path
+  * fuse: check size of FUSE_NOTIFY_INVAL_ENTRY message
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 27 Aug 2011 08:04:02 +0100
+
+linux-2.6 (3.0.0-2) unstable; urgency=high
+
+  [ Aurelien Jarno ]
+  * Add configuration files for s390x architecture.
+
+  [ Ben Hutchings ]
+  * linux-libc-dev: Install include/asm under arch-specific directory
+    (thanks to Aurelien for correcting the directory); mark package as
+    multi-arch-coinstallable (Multi-Arch: same)
+  * [powerpc] Use libata-based drivers for most PATA controllers
+    (Closes: #636854):
+    - Various drivers replaced as for x86 in 2.6.32-10
+    - pata_macio replaces ide_pmac
+  * Add stable 3.0.2, including:
+    - net: Cap number of elements for sendmmsg
+    - net: Fix security_socket_sendmsg() bypass problem
+    - [x86] xen: allow enable use of VGA console on dom0
+    - net: Compute protocol sequence numbers and fragment IDs using MD5
+    - cifs: cope with negative dentries in cifs_get_root
+    - ALSA: snd-usb: avoid dividing by zero on invalid input
+    - ipv6: make fragment identifications less predictable (CVE-2011-2699)
+    - sch_sfq: fix sfq_enqueue() (Closes: #631945)
+    - gre: fix improper error handling
+    - ecryptfs: Add mount option to check uid of device being mounted
+      = expect uid
+    - ecryptfs: Return error when lower file pointer is NULL
+    - ext{3,4}: Properly count journal credits for long symlinks
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.2
+  * [x86] Enable RTS_PSTOR as module
+
+  [ maximilian attems ]
+  * Add stable 3.0.1, including:
+    - gro: Only reset frag0 when skb can be pulled (CVE-2011-2723)
+    - staging: comedi: fix infoleak to userspace (CVE-2011-2909)
+    - rtc: limit frequency
+    - CIFS: Fix oops while mounting with prefixpath
+    - [SCSI] fix crash in scsi_dispatch_cmd()
+    - tracing: Fix bug when reading system filters on module removal
+    - tracing: Have "enable" file use refcounts like the "filter" file
+    - ext4: fix i_blocks/quota accounting when extent insertion fails
+    - ext4: free allocated and pre-allocated blocks when check_eofblocks_fl
+      fails
+    - ext3: Fix oops in ext3_try_to_allocate_with_rsv()
+    - nfsd4: remember to put RW access on stateid destruction
+    - nfsd4: fix file leak on open_downgrade
+    - NFS: Fix spurious readdir cookie loop messages
+    - proc: fix a race in do_io_accounting()
+    - ipc/sem.c: fix race with concurrent semtimedop() timeouts and IPC_RMID
+    - [armel,armhf,hppa] dm io: flush cpu cache with vmapped io
+    - dm snapshot: flush disk cache when merging
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.1
+
+  [ Jonathan Nieder ]
+  * perf: do not look at ./config for configuration (Closes: #632923)
+    (CVE-2011-2905)
+
+  [ Uwe Kleine-König ]
+  * [amd64] Update rt featureset to 3.0.1-rt11
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 16 Aug 2011 06:08:53 +0100
+
+linux-kbuild-2.6 (3.0.0-2) unstable; urgency=low
+
+  * Include new script depmod.sh (Closes: #635539)
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 29 Jul 2011 01:00:20 +0200
+
+linux-kbuild-2.6 (3.0.0-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 24 Jul 2011 15:38:35 +0200
+
+linux-2.6 (3.0.0-1) unstable; urgency=low
+
+  * New upstream release: http://kernelnewbies.org/Linux_3.0
+
+  [ maximilian attems ]
+  * Topconfig enable modular VIDEO_SR030PC30, VIDEO_NOON010PC30,
+    SOC_CAMERA_IMX074, SOC_CAMERA_OV2640, SOC_CAMERA_OV6650,
+    SOC_CAMERA_OV9740, USB_YUREX.
+  * [x86] enable modular VIDEO_VIA_CAMERA.
+  * [x86_32] enable modular XO15_EBOOK.
+  * ALSA: hda - Enable auto-parser as default for Conexant codecs.
+
+  [ Ben Hutchings ]
+  * linux-support, linux-tools: Use dh_python2 instead of dh_pysupport
+  * aufs: Update for 3.0
+  * [amd64] Enable PCMCIA_AHA152X as module (Closes: #632929)
+  * Update debconf template translations:
+    - Slovak (Slavko)
+  * [x86] comedi: Enable the same drivers as in stable (squeeze), except
+    for ISA drivers on amd64 (Closes: #633516)
+  * Reduce required initramfs-tools version to 0.99~, to ease backporting
+  * [armhf/mx5] Explicitly configure this flavour to support i.MX51; it
+    is not currently possible to support other i.MX5x processors as well
+
+  [ Arnaud Patard ]
+  * Merge ixp4xx build fix and enable ixp4xx back
+  [ Aurelien Jarno ]
+  * [mips/octeon] Disable MEGARAID_SAS, SUSPEND, HIBERNATION, PM_RUNTIME.
+    Enable FUSION, FUSION_SAS, HW_RANDOM, HW_RANDOM_OCTEON, 
+    OCTEON_MGMT_ETHERNET, CONFIG_OCTEON_ETHERNET.
+
+  [ Bastian Blank ]
+  * [xen] Allow autoloading of backend drivers.
+
+  [ Uwe Kleine-König ]
+  * [amd64] Add rt featureset with 3.0-rt2 patch set
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 24 Jul 2011 02:42:27 +0200
+
+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 <maks@debian.org>  Tue, 05 Jul 2011 11:05:43 +0200
+
+linux-kbuild-2.6 (3.0.0~rc5-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 29 Jun 2011 02:32:31 +0100
+
+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 <maks@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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-<version>-<flavour> packages
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 09 Jun 2011 01:10:53 +0100
+
+linux-kbuild-2.6 (3.0.0~rc1-1~experimental.1) experimental; urgency=low
+
+  * New upstream release candidate
+  * Remove docproc, no longer required for module builds
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 01 Jun 2011 10:21:01 +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 <ben@decadent.org.uk>  Wed, 01 Jun 2011 06:41:14 +0100
+
+linux-2.6 (2.6.39-3) unstable; urgency=low
+
+  [ Ben Hutchings ]
+  * [x86] i915: Revert "drm/i915: Enable GMBUS for post-gen2 chipsets"
+    (Closes: #627575)
+  * linux-source-<version>: Suggest libqt4-dev (for 'make xconfig')
+    instead of libqt3-mt-dev (Closes: #631666)
+  * [armhf] Add omap flavour, thanks to Sebastian Reichel
+  * [armhf] rtc-twl: Switch to using threaded irq
+  * bridge/netfilter: provide a cow_metrics method for fake_ops
+    (Closes: #629932)
+  * Update debconf template translations:
+    - Danish (Joe Dalton) (Closes: #632551)
+    - Slovak (Slavko) (Closes: #608684)
+  * partitions/efi: Fix crash (oops) caused by corrupted GUID partition
+    table (CVE-2011-1577)
+  * ksm: fix NULL pointer dereference in scan_get_next_rmap_item()
+    (CVE-2011-2183)
+  * inet_diag: Fix infinite loop in inet_diag_bc_audit() (CVE-2011-2213)
+  * taskstats: don't allow duplicate entries in listener mode (CVE-2011-2484)
+  * bluetooth: Prevent buffer overflow in l2cap config request
+    (CVE-2011-2497)
+
+  [ maximilian attems ]
+  * Add stable 2.6.39.2, including:
+    - block: Fix crash (oops) in blkdev_get() on failed exclusive open
+      (Closes: #631574)
+    - nl80211: fix check for valid SSID size in scan operations (CVE-2011-2517)
+    - drm/radeon/kms: viewport height has to be even
+    - drm/radeon/kms: fix for radeon on systems >4GB without hardware iommu
+    - fat: Fix corrupt inode flags when remove ATTR_SYS flag
+    - scsi:  Fix oops caused by queue refcounting failure
+    - cifs: don't allow cifs_reconnect to exit with NULL socket pointer
+    - drm/radeon/kms: do bounds checking for 3D_LOAD_VBPNTR and bump array
+      limit
+    - TOMOYO: Fix oops in tomoyo_mount_acl() (CVE-2011-2518)
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.39.2
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 04 Jul 2011 07:08:10 +0100
+
+linux-2.6 (2.6.39-2) unstable; urgency=low
+
+  [ 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)
+  * [x86] Remove Celeron from list of processors supporting PAE. Most
+    'Celeron M' models do not.
+  * Update debconf template translations:
+    - Swedish (Martin Bagge) (Closes: #628932)
+    - French (David Prévot) (Closes: #628191)
+  * aufs: Update for 2.6.39 (Closes: #627837)
+  * Add stable 2.6.39.1, including:
+    - ext4: dont set PageUptodate in ext4_end_bio()
+    - pata_cmd64x: fix boot crash on parisc (Closes: #622997, #622745)
+    - ext3: Fix fs corruption when make_indexed_dir() fails
+    - netfilter: nf_ct_sip: validate Content-Length in TCP SIP messages
+    - sctp: fix race between sctp_bind_addr_free() and
+      sctp_bind_addr_conflict()
+    - sctp: fix memory leak of the ASCONF queue when free asoc
+    - md/bitmap: fix saving of events_cleared and other state
+    - cdc_acm: Fix oops when Droids MuIn LCD is connected
+    - cx88: Fix conversion from BKL to fine-grained locks (Closes: #619827)
+    - keys: Set cred->user_ns in key_replace_session_keyring (CVE-2011-2184)
+    - tmpfs: fix race between truncate and writepage
+    - nfs41: Correct offset for LAYOUTCOMMIT
+    - xen/mmu: fix a race window causing leave_mm BUG()
+    - ext4: fix possible use-after-free in ext4_remove_li_request()
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.39.1
+  * Bump ABI to 2
+  * 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
+    (Closes: #629401)
+
+  [ Aurelien Jarno ]
+  * [mipsel/loongson-2f] Disable_SCSI_LPFC to workaround GCC ICE.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 07 Jun 2011 12:14:05 +0100
+
+linux-kbuild-2.6 (2.6.39-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Fri, 20 May 2011 04:53:57 +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 <maks@debian.org>  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 <willemkuyn@gmail.com>.
+  * topconfig Enable modular RTL8192CU. (closes: #625613)
+
+ -- maximilian attems <maks@debian.org>  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 <linux/slab.h> 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 <maks@debian.org>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  Tue, 29 Mar 2011 05:31:03 +0100
+
+linux-kbuild-2.6 (2.6.38-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Wed, 16 Mar 2011 13:45:58 +0000
+
+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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <maks@debian.org>  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 <ben@decadent.org.uk>  Sat, 26 Feb 2011 03:16:16 +0000
+
+linux-kbuild-2.6 (2.6.37-1) unstable; urgency=low
+
+  * Upload to unstable
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Tue, 15 Feb 2011 14:15:36 +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 <ben@decadent.org.uk>  Tue, 15 Feb 2011 04:14:09 +0000
+
+linux-kbuild-2.6 (2.6.37-1~experimental.1) experimental; urgency=low
+
+  * New upstream version
+  * Include new script gcc-goto.sh
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 16 Jan 2011 15:14:34 +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 <linux/slab.h> (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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  Sun, 05 Dec 2010 23:19:38 +0000
+
+linux-kbuild-2.6 (2.6.36-1~experimental.1) experimental; urgency=low
+
+  * New upstream version
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Mon, 15 Nov 2010 00:20:33 +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_<version>-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 <max@stro.at>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <maks@debian.org>  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 <stappers@stappers.nl> (closes: #583689)
+
+ -- maximilian attems <maks@debian.org>  Mon, 16 Aug 2010 23:49:32 +0200
+
+linux-kbuild-2.6 (2.6.35-1~experimental.1) experimental; urgency=low
+
+  * New upstream version
+  * Update policy version to 3.9.1; no changes required
+  * Fix minor issues reported by lintian:
+    - Add ${misc:Depends} to dependencies
+    - Add debian/source/format file
+    - Remove redundant priority and section fields
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 08 Aug 2010 22:31:47 +0100
+
+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 <maks@debian.org>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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-<version> 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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  Sun, 06 Jun 2010 18:53:04 +0100
+
+linux-kbuild-2.6 (2.6.34-1~experimental.1) experimental; urgency=low
+
+  * New upstream version
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Thu, 20 May 2010 01:19:43 +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 <maks@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <maks@debian.org>  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 <debian-bugs@thequod.de>
+
+  [ 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 <dannf@debian.org>  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 <dannf@debian.org>  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 <ben@decadent.org.uk>  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 <dannf@debian.org>  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 <bersace03@gmail.com>
+  * nouveau: disable acceleration on NVA3/NVA5/NVA8 by default.
+  * openvz: disable KSM. Thanks Dietmar Maurer <dietmar@proxmox.com>.
+    (closes: #585864)
+  * Update openvz patch to d38b56fd0dca.
+  * openvz: enalbe modular VZ_EVENT.
+
+ -- maximilian attems <maks@debian.org>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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-<version> 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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <maks@debian.org>  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 <ben@decadent.org.uk>  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 <maks@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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 <ben@decadent.org.uk>  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 <dannf@debian.org>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  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 <linux/personality.h> header in <asm/fcntl.h>; 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 <ben@decadent.org.uk>  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 <ben@decadent.org.uk>  Wed, 16 Dec 2009 21:42:49 +0000
+
+linux-kbuild-2.6 (2.6.32-1) unstable; urgency=low
+
+  [ Ben Hutchings ]
+  * New upstream version. (closes: #560090)
+  * Include new script module-common.lds, thanks to Zoran Dzelajlija.
+
+  [ Bastian Blank ]
+  * Move contents of linux-kbuild package to /usr/lib.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 11 Dec 2009 16:16:12 +0100
+
+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 <waldi@debian.org>  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 <sebastian@breakpoint.cc>.
+
+ -- Bastian Blank <waldi@debian.org>  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 <sebastian@breakpoint.cc>.
+    (closes: #555093).
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 15 Nov 2009 18:47:49 +0000
+
+linux-kbuild-2.6 (2.6.31.2-1) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 25 Oct 2009 18:38:44 +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 <waldi@debian.org>  Sat, 24 Oct 2009 19:17:30 +0200
+
+linux-kbuild-2.6 (2.6.31.2-1~experimental.1) experimental; urgency=low
+
+  [ Bastian Blank ]
+  * New upstream version.
+
+  [ Ben Hutchings ]
+  * Include new script gcc-x86_32-has-stack-protector.sh.
+  * Add myself to Uploaders.
+  * New upstream version (2.6.31.2).
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sat, 17 Oct 2009 23:05:27 +0100
+
+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 <maks@debian.org>  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 <kon@iki.fi>
+  * 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 <maks@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <maks@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  Tue, 07 Jul 2009 14:45:43 +0200
+
+linux-kbuild-2.6 (2.6.30-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 17 Jun 2009 16:49:57 +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 <waldi@debian.org>  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 <waldi@debian.org>  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 <linux/scatterlist.h>
+    - 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 <waldi@debian.org>  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 <jordi@debian.org> 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 <maks@debian.org>  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 <linux/io.h>
+    - 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 <waldi@debian.org>  Sat, 04 Apr 2009 15:13:33 +0200
+
+linux-kbuild-2.6 (2.6.29-1) unstable; urgency=low
+
+  * New upstream version. 
+  * Autogenerate list of supported options in modpost. (closes: #518961)
+    - Build-depend against python.
+  * Use debhelper compat level 7.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 26 Mar 2009 12:54:47 +0100
+
+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 <asm/byteorder.h> and <endian.h> 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 <waldi@debian.org>  Tue, 24 Mar 2009 14:32:11 +0100
+
+linux-kbuild-2.6 (2.6.28-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 22 Feb 2009 13:45:39 +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 <maks@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  Mon, 18 Aug 2008 15:34:38 +0200
+
+linux-kbuild-2.6 (2.6.26-3) unstable; urgency=low
+
+  * Fix recursive installation. (closes: #494435)
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 10 Aug 2008 13:01:41 +0200
+
+linux-kbuild-2.6 (2.6.26-2) unstable; urgency=low
+
+  * Include new scripts. (closes: #494435)
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 09 Aug 2008 20:45:12 +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 <waldi@debian.org>  Fri, 08 Aug 2008 08:09:00 +0200
+
+linux-kbuild-2.6 (2.6.26-1) unstable; urgency=low
+
+  * New upstream version.
+  * modpost: Support new parameters.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 02 Aug 2008 13:09:54 +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 <dilinger@debian.org>
+    (closes: #485192)
+  * [ppc]: Enable RTC_DRV_PPC. (closes: #484693) Thanks for the patch to
+    Geoff Levand <geoffrey.levand@am.sony.com>.
+  * 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 <guillaume@morinfr.org>
+
+  [ 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 <waldi@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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/<pid> 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 <waldi@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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 <waldi@debian.org>  Thu, 08 May 2008 14:46:48 +0200
+
+linux-kbuild-2.6 (2.6.25-2) unstable; urgency=low
+
+  * modpost: Support new parameters. (closes: #479271)
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 05 May 2008 19:58:40 +0200
+
+linux-kbuild-2.6 (2.6.25-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 02 May 2008 10:32:13 +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 <ijc@hellion.org.uk> 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 <jbr@edlug.org.uk> for review.
+
+ -- Bastian Blank <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  Thu, 31 Jan 2008 17:37:00 +0100
+
+linux-kbuild-2.6 (2.6.24-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 29 Jan 2008 14:03:06 +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 <waldi@debian.org>  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 <waldi@debian.org>  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 <maks@debian.org>  Fri, 21 Dec 2007 11:47:55 +0100
+
+linux-kbuild-2.6 (2.6.23-1) unstable; urgency=low
+
+  * New upstream version.
+  * modpost: Support -s.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 05 Dec 2007 08:23:28 +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 <maks@debian.org>  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 <maks@debian.org>  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 <maks@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  Mon, 23 Jul 2007 09:38:01 +0200
+
+linux-kbuild-2.6 (2.6.22-1) unstable; urgency=low
+
+  * New upstream version.
+  * Don't fail if no module is specified.
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 17 Jul 2007 23:14:23 +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 <rmh@aybabtu.com>.
+  * [powerpc] Enable CONFIG_ADB_PMU_LED.
+  * [hppa] Disable a bunch of topconfig enabled fb devices. Thanks Frank
+    Lichtenheld <djpig@debian.org> 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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  Fri, 25 May 2007 10:57:48 +0200
+
+linux-kbuild-2.6 (2.6.21-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 18 May 2007 23:45:14 +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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  Sun, 15 Apr 2007 16:04:16 +0200
+
+linux-kbuild-2.6 (2.6.20-1) unstable; urgency=low
+
+  * New upstream version.
+  * modpost: Support -w.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 12 Apr 2007 06:53:00 +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 <waldi@debian.org>  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 <waldi@debian.org>  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 <leonard.norrgard@refactor.fi>
+  * tulip: Add i386 specific patch to remove duplicate pci ids.
+    Thanks Jurij Smakov <jurij@wooyd.org> (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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <sjoerd@spring.luon.net> 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 <fs@debian.org>  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 <linux/stddef.h>
+   - 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 <waldi@debian.org>  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 <waldi@debian.org>  Fri, 29 Sep 2006 14:12:19 +0200
+
+linux-kbuild-2.6 (2.6.18-1) unstable; urgency=low
+
+  * New upstream version.
+  * Use included headers. (closes: #382286, #384211)
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 25 Sep 2006 21:45:50 +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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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/<pid>/ 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 <waldi@debian.org>  Fri, 11 Aug 2006 19:58:06 +0200
+
+linux-kbuild-2.6 (2.6.17-3) unstable; urgency=low
+
+  * Replace own modpost with original one.
+
+ -- Bastian Blank <waldi@debian.org>  Tue,  1 Aug 2006 11:01:18 +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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  Thu, 13 Jul 2006 13:14:53 +0200
+
+linux-kbuild-2.6 (2.6.17-2) unstable; urgency=low
+
+  * Fix uninitialied variable. (closes: #377656)
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 11 Jul 2006 10:10:24 +0200
+
+linux-kbuild-2.6 (2.6.17-1) unstable; urgency=low
+
+  * Initial release. (closes: #368544)
+
+ -- Bastian Blank <waldi@debian.org>  Sat,  1 Jul 2006 19:10:07 +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 <waldi@debian.org>  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 <waldi@debian.org>  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 <fs@debian.org>  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 <fs@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <tbm@cyrius.com>  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 <asm/io.h> (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 <waldi@debian.org>  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 <fs@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <fs@debian.org>  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 <luther@debian.org>  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 <maks@sternwelten.at>  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/<if>/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 <horms@verge.net.au>  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 <waldi@debian.org>  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 <luther@debian.org>  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 <maks@sternwelten.at>  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 <fs@debian.org>  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 <dannf@debian.org>  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 <fs@debian.org>  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/<other device>
+    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 <nobse@debian.org>  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 <horms@debian.org>  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 <horms@debian.org>  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 <luther@debian.org>  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 <waldi@debian.org>  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 <horms@debian.org>  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 <dilinger@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <waldi@debian.org>  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 <dilinger@debian.org>  Wed, 20 Jul 2005 17:16:04 -0400
+
diff --git a/compat b/compat
new file mode 100644 (file)
index 0000000..ec63514
--- /dev/null
+++ b/compat
@@ -0,0 +1 @@
+9
diff --git a/config.defines.dump b/config.defines.dump
new file mode 100644 (file)
index 0000000..329b04a
--- /dev/null
@@ -0,0 +1,2260 @@
+cdebian_linux.config
+ConfigCore
+p0
+(tRp1
+(Vbase
+p2
+tp3
+(dp4
+Varches
+p5
+(lp6
+Valpha
+p7
+aVamd64
+p8
+aVarm64
+p9
+aVarmel
+p10
+aVarmhf
+p11
+aVhppa
+p12
+aVi386
+p13
+aVm68k
+p14
+aVmips
+p15
+aVmipsel
+p16
+aVmipsn32
+p17
+aVmipsn32el
+p18
+aVmips64
+p19
+aVmips64el
+p20
+aVpowerpc
+p21
+aVpowerpcspe
+p22
+aVppc64
+p23
+aVppc64el
+p24
+aVs390
+p25
+aVs390x
+p26
+aVsh3
+p27
+aVsh4
+p28
+aVsparc
+p29
+aVsparc64
+p30
+aVtilegx
+p31
+aVx32
+p32
+asVfeaturesets
+p33
+(lp34
+Vnone
+p35
+aVrt
+p36
+asVcompiler
+p37
+Vgcc-6
+p38
+ss(Vbuild
+p39
+tp40
+(dp41
+Vsigned-modules
+p42
+I00
+sVdebug-info
+p43
+I01
+ss(Vbase
+p44
+NVrt
+p45
+tp46
+(dp47
+Venabled
+p48
+I01
+ss(Vdescription
+p49
+tp50
+(dp51
+Vpart-long-up
+p52
+VThis kernel is not suitable for SMP (multi-processor,\u000amulti-core or hyper-threaded) systems.
+p53
+sVpart-long-xen
+p54
+VThis kernel also runs on a Xen hypervisor.\u000aIt supports both privileged (dom0) and unprivileged (domU) operation.
+p55
+ss(Vrelations
+p56
+tp57
+(dp58
+Vinitramfs-tools
+p59
+Vinitramfs-tools (>= 0.120+deb8u2)
+p60
+sVgcc-6
+p61
+Vgcc-6 <!stage1 !cross>, gcc-6-@gnu-type-package@:native <!stage1 cross>
+p62
+sVinitramfs-fallback
+p63
+Vlinux-initramfs-tool
+p64
+ss(Vimage
+p65
+tp66
+(dp67
+Vinitramfs-generators
+p68
+(lp69
+Vinitramfs-tools
+p70
+aVinitramfs-fallback
+p71
+ass(Vabi
+p72
+tp73
+(dp74
+Vabiname
+p75
+V3
+p76
+sVignore-changes
+p77
+(lp78
+V__cpuhp_*
+p79
+aVbpf_analyzer
+p80
+aVcxl_*
+p81
+aVmm_iommu_*
+p82
+aVregister_cxl_calls
+p83
+aVunregister_cxl_calls
+p84
+aVmodule:arch/x86/kvm/*
+p85
+aVmodule:drivers/hv/*
+p86
+aVmodule:drivers/iio/common/st_sensors/**
+p87
+aVmodule:drivers/net/wireless/**
+p88
+aVmodule:drivers/nvdimm/*
+p89
+aVmodule:drivers/power/supply/bq27xxx_battery
+p90
+aVmodule:drivers/scsi/cxgbi/*
+p91
+aVmodule:drivers/scsi/libiscs*
+p92
+aVmodule:drivers/scsi/qla2xxx/qla2xxx
+p93
+aVmodule:drivers/scsi/ufs/*
+p94
+aVmodule:drivers/target/**
+p95
+aVmodule:drivers/usb/host/**
+p96
+aVmodule:drivers/usb/musb/**
+p97
+aVmodule:net/ceph/libceph
+p98
+aVbtree_*
+p99
+aVvisitor*
+p100
+aVcan_rx_register
+p101
+aVip6_xmit
+p102
+aVmodule:net/dccp/dccp
+p103
+aVmodule:net/rds/rds
+p104
+aVdevfreq_*
+p105
+aVdevm_devfreq_*
+p106
+aVupdate_devfreq
+p107
+aVmodule:drivers/infiniband/**
+p108
+aVacpi_ec_add_query_handler
+p109
+aVacpi_ec_remove_query_handler
+p110
+aVfirst_ec
+p111
+aVdebugfs_create_automount
+p112
+ass(Vbase
+p113
+Valpha
+p114
+tp115
+(dp116
+Vfeaturesets
+p117
+(lp118
+Vnone
+p119
+asVkernel-arch
+p120
+Valpha
+p121
+ss(Vdescription
+p122
+g114
+NValpha-smp
+p123
+tp124
+(dp125
+Vhardware
+p126
+VAlpha SMP
+p127
+sVhardware-long
+p128
+VDEC Alpha SMP systems with extended kernel start address (Wildfire, Titan, Marvel)
+p129
+ss(Vbuild
+p130
+g114
+tp131
+(dp132
+Vsigned-modules
+p133
+I00
+sVimage-file
+p134
+Varch/alpha/boot/vmlinux.gz
+p135
+ss(Vdescription
+p136
+g114
+NValpha-generic
+p137
+tp138
+(dp139
+Vhardware
+p140
+VAlpha
+p141
+sVhardware-long
+p142
+VDEC Alpha systems with extended kernel start address (Wildfire, Titan, Marvel)
+p143
+ss(Vimage
+p144
+g114
+tp145
+(dp146
+Vsuggests
+p147
+Vaboot, fdutils
+p148
+sVinstall-stem
+p149
+Vvmlinuz
+p150
+ss(Vbase
+p151
+g114
+g119
+tp152
+(dp153
+Vflavours
+p154
+(lp155
+Valpha-generic
+p156
+aValpha-smp
+p157
+asVimplicit-flavour
+p158
+I01
+ss(Vbase
+p159
+Vamd64
+p160
+tp161
+(dp162
+Vfeaturesets
+p163
+(lp164
+Vnone
+p165
+aVrt
+p166
+asVkernel-arch
+p167
+Vx86
+p168
+ss(Vdescription
+p169
+g160
+NVamd64
+p170
+tp171
+(dp172
+Vhardware
+p173
+V64-bit PCs
+p174
+sVhardware-long
+p175
+VPCs with AMD64, Intel 64 or VIA Nano processors
+p176
+ss(Vbuild
+p177
+g160
+tp178
+(dp179
+Vvdso
+p180
+I01
+sVimage-file
+p181
+Varch/x86/boot/bzImage
+p182
+sVdebug-info
+p183
+I01
+ss(Vrelations
+p184
+g160
+tp185
+(dp186
+Vheaders%gcc-6
+p187
+Vlinux-compiler-gcc-6-x86
+p188
+ss(Vimage
+p189
+g160
+tp190
+(dp191
+Vbreaks
+p192
+Vxserver-xorg-input-vmmouse (<< 1:13.0.99)
+p193
+sVinstall-stem
+p194
+Vvmlinuz
+p195
+sVbootloaders
+p196
+(lp197
+Vgrub-pc
+p198
+aVgrub-efi-amd64
+p199
+aVextlinux
+p200
+ass(Vbase
+p201
+g160
+Vnone
+p202
+tp203
+(dp204
+Vflavours
+p205
+(lp206
+Vamd64
+p207
+ass(Vdescription
+p208
+g160
+g202
+Vamd64
+p209
+tp210
+(dp211
+Vparts
+p212
+(lp213
+Vxen
+p214
+ass(Vbase
+p215
+g160
+Vrt
+p216
+tp217
+(dp218
+Vflavours
+p219
+(lp220
+Vamd64
+p221
+ass(Vbase
+p222
+Varm64
+p223
+tp224
+(dp225
+Vfeaturesets
+p226
+(lp227
+Vnone
+p228
+asVkernel-arch
+p229
+Varm64
+p230
+ss(Vdescription
+p231
+g223
+NVarm64
+p232
+tp233
+(dp234
+Vhardware
+p235
+V64-bit ARMv8 machines
+p236
+ss(Vbuild
+p237
+g223
+tp238
+(dp239
+Vvdso
+p240
+I01
+sVimage-file
+p241
+Varch/arm64/boot/Image
+p242
+sVdebug-info
+p243
+I01
+ss(Vimage
+p244
+g223
+NVarm64
+p245
+tp246
+(dp247
+s(Vimage
+p248
+g223
+tp249
+(dp250
+Vbreaks
+p251
+Vlibmozjs185-1.0, libmozjs-24-0 (<< 24.2.0-5.1~)
+p252
+sVinstall-stem
+p253
+Vvmlinuz
+p254
+ss(Vbase
+p255
+g223
+Vnone
+p256
+tp257
+(dp258
+Vflavours
+p259
+(lp260
+Varm64
+p261
+ass(Vbase
+p262
+Varmel
+p263
+tp264
+(dp265
+g117
+(lp266
+g119
+asVkernel-arch
+p267
+Varm
+p268
+ss(Vbuild
+p269
+g263
+tp270
+(dp271
+Vsigned-modules
+p272
+I00
+sVimage-file
+p273
+Varch/arm/boot/zImage
+p274
+ss(Vimage
+p275
+g263
+NVmarvell
+p276
+tp277
+(dp278
+Vrecommends
+p279
+Vu-boot-tools
+p280
+sVbreaks
+p281
+Vflash-kernel (<< 3.57~)
+p282
+sVcheck-size-with-dtb
+p283
+I01
+sVcheck-size
+p284
+L2097080L
+ss(Vdescription
+p285
+g263
+NVmarvell
+p286
+tp287
+(dp288
+Vhardware
+p289
+VMarvell Kirkwood/Orion
+p290
+sVhardware-long
+p291
+VMarvell Kirkwood based systems (SheevaPlug, QNAP TS-119/TS-219, etc)\u000aand Orion 5181, 5182 and 5281 based systems (QNAP TS-109/TS-209, etc)
+p292
+ss(Vrelations
+p293
+g263
+tp294
+(dp295
+Vheaders%gcc-6
+p296
+Vlinux-compiler-gcc-6-arm
+p297
+ss(Vimage
+p298
+g263
+tp299
+(dp300
+Vinstall-stem
+p301
+Vvmlinuz
+p302
+ss(g151
+g263
+g119
+tp303
+(dp304
+g154
+(lp305
+Vmarvell
+p306
+asg158
+I01
+ss(Vbase
+p307
+Varmhf
+p308
+tp309
+(dp310
+g117
+(lp311
+g119
+asVkernel-arch
+p312
+Varm
+p313
+ss(Vdescription
+p314
+g308
+NVarmmp
+p315
+tp316
+(dp317
+Vhardware
+p318
+VARMv7 multiplatform compatible SoCs
+p319
+sVhardware-long
+p320
+VARMv7 multiplatform kernel. See\u000ahttps://wiki.debian.org/DebianKernel/ARMMP for details of supported\u000aplatforms
+p321
+ss(Vbuild
+p322
+g308
+tp323
+(dp324
+Vvdso
+p325
+I01
+sVimage-file
+p326
+Varch/arm/boot/zImage
+p327
+ss(Vdescription
+p328
+g308
+NVarmmp-lpae
+p329
+tp330
+(dp331
+Vhardware
+p332
+VARMv7 multiplatform compatible SoCs supporting LPAE
+p333
+sVhardware-long
+p334
+VARMv7 multiplatform kernel supporting LPAE. See\u000ahttps://wiki.debian.org/DebianKernel/ARMMP for details of supported\u000aplatforms.
+p335
+ss(Vrelations
+p336
+g308
+tp337
+(dp338
+Vheaders%gcc-6
+p339
+Vlinux-compiler-gcc-6-arm
+p340
+ss(Vimage
+p341
+g308
+tp342
+(dp343
+Vinstall-stem
+p344
+Vvmlinuz
+p345
+ss(g151
+g308
+g119
+tp346
+(dp347
+g154
+(lp348
+Varmmp
+p349
+aVarmmp-lpae
+p350
+asg158
+I01
+ss(Vbase
+p351
+Vhppa
+p352
+tp353
+(dp354
+g117
+(lp355
+g119
+asVkernel-arch
+p356
+Vparisc
+p357
+ss(Vbuild
+p358
+g352
+tp359
+(dp360
+Vsigned-modules
+p361
+I00
+sVimage-file
+p362
+Vvmlinux
+p363
+ss(Vdescription
+p364
+g352
+NVparisc64-smp
+p365
+tp366
+(dp367
+Vhardware
+p368
+Vmultiprocessor 64-bit PA-RISC
+p369
+sVhardware-long
+p370
+VHP PA-RISC 64-bit SMP systems with support for more than 4 GB RAM
+p371
+ss(Vbase
+p372
+g352
+NVparisc64-smp
+p373
+tp374
+(dp375
+Vcflags
+p376
+V-fno-cse-follow-jumps
+p377
+sVoverride-host-type
+p378
+Vhppa64-linux-gnu
+p379
+ss(Vrelations
+p380
+g352
+tp381
+(dp382
+Vgcc-6
+p383
+Vgcc-6 <!stage1 !cross>, binutils-hppa64-linux-gnu <!stage1 !cross>, gcc-6-hppa64-linux-gnu <!stage1 !cross>, gcc-6-hppa-linux-gnu:native <!stage1 cross>, binutils-hppa64-linux-gnu:native <!stage1 cross>, gcc-6-hppa64-linux-gnu:native <!stage1 cross>
+p384
+ss(Vdescription
+p385
+g352
+NVparisc
+p386
+tp387
+(dp388
+Vhardware
+p389
+V32-bit PA-RISC
+p390
+sVhardware-long
+p391
+VHP PA-RISC 32-bit systems with max 4 GB RAM
+p392
+ss(Vimage
+p393
+g352
+tp394
+(dp395
+Vsuggests
+p396
+Vpalo
+p397
+sVinstall-stem
+p398
+Vvmlinux
+p399
+ss(g151
+g352
+g119
+tp400
+(dp401
+g154
+(lp402
+Vparisc
+p403
+aVparisc64-smp
+p404
+asg158
+I01
+ss(Vbase
+p405
+Vi386
+p406
+tp407
+(dp408
+Vfeaturesets
+p409
+(lp410
+Vnone
+p411
+aVrt
+p412
+asVkernel-arch
+p413
+Vx86
+p414
+ss(Vbuild
+p415
+g406
+tp416
+(dp417
+Vvdso
+p418
+I01
+sVimage-file
+p419
+Varch/x86/boot/bzImage
+p420
+ss(Vdescription
+p421
+g406
+NV686-pae
+p422
+tp423
+(dp424
+Vhardware
+p425
+Vmodern PCs
+p426
+sVhardware-long
+p427
+VPCs with one or more processors supporting PAE
+p428
+sVparts
+p429
+(lp430
+Vpae
+p431
+ass(Vdescription
+p432
+g406
+tp433
+(dp434
+Vpart-long-pae
+p435
+VThis kernel requires PAE (Physical Address Extension).\u000aThis feature is supported by the Intel Pentium Pro/II/III/4/4M/D, Xeon,\u000aCore and Atom; AMD Geode NX, Athlon (K7), Duron, Opteron, Sempron,\u000aTurion or Phenom; Transmeta Efficeon; VIA C7; and some other processors.
+p436
+ss(Vbuild
+p437
+g406
+NV686-pae
+p438
+tp439
+(dp440
+Vdebug-info
+p441
+I01
+ss(Vdescription
+p442
+g406
+NV686
+p443
+tp444
+(dp445
+Vhardware
+p446
+Volder PCs
+p447
+sVhardware-long
+p448
+VPCs with one or more processors not supporting PAE
+p449
+ss(Vrelations
+p450
+g406
+tp451
+(dp452
+Vheaders%gcc-6
+p453
+Vlinux-compiler-gcc-6-x86
+p454
+ss(Vimage
+p455
+g406
+tp456
+(dp457
+Vbreaks
+p458
+Vxserver-xorg-input-vmmouse (<< 1:13.0.99)
+p459
+sVinstall-stem
+p460
+Vvmlinuz
+p461
+sVbootloaders
+p462
+(lp463
+Vgrub-pc
+p464
+aVextlinux
+p465
+ass(Vbase
+p466
+g406
+Vnone
+p467
+tp468
+(dp469
+Vflavours
+p470
+(lp471
+V686
+p472
+aV686-pae
+p473
+ass(Vdescription
+p474
+g406
+g467
+V686-pae
+p475
+tp476
+(dp477
+Vparts
+p478
+(lp479
+Vxen
+p480
+ass(Vbase
+p481
+g406
+Vrt
+p482
+tp483
+(dp484
+Vflavours
+p485
+(lp486
+V686-pae
+p487
+ass(Vbase
+p488
+Vm68k
+p489
+tp490
+(dp491
+Vcflags
+p492
+V-ffreestanding
+p493
+sg117
+(lp494
+g119
+asVkernel-arch
+p495
+Vm68k
+p496
+ss(Vbuild
+p497
+g489
+tp498
+(dp499
+Vsigned-modules
+p500
+I00
+sVimage-file
+p501
+Vvmlinux.gz
+p502
+ss(Vdescription
+p503
+g489
+NVm68k
+p504
+tp505
+(dp506
+Vhardware
+p507
+VMotorola MC68020+ family
+p508
+ss(Vimage
+p509
+g489
+tp510
+(dp511
+Vsuggests
+p512
+Vvmelilo, fdutils
+p513
+sVinstall-stem
+p514
+Vvmlinuz
+p515
+ss(g151
+g489
+g119
+tp516
+(dp517
+g154
+(lp518
+Vm68k
+p519
+asg158
+I01
+ss(Vbase
+p520
+Vmips
+p521
+tp522
+(dp523
+g117
+(lp524
+g119
+asVkernel-arch
+p525
+Vmips
+p526
+ss(Vbuild
+p527
+g521
+tp528
+(dp529
+Vsigned-modules
+p530
+I00
+sVimage-file
+p531
+Vvmlinux
+p532
+ss(Vimage
+p533
+g521
+NV4kc-malta
+p534
+tp535
+(dp536
+Vconfigs
+p537
+(lp538
+Vkernelarch-mips/config.malta
+p539
+aVkernelarch-mips/config.mips32r2
+p540
+ass(Vimage
+p541
+g521
+NV5kc-malta
+p542
+tp543
+(dp544
+Vconfigs
+p545
+(lp546
+Vkernelarch-mips/config.malta
+p547
+aVkernelarch-mips/config.mips64r2
+p548
+ass(Vdescription
+p549
+g521
+NVocteon
+p550
+tp551
+(dp552
+Vhardware
+p553
+VOcteon
+p554
+sVhardware-long
+p555
+VCavium Networks Octeon
+p556
+ss(Vimage
+p557
+g521
+NVocteon
+p558
+tp559
+(dp560
+Vconfigs
+p561
+(lp562
+Vkernelarch-mips/config.octeon
+p563
+ass(Vimage
+p564
+g521
+tp565
+(dp566
+Vinstall-stem
+p567
+Vvmlinux
+p568
+ss(Vdescription
+p569
+g521
+NV5kc-malta
+p570
+tp571
+(dp572
+Vhardware
+p573
+VMIPS Malta (64-bit)
+p574
+sVhardware-long
+p575
+VMIPS Malta boards (64-bit)
+p576
+ss(Vdescription
+p577
+g521
+NV4kc-malta
+p578
+tp579
+(dp580
+Vhardware
+p581
+VMIPS Malta
+p582
+sVhardware-long
+p583
+VMIPS Malta boards
+p584
+ss(g151
+g521
+g119
+tp585
+(dp586
+g154
+(lp587
+V4kc-malta
+p588
+aV5kc-malta
+p589
+aVocteon
+p590
+asg158
+I01
+ss(Vbase
+p591
+Vmipsel
+p592
+tp593
+(dp594
+g117
+(lp595
+g119
+asVkernel-arch
+p596
+Vmips
+p597
+ss(Vimage
+p598
+g592
+NVloongson-3
+p599
+tp600
+(dp601
+Vconfigs
+p602
+(lp603
+Vkernelarch-mips/config.loongson-3
+p604
+ass(Vbuild
+p605
+g592
+tp606
+(dp607
+Vsigned-modules
+p608
+I00
+sVimage-file
+p609
+Vvmlinux
+p610
+ss(Vimage
+p611
+g592
+NV4kc-malta
+p612
+tp613
+(dp614
+Vconfigs
+p615
+(lp616
+Vkernelarch-mips/config.malta
+p617
+aVkernelarch-mips/config.mips32r2
+p618
+ass(Vimage
+p619
+g592
+NV5kc-malta
+p620
+tp621
+(dp622
+Vconfigs
+p623
+(lp624
+Vkernelarch-mips/config.malta
+p625
+aVkernelarch-mips/config.mips64r2
+p626
+ass(Vdescription
+p627
+g592
+NVocteon
+p628
+tp629
+(dp630
+Vhardware
+p631
+VOcteon
+p632
+sVhardware-long
+p633
+VCavium Networks Octeon
+p634
+ss(Vdescription
+p635
+g592
+NVloongson-3
+p636
+tp637
+(dp638
+Vhardware
+p639
+VLoongson 3A/3B
+p640
+sVhardware-long
+p641
+VLoongson 3A or 3B based systems (e.g. from Loongson or Lemote)
+p642
+ss(Vimage
+p643
+g592
+NVocteon
+p644
+tp645
+(dp646
+Vconfigs
+p647
+(lp648
+Vkernelarch-mips/config.octeon
+p649
+ass(Vimage
+p650
+g592
+tp651
+(dp652
+Vinstall-stem
+p653
+Vvmlinux
+p654
+ss(Vdescription
+p655
+g592
+NV5kc-malta
+p656
+tp657
+(dp658
+Vhardware
+p659
+VMIPS Malta (64-bit)
+p660
+sVhardware-long
+p661
+VMIPS Malta boards (64-bit)
+p662
+ss(Vdescription
+p663
+g592
+NV4kc-malta
+p664
+tp665
+(dp666
+Vhardware
+p667
+VMIPS Malta
+p668
+sVhardware-long
+p669
+VMIPS Malta boards
+p670
+ss(g151
+g592
+g119
+tp671
+(dp672
+g154
+(lp673
+V4kc-malta
+p674
+aV5kc-malta
+p675
+aVloongson-3
+p676
+aVocteon
+p677
+asg158
+I01
+ss(Vbase
+p678
+Vmipsn32
+p679
+tp680
+(dp681
+Vfeaturesets
+p682
+(lp683
+sVkernel-arch
+p684
+Vmips
+p685
+ss(Vbase
+p686
+Vmipsn32el
+p687
+tp688
+(dp689
+Vfeaturesets
+p690
+(lp691
+sVkernel-arch
+p692
+Vmips
+p693
+ss(Vbase
+p694
+Vmips64
+p695
+tp696
+(dp697
+g117
+(lp698
+g119
+asVkernel-arch
+p699
+Vmips
+p700
+ss(Vbuild
+p701
+g695
+tp702
+(dp703
+Vsigned-modules
+p704
+I00
+sVimage-file
+p705
+Vvmlinux
+p706
+ss(Vimage
+p707
+g695
+NV5kc-malta
+p708
+tp709
+(dp710
+Vconfigs
+p711
+(lp712
+Vkernelarch-mips/config.malta
+p713
+aVkernelarch-mips/config.mips64r2
+p714
+ass(Vdescription
+p715
+g695
+NVocteon
+p716
+tp717
+(dp718
+Vhardware
+p719
+VOcteon
+p720
+sVhardware-long
+p721
+VCavium Networks Octeon
+p722
+ss(Vimage
+p723
+g695
+tp724
+(dp725
+Vinstall-stem
+p726
+Vvmlinux
+p727
+ss(Vdescription
+p728
+g695
+NV5kc-malta
+p729
+tp730
+(dp731
+Vhardware
+p732
+VMIPS Malta
+p733
+sVhardware-long
+p734
+VMIPS Malta boards
+p735
+ss(Vimage
+p736
+g695
+NVocteon
+p737
+tp738
+(dp739
+Vconfigs
+p740
+(lp741
+Vkernelarch-mips/config.octeon
+p742
+ass(g151
+g695
+g119
+tp743
+(dp744
+g154
+(lp745
+V5kc-malta
+p746
+aVocteon
+p747
+asg158
+I01
+ss(Vbase
+p748
+Vmips64el
+p749
+tp750
+(dp751
+g117
+(lp752
+g119
+asVkernel-arch
+p753
+Vmips
+p754
+ss(Vimage
+p755
+g749
+NVloongson-3
+p756
+tp757
+(dp758
+Vconfigs
+p759
+(lp760
+Vkernelarch-mips/config.loongson-3
+p761
+ass(Vbuild
+p762
+g749
+tp763
+(dp764
+Vsigned-modules
+p765
+I00
+sVimage-file
+p766
+Vvmlinux
+p767
+ss(Vimage
+p768
+g749
+NV5kc-malta
+p769
+tp770
+(dp771
+Vconfigs
+p772
+(lp773
+Vkernelarch-mips/config.malta
+p774
+aVkernelarch-mips/config.mips64r2
+p775
+ass(Vdescription
+p776
+g749
+NVocteon
+p777
+tp778
+(dp779
+Vhardware
+p780
+VOcteon
+p781
+sVhardware-long
+p782
+VCavium Networks Octeon
+p783
+ss(Vdescription
+p784
+g749
+NVloongson-3
+p785
+tp786
+(dp787
+Vhardware
+p788
+VLoongson 3A/3B
+p789
+sVhardware-long
+p790
+VLoongson 3A or 3B based systems (e.g. from Loongson or Lemote)
+p791
+ss(Vimage
+p792
+g749
+tp793
+(dp794
+Vinstall-stem
+p795
+Vvmlinux
+p796
+ss(Vdescription
+p797
+g749
+NV5kc-malta
+p798
+tp799
+(dp800
+Vhardware
+p801
+VMIPS Malta
+p802
+sVhardware-long
+p803
+VMIPS Malta boards
+p804
+ss(Vimage
+p805
+g749
+NVocteon
+p806
+tp807
+(dp808
+Vconfigs
+p809
+(lp810
+Vkernelarch-mips/config.octeon
+p811
+ass(g151
+g749
+g119
+tp812
+(dp813
+g154
+(lp814
+V5kc-malta
+p815
+aVloongson-3
+p816
+aVocteon
+p817
+asg158
+I01
+ss(Vbase
+p818
+Vpowerpc
+p819
+tp820
+(dp821
+g117
+(lp822
+g119
+asVkernel-arch
+p823
+Vpowerpc
+p824
+ss(Vdescription
+p825
+g819
+NVpowerpc64
+p826
+tp827
+(dp828
+Vhardware
+p829
+V64-bit PowerPC
+p830
+ss(Vbuild
+p831
+g819
+tp832
+(dp833
+Vvdso
+p834
+I01
+sVimage-file
+p835
+Vvmlinux
+p836
+ss(Vimage
+p837
+g819
+NVpowerpc-smp
+p838
+tp839
+(dp840
+Vconfigs
+p841
+(lp842
+Vpowerpc/config.powerpc
+p843
+aVpowerpc/config.powerpc-smp
+p844
+ass(Vdescription
+p845
+g819
+NVpowerpc
+p846
+tp847
+(dp848
+Vhardware
+p849
+Vuniprocessor 32-bit PowerPC
+p850
+ss(Vimage
+p851
+g819
+NVpowerpc64
+p852
+tp853
+(dp854
+Vconfigs
+p855
+(lp856
+Vkernelarch-powerpc/config-arch-64
+p857
+aVkernelarch-powerpc/config-arch-64-be
+p858
+ass(Vdescription
+p859
+g819
+NVpowerpc-smp
+p860
+tp861
+(dp862
+Vhardware
+p863
+Vmultiprocessor 32-bit PowerPC
+p864
+ss(Vimage
+p865
+g819
+tp866
+(dp867
+Vsuggests
+p868
+Vmkvmlinuz
+p869
+sVinstall-stem
+p870
+Vvmlinux
+p871
+sVconfigs
+p872
+(lp873
+ss(g151
+g819
+g119
+tp874
+(dp875
+g154
+(lp876
+Vpowerpc
+p877
+aVpowerpc-smp
+p878
+aVpowerpc64
+p879
+asg158
+I01
+ss(Vbase
+p880
+Vpowerpcspe
+p881
+tp882
+(dp883
+g117
+(lp884
+g119
+asVkernel-arch
+p885
+Vpowerpc
+p886
+ss(Vbuild
+p887
+g881
+tp888
+(dp889
+Vsigned-modules
+p890
+I00
+sVimage-file
+p891
+Vvmlinux
+p892
+sVvdso
+p893
+I01
+ss(Vimage
+p894
+g881
+tp895
+(dp896
+Vsuggests
+p897
+Vmkvmlinuz
+p898
+sVinstall-stem
+p899
+Vvmlinux
+p900
+ss(Vdescription
+p901
+g881
+tp902
+(dp903
+Vhardware
+p904
+V32-bit PowerPC with SPE (instead of AltiVec) with SMP support
+p905
+ss(g151
+g881
+g119
+tp906
+(dp907
+g154
+(lp908
+Vpowerpcspe
+p909
+asg158
+I01
+ss(Vbase
+p910
+Vppc64
+p911
+tp912
+(dp913
+g117
+(lp914
+g119
+asVkernel-arch
+p915
+Vpowerpc
+p916
+ss(Vdescription
+p917
+g911
+NVpowerpc64
+p918
+tp919
+(dp920
+Vhardware
+p921
+V64-bit PowerPC
+p922
+ss(Vbuild
+p923
+g911
+tp924
+(dp925
+Vsigned-modules
+p926
+I00
+sVimage-file
+p927
+Vvmlinux
+p928
+sVvdso
+p929
+I01
+ss(Vimage
+p930
+g911
+NVpowerpc64
+p931
+tp932
+(dp933
+Vconfigs
+p934
+(lp935
+Vkernelarch-powerpc/config-arch-64
+p936
+aVkernelarch-powerpc/config-arch-64-be
+p937
+ass(Vimage
+p938
+g911
+tp939
+(dp940
+Vsuggests
+p941
+Vmkvmlinuz
+p942
+sVinstall-stem
+p943
+Vvmlinux
+p944
+sVconfigs
+p945
+(lp946
+ss(g151
+g911
+g119
+tp947
+(dp948
+g154
+(lp949
+Vpowerpc64
+p950
+asg158
+I01
+ss(Vbase
+p951
+Vppc64el
+p952
+tp953
+(dp954
+g117
+(lp955
+g119
+asVkernel-arch
+p956
+Vpowerpc
+p957
+ss(Vdescription
+p958
+g952
+NVpowerpc64le
+p959
+tp960
+(dp961
+Vhardware
+p962
+VLittle-endian 64-bit PowerPC
+p963
+ss(Vbuild
+p964
+g952
+tp965
+(dp966
+Vvdso
+p967
+I01
+sVimage-file
+p968
+Vvmlinux
+p969
+ss(Vimage
+p970
+g952
+tp971
+(dp972
+Vsuggests
+p973
+Vmkvmlinuz
+p974
+sVinstall-stem
+p975
+Vvmlinux
+p976
+sVconfigs
+p977
+(lp978
+ss(Vimage
+p979
+g952
+NVpowerpc64le
+p980
+tp981
+(dp982
+Vconfigs
+p983
+(lp984
+Vkernelarch-powerpc/config-arch-64
+p985
+aVkernelarch-powerpc/config-arch-64-le
+p986
+ass(g151
+g952
+g119
+tp987
+(dp988
+g154
+(lp989
+Vpowerpc64le
+p990
+asg158
+I01
+ss(Vbase
+p991
+Vs390
+p992
+tp993
+(dp994
+Vfeaturesets
+p995
+(lp996
+sVkernel-arch
+p997
+Vs390
+p998
+ss(Vbase
+p999
+Vs390x
+p1000
+tp1001
+(dp1002
+g117
+(lp1003
+g119
+asVkernel-arch
+p1004
+Vs390
+p1005
+ss(Vdescription
+p1006
+g1000
+NVs390x
+p1007
+tp1008
+(dp1009
+Vhardware
+p1010
+VIBM zSeries
+p1011
+ss(Vbuild
+p1012
+g1000
+tp1013
+(dp1014
+Vvdso
+p1015
+I01
+sVimage-file
+p1016
+Varch/s390/boot/image
+p1017
+ss(Vbuild
+p1018
+g1000
+NVs390x
+p1019
+tp1020
+(dp1021
+Vdebug-info
+p1022
+I01
+ss(Vrelations
+p1023
+g1000
+tp1024
+(dp1025
+Vheaders%gcc-6
+p1026
+Vlinux-compiler-gcc-6-s390
+p1027
+ss(Vimage
+p1028
+g1000
+tp1029
+(dp1030
+Vinstall-stem
+p1031
+Vvmlinuz
+p1032
+sVbootloaders
+p1033
+(lp1034
+Vs390-tools
+p1035
+ass(g151
+g1000
+g119
+tp1036
+(dp1037
+g154
+(lp1038
+Vs390x
+p1039
+asg158
+I01
+ss(Vbase
+p1040
+Vsh3
+p1041
+tp1042
+(dp1043
+Vfeaturesets
+p1044
+(lp1045
+sVkernel-arch
+p1046
+Vsh
+p1047
+ss(Vbase
+p1048
+Vsh4
+p1049
+tp1050
+(dp1051
+g117
+(lp1052
+g119
+asVkernel-arch
+p1053
+Vsh
+p1054
+ss(Vbuild
+p1055
+g1049
+tp1056
+(dp1057
+Vsigned-modules
+p1058
+I00
+sVimage-file
+p1059
+Varch/sh/boot/zImage
+p1060
+ss(Vdescription
+p1061
+g1049
+NVsh7751r
+p1062
+tp1063
+(dp1064
+Vhardware
+p1065
+Vsh7751r
+p1066
+sVhardware-long
+p1067
+VRenesas SH7751R R2D plus board
+p1068
+ss(Vdescription
+p1069
+g1049
+NVsh7785lcr
+p1070
+tp1071
+(dp1072
+Vhardware
+p1073
+Vsh7785lcr
+p1074
+sVhardware-long
+p1075
+VRenesas SH7785 reference board
+p1076
+ss(Vimage
+p1077
+g1049
+tp1078
+(dp1079
+Vinstall-stem
+p1080
+Vvmlinuz
+p1081
+ss(Vimage
+p1082
+g1049
+NVsh7785lcr
+p1083
+tp1084
+(dp1085
+Vrecommends
+p1086
+Vu-boot-tools
+p1087
+sVcheck-size
+p1088
+L4194304L
+ss(g151
+g1049
+g119
+tp1089
+(dp1090
+g154
+(lp1091
+Vsh7751r
+p1092
+aVsh7785lcr
+p1093
+asg158
+I01
+ss(Vbase
+p1094
+Vsparc
+p1095
+tp1096
+(dp1097
+Vfeaturesets
+p1098
+(lp1099
+sVkernel-arch
+p1100
+Vsparc
+p1101
+ss(Vbase
+p1102
+Vsparc64
+p1103
+tp1104
+(dp1105
+g117
+(lp1106
+g119
+asVkernel-arch
+p1107
+Vsparc
+p1108
+ss(Vbuild
+p1109
+g1103
+tp1110
+(dp1111
+Vsigned-modules
+p1112
+I00
+sVimage-file
+p1113
+Varch/sparc/boot/zImage
+p1114
+ss(Vimage
+p1115
+g1103
+NVsparc64
+p1116
+tp1117
+(dp1118
+Vconfigs
+p1119
+(lp1120
+Vkernelarch-sparc/config-up
+p1121
+ass(Vimage
+p1122
+g1103
+NVsparc64-smp
+p1123
+tp1124
+(dp1125
+Vconfigs
+p1126
+(lp1127
+Vkernelarch-sparc/config-smp
+p1128
+ass(Vimage
+p1129
+g1103
+tp1130
+(dp1131
+Vsuggests
+p1132
+Vsilo, fdutils
+p1133
+sVinstall-stem
+p1134
+Vvmlinuz
+p1135
+sVconfigs
+p1136
+(lp1137
+ss(Vdescription
+p1138
+g1103
+NVsparc64-smp
+p1139
+tp1140
+(dp1141
+Vhardware
+p1142
+Vmultiprocessor 64-bit UltraSPARC
+p1143
+ss(Vdescription
+p1144
+g1103
+NVsparc64
+p1145
+tp1146
+(dp1147
+Vhardware
+p1148
+Vuniprocessor 64-bit UltraSPARC
+p1149
+ss(g151
+g1103
+g119
+tp1150
+(dp1151
+g154
+(lp1152
+Vsparc64
+p1153
+aVsparc64-smp
+p1154
+asg158
+I01
+ss(Vbase
+p1155
+Vtilegx
+p1156
+tp1157
+(dp1158
+Vfeaturesets
+p1159
+(lp1160
+sVkernel-arch
+p1161
+Vtile
+p1162
+ss(Vbase
+p1163
+Vx32
+p1164
+tp1165
+(dp1166
+Vfeaturesets
+p1167
+(lp1168
+sVkernel-arch
+p1169
+Vx86
+p1170
+ss(Vdescription
+p1171
+NVrt
+p1172
+tp1173
+(dp1174
+Vparts
+p1175
+(lp1176
+Vrt
+p1177
+asVpart-long-rt
+p1178
+VThis kernel includes the PREEMPT_RT realtime patch set.
+p1179
+sVpart-short-rt
+p1180
+VPREEMPT_RT
+p1181
+ss(Vabi
+p1182
+Ng1172
+tp1183
+(dp1184
+Vignore-changes
+p1185
+(lp1186
+V*
+p1187
+ass(Vversion
+p1188
+tp1189
+(dp1190
+Vupstream
+p1191
+V4.9
+p1192
+sVsource
+p1193
+V4.9.25-1
+p1194
+sVabiname
+p1195
+V4.9.0-3
+p1196
+sVabiname_base
+p1197
+V4.9.0
+p1198
+ss.
\ No newline at end of file
diff --git a/config/alpha/config b/config/alpha/config
new file mode 100644 (file)
index 0000000..b6c850c
--- /dev/null
@@ -0,0 +1,1086 @@
+##
+## 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: block/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: drivers/ata/Kconfig
+##
+CONFIG_PATA_ALI=m
+CONFIG_PATA_AMD=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CYPRESS=m
+CONFIG_PATA_EFAR=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=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_ISAPNP=y
+CONFIG_PATA_MPIIX=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_LEGACY=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_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=y
+
+##
+## 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_HCIVHCI=m
+
+##
+## file: drivers/char/Kconfig
+##
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=m
+CONFIG_RTC=m
+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_RADEON=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+
+##
+## file: drivers/gpu/drm/i2c/Kconfig
+##
+CONFIG_DRM_I2C_CH7006=m
+CONFIG_DRM_I2C_SIL164=m
+
+##
+## file: drivers/gpu/drm/nouveau/Kconfig
+##
+CONFIG_DRM_NOUVEAU=m
+# CONFIG_DRM_NOUVEAU_BACKLIGHT is not set
+
+##
+## file: drivers/hid/usbhid/Kconfig
+##
+CONFIG_USB_HID=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_MAX1619=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_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_STUB=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_SCx200_ACB=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_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+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/radio/Kconfig
+##
+CONFIG_USB_DSBR=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_V4L_RADIO_ISA_DRIVERS=y
+CONFIG_RADIO_CADET=m
+CONFIG_RADIO_RTRACK=m
+CONFIG_RADIO_RTRACK2=m
+CONFIG_RADIO_AZTECH=m
+CONFIG_RADIO_GEMTEK=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/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_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_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
+
+##
+## 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_DISKONCHIP is not set
+
+##
+## file: drivers/net/Kconfig
+##
+CONFIG_NET_FC=y
+CONFIG_NET_SB1000=m
+
+##
+## 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
+CONFIG_ARCNET_COM20020_CS=m
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+CONFIG_FEALNX=m
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL3=m
+CONFIG_3C515=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_3C589=m
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_PCMCIA_AXNET=m
+CONFIG_NE2000=m
+CONFIG_NE2K_PCI=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_ULTRA=m
+CONFIG_WD80x3=m
+
+##
+## file: drivers/net/ethernet/adaptec/Kconfig
+##
+CONFIG_ADAPTEC_STARFIRE=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+CONFIG_AMD8111_ETH=m
+CONFIG_LANCE=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_NI65=m
+
+##
+## file: drivers/net/ethernet/broadcom/Kconfig
+##
+CONFIG_B44=m
+
+##
+## file: drivers/net/ethernet/cirrus/Kconfig
+##
+CONFIG_CS89x0=m
+
+##
+## file: drivers/net/ethernet/dec/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/ethernet/dlink/Kconfig
+##
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+
+##
+## file: drivers/net/ethernet/fujitsu/Kconfig
+##
+CONFIG_PCMCIA_FMVJ18X=m
+
+##
+## file: drivers/net/ethernet/hp/Kconfig
+##
+CONFIG_HP100=m
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NATSEMI=m
+
+##
+## file: drivers/net/ethernet/nvidia/Kconfig
+##
+CONFIG_FORCEDETH=m
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+
+##
+## file: drivers/net/ethernet/sis/Kconfig
+##
+CONFIG_SIS900=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_SMC9194=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_EPIC100=m
+
+##
+## file: drivers/net/ethernet/sun/Kconfig
+##
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+
+##
+## file: drivers/net/ethernet/via/Kconfig
+##
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+
+##
+## file: drivers/net/ethernet/xircom/Kconfig
+##
+CONFIG_PCMCIA_XIRC2PS=m
+
+##
+## file: drivers/net/fddi/Kconfig
+##
+CONFIG_FDDI=y
+CONFIG_SKFP=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/hippi/Kconfig
+##
+CONFIG_HIPPI=y
+CONFIG_ROADRUNNER=m
+# CONFIG_ROADRUNNER_LARGE_RINGS 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/plip/Kconfig
+##
+CONFIG_PLIP=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_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
+
+##
+## file: drivers/net/wireless/Kconfig
+##
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_PCMCIA_WL3501=m
+
+##
+## file: drivers/net/wireless/atmel/Kconfig
+##
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+
+##
+## file: drivers/net/wireless/cisco/Kconfig
+##
+CONFIG_AIRO_CS=m
+
+##
+## file: drivers/net/wireless/intel/ipw2x00/Kconfig
+##
+# CONFIG_IPW2100 is not set
+
+##
+## file: drivers/net/wireless/intersil/orinoco/Kconfig
+##
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+
+##
+## file: drivers/net/wireless/marvell/mwifiex/Kconfig
+##
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+
+##
+## file: drivers/net/wireless/zydas/Kconfig
+##
+CONFIG_USB_ZD1201=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/rtc/Kconfig
+##
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_ALPHA=y
+
+##
+## file: drivers/scsi/Kconfig
+##
+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_GENERIC_NCR5380=m
+CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
+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_QLOGIC_FAS=m
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_SIM710=m
+CONFIG_SCSI_SYM53C416=m
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_AM53C974=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_FDOMAIN=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=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_JSM=m
+
+##
+## file: drivers/tty/serial/8250/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
+
+##
+## 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_OHCI_HCD=m
+CONFIG_USB_UHCI_HCD=m
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=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
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+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_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/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 is not set
+
+##
+## file: init/Kconfig
+##
+CONFIG_USELIB=y
+#. TODO
+# CONFIG_AUDIT is not set
+CONFIG_SYSFS_SYSCALL=y
+
+##
+## 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: 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
+
diff --git a/config/alpha/config.alpha-generic b/config/alpha/config.alpha-generic
new file mode 100644 (file)
index 0000000..d63bf76
--- /dev/null
@@ -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
+
diff --git a/config/alpha/config.alpha-smp b/config/alpha/config.alpha-smp
new file mode 100644 (file)
index 0000000..19288e3
--- /dev/null
@@ -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
+
diff --git a/config/alpha/defines b/config/alpha/defines
new file mode 100644 (file)
index 0000000..386809d
--- /dev/null
@@ -0,0 +1,20 @@
+[base]
+flavours: alpha-generic alpha-smp
+kernel-arch: alpha
+
+[build]
+image-file: arch/alpha/boot/vmlinux.gz
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+suggests: aboot, fdutils
+install-stem: vmlinuz
+
+[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)
diff --git a/config/amd64/config b/config/amd64/config
new file mode 100644 (file)
index 0000000..5aa0804
--- /dev/null
@@ -0,0 +1,214 @@
+##
+## 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_MAXSMP is not set
+CONFIG_NR_CPUS=512
+CONFIG_X86_16BIT=y
+CONFIG_X86_VSYSCALL_EMULATION=y
+CONFIG_NUMA=y
+CONFIG_AMD_NUMA=y
+CONFIG_X86_64_ACPI_NUMA=y
+CONFIG_NUMA_EMU=y
+CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
+CONFIG_EFI_MIXED=y
+CONFIG_KEXEC_FILE=y
+CONFIG_KEXEC_VERIFY_SIG=y
+CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
+CONFIG_RANDOMIZE_MEMORY=y
+## choice: vsyscall table for legacy applications
+# CONFIG_LEGACY_VSYSCALL_NATIVE is not set
+CONFIG_LEGACY_VSYSCALL_EMULATE=y
+# CONFIG_LEGACY_VSYSCALL_NONE is not set
+## end choice
+CONFIG_PCI_MMCONFIG=y
+CONFIG_ISA_DMA_API=y
+CONFIG_X86_X32=y
+CONFIG_X86_X32_DISABLED=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: arch/x86/xen/Kconfig
+##
+CONFIG_XEN_512GB=y
+
+##
+## file: crypto/Kconfig
+##
+CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m
+CONFIG_CRYPTO_POLY1305_X86_64=m
+CONFIG_CRYPTO_SHA1_SSSE3=m
+CONFIG_CRYPTO_SHA256_SSSE3=m
+CONFIG_CRYPTO_SHA512_SSSE3=m
+CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
+CONFIG_CRYPTO_AES_X86_64=m
+CONFIG_CRYPTO_BLOWFISH_X86_64=m
+CONFIG_CRYPTO_CAMELLIA_X86_64=m
+CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m
+CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m
+CONFIG_CRYPTO_CAST5_AVX_X86_64=m
+CONFIG_CRYPTO_CAST6_AVX_X86_64=m
+CONFIG_CRYPTO_DES3_EDE_X86_64=m
+CONFIG_CRYPTO_SALSA20_X86_64=m
+CONFIG_CRYPTO_CHACHA20_X86_64=m
+CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
+CONFIG_CRYPTO_SERPENT_AVX_X86_64=m
+CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m
+CONFIG_CRYPTO_TWOFISH_X86_64=m
+CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m
+CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
+
+##
+## file: crypto/asymmetric_keys/Kconfig
+##
+CONFIG_SIGNED_PE_FILE_VERIFICATION=y
+
+##
+## file: drivers/acpi/Kconfig
+##
+CONFIG_ACPI_BGRT=y
+
+##
+## file: drivers/block/Kconfig
+##
+CONFIG_BLK_DEV_RSXX=m
+
+##
+## file: drivers/char/agp/Kconfig
+##
+CONFIG_AGP=y
+#. Needed by GART_IOMMU
+CONFIG_AGP_AMD64=y
+
+##
+## file: drivers/dma/Kconfig
+##
+CONFIG_INTEL_MIC_X100_DMA=m
+
+##
+## file: drivers/edac/Kconfig
+##
+CONFIG_EDAC_SBRIDGE=m
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C_STUB=m
+
+##
+## 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/iommu/Kconfig
+##
+CONFIG_AMD_IOMMU=y
+#. Can be built as a module, but nothing will trigger loading
+CONFIG_AMD_IOMMU_V2=y
+
+##
+## file: drivers/macintosh/Kconfig
+##
+CONFIG_MACINTOSH_DRIVERS=y
+CONFIG_MAC_EMUMOUSEBTN=y
+
+##
+## file: drivers/misc/mic/Kconfig
+##
+CONFIG_INTEL_MIC_BUS=m
+CONFIG_SCIF_BUS=m
+CONFIG_VOP_BUS=m
+CONFIG_INTEL_MIC_HOST=m
+# CONFIG_INTEL_MIC_CARD is not set
+CONFIG_SCIF=m
+CONFIG_MIC_COSM=m
+CONFIG_VOP=m
+
+##
+## file: drivers/net/Kconfig
+##
+CONFIG_FUJITSU_ES=m
+
+##
+## file: drivers/net/wireless/intel/ipw2x00/Kconfig
+##
+# CONFIG_IPW2100 is not set
+
+##
+## file: drivers/nvdimm/Kconfig
+##
+CONFIG_NVDIMM_PFN=y
+
+##
+## file: drivers/pci/Kconfig
+##
+CONFIG_PCI_HYPERV=y
+
+##
+## file: drivers/scsi/Kconfig
+##
+CONFIG_SCSI_INIA100=m
+
+##
+## file: drivers/tty/Kconfig
+##
+CONFIG_MOXA_INTELLIO=m
+CONFIG_ISI=m
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+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: init/Kconfig
+##
+CONFIG_RCU_FANOUT=64
+CONFIG_KALLSYMS_ALL=y
+
+##
+## file: kernel/livepatch/Kconfig
+##
+CONFIG_LIVEPATCH=y
+
+##
+## file: lib/Kconfig.debug
+##
+CONFIG_FRAME_WARN=2048
+
+##
+## file: mm/Kconfig
+##
+## choice: Memory model
+CONFIG_SPARSEMEM_MANUAL=y
+## end choice
+CONFIG_SPARSEMEM_VMEMMAP=y
+# CONFIG_MOVABLE_NODE is not set
+CONFIG_ZONE_DEVICE=y
+
+##
+## file: security/Kconfig
+##
+CONFIG_LSM_MMAP_MIN_ADDR=65536
+
diff --git a/config/amd64/defines b/config/amd64/defines
new file mode 100644 (file)
index 0000000..e15f609
--- /dev/null
@@ -0,0 +1,22 @@
+[base]
+featuresets:
+ none
+ rt
+kernel-arch: x86
+
+[build]
+debug-info: true
+image-file: arch/x86/boot/bzImage
+vdso: true
+
+[image]
+bootloaders: grub-pc grub-efi-amd64 extlinux
+install-stem: vmlinuz
+breaks: xserver-xorg-input-vmmouse (<< 1:13.0.99)
+
+[relations]
+headers%gcc-6: linux-compiler-gcc-6-x86
+
+[amd64_description]
+hardware: 64-bit PCs
+hardware-long: PCs with AMD64, Intel 64 or VIA Nano processors
diff --git a/config/amd64/none/defines b/config/amd64/none/defines
new file mode 100644 (file)
index 0000000..13ae9eb
--- /dev/null
@@ -0,0 +1,6 @@
+[base]
+flavours:
+ amd64
+
+[amd64_description]
+parts: xen
diff --git a/config/amd64/rt/defines b/config/amd64/rt/defines
new file mode 100644 (file)
index 0000000..090dc41
--- /dev/null
@@ -0,0 +1,3 @@
+[base]
+flavours:
+ amd64
diff --git a/config/arm64/config b/config/arm64/config
new file mode 100644 (file)
index 0000000..c23a7ed
--- /dev/null
@@ -0,0 +1,835 @@
+##
+## file: arch/arm64/Kconfig
+##
+CONFIG_PCI=y
+CONFIG_ARM64_ERRATUM_834220=y
+#. Until we decide how/whether to handle this in userland as well
+# CONFIG_ARM64_ERRATUM_843419 is not set
+## choice: Virtual address space size
+CONFIG_ARM64_VA_BITS_48=y
+## end choice
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=256
+CONFIG_SECCOMP=y
+CONFIG_KEXEC=y
+CONFIG_XEN=y
+CONFIG_ARMV8_DEPRECATED=y
+CONFIG_SWP_EMULATION=y
+CONFIG_CP15_BARRIER_EMULATION=y
+CONFIG_SETEND_EMULATION=y
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_RANDOMIZE_MODULE_REGION_FULL=y
+CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y
+CONFIG_EFI_SECURE_BOOT_SECURELEVEL=y
+CONFIG_COMPAT=y
+
+##
+## file: arch/arm64/crypto/Kconfig
+##
+CONFIG_ARM64_CRYPTO=y
+CONFIG_CRYPTO_SHA1_ARM64_CE=m
+CONFIG_CRYPTO_SHA2_ARM64_CE=m
+CONFIG_CRYPTO_GHASH_ARM64_CE=m
+CONFIG_CRYPTO_AES_ARM64_CE=m
+CONFIG_CRYPTO_AES_ARM64_CE_CCM=m
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=m
+# CONFIG_CRYPTO_AES_ARM64_NEON_BLK is not set
+CONFIG_CRYPTO_CRC32_ARM64=y
+
+##
+## file: arch/arm64/kvm/Kconfig
+##
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=y
+
+##
+## file: arch/arm64/Kconfig.platforms
+##
+CONFIG_ARCH_BCM2835=y
+CONFIG_ARCH_HISI=y
+CONFIG_ARCH_MESON=y
+CONFIG_ARCH_MVEBU=y
+CONFIG_ARCH_QCOM=y
+CONFIG_ARCH_SEATTLE=y
+CONFIG_ARCH_TEGRA=y
+CONFIG_ARCH_THUNDER=y
+CONFIG_ARCH_VEXPRESS=y
+CONFIG_ARCH_XGENE=y
+
+##
+## file: drivers/acpi/Kconfig
+##
+CONFIG_ACPI=y
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_SATA_AHCI_PLATFORM=m
+CONFIG_AHCI_MVEBU=m
+CONFIG_AHCI_TEGRA=m
+CONFIG_AHCI_XGENE=m
+CONFIG_SATA_AHCI_SEATTLE=m
+
+##
+## file: drivers/bluetooth/Kconfig
+##
+CONFIG_BT_HCIUART=m
+CONFIG_BT_QCOMSMD=m
+
+##
+## file: drivers/bus/Kconfig
+##
+CONFIG_QCOM_EBI2=y
+CONFIG_TEGRA_ACONNECT=y
+
+##
+## file: drivers/char/hw_random/Kconfig
+##
+CONFIG_HW_RANDOM_BCM2835=m
+CONFIG_HW_RANDOM_HISI=m
+CONFIG_HW_RANDOM_MSM=m
+CONFIG_HW_RANDOM_XGENE=m
+CONFIG_HW_RANDOM_MESON=m
+CONFIG_HW_RANDOM_CAVIUM=m
+
+##
+## file: drivers/char/ipmi/Kconfig
+##
+CONFIG_IPMI_HANDLER=m
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SSIF=m
+
+##
+## file: drivers/clk/Kconfig
+##
+CONFIG_COMMON_CLK_XGENE=y
+
+##
+## file: drivers/clk/hisilicon/Kconfig
+##
+CONFIG_STUB_CLK_HI6220=y
+
+##
+## file: drivers/clk/qcom/Kconfig
+##
+CONFIG_COMMON_CLK_QCOM=y
+CONFIG_MSM_GCC_8916=y
+CONFIG_MSM_GCC_8996=y
+CONFIG_MSM_MMCC_8996=y
+
+##
+## file: drivers/cpufreq/Kconfig
+##
+CONFIG_CPUFREQ_DT=m
+
+##
+## file: drivers/cpuidle/Kconfig.arm
+##
+CONFIG_ARM_CPUIDLE=y
+
+##
+## file: drivers/crypto/Kconfig
+##
+CONFIG_CRYPTO_DEV_QCE=m
+
+##
+## file: drivers/dma/Kconfig
+##
+CONFIG_DMADEVICES=y
+CONFIG_DMA_BCM2835=y
+CONFIG_K3_DMA=m
+CONFIG_MV_XOR=y
+CONFIG_MV_XOR_V2=y
+CONFIG_TEGRA20_APB_DMA=y
+CONFIG_TEGRA210_ADMA=y
+CONFIG_XGENE_DMA=m
+
+##
+## file: drivers/dma/qcom/Kconfig
+##
+CONFIG_QCOM_BAM_DMA=m
+CONFIG_QCOM_HIDMA_MGMT=m
+CONFIG_QCOM_HIDMA=m
+
+##
+## file: drivers/edac/Kconfig
+##
+CONFIG_EDAC=y
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_XGENE=m
+
+##
+## file: drivers/extcon/Kconfig
+##
+CONFIG_EXTCON=m
+CONFIG_EXTCON_QCOM_SPMI_MISC=m
+CONFIG_EXTCON_USB_GPIO=m
+
+##
+## file: drivers/firmware/Kconfig
+##
+CONFIG_RASPBERRYPI_FIRMWARE=y
+
+##
+## file: drivers/gpio/Kconfig
+##
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_PL061=y
+CONFIG_GPIO_XGENE=y
+CONFIG_GPIO_XGENE_SB=m
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_PCA953X_IRQ=y
+CONFIG_GPIO_MAX77620=y
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+CONFIG_DRM=m
+
+##
+## file: drivers/gpu/drm/ast/Kconfig
+##
+CONFIG_DRM_AST=m
+
+##
+## file: drivers/gpu/drm/bridge/adv7511/Kconfig
+##
+CONFIG_DRM_I2C_ADV7511=m
+
+##
+## file: drivers/gpu/drm/hisilicon/kirin/Kconfig
+##
+CONFIG_DRM_HISI_KIRIN=m
+
+##
+## file: drivers/gpu/drm/msm/Kconfig
+##
+CONFIG_DRM_MSM=m
+CONFIG_DRM_MSM_DSI=y
+CONFIG_DRM_MSM_DSI_PLL=y
+CONFIG_DRM_MSM_DSI_28NM_PHY=y
+CONFIG_DRM_MSM_DSI_20NM_PHY=y
+
+##
+## file: drivers/gpu/drm/panel/Kconfig
+##
+CONFIG_DRM_PANEL_SIMPLE=m
+
+##
+## file: drivers/gpu/drm/tegra/Kconfig
+##
+CONFIG_DRM_TEGRA=m
+CONFIG_DRM_TEGRA_STAGING=y
+
+##
+## file: drivers/gpu/drm/vc4/Kconfig
+##
+CONFIG_DRM_VC4=m
+
+##
+## file: drivers/gpu/host1x/Kconfig
+##
+CONFIG_TEGRA_HOST1X=m
+
+##
+## file: drivers/hwmon/Kconfig
+##
+CONFIG_SENSORS_XGENE=m
+
+##
+## file: drivers/hwspinlock/Kconfig
+##
+CONFIG_HWSPINLOCK_QCOM=m
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C=y
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+CONFIG_I2C_BCM2835=m
+CONFIG_I2C_DESIGNWARE_PLATFORM=m
+CONFIG_I2C_MESON=m
+CONFIG_I2C_MV64XXX=m
+CONFIG_I2C_QUP=m
+CONFIG_I2C_TEGRA=m
+CONFIG_I2C_THUNDERX=m
+CONFIG_I2C_CROS_EC_TUNNEL=m
+CONFIG_I2C_XGENE_SLIMPRO=m
+
+##
+## file: drivers/iio/adc/Kconfig
+##
+CONFIG_QCOM_SPMI_IADC=m
+CONFIG_QCOM_SPMI_VADC=m
+
+##
+## file: drivers/input/keyboard/Kconfig
+##
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_KEYBOARD_TEGRA=m
+
+##
+## file: drivers/input/misc/Kconfig
+##
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PM8941_PWRKEY=m
+CONFIG_INPUT_UINPUT=m
+CONFIG_INPUT_HISI_POWERKEY=m
+
+##
+## file: drivers/iommu/Kconfig
+##
+CONFIG_TEGRA_IOMMU_SMMU=y
+CONFIG_ARM_SMMU=y
+CONFIG_ARM_SMMU_V3=y
+
+##
+## file: drivers/mailbox/Kconfig
+##
+CONFIG_MAILBOX=y
+CONFIG_BCM2835_MBOX=y
+CONFIG_HI6220_MBOX=y
+CONFIG_XGENE_SLIMPRO_MBOX=m
+
+##
+## file: drivers/memory/tegra/Kconfig
+##
+CONFIG_TEGRA_MC=y
+
+##
+## file: drivers/mfd/Kconfig
+##
+CONFIG_MFD_CROS_EC=y
+CONFIG_MFD_CROS_EC_I2C=m
+CONFIG_MFD_CROS_EC_SPI=m
+CONFIG_MFD_HI655X_PMIC=m
+CONFIG_MFD_MAX77620=y
+CONFIG_MFD_QCOM_RPM=m
+CONFIG_MFD_SPMI_PMIC=m
+
+##
+## file: drivers/misc/Kconfig
+##
+CONFIG_QCOM_COINCELL=m
+
+##
+## file: drivers/misc/ti-st/Kconfig
+##
+CONFIG_TI_ST=m
+
+##
+## file: drivers/mmc/Kconfig
+##
+CONFIG_MMC=y
+
+##
+## file: drivers/mmc/host/Kconfig
+##
+CONFIG_MMC_ARMMMCI=m
+CONFIG_MMC_QCOM_DML=m
+CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_MMC_SDHCI_IPROC=m
+CONFIG_MMC_SDHCI_MSM=m
+CONFIG_MMC_SPI=m
+CONFIG_MMC_DW=m
+CONFIG_MMC_DW_K3=m
+
+##
+## file: drivers/mtd/spi-nor/Kconfig
+##
+CONFIG_SPI_HISI_SFC=m
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+CONFIG_FEALNX=m
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_NET_VENDOR_8390=y
+CONFIG_NE2K_PCI=m
+
+##
+## file: drivers/net/ethernet/adaptec/Kconfig
+##
+CONFIG_NET_VENDOR_ADAPTEC=y
+CONFIG_ADAPTEC_STARFIRE=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+CONFIG_AMD_XGBE=m
+
+##
+## file: drivers/net/ethernet/apm/xgene/Kconfig
+##
+CONFIG_NET_XGENE=m
+
+##
+## file: drivers/net/ethernet/cavium/Kconfig
+##
+CONFIG_NET_VENDOR_CAVIUM=y
+CONFIG_THUNDER_NIC_PF=m
+CONFIG_THUNDER_NIC_VF=m
+CONFIG_THUNDER_NIC_BGX=m
+CONFIG_THUNDER_NIC_RGX=m
+
+##
+## file: drivers/net/ethernet/dec/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_WINBOND_840=m
+CONFIG_DM9102=m
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+CONFIG_NET_VENDOR_DLINK=y
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+
+##
+## file: drivers/net/ethernet/hisilicon/Kconfig
+##
+CONFIG_NET_VENDOR_HISILICON=y
+CONFIG_HIX5HD2_GMAC=m
+CONFIG_HISI_FEMAC=m
+CONFIG_HIP04_ETH=m
+CONFIG_HNS=m
+CONFIG_HNS_DSAF=m
+CONFIG_HNS_ENET=m
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_NET_VENDOR_INTEL=y
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NET_VENDOR_NATSEMI=y
+CONFIG_NATSEMI=m
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_NET_VENDOR_SMSC=y
+CONFIG_SMC91X=m
+CONFIG_EPIC100=m
+CONFIG_SMSC911X=m
+
+##
+## file: drivers/net/ethernet/stmicro/stmmac/Kconfig
+##
+CONFIG_STMMAC_ETH=m
+CONFIG_STMMAC_PLATFORM=m
+CONFIG_DWMAC_GENERIC=m
+CONFIG_DWMAC_IPQ806X=m
+
+##
+## file: drivers/net/fddi/Kconfig
+##
+CONFIG_FDDI=y
+CONFIG_SKFP=m
+
+##
+## file: drivers/net/phy/Kconfig
+##
+CONFIG_MDIO_HISI_FEMAC=m
+CONFIG_MDIO_THUNDER=m
+CONFIG_MDIO_XGENE=m
+
+##
+## file: drivers/net/wireless/ath/wcn36xx/Kconfig
+##
+CONFIG_WCN36XX=m
+
+##
+## file: drivers/net/wireless/ti/Kconfig
+##
+CONFIG_WLAN_VENDOR_TI=y
+CONFIG_WILINK_PLATFORM_DATA=y
+
+##
+## file: drivers/net/wireless/ti/wl1251/Kconfig
+##
+CONFIG_WL1251=m
+CONFIG_WL1251_SPI=m
+CONFIG_WL1251_SDIO=m
+
+##
+## file: drivers/net/wireless/ti/wl12xx/Kconfig
+##
+CONFIG_WL12XX=m
+
+##
+## file: drivers/net/wireless/ti/wl18xx/Kconfig
+##
+CONFIG_WL18XX=m
+
+##
+## file: drivers/net/wireless/ti/wlcore/Kconfig
+##
+CONFIG_WLCORE=m
+CONFIG_WLCORE_SPI=m
+CONFIG_WLCORE_SDIO=m
+
+##
+## file: drivers/nvmem/Kconfig
+##
+CONFIG_QCOM_QFPROM=m
+
+##
+## file: drivers/pci/host/Kconfig
+##
+CONFIG_PCI_AARDVARK=y
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_PCI_XGENE=y
+CONFIG_PCI_HISI=y
+CONFIG_PCIE_QCOM=y
+CONFIG_PCI_HOST_THUNDER_PEM=y
+CONFIG_PCI_HOST_THUNDER_ECAM=y
+CONFIG_PCIE_ARMADA_8K=y
+
+##
+## file: drivers/phy/Kconfig
+##
+CONFIG_PHY_HI6220_USB=m
+CONFIG_PHY_QCOM_APQ8064_SATA=m
+CONFIG_PHY_QCOM_IPQ806X_SATA=m
+CONFIG_PHY_XGENE=m
+CONFIG_PHY_QCOM_UFS=m
+
+##
+## file: drivers/phy/tegra/Kconfig
+##
+CONFIG_PHY_TEGRA_XUSB=m
+
+##
+## file: drivers/pinctrl/Kconfig
+##
+CONFIG_PINCTRL_AMD=y
+CONFIG_PINCTRL_SINGLE=y
+CONFIG_PINCTRL_MAX77620=y
+
+##
+## file: drivers/pinctrl/qcom/Kconfig
+##
+CONFIG_PINCTRL_MSM8916=y
+CONFIG_PINCTRL_MSM8996=y
+CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
+CONFIG_PINCTRL_QCOM_SSBI_PMIC=y
+
+##
+## file: drivers/platform/chrome/Kconfig
+##
+CONFIG_CHROME_PLATFORMS=y
+CONFIG_CROS_KBD_LED_BACKLIGHT=m
+
+##
+## file: drivers/power/reset/Kconfig
+##
+CONFIG_POWER_RESET_HISI=y
+CONFIG_POWER_RESET_MSM=y
+CONFIG_POWER_RESET_VEXPRESS=y
+CONFIG_POWER_RESET_XGENE=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_POWER_RESET_SYSCON_POWEROFF=y
+
+##
+## file: drivers/power/supply/Kconfig
+##
+CONFIG_BATTERY_BQ27XXX=m
+CONFIG_CHARGER_QCOM_SMBB=m
+
+##
+## file: drivers/pwm/Kconfig
+##
+CONFIG_PWM=y
+CONFIG_PWM_BCM2835=m
+CONFIG_PWM_MESON=m
+CONFIG_PWM_TEGRA=m
+
+##
+## file: drivers/regulator/Kconfig
+##
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=m
+CONFIG_REGULATOR_HI655X=m
+CONFIG_REGULATOR_MAX77620=m
+CONFIG_REGULATOR_PWM=m
+CONFIG_REGULATOR_QCOM_RPM=m
+CONFIG_REGULATOR_QCOM_SMD_RPM=m
+CONFIG_REGULATOR_QCOM_SPMI=m
+
+##
+## file: drivers/remoteproc/Kconfig
+##
+CONFIG_QCOM_Q6V5_PIL=m
+#. We want to enable this but it currently results in a dependency loop!
+# CONFIG_QCOM_WCNSS_PIL is not set
+
+##
+## file: drivers/reset/Kconfig
+##
+CONFIG_RESET_CONTROLLER=y
+CONFIG_RESET_MESON=y
+
+##
+## file: drivers/reset/hisilicon/Kconfig
+##
+CONFIG_COMMON_RESET_HI6220=m
+
+##
+## file: drivers/rtc/Kconfig
+##
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_MAX77686=y
+CONFIG_RTC_DRV_EFI=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_RTC_DRV_PM8XXX=m
+CONFIG_RTC_DRV_TEGRA=y
+CONFIG_RTC_DRV_XGENE=y
+
+##
+## file: drivers/scsi/Kconfig
+##
+CONFIG_SCSI_DMX3191D=m
+
+##
+## file: drivers/scsi/hisi_sas/Kconfig
+##
+CONFIG_SCSI_HISI_SAS=m
+
+##
+## file: drivers/soc/bcm/Kconfig
+##
+CONFIG_RASPBERRYPI_POWER=y
+
+##
+## file: drivers/soc/qcom/Kconfig
+##
+CONFIG_QCOM_GSBI=m
+CONFIG_QCOM_SMEM=m
+CONFIG_QCOM_SMD=m
+CONFIG_QCOM_SMD_RPM=m
+CONFIG_QCOM_SMP2P=m
+CONFIG_QCOM_SMSM=m
+CONFIG_QCOM_WCNSS_CTRL=m
+
+##
+## file: drivers/soc/tegra/Kconfig
+##
+CONFIG_ARCH_TEGRA_132_SOC=y
+CONFIG_ARCH_TEGRA_210_SOC=y
+
+##
+## file: drivers/spi/Kconfig
+##
+CONFIG_SPI_BCM2835=m
+CONFIG_SPI_BCM2835AUX=m
+CONFIG_SPI_MESON_SPIFC=m
+CONFIG_SPI_QUP=m
+CONFIG_SPI_TEGRA114=m
+CONFIG_SPI_TEGRA20_SFLASH=m
+CONFIG_SPI_TEGRA20_SLINK=m
+CONFIG_SPI_THUNDERX=m
+
+##
+## file: drivers/spmi/Kconfig
+##
+CONFIG_SPMI=y
+CONFIG_SPMI_MSM_PMIC_ARB=y
+
+##
+## file: drivers/thermal/Kconfig
+##
+CONFIG_THERMAL=y
+CONFIG_CPU_THERMAL=y
+CONFIG_HISI_THERMAL=m
+CONFIG_QCOM_SPMI_TEMP_ALARM=m
+
+##
+## file: drivers/thermal/qcom/Kconfig
+##
+CONFIG_QCOM_TSENS=m
+
+##
+## file: drivers/thermal/tegra/Kconfig
+##
+CONFIG_TEGRA_SOCTHERM=y
+
+##
+## file: drivers/tty/serial/Kconfig
+##
+CONFIG_SERIAL_AMBA_PL010=y
+CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_MESON=y
+CONFIG_SERIAL_MESON_CONSOLE=y
+CONFIG_SERIAL_TEGRA=y
+CONFIG_SERIAL_MSM=y
+CONFIG_SERIAL_MSM_CONSOLE=y
+CONFIG_SERIAL_MVEBU_UART=y
+CONFIG_SERIAL_MVEBU_CONSOLE=y
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_DMA=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_BCM2835AUX=y
+CONFIG_SERIAL_8250_DW=y
+# CONFIG_SERIAL_8250_EM is not set
+CONFIG_SERIAL_OF_PLATFORM=y
+
+##
+## file: drivers/usb/chipidea/Kconfig
+##
+CONFIG_USB_CHIPIDEA=m
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+
+##
+## file: drivers/usb/dwc2/Kconfig
+##
+CONFIG_USB_DWC2=m
+## choice: DWC2 Mode Selection
+CONFIG_USB_DWC2_DUAL_ROLE=y
+## end choice
+
+##
+## file: drivers/usb/dwc3/Kconfig
+##
+CONFIG_USB_DWC3=m
+## choice: DWC3 Mode Selection
+CONFIG_USB_DWC3_DUAL_ROLE=y
+## end choice
+
+##
+## file: drivers/usb/gadget/Kconfig
+##
+CONFIG_USB_GADGET=m
+
+##
+## file: drivers/usb/host/Kconfig
+##
+#. xhci-platform apparently does not build as module, so xhci_hcd can't be either
+CONFIG_USB_XHCI_HCD=m
+CONFIG_USB_XHCI_PLATFORM=m
+CONFIG_USB_XHCI_TEGRA=m
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_MSM=m
+CONFIG_USB_EHCI_TEGRA=m
+CONFIG_USB_EHCI_HCD_PLATFORM=m
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_HCD_PLATFORM=m
+
+##
+## file: drivers/usb/misc/Kconfig
+##
+CONFIG_USB_HSIC_USB3503=m
+
+##
+## file: drivers/usb/phy/Kconfig
+##
+CONFIG_USB_MSM_OTG=m
+CONFIG_USB_QCOM_8X16_PHY=m
+
+##
+## file: drivers/video/backlight/Kconfig
+##
+CONFIG_BACKLIGHT_GENERIC=m
+CONFIG_BACKLIGHT_LP855X=m
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB_EFI=y
+
+##
+## file: drivers/virtio/Kconfig
+##
+CONFIG_VIRTIO_MMIO=m
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_TEGRA_WATCHDOG=m
+CONFIG_QCOM_WDT=m
+CONFIG_MESON_GXBB_WATCHDOG=m
+CONFIG_BCM2835_WDT=m
+
+##
+## file: fs/pstore/Kconfig
+##
+CONFIG_PSTORE=y
+
+##
+## file: net/bluetooth/Kconfig
+##
+CONFIG_BT_LEDS=y
+
+##
+## file: sound/pci/hda/Kconfig
+##
+CONFIG_SND_HDA_TEGRA=m
+
+##
+## file: sound/soc/Kconfig
+##
+CONFIG_SND_SOC=m
+
+##
+## file: sound/soc/bcm/Kconfig
+##
+CONFIG_SND_BCM2835_SOC_I2S=m
+
+##
+## file: sound/soc/qcom/Kconfig
+##
+CONFIG_SND_SOC_QCOM=m
+CONFIG_SND_SOC_APQ8016_SBC=m
+
+##
+## file: sound/soc/tegra/Kconfig
+##
+CONFIG_SND_SOC_TEGRA=m
+CONFIG_SND_SOC_TEGRA_RT5640=m
+CONFIG_SND_SOC_TEGRA_WM8753=m
+CONFIG_SND_SOC_TEGRA_WM8903=m
+CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
+CONFIG_SND_SOC_TEGRA_ALC5632=m
+CONFIG_SND_SOC_TEGRA_MAX98090=m
+CONFIG_SND_SOC_TEGRA_RT5677=m
+
diff --git a/config/arm64/defines b/config/arm64/defines
new file mode 100644 (file)
index 0000000..a50579a
--- /dev/null
@@ -0,0 +1,18 @@
+[base]
+kernel-arch: arm64
+featuresets:
+ none
+
+[build]
+debug-info: true
+image-file: arch/arm64/boot/Image
+vdso: true
+
+[image]
+install-stem: vmlinuz
+breaks: libmozjs185-1.0, libmozjs-24-0 (<< 24.2.0-5.1~)
+
+[arm64_description]
+hardware: 64-bit ARMv8 machines
+
+[arm64_image]
diff --git a/config/arm64/none/defines b/config/arm64/none/defines
new file mode 100644 (file)
index 0000000..fdea40c
--- /dev/null
@@ -0,0 +1,3 @@
+[base]
+flavours:
+ arm64
diff --git a/config/armel/config b/config/armel/config
new file mode 100644 (file)
index 0000000..afae7b1
--- /dev/null
@@ -0,0 +1,10 @@
+##
+## file: security/apparmor/Kconfig
+##
+# CONFIG_SECURITY_APPARMOR is not set
+
+##
+## file: security/tomoyo/Kconfig
+##
+# CONFIG_SECURITY_TOMOYO is not set
+
diff --git a/config/armel/config.marvell b/config/armel/config.marvell
new file mode 100644 (file)
index 0000000..c1ef082
--- /dev/null
@@ -0,0 +1,797 @@
+##
+## file: arch/Kconfig
+##
+# CONFIG_KPROBES is not set
+## choice: Stack Protector buffer overflow detection
+CONFIG_CC_STACKPROTECTOR_REGULAR=y
+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
+## end choice
+
+##
+## file: arch/arm/Kconfig
+##
+CONFIG_ARCH_MULTI_V5=y
+# CONFIG_ARCH_MULTI_V7 is not set
+CONFIG_PCI=y
+CONFIG_HIGHMEM=y
+CONFIG_UACCESS_WITH_MEMCPY=y
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_ARM_APPENDED_DTB=y
+CONFIG_ARM_ATAG_DTB_COMPAT=y
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+CONFIG_ATAGS_PROC=y
+CONFIG_VFP=y
+
+##
+## file: arch/arm/Kconfig.debug
+##
+## choice: Kernel low-level debugging port
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_LL_UART_8250=y
+## end choice
+#. Kirkwood (with new boot loader) and Orion both have an 8250 at
+#. physical address 0xf1012000.
+CONFIG_DEBUG_UART_PHYS=0xf1012000
+#. MVEBU is flexible about the virtual address (relying on
+#. debug_ll_io_init()) but Orion maps the 8250 as part of a larger
+#. block of registers.  So use the VA that Orion requires.
+CONFIG_DEBUG_UART_VIRT=0xfe012000
+
+##
+## file: arch/arm/mach-imx/Kconfig
+##
+# CONFIG_ARCH_MXC is not set
+
+##
+## file: arch/arm/mach-mvebu/Kconfig
+##
+CONFIG_ARCH_MVEBU=y
+CONFIG_MACH_KIRKWOOD=y
+
+##
+## file: arch/arm/mach-orion5x/Kconfig
+##
+CONFIG_ARCH_ORION5X=y
+CONFIG_MACH_DB88F5281=y
+CONFIG_MACH_RD88F5182=y
+CONFIG_MACH_RD88F5182_DT=y
+CONFIG_MACH_KUROBOX_PRO=y
+#. Only 1.5 MB flash available for kernel
+# CONFIG_MACH_DNS323 is not set
+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_NET2BIG=y
+CONFIG_MACH_MSS2_DT=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: block/Kconfig.iosched
+##
+CONFIG_IOSCHED_DEADLINE=m
+
+##
+## file: block/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: crypto/Kconfig
+##
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_SHA256=m
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_ATA=m
+CONFIG_SATA_AHCI=m
+# 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_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_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/cpuidle/Kconfig.arm
+##
+CONFIG_ARM_KIRKWOOD_CPUIDLE=y
+
+##
+## file: drivers/crypto/Kconfig
+##
+# CONFIG_CRYPTO_DEV_MV_CESA is not set
+CONFIG_CRYPTO_DEV_MARVELL_CESA=m
+
+##
+## file: drivers/dma/Kconfig
+##
+CONFIG_DMADEVICES=y
+CONFIG_MV_XOR=y
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+# CONFIG_DRM is not set
+
+##
+## file: drivers/gpu/vga/Kconfig
+##
+# CONFIG_VGA_ARB is not set
+
+##
+## file: drivers/hwmon/Kconfig
+##
+CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_G762=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_ATKBD is not set
+CONFIG_KEYBOARD_GPIO=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/isdn/Kconfig
+##
+CONFIG_ISDN=y
+CONFIG_ISDN_CAPI=m
+
+##
+## file: drivers/isdn/capi/Kconfig
+##
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+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_NS2=m
+CONFIG_LEDS_NETXBIG=m
+
+##
+## file: drivers/leds/trigger/Kconfig
+##
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+##
+## 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_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_MTD_OF_PARTS=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 D-Link DNS-323, Buffalo KuroBox-Pro, Buffalo Linkstation LS-GL / LS-WTGL, etc
+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
+
+##
+## file: drivers/mtd/maps/Kconfig
+##
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP_OF=y
+# 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=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_CAFE is not set
+CONFIG_MTD_NAND_ORION=y
+
+##
+## file: drivers/mtd/onenand/Kconfig
+##
+# CONFIG_MTD_ONENAND is not set
+
+##
+## file: drivers/mtd/spi-nor/Kconfig
+##
+CONFIG_MTD_SPI_NOR=m
+
+##
+## file: drivers/net/arcnet/Kconfig
+##
+# CONFIG_ARCNET is not set
+
+##
+## file: drivers/net/ethernet/atheros/Kconfig
+##
+# CONFIG_ATL1 is not set
+
+##
+## file: drivers/net/ethernet/broadcom/Kconfig
+##
+# CONFIG_BNX2 is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2X is not set
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+# CONFIG_DL2K is not set
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+# CONFIG_E1000 is not set
+# CONFIG_E1000E is not set
+# CONFIG_IGB is not set
+
+##
+## file: drivers/net/ethernet/marvell/Kconfig
+##
+CONFIG_MV643XX_ETH=m
+CONFIG_MVMDIO=m
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+# CONFIG_NS83820 is not set
+
+##
+## file: drivers/net/ethernet/packetengines/Kconfig
+##
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+
+##
+## file: drivers/net/ethernet/qlogic/Kconfig
+##
+# CONFIG_QLA3XXX is not set
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+# CONFIG_R8169 is not set
+
+##
+## file: drivers/net/ethernet/sis/Kconfig
+##
+# CONFIG_SIS190 is not set
+
+##
+## file: drivers/net/ethernet/via/Kconfig
+##
+# CONFIG_VIA_VELOCITY is not set
+
+##
+## file: drivers/net/wireless/marvell/mwifiex/Kconfig
+##
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+
+##
+## file: drivers/pci/host/Kconfig
+##
+CONFIG_PCI_MVEBU=y
+
+##
+## file: drivers/pci/pcie/Kconfig
+##
+# CONFIG_PCIE_DPC is not set
+# CONFIG_PCIE_PTM is not set
+
+##
+## file: drivers/pcmcia/Kconfig
+##
+# CONFIG_PCCARD is not set
+
+##
+## file: drivers/power/reset/Kconfig
+##
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_RESET_QNAP=y
+CONFIG_POWER_RESET_RESTART=y
+
+##
+## file: drivers/regulator/Kconfig
+##
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+
+##
+## 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
+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_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_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_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/thermal/Kconfig
+##
+CONFIG_KIRKWOOD_THERMAL=m
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_DW is not set
+CONFIG_SERIAL_OF_PLATFORM=y
+
+##
+## 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_HCD_ORION=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/console/Kconfig
+##
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_FRAMEBUFFER_CONSOLE=m
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB=m
+
+##
+## file: drivers/virtio/Kconfig
+##
+# CONFIG_VIRTIO_PCI is not set
+# CONFIG_VIRTIO_BALLOON is not set
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_ORION_WATCHDOG=m
+
+##
+## file: fs/Kconfig
+##
+# CONFIG_FS_DAX is not set
+
+##
+## file: fs/notify/fanotify/Kconfig
+##
+# CONFIG_FANOTIFY_ACCESS_PERMISSIONS is not set
+
+##
+## file: init/Kconfig
+##
+#. Saves about 7K
+# CONFIG_MEMCG is not set
+# CONFIG_CFS_BANDWIDTH is not set
+# CONFIG_CHECKPOINT_RESTORE is not set
+## choice: Compiler optimization level
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+## end choice
+# CONFIG_USERFAULTFD is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MODULE_SIG is not set
+
+##
+## file: kernel/power/Kconfig
+##
+# CONFIG_SUSPEND is not set
+# CONFIG_HIBERNATION is not set
+# CONFIG_PM is not set
+
+##
+## file: kernel/trace/Kconfig
+##
+# CONFIG_FUNCTION_GRAPH_TRACER is not set
+# CONFIG_FTRACE_SYSCALLS is not set
+# CONFIG_STACK_TRACER is not set
+
+##
+## file: lib/Kconfig.debug
+##
+# CONFIG_SCHEDSTATS 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
+#. Saves about 7K
+# CONFIG_COMPACTION is not set
+# CONFIG_KSM is not set
+
+##
+## file: mm/Kconfig.debug
+##
+# CONFIG_PAGE_EXTENSION is not set
+# CONFIG_PAGE_POISONING is not set
+
+##
+## file: net/Kconfig
+##
+#. Saves about 3K
+# CONFIG_BPF_JIT is not set
+# CONFIG_LWTUNNEL is not set
+
+##
+## 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/ipv6/Kconfig
+##
+CONFIG_IPV6=m
+
+##
+## file: net/l3mdev/Kconfig
+##
+# CONFIG_NET_L3_MASTER_DEV is not set
+
+##
+## file: net/mpls/Kconfig
+##
+# CONFIG_NET_MPLS_GSO is not set
+
+##
+## file: security/integrity/ima/Kconfig
+##
+# CONFIG_IMA is not set
+
+##
+## file: sound/soc/Kconfig
+##
+CONFIG_SND_SOC=m
+
+##
+## file: sound/soc/codecs/Kconfig
+##
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_ALC5623=m
+CONFIG_SND_SOC_CS42L51_I2C=m
+
+##
+## file: sound/soc/generic/Kconfig
+##
+CONFIG_SND_SIMPLE_CARD=m
+
+##
+## file: sound/soc/kirkwood/Kconfig
+##
+CONFIG_SND_KIRKWOOD_SOC=m
+
+##
+## file: usr/Kconfig
+##
+# CONFIG_RD_LZO is not set
+# CONFIG_RD_LZ4 is not set
+
diff --git a/config/armel/defines b/config/armel/defines
new file mode 100644 (file)
index 0000000..60ced19
--- /dev/null
@@ -0,0 +1,34 @@
+[base]
+flavours:
+ marvell
+kernel-arch: arm
+
+[build]
+image-file: arch/arm/boot/zImage
+# Signature verification disabled to save on code size.  This should
+# apply only to marvell, but we would then need to build udebs only for
+# marvell and we don't have a way to do that.
+signed-modules: false
+
+[image]
+install-stem: vmlinuz
+
+[relations]
+headers%gcc-6: linux-compiler-gcc-6-arm
+
+[marvell_description]
+hardware: Marvell Kirkwood/Orion
+hardware-long: Marvell Kirkwood based systems (SheevaPlug, QNAP TS-119/TS-219, etc)
+ and Orion 5181, 5182 and 5281 based systems (QNAP TS-109/TS-209, etc)
+
+[marvell_image]
+recommends: u-boot-tools
+## Maximum kernel size for supported devices (64 bytes is the u-boot header)
+# SheevaPlug: 4194304 - 64 = 4194240
+# QNAP TS-119/TS-219: 2097152 - 64 = 2097088
+# D-Link DNS-323: 1572864 - 8 - 64 = 1572792 (too small, no longer supported)
+# HP Media Vault mv2120: 2097152 - 8 - 64 = 2097080
+# QNAP TS-109/TS-209 & TS-409: 2097152 - 8 - 64 = 2097080
+check-size: 2097080
+check-size-with-dtb: true
+breaks: flash-kernel (<< 3.57~)
diff --git a/config/armhf/config b/config/armhf/config
new file mode 100644 (file)
index 0000000..2fd332c
--- /dev/null
@@ -0,0 +1,1317 @@
+##
+## file: arch/arm/Kconfig
+##
+## choice: ARM system type
+CONFIG_ARCH_MULTIPLATFORM=y
+## end choice
+# CONFIG_ARCH_MULTI_V6 is not set
+CONFIG_ARCH_MULTI_V7=y
+CONFIG_ARCH_VIRT=y
+CONFIG_ARM_ERRATA_430973=y
+CONFIG_ARM_ERRATA_643719=y
+CONFIG_ARM_ERRATA_754327=y
+CONFIG_ARM_ERRATA_773022=y
+CONFIG_PCI=y
+CONFIG_SMP=y
+CONFIG_SMP_ON_UP=y
+CONFIG_MCPM=y
+CONFIG_NR_CPUS=8
+CONFIG_HIGHMEM=y
+CONFIG_XEN=y
+CONFIG_ARM_APPENDED_DTB=y
+CONFIG_ARM_ATAG_DTB_COMPAT=y
+## choice: Kernel command line type
+CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER=y
+# CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND is not set
+## end choice
+CONFIG_ATAGS_PROC=y
+CONFIG_EFI=y
+#. Enable floating point unit
+CONFIG_VFP=y
+CONFIG_NEON=y
+
+##
+## file: arch/arm/Kconfig.debug
+##
+#. DEBUG_LL is incompatible with multiplatform
+# CONFIG_DEBUG_LL is not set
+
+##
+## file: arch/arm/mach-bcm/Kconfig
+##
+CONFIG_ARCH_BCM=y
+CONFIG_ARCH_BCM2835=y
+
+##
+## file: arch/arm/mach-exynos/Kconfig
+##
+CONFIG_ARCH_EXYNOS=y
+# CONFIG_ARCH_EXYNOS3 is not set
+CONFIG_ARCH_EXYNOS4=y
+CONFIG_ARCH_EXYNOS5=y
+CONFIG_EXYNOS5420_MCPM=y
+
+##
+## file: arch/arm/mach-highbank/Kconfig
+##
+CONFIG_ARCH_HIGHBANK=y
+
+##
+## file: arch/arm/mach-imx/Kconfig
+##
+CONFIG_ARCH_MXC=y
+CONFIG_SOC_IMX51=y
+CONFIG_SOC_IMX53=y
+CONFIG_SOC_IMX6Q=y
+
+##
+## file: arch/arm/mach-mvebu/Kconfig
+##
+CONFIG_ARCH_MVEBU=y
+CONFIG_MACH_ARMADA_370=y
+CONFIG_MACH_ARMADA_375=y
+CONFIG_MACH_ARMADA_38X=y
+CONFIG_MACH_ARMADA_39X=y
+CONFIG_MACH_ARMADA_XP=y
+
+##
+## file: arch/arm/mach-omap2/Kconfig
+##
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+CONFIG_ARCH_OMAP4=y
+CONFIG_SOC_OMAP5=y
+CONFIG_SOC_AM33XX=y
+CONFIG_SOC_DRA7XX=y
+CONFIG_ARCH_OMAP2PLUS_TYPICAL=y
+CONFIG_SOC_OMAP3430=y
+CONFIG_SOC_TI81XX=y
+
+##
+## file: arch/arm/mach-rockchip/Kconfig
+##
+CONFIG_ARCH_ROCKCHIP=y
+
+##
+## file: arch/arm/mach-socfpga/Kconfig
+##
+CONFIG_ARCH_SOCFPGA=y
+
+##
+## file: arch/arm/mach-sunxi/Kconfig
+##
+CONFIG_ARCH_SUNXI=y
+
+##
+## file: arch/arm/mach-tegra/Kconfig
+##
+CONFIG_ARCH_TEGRA=y
+
+##
+## file: arch/arm/mach-vexpress/Kconfig
+##
+CONFIG_ARCH_VEXPRESS=y
+CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
+
+##
+## file: arch/arm/mach-vt8500/Kconfig
+##
+CONFIG_ARCH_WM8850=y
+
+##
+## file: arch/arm/mm/Kconfig
+##
+CONFIG_ARM_THUMBEE=y
+
+##
+## file: arch/arm/plat-omap/Kconfig
+##
+CONFIG_POWER_AVS_OMAP=y
+CONFIG_POWER_AVS_OMAP_CLASS3=y
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_MUX=y
+# CONFIG_OMAP_MUX_DEBUG is not set
+CONFIG_OMAP_MUX_WARNINGS=y
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set
+CONFIG_OMAP_DM_TIMER=y
+CONFIG_OMAP_SERIAL_WAKE=y
+## choice: OMAP PM layer selection
+CONFIG_OMAP_PM_NOOP=y
+## end choice
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_SATA_AHCI_PLATFORM=m
+CONFIG_AHCI_IMX=m
+CONFIG_AHCI_MVEBU=m
+CONFIG_AHCI_SUNXI=m
+CONFIG_AHCI_TEGRA=m
+CONFIG_SATA_HIGHBANK=m
+CONFIG_PATA_IMX=m
+CONFIG_PATA_PLATFORM=m
+CONFIG_PATA_OF_PLATFORM=m
+
+##
+## file: drivers/base/Kconfig
+##
+CONFIG_DMA_CMA=y
+
+##
+## file: drivers/bluetooth/Kconfig
+##
+CONFIG_BT_WILINK=m
+
+##
+## file: drivers/bus/Kconfig
+##
+CONFIG_OMAP_INTERCONNECT=m
+CONFIG_OMAP_OCP2SCP=m
+
+##
+## file: drivers/char/hw_random/Kconfig
+##
+CONFIG_HW_RANDOM_BCM2835=m
+CONFIG_HW_RANDOM_OMAP=m
+
+##
+## file: drivers/clk/Kconfig
+##
+CONFIG_COMMON_CLK_MAX77686=m
+CONFIG_COMMON_CLK_RK808=m
+CONFIG_COMMON_CLK_S2MPS11=m
+CONFIG_CLK_TWL6040=m
+
+##
+## file: drivers/cpufreq/Kconfig
+##
+CONFIG_CPUFREQ_DT=m
+
+##
+## file: drivers/cpufreq/Kconfig.arm
+##
+CONFIG_ARM_IMX6Q_CPUFREQ=m
+CONFIG_ARM_TEGRA20_CPUFREQ=y
+
+##
+## file: drivers/cpuidle/Kconfig.arm
+##
+CONFIG_ARM_EXYNOS_CPUIDLE=y
+
+##
+## file: drivers/crypto/Kconfig
+##
+# CONFIG_CRYPTO_DEV_MV_CESA is not set
+CONFIG_CRYPTO_DEV_MARVELL_CESA=m
+CONFIG_CRYPTO_DEV_OMAP_SHAM=m
+CONFIG_CRYPTO_DEV_OMAP_AES=m
+CONFIG_CRYPTO_DEV_SUN4I_SS=m
+
+##
+## file: drivers/devfreq/Kconfig
+##
+CONFIG_PM_DEVFREQ=y
+CONFIG_ARM_TEGRA_DEVFREQ=m
+
+##
+## file: drivers/dma/Kconfig
+##
+CONFIG_DMADEVICES=y
+CONFIG_AMBA_PL08X=y
+CONFIG_DMA_BCM2835=y
+CONFIG_DMA_OMAP=y
+CONFIG_DMA_SUN6I=m
+CONFIG_IMX_DMA=y
+CONFIG_IMX_SDMA=y
+CONFIG_MV_XOR=y
+CONFIG_MXS_DMA=y
+CONFIG_PL330_DMA=y
+CONFIG_TEGRA20_APB_DMA=y
+CONFIG_TI_CPPI41=m
+CONFIG_TI_EDMA=y
+
+##
+## file: drivers/extcon/Kconfig
+##
+CONFIG_EXTCON=m
+CONFIG_EXTCON_PALMAS=m
+CONFIG_EXTCON_USB_GPIO=m
+
+##
+## file: drivers/firmware/Kconfig
+##
+CONFIG_RASPBERRYPI_FIRMWARE=y
+
+##
+## file: drivers/gpio/Kconfig
+##
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_GENERIC_PLATFORM=m
+CONFIG_GPIO_PCA953X=m
+CONFIG_GPIO_PCF857X=m
+CONFIG_GPIO_DA9052=m
+CONFIG_GPIO_PALMAS=y
+CONFIG_GPIO_TWL4030=y
+CONFIG_GPIO_TWL6040=y
+CONFIG_GPIO_MCP23S08=m
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+CONFIG_DRM=m
+
+##
+## file: drivers/gpu/drm/etnaviv/Kconfig
+##
+CONFIG_DRM_ETNAVIV=m
+
+##
+## file: drivers/gpu/drm/exynos/Kconfig
+##
+CONFIG_DRM_EXYNOS=m
+CONFIG_DRM_EXYNOS_FIMD=y
+CONFIG_DRM_EXYNOS_MIXER=y
+CONFIG_DRM_EXYNOS_DSI=y
+CONFIG_DRM_EXYNOS_DP=y
+CONFIG_DRM_EXYNOS_HDMI=y
+
+##
+## file: drivers/gpu/drm/i2c/Kconfig
+##
+CONFIG_DRM_I2C_NXP_TDA998X=m
+
+##
+## file: drivers/gpu/drm/imx/Kconfig
+##
+CONFIG_DRM_IMX=m
+CONFIG_DRM_IMX_LDB=m
+CONFIG_DRM_IMX_HDMI=m
+
+##
+## file: drivers/gpu/drm/omapdrm/Kconfig
+##
+CONFIG_DRM_OMAP=m
+
+##
+## file: drivers/gpu/drm/omapdrm/displays/Kconfig
+##
+CONFIG_DRM_OMAP_ENCODER_TPD12S015=m
+CONFIG_DRM_OMAP_CONNECTOR_HDMI=m
+CONFIG_DRM_OMAP_CONNECTOR_ANALOG_TV=m
+CONFIG_DRM_OMAP_PANEL_SONY_ACX565AKM=m
+CONFIG_DRM_OMAP_PANEL_TPO_TD028TTEC1=m
+CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m
+
+##
+## file: drivers/gpu/drm/omapdrm/dss/Kconfig
+##
+CONFIG_OMAP2_DSS=m
+CONFIG_OMAP2_DSS_VENC=y
+CONFIG_OMAP4_DSS_HDMI=y
+CONFIG_OMAP5_DSS_HDMI=y
+CONFIG_OMAP2_DSS_SDI=y
+CONFIG_OMAP2_DSS_DSI=y
+
+##
+## file: drivers/gpu/drm/panel/Kconfig
+##
+CONFIG_DRM_PANEL_SIMPLE=m
+
+##
+## file: drivers/gpu/drm/rockchip/Kconfig
+##
+CONFIG_DRM_ROCKCHIP=m
+CONFIG_ROCKCHIP_ANALOGIX_DP=m
+CONFIG_ROCKCHIP_DW_HDMI=m
+CONFIG_ROCKCHIP_DW_MIPI_DSI=m
+
+##
+## file: drivers/gpu/drm/tegra/Kconfig
+##
+CONFIG_DRM_TEGRA=m
+# CONFIG_DRM_TEGRA_DEBUG is not set
+CONFIG_DRM_TEGRA_STAGING=y
+
+##
+## file: drivers/gpu/drm/tilcdc/Kconfig
+##
+CONFIG_DRM_TILCDC=m
+
+##
+## file: drivers/gpu/drm/vc4/Kconfig
+##
+CONFIG_DRM_VC4=m
+
+##
+## file: drivers/gpu/host1x/Kconfig
+##
+CONFIG_TEGRA_HOST1X=m
+CONFIG_TEGRA_HOST1X_FIREWALL=y
+
+##
+## file: drivers/gpu/ipu-v3/Kconfig
+##
+CONFIG_IMX_IPUV3_CORE=m
+
+##
+## file: drivers/hsi/Kconfig
+##
+CONFIG_HSI=m
+
+##
+## file: drivers/hsi/clients/Kconfig
+##
+CONFIG_NOKIA_MODEM=m
+CONFIG_CMT_SPEECH=m
+CONFIG_SSI_PROTOCOL=m
+
+##
+## file: drivers/hsi/controllers/Kconfig
+##
+CONFIG_OMAP_SSI=m
+
+##
+## file: drivers/hwmon/Kconfig
+##
+CONFIG_SENSORS_G762=m
+CONFIG_SENSORS_GPIO_FAN=m
+CONFIG_SENSORS_PWM_FAN=m
+CONFIG_SENSORS_TWL4030_MADC=m
+
+##
+## file: drivers/hwspinlock/Kconfig
+##
+CONFIG_HWSPINLOCK_OMAP=m
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C_MUX=m
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+CONFIG_I2C_BCM2835=m
+CONFIG_I2C_EXYNOS5=m
+CONFIG_I2C_GPIO=y
+CONFIG_I2C_IMX=m
+CONFIG_I2C_MV64XXX=m
+CONFIG_I2C_OMAP=y
+CONFIG_I2C_RK3X=m
+CONFIG_I2C_S3C2410=y
+CONFIG_I2C_SUN6I_P2WI=m
+CONFIG_I2C_TEGRA=y
+CONFIG_I2C_VERSATILE=m
+CONFIG_I2C_CROS_EC_TUNNEL=m
+
+##
+## file: drivers/i2c/muxes/Kconfig
+##
+CONFIG_I2C_ARB_GPIO_CHALLENGE=m
+CONFIG_I2C_MUX_PCA954x=m
+
+##
+## file: drivers/iio/Kconfig
+##
+CONFIG_IIO=m
+
+##
+## file: drivers/iio/accel/Kconfig
+##
+CONFIG_IIO_ST_ACCEL_3AXIS=m
+CONFIG_MMA8452=m
+
+##
+## file: drivers/iio/adc/Kconfig
+##
+CONFIG_EXYNOS_ADC=m
+CONFIG_ROCKCHIP_SARADC=m
+CONFIG_TI_AM335X_ADC=m
+CONFIG_TWL4030_MADC=m
+
+##
+## file: drivers/iio/light/Kconfig
+##
+CONFIG_SENSORS_TSL2563=m
+
+##
+## file: drivers/input/keyboard/Kconfig
+##
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_IMX=m
+CONFIG_KEYBOARD_TEGRA=m
+CONFIG_KEYBOARD_SUN4I_LRADC=m
+CONFIG_KEYBOARD_OMAP4=m
+CONFIG_KEYBOARD_TWL4030=m
+CONFIG_KEYBOARD_CROS_EC=m
+
+##
+## file: drivers/input/misc/Kconfig
+##
+CONFIG_INPUT_MMA8450=m
+CONFIG_INPUT_AXP20X_PEK=m
+CONFIG_INPUT_TWL4030_PWRBUTTON=m
+CONFIG_INPUT_TWL4030_VIBRA=m
+CONFIG_INPUT_TWL6040_VIBRA=m
+
+##
+## file: drivers/input/mouse/Kconfig
+##
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+CONFIG_MOUSE_ELAN_I2C=m
+
+##
+## file: drivers/input/serio/Kconfig
+##
+CONFIG_SERIO_AMBAKMI=m
+CONFIG_SERIO_SUN4I_PS2=m
+
+##
+## file: drivers/input/touchscreen/Kconfig
+##
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
+CONFIG_TOUCHSCREEN_TSC2005=m
+CONFIG_TOUCHSCREEN_STMPE=m
+CONFIG_TOUCHSCREEN_SUN4I=m
+
+##
+## file: drivers/iommu/Kconfig
+##
+CONFIG_OMAP_IOMMU=y
+# CONFIG_OMAP_IOMMU_DEBUG is not set
+CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_TEGRA_IOMMU_SMMU=y
+
+##
+## file: drivers/leds/Kconfig
+##
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_LP5523=m
+CONFIG_LEDS_DA9052=m
+CONFIG_LEDS_PWM=m
+CONFIG_LEDS_TCA6507=m
+
+##
+## file: drivers/leds/trigger/Kconfig
+##
+CONFIG_LEDS_TRIGGER_GPIO=m
+
+##
+## file: drivers/mailbox/Kconfig
+##
+CONFIG_MAILBOX=y
+CONFIG_OMAP2PLUS_MBOX=y
+CONFIG_OMAP_MBOX_KFIFO_SIZE=256
+CONFIG_BCM2835_MBOX=y
+
+##
+## file: drivers/media/Kconfig
+##
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+
+##
+## file: drivers/media/platform/Kconfig
+##
+CONFIG_VIDEO_OMAP3=m
+CONFIG_VIDEO_TI_VPE=m
+
+##
+## file: drivers/media/platform/omap/Kconfig
+##
+CONFIG_VIDEO_OMAP2_VOUT=m
+
+##
+## file: drivers/media/radio/Kconfig
+##
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_RADIO_SI4713=m
+
+##
+## file: drivers/media/radio/si4713/Kconfig
+##
+CONFIG_I2C_SI4713=m
+
+##
+## file: drivers/media/radio/wl128x/Kconfig
+##
+CONFIG_RADIO_WL128X=m
+
+##
+## file: drivers/media/rc/Kconfig
+##
+CONFIG_IR_GPIO_CIR=m
+CONFIG_IR_SUNXI=m
+
+##
+## file: drivers/memory/Kconfig
+##
+CONFIG_TI_EMIF=m
+
+##
+## file: drivers/memory/tegra/Kconfig
+##
+CONFIG_TEGRA_MC=y
+CONFIG_TEGRA124_EMC=y
+
+##
+## file: drivers/mfd/Kconfig
+##
+CONFIG_MFD_AS3722=y
+CONFIG_MFD_AXP20X_I2C=y
+CONFIG_MFD_CROS_EC=m
+CONFIG_MFD_CROS_EC_SPI=m
+CONFIG_MFD_DA9052_SPI=y
+CONFIG_MFD_DA9052_I2C=y
+CONFIG_MFD_MC13XXX_SPI=m
+CONFIG_MFD_MC13XXX_I2C=m
+CONFIG_MFD_MAX77686=y
+CONFIG_MFD_RK808=y
+CONFIG_MFD_SEC_CORE=y
+CONFIG_MFD_STMPE=y
+CONFIG_MFD_TI_AM335X_TSCADC=m
+CONFIG_MFD_PALMAS=y
+CONFIG_TWL4030_CORE=y
+CONFIG_TWL6040_CORE=y
+
+##
+## file: drivers/misc/Kconfig
+##
+CONFIG_ARM_CHARLCD=y
+
+##
+## file: drivers/misc/ti-st/Kconfig
+##
+CONFIG_TI_ST=m
+
+##
+## file: drivers/mmc/Kconfig
+##
+CONFIG_MMC=y
+
+##
+## file: drivers/mmc/host/Kconfig
+##
+CONFIG_MMC_ARMMMCI=m
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_ESDHC_IMX=m
+CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_MMC_SDHCI_S3C=m
+CONFIG_MMC_SDHCI_PXAV3=m
+CONFIG_MMC_SDHCI_IPROC=m
+CONFIG_MMC_OMAP=m
+CONFIG_MMC_OMAP_HS=m
+CONFIG_MMC_MVSDIO=m
+CONFIG_MMC_SPI=m
+CONFIG_MMC_DW=m
+CONFIG_MMC_DW_EXYNOS=m
+CONFIG_MMC_DW_ROCKCHIP=m
+CONFIG_MMC_WMT=m
+CONFIG_MMC_SUNXI=m
+
+##
+## file: drivers/mtd/Kconfig
+##
+CONFIG_MTD=y
+
+##
+## file: drivers/mtd/nand/Kconfig
+##
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_OMAP2=m
+CONFIG_MTD_NAND_PXA3xx=m
+CONFIG_MTD_NAND_GPMI_NAND=m
+CONFIG_MTD_NAND_ORION=m
+CONFIG_MTD_NAND_MXC=m
+CONFIG_MTD_NAND_SUNXI=m
+
+##
+## file: drivers/mtd/onenand/Kconfig
+##
+CONFIG_MTD_ONENAND=y
+CONFIG_MTD_ONENAND_OMAP2=m
+
+##
+## file: drivers/net/can/Kconfig
+##
+CONFIG_CAN_SUN4I=m
+
+##
+## file: drivers/net/dsa/Kconfig
+##
+CONFIG_NET_DSA_MV88E6060=m
+CONFIG_NET_DSA_BCM_SF2=m
+
+##
+## file: drivers/net/dsa/b53/Kconfig
+##
+CONFIG_B53=m
+CONFIG_B53_MDIO_DRIVER=m
+
+##
+## file: drivers/net/dsa/mv88e6xxx/Kconfig
+##
+CONFIG_NET_DSA_MV88E6XXX=m
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+CONFIG_FEALNX=m
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_TYPHOON=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_NET_VENDOR_8390=y
+CONFIG_NE2K_PCI=m
+
+##
+## file: drivers/net/ethernet/adaptec/Kconfig
+##
+CONFIG_NET_VENDOR_ADAPTEC=y
+CONFIG_ADAPTEC_STARFIRE=m
+
+##
+## file: drivers/net/ethernet/allwinner/Kconfig
+##
+CONFIG_SUN4I_EMAC=m
+
+##
+## file: drivers/net/ethernet/arc/Kconfig
+##
+CONFIG_EMAC_ROCKCHIP=m
+
+##
+## file: drivers/net/ethernet/calxeda/Kconfig
+##
+CONFIG_NET_CALXEDA_XGMAC=m
+
+##
+## file: drivers/net/ethernet/dec/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_WINBOND_840=m
+CONFIG_DM9102=m
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+CONFIG_NET_VENDOR_DLINK=y
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_NET_VENDOR_INTEL=y
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/marvell/Kconfig
+##
+CONFIG_MVMDIO=m
+CONFIG_MVNETA=m
+CONFIG_MVPP2=m
+
+##
+## file: drivers/net/ethernet/microchip/Kconfig
+##
+CONFIG_ENC28J60=m
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NET_VENDOR_NATSEMI=y
+CONFIG_NATSEMI=m
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_NET_VENDOR_SMSC=y
+CONFIG_SMC91X=m
+CONFIG_EPIC100=m
+CONFIG_SMC911X=m
+CONFIG_SMSC911X=m
+
+##
+## file: drivers/net/ethernet/stmicro/stmmac/Kconfig
+##
+CONFIG_STMMAC_ETH=m
+CONFIG_DWMAC_GENERIC=m
+CONFIG_DWMAC_ROCKCHIP=m
+CONFIG_DWMAC_SOCFPGA=m
+CONFIG_DWMAC_SUNXI=m
+
+##
+## file: drivers/net/ethernet/ti/Kconfig
+##
+CONFIG_TI_DAVINCI_EMAC=m
+CONFIG_TI_DAVINCI_MDIO=m
+CONFIG_TI_DAVINCI_CPDMA=m
+CONFIG_TI_CPSW=m
+
+##
+## file: drivers/net/fddi/Kconfig
+##
+CONFIG_FDDI=y
+CONFIG_SKFP=m
+
+##
+## 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: drivers/net/phy/Kconfig
+##
+CONFIG_MDIO_SUN4I=y
+
+##
+## file: drivers/net/wireless/broadcom/brcm80211/Kconfig
+##
+CONFIG_BRCMFMAC=m
+CONFIG_BRCMFMAC_SDIO=y
+
+##
+## file: drivers/net/wireless/ti/Kconfig
+##
+CONFIG_WLAN_VENDOR_TI=y
+CONFIG_WILINK_PLATFORM_DATA=y
+
+##
+## file: drivers/net/wireless/ti/wl1251/Kconfig
+##
+CONFIG_WL1251=m
+CONFIG_WL1251_SPI=m
+CONFIG_WL1251_SDIO=m
+
+##
+## file: drivers/net/wireless/ti/wl12xx/Kconfig
+##
+CONFIG_WL12XX=m
+
+##
+## file: drivers/net/wireless/ti/wl18xx/Kconfig
+##
+CONFIG_WL18XX=m
+
+##
+## file: drivers/net/wireless/ti/wlcore/Kconfig
+##
+CONFIG_WLCORE_SPI=m
+CONFIG_WLCORE_SDIO=m
+
+##
+## file: drivers/nvmem/Kconfig
+##
+CONFIG_ROCKCHIP_EFUSE=m
+CONFIG_NVMEM_SUNXI_SID=m
+
+##
+## file: drivers/pci/host/Kconfig
+##
+CONFIG_PCI_DRA7XX=y
+CONFIG_PCI_MVEBU=y
+CONFIG_PCI_IMX6=y
+CONFIG_PCI_TEGRA=y
+
+##
+## file: drivers/phy/Kconfig
+##
+CONFIG_PHY_EXYNOS_MIPI_VIDEO=m
+CONFIG_OMAP_CONTROL_PHY=m
+CONFIG_OMAP_USB2=m
+CONFIG_TI_PIPE3=y
+CONFIG_TWL4030_USB=m
+CONFIG_PHY_EXYNOS_DP_VIDEO=m
+CONFIG_PHY_EXYNOS5250_SATA=m
+CONFIG_PHY_SUN4I_USB=m
+CONFIG_PHY_SUN9I_USB=m
+CONFIG_PHY_SAMSUNG_USB2=m
+CONFIG_PHY_EXYNOS5_USBDRD=m
+CONFIG_PHY_ROCKCHIP_USB=m
+CONFIG_PHY_ROCKCHIP_EMMC=m
+CONFIG_PHY_ROCKCHIP_DP=m
+
+##
+## file: drivers/phy/tegra/Kconfig
+##
+CONFIG_PHY_TEGRA_XUSB=m
+
+##
+## file: drivers/pinctrl/Kconfig
+##
+CONFIG_PINCTRL_AS3722=y
+CONFIG_PINCTRL_SINGLE=y
+CONFIG_PINCTRL_PALMAS=y
+
+##
+## file: drivers/pinctrl/vt8500/Kconfig
+##
+CONFIG_PINCTRL_WM8850=y
+
+##
+## file: drivers/power/avs/Kconfig
+##
+CONFIG_POWER_AVS=y
+CONFIG_ROCKCHIP_IODOMAIN=m
+
+##
+## file: drivers/power/reset/Kconfig
+##
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_AS3722=y
+CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_RESET_GPIO_RESTART=y
+CONFIG_POWER_RESET_RESTART=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_POWER_RESET_SYSCON_POWEROFF=y
+
+##
+## file: drivers/power/supply/Kconfig
+##
+CONFIG_BATTERY_SBS=m
+CONFIG_BATTERY_BQ27XXX=m
+CONFIG_BATTERY_TWL4030_MADC=m
+CONFIG_BATTERY_RX51=m
+CONFIG_CHARGER_ISP1704=m
+CONFIG_CHARGER_TWL4030=m
+CONFIG_CHARGER_GPIO=m
+CONFIG_CHARGER_BQ2415X=m
+CONFIG_AXP20X_POWER=m
+
+##
+## file: drivers/pwm/Kconfig
+##
+CONFIG_PWM=y
+CONFIG_PWM_BCM2835=m
+CONFIG_PWM_IMX=m
+CONFIG_PWM_OMAP_DMTIMER=m
+CONFIG_PWM_ROCKCHIP=m
+CONFIG_PWM_SAMSUNG=m
+CONFIG_PWM_SUN4I=m
+CONFIG_PWM_TEGRA=m
+CONFIG_PWM_TIECAP=m
+CONFIG_PWM_TIEHRPWM=m
+CONFIG_PWM_TWL=m
+CONFIG_PWM_TWL_LED=m
+CONFIG_PWM_VT8500=m
+
+##
+## file: drivers/regulator/Kconfig
+##
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_ACT8865=m
+CONFIG_REGULATOR_ANATOP=m
+CONFIG_REGULATOR_AS3722=y
+CONFIG_REGULATOR_AXP20X=m
+CONFIG_REGULATOR_DA9052=m
+CONFIG_REGULATOR_FAN53555=m
+CONFIG_REGULATOR_GPIO=m
+CONFIG_REGULATOR_MAX77686=m
+CONFIG_REGULATOR_MC13783=m
+CONFIG_REGULATOR_MC13892=m
+CONFIG_REGULATOR_PALMAS=y
+CONFIG_REGULATOR_PBIAS=m
+CONFIG_REGULATOR_PFUZE100=m
+CONFIG_REGULATOR_RK808=m
+CONFIG_REGULATOR_S2MPA01=m
+CONFIG_REGULATOR_S2MPS11=m
+CONFIG_REGULATOR_S5M8767=m
+CONFIG_REGULATOR_TI_ABB=m
+CONFIG_REGULATOR_TPS65910=m
+CONFIG_REGULATOR_TWL4030=y
+CONFIG_REGULATOR_VEXPRESS=m
+
+##
+## file: drivers/rtc/Kconfig
+##
+CONFIG_RTC_DRV_AS3722=y
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_MAX77686=y
+CONFIG_RTC_DRV_RK808=y
+CONFIG_RTC_DRV_PCF8523=y
+CONFIG_RTC_DRV_PCF8563=y
+CONFIG_RTC_DRV_TWL4030=y
+CONFIG_RTC_DRV_PALMAS=y
+CONFIG_RTC_DRV_S5M=y
+CONFIG_RTC_DRV_DA9052=y
+CONFIG_RTC_DRV_EFI=y
+CONFIG_RTC_DRV_IMXDI=y
+CONFIG_RTC_DRV_OMAP=y
+CONFIG_RTC_DRV_PL030=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_RTC_DRV_VT8500=y
+CONFIG_RTC_DRV_SUN6I=y
+CONFIG_RTC_DRV_SUNXI=y
+CONFIG_RTC_DRV_MV=y
+CONFIG_RTC_DRV_ARMADA38X=y
+CONFIG_RTC_DRV_MC13XXX=y
+CONFIG_RTC_DRV_TEGRA=y
+CONFIG_RTC_DRV_MXC=y
+CONFIG_RTC_DRV_SNVS=y
+
+##
+## file: drivers/scsi/Kconfig
+##
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_AM53C974=m
+
+##
+## file: drivers/soc/bcm/Kconfig
+##
+CONFIG_RASPBERRYPI_POWER=y
+
+##
+## file: drivers/soc/rockchip/Kconfig
+##
+CONFIG_ROCKCHIP_PM_DOMAINS=y
+
+##
+## file: drivers/soc/tegra/Kconfig
+##
+# CONFIG_ARCH_TEGRA_2x_SOC is not set
+# CONFIG_ARCH_TEGRA_3x_SOC is not set
+# CONFIG_ARCH_TEGRA_114_SOC is not set
+CONFIG_ARCH_TEGRA_124_SOC=y
+
+##
+## file: drivers/spi/Kconfig
+##
+CONFIG_SPI=y
+CONFIG_SPI_BCM2835=m
+CONFIG_SPI_BCM2835AUX=m
+CONFIG_SPI_GPIO=y
+CONFIG_SPI_IMX=m
+CONFIG_SPI_OMAP24XX=m
+CONFIG_SPI_TI_QSPI=m
+CONFIG_SPI_ORION=m
+CONFIG_SPI_PL022=m
+CONFIG_SPI_ROCKCHIP=m
+CONFIG_SPI_SUN4I=m
+CONFIG_SPI_SUN6I=m
+CONFIG_SPI_TEGRA114=m
+CONFIG_SPI_TEGRA20_SFLASH=m
+CONFIG_SPI_SPIDEV=y
+
+##
+## file: drivers/thermal/Kconfig
+##
+CONFIG_ROCKCHIP_THERMAL=m
+CONFIG_ARMADA_THERMAL=y
+
+##
+## file: drivers/thermal/tegra/Kconfig
+##
+CONFIG_TEGRA_SOCTHERM=y
+
+##
+## file: drivers/thermal/ti-soc-thermal/Kconfig
+##
+CONFIG_TI_SOC_THERMAL=m
+CONFIG_TI_THERMAL=y
+CONFIG_OMAP4_THERMAL=y
+CONFIG_OMAP5_THERMAL=y
+CONFIG_DRA752_THERMAL=y
+
+##
+## file: drivers/tty/serial/Kconfig
+##
+CONFIG_SERIAL_AMBA_PL010=y
+CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_SAMSUNG=y
+CONFIG_SERIAL_SAMSUNG_CONSOLE=y
+CONFIG_SERIAL_TEGRA=y
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_VT8500=y
+CONFIG_SERIAL_VT8500_CONSOLE=y
+CONFIG_SERIAL_OMAP=y
+CONFIG_SERIAL_OMAP_CONSOLE=y
+CONFIG_SERIAL_ARC=y
+CONFIG_SERIAL_ARC_CONSOLE=y
+CONFIG_SERIAL_ARC_NR_PORTS=1
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_DMA=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+CONFIG_SERIAL_8250_DW=y
+# CONFIG_SERIAL_8250_EM is not set
+CONFIG_SERIAL_OF_PLATFORM=y
+
+##
+## file: drivers/usb/Kconfig
+##
+CONFIG_USB=m
+
+##
+## file: drivers/usb/chipidea/Kconfig
+##
+CONFIG_USB_CHIPIDEA=m
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+
+##
+## file: drivers/usb/dwc2/Kconfig
+##
+CONFIG_USB_DWC2=m
+## choice: DWC2 Mode Selection
+CONFIG_USB_DWC2_DUAL_ROLE=y
+## end choice
+
+##
+## file: drivers/usb/dwc3/Kconfig
+##
+CONFIG_USB_DWC3=m
+## choice: DWC3 Mode Selection
+CONFIG_USB_DWC3_DUAL_ROLE=y
+## end choice
+CONFIG_USB_DWC3_OMAP=m
+CONFIG_USB_DWC3_EXYNOS=m
+# CONFIG_USB_DWC3_PCI is not set
+
+##
+## file: drivers/usb/gadget/Kconfig
+##
+CONFIG_USB_GADGET=m
+
+##
+## file: drivers/usb/gadget/legacy/Kconfig
+##
+CONFIG_USB_G_NOKIA=m
+
+##
+## file: drivers/usb/host/Kconfig
+##
+CONFIG_USB_XHCI_MVEBU=m
+CONFIG_USB_XHCI_TEGRA=m
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_MXC=m
+CONFIG_USB_EHCI_HCD_OMAP=y
+CONFIG_USB_EHCI_TEGRA=m
+CONFIG_USB_EHCI_EXYNOS=m
+CONFIG_USB_EHCI_HCD_PLATFORM=m
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_HCD_OMAP3=y
+CONFIG_USB_OHCI_EXYNOS=m
+CONFIG_USB_OHCI_HCD_PLATFORM=m
+
+##
+## file: drivers/usb/misc/Kconfig
+##
+CONFIG_USB_HSIC_USB3503=m
+
+##
+## file: drivers/usb/musb/Kconfig
+##
+CONFIG_USB_MUSB_HDRC=m
+## choice: MUSB Mode Selection
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_GADGET is not set
+CONFIG_USB_MUSB_DUAL_ROLE=y
+## end choice
+CONFIG_USB_MUSB_SUNXI=m
+CONFIG_USB_MUSB_TUSB6010=m
+CONFIG_USB_MUSB_OMAP2PLUS=m
+CONFIG_USB_MUSB_AM35X=m
+CONFIG_USB_MUSB_DSPS=m
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+CONFIG_USB_TI_CPPI41_DMA=y
+CONFIG_USB_TUSB_OMAP_DMA=y
+
+##
+## file: drivers/usb/phy/Kconfig
+##
+CONFIG_NOP_USB_XCEIV=m
+CONFIG_AM335X_PHY_USB=m
+CONFIG_TWL6030_USB=m
+CONFIG_USB_MXS_PHY=m
+
+##
+## file: drivers/video/backlight/Kconfig
+##
+CONFIG_BACKLIGHT_PWM=m
+CONFIG_BACKLIGHT_PANDORA=m
+CONFIG_BACKLIGHT_GPIO=m
+
+##
+## file: drivers/video/console/Kconfig
+##
+CONFIG_FRAMEBUFFER_CONSOLE=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB_ARMCLCD=y
+CONFIG_FB_EFI=y
+CONFIG_FB_VT8500=y
+CONFIG_FB_WM8505=y
+CONFIG_FB_SIMPLE=y
+
+##
+## file: drivers/video/fbdev/omap2/omapfb/Kconfig
+##
+#. Redundant and conflicting with DRM_OMAP
+# CONFIG_FB_OMAP2 is not set
+
+##
+## file: drivers/virtio/Kconfig
+##
+CONFIG_VIRTIO_MMIO=m
+
+##
+## file: drivers/w1/masters/Kconfig
+##
+CONFIG_HDQ_MASTER_OMAP=m
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_DA9052_WATCHDOG=m
+CONFIG_ARM_SP805_WATCHDOG=m
+CONFIG_S3C2410_WATCHDOG=m
+CONFIG_DW_WATCHDOG=m
+CONFIG_OMAP_WATCHDOG=m
+CONFIG_ORION_WATCHDOG=m
+CONFIG_SUNXI_WATCHDOG=m
+CONFIG_TWL4030_WATCHDOG=m
+CONFIG_IMX2_WDT=m
+CONFIG_TEGRA_WATCHDOG=m
+CONFIG_BCM2835_WDT=m
+
+##
+## file: kernel/power/Kconfig
+##
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+##
+## file: mm/Kconfig
+##
+CONFIG_CMA=y
+
+##
+## file: net/dsa/Kconfig
+##
+CONFIG_NET_DSA=m
+
+##
+## file: net/phonet/Kconfig
+##
+CONFIG_PHONET=m
+
+##
+## file: net/switchdev/Kconfig
+##
+CONFIG_NET_SWITCHDEV=y
+
+##
+## file: sound/pci/hda/Kconfig
+##
+CONFIG_SND_HDA_TEGRA=m
+
+##
+## file: sound/soc/Kconfig
+##
+CONFIG_SND_SOC=m
+
+##
+## file: sound/soc/bcm/Kconfig
+##
+CONFIG_SND_BCM2835_SOC_I2S=m
+
+##
+## file: sound/soc/davinci/Kconfig
+##
+CONFIG_SND_DAVINCI_SOC_MCASP=m
+
+##
+## file: sound/soc/fsl/Kconfig
+##
+CONFIG_SND_IMX_SOC=m
+CONFIG_SND_SOC_EUKREA_TLV320=m
+CONFIG_SND_SOC_IMX_ES8328=m
+CONFIG_SND_SOC_IMX_SGTL5000=m
+CONFIG_SND_SOC_IMX_SPDIF=m
+CONFIG_SND_SOC_IMX_MC13783=m
+
+##
+## file: sound/soc/generic/Kconfig
+##
+CONFIG_SND_SIMPLE_CARD=m
+
+##
+## file: sound/soc/omap/Kconfig
+##
+CONFIG_SND_OMAP_SOC=m
+CONFIG_SND_OMAP_SOC_RX51=m
+CONFIG_SND_OMAP_SOC_AM3517EVM=m
+CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
+CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
+CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
+
+##
+## file: sound/soc/rockchip/Kconfig
+##
+CONFIG_SND_SOC_ROCKCHIP=m
+CONFIG_SND_SOC_ROCKCHIP_I2S=m
+CONFIG_SND_SOC_ROCKCHIP_SPDIF=m
+CONFIG_SND_SOC_ROCKCHIP_MAX98090=m
+CONFIG_SND_SOC_ROCKCHIP_RT5645=m
+
+##
+## file: sound/soc/sunxi/Kconfig
+##
+CONFIG_SND_SUN4I_CODEC=m
+CONFIG_SND_SUN4I_SPDIF=m
+
+##
+## file: sound/soc/tegra/Kconfig
+##
+CONFIG_SND_SOC_TEGRA=m
+CONFIG_SND_SOC_TEGRA_RT5640=m
+CONFIG_SND_SOC_TEGRA_WM8753=m
+CONFIG_SND_SOC_TEGRA_WM8903=m
+CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
+CONFIG_SND_SOC_TEGRA_ALC5632=m
+CONFIG_SND_SOC_TEGRA_MAX98090=m
+CONFIG_SND_SOC_TEGRA_RT5677=m
+
diff --git a/config/armhf/config.armmp-lpae b/config/armhf/config.armmp-lpae
new file mode 100644 (file)
index 0000000..d5045f1
--- /dev/null
@@ -0,0 +1,21 @@
+##
+## file: arch/arm/Kconfig
+##
+CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8
+
+##
+## file: arch/arm/kvm/Kconfig
+##
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=y
+
+##
+## file: arch/arm/mm/Kconfig
+##
+CONFIG_ARM_LPAE=y
+
+##
+## file: drivers/iommu/Kconfig
+##
+CONFIG_ARM_SMMU=y
+
diff --git a/config/armhf/defines b/config/armhf/defines
new file mode 100644 (file)
index 0000000..6cb4658
--- /dev/null
@@ -0,0 +1,27 @@
+[base]
+flavours:
+ armmp
+ armmp-lpae
+kernel-arch: arm
+
+[build]
+image-file: arch/arm/boot/zImage
+vdso: true
+
+[image]
+install-stem: vmlinuz
+
+[relations]
+headers%gcc-6: linux-compiler-gcc-6-arm
+
+[armmp_description]
+hardware: ARMv7 multiplatform compatible SoCs
+hardware-long: ARMv7 multiplatform kernel. See
+  https://wiki.debian.org/DebianKernel/ARMMP for details of supported
+  platforms
+
+[armmp-lpae_description]
+hardware: ARMv7 multiplatform compatible SoCs supporting LPAE
+hardware-long: ARMv7 multiplatform kernel supporting LPAE. See
+  https://wiki.debian.org/DebianKernel/ARMMP for details of supported
+  platforms.
diff --git a/config/config b/config/config
new file mode 100644 (file)
index 0000000..93b0e39
--- /dev/null
@@ -0,0 +1,7468 @@
+##
+## file: arch/Kconfig
+##
+CONFIG_OPROFILE=m
+CONFIG_KPROBES=y
+CONFIG_JUMP_LABEL=y
+# CONFIG_STATIC_KEYS_SELFTEST is not set
+#. Until we work out how to package them
+# CONFIG_GCC_PLUGINS is not set
+## choice: Stack Protector buffer overflow detection
+CONFIG_CC_STACKPROTECTOR_STRONG=y
+## end choice
+CONFIG_VMAP_STACK=y
+
+##
+## file: block/Kconfig
+##
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_INTEGRITY=y
+CONFIG_BLK_DEV_THROTTLING=y
+# CONFIG_BLK_CMDLINE_PARSER is not set
+
+##
+## 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: block/partitions/Kconfig
+##
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_AIX_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=y
+# CONFIG_SYSV68_PARTITION is not set
+# CONFIG_CMDLINE_PARTITION is not set
+
+##
+## file: certs/Kconfig
+##
+#. Signatures are added in linux-signed
+CONFIG_MODULE_SIG_KEY=""
+#. Actually a list of X.509 certificates, not keys
+CONFIG_SYSTEM_TRUSTED_KEYS="debian/certs/benh@debian.org.cert.pem"
+
+##
+## 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_CHACHA20POLY1305=m
+CONFIG_CRYPTO_SEQIV=m
+CONFIG_CRYPTO_ECHAINIV=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_CMAC=m
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_VMAC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CRC32=m
+CONFIG_CRYPTO_CRCT10DIF=m
+CONFIG_CRYPTO_GHASH=m
+CONFIG_CRYPTO_POLY1305=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_SHA1_MB is not set
+#. Must be built-in for IMA_DEFAULT_HASH_SHA256
+CONFIG_CRYPTO_SHA256=y
+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_CHACHA20=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+# CONFIG_CRYPTO_842 is not set
+CONFIG_CRYPTO_LZ4=m
+CONFIG_CRYPTO_LZ4HC=m
+CONFIG_CRYPTO_ANSI_CPRNG=m
+CONFIG_CRYPTO_DRBG_MENU=m
+# CONFIG_CRYPTO_DRBG_HASH is not set
+# CONFIG_CRYPTO_DRBG_CTR is not set
+CONFIG_CRYPTO_JITTERENTROPY=m
+CONFIG_CRYPTO_USER_API_HASH=m
+CONFIG_CRYPTO_USER_API_SKCIPHER=m
+CONFIG_CRYPTO_USER_API_AEAD=m
+
+##
+## file: crypto/asymmetric_keys/Kconfig
+##
+#. Not yet
+# CONFIG_ASYMMETRIC_KEY_TYPE is not set
+
+##
+## file: drivers/accessibility/Kconfig
+##
+CONFIG_ACCESSIBILITY=y
+CONFIG_A11Y_BRAILLE_CONSOLE=y
+
+##
+## file: drivers/acpi/Kconfig
+##
+# CONFIG_ACPI_DEBUGGER is not set
+CONFIG_ACPI_TABLE_UPGRADE=y
+# CONFIG_ACPI_BGRT is not set
+# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
+# CONFIG_PMIC_OPREGION is not set
+# CONFIG_ACPI_CONFIGFS is not set
+
+##
+## file: drivers/acpi/nfit/Kconfig
+##
+CONFIG_ACPI_NFIT=m
+# CONFIG_ACPI_NFIT_DEBUG is not set
+
+##
+## file: drivers/android/Kconfig
+##
+# CONFIG_ANDROID is not set
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_ATA=m
+CONFIG_ATA_VERBOSE_ERROR=y
+CONFIG_ATA_ACPI=y
+CONFIG_SATA_ZPODD=y
+CONFIG_SATA_PMP=y
+CONFIG_SATA_AHCI=m
+# CONFIG_SATA_AHCI_PLATFORM is not set
+# CONFIG_AHCI_CEVA is not set
+# CONFIG_AHCI_QORIQ is not set
+#. This driver loses data (#714295)
+# CONFIG_SATA_INIC162X is not set
+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_DWC is not set
+# CONFIG_SATA_HIGHBANK is not set
+CONFIG_SATA_MV=m
+CONFIG_SATA_NV=m
+CONFIG_SATA_PROMISE=m
+# CONFIG_SATA_RCAR is not set
+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 is not set
+CONFIG_PATA_ARTOP=m
+# CONFIG_PATA_ATIIXP is not set
+CONFIG_PATA_ATP867X=m
+CONFIG_PATA_CMD64X=m
+# CONFIG_PATA_CS5536 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=m
+CONFIG_PATA_IT821X=m
+CONFIG_PATA_JMICRON=m
+CONFIG_PATA_MARVELL=m
+# CONFIG_PATA_NETCELL is not set
+CONFIG_PATA_NINJA32=m
+# 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_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_PLATFORM 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 is not set
+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_FW_LOADER_USER_HELPER_FALLBACK is not set
+CONFIG_ALLOW_DEV_COREDUMP=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
+# CONFIG_FENCE_TRACE is not set
+
+##
+## file: drivers/bcma/Kconfig
+##
+CONFIG_BCMA=m
+CONFIG_BCMA_HOST_PCI=y
+# CONFIG_BCMA_HOST_SOC is not set
+# CONFIG_BCMA_DRIVER_PCI_HOSTMODE is not set
+# CONFIG_BCMA_DRIVER_GMAC_CMN is not set
+# CONFIG_BCMA_DRIVER_GPIO is not set
+# CONFIG_BCMA_DEBUG is not set
+
+##
+## file: drivers/block/Kconfig
+##
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_NULL_BLK=m
+# CONFIG_PARIDE is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_SKD=m
+CONFIG_BLK_DEV_OSD=m
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_RAM_DAX is not set
+CONFIG_ATA_OVER_ETH=m
+CONFIG_XEN_BLKDEV_FRONTEND=m
+CONFIG_XEN_BLKDEV_BACKEND=m
+CONFIG_VIRTIO_BLK=m
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_RBD=m
+# CONFIG_BLK_DEV_RSXX is not set
+
+##
+## file: drivers/block/drbd/Kconfig
+##
+CONFIG_BLK_DEV_DRBD=m
+# CONFIG_DRBD_FAULT_INJECTION is not set
+
+##
+## file: drivers/block/mtip32xx/Kconfig
+##
+CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
+
+##
+## file: drivers/block/zram/Kconfig
+##
+CONFIG_ZRAM=m
+
+##
+## file: drivers/bluetooth/Kconfig
+##
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIBTUSB_BCM=y
+CONFIG_BT_HCIBTUSB_RTL=y
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART_ATH3K=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIUART_3WIRE=y
+CONFIG_BT_HCIUART_INTEL=y
+CONFIG_BT_HCIUART_BCM=y
+CONFIG_BT_HCIUART_QCA=y
+CONFIG_BT_HCIUART_AG6XX=y
+CONFIG_BT_HCIUART_MRVL=y
+# CONFIG_BT_HCIBTUART is not set
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_BT_ATH3K=m
+CONFIG_BT_WILINK=m
+
+##
+## file: drivers/bus/Kconfig
+##
+# CONFIG_OMAP_OCP2SCP is not set
+
+##
+## file: drivers/char/Kconfig
+##
+CONFIG_DEVMEM=y
+# CONFIG_DEVKMEM is not set
+CONFIG_TTY_PRINTK=m
+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_DEVPORT=y
+
+##
+## file: drivers/char/hw_random/Kconfig
+##
+CONFIG_HW_RANDOM=m
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+CONFIG_HW_RANDOM_VIRTIO=m
+CONFIG_HW_RANDOM_TPM=m
+
+##
+## file: drivers/char/pcmcia/Kconfig
+##
+CONFIG_SYNCLINK_CS=m
+CONFIG_CARDMAN_4000=m
+CONFIG_CARDMAN_4040=m
+CONFIG_IPWIRELESS=m
+
+##
+## file: drivers/char/tpm/st33zp24/Kconfig
+##
+# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
+
+##
+## file: drivers/char/xillybus/Kconfig
+##
+# CONFIG_XILLYBUS is not set
+
+##
+## file: drivers/clk/Kconfig
+##
+# CONFIG_COMMON_CLK_SI5351 is not set
+# CONFIG_COMMON_CLK_SI514 is not set
+# CONFIG_COMMON_CLK_SI570 is not set
+# CONFIG_COMMON_CLK_CDCE706 is not set
+# CONFIG_COMMON_CLK_CDCE925 is not set
+# CONFIG_COMMON_CLK_CS2000_CP is not set
+
+##
+## file: drivers/connector/Kconfig
+##
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+
+##
+## file: drivers/cpufreq/Kconfig
+##
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+## choice: Default CPUFreq governor
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# 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
+CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
+# CONFIG_CPUFREQ_DT is not set
+
+##
+## file: drivers/cpuidle/Kconfig
+##
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+##
+## file: drivers/crypto/Kconfig
+##
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_HIFN_795X=m
+CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+
+##
+## file: drivers/crypto/chelsio/Kconfig
+##
+CONFIG_CRYPTO_DEV_CHELSIO=m
+
+##
+## file: drivers/dax/Kconfig
+##
+CONFIG_DEV_DAX=m
+CONFIG_DEV_DAX_PMEM=m
+
+##
+## file: drivers/devfreq/Kconfig
+##
+# CONFIG_PM_DEVFREQ is not set
+CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
+# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set
+# CONFIG_DEVFREQ_GOV_POWERSAVE is not set
+# CONFIG_DEVFREQ_GOV_USERSPACE is not set
+
+##
+## file: drivers/devfreq/event/Kconfig
+##
+# CONFIG_PM_DEVFREQ_EVENT is not set
+
+##
+## file: drivers/dma/Kconfig
+##
+# CONFIG_DMADEVICES_DEBUG is not set
+# CONFIG_FSL_EDMA is not set
+# CONFIG_INTEL_IDMA64 is not set
+CONFIG_ASYNC_TX_DMA=y
+# CONFIG_DMATEST is not set
+
+##
+## file: drivers/dma/dw/Kconfig
+##
+# CONFIG_DW_DMAC is not set
+# CONFIG_DW_DMAC_PCI is not set
+
+##
+## file: drivers/dma-buf/Kconfig
+##
+# CONFIG_SYNC_FILE is not set
+
+##
+## file: drivers/edac/Kconfig
+##
+CONFIG_EDAC_LEGACY_SYSFS=y
+
+##
+## file: drivers/extcon/Kconfig
+##
+# CONFIG_EXTCON is not set
+
+##
+## 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/firmware/Kconfig
+##
+CONFIG_DMI_SYSFS=y
+
+##
+## file: drivers/firmware/efi/Kconfig
+##
+CONFIG_EFI_VARS=m
+CONFIG_EFI_VARS_PSTORE=m
+# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
+# CONFIG_EFI_TEST is not set
+
+##
+## file: drivers/fmc/Kconfig
+##
+# CONFIG_FMC is not set
+
+##
+## file: drivers/fpga/Kconfig
+##
+# CONFIG_FPGA is not set
+
+##
+## file: drivers/gpio/Kconfig
+##
+# CONFIG_GPIOLIB is not set
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+# CONFIG_GPIO_74XX_MMIO is not set
+# CONFIG_GPIO_ALTERA is not set
+# CONFIG_GPIO_AMDPT is not set
+# CONFIG_GPIO_DWAPB is not set
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRGPIO is not set
+# CONFIG_GPIO_MOCKUP is not set
+# CONFIG_GPIO_VX855 is not set
+# CONFIG_GPIO_XILINX is not set
+# CONFIG_GPIO_ZX is not set
+# CONFIG_GPIO_104_IDIO_16 is not set
+# CONFIG_GPIO_IT87 is not set
+# CONFIG_GPIO_SCH311X is not set
+# CONFIG_GPIO_TS5500 is not set
+# CONFIG_GPIO_ADP5588 is not set
+# CONFIG_GPIO_ADNP 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_SX150X is not set
+# CONFIG_GPIO_TPIC2810 is not set
+# CONFIG_GPIO_TS4900 is not set
+# CONFIG_GPIO_CS5535 is not set
+# CONFIG_GPIO_AMD8111 is not set
+# CONFIG_GPIO_INTEL_MID is not set
+# CONFIG_GPIO_ML_IOH is not set
+# CONFIG_GPIO_RDC321X is not set
+# CONFIG_GPIO_74X164 is not set
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MC33880 is not set
+# CONFIG_GPIO_PISOSR is not set
+# CONFIG_GPIO_MCP23S08 is not set
+CONFIG_GPIO_VIPERBOARD=m
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+# CONFIG_DRM_DP_AUX_CHARDEV is not set
+CONFIG_DRM_FBDEV_EMULATION=y
+CONFIG_DRM_LOAD_EDID_FIRMWARE=y
+CONFIG_DRM_VGEM=m
+CONFIG_DRM_LEGACY=y
+CONFIG_DRM_VIA=m
+CONFIG_DRM_SAVAGE=m
+
+##
+## file: drivers/gpu/drm/amd/acp/Kconfig
+##
+# CONFIG_DRM_AMD_ACP is not set
+
+##
+## file: drivers/gpu/drm/amd/amdgpu/Kconfig
+##
+# CONFIG_DRM_AMDGPU_SI is not set
+# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
+
+##
+## file: drivers/gpu/drm/ast/Kconfig
+##
+# CONFIG_DRM_AST is not set
+
+##
+## file: drivers/gpu/drm/bochs/Kconfig
+##
+CONFIG_DRM_BOCHS=m
+
+##
+## file: drivers/gpu/drm/bridge/Kconfig
+##
+# CONFIG_DRM_ANALOGIX_ANX78XX is not set
+# CONFIG_DRM_NXP_PTN3460 is not set
+# CONFIG_DRM_PARADE_PS8622 is not set
+
+##
+## file: drivers/gpu/drm/bridge/adv7511/Kconfig
+##
+# CONFIG_DRM_I2C_ADV7511 is not set
+
+##
+## file: drivers/gpu/drm/cirrus/Kconfig
+##
+CONFIG_DRM_CIRRUS_QEMU=m
+
+##
+## file: drivers/gpu/drm/i2c/Kconfig
+##
+# CONFIG_DRM_I2C_CH7006 is not set
+# CONFIG_DRM_I2C_SIL164 is not set
+# CONFIG_DRM_I2C_NXP_TDA998X is not set
+
+##
+## file: drivers/gpu/drm/i915/Kconfig
+##
+CONFIG_DRM_I915_USERPTR=y
+
+##
+## file: drivers/gpu/drm/i915/Kconfig.debug
+##
+# CONFIG_DRM_I915_WERROR is not set
+# CONFIG_DRM_I915_DEBUG is not set
+
+##
+## file: drivers/gpu/drm/mgag200/Kconfig
+##
+# CONFIG_DRM_MGAG200 is not set
+
+##
+## file: drivers/gpu/drm/nouveau/Kconfig
+##
+CONFIG_DRM_NOUVEAU=m
+CONFIG_NOUVEAU_DEBUG=5
+CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+
+##
+## file: drivers/gpu/drm/panel/Kconfig
+##
+# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
+# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
+
+##
+## file: drivers/gpu/drm/qxl/Kconfig
+##
+CONFIG_DRM_QXL=m
+
+##
+## file: drivers/gpu/drm/radeon/Kconfig
+##
+# CONFIG_DRM_RADEON_USERPTR is not set
+
+##
+## file: drivers/gpu/drm/udl/Kconfig
+##
+CONFIG_DRM_UDL=m
+
+##
+## file: drivers/gpu/drm/virtio/Kconfig
+##
+CONFIG_DRM_VIRTIO_GPU=m
+
+##
+## file: drivers/gpu/drm/vmwgfx/Kconfig
+##
+# CONFIG_DRM_VMWGFX is not set
+
+##
+## file: drivers/gpu/vga/Kconfig
+##
+CONFIG_VGA_ARB=y
+
+##
+## file: drivers/hid/Kconfig
+##
+CONFIG_HID=m
+CONFIG_HID_BATTERY_STRENGTH=y
+CONFIG_HIDRAW=y
+CONFIG_UHID=m
+CONFIG_HID_GENERIC=m
+CONFIG_HID_A4TECH=y
+CONFIG_HID_ACRUX=m
+CONFIG_HID_ACRUX_FF=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_ASUS=m
+CONFIG_HID_AUREAL=m
+CONFIG_HID_BELKIN=y
+CONFIG_HID_BETOP_FF=m
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CORSAIR=m
+CONFIG_HID_PRODIKEYS=m
+CONFIG_HID_CMEDIA=m
+CONFIG_HID_CP2112=m
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_DRAGONRISE=m
+CONFIG_DRAGONRISE_FF=y
+CONFIG_HID_EMS_FF=m
+CONFIG_HID_ELECOM=m
+CONFIG_HID_ELO=m
+CONFIG_HID_EZKEY=y
+CONFIG_HID_GEMBIRD=m
+# CONFIG_HID_GFRM is not set
+CONFIG_HID_HOLTEK=m
+CONFIG_HOLTEK_FF=y
+# CONFIG_HID_GT683R is not set
+CONFIG_HID_KEYTOUCH=m
+CONFIG_HID_KYE=m
+CONFIG_HID_UCLOGIC=m
+CONFIG_HID_WALTOP=m
+CONFIG_HID_GYRATION=m
+CONFIG_HID_ICADE=m
+CONFIG_HID_TWINHAN=m
+CONFIG_HID_KENSINGTON=y
+CONFIG_HID_LCPOWER=m
+CONFIG_HID_LED=m
+CONFIG_HID_LENOVO=m
+CONFIG_HID_LOGITECH=y
+CONFIG_HID_LOGITECH_DJ=m
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+CONFIG_LOGIG940_FF=y
+CONFIG_LOGIWHEELS_FF=y
+CONFIG_HID_MAGICMOUSE=m
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTRIG=m
+CONFIG_HID_ORTEK=m
+CONFIG_HID_PANTHERLORD=m
+CONFIG_PANTHERLORD_FF=y
+CONFIG_HID_PENMOUNT=m
+CONFIG_HID_PETALYNX=m
+CONFIG_HID_PICOLCD=m
+CONFIG_HID_PICOLCD_FB=y
+CONFIG_HID_PICOLCD_BACKLIGHT=y
+CONFIG_HID_PICOLCD_LCD=y
+CONFIG_HID_PICOLCD_LEDS=y
+CONFIG_HID_PICOLCD_CIR=y
+CONFIG_HID_PLANTRONICS=m
+CONFIG_HID_PRIMAX=m
+CONFIG_HID_ROCCAT=m
+CONFIG_HID_SAITEK=m
+CONFIG_HID_SAMSUNG=m
+CONFIG_HID_SONY=m
+CONFIG_SONY_FF=y
+CONFIG_HID_SPEEDLINK=m
+CONFIG_HID_STEELSERIES=m
+CONFIG_HID_SUNPLUS=m
+CONFIG_HID_RMI=m
+CONFIG_HID_GREENASIA=m
+CONFIG_GREENASIA_FF=y
+CONFIG_HID_SMARTJOYPLUS=m
+CONFIG_SMARTJOYPLUS_FF=y
+CONFIG_HID_TIVO=m
+CONFIG_HID_TOPSEED=m
+CONFIG_HID_THINGM=m
+CONFIG_HID_THRUSTMASTER=m
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_HID_WACOM=m
+CONFIG_HID_WIIMOTE=m
+CONFIG_HID_XINMO=m
+CONFIG_HID_ZEROPLUS=m
+CONFIG_ZEROPLUS_FF=y
+CONFIG_HID_ZYDACRON=m
+CONFIG_HID_SENSOR_HUB=m
+CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
+CONFIG_HID_ALPS=m
+
+##
+## file: drivers/hid/intel-ish-hid/Kconfig
+##
+# CONFIG_INTEL_ISH_HID is not set
+
+##
+## file: drivers/hid/usbhid/Kconfig
+##
+CONFIG_HID_PID=y
+CONFIG_USB_HIDDEV=y
+#. These are for HID Boot Protocol, not full HID
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+
+##
+## file: drivers/hsi/Kconfig
+##
+# CONFIG_HSI is not set
+
+##
+## file: drivers/hwmon/Kconfig
+##
+CONFIG_HWMON=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ABITUGURU3=m
+# CONFIG_SENSORS_AD7314 is not set
+CONFIG_SENSORS_AD7414=m
+CONFIG_SENSORS_AD7418=m
+CONFIG_SENSORS_ADM1029=m
+CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADT7310 is not set
+CONFIG_SENSORS_ADT7411=m
+CONFIG_SENSORS_ADT7462=m
+CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7475=m
+CONFIG_SENSORS_ASC7621=m
+CONFIG_SENSORS_APPLESMC=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_DS620=m
+CONFIG_SENSORS_I5K_AMB=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_MC13783_ADC=m
+CONFIG_SENSORS_FSCHMD=m
+CONFIG_SENSORS_FTSTEUTATES=m
+CONFIG_SENSORS_G760A=m
+# CONFIG_SENSORS_GPIO_FAN is not set
+# CONFIG_SENSORS_HIH6130 is not set
+CONFIG_SENSORS_IBMAEM=m
+CONFIG_SENSORS_IBMPEX=m
+# CONFIG_SENSORS_IIO_HWMON is not set
+CONFIG_SENSORS_CORETEMP=m
+# CONFIG_SENSORS_IT87 is not set
+CONFIG_SENSORS_JC42=m
+CONFIG_SENSORS_LINEAGE=m
+CONFIG_SENSORS_LTC4151=m
+CONFIG_SENSORS_LTC4215=m
+CONFIG_SENSORS_LTC4245=m
+CONFIG_SENSORS_LTC4261=m
+CONFIG_SENSORS_MAX1111=m
+CONFIG_SENSORS_MAX16065=m
+CONFIG_SENSORS_MAX1668=m
+# CONFIG_SENSORS_MAX197 is not set
+CONFIG_SENSORS_MAX6639=m
+CONFIG_SENSORS_MAX6642=m
+CONFIG_SENSORS_MAX6650=m
+# CONFIG_SENSORS_MCP3021 is not set
+CONFIG_SENSORS_ADCXX=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_LM73=m
+CONFIG_SENSORS_LM93=m
+CONFIG_SENSORS_LM95241=m
+CONFIG_SENSORS_LM95245=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_NTC_THERMISTOR=m
+CONFIG_SENSORS_NCT6683=m
+CONFIG_SENSORS_NCT6775=m
+# CONFIG_SENSORS_SHT15 is not set
+CONFIG_SENSORS_SHT21=m
+CONFIG_SENSORS_DME1737=m
+CONFIG_SENSORS_EMC1403=m
+CONFIG_SENSORS_EMC2103=m
+CONFIG_SENSORS_EMC6W201=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SCH5627=m
+CONFIG_SENSORS_SMM665=m
+CONFIG_SENSORS_ADS1015=m
+CONFIG_SENSORS_ADS7828=m
+CONFIG_SENSORS_ADS7871=m
+CONFIG_SENSORS_AMC6821=m
+# CONFIG_SENSORS_INA209 is not set
+# CONFIG_SENSORS_INA2XX is not set
+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_ATK0110=m
+
+##
+## file: drivers/hwmon/pmbus/Kconfig
+##
+# CONFIG_PMBUS is not set
+
+##
+## file: drivers/hwtracing/intel_th/Kconfig
+##
+# CONFIG_INTEL_TH is not set
+
+##
+## file: drivers/hwtracing/stm/Kconfig
+##
+# CONFIG_STM is not set
+# CONFIG_STM_DUMMY is not set
+# CONFIG_STM_SOURCE_CONSOLE is not set
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=m
+# CONFIG_I2C_MUX is not set
+CONFIG_I2C_HELPER_AUTO=y
+# CONFIG_I2C_SLAVE is not set
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+CONFIG_I2C_ISCH=m
+CONFIG_I2C_NFORCE2_S4985=m
+# CONFIG_I2C_CBUS_GPIO is not set
+# CONFIG_I2C_EMEV2 is not set
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PCA_PLATFORM=m
+# CONFIG_I2C_RK3X is not set
+CONFIG_I2C_SIMTEC=m
+# CONFIG_I2C_XILINX is not set
+CONFIG_I2C_DIOLAN_U2C=m
+CONFIG_I2C_ROBOTFUZZ_OSIF=m
+CONFIG_I2C_TAOS_EVM=m
+CONFIG_I2C_TINY_USB=m
+CONFIG_I2C_VIPERBOARD=m
+
+##
+## file: drivers/i2c/muxes/Kconfig
+##
+# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
+# CONFIG_I2C_MUX_GPIO is not set
+# CONFIG_I2C_MUX_PCA9541 is not set
+# CONFIG_I2C_MUX_PCA954x is not set
+# CONFIG_I2C_MUX_PINCTRL is not set
+# CONFIG_I2C_MUX_REG is not set
+
+##
+## file: drivers/ide/Kconfig
+##
+# CONFIG_IDE is not set
+#. But for m68k flavours that need it
+CONFIG_IDE_GD=m
+CONFIG_IDE_GD_ATA=y
+CONFIG_IDE_GD_ATAPI=y
+# 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_IT821X is not set
+
+##
+## file: drivers/idle/Kconfig
+##
+CONFIG_I7300_IDLE=m
+
+##
+## file: drivers/iio/Kconfig
+##
+CONFIG_IIO=m
+CONFIG_IIO_BUFFER=y
+# CONFIG_IIO_TRIGGER is not set
+
+##
+## file: drivers/iio/accel/Kconfig
+##
+# CONFIG_BMA180 is not set
+# CONFIG_BMA220 is not set
+# CONFIG_BMC150_ACCEL is not set
+# CONFIG_DMARD09 is not set
+CONFIG_HID_SENSOR_ACCEL_3D=m
+# CONFIG_IIO_ST_ACCEL_3AXIS is not set
+# CONFIG_KXSD9 is not set
+# CONFIG_KXCJK1013 is not set
+# CONFIG_MC3230 is not set
+# CONFIG_MMA7455_I2C is not set
+# CONFIG_MMA7455_SPI is not set
+# CONFIG_MMA7660 is not set
+# CONFIG_MMA8452 is not set
+# CONFIG_MMA9551 is not set
+# CONFIG_MMA9553 is not set
+# CONFIG_MXC4005 is not set
+# CONFIG_MXC6255 is not set
+# CONFIG_STK8312 is not set
+# CONFIG_STK8BA50 is not set
+
+##
+## file: drivers/iio/adc/Kconfig
+##
+# CONFIG_AD7266 is not set
+# CONFIG_AD7291 is not set
+# CONFIG_AD7298 is not set
+# CONFIG_AD7476 is not set
+# CONFIG_AD7791 is not set
+# CONFIG_AD7793 is not set
+# CONFIG_AD7887 is not set
+# CONFIG_AD7923 is not set
+# CONFIG_AD799X is not set
+# CONFIG_CC10001_ADC is not set
+# CONFIG_HI8435 is not set
+# CONFIG_INA2XX_ADC is not set
+# CONFIG_LTC2485 is not set
+# CONFIG_MAX1027 is not set
+# CONFIG_MAX1363 is not set
+# CONFIG_MCP320X is not set
+# CONFIG_MCP3422 is not set
+# CONFIG_NAU7802 is not set
+# CONFIG_TI_ADC081C is not set
+# CONFIG_TI_ADC0832 is not set
+# CONFIG_TI_ADC12138 is not set
+# CONFIG_TI_ADC128S052 is not set
+# CONFIG_TI_ADC161S626 is not set
+# CONFIG_TI_ADS1015 is not set
+# CONFIG_VF610_ADC is not set
+CONFIG_VIPERBOARD_ADC=m
+
+##
+## file: drivers/iio/amplifiers/Kconfig
+##
+# CONFIG_AD8366 is not set
+
+##
+## file: drivers/iio/buffer/Kconfig
+##
+#. These will be selected by drivers that need them
+# CONFIG_IIO_BUFFER_CB is not set
+# CONFIG_IIO_KFIFO_BUF is not set
+
+##
+## file: drivers/iio/chemical/Kconfig
+##
+# CONFIG_ATLAS_PH_SENSOR is not set
+# CONFIG_IAQCORE is not set
+# CONFIG_VZ89X is not set
+
+##
+## file: drivers/iio/common/ssp_sensors/Kconfig
+##
+# CONFIG_IIO_SSP_SENSORHUB is not set
+
+##
+## file: drivers/iio/dac/Kconfig
+##
+# CONFIG_AD5064 is not set
+# CONFIG_AD5360 is not set
+# CONFIG_AD5380 is not set
+# CONFIG_AD5421 is not set
+# CONFIG_AD5446 is not set
+# CONFIG_AD5449 is not set
+# CONFIG_AD5592R is not set
+# CONFIG_AD5593R is not set
+# CONFIG_AD5504 is not set
+# CONFIG_AD5624R_SPI is not set
+# CONFIG_AD5686 is not set
+# CONFIG_AD5755 is not set
+# CONFIG_AD5761 is not set
+# CONFIG_AD5764 is not set
+# CONFIG_AD5791 is not set
+# CONFIG_AD7303 is not set
+# CONFIG_AD8801 is not set
+# CONFIG_M62332 is not set
+# CONFIG_MAX517 is not set
+# CONFIG_MAX5821 is not set
+# CONFIG_MCP4725 is not set
+# CONFIG_MCP4922 is not set
+
+##
+## file: drivers/iio/dummy/Kconfig
+##
+# CONFIG_IIO_SIMPLE_DUMMY is not set
+
+##
+## file: drivers/iio/frequency/Kconfig
+##
+# CONFIG_AD9523 is not set
+# CONFIG_ADF4350 is not set
+
+##
+## file: drivers/iio/gyro/Kconfig
+##
+# CONFIG_ADIS16080 is not set
+# CONFIG_ADIS16130 is not set
+# CONFIG_ADIS16136 is not set
+# CONFIG_ADIS16260 is not set
+# CONFIG_ADXRS450 is not set
+# CONFIG_BMG160 is not set
+CONFIG_HID_SENSOR_GYRO_3D=m
+# CONFIG_IIO_ST_GYRO_3AXIS is not set
+# CONFIG_ITG3200 is not set
+
+##
+## file: drivers/iio/health/Kconfig
+##
+# CONFIG_AFE4403 is not set
+# CONFIG_AFE4404 is not set
+# CONFIG_MAX30100 is not set
+
+##
+## file: drivers/iio/humidity/Kconfig
+##
+# CONFIG_AM2315 is not set
+# CONFIG_DHT11 is not set
+# CONFIG_HDC100X is not set
+# CONFIG_HTU21 is not set
+# CONFIG_SI7005 is not set
+# CONFIG_SI7020 is not set
+
+##
+## file: drivers/iio/imu/Kconfig
+##
+# CONFIG_ADIS16400 is not set
+# CONFIG_ADIS16480 is not set
+# CONFIG_KMX61 is not set
+
+##
+## file: drivers/iio/imu/bmi160/Kconfig
+##
+# CONFIG_BMI160_I2C is not set
+# CONFIG_BMI160_SPI is not set
+
+##
+## file: drivers/iio/imu/inv_mpu6050/Kconfig
+##
+# CONFIG_INV_MPU6050_I2C is not set
+# CONFIG_INV_MPU6050_SPI is not set
+
+##
+## file: drivers/iio/light/Kconfig
+##
+CONFIG_ACPI_ALS=m
+# CONFIG_ADJD_S311 is not set
+# CONFIG_AL3320A is not set
+# CONFIG_APDS9300 is not set
+# CONFIG_APDS9960 is not set
+# CONFIG_BH1750 is not set
+CONFIG_BH1780=m
+# CONFIG_CM32181 is not set
+# CONFIG_CM3232 is not set
+# CONFIG_CM3323 is not set
+# CONFIG_CM36651 is not set
+# CONFIG_GP2AP020A00F is not set
+# CONFIG_ISL29125 is not set
+CONFIG_HID_SENSOR_ALS=m
+CONFIG_HID_SENSOR_PROX=m
+# CONFIG_JSA1212 is not set
+# CONFIG_RPR0521 is not set
+# CONFIG_LTR501 is not set
+# CONFIG_MAX44000 is not set
+# CONFIG_OPT3001 is not set
+# CONFIG_PA12203001 is not set
+# CONFIG_SI1145 is not set
+# CONFIG_STK3310 is not set
+# CONFIG_TCS3414 is not set
+# CONFIG_TCS3472 is not set
+# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_TSL4531 is not set
+# CONFIG_US5182D is not set
+# CONFIG_VCNL4000 is not set
+# CONFIG_VEML6070 is not set
+
+##
+## file: drivers/iio/magnetometer/Kconfig
+##
+# CONFIG_AK8975 is not set
+# CONFIG_AK09911 is not set
+# CONFIG_BMC150_MAGN_I2C is not set
+# CONFIG_BMC150_MAGN_SPI is not set
+# CONFIG_MAG3110 is not set
+CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
+# CONFIG_MMC35240 is not set
+# CONFIG_IIO_ST_MAGN_3AXIS is not set
+# CONFIG_SENSORS_HMC5843_I2C is not set
+# CONFIG_SENSORS_HMC5843_SPI is not set
+
+##
+## file: drivers/iio/orientation/Kconfig
+##
+CONFIG_HID_SENSOR_INCLINOMETER_3D=m
+CONFIG_HID_SENSOR_DEVICE_ROTATION=m
+
+##
+## file: drivers/iio/potentiometer/Kconfig
+##
+# CONFIG_DS1803 is not set
+# CONFIG_MAX5487 is not set
+# CONFIG_MCP4131 is not set
+# CONFIG_MCP4531 is not set
+# CONFIG_TPL0102 is not set
+
+##
+## file: drivers/iio/pressure/Kconfig
+##
+# CONFIG_BMP280 is not set
+CONFIG_HID_SENSOR_PRESS=m
+# CONFIG_HP03 is not set
+# CONFIG_MPL115_I2C is not set
+# CONFIG_MPL115_SPI is not set
+# CONFIG_MPL3115 is not set
+# CONFIG_MS5611 is not set
+# CONFIG_MS5637 is not set
+# CONFIG_IIO_ST_PRESS is not set
+# CONFIG_T5403 is not set
+# CONFIG_HP206C is not set
+# CONFIG_ZPA2326 is not set
+
+##
+## file: drivers/iio/proximity/Kconfig
+##
+# CONFIG_AS3935 is not set
+# CONFIG_LIDAR_LITE_V2 is not set
+# CONFIG_SX9500 is not set
+
+##
+## file: drivers/iio/temperature/Kconfig
+##
+# CONFIG_MAXIM_THERMOCOUPLE is not set
+# CONFIG_MLX90614 is not set
+# CONFIG_TMP006 is not set
+# CONFIG_TSYS01 is not set
+# CONFIG_TSYS02D is not set
+
+##
+## file: drivers/iio/trigger/Kconfig
+##
+# CONFIG_IIO_INTERRUPT_TRIGGER is not set
+# CONFIG_IIO_SYSFS_TRIGGER is not set
+
+##
+## file: drivers/infiniband/Kconfig
+##
+CONFIG_INFINIBAND=m
+CONFIG_INFINIBAND_USER_MAD=m
+CONFIG_INFINIBAND_USER_ACCESS=m
+CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
+
+##
+## 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/hfi1/Kconfig
+##
+CONFIG_INFINIBAND_HFI1=m
+
+##
+## file: drivers/infiniband/hw/i40iw/Kconfig
+##
+CONFIG_INFINIBAND_I40IW=m
+
+##
+## file: drivers/infiniband/hw/mlx4/Kconfig
+##
+CONFIG_MLX4_INFINIBAND=m
+
+##
+## file: drivers/infiniband/hw/mlx5/Kconfig
+##
+CONFIG_MLX5_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/ocrdma/Kconfig
+##
+CONFIG_INFINIBAND_OCRDMA=m
+
+##
+## file: drivers/infiniband/hw/qedr/Kconfig
+##
+CONFIG_INFINIBAND_QEDR=m
+
+##
+## file: drivers/infiniband/hw/qib/Kconfig
+##
+CONFIG_INFINIBAND_QIB=m
+CONFIG_INFINIBAND_QIB_DCA=y
+
+##
+## file: drivers/infiniband/sw/rdmavt/Kconfig
+##
+CONFIG_INFINIBAND_RDMAVT=m
+
+##
+## file: drivers/infiniband/sw/rxe/Kconfig
+##
+CONFIG_RDMA_RXE=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/isert/Kconfig
+##
+CONFIG_INFINIBAND_ISERT=m
+
+##
+## file: drivers/infiniband/ulp/srp/Kconfig
+##
+CONFIG_INFINIBAND_SRP=m
+
+##
+## file: drivers/infiniband/ulp/srpt/Kconfig
+##
+CONFIG_INFINIBAND_SRPT=m
+
+##
+## file: drivers/input/Kconfig
+##
+CONFIG_INPUT=y
+CONFIG_INPUT_LEDS=y
+CONFIG_INPUT_FF_MEMLESS=m
+# CONFIG_INPUT_POLLDEV is not set
+CONFIG_INPUT_SPARSEKMAP=m
+# CONFIG_INPUT_MATRIXKMAP is not set
+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_AS5011 is not set
+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_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADC is not set
+CONFIG_KEYBOARD_ADP5588=m
+# CONFIG_KEYBOARD_ADP5589 is not set
+# CONFIG_KEYBOARD_QT1070 is not set
+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_TCA8418 is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+CONFIG_KEYBOARD_LM8323=m
+# CONFIG_KEYBOARD_LM8333 is not set
+CONFIG_KEYBOARD_MAX7359=m
+# CONFIG_KEYBOARD_MCS is not set
+# CONFIG_KEYBOARD_MPR121 is not set
+CONFIG_KEYBOARD_OPENCORES=m
+# CONFIG_KEYBOARD_SAMSUNG is not set
+CONFIG_KEYBOARD_STOWAWAY=m
+# CONFIG_KEYBOARD_OMAP4 is not set
+# CONFIG_KEYBOARD_CAP11XX is not set
+# CONFIG_KEYBOARD_BCM is not set
+
+##
+## file: drivers/input/misc/Kconfig
+##
+# CONFIG_INPUT_AD714X is not set
+# CONFIG_INPUT_BMA150 is not set
+# CONFIG_INPUT_E3X0_BUTTON is not set
+# CONFIG_INPUT_MMA8450 is not set
+# CONFIG_INPUT_MPU3050 is not set
+# CONFIG_INPUT_GP2A is not set
+# CONFIG_INPUT_GPIO_BEEPER is not set
+# CONFIG_INPUT_GPIO_TILT_POLLED is not set
+# CONFIG_INPUT_GPIO_DECODER is not set
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+# CONFIG_INPUT_KXTJ9 is not set
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_CM109=m
+CONFIG_INPUT_PCF50633_PMU=m
+# CONFIG_INPUT_PCF8574 is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+CONFIG_INPUT_WM831X_ON=m
+# CONFIG_INPUT_ADXL34X is not set
+# CONFIG_INPUT_IMS_PCU is not set
+# CONFIG_INPUT_CMA3000 is not set
+CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y
+# CONFIG_INPUT_DRV260X_HAPTICS is not set
+# CONFIG_INPUT_DRV2665_HAPTICS is not set
+# CONFIG_INPUT_DRV2667_HAPTICS is not set
+
+##
+## file: drivers/input/mouse/Kconfig
+##
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_BYD=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_CYPRESS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_MOUSE_PS2_SENTELIC=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_PS2_FOCALTECH=y
+# CONFIG_MOUSE_ELAN_I2C is not set
+# CONFIG_MOUSE_GPIO is not set
+CONFIG_MOUSE_SYNAPTICS_I2C=m
+CONFIG_MOUSE_SYNAPTICS_USB=m
+
+##
+## file: drivers/input/rmi4/Kconfig
+##
+# CONFIG_RMI4_CORE is not set
+
+##
+## file: drivers/input/serio/Kconfig
+##
+CONFIG_SERIO_ALTERA_PS2=m
+# CONFIG_SERIO_PS2MULT is not set
+# CONFIG_SERIO_ARC_PS2 is not set
+# CONFIG_SERIO_APBPS2 is not set
+# CONFIG_SERIO_OLPC_APSP is not set
+# CONFIG_USERIO is not set
+
+##
+## 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_PEGASUS=m
+CONFIG_TABLET_SERIAL_WACOM4=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_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
+#. Chromebook Pixel
+CONFIG_TOUCHSCREEN_ATMEL_MXT=m
+# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
+# CONFIG_TOUCHSCREEN_BU21013 is not set
+# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set
+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
+# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set
+# CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set
+CONFIG_TOUCHSCREEN_DYNAPRO=m
+CONFIG_TOUCHSCREEN_HAMPSHIRE=m
+CONFIG_TOUCHSCREEN_EETI=m
+# CONFIG_TOUCHSCREEN_EGALAX is not set
+# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set
+CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_GOODIX=m
+# CONFIG_TOUCHSCREEN_ILI210X is not set
+CONFIG_TOUCHSCREEN_GUNZE=m
+# CONFIG_TOUCHSCREEN_EKTF2127 is not set
+# CONFIG_TOUCHSCREEN_ELAN is not set
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_WACOM_W8001=m
+# CONFIG_TOUCHSCREEN_WACOM_I2C is not set
+# CONFIG_TOUCHSCREEN_MAX11801 is not set
+CONFIG_TOUCHSCREEN_MCS5000=m
+# CONFIG_TOUCHSCREEN_MMS114 is not set
+# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set
+CONFIG_TOUCHSCREEN_MTOUCH=m
+# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
+CONFIG_TOUCHSCREEN_INEXIO=m
+CONFIG_TOUCHSCREEN_MK712=m
+CONFIG_TOUCHSCREEN_HTCPEN=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_UCB1400=m
+# CONFIG_TOUCHSCREEN_PIXCIR is not set
+# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set
+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_IDEALTEK=y
+CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+CONFIG_TOUCHSCREEN_USB_GOTOP=y
+CONFIG_TOUCHSCREEN_USB_JASTEC=y
+CONFIG_TOUCHSCREEN_USB_ELO=y
+CONFIG_TOUCHSCREEN_USB_E2I=y
+CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
+CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
+CONFIG_TOUCHSCREEN_USB_NEXIO=y
+CONFIG_TOUCHSCREEN_TOUCHIT213=m
+# CONFIG_TOUCHSCREEN_TSC2004 is not set
+# CONFIG_TOUCHSCREEN_TSC2005 is not set
+CONFIG_TOUCHSCREEN_TSC2007=m
+# CONFIG_TOUCHSCREEN_RM_TS is not set
+# CONFIG_TOUCHSCREEN_SILEAD is not set
+# CONFIG_TOUCHSCREEN_SIS_I2C is not set
+# CONFIG_TOUCHSCREEN_ST1232 is not set
+CONFIG_TOUCHSCREEN_SUR40=m
+# CONFIG_TOUCHSCREEN_SX8654 is not set
+CONFIG_TOUCHSCREEN_TPS6507X=m
+# CONFIG_TOUCHSCREEN_ZFORCE is not set
+# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+
+##
+## file: drivers/iommu/Kconfig
+##
+CONFIG_IOMMU_SUPPORT=y
+
+##
+## file: drivers/ipack/Kconfig
+##
+# CONFIG_IPACK_BUS is not set
+
+##
+## 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_CLASS_FLASH is not set
+# CONFIG_LEDS_BCM6328 is not set
+# CONFIG_LEDS_BCM6358 is not set
+# CONFIG_LEDS_LM3530 is not set
+# CONFIG_LEDS_LM3642 is not set
+CONFIG_LEDS_NET48XX=m
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=m
+CONFIG_LEDS_LP3944=m
+# CONFIG_LEDS_LP3952 is not set
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_LP5562 is not set
+# CONFIG_LEDS_LP8501 is not set
+# CONFIG_LEDS_LP8860 is not set
+CONFIG_LEDS_PCA955X=m
+# CONFIG_LEDS_PCA963X is not set
+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_TCA6507 is not set
+# CONFIG_LEDS_TLC591XX is not set
+# CONFIG_LEDS_LM355x is not set
+# CONFIG_LEDS_OT200 is not set
+# CONFIG_LEDS_BLINKM is not set
+# CONFIG_LEDS_MLXCPLD is not set
+
+##
+## file: drivers/leds/trigger/Kconfig
+##
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_ONESHOT=m
+CONFIG_LEDS_TRIGGER_DISK=y
+CONFIG_LEDS_TRIGGER_MTD=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+CONFIG_LEDS_TRIGGER_CPU=y
+CONFIG_LEDS_TRIGGER_GPIO=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+CONFIG_LEDS_TRIGGER_TRANSIENT=m
+CONFIG_LEDS_TRIGGER_CAMERA=m
+CONFIG_LEDS_TRIGGER_PANIC=y
+
+##
+## file: drivers/mailbox/Kconfig
+##
+# CONFIG_MAILBOX is not set
+
+##
+## file: drivers/mcb/Kconfig
+##
+# CONFIG_MCB is not set
+
+##
+## 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
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+# CONFIG_MD_CLUSTER is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_THIN_PROVISIONING=m
+CONFIG_DM_CACHE=m
+CONFIG_DM_CACHE_SMQ=m
+CONFIG_DM_CACHE_CLEANER=y
+CONFIG_DM_ERA=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_RAID=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
+CONFIG_DM_VERITY=m
+CONFIG_DM_SWITCH=m
+CONFIG_DM_LOG_WRITES=m
+
+##
+## file: drivers/md/bcache/Kconfig
+##
+CONFIG_BCACHE=m
+# CONFIG_BCACHE_DEBUG is not set
+# CONFIG_BCACHE_CLOSURES_DEBUG is not set
+
+##
+## file: drivers/media/Kconfig
+##
+CONFIG_MEDIA_SUPPORT=m
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
+CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_SDR_SUPPORT=y
+CONFIG_MEDIA_RC_SUPPORT=y
+CONFIG_MEDIA_CONTROLLER=y
+# CONFIG_VIDEO_V4L2_SUBDEV_API is not set
+CONFIG_DVB_NET=y
+CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
+
+##
+## file: drivers/media/common/siano/Kconfig
+##
+CONFIG_SMS_SIANO_RC=y
+# CONFIG_SMS_SIANO_DEBUGFS is not set
+
+##
+## file: drivers/media/dvb-core/Kconfig
+##
+CONFIG_DVB_MAX_ADAPTERS=8
+CONFIG_DVB_DYNAMIC_MINORS=y
+
+##
+## file: drivers/media/dvb-frontends/Kconfig
+##
+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_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/firewire/Kconfig
+##
+CONFIG_DVB_FIREDTV=m
+
+##
+## file: drivers/media/i2c/Kconfig
+##
+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_SAA7127=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_SR030PC30=m
+CONFIG_VIDEO_NOON010PC30=m
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+
+##
+## file: drivers/media/i2c/cx25840/Kconfig
+##
+CONFIG_VIDEO_CX25840=m
+
+##
+## file: drivers/media/i2c/soc_camera/Kconfig
+##
+# CONFIG_SOC_CAMERA_IMX074 is not set
+# CONFIG_SOC_CAMERA_MT9M001 is not set
+# CONFIG_SOC_CAMERA_MT9M111 is not set
+# CONFIG_SOC_CAMERA_MT9T031 is not set
+# CONFIG_SOC_CAMERA_MT9T112 is not set
+# CONFIG_SOC_CAMERA_MT9V022 is not set
+# CONFIG_SOC_CAMERA_OV2640 is not set
+# CONFIG_SOC_CAMERA_OV6650 is not set
+# CONFIG_SOC_CAMERA_OV772X is not set
+# CONFIG_SOC_CAMERA_OV9640 is not set
+# CONFIG_SOC_CAMERA_OV9740 is not set
+# CONFIG_SOC_CAMERA_RJ54N1 is not set
+# CONFIG_SOC_CAMERA_TW9910 is not set
+
+##
+## file: drivers/media/mmc/siano/Kconfig
+##
+CONFIG_SMS_SDIO_DRV=m
+
+##
+## file: drivers/media/pci/Kconfig
+##
+CONFIG_MEDIA_PCI_SUPPORT=y
+
+##
+## file: drivers/media/pci/b2c2/Kconfig
+##
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
+
+##
+## file: drivers/media/pci/bt8xx/Kconfig
+##
+CONFIG_VIDEO_BT848=m
+CONFIG_DVB_BT8XX=m
+
+##
+## file: drivers/media/pci/cx18/Kconfig
+##
+CONFIG_VIDEO_CX18=m
+CONFIG_VIDEO_CX18_ALSA=m
+
+##
+## file: drivers/media/pci/cx23885/Kconfig
+##
+CONFIG_VIDEO_CX23885=m
+CONFIG_MEDIA_ALTERA_CI=m
+
+##
+## file: drivers/media/pci/cx25821/Kconfig
+##
+# CONFIG_VIDEO_CX25821 is not set
+
+##
+## file: drivers/media/pci/cx88/Kconfig
+##
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_ENABLE_VP3054=y
+
+##
+## file: drivers/media/pci/ddbridge/Kconfig
+##
+CONFIG_DVB_DDBRIDGE=m
+
+##
+## file: drivers/media/pci/dm1105/Kconfig
+##
+CONFIG_DVB_DM1105=m
+
+##
+## file: drivers/media/pci/dt3155/Kconfig
+##
+CONFIG_VIDEO_DT3155=m
+
+##
+## file: drivers/media/pci/ivtv/Kconfig
+##
+CONFIG_VIDEO_IVTV=m
+CONFIG_VIDEO_IVTV_ALSA=m
+CONFIG_VIDEO_FB_IVTV=m
+
+##
+## file: drivers/media/pci/mantis/Kconfig
+##
+CONFIG_MANTIS_CORE=m
+CONFIG_DVB_MANTIS=m
+CONFIG_DVB_HOPPER=m
+
+##
+## file: drivers/media/pci/meye/Kconfig
+##
+CONFIG_VIDEO_MEYE=m
+
+##
+## file: drivers/media/pci/netup_unidvb/Kconfig
+##
+CONFIG_DVB_NETUP_UNIDVB=m
+
+##
+## file: drivers/media/pci/ngene/Kconfig
+##
+CONFIG_DVB_NGENE=m
+
+##
+## file: drivers/media/pci/pluto2/Kconfig
+##
+CONFIG_DVB_PLUTO2=m
+
+##
+## file: drivers/media/pci/pt1/Kconfig
+##
+CONFIG_DVB_PT1=m
+
+##
+## file: drivers/media/pci/pt3/Kconfig
+##
+CONFIG_DVB_PT3=m
+
+##
+## file: drivers/media/pci/saa7134/Kconfig
+##
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+CONFIG_VIDEO_SAA7134_RC=y
+CONFIG_VIDEO_SAA7134_DVB=m
+
+##
+## file: drivers/media/pci/saa7146/Kconfig
+##
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_MXB=m
+
+##
+## file: drivers/media/pci/saa7164/Kconfig
+##
+CONFIG_VIDEO_SAA7164=m
+
+##
+## file: drivers/media/pci/smipcie/Kconfig
+##
+CONFIG_DVB_SMIPCIE=m
+
+##
+## file: drivers/media/pci/solo6x10/Kconfig
+##
+CONFIG_VIDEO_SOLO6X10=m
+
+##
+## file: drivers/media/pci/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/pci/tw5864/Kconfig
+##
+CONFIG_VIDEO_TW5864=m
+
+##
+## file: drivers/media/pci/tw68/Kconfig
+##
+CONFIG_VIDEO_TW68=m
+
+##
+## file: drivers/media/pci/tw686x/Kconfig
+##
+CONFIG_VIDEO_TW686X=m
+
+##
+## file: drivers/media/pci/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/media/platform/Kconfig
+##
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set
+# CONFIG_VIDEO_SH_VEU is not set
+CONFIG_V4L_TEST_DRIVERS=y
+# CONFIG_VIDEO_VIM2M is not set
+# CONFIG_DVB_PLATFORM_DRIVERS is not set
+
+##
+## file: drivers/media/platform/marvell-ccic/Kconfig
+##
+CONFIG_VIDEO_CAFE_CCIC=m
+
+##
+## file: drivers/media/platform/soc_camera/Kconfig
+##
+# CONFIG_SOC_CAMERA is not set
+# CONFIG_SOC_CAMERA_PLATFORM is not set
+# CONFIG_VIDEO_SH_MOBILE_CEU is not set
+
+##
+## file: drivers/media/platform/vivid/Kconfig
+##
+CONFIG_VIDEO_VIVID=m
+CONFIG_VIDEO_VIVID_MAX_DEVS=64
+
+##
+## file: drivers/media/radio/Kconfig
+##
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_RADIO_SI470X=y
+# CONFIG_RADIO_SI4713 is not set
+CONFIG_USB_MR800=m
+CONFIG_RADIO_SHARK=m
+CONFIG_RADIO_SHARK2=m
+CONFIG_USB_KEENE=m
+CONFIG_USB_RAREMONO=m
+CONFIG_USB_MA901=m
+# CONFIG_RADIO_TEA5764 is not set
+# CONFIG_RADIO_SAA7706H is not set
+# CONFIG_RADIO_TEF6862 is not set
+# CONFIG_RADIO_WL1273 is not set
+
+##
+## file: drivers/media/radio/si470x/Kconfig
+##
+CONFIG_USB_SI470X=m
+# CONFIG_I2C_SI470X is not set
+
+##
+## file: drivers/media/radio/si4713/Kconfig
+##
+# CONFIG_I2C_SI4713 is not set
+
+##
+## file: drivers/media/radio/wl128x/Kconfig
+##
+# CONFIG_RADIO_WL128X is not set
+
+##
+## file: drivers/media/rc/Kconfig
+##
+CONFIG_RC_DECODERS=y
+CONFIG_LIRC=m
+CONFIG_IR_LIRC_CODEC=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_SANYO_DECODER=m
+CONFIG_IR_SHARP_DECODER=m
+CONFIG_IR_MCE_KBD_DECODER=m
+CONFIG_IR_XMP_DECODER=m
+CONFIG_RC_DEVICES=y
+CONFIG_RC_ATI_REMOTE=m
+CONFIG_IR_ENE=m
+# CONFIG_IR_HIX5HD2 is not set
+CONFIG_IR_IMON=m
+CONFIG_IR_MCEUSB=m
+# CONFIG_IR_NUVOTON is not set
+CONFIG_IR_REDRAT3=m
+CONFIG_IR_STREAMZAP=m
+CONFIG_IR_IGORPLUGUSB=m
+CONFIG_IR_IGUANA=m
+CONFIG_IR_TTUSBIR=m
+CONFIG_RC_LOOPBACK=m
+# CONFIG_IR_GPIO_CIR is not set
+
+##
+## file: drivers/media/rc/img-ir/Kconfig
+##
+# CONFIG_IR_IMG is not set
+
+##
+## file: drivers/media/rc/keymaps/Kconfig
+##
+CONFIG_RC_MAP=m
+
+##
+## file: drivers/media/tuners/Kconfig
+##
+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/usb/Kconfig
+##
+CONFIG_MEDIA_USB_SUPPORT=y
+
+##
+## file: drivers/media/usb/airspy/Kconfig
+##
+CONFIG_USB_AIRSPY=m
+
+##
+## file: drivers/media/usb/as102/Kconfig
+##
+CONFIG_DVB_AS102=m
+
+##
+## file: drivers/media/usb/au0828/Kconfig
+##
+CONFIG_VIDEO_AU0828=m
+CONFIG_VIDEO_AU0828_V4L2=y
+CONFIG_VIDEO_AU0828_RC=y
+
+##
+## file: drivers/media/usb/b2c2/Kconfig
+##
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set
+
+##
+## file: drivers/media/usb/cpia2/Kconfig
+##
+CONFIG_VIDEO_CPIA2=m
+
+##
+## file: drivers/media/usb/cx231xx/Kconfig
+##
+CONFIG_VIDEO_CX231XX=m
+CONFIG_VIDEO_CX231XX_RC=y
+CONFIG_VIDEO_CX231XX_ALSA=m
+CONFIG_VIDEO_CX231XX_DVB=m
+
+##
+## file: drivers/media/usb/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_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_PCTV452E=m
+CONFIG_DVB_USB_DW2102=m
+CONFIG_DVB_USB_CINERGY_T2=m
+CONFIG_DVB_USB_DTV5100=m
+CONFIG_DVB_USB_FRIIO=m
+CONFIG_DVB_USB_AZ6027=m
+CONFIG_DVB_USB_TECHNISAT_USB2=m
+
+##
+## file: drivers/media/usb/dvb-usb-v2/Kconfig
+##
+CONFIG_DVB_USB_V2=m
+CONFIG_DVB_USB_AF9015=m
+CONFIG_DVB_USB_AF9035=m
+CONFIG_DVB_USB_ANYSEE=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_AZ6007=m
+CONFIG_DVB_USB_CE6230=m
+CONFIG_DVB_USB_EC168=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_LME2510=m
+CONFIG_DVB_USB_MXL111SF=m
+CONFIG_DVB_USB_RTL28XXU=m
+CONFIG_DVB_USB_DVBSKY=m
+
+##
+## file: drivers/media/usb/em28xx/Kconfig
+##
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_V4L2=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_EM28XX_RC=y
+
+##
+## file: drivers/media/usb/go7007/Kconfig
+##
+CONFIG_VIDEO_GO7007=m
+CONFIG_VIDEO_GO7007_USB=m
+CONFIG_VIDEO_GO7007_LOADER=m
+CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m
+
+##
+## file: drivers/media/usb/gspca/Kconfig
+##
+CONFIG_USB_GSPCA=m
+CONFIG_USB_GSPCA_BENQ=m
+CONFIG_USB_GSPCA_CONEX=m
+CONFIG_USB_GSPCA_CPIA1=m
+CONFIG_USB_GSPCA_DTCS033=m
+CONFIG_USB_GSPCA_ETOMS=m
+CONFIG_USB_GSPCA_FINEPIX=m
+CONFIG_USB_GSPCA_JEILINJ=m
+CONFIG_USB_GSPCA_JL2005BCD=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_SE401=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_STK1135=m
+CONFIG_USB_GSPCA_STV0680=m
+CONFIG_USB_GSPCA_SUNPLUS=m
+CONFIG_USB_GSPCA_T613=m
+CONFIG_USB_GSPCA_TOPRO=m
+CONFIG_USB_GSPCA_TOUPTEK=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/usb/gspca/gl860/Kconfig
+##
+CONFIG_USB_GL860=m
+
+##
+## file: drivers/media/usb/gspca/m5602/Kconfig
+##
+CONFIG_USB_M5602=m
+
+##
+## file: drivers/media/usb/gspca/stv06xx/Kconfig
+##
+CONFIG_USB_STV06XX=m
+
+##
+## file: drivers/media/usb/hackrf/Kconfig
+##
+CONFIG_USB_HACKRF=m
+
+##
+## file: drivers/media/usb/hdpvr/Kconfig
+##
+CONFIG_VIDEO_HDPVR=m
+
+##
+## file: drivers/media/usb/msi2500/Kconfig
+##
+CONFIG_USB_MSI2500=m
+
+##
+## file: drivers/media/usb/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/usb/pwc/Kconfig
+##
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_PWC_INPUT_EVDEV=y
+
+##
+## file: drivers/media/usb/s2255/Kconfig
+##
+CONFIG_USB_S2255=m
+
+##
+## file: drivers/media/usb/siano/Kconfig
+##
+CONFIG_SMS_USB_DRV=m
+
+##
+## file: drivers/media/usb/stk1160/Kconfig
+##
+CONFIG_VIDEO_STK1160_COMMON=m
+CONFIG_VIDEO_STK1160_AC97=y
+
+##
+## file: drivers/media/usb/stkwebcam/Kconfig
+##
+CONFIG_USB_STKWEBCAM=m
+
+##
+## file: drivers/media/usb/ttusb-budget/Kconfig
+##
+CONFIG_DVB_TTUSB_BUDGET=m
+
+##
+## file: drivers/media/usb/ttusb-dec/Kconfig
+##
+CONFIG_DVB_TTUSB_DEC=m
+
+##
+## file: drivers/media/usb/usbtv/Kconfig
+##
+CONFIG_VIDEO_USBTV=m
+
+##
+## file: drivers/media/usb/usbvision/Kconfig
+##
+CONFIG_VIDEO_USBVISION=m
+
+##
+## file: drivers/media/usb/uvc/Kconfig
+##
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+
+##
+## file: drivers/media/usb/zr364xx/Kconfig
+##
+CONFIG_USB_ZR364XX=m
+
+##
+## file: drivers/media/v4l2-core/Kconfig
+##
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_PCI_SKELETON is not set
+
+##
+## file: drivers/memory/Kconfig
+##
+CONFIG_MEMORY=y
+
+##
+## 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
+# CONFIG_MS_BLOCK is not set
+
+##
+## file: drivers/memstick/host/Kconfig
+##
+CONFIG_MEMSTICK_TIFM_MS=m
+CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_MEMSTICK_R592=m
+CONFIG_MEMSTICK_REALTEK_PCI=m
+CONFIG_MEMSTICK_REALTEK_USB=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/mfd/Kconfig
+##
+# CONFIG_MFD_CS5535 is not set
+# CONFIG_MFD_AS3711 is not set
+# CONFIG_MFD_AS3722 is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_AAT2870_CORE is not set
+# CONFIG_MFD_ATMEL_FLEXCOM is not set
+# CONFIG_MFD_ATMEL_HLCDC is not set
+# CONFIG_MFD_BCM590XX is not set
+# CONFIG_MFD_AXP20X_I2C is not set
+# CONFIG_MFD_CROS_EC is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_DA9052_SPI is not set
+# CONFIG_MFD_DA9052_I2C is not set
+# CONFIG_MFD_DA9055 is not set
+# CONFIG_MFD_DA9062 is not set
+# CONFIG_MFD_DA9063 is not set
+# CONFIG_MFD_DA9150 is not set
+# CONFIG_MFD_DLN2 is not set
+# CONFIG_MFD_EXYNOS_LPASS is not set
+# CONFIG_MFD_MC13XXX_SPI is not set
+# CONFIG_MFD_MC13XXX_I2C is not set
+# CONFIG_MFD_HI6421_PMIC is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_I2CPLD is not set
+CONFIG_LPC_SCH=m
+# CONFIG_INTEL_SOC_PMIC is not set
+# CONFIG_MFD_INTEL_LPSS_ACPI is not set
+# CONFIG_MFD_INTEL_LPSS_PCI is not set
+# CONFIG_MFD_JANZ_CMODIO is not set
+# CONFIG_MFD_KEMPLD is not set
+# CONFIG_MFD_88PM800 is not set
+# CONFIG_MFD_88PM805 is not set
+# CONFIG_MFD_88PM860X is not set
+# CONFIG_MFD_MAX14577 is not set
+# CONFIG_MFD_MAX77686 is not set
+# CONFIG_MFD_MAX77693 is not set
+# CONFIG_MFD_MAX77843 is not set
+# CONFIG_MFD_MAX8907 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_MAX8997 is not set
+# CONFIG_MFD_MAX8998 is not set
+# CONFIG_MFD_MT6397 is not set
+# CONFIG_MFD_MENF21BMC is not set
+# CONFIG_EZX_PCAP is not set
+CONFIG_MFD_VIPERBOARD=m
+# CONFIG_MFD_RETU is not set
+# CONFIG_MFD_PCF50633 is not set
+CONFIG_PCF50633_ADC=m
+CONFIG_PCF50633_GPIO=m
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_MFD_RDC321X is not set
+CONFIG_MFD_RTSX_PCI=m
+# CONFIG_MFD_RT5033 is not set
+CONFIG_MFD_RTSX_USB=m
+# CONFIG_MFD_RC5T583 is not set
+# CONFIG_MFD_RK808 is not set
+# CONFIG_MFD_RN5T618 is not set
+# CONFIG_MFD_SEC_CORE is not set
+# CONFIG_MFD_SI476X_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_SKY81452 is not set
+# CONFIG_MFD_SMSC is not set
+# CONFIG_ABX500_CORE is not set
+# CONFIG_AB3100_CORE is not set
+CONFIG_AB3100_OTP=m
+# CONFIG_MFD_STMPE is not set
+# CONFIG_MFD_SYSCON is not set
+# CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
+# CONFIG_MFD_LP8788 is not set
+# CONFIG_MFD_PALMAS is not set
+# CONFIG_TPS6105X is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TPS6507X is not set
+# CONFIG_MFD_TPS65086 is not set
+# CONFIG_MFD_TPS65090 is not set
+# CONFIG_MFD_TPS65217 is not set
+# CONFIG_MFD_TI_LP873X is not set
+# CONFIG_MFD_TPS65218 is not set
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_MFD_TPS65910 is not set
+# CONFIG_MFD_TPS65912_I2C is not set
+# CONFIG_MFD_TPS65912_SPI is not set
+# CONFIG_MFD_TPS80031 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_TWL6040_CORE is not set
+# CONFIG_MFD_WL1273_CORE is not set
+# CONFIG_MFD_LM3533 is not set
+# CONFIG_MFD_TIMBERDALE is not set
+# CONFIG_MFD_TC3589X is not set
+# CONFIG_MFD_VX855 is not set
+# CONFIG_MFD_ARIZONA_I2C is not set
+# CONFIG_MFD_ARIZONA_SPI is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X_I2C is not set
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
+
+##
+## file: drivers/misc/Kconfig
+##
+CONFIG_AD525X_DPOT=m
+CONFIG_AD525X_DPOT_I2C=m
+CONFIG_AD525X_DPOT_SPI=m
+# CONFIG_DUMMY_IRQ is not set
+# CONFIG_INTEL_MID_PTI is not set
+CONFIG_SGI_IOC4=m
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+CONFIG_ICS932S401=m
+# CONFIG_ATMEL_SSC is not set
+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_BH1770=m
+CONFIG_SENSORS_APDS990X=m
+CONFIG_HMC6352=m
+CONFIG_DS1682=m
+CONFIG_TI_DAC7512=m
+# CONFIG_USB_SWITCH_FSA9480 is not set
+# CONFIG_LATTICE_ECP3_CONFIG is not set
+# CONFIG_SRAM is not set
+# CONFIG_PANEL is not set
+
+##
+## file: drivers/misc/altera-stapl/Kconfig
+##
+# CONFIG_ALTERA_STAPL 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/echo/Kconfig
+##
+# CONFIG_ECHO 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
+# CONFIG_EEPROM_93XX46 is not set
+
+##
+## file: drivers/misc/genwqe/Kconfig
+##
+# CONFIG_GENWQE 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=256
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST 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 is not set
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_TIFM_SD=m
+# CONFIG_MMC_SPI is not set
+CONFIG_MMC_SDRICOH_CS=m
+CONFIG_MMC_CB710=m
+CONFIG_MMC_VIA_SDMMC=m
+CONFIG_MMC_VUB300=m
+CONFIG_MMC_USHC=m
+# CONFIG_MMC_USDHI6ROL0 is not set
+CONFIG_MMC_REALTEK_PCI=m
+CONFIG_MMC_REALTEK_USB=m
+CONFIG_MMC_TOSHIBA_PCI=m
+# CONFIG_MMC_MTK is not set
+
+##
+## file: drivers/mtd/Kconfig
+##
+CONFIG_MTD=m
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_OF_PARTS=m
+CONFIG_MTD_AR7_PARTS=m
+CONFIG_MTD_BLOCK=m
+CONFIG_MTD_BLOCK_RO=m
+CONFIG_RFD_FTL=m
+CONFIG_SSFDC=m
+# CONFIG_SM_FTL is not set
+CONFIG_MTD_OOPS=m
+CONFIG_MTD_SWAP=m
+# CONFIG_MTD_PARTITIONED_MASTER is not set
+
+##
+## 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_MTD_SST25L=m
+# CONFIG_MTD_DOCG3 is not set
+
+##
+## file: drivers/mtd/lpddr/Kconfig
+##
+CONFIG_MTD_LPDDR=m
+
+##
+## file: drivers/mtd/maps/Kconfig
+##
+# CONFIG_MTD_PHYSMAP_OF is not set
+# CONFIG_MTD_ESB2ROM is not set
+# CONFIG_MTD_CK804XROM is not set
+CONFIG_MTD_PCMCIA=m
+# CONFIG_MTD_PCMCIA_ANONYMOUS is not set
+# 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_ECC_BCH=y
+# CONFIG_MTD_NAND_DENALI_PCI is not set
+# CONFIG_MTD_NAND_DENALI_DT is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_RICOH=m
+# CONFIG_MTD_NAND_DOCG4 is not set
+CONFIG_MTD_NAND_CAFE=m
+CONFIG_MTD_NAND_CS553X=m
+CONFIG_MTD_NAND_NANDSIM=m
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_NAND_HISI504 is not set
+# CONFIG_MTD_NAND_MTK is not set
+
+##
+## file: drivers/mtd/onenand/Kconfig
+##
+CONFIG_MTD_ONENAND=m
+CONFIG_MTD_ONENAND_VERIFY_WRITE=y
+# CONFIG_MTD_ONENAND_GENERIC is not set
+# CONFIG_MTD_ONENAND_OTP is not set
+CONFIG_MTD_ONENAND_2X_PROGRAM=y
+
+##
+## file: drivers/mtd/spi-nor/Kconfig
+##
+CONFIG_MTD_SPI_NOR=m
+# CONFIG_MTD_MT81xx_NOR is not set
+CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
+
+##
+## file: drivers/mtd/ubi/Kconfig
+##
+CONFIG_MTD_UBI=m
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_LIMIT=20
+# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_GLUEBI is not set
+CONFIG_MTD_UBI_BLOCK=y
+
+##
+## file: drivers/net/Kconfig
+##
+CONFIG_NETDEVICES=y
+CONFIG_NET_CORE=y
+CONFIG_BONDING=m
+CONFIG_DUMMY=m
+CONFIG_EQUALIZER=m
+CONFIG_IFB=m
+CONFIG_MACVLAN=m
+CONFIG_MACVTAP=m
+CONFIG_IPVLAN=m
+CONFIG_VXLAN=m
+CONFIG_GENEVE=m
+CONFIG_GTP=m
+CONFIG_MACSEC=m
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_TUN=m
+# CONFIG_TUN_VNET_CROSS_LE is not set
+CONFIG_VETH=m
+CONFIG_VIRTIO_NET=m
+CONFIG_NLMON=m
+CONFIG_NET_VRF=m
+CONFIG_XEN_NETDEV_FRONTEND=m
+CONFIG_XEN_NETDEV_BACKEND=m
+# CONFIG_VMXNET3 is not set
+# CONFIG_FUJITSU_ES is not set
+
+##
+## file: drivers/net/appletalk/Kconfig
+##
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=y
+CONFIG_LTPC=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+
+##
+## file: drivers/net/can/Kconfig
+##
+CONFIG_CAN_VCAN=m
+CONFIG_CAN_SLCAN=m
+CONFIG_CAN_DEV=m
+CONFIG_CAN_CALC_BITTIMING=y
+# CONFIG_CAN_LEDS is not set
+# CONFIG_CAN_GRCAN 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/cc770/Kconfig
+##
+# CONFIG_CAN_CC770 is not set
+
+##
+## file: drivers/net/can/ifi_canfd/Kconfig
+##
+# CONFIG_CAN_IFI_CANFD is not set
+
+##
+## file: drivers/net/can/m_can/Kconfig
+##
+# CONFIG_CAN_M_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_PCMCIA=m
+CONFIG_CAN_EMS_PCI=m
+CONFIG_CAN_PEAK_PCMCIA=m
+CONFIG_CAN_PEAK_PCI=m
+CONFIG_CAN_PEAK_PCIEC=y
+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/spi/Kconfig
+##
+# CONFIG_CAN_MCP251X is not set
+
+##
+## file: drivers/net/can/usb/Kconfig
+##
+CONFIG_CAN_EMS_USB=m
+CONFIG_CAN_ESD_USB2=m
+CONFIG_CAN_GS_USB=m
+CONFIG_CAN_KVASER_USB=m
+CONFIG_CAN_PEAK_USB=m
+CONFIG_CAN_8DEV_USB=m
+
+##
+## file: drivers/net/dsa/Kconfig
+##
+# CONFIG_NET_DSA_MV88E6060 is not set
+# CONFIG_NET_DSA_BCM_SF2 is not set
+
+##
+## file: drivers/net/dsa/mv88e6xxx/Kconfig
+##
+# CONFIG_NET_DSA_MV88E6XXX is not set
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+CONFIG_ETHERNET=y
+# CONFIG_DNET is not set
+CONFIG_JME=m
+# CONFIG_ETHOC is not set
+
+##
+## file: drivers/net/ethernet/agere/Kconfig
+##
+CONFIG_NET_VENDOR_AGERE=y
+CONFIG_ET131X=m
+
+##
+## file: drivers/net/ethernet/alteon/Kconfig
+##
+CONFIG_NET_VENDOR_ALTEON=y
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+
+##
+## file: drivers/net/ethernet/amazon/Kconfig
+##
+CONFIG_NET_VENDOR_AMAZON=y
+CONFIG_ENA_ETHERNET=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+CONFIG_NET_VENDOR_AMD=y
+CONFIG_PCNET32=m
+
+##
+## file: drivers/net/ethernet/apm/xgene/Kconfig
+##
+# CONFIG_NET_XGENE is not set
+
+##
+## file: drivers/net/ethernet/arc/Kconfig
+##
+# CONFIG_NET_VENDOR_ARC is not set
+
+##
+## file: drivers/net/ethernet/atheros/Kconfig
+##
+CONFIG_NET_VENDOR_ATHEROS=y
+CONFIG_ATL2=m
+CONFIG_ATL1=m
+CONFIG_ATL1E=m
+CONFIG_ATL1C=m
+CONFIG_ALX=m
+
+##
+## file: drivers/net/ethernet/aurora/Kconfig
+##
+# CONFIG_NET_VENDOR_AURORA is not set
+
+##
+## file: drivers/net/ethernet/broadcom/Kconfig
+##
+CONFIG_NET_VENDOR_BROADCOM=y
+# CONFIG_BCMGENET is not set
+CONFIG_BNX2=m
+CONFIG_CNIC=m
+CONFIG_TIGON3=m
+CONFIG_BNX2X=m
+CONFIG_BNX2X_SRIOV=y
+# CONFIG_SYSTEMPORT is not set
+CONFIG_BNXT=m
+CONFIG_BNXT_SRIOV=y
+
+##
+## file: drivers/net/ethernet/brocade/Kconfig
+##
+CONFIG_NET_VENDOR_BROCADE=y
+
+##
+## file: drivers/net/ethernet/brocade/bna/Kconfig
+##
+CONFIG_BNA=m
+
+##
+## file: drivers/net/ethernet/cadence/Kconfig
+##
+CONFIG_NET_CADENCE=y
+# CONFIG_MACB is not set
+
+##
+## file: drivers/net/ethernet/calxeda/Kconfig
+##
+# CONFIG_NET_CALXEDA_XGMAC is not set
+
+##
+## file: drivers/net/ethernet/cavium/Kconfig
+##
+CONFIG_NET_VENDOR_CAVIUM=y
+# CONFIG_THUNDER_NIC_PF is not set
+# CONFIG_THUNDER_NIC_VF is not set
+# CONFIG_THUNDER_NIC_BGX is not set
+# CONFIG_THUNDER_NIC_RGX is not set
+CONFIG_LIQUIDIO=m
+
+##
+## file: drivers/net/ethernet/chelsio/Kconfig
+##
+CONFIG_NET_VENDOR_CHELSIO=y
+CONFIG_CHELSIO_T1=m
+CONFIG_CHELSIO_T1_1G=y
+CONFIG_CHELSIO_T3=m
+CONFIG_CHELSIO_T4=m
+CONFIG_CHELSIO_T4_DCB=y
+CONFIG_CHELSIO_T4_FCOE=y
+CONFIG_CHELSIO_T4VF=m
+
+##
+## file: drivers/net/ethernet/cirrus/Kconfig
+##
+# CONFIG_CS89x0_PLATFORM is not set
+
+##
+## file: drivers/net/ethernet/cisco/Kconfig
+##
+CONFIG_NET_VENDOR_CISCO=y
+
+##
+## file: drivers/net/ethernet/cisco/enic/Kconfig
+##
+CONFIG_ENIC=m
+
+##
+## file: drivers/net/ethernet/dec/Kconfig
+##
+CONFIG_NET_VENDOR_DEC=y
+
+##
+## file: drivers/net/ethernet/dec/tulip/Kconfig
+##
+CONFIG_DE2104X_DSL=0
+CONFIG_TULIP_NAPI=y
+CONFIG_TULIP_NAPI_HW_MITIGATION=y
+# CONFIG_DE4X5 is not set
+CONFIG_ULI526X=m
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+CONFIG_NET_VENDOR_DLINK=y
+CONFIG_DL2K=m
+
+##
+## file: drivers/net/ethernet/emulex/Kconfig
+##
+CONFIG_NET_VENDOR_EMULEX=y
+
+##
+## file: drivers/net/ethernet/emulex/benet/Kconfig
+##
+CONFIG_BE2NET=m
+CONFIG_BE2NET_HWMON=y
+
+##
+## file: drivers/net/ethernet/ezchip/Kconfig
+##
+CONFIG_NET_VENDOR_EZCHIP=y
+# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set
+
+##
+## file: drivers/net/ethernet/i825xx/Kconfig
+##
+CONFIG_NET_VENDOR_I825XX=y
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_NET_VENDOR_INTEL=y
+CONFIG_E1000=m
+CONFIG_E1000E=m
+CONFIG_E1000E_HWTS=y
+CONFIG_IGB=m
+CONFIG_IGB_HWMON=y
+CONFIG_IGB_DCA=y
+CONFIG_IGBVF=m
+CONFIG_IXGB=m
+CONFIG_IXGBE=m
+CONFIG_IXGBE_HWMON=y
+CONFIG_IXGBE_DCA=y
+CONFIG_IXGBE_DCB=y
+CONFIG_IXGBEVF=m
+CONFIG_I40E=m
+CONFIG_I40E_DCB=y
+CONFIG_I40E_FCOE=y
+CONFIG_I40EVF=m
+# CONFIG_FM10K is not set
+
+##
+## file: drivers/net/ethernet/marvell/Kconfig
+##
+CONFIG_NET_VENDOR_MARVELL=y
+# CONFIG_MVMDIO is not set
+CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
+CONFIG_SKGE_GENESIS=y
+CONFIG_SKY2=m
+# CONFIG_SKY2_DEBUG is not set
+
+##
+## file: drivers/net/ethernet/mellanox/Kconfig
+##
+CONFIG_NET_VENDOR_MELLANOX=y
+
+##
+## file: drivers/net/ethernet/mellanox/mlx4/Kconfig
+##
+CONFIG_MLX4_EN=m
+CONFIG_MLX4_EN_DCB=y
+CONFIG_MLX4_DEBUG=y
+
+##
+## file: drivers/net/ethernet/mellanox/mlx5/core/Kconfig
+##
+CONFIG_MLX5_CORE=m
+CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_EN_DCB=y
+
+##
+## file: drivers/net/ethernet/mellanox/mlxsw/Kconfig
+##
+# CONFIG_MLXSW_CORE is not set
+
+##
+## file: drivers/net/ethernet/micrel/Kconfig
+##
+CONFIG_NET_VENDOR_MICREL=y
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+CONFIG_KSZ884X_PCI=m
+
+##
+## file: drivers/net/ethernet/microchip/Kconfig
+##
+CONFIG_NET_VENDOR_MICROCHIP=y
+# CONFIG_ENC28J60 is not set
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+# CONFIG_ENCX24J600 is not set
+
+##
+## file: drivers/net/ethernet/myricom/Kconfig
+##
+CONFIG_NET_VENDOR_MYRI=y
+CONFIG_MYRI10GE=m
+CONFIG_MYRI10GE_DCA=y
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NET_VENDOR_NATSEMI=y
+CONFIG_NS83820=m
+
+##
+## file: drivers/net/ethernet/neterion/Kconfig
+##
+CONFIG_NET_VENDOR_EXAR=y
+CONFIG_S2IO=m
+CONFIG_VXGE=m
+# CONFIG_VXGE_DEBUG_TRACE_ALL is not set
+
+##
+## file: drivers/net/ethernet/netronome/Kconfig
+##
+CONFIG_NET_VENDOR_NETRONOME=y
+CONFIG_NFP_NETVF=m
+
+##
+## file: drivers/net/ethernet/oki-semi/Kconfig
+##
+CONFIG_NET_VENDOR_OKI=y
+
+##
+## file: drivers/net/ethernet/packetengines/Kconfig
+##
+CONFIG_NET_PACKET_ENGINE=y
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+
+##
+## file: drivers/net/ethernet/qlogic/Kconfig
+##
+CONFIG_NET_VENDOR_QLOGIC=y
+CONFIG_QLA3XXX=m
+CONFIG_QLCNIC=m
+CONFIG_QLCNIC_SRIOV=y
+CONFIG_QLCNIC_DCB=y
+CONFIG_QLCNIC_HWMON=y
+CONFIG_QLGE=m
+CONFIG_NETXEN_NIC=m
+CONFIG_QED=m
+CONFIG_QED_SRIOV=y
+CONFIG_QEDE=m
+
+##
+## file: drivers/net/ethernet/qualcomm/Kconfig
+##
+CONFIG_NET_VENDOR_QUALCOMM=y
+# CONFIG_QCA7000 is not set
+# CONFIG_QCOM_EMAC is not set
+
+##
+## file: drivers/net/ethernet/rdc/Kconfig
+##
+CONFIG_NET_VENDOR_RDC=y
+CONFIG_R6040=m
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_NET_VENDOR_REALTEK=y
+# CONFIG_8139TOO_PIO is not set
+CONFIG_8139TOO_TUNE_TWISTER=y
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_R8169=m
+
+##
+## file: drivers/net/ethernet/renesas/Kconfig
+##
+CONFIG_NET_VENDOR_RENESAS=y
+# CONFIG_SH_ETH is not set
+
+##
+## file: drivers/net/ethernet/rocker/Kconfig
+##
+CONFIG_NET_VENDOR_ROCKER=y
+# CONFIG_ROCKER is not set
+
+##
+## file: drivers/net/ethernet/samsung/Kconfig
+##
+CONFIG_NET_VENDOR_SAMSUNG=y
+# CONFIG_SXGBE_ETH is not set
+
+##
+## file: drivers/net/ethernet/seeq/Kconfig
+##
+# CONFIG_NET_VENDOR_SEEQ is not set
+
+##
+## file: drivers/net/ethernet/sfc/Kconfig
+##
+CONFIG_SFC=m
+CONFIG_SFC_MTD=y
+CONFIG_SFC_MCDI_MON=y
+CONFIG_SFC_SRIOV=y
+CONFIG_SFC_MCDI_LOGGING=y
+
+##
+## file: drivers/net/ethernet/silan/Kconfig
+##
+CONFIG_NET_VENDOR_SILAN=y
+CONFIG_SC92031=m
+
+##
+## file: drivers/net/ethernet/sis/Kconfig
+##
+CONFIG_NET_VENDOR_SIS=y
+CONFIG_SIS190=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_NET_VENDOR_SMSC=y
+# CONFIG_SMSC911X is not set
+CONFIG_SMSC9420=m
+
+##
+## file: drivers/net/ethernet/stmicro/Kconfig
+##
+CONFIG_NET_VENDOR_STMICRO=y
+
+##
+## file: drivers/net/ethernet/stmicro/stmmac/Kconfig
+##
+# CONFIG_STMMAC_ETH is not set
+
+##
+## file: drivers/net/ethernet/sun/Kconfig
+##
+CONFIG_NET_VENDOR_SUN=y
+CONFIG_CASSINI=m
+CONFIG_NIU=m
+
+##
+## file: drivers/net/ethernet/synopsys/Kconfig
+##
+CONFIG_NET_VENDOR_SYNOPSYS=y
+# CONFIG_SYNOPSYS_DWC_ETH_QOS is not set
+
+##
+## file: drivers/net/ethernet/tehuti/Kconfig
+##
+CONFIG_NET_VENDOR_TEHUTI=y
+CONFIG_TEHUTI=m
+
+##
+## file: drivers/net/ethernet/ti/Kconfig
+##
+CONFIG_NET_VENDOR_TI=y
+# CONFIG_TI_CPSW_ALE is not set
+CONFIG_TLAN=m
+
+##
+## file: drivers/net/ethernet/via/Kconfig
+##
+CONFIG_NET_VENDOR_VIA=y
+CONFIG_VIA_VELOCITY=m
+
+##
+## file: drivers/net/ethernet/wiznet/Kconfig
+##
+CONFIG_NET_VENDOR_WIZNET=y
+# CONFIG_WIZNET_W5100 is not set
+# CONFIG_WIZNET_W5300 is not set
+
+##
+## file: drivers/net/fddi/Kconfig
+##
+CONFIG_DEFXX=m
+# CONFIG_DEFXX_MMIO is not set
+
+##
+## 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/ieee802154/Kconfig
+##
+CONFIG_IEEE802154_DRIVERS=m
+CONFIG_IEEE802154_FAKELB=m
+CONFIG_IEEE802154_AT86RF230=m
+CONFIG_IEEE802154_MRF24J40=m
+CONFIG_IEEE802154_CC2520=m
+CONFIG_IEEE802154_ATUSB=m
+CONFIG_IEEE802154_ADF7242=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/phy/Kconfig
+##
+CONFIG_PHYLIB=m
+# CONFIG_MDIO_BCM_UNIMAC is not set
+# CONFIG_MDIO_BITBANG is not set
+# CONFIG_MDIO_BUS_MUX_GPIO is not set
+# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+# CONFIG_MDIO_GPIO is not set
+# CONFIG_MDIO_OCTEON is not set
+# CONFIG_MDIO_THUNDER is not set
+CONFIG_AMD_PHY=m
+CONFIG_AQUANTIA_PHY=m
+CONFIG_AT803X_PHY=m
+# CONFIG_BCM63XX_PHY is not set
+# CONFIG_BCM7XXX_PHY is not set
+CONFIG_BCM87XX_PHY=m
+CONFIG_BROADCOM_PHY=m
+CONFIG_CICADA_PHY=m
+CONFIG_DAVICOM_PHY=m
+CONFIG_DP83848_PHY=m
+CONFIG_DP83867_PHY=m
+#. Must only be enabled for specific flavours
+# CONFIG_FIXED_PHY is not set
+CONFIG_ICPLUS_PHY=m
+# CONFIG_INTEL_XWAY_PHY is not set
+CONFIG_LSI_ET1011C_PHY=m
+CONFIG_LXT_PHY=m
+CONFIG_MARVELL_PHY=m
+CONFIG_MICREL_PHY=m
+CONFIG_MICROCHIP_PHY=m
+CONFIG_MICROSEMI_PHY=m
+CONFIG_NATIONAL_PHY=m
+CONFIG_QSEMI_PHY=m
+CONFIG_REALTEK_PHY=m
+CONFIG_SMSC_PHY=m
+CONFIG_STE10XP=m
+CONFIG_TERANETICS_PHY=m
+CONFIG_VITESSE_PHY=m
+# CONFIG_XILINX_GMII2RGMII is not set
+# CONFIG_MICREL_KS8995MA is not set
+
+##
+## file: drivers/net/ppp/Kconfig
+##
+CONFIG_PPP=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_MPPE=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPPOATM=m
+CONFIG_PPPOE=m
+CONFIG_PPTP=m
+CONFIG_PPPOL2TP=m
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+
+##
+## file: drivers/net/slip/Kconfig
+##
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+CONFIG_SLIP_MODE_SLIP6=y
+
+##
+## file: drivers/net/team/Kconfig
+##
+CONFIG_NET_TEAM=m
+CONFIG_NET_TEAM_MODE_BROADCAST=m
+CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
+CONFIG_NET_TEAM_MODE_RANDOM=m
+CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
+CONFIG_NET_TEAM_MODE_LOADBALANCE=m
+
+##
+## file: drivers/net/usb/Kconfig
+##
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_RTL8152=m
+CONFIG_USB_LAN78XX=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_AX88179_178A=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_HUAWEI_CDC_NCM=m
+CONFIG_USB_NET_CDC_MBIM=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=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_NET_QMI_WWAN=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
+CONFIG_USB_NET_CH9200=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
+
+##
+## file: drivers/net/wimax/i2400m/Kconfig
+##
+CONFIG_WIMAX_I2400M_USB=m
+CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
+
+##
+## file: drivers/net/wireless/Kconfig
+##
+CONFIG_WLAN=y
+CONFIG_MAC80211_HWSIM=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+
+##
+## file: drivers/net/wireless/admtek/Kconfig
+##
+CONFIG_WLAN_VENDOR_ADMTEK=y
+CONFIG_ADM8211=m
+
+##
+## file: drivers/net/wireless/ath/Kconfig
+##
+CONFIG_WLAN_VENDOR_ATH=y
+# CONFIG_ATH_DEBUG is not set
+
+##
+## file: drivers/net/wireless/ath/ar5523/Kconfig
+##
+CONFIG_AR5523=m
+
+##
+## file: drivers/net/wireless/ath/ath10k/Kconfig
+##
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+# CONFIG_ATH10K_DEBUG is not set
+# CONFIG_ATH10K_DEBUGFS is not set
+# CONFIG_ATH10K_TRACING 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/ath6kl/Kconfig
+##
+CONFIG_ATH6KL=m
+CONFIG_ATH6KL_SDIO=m
+CONFIG_ATH6KL_USB=m
+# CONFIG_ATH6KL_DEBUG is not set
+# CONFIG_ATH6KL_TRACING is not set
+
+##
+## file: drivers/net/wireless/ath/ath9k/Kconfig
+##
+CONFIG_ATH9K_BTCOEX_SUPPORT=y
+CONFIG_ATH9K=m
+CONFIG_ATH9K_PCI=y
+# CONFIG_ATH9K_AHB is not set
+# CONFIG_ATH9K_DEBUGFS is not set
+# CONFIG_ATH9K_DYNACK is not set
+# CONFIG_ATH9K_WOW is not set
+CONFIG_ATH9K_RFKILL=y
+CONFIG_ATH9K_PCOEM=y
+CONFIG_ATH9K_HTC=m
+# CONFIG_ATH9K_HTC_DEBUGFS is not set
+# CONFIG_ATH9K_HWRNG is not set
+
+##
+## file: drivers/net/wireless/ath/carl9170/Kconfig
+##
+CONFIG_CARL9170=m
+CONFIG_CARL9170_LEDS=y
+# CONFIG_CARL9170_DEBUGFS is not set
+# CONFIG_CARL9170_HWRNG is not set
+
+##
+## file: drivers/net/wireless/ath/wcn36xx/Kconfig
+##
+# CONFIG_WCN36XX is not set
+
+##
+## file: drivers/net/wireless/ath/wil6210/Kconfig
+##
+CONFIG_WIL6210=m
+CONFIG_WIL6210_ISR_COR=y
+CONFIG_WIL6210_TRACING=y
+
+##
+## file: drivers/net/wireless/atmel/Kconfig
+##
+CONFIG_WLAN_VENDOR_ATMEL=y
+CONFIG_AT76C50X_USB=m
+
+##
+## file: drivers/net/wireless/broadcom/Kconfig
+##
+CONFIG_WLAN_VENDOR_BROADCOM=y
+
+##
+## file: drivers/net/wireless/broadcom/b43/Kconfig
+##
+CONFIG_B43=m
+CONFIG_B43_SDIO=y
+CONFIG_B43_PHY_G=y
+CONFIG_B43_PHY_N=y
+CONFIG_B43_PHY_LP=y
+CONFIG_B43_PHY_HT=y
+# CONFIG_B43_DEBUG is not set
+
+##
+## file: drivers/net/wireless/broadcom/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/broadcom/brcm80211/Kconfig
+##
+CONFIG_BRCMSMAC=m
+CONFIG_BRCMFMAC=m
+# CONFIG_BRCMFMAC_SDIO is not set
+CONFIG_BRCMFMAC_USB=y
+CONFIG_BRCMFMAC_PCIE=y
+# CONFIG_BRCM_TRACING is not set
+# CONFIG_BRCMDBG is not set
+
+##
+## file: drivers/net/wireless/cisco/Kconfig
+##
+CONFIG_WLAN_VENDOR_CISCO=y
+CONFIG_AIRO=m
+
+##
+## file: drivers/net/wireless/intel/Kconfig
+##
+CONFIG_WLAN_VENDOR_INTEL=y
+
+##
+## file: drivers/net/wireless/intel/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/intel/iwlegacy/Kconfig
+##
+CONFIG_IWL4965=m
+CONFIG_IWL3945=m
+# CONFIG_IWLEGACY_DEBUG is not set
+
+##
+## file: drivers/net/wireless/intel/iwlwifi/Kconfig
+##
+CONFIG_IWLWIFI=m
+CONFIG_IWLDVM=m
+CONFIG_IWLMVM=m
+# CONFIG_IWLWIFI_BCAST_FILTERING is not set
+# CONFIG_IWLWIFI_DEBUG is not set
+# CONFIG_IWLWIFI_DEVICE_TRACING is not set
+
+##
+## file: drivers/net/wireless/intersil/Kconfig
+##
+CONFIG_WLAN_VENDOR_INTERSIL=y
+# CONFIG_PRISM54 is not set
+
+##
+## file: drivers/net/wireless/intersil/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/intersil/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/intersil/p54/Kconfig
+##
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_P54_PCI=m
+# CONFIG_P54_SPI is not set
+# CONFIG_P54_SPI_DEFAULT_EEPROM is not set
+
+##
+## file: drivers/net/wireless/marvell/Kconfig
+##
+CONFIG_WLAN_VENDOR_MARVELL=y
+CONFIG_MWL8K=m
+
+##
+## file: drivers/net/wireless/marvell/libertas/Kconfig
+##
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_SPI is not set
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_LIBERTAS_MESH=y
+
+##
+## file: drivers/net/wireless/marvell/libertas_tf/Kconfig
+##
+CONFIG_LIBERTAS_THINFIRM=m
+# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set
+CONFIG_LIBERTAS_THINFIRM_USB=m
+
+##
+## file: drivers/net/wireless/mediatek/Kconfig
+##
+CONFIG_WLAN_VENDOR_MEDIATEK=y
+
+##
+## file: drivers/net/wireless/mediatek/mt7601u/Kconfig
+##
+CONFIG_MT7601U=m
+
+##
+## file: drivers/net/wireless/ralink/Kconfig
+##
+CONFIG_WLAN_VENDOR_RALINK=y
+
+##
+## file: drivers/net/wireless/ralink/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_RT2800PCI_RT3290=y
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+CONFIG_RT2800USB=m
+CONFIG_RT2800USB_RT33XX=y
+CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT3573=y
+CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
+# CONFIG_RT2800USB_UNKNOWN is not set
+# CONFIG_RT2X00_DEBUG is not set
+
+##
+## file: drivers/net/wireless/realtek/Kconfig
+##
+CONFIG_WLAN_VENDOR_REALTEK=y
+
+##
+## file: drivers/net/wireless/realtek/rtl818x/Kconfig
+##
+CONFIG_RTL8180=m
+CONFIG_RTL8187=m
+
+##
+## file: drivers/net/wireless/realtek/rtl8xxxu/Kconfig
+##
+CONFIG_RTL8XXXU=m
+# CONFIG_RTL8XXXU_UNTESTED is not set
+
+##
+## file: drivers/net/wireless/realtek/rtlwifi/Kconfig
+##
+CONFIG_RTL_CARDS=m
+CONFIG_RTL8192CE=m
+CONFIG_RTL8192SE=m
+CONFIG_RTL8192DE=m
+CONFIG_RTL8723AE=m
+CONFIG_RTL8723BE=m
+CONFIG_RTL8188EE=m
+CONFIG_RTL8192EE=m
+CONFIG_RTL8821AE=m
+CONFIG_RTL8192CU=m
+# CONFIG_RTLWIFI_DEBUG is not set
+
+##
+## file: drivers/net/wireless/rsi/Kconfig
+##
+CONFIG_WLAN_VENDOR_RSI=y
+CONFIG_RSI_91X=m
+CONFIG_RSI_DEBUGFS=y
+# CONFIG_RSI_SDIO is not set
+CONFIG_RSI_USB=m
+
+##
+## file: drivers/net/wireless/st/Kconfig
+##
+CONFIG_WLAN_VENDOR_ST=y
+
+##
+## file: drivers/net/wireless/st/cw1200/Kconfig
+##
+# CONFIG_CW1200 is not set
+
+##
+## file: drivers/net/wireless/ti/Kconfig
+##
+# CONFIG_WLAN_VENDOR_TI is not set
+
+##
+## file: drivers/net/wireless/zydas/Kconfig
+##
+CONFIG_WLAN_VENDOR_ZYDAS=y
+
+##
+## file: drivers/net/wireless/zydas/zd1211rw/Kconfig
+##
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+##
+## file: drivers/nfc/Kconfig
+##
+# CONFIG_NFC_TRF7970A is not set
+CONFIG_NFC_SIM=m
+CONFIG_NFC_PORT100=m
+
+##
+## file: drivers/nfc/microread/Kconfig
+##
+# CONFIG_NFC_MICROREAD_I2C is not set
+# CONFIG_NFC_MICROREAD_MEI is not set
+
+##
+## file: drivers/nfc/pn533/Kconfig
+##
+CONFIG_NFC_PN533_USB=m
+# CONFIG_NFC_PN533_I2C is not set
+
+##
+## file: drivers/nfc/st21nfca/Kconfig
+##
+# CONFIG_NFC_ST21NFCA_I2C is not set
+
+##
+## file: drivers/nfc/st95hf/Kconfig
+##
+# CONFIG_NFC_ST95HF is not set
+
+##
+## file: drivers/ntb/Kconfig
+##
+# CONFIG_NTB is not set
+
+##
+## file: drivers/nvdimm/Kconfig
+##
+CONFIG_NVDIMM_DAX=y
+
+##
+## file: drivers/nvme/host/Kconfig
+##
+CONFIG_BLK_DEV_NVME=m
+# CONFIG_BLK_DEV_NVME_SCSI is not set
+CONFIG_NVME_RDMA=m
+
+##
+## file: drivers/nvme/target/Kconfig
+##
+CONFIG_NVME_TARGET=m
+# CONFIG_NVME_TARGET_LOOP is not set
+CONFIG_NVME_TARGET_RDMA=m
+
+##
+## file: drivers/of/Kconfig
+##
+# CONFIG_OF is not set
+# CONFIG_OF_UNITTEST is not set
+# CONFIG_OF_OVERLAY is not set
+
+##
+## 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 is not set
+CONFIG_PARPORT_1284=y
+
+##
+## file: drivers/pci/Kconfig
+##
+CONFIG_PCI_MSI=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_PCI_REALLOC_ENABLE_AUTO=y
+CONFIG_PCI_STUB=m
+CONFIG_XEN_PCIDEV_FRONTEND=m
+CONFIG_PCI_IOV=y
+# CONFIG_PCI_PRI is not set
+# CONFIG_PCI_PASID is not set
+
+##
+## file: drivers/pci/host/Kconfig
+##
+# CONFIG_PCIE_DW_PLAT is not set
+
+##
+## file: drivers/pci/hotplug/Kconfig
+##
+CONFIG_HOTPLUG_PCI_CPCI=y
+
+##
+## file: drivers/pci/pcie/Kconfig
+##
+CONFIG_PCIEPORTBUS=y
+CONFIG_HOTPLUG_PCI_PCIE=y
+CONFIG_PCIEASPM=y
+# CONFIG_PCIEASPM_DEBUG is not set
+CONFIG_PCIE_DPC=y
+CONFIG_PCIE_PTM=y
+
+##
+## 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/phy/Kconfig
+##
+# CONFIG_GENERIC_PHY is not set
+# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
+# CONFIG_PHY_PXA_28NM_HSIC is not set
+# CONFIG_PHY_PXA_28NM_USB2 is not set
+# CONFIG_OMAP_CONTROL_PHY is not set
+# CONFIG_OMAP_USB2 is not set
+# CONFIG_TWL4030_USB is not set
+# CONFIG_PHY_EXYNOS_DP_VIDEO is not set
+# CONFIG_BCM_KONA_USB2_PHY is not set
+# CONFIG_PHY_SAMSUNG_USB2 is not set
+
+##
+## file: drivers/pinctrl/Kconfig
+##
+# CONFIG_PINMUX is not set
+# CONFIG_PINCONF is not set
+# CONFIG_DEBUG_PINCTRL is not set
+# CONFIG_PINCTRL_AMD is not set
+# CONFIG_PINCTRL_SINGLE is not set
+
+##
+## file: drivers/pinctrl/intel/Kconfig
+##
+# CONFIG_PINCTRL_BAYTRAIL is not set
+# CONFIG_PINCTRL_CHERRYVIEW is not set
+# CONFIG_PINCTRL_BROXTON is not set
+# CONFIG_PINCTRL_SUNRISEPOINT is not set
+
+##
+## file: drivers/platform/goldfish/Kconfig
+##
+# CONFIG_GOLDFISH is not set
+
+##
+## 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_SAMSUNG_LAPTOP is not set
+
+##
+## file: drivers/pnp/Kconfig
+##
+# CONFIG_PNP_DEBUG_MESSAGES is not set
+
+##
+## file: drivers/power/avs/Kconfig
+##
+# CONFIG_POWER_AVS is not set
+
+##
+## file: drivers/power/reset/Kconfig
+##
+# CONFIG_POWER_RESET is not set
+
+##
+## file: drivers/power/supply/Kconfig
+##
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_GENERIC_ADC_BATTERY is not set
+CONFIG_WM831X_POWER=m
+CONFIG_WM8350_POWER=m
+# CONFIG_TEST_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2780 is not set
+# CONFIG_BATTERY_DS2781 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ27XXX is not set
+# CONFIG_BATTERY_MAX17040 is not set
+# CONFIG_BATTERY_MAX17042 is not set
+CONFIG_CHARGER_PCF50633=m
+# CONFIG_CHARGER_ISP1704 is not set
+# CONFIG_CHARGER_MAX8903 is not set
+# CONFIG_CHARGER_LP8727 is not set
+# CONFIG_CHARGER_GPIO is not set
+# CONFIG_CHARGER_BQ2415X is not set
+# CONFIG_CHARGER_BQ24190 is not set
+# CONFIG_CHARGER_BQ24257 is not set
+# CONFIG_CHARGER_BQ24735 is not set
+# CONFIG_CHARGER_BQ25890 is not set
+# CONFIG_CHARGER_SMB347 is not set
+# CONFIG_BATTERY_GAUGE_LTC2941 is not set
+# CONFIG_CHARGER_RT9455 is not set
+
+##
+## file: drivers/pps/Kconfig
+##
+CONFIG_PPS=m
+# CONFIG_PPS_DEBUG is not set
+# CONFIG_NTP_PPS 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
+# CONFIG_PPS_CLIENT_GPIO is not set
+
+##
+## file: drivers/ptp/Kconfig
+##
+CONFIG_PTP_1588_CLOCK=m
+CONFIG_PTP_1588_CLOCK_GIANFAR=m
+CONFIG_PTP_1588_CLOCK_IXP46X=m
+
+##
+## file: drivers/pwm/Kconfig
+##
+# CONFIG_PWM is not set
+
+##
+## file: drivers/regulator/Kconfig
+##
+# CONFIG_REGULATOR is not set
+
+##
+## file: drivers/remoteproc/Kconfig
+##
+# CONFIG_STE_MODEM_RPROC is not set
+
+##
+## file: drivers/reset/Kconfig
+##
+# CONFIG_RESET_CONTROLLER is not set
+
+##
+## file: drivers/rtc/Kconfig
+##
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_SYSTOHC=y
+CONFIG_RTC_SYSTOHC_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_ABB5ZES3 is not set
+# CONFIG_RTC_DRV_ABX80X is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_HYM8563 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_ISL12022 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8523 is not set
+# CONFIG_RTC_DRV_PCF85063 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_M41T80_WDT is not set
+# CONFIG_RTC_DRV_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8010 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+# CONFIG_RTC_DRV_EM3027 is not set
+# CONFIG_RTC_DRV_RV8803 is not set
+# CONFIG_RTC_DRV_M41T93 is not set
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1302 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1343 is not set
+# CONFIG_RTC_DRV_DS1347 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6916 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RX4581 is not set
+# CONFIG_RTC_DRV_RX6110 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+# CONFIG_RTC_DRV_MCP795 is not set
+# CONFIG_RTC_DRV_DS3232 is not set
+# CONFIG_RTC_DRV_PCF2127 is not set
+# CONFIG_RTC_DRV_RV3029C2 is not set
+CONFIG_RTC_DRV_CMOS=m
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1685_FAMILY is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_DS2404 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+CONFIG_RTC_DRV_WM831X=m
+CONFIG_RTC_DRV_WM8350=m
+CONFIG_RTC_DRV_PCF50633=m
+CONFIG_RTC_DRV_AB3100=m
+# CONFIG_RTC_DRV_ZYNQMP is not set
+# CONFIG_RTC_DRV_SNVS is not set
+# CONFIG_RTC_DRV_MOXART is not set
+# CONFIG_RTC_DRV_XGENE is not set
+# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
+
+##
+## file: drivers/scsi/Kconfig
+##
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=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_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+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_ACARD=m
+CONFIG_SCSI_AHA152X=m
+CONFIG_SCSI_AHA1542=m
+CONFIG_SCSI_AHA1740=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_MVUMI=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_HPTIOP=m
+CONFIG_XEN_SCSI_FRONTEND=m
+CONFIG_LIBFC=m
+CONFIG_LIBFCOE=m
+CONFIG_FCOE=m
+CONFIG_FCOE_FNIC=m
+CONFIG_SCSI_SNIC=m
+# CONFIG_SCSI_SNIC_DEBUG_FS is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# 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_WD719X=m
+# CONFIG_SCSI_DEBUG is not set
+CONFIG_SCSI_PMCRAID=m
+CONFIG_SCSI_PM8001=m
+CONFIG_SCSI_BFA_FC=m
+CONFIG_SCSI_VIRTIO=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/csiostor/Kconfig
+##
+CONFIG_SCSI_CHELSIO_FCOE=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=y
+CONFIG_SCSI_DH_RDAC=m
+CONFIG_SCSI_DH_HP_SW=m
+CONFIG_SCSI_DH_EMC=m
+CONFIG_SCSI_DH_ALUA=m
+
+##
+## file: drivers/scsi/esas2r/Kconfig
+##
+CONFIG_SCSI_ESAS2R=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/mpt3sas/Kconfig
+##
+CONFIG_SCSI_MPT3SAS=m
+CONFIG_SCSI_MPT2SAS_MAX_SGE=128
+CONFIG_SCSI_MPT3SAS_MAX_SGE=128
+CONFIG_SCSI_MPT2SAS=m
+
+##
+## file: drivers/scsi/mvsas/Kconfig
+##
+CONFIG_SCSI_MVSAS=m
+# CONFIG_SCSI_MVSAS_DEBUG is not set
+# CONFIG_SCSI_MVSAS_TASKLET 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
+CONFIG_TCM_QLA2XXX=m
+# CONFIG_TCM_QLA2XXX_DEBUG is not set
+
+##
+## file: drivers/scsi/qla4xxx/Kconfig
+##
+CONFIG_SCSI_QLA_ISCSI=m
+
+##
+## file: drivers/scsi/smartpqi/Kconfig
+##
+CONFIG_SCSI_SMARTPQI=m
+
+##
+## file: drivers/scsi/ufs/Kconfig
+##
+CONFIG_SCSI_UFSHCD=m
+CONFIG_SCSI_UFSHCD_PCI=m
+# CONFIG_SCSI_UFS_DWC_TC_PCI is not set
+# CONFIG_SCSI_UFSHCD_PLATFORM is not set
+
+##
+## file: drivers/soc/ti/Kconfig
+##
+# CONFIG_SOC_TI is not set
+
+##
+## file: drivers/spi/Kconfig
+##
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+# CONFIG_SPI_ALTERA is not set
+# CONFIG_SPI_AXI_SPI_ENGINE is not set
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_BUTTERFLY=m
+# CONFIG_SPI_CADENCE is not set
+# CONFIG_SPI_DESIGNWARE is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_LM70_LLP=m
+# CONFIG_SPI_FSL_SPI is not set
+# CONFIG_SPI_FSL_DSPI is not set
+# CONFIG_SPI_OC_TINY is not set
+# CONFIG_SPI_PXA2XX is not set
+# CONFIG_SPI_ROCKCHIP is not set
+# CONFIG_SPI_SC18IS602 is not set
+# CONFIG_SPI_TOPCLIFF_PCH is not set
+# CONFIG_SPI_XCOMM is not set
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_ZYNQMP_GQSPI is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_LOOPBACK_TEST is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+##
+## file: drivers/spmi/Kconfig
+##
+# CONFIG_SPMI is not set
+
+##
+## file: drivers/ssb/Kconfig
+##
+CONFIG_SSB=m
+CONFIG_SSB_PCMCIAHOST=y
+# CONFIG_SSB_HOST_SOC is not set
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+# CONFIG_SSB_DRIVER_GPIO is not set
+
+##
+## file: drivers/staging/Kconfig
+##
+CONFIG_STAGING=y
+
+##
+## file: drivers/staging/board/Kconfig
+##
+# CONFIG_STAGING_BOARD is not set
+
+##
+## file: drivers/staging/clocking-wizard/Kconfig
+##
+# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
+
+##
+## file: drivers/staging/comedi/Kconfig
+##
+# CONFIG_COMEDI is not set
+
+##
+## file: drivers/staging/dgnc/Kconfig
+##
+# CONFIG_DGNC is not set
+
+##
+## file: drivers/staging/fbtft/Kconfig
+##
+# CONFIG_FB_TFT is not set
+
+##
+## file: drivers/staging/gdm724x/Kconfig
+##
+# CONFIG_LTE_GDM724X is not set
+
+##
+## file: drivers/staging/greybus/Kconfig
+##
+# CONFIG_GREYBUS is not set
+
+##
+## file: drivers/staging/gs_fpgaboot/Kconfig
+##
+# CONFIG_GS_FPGABOOT is not set
+
+##
+## file: drivers/staging/iio/accel/Kconfig
+##
+# CONFIG_ADIS16201 is not set
+# CONFIG_ADIS16203 is not set
+# CONFIG_ADIS16209 is not set
+# CONFIG_ADIS16240 is not set
+# CONFIG_SCA3000 is not set
+
+##
+## file: drivers/staging/iio/adc/Kconfig
+##
+# CONFIG_AD7606 is not set
+# CONFIG_AD7780 is not set
+# CONFIG_AD7816 is not set
+# CONFIG_AD7192 is not set
+# CONFIG_AD7280 is not set
+
+##
+## file: drivers/staging/iio/addac/Kconfig
+##
+# CONFIG_ADT7316 is not set
+
+##
+## file: drivers/staging/iio/cdc/Kconfig
+##
+# CONFIG_AD7150 is not set
+# CONFIG_AD7152 is not set
+# CONFIG_AD7746 is not set
+
+##
+## file: drivers/staging/iio/frequency/Kconfig
+##
+# CONFIG_AD9832 is not set
+# CONFIG_AD9834 is not set
+
+##
+## file: drivers/staging/iio/gyro/Kconfig
+##
+# CONFIG_ADIS16060 is not set
+
+##
+## file: drivers/staging/iio/impedance-analyzer/Kconfig
+##
+# CONFIG_AD5933 is not set
+
+##
+## file: drivers/staging/iio/light/Kconfig
+##
+# CONFIG_SENSORS_ISL29028 is not set
+# CONFIG_TSL2583 is not set
+# CONFIG_TSL2x7x is not set
+
+##
+## file: drivers/staging/iio/meter/Kconfig
+##
+# CONFIG_ADE7753 is not set
+# CONFIG_ADE7754 is not set
+# CONFIG_ADE7758 is not set
+# CONFIG_ADE7759 is not set
+# CONFIG_ADE7854 is not set
+
+##
+## file: drivers/staging/iio/resolver/Kconfig
+##
+# CONFIG_AD2S90 is not set
+# CONFIG_AD2S1200 is not set
+# CONFIG_AD2S1210 is not set
+
+##
+## file: drivers/staging/lustre/lustre/Kconfig
+##
+# CONFIG_LUSTRE_FS is not set
+
+##
+## file: drivers/staging/media/Kconfig
+##
+# CONFIG_STAGING_MEDIA is not set
+
+##
+## file: drivers/staging/media/lirc/Kconfig
+##
+# CONFIG_LIRC_STAGING is not set
+# CONFIG_LIRC_PARALLEL is not set
+
+##
+## file: drivers/staging/most/Kconfig
+##
+# CONFIG_MOST is not set
+
+##
+## file: drivers/staging/mt29f_spinand/Kconfig
+##
+# CONFIG_MTD_SPINAND_MT29F is not set
+
+##
+## file: drivers/staging/rtl8188eu/Kconfig
+##
+CONFIG_R8188EU=m
+CONFIG_88EU_AP_MODE=y
+
+##
+## file: drivers/staging/rtl8192e/Kconfig
+##
+# CONFIG_RTLLIB is not set
+
+##
+## file: drivers/staging/rtl8192e/rtl8192e/Kconfig
+##
+# CONFIG_RTL8192E is not set
+
+##
+## file: drivers/staging/rtl8192u/Kconfig
+##
+# CONFIG_RTL8192U is not set
+
+##
+## file: drivers/staging/rtl8712/Kconfig
+##
+CONFIG_R8712U=m
+
+##
+## file: drivers/staging/rts5208/Kconfig
+##
+# CONFIG_RTS5208 is not set
+
+##
+## file: drivers/staging/skein/Kconfig
+##
+# CONFIG_CRYPTO_SKEIN is not set
+
+##
+## file: drivers/staging/slicoss/Kconfig
+##
+# CONFIG_SLICOSS is not set
+
+##
+## file: drivers/staging/sm750fb/Kconfig
+##
+# CONFIG_FB_SM750 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/vt6655/Kconfig
+##
+# CONFIG_VT6655 is not set
+
+##
+## file: drivers/staging/vt6656/Kconfig
+##
+# CONFIG_VT6656 is not set
+
+##
+## file: drivers/staging/wlan-ng/Kconfig
+##
+# CONFIG_PRISM2_USB is not set
+
+##
+## file: drivers/staging/xgifb/Kconfig
+##
+# CONFIG_FB_XGI is not set
+
+##
+## file: drivers/target/Kconfig
+##
+CONFIG_TARGET_CORE=m
+CONFIG_TCM_IBLOCK=m
+CONFIG_TCM_FILEIO=m
+CONFIG_TCM_PSCSI=m
+CONFIG_TCM_USER2=m
+
+##
+## file: drivers/target/iscsi/Kconfig
+##
+CONFIG_ISCSI_TARGET=m
+
+##
+## file: drivers/target/iscsi/cxgbit/Kconfig
+##
+CONFIG_ISCSI_TARGET_CXGB4=m
+
+##
+## file: drivers/target/loopback/Kconfig
+##
+CONFIG_LOOPBACK_TARGET=m
+
+##
+## file: drivers/target/sbp/Kconfig
+##
+CONFIG_SBP_TARGET=m
+
+##
+## file: drivers/target/tcm_fc/Kconfig
+##
+CONFIG_TCM_FC=m
+
+##
+## file: drivers/thermal/Kconfig
+##
+CONFIG_THERMAL_HWMON=y
+## choice: Default Thermal governor
+CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
+# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
+## end choice
+CONFIG_THERMAL_GOV_FAIR_SHARE=y
+# CONFIG_THERMAL_GOV_STEP_WISE is not set
+# CONFIG_THERMAL_GOV_BANG_BANG is not set
+# CONFIG_THERMAL_GOV_USER_SPACE is not set
+# CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set
+# CONFIG_THERMAL_EMULATION is not set
+# CONFIG_GENERIC_ADC_THERMAL is not set
+
+##
+## file: drivers/tty/Kconfig
+##
+CONFIG_TTY=y
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_MOXA_SMARTIO=m
+CONFIG_SYNCLINK_GT=m
+CONFIG_NOZOMI=m
+CONFIG_N_GSM=m
+# CONFIG_TRACE_SINK is not set
+
+##
+## file: drivers/tty/hvc/Kconfig
+##
+CONFIG_HVC_XEN=y
+CONFIG_HVC_XEN_FRONTEND=y
+
+##
+## file: drivers/tty/serial/Kconfig
+##
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_MAX310X is not set
+# CONFIG_SERIAL_UARTLITE is not set
+# CONFIG_SERIAL_SCCNXP is not set
+# CONFIG_SERIAL_SC16IS7XX is not set
+# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
+# CONFIG_SERIAL_IFX6X60 is not set
+# CONFIG_SERIAL_XILINX_PS_UART is not set
+# CONFIG_SERIAL_ARC is not set
+CONFIG_SERIAL_RP2=m
+CONFIG_SERIAL_RP2_NR_UARTS=32
+# CONFIG_SERIAL_FSL_LPUART is not set
+# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set
+# CONFIG_SERIAL_ST_ASC is not set
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_DMA=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_FOURPORT=m
+CONFIG_SERIAL_8250_ACCENT=m
+CONFIG_SERIAL_8250_BOCA=m
+CONFIG_SERIAL_8250_HUB6=m
+# CONFIG_SERIAL_8250_DW is not set
+# CONFIG_SERIAL_8250_RT288X is not set
+# CONFIG_SERIAL_8250_MID is not set
+CONFIG_SERIAL_8250_MOXA=m
+CONFIG_SERIAL_OF_PLATFORM=m
+
+##
+## file: drivers/uio/Kconfig
+##
+CONFIG_UIO=m
+CONFIG_UIO_CIF=m
+# CONFIG_UIO_PDRV_GENIRQ is not set
+# CONFIG_UIO_DMEM_GENIRQ is not set
+CONFIG_UIO_AEC=m
+CONFIG_UIO_SERCOS3=m
+CONFIG_UIO_PCI_GENERIC=m
+CONFIG_UIO_NETX=m
+# CONFIG_UIO_PRUSS is not set
+CONFIG_UIO_MF624=m
+
+##
+## file: drivers/usb/Kconfig
+##
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_LED_TRIG=y
+# CONFIG_USB_ULPI_BUS is not set
+
+##
+## file: drivers/usb/atm/Kconfig
+##
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+
+##
+## file: drivers/usb/chipidea/Kconfig
+##
+# CONFIG_USB_CHIPIDEA is not set
+
+##
+## 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_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_DEFAULT_PERSIST=y
+CONFIG_USB_DYNAMIC_MINORS=y
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+# CONFIG_USB_OTG_FSM is not set
+CONFIG_USB_LEDS_TRIGGER_USBPORT=m
+
+##
+## file: drivers/usb/dwc2/Kconfig
+##
+# CONFIG_USB_DWC2 is not set
+
+##
+## file: drivers/usb/dwc3/Kconfig
+##
+# CONFIG_USB_DWC3 is not set
+
+##
+## file: drivers/usb/gadget/Kconfig
+##
+# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
+CONFIG_USB_CONFIGFS=m
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_PHONET=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_LB_SS=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_UAC1=y
+CONFIG_USB_CONFIGFS_F_UAC2=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_USB_CONFIGFS_F_UVC=y
+CONFIG_USB_CONFIGFS_F_PRINTER=y
+
+##
+## file: drivers/usb/gadget/legacy/Kconfig
+##
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FUNCTIONFS=m
+CONFIG_USB_FUNCTIONFS_ETH=y
+CONFIG_USB_FUNCTIONFS_RNDIS=y
+CONFIG_USB_FUNCTIONFS_GENERIC=y
+CONFIG_USB_G_SERIAL=m
+
+##
+## file: drivers/usb/gadget/udc/Kconfig
+##
+# CONFIG_USB_FUSB300 is not set
+# CONFIG_USB_FOTG210_UDC is not set
+# CONFIG_USB_GR_UDC is not set
+# CONFIG_USB_R8A66597 is not set
+# CONFIG_USB_PXA27X is not set
+# CONFIG_USB_MV_UDC is not set
+# CONFIG_USB_MV_U3D is not set
+# CONFIG_USB_M66592 is not set
+# CONFIG_USB_AMD5536UDC is not set
+# CONFIG_USB_NET2272 is not set
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GOKU is not set
+# CONFIG_USB_GADGET_XILINX is not set
+# CONFIG_USB_DUMMY_HCD is not set
+
+##
+## file: drivers/usb/gadget/udc/bdc/Kconfig
+##
+# CONFIG_USB_BDC_UDC is not set
+
+##
+## file: drivers/usb/host/Kconfig
+##
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_XHCI_HCD=m
+# CONFIG_USB_XHCI_PLATFORM is not set
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_EHCI_HCD_PLATFORM is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_FOTG210_HCD is not set
+# CONFIG_USB_MAX3421_HCD is not set
+CONFIG_USB_OHCI_HCD_PCI=y
+# CONFIG_USB_OHCI_HCD_PLATFORM is not set
+CONFIG_USB_U132_HCD=m
+# CONFIG_USB_R8A66597_HCD is not set
+CONFIG_USB_WHCI_HCD=m
+CONFIG_USB_HWA_HCD=m
+# CONFIG_USB_HCD_BCMA is not set
+# CONFIG_USB_HCD_SSB is not set
+# CONFIG_USB_HCD_TEST_MODE is not set
+
+##
+## file: drivers/usb/image/Kconfig
+##
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+##
+## file: drivers/usb/isp1760/Kconfig
+##
+# CONFIG_USB_ISP1760 is not set
+
+##
+## 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_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_EHSET_TEST_FIXTURE=m
+CONFIG_USB_ISIGHTFW=m
+CONFIG_USB_YUREX=m
+# CONFIG_USB_HSIC_USB3503 is not set
+# CONFIG_USB_HSIC_USB4604 is not set
+# CONFIG_USB_LINK_LAYER_TEST is not set
+CONFIG_USB_CHAOSKEY=m
+CONFIG_UCSI=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/musb/Kconfig
+##
+# CONFIG_USB_MUSB_HDRC is not set
+
+##
+## file: drivers/usb/phy/Kconfig
+##
+# CONFIG_AB8500_USB is not set
+# CONFIG_FSL_USB2_OTG is not set
+# CONFIG_ISP1301_OMAP is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_AM335X_PHY_USB is not set
+# CONFIG_TWL6030_USB is not set
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ISP1301 is not set
+# CONFIG_USB_MSM_OTG is not set
+# CONFIG_USB_MV_OTG is not set
+# CONFIG_USB_MXS_PHY is not set
+# CONFIG_USB_ULPI is not set
+
+##
+## file: drivers/usb/renesas_usbhs/Kconfig
+##
+# CONFIG_USB_RENESAS_USBHS is not set
+
+##
+## file: drivers/usb/serial/Kconfig
+##
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_SIMPLE=m
+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_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_F81232=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_METRO=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7715_PARPORT=y
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MXUPORT=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_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+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_XSENS_MT=m
+CONFIG_USB_SERIAL_WISHBONE=m
+CONFIG_USB_SERIAL_SSU100=m
+CONFIG_USB_SERIAL_QT2=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_REALTEK_AUTOPM=y
+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
+
+##
+## file: drivers/usb/usbip/Kconfig
+##
+# CONFIG_USBIP_CORE is not set
+CONFIG_USBIP_VUDC=m
+
+##
+## 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/vfio/Kconfig
+##
+# CONFIG_VFIO_NOIOMMU is not set
+
+##
+## file: drivers/vhost/Kconfig
+##
+CONFIG_VHOST_NET=m
+CONFIG_VHOST_SCSI=m
+CONFIG_VHOST_VSOCK=m
+# CONFIG_VHOST_CROSS_ENDIAN_LEGACY 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_PM8941_WLED is not set
+# CONFIG_BACKLIGHT_SAHARA is not set
+CONFIG_BACKLIGHT_WM831X=m
+# CONFIG_BACKLIGHT_ADP8860 is not set
+# CONFIG_BACKLIGHT_ADP8870 is not set
+# CONFIG_BACKLIGHT_LM3639 is not set
+# CONFIG_BACKLIGHT_OT200 is not set
+# CONFIG_BACKLIGHT_GPIO is not set
+# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_BD6107 is not set
+
+##
+## file: drivers/video/console/Kconfig
+##
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_DUMMY_CONSOLE_COLUMNS=80
+CONFIG_DUMMY_CONSOLE_ROWS=25
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_ARC=m
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_OPENCORES is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_I740 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_SMSCUFX=m
+CONFIG_FB_UDL=m
+# CONFIG_FB_IBM_GXT4500 is not set
+# CONFIG_FB_GOLDFISH is not set
+CONFIG_XEN_FBDEV_FRONTEND=y
+# CONFIG_FB_METRONOME is not set
+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
+# CONFIG_FB_AUO_K190X is not set
+# CONFIG_FB_SSD1307 is not set
+# CONFIG_FB_SM712 is not set
+
+##
+## file: drivers/video/logo/Kconfig
+##
+# CONFIG_LOGO is not set
+
+##
+## file: drivers/virt/Kconfig
+##
+CONFIG_VIRT_DRIVERS=y
+
+##
+## file: drivers/virtio/Kconfig
+##
+CONFIG_VIRTIO_PCI=m
+CONFIG_VIRTIO_PCI_LEGACY=y
+CONFIG_VIRTIO_BALLOON=m
+CONFIG_VIRTIO_INPUT=m
+# CONFIG_VIRTIO_MMIO is not set
+
+##
+## file: drivers/vme/Kconfig
+##
+# CONFIG_VME_BUS is not set
+
+##
+## file: drivers/w1/Kconfig
+##
+CONFIG_W1=m
+CONFIG_W1_CON=y
+
+##
+## file: drivers/w1/masters/Kconfig
+##
+# CONFIG_W1_MASTER_MATROX is not set
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+# CONFIG_W1_MASTER_DS1WM is not set
+CONFIG_W1_MASTER_GPIO=m
+
+##
+## file: drivers/w1/slaves/Kconfig
+##
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+# CONFIG_W1_SLAVE_DS2408 is not set
+# CONFIG_W1_SLAVE_DS2413 is not set
+# CONFIG_W1_SLAVE_DS2406 is not set
+# CONFIG_W1_SLAVE_DS2423 is not set
+CONFIG_W1_SLAVE_DS2431=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+# CONFIG_W1_SLAVE_DS2760 is not set
+# CONFIG_W1_SLAVE_DS2780 is not set
+# CONFIG_W1_SLAVE_DS2781 is not set
+# CONFIG_W1_SLAVE_DS28E04 is not set
+CONFIG_W1_SLAVE_BQ27000=m
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+CONFIG_WATCHDOG_SYSFS=y
+CONFIG_SOFT_WATCHDOG=m
+# CONFIG_GPIO_WATCHDOG is not set
+CONFIG_WM831X_WATCHDOG=m
+CONFIG_WM8350_WATCHDOG=m
+# CONFIG_XILINX_WATCHDOG is not set
+# CONFIG_ZIIRAVE_WATCHDOG is not set
+# CONFIG_CADENCE_WATCHDOG is not set
+# CONFIG_DW_WATCHDOG is not set
+# CONFIG_MAX63XX_WATCHDOG is not set
+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_SBC_EPX_C3_WATCHDOG=m
+# CONFIG_BCM7038_WDT is not set
+# CONFIG_MEN_A21_WDT is not set
+CONFIG_XEN_WDT=m
+
+##
+## file: drivers/xen/Kconfig
+##
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=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_PCIDEV_BACKEND=m
+CONFIG_XEN_SCSI_BACKEND=m
+CONFIG_XEN_MCE_LOG=y
+
+##
+## file: fs/Kconfig
+##
+CONFIG_FS_DAX=y
+CONFIG_FILE_LOCKING=y
+CONFIG_MANDATORY_FILE_LOCKING=y
+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
+CONFIG_9P_FS_SECURITY=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_SCRIPT=y
+CONFIG_BINFMT_MISC=m
+CONFIG_COREDUMP=y
+
+##
+## file: fs/btrfs/Kconfig
+##
+CONFIG_BTRFS_FS=m
+CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
+# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
+# CONFIG_BTRFS_DEBUG is not set
+# CONFIG_BTRFS_ASSERT is not set
+
+##
+## 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
+CONFIG_CEPH_FSCACHE=y
+CONFIG_CEPH_FS_POSIX_ACL=y
+
+##
+## 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_ACL=y
+CONFIG_CIFS_DEBUG=y
+# CONFIG_CIFS_DEBUG2 is not set
+CONFIG_CIFS_DFS_UPCALL=y
+CONFIG_CIFS_NFSD_EXPORT=y
+CONFIG_CIFS_SMB2=y
+CONFIG_CIFS_FSCACHE=y
+
+##
+## file: fs/coda/Kconfig
+##
+CONFIG_CODA_FS=m
+
+##
+## file: fs/configfs/Kconfig
+##
+CONFIG_CONFIGFS_FS=m
+
+##
+## file: fs/cramfs/Kconfig
+##
+# CONFIG_CRAMFS is not set
+
+##
+## file: fs/crypto/Kconfig
+##
+CONFIG_FS_ENCRYPTION=m
+
+##
+## file: fs/dlm/Kconfig
+##
+CONFIG_DLM=m
+CONFIG_DLM_DEBUG=y
+
+##
+## file: fs/ecryptfs/Kconfig
+##
+CONFIG_ECRYPT_FS=m
+CONFIG_ECRYPT_FS_MESSAGING=y
+
+##
+## file: fs/efivarfs/Kconfig
+##
+CONFIG_EFIVAR_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 is not set
+
+##
+## file: fs/ext4/Kconfig
+##
+# CONFIG_EXT3_FS is not set
+CONFIG_EXT4_FS=m
+CONFIG_EXT4_USE_FOR_EXT2=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_EXT4_ENCRYPTION=y
+# CONFIG_EXT4_DEBUG is not set
+
+##
+## file: fs/f2fs/Kconfig
+##
+CONFIG_F2FS_FS=m
+CONFIG_F2FS_STAT_FS=y
+CONFIG_F2FS_FS_XATTR=y
+CONFIG_F2FS_FS_POSIX_ACL=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_ENCRYPTION=y
+# CONFIG_F2FS_IO_TRACE is not set
+# CONFIG_F2FS_FAULT_INJECTION is not set
+
+##
+## file: fs/fat/Kconfig
+##
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+#. Mitigate the lack of UTF-8 case-folding which makes FAT name lookup
+#. inconsistent (#833238).  This combination enables case-folding the
+#. ASCII subset while still encoding/decoding as UTF-8.
+CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
+CONFIG_FAT_DEFAULT_UTF8=y
+
+##
+## 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
+CONFIG_CUSE=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
+# CONFIG_HFSPLUS_FS_POSIX_ACL is not set
+
+##
+## 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/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 is not set
+
+##
+## 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_V2=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_SWAP=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
+CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
+# CONFIG_NFS_V4_1_MIGRATION is not set
+CONFIG_NFS_FSCACHE=y
+# CONFIG_NFS_USE_LEGACY_DNS is not set
+
+##
+## file: fs/nfsd/Kconfig
+##
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_BLOCKLAYOUT=y
+CONFIG_NFSD_V4_SECURITY_LABEL=y
+# CONFIG_NFSD_FAULT_INJECTION is not set
+
+##
+## 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_MAC_ROMAN=m
+CONFIG_NLS_MAC_CELTIC=m
+CONFIG_NLS_MAC_CENTEURO=m
+CONFIG_NLS_MAC_CROATIAN=m
+CONFIG_NLS_MAC_CYRILLIC=m
+CONFIG_NLS_MAC_GAELIC=m
+CONFIG_NLS_MAC_GREEK=m
+CONFIG_NLS_MAC_ICELAND=m
+CONFIG_NLS_MAC_INUIT=m
+CONFIG_NLS_MAC_ROMANIAN=m
+CONFIG_NLS_MAC_TURKISH=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=y
+
+##
+## 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 is not set
+
+##
+## 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/orangefs/Kconfig
+##
+# CONFIG_ORANGEFS_FS is not set
+
+##
+## file: fs/overlayfs/Kconfig
+##
+CONFIG_OVERLAY_FS=m
+
+##
+## file: fs/proc/Kconfig
+##
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+
+##
+## file: fs/pstore/Kconfig
+##
+# CONFIG_PSTORE_CONSOLE is not set
+# CONFIG_PSTORE_PMSG is not set
+# CONFIG_PSTORE_FTRACE is not set
+CONFIG_PSTORE_RAM=m
+
+##
+## file: fs/qnx4/Kconfig
+##
+CONFIG_QNX4FS_FS=m
+
+##
+## file: fs/qnx6/Kconfig
+##
+CONFIG_QNX6FS_FS=m
+# CONFIG_QNX6FS_DEBUG is not set
+
+##
+## 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_ZLIB=y
+# CONFIG_SQUASHFS_LZ4 is not set
+CONFIG_SQUASHFS_LZO=y
+CONFIG_SQUASHFS_XZ=y
+# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
+# CONFIG_SQUASHFS_EMBEDDED is not set
+
+##
+## file: fs/sysfs/Kconfig
+##
+CONFIG_SYSFS=y
+
+##
+## file: fs/sysv/Kconfig
+##
+CONFIG_SYSV_FS=m
+
+##
+## file: fs/ubifs/Kconfig
+##
+CONFIG_UBIFS_FS=m
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+
+##
+## 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_WARN is not set
+# CONFIG_XFS_DEBUG is not set
+
+##
+## file: init/Kconfig
+##
+CONFIG_CROSS_COMPILE=""
+# CONFIG_COMPILE_TEST is not set
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+## choice: Kernel compression mode
+CONFIG_KERNEL_XZ=y
+## end choice
+CONFIG_DEFAULT_HOSTNAME="(none)"
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_CROSS_MEMORY_ATTACH=y
+CONFIG_FHANDLE=y
+# CONFIG_USELIB is not set
+CONFIG_AUDIT=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+# CONFIG_RCU_EXPERT is not set
+CONFIG_RCU_FANOUT=32
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_RCU_KTHREAD_PRIO=0
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=17
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
+CONFIG_NUMA_BALANCING=y
+# CONFIG_NUMA_BALANCING_DEFAULT_ENABLED is not set
+CONFIG_CGROUPS=y
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+# CONFIG_MEMCG_SWAP_ENABLED is not set
+CONFIG_BLK_CGROUP=y
+# CONFIG_DEBUG_BLK_CGROUP is not set
+CONFIG_CGROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_FREEZER=y
+# CONFIG_CGROUP_HUGETLB is not set
+CONFIG_CPUSETS=y
+CONFIG_PROC_PID_CPUSET=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_PERF=y
+# CONFIG_CGROUP_DEBUG is not set
+CONFIG_CHECKPOINT_RESTORE=y
+CONFIG_NAMESPACES=y
+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
+## choice: Compiler optimization level
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+## end choice
+#. Unfortunately some useful options are conditional on EXPERT
+CONFIG_EXPERT=y
+CONFIG_UID16=y
+CONFIG_MULTIUSER=y
+# CONFIG_SYSFS_SYSCALL is not set
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_PCSPKR_PLATFORM=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_ADVISE_SYSCALLS=y
+CONFIG_USERFAULTFD=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_MEMBARRIER=y
+# CONFIG_EMBEDDED is not set
+CONFIG_PERF_EVENTS=y
+# 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_SLAB_FREELIST_RANDOM=y
+# CONFIG_MMAP_ALLOW_UNINITIALIZED is not set
+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
+#. This is overridden if the [build]signed-modules setting is enabled
+# CONFIG_MODULE_SIG is not set
+#. Signature validation is a run-time option
+# CONFIG_MODULE_SIG_FORCE is not set
+#. Signatures are added in linux-signed
+# CONFIG_MODULE_SIG_ALL is not set
+## choice: Which hash algorithm should modules be signed with?
+CONFIG_MODULE_SIG_SHA256=y
+## end choice
+# CONFIG_MODULE_COMPRESS is not set
+# CONFIG_TRIM_UNUSED_KSYMS 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/irq/Kconfig
+##
+# CONFIG_IRQ_DOMAIN_DEBUG is not set
+
+##
+## file: kernel/power/Kconfig
+##
+CONFIG_SUSPEND=y
+# CONFIG_SUSPEND_SKIP_SYNC is not set
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION=""
+# CONFIG_PM_AUTOSLEEP is not set
+# CONFIG_PM_WAKELOCKS is not set
+CONFIG_PM=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_ADVANCED_DEBUG=y
+#. Could be enabled if it becomes configurable at run-time
+# CONFIG_DPM_WATCHDOG is not set
+# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
+
+##
+## 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
+##
+## choice: Timer tick handling
+CONFIG_NO_HZ_IDLE=y
+## end choice
+#. Backward compatibility symbol
+# CONFIG_NO_HZ is not set
+CONFIG_HIGH_RES_TIMERS=y
+
+##
+## file: kernel/trace/Kconfig
+##
+CONFIG_FTRACE=y
+CONFIG_FUNCTION_TRACER=y
+CONFIG_FUNCTION_GRAPH_TRACER=y
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+CONFIG_FTRACE_SYSCALLS=y
+CONFIG_TRACER_SNAPSHOT=y
+# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP 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=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_KPROBE_EVENT=y
+CONFIG_UPROBE_EVENT=y
+CONFIG_DYNAMIC_FTRACE=y
+# CONFIG_FUNCTION_PROFILER is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_MMIOTRACE_TEST is not set
+# CONFIG_TRACEPOINT_BENCHMARK is not set
+# CONFIG_RING_BUFFER_BENCHMARK is not set
+# CONFIG_RING_BUFFER_STARTUP_TEST is not set
+# CONFIG_TRACE_ENUM_MAP_FILE is not set
+CONFIG_TRACING_EVENTS_GPIO=y
+
+##
+## file: lib/Kconfig
+##
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC_T10DIF=m
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+# CONFIG_CRC32_SELFTEST is not set
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+# CONFIG_CRC8 is not set
+# CONFIG_RANDOM32_SELFTEST is not set
+# CONFIG_GLOB_SELFTEST is not set
+CONFIG_CORDIC=m
+# CONFIG_DDR is not set
+
+##
+## file: lib/Kconfig.debug
+##
+CONFIG_PRINTK_TIME=y
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
+CONFIG_BOOT_PRINTK_DELAY=y
+CONFIG_DYNAMIC_DEBUG=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_INFO_REDUCED is not set
+# CONFIG_DEBUG_INFO_SPLIT is not set
+# CONFIG_GDB_SCRIPTS is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_STRIP_ASM_SYMS=y
+# CONFIG_READABLE_ASM is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_PAGE_OWNER is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_SECTION_MISMATCH_WARN_ONLY=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6
+CONFIG_DEBUG_KERNEL=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_VM is not set
+# CONFIG_DEBUG_VIRTUAL is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+#. For use by selftests
+CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m
+# CONFIG_DEBUG_HIGHMEM is not set
+# CONFIG_KCOV is not set
+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_PANIC_ON_OOPS is not set
+CONFIG_PANIC_TIMEOUT=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+CONFIG_SCHED_STACK_END_CHECK=y
+# CONFIG_DEBUG_TIMEKEEPING is not set
+# CONFIG_TIMER_STATS is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_ATOMIC_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_LOCK_TORTURE_TEST is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_LIST=y
+# CONFIG_DEBUG_PI_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_SPARSE_RCU_POINTER is not set
+# CONFIG_RCU_PERF_TEST is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_RCU_CPU_STALL_TIMEOUT=21
+# CONFIG_RCU_TRACE is not set
+# CONFIG_RCU_EQS_DEBUG is not set
+# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
+#. For use by selftests
+CONFIG_NOTIFIER_ERROR_INJECTION=m
+CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
+CONFIG_PM_NOTIFIER_ERROR_INJECT=m
+# CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_KPROBES_SANITY_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_RBTREE_TEST is not set
+# CONFIG_INTERVAL_TREE_TEST is not set
+# CONFIG_PERCPU_TEST is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
+#. Self-test
+# CONFIG_ASYNC_RAID6_TEST is not set
+# CONFIG_TEST_HEXDUMP is not set
+# CONFIG_TEST_STRING_HELPERS is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_TEST_PRINTF is not set
+# CONFIG_TEST_BITMAP is not set
+# CONFIG_TEST_UUID is not set
+# CONFIG_TEST_RHASHTABLE is not set
+# CONFIG_TEST_HASH is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_TEST_LKM is not set
+#. For use by selftests
+CONFIG_TEST_USER_COPY=m
+CONFIG_TEST_BPF=m
+CONFIG_TEST_FIRMWARE=m
+# CONFIG_TEST_UDELAY is not set
+CONFIG_TEST_STATIC_KEYS=m
+CONFIG_STRICT_DEVMEM=y
+CONFIG_IO_STRICT_DEVMEM=y
+
+##
+## file: lib/fonts/Kconfig
+##
+# CONFIG_FONTS is not set
+
+##
+## file: lib/Kconfig.kasan
+##
+# CONFIG_KASAN is not set
+
+##
+## file: lib/Kconfig.kgdb
+##
+# CONFIG_KGDB is not set
+
+##
+## file: lib/Kconfig.kmemcheck
+##
+# CONFIG_KMEMCHECK is not set
+
+##
+## file: lib/Kconfig.ubsan
+##
+# CONFIG_UBSAN is not set
+
+##
+## file: lib/xz/Kconfig
+##
+#. These are enabled again by arch config, matching the defaults
+# CONFIG_XZ_DEC_X86 is not set
+# CONFIG_XZ_DEC_POWERPC is not set
+# CONFIG_XZ_DEC_IA64 is not set
+# CONFIG_XZ_DEC_ARM is not set
+# CONFIG_XZ_DEC_ARMTHUMB is not set
+# CONFIG_XZ_DEC_SPARC is not set
+# CONFIG_XZ_DEC_TEST is not set
+
+##
+## file: mm/Kconfig
+##
+CONFIG_MEMORY_HOTPLUG=y
+# CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE is not set
+CONFIG_MEMORY_HOTREMOVE=y
+CONFIG_BALLOON_COMPACTION=y
+CONFIG_COMPACTION=y
+CONFIG_MIGRATION=y
+CONFIG_BOUNCE=y
+CONFIG_KSM=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_MEMORY_FAILURE=y
+CONFIG_HWPOISON_INJECT=m
+CONFIG_TRANSPARENT_HUGEPAGE=y
+## choice: Transparent Hugepage Support sysfs defaults
+CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+## end choice
+# CONFIG_CLEANCACHE is not set
+CONFIG_FRONTSWAP=y
+# CONFIG_CMA is not set
+CONFIG_MEM_SOFT_DIRTY=y
+CONFIG_ZSWAP=y
+CONFIG_ZBUD=y
+CONFIG_ZSMALLOC=m
+# CONFIG_PGTABLE_MAPPING is not set
+# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
+
+##
+## file: mm/Kconfig.debug
+##
+CONFIG_PAGE_EXTENSION=y
+CONFIG_PAGE_POISONING=y
+CONFIG_PAGE_POISONING_NO_SANITY=y
+# CONFIG_PAGE_POISONING_ZERO is not set
+# CONFIG_DEBUG_PAGE_REF is not set
+
+##
+## 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_CGROUP_NET_PRIO=y
+CONFIG_BPF_JIT=y
+CONFIG_NET_PKTGEN=m
+# CONFIG_NET_TCPPROBE is not set
+CONFIG_NET_DROP_MONITOR=m
+CONFIG_WIRELESS=y
+CONFIG_LWTUNNEL=y
+CONFIG_NET_DEVLINK=m
+
+##
+## file: net/6lowpan/Kconfig
+##
+CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN_DEBUGFS is not set
+CONFIG_6LOWPAN_NHC=m
+CONFIG_6LOWPAN_NHC_DEST=m
+CONFIG_6LOWPAN_NHC_FRAGMENT=m
+CONFIG_6LOWPAN_NHC_HOP=m
+CONFIG_6LOWPAN_NHC_IPV6=m
+CONFIG_6LOWPAN_NHC_MOBILITY=m
+CONFIG_6LOWPAN_NHC_ROUTING=m
+CONFIG_6LOWPAN_NHC_UDP=m
+CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=m
+CONFIG_6LOWPAN_GHC_UDP=m
+CONFIG_6LOWPAN_GHC_ICMPV6=m
+CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=m
+CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=m
+CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m
+
+##
+## file: net/8021q/Kconfig
+##
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_VLAN_8021Q_MVRP=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
+# CONFIG_BATMAN_ADV_BATMAN_V is not set
+CONFIG_BATMAN_ADV_BLA=y
+CONFIG_BATMAN_ADV_DAT=y
+CONFIG_BATMAN_ADV_NC=y
+CONFIG_BATMAN_ADV_MCAST=y
+CONFIG_BATMAN_ADV_DEBUGFS=y
+# CONFIG_BATMAN_ADV_DEBUG is not set
+
+##
+## file: net/bluetooth/Kconfig
+##
+CONFIG_BT=m
+CONFIG_BT_BREDR=y
+CONFIG_BT_HS=y
+CONFIG_BT_LE=y
+CONFIG_BT_6LOWPAN=m
+# CONFIG_BT_LEDS is not set
+# CONFIG_BT_SELFTEST is not set
+CONFIG_BT_DEBUGFS=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
+CONFIG_BRIDGE_VLAN_FILTERING=y
+
+##
+## file: net/bridge/netfilter/Kconfig
+##
+CONFIG_NF_TABLES_BRIDGE=m
+CONFIG_NFT_BRIDGE_META=m
+CONFIG_NFT_BRIDGE_REJECT=m
+CONFIG_NF_LOG_BRIDGE=m
+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_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
+CONFIG_CAN_GW=m
+
+##
+## file: net/ceph/Kconfig
+##
+CONFIG_CEPH_LIB=m
+# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
+# CONFIG_CEPH_LIB_USE_DNS_RESOLVER 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/dns_resolver/Kconfig
+##
+CONFIG_DNS_RESOLVER=m
+
+##
+## file: net/hsr/Kconfig
+##
+# CONFIG_HSR is not set
+
+##
+## file: net/ieee802154/Kconfig
+##
+CONFIG_IEEE802154=m
+# CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set
+CONFIG_IEEE802154_SOCKET=m
+
+##
+## file: net/ieee802154/6lowpan/Kconfig
+##
+CONFIG_IEEE802154_6LOWPAN=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_SYN_COOKIES=y
+CONFIG_NET_IPVTI=m
+CONFIG_NET_FOU=m
+CONFIG_NET_FOU_IP_TUNNELS=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_DIAG=m
+CONFIG_INET_UDP_DIAG=m
+CONFIG_INET_DIAG_DESTROY=y
+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_NV=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
+CONFIG_TCP_CONG_DCTCP=m
+CONFIG_TCP_CONG_CDG=m
+CONFIG_TCP_CONG_BBR=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_DCTCP 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_TABLES_IPV4=m
+CONFIG_NFT_CHAIN_ROUTE_IPV4=m
+CONFIG_NFT_DUP_IPV4=m
+CONFIG_NF_TABLES_ARP=m
+CONFIG_NF_LOG_ARP=m
+CONFIG_NF_LOG_IPV4=m
+CONFIG_NF_REJECT_IPV4=m
+CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NFT_MASQ_IPV4=m
+CONFIG_NFT_REDIR_IPV4=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_RPFILTER=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_SYNPROXY=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_REDIRECT=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=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_IPV6_ILA=m
+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_VTI=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_SIT_6RD=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_GRE=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_NF_TABLES_IPV6=m
+CONFIG_NFT_CHAIN_ROUTE_IPV6=m
+CONFIG_NFT_DUP_IPV6=m
+CONFIG_NF_REJECT_IPV6=m
+CONFIG_NF_LOG_IPV6=m
+CONFIG_NF_NAT_IPV6=m
+CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NFT_MASQ_IPV6=m
+CONFIG_NFT_REDIR_IPV6=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_RPFILTER=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_SYNPROXY=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_RAW=m
+CONFIG_IP6_NF_SECURITY=m
+CONFIG_IP6_NF_NAT=m
+CONFIG_IP6_NF_TARGET_MASQUERADE=m
+CONFIG_IP6_NF_TARGET_NPT=m
+
+##
+## file: net/kcm/Kconfig
+##
+# CONFIG_AF_KCM is not set
+
+##
+## 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/l3mdev/Kconfig
+##
+CONFIG_NET_L3_MASTER_DEV=y
+
+##
+## file: net/llc/Kconfig
+##
+CONFIG_LLC2=m
+
+##
+## file: net/mac80211/Kconfig
+##
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RC_MINSTREL=y
+CONFIG_MAC80211_RC_MINSTREL_HT=y
+# CONFIG_MAC80211_RC_MINSTREL_VHT is not set
+## choice: Default rate control algorithm
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+## end choice
+CONFIG_MAC80211_MESH=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_MESSAGE_TRACING is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+
+##
+## file: net/mac802154/Kconfig
+##
+CONFIG_MAC802154=m
+
+##
+## file: net/mpls/Kconfig
+##
+#. Can be built as a module, but nothing will trigger loading
+CONFIG_NET_MPLS_GSO=y
+CONFIG_MPLS_ROUTING=m
+CONFIG_MPLS_IPTUNNEL=m
+
+##
+## file: net/ncsi/Kconfig
+##
+# CONFIG_NET_NCSI is not set
+
+##
+## file: net/netfilter/Kconfig
+##
+CONFIG_NETFILTER_INGRESS=y
+CONFIG_NETFILTER_NETLINK_ACCT=m
+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_PROCFS=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CONNTRACK_TIMEOUT=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_NF_CT_NETLINK_TIMEOUT=y
+CONFIG_NF_CT_NETLINK_HELPER=m
+CONFIG_NETFILTER_NETLINK_GLUE_CT=y
+CONFIG_NF_TABLES=m
+CONFIG_NF_TABLES_INET=m
+CONFIG_NF_TABLES_NETDEV=m
+CONFIG_NFT_EXTHDR=m
+CONFIG_NFT_META=m
+CONFIG_NFT_NUMGEN=m
+CONFIG_NFT_CT=m
+CONFIG_NFT_SET_RBTREE=m
+CONFIG_NFT_SET_HASH=m
+CONFIG_NFT_COUNTER=m
+CONFIG_NFT_LOG=m
+CONFIG_NFT_LIMIT=m
+CONFIG_NFT_MASQ=m
+CONFIG_NFT_REDIR=m
+CONFIG_NFT_NAT=m
+CONFIG_NFT_QUEUE=m
+CONFIG_NFT_QUOTA=m
+CONFIG_NFT_REJECT=m
+CONFIG_NFT_COMPAT=m
+CONFIG_NFT_HASH=m
+CONFIG_NF_DUP_NETDEV=m
+CONFIG_NFT_DUP_NETDEV=m
+CONFIG_NFT_FWD_NETDEV=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_HL=m
+CONFIG_NETFILTER_XT_TARGET_HMARK=m
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
+CONFIG_NETFILTER_XT_TARGET_LED=m
+CONFIG_NETFILTER_XT_TARGET_LOG=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NETMAP=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_REDIRECT=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_BPF=m
+CONFIG_NETFILTER_XT_MATCH_CGROUP=m
+CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLABEL=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_ECN=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_IPVS=m
+CONFIG_NETFILTER_XT_MATCH_L2TP=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_NFACCT=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_IPMARK=m
+CONFIG_IP_SET_HASH_IPPORT=m
+CONFIG_IP_SET_HASH_IPPORTIP=m
+CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_MAC=m
+CONFIG_IP_SET_HASH_NETPORTNET=m
+CONFIG_IP_SET_HASH_NET=m
+CONFIG_IP_SET_HASH_NETNET=m
+CONFIG_IP_SET_HASH_NETPORT=m
+CONFIG_IP_SET_HASH_NETIFACE=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_FO=m
+CONFIG_IP_VS_OVF=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_SH_TAB_BITS=8
+CONFIG_IP_VS_FTP=m
+CONFIG_IP_VS_PE_SIP=m
+
+##
+## file: net/netlabel/Kconfig
+##
+# CONFIG_NETLABEL is not set
+
+##
+## file: net/netlink/Kconfig
+##
+CONFIG_NETLINK_DIAG=m
+
+##
+## file: net/nfc/Kconfig
+##
+CONFIG_NFC=m
+CONFIG_NFC_DIGITAL=m
+
+##
+## file: net/nfc/hci/Kconfig
+##
+# CONFIG_NFC_HCI is not set
+# CONFIG_NFC_SHDLC is not set
+
+##
+## file: net/nfc/nci/Kconfig
+##
+# CONFIG_NFC_NCI is not set
+
+##
+## file: net/openvswitch/Kconfig
+##
+CONFIG_OPENVSWITCH=m
+CONFIG_OPENVSWITCH_GRE=y
+CONFIG_OPENVSWITCH_VXLAN=y
+CONFIG_OPENVSWITCH_GENEVE=y
+
+##
+## file: net/packet/Kconfig
+##
+CONFIG_PACKET=y
+CONFIG_PACKET_DIAG=m
+
+##
+## 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
+# CONFIG_RFKILL_GPIO is not set
+
+##
+## file: net/rxrpc/Kconfig
+##
+CONFIG_AF_RXRPC=m
+CONFIG_AF_RXRPC_IPV6=y
+# CONFIG_AF_RXRPC_INJECT_LOSS is not set
+# CONFIG_AF_RXRPC_DEBUG is not set
+CONFIG_RXKAD=y
+
+##
+## 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_CODEL=m
+CONFIG_NET_SCH_FQ_CODEL=m
+CONFIG_NET_SCH_FQ=m
+CONFIG_NET_SCH_HHF=m
+CONFIG_NET_SCH_PIE=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_SCH_PLUG=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=m
+CONFIG_NET_CLS_BPF=m
+CONFIG_NET_CLS_FLOWER=m
+CONFIG_NET_CLS_MATCHALL=m
+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_EMATCH_CANID=m
+CONFIG_NET_EMATCH_IPSET=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_ACT_VLAN=m
+CONFIG_NET_ACT_BPF=m
+CONFIG_NET_ACT_CONNMARK=m
+CONFIG_NET_ACT_SKBMOD=m
+CONFIG_NET_ACT_IFE=m
+CONFIG_NET_ACT_TUNNEL_KEY=m
+CONFIG_NET_IFE_SKBMARK=m
+CONFIG_NET_IFE_SKBPRIO=m
+CONFIG_NET_IFE_SKBTCINDEX=m
+CONFIG_NET_CLS_IND=y
+
+##
+## file: net/sctp/Kconfig
+##
+CONFIG_IP_SCTP=m
+CONFIG_NET_SCTPPROBE=m
+# CONFIG_SCTP_DBG_OBJCNT is not set
+## choice: Default SCTP cookie HMAC encoding
+CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
+## end choice
+CONFIG_SCTP_COOKIE_HMAC_MD5=y
+CONFIG_SCTP_COOKIE_HMAC_SHA1=y
+
+##
+## file: net/sunrpc/Kconfig
+##
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_SUNRPC_DEBUG=y
+CONFIG_SUNRPC_XPRT_RDMA=m
+
+##
+## file: net/switchdev/Kconfig
+##
+# CONFIG_NET_SWITCHDEV is not set
+
+##
+## file: net/tipc/Kconfig
+##
+CONFIG_TIPC=m
+CONFIG_TIPC_MEDIA_IB=y
+CONFIG_TIPC_MEDIA_UDP=y
+
+##
+## file: net/unix/Kconfig
+##
+CONFIG_UNIX=y
+CONFIG_UNIX_DIAG=m
+
+##
+## file: net/vmw_vsock/Kconfig
+##
+CONFIG_VSOCKETS=m
+# CONFIG_VMWARE_VMCI_VSOCKETS is not set
+CONFIG_VIRTIO_VSOCKETS=m
+
+##
+## 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_CERTIFICATION_ONUS is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+# CONFIG_CFG80211_INTERNAL_REGDB is not set
+CONFIG_CFG80211_WEXT=y
+# 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_SECURITY_DMESG_RESTRICT=y
+CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_NETWORK_XFRM=y
+# CONFIG_SECURITY_PATH is not set
+CONFIG_SECURITY_SECURELEVEL=y
+# CONFIG_INTEL_TXT is not set
+CONFIG_LSM_MMAP_MIN_ADDR=32768
+CONFIG_HARDENED_USERCOPY=y
+# CONFIG_HARDENED_USERCOPY_PAGESPAN is not set
+## choice: Default security module
+CONFIG_DEFAULT_SECURITY_DAC=y
+## end choice
+
+##
+## file: security/apparmor/Kconfig
+##
+CONFIG_SECURITY_APPARMOR=y
+CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
+CONFIG_SECURITY_APPARMOR_HASH=y
+CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y
+
+##
+## file: security/integrity/Kconfig
+##
+CONFIG_INTEGRITY=y
+# CONFIG_INTEGRITY_SIGNATURE is not set
+CONFIG_INTEGRITY_TRUSTED_KEYRING=y
+CONFIG_INTEGRITY_AUDIT=y
+
+##
+## file: security/integrity/evm/Kconfig
+##
+# CONFIG_EVM is not set
+
+##
+## file: security/integrity/ima/Kconfig
+##
+CONFIG_IMA=y
+## choice: Default integrity hash algorithm
+# CONFIG_IMA_DEFAULT_HASH_SHA1 is not set
+CONFIG_IMA_DEFAULT_HASH_SHA256=y
+# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
+# CONFIG_IMA_DEFAULT_HASH_WP512 is not set
+## end choice
+# CONFIG_IMA_WRITE_POLICY is not set
+# CONFIG_IMA_READ_POLICY is not set
+CONFIG_IMA_APPRAISE=y
+CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY=y
+CONFIG_IMA_BLACKLIST_KEYRING=y
+# CONFIG_IMA_LOAD_X509 is not set
+# CONFIG_IMA_APPRAISE_SIGNED_INIT is not set
+
+##
+## file: security/keys/Kconfig
+##
+CONFIG_KEYS=y
+# CONFIG_PERSISTENT_KEYRINGS is not set
+# CONFIG_BIG_KEYS is not set
+# CONFIG_TRUSTED_KEYS is not set
+# CONFIG_ENCRYPTED_KEYS is not set
+
+##
+## file: security/loadpin/Kconfig
+##
+# CONFIG_SECURITY_LOADPIN is not set
+
+##
+## file: security/selinux/Kconfig
+##
+CONFIG_SECURITY_SELINUX=y
+# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set
+# CONFIG_SECURITY_SELINUX_DISABLE is not set
+CONFIG_SECURITY_SELINUX_DEVELOP=y
+CONFIG_SECURITY_SELINUX_AVC_STATS=y
+CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0
+
+##
+## file: security/smack/Kconfig
+##
+# CONFIG_SECURITY_SMACK is not set
+
+##
+## file: security/tomoyo/Kconfig
+##
+CONFIG_SECURITY_TOMOYO=y
+CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048
+CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024
+# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set
+#. This is so horrible...
+CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init"
+CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/sbin/init"
+
+##
+## file: security/yama/Kconfig
+##
+CONFIG_SECURITY_YAMA=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_PCM_TIMER=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+CONFIG_SND_HRTIMER=m
+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_MAX_CARDS=32
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_PROC_FS=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_DICE=m
+CONFIG_SND_OXFW=m
+CONFIG_SND_ISIGHT=m
+CONFIG_SND_FIREWORKS=m
+CONFIG_SND_BEBOB=m
+CONFIG_SND_FIREWIRE_DIGI00X=m
+CONFIG_SND_FIREWIRE_TASCAM=m
+
+##
+## file: sound/hda/Kconfig
+##
+CONFIG_SND_HDA_PREALLOC_SIZE=2048
+
+##
+## file: sound/isa/Kconfig
+##
+# CONFIG_SND_CMI8328 is not set
+
+##
+## 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_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_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_CA0132=y
+CONFIG_SND_HDA_CODEC_CA0132_DSP=y
+CONFIG_SND_HDA_CODEC_CMEDIA=y
+CONFIG_SND_HDA_CODEC_SI3054=y
+CONFIG_SND_HDA_GENERIC=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/soc/amd/Kconfig
+##
+# CONFIG_SND_SOC_AMD_ACP is not set
+
+##
+## file: sound/soc/atmel/Kconfig
+##
+# CONFIG_SND_ATMEL_SOC is not set
+
+##
+## file: sound/soc/codecs/Kconfig
+##
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_ADAU1701 is not set
+# CONFIG_SND_SOC_ADAU7002 is not set
+# CONFIG_SND_SOC_AK4104 is not set
+# CONFIG_SND_SOC_AK4554 is not set
+# CONFIG_SND_SOC_AK4613 is not set
+# CONFIG_SND_SOC_AK4642 is not set
+# CONFIG_SND_SOC_AK5386 is not set
+# CONFIG_SND_SOC_ALC5623 is not set
+# CONFIG_SND_SOC_BT_SCO is not set
+# CONFIG_SND_SOC_CS35L32 is not set
+# CONFIG_SND_SOC_CS35L33 is not set
+# CONFIG_SND_SOC_CS42L51_I2C is not set
+# CONFIG_SND_SOC_CS42L52 is not set
+# CONFIG_SND_SOC_CS42L56 is not set
+# CONFIG_SND_SOC_CS42L73 is not set
+# CONFIG_SND_SOC_CS4265 is not set
+# CONFIG_SND_SOC_CS4270 is not set
+# CONFIG_SND_SOC_CS4271_I2C is not set
+# CONFIG_SND_SOC_CS4271_SPI is not set
+# CONFIG_SND_SOC_CS42XX8_I2C is not set
+# CONFIG_SND_SOC_CS4349 is not set
+# CONFIG_SND_SOC_CS53L30 is not set
+# CONFIG_SND_SOC_ES8328 is not set
+# CONFIG_SND_SOC_GTM601 is not set
+# CONFIG_SND_SOC_INNO_RK3036 is not set
+# CONFIG_SND_SOC_MAX98504 is not set
+# CONFIG_SND_SOC_MAX9860 is not set
+# CONFIG_SND_SOC_PCM1681 is not set
+# CONFIG_SND_SOC_PCM179X_I2C is not set
+# CONFIG_SND_SOC_PCM179X_SPI is not set
+# CONFIG_SND_SOC_PCM3168A_I2C is not set
+# CONFIG_SND_SOC_PCM3168A_SPI is not set
+# CONFIG_SND_SOC_PCM512x_I2C is not set
+# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_RT5616 is not set
+# CONFIG_SND_SOC_RT5631 is not set
+# CONFIG_SND_SOC_SGTL5000 is not set
+# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
+# CONFIG_SND_SOC_SPDIF is not set
+# CONFIG_SND_SOC_SSM2602_SPI is not set
+# CONFIG_SND_SOC_SSM2602_I2C is not set
+# CONFIG_SND_SOC_SSM4567 is not set
+# CONFIG_SND_SOC_STA32X is not set
+# CONFIG_SND_SOC_STA350 is not set
+# CONFIG_SND_SOC_STI_SAS is not set
+# CONFIG_SND_SOC_TAS2552 is not set
+# CONFIG_SND_SOC_TAS5086 is not set
+# CONFIG_SND_SOC_TAS571X is not set
+# CONFIG_SND_SOC_TAS5720 is not set
+# CONFIG_SND_SOC_TFA9879 is not set
+# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
+# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
+# CONFIG_SND_SOC_TLV320AIC31XX is not set
+# CONFIG_SND_SOC_TLV320AIC3X is not set
+# CONFIG_SND_SOC_TS3A227E is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8523 is not set
+# CONFIG_SND_SOC_WM8580 is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8728 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8737 is not set
+# CONFIG_SND_SOC_WM8741 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8770 is not set
+# CONFIG_SND_SOC_WM8776 is not set
+# CONFIG_SND_SOC_WM8804_I2C is not set
+# CONFIG_SND_SOC_WM8804_SPI is not set
+# CONFIG_SND_SOC_WM8903 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8962 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8978 is not set
+# CONFIG_SND_SOC_WM8985 is not set
+# CONFIG_SND_SOC_NAU8810 is not set
+# CONFIG_SND_SOC_TPA6130A2 is not set
+
+##
+## file: sound/soc/dwc/Kconfig
+##
+# CONFIG_SND_DESIGNWARE_I2S is not set
+
+##
+## file: sound/soc/fsl/Kconfig
+##
+# CONFIG_SND_SOC_FSL_ASRC is not set
+# CONFIG_SND_SOC_FSL_SAI is not set
+# CONFIG_SND_SOC_FSL_SSI is not set
+# CONFIG_SND_SOC_FSL_SPDIF is not set
+# CONFIG_SND_SOC_FSL_ESAI is not set
+# CONFIG_SND_SOC_IMX_AUDMUX is not set
+
+##
+## file: sound/soc/generic/Kconfig
+##
+# CONFIG_SND_SIMPLE_CARD is not set
+
+##
+## file: sound/soc/img/Kconfig
+##
+# CONFIG_SND_SOC_IMG is not set
+
+##
+## file: sound/soc/sunxi/Kconfig
+##
+# CONFIG_SND_SUN4I_CODEC is not set
+
+##
+## file: sound/soc/xtensa/Kconfig
+##
+# CONFIG_SND_SOC_XTFPGA_I2S 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
+CONFIG_SND_USB_HIFACE=m
+CONFIG_SND_BCD2000=m
+
+##
+## file: sound/usb/line6/Kconfig
+##
+CONFIG_SND_USB_POD=m
+CONFIG_SND_USB_PODHD=m
+CONFIG_SND_USB_TONEPORT=m
+CONFIG_SND_USB_VARIAX=m
+
+##
+## file: usr/Kconfig
+##
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_RD_XZ=y
+CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
+
diff --git a/config/defines b/config/defines
new file mode 100644 (file)
index 0000000..eef7c76
--- /dev/null
@@ -0,0 +1,108 @@
+[abi]
+abiname: 3
+ignore-changes:
+ __cpuhp_*
+ bpf_analyzer
+ cxl_*
+ mm_iommu_*
+ register_cxl_calls
+ unregister_cxl_calls
+ module:arch/x86/kvm/*
+ module:drivers/hv/*
+ module:drivers/iio/common/st_sensors/**
+ module:drivers/net/wireless/**
+ module:drivers/nvdimm/*
+ module:drivers/power/supply/bq27xxx_battery
+ module:drivers/scsi/cxgbi/*
+ module:drivers/scsi/libiscs*
+ module:drivers/scsi/qla2xxx/qla2xxx
+ module:drivers/scsi/ufs/*
+ module:drivers/target/**
+ module:drivers/usb/host/**
+ module:drivers/usb/musb/**
+ module:net/ceph/libceph
+# btree library is only selected by few drivers so not useful OOT
+ btree_*
+ visitor*
+# Exported for related protocols only
+ can_rx_register
+ ip6_xmit
+ module:net/dccp/dccp
+ module:net/rds/rds
+# devfreq is unlikely to be useful for OOT modules
+ devfreq_*
+ devm_devfreq_*
+ update_devfreq
+# Assume IB drivers are added/updated through OFED, which also updates IB core
+ module:drivers/infiniband/**
+# Declared in private header, not usable OOT
+ acpi_ec_add_query_handler
+ acpi_ec_remove_query_handler
+ first_ec
+# Exported for tracefs only
+ debugfs_create_automount
+
+[base]
+arches:
+ alpha
+ amd64
+ arm64
+ armel
+ armhf
+ hppa
+ i386
+ m68k
+ mips
+ mipsel
+ mipsn32
+ mipsn32el
+ mips64
+ mips64el
+# Disabled until dak accepts them in the control file
+# mipsr6
+# mipsr6el
+# mipsn32r6
+# mipsn32r6el
+# mips64r6
+# mips64r6el
+ powerpc
+ powerpcspe
+ ppc64
+ ppc64el
+ s390
+ s390x
+ sh3
+ sh4
+ sparc
+ sparc64
+ tilegx
+ x32
+compiler: gcc-6
+featuresets:
+ none
+ rt
+
+[build]
+debug-info: true
+# Disable module signing for now
+signed-modules: false
+
+[featureset-rt_base]
+enabled: true
+
+[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
+
+[relations]
+# compilers
+gcc-6: gcc-6 <!stage1 !cross>, gcc-6-@gnu-type-package@:native <!stage1 cross>
+
+# initramfs-generators
+initramfs-fallback: linux-initramfs-tool
+initramfs-tools: initramfs-tools (>= 0.120+deb8u2)
diff --git a/config/featureset-rt/config b/config/featureset-rt/config
new file mode 100644 (file)
index 0000000..263da48
--- /dev/null
@@ -0,0 +1,9 @@
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT_RT_FULL=y
+CONFIG_SCHED_TRACER=y
+CONFIG_MISSED_TIMER_OFFSETS_HIST=y
+CONFIG_WAKEUP_LATENCY_HIST=y
+CONFIG_RCU_EXPERT=y
+#. Certificate paths are resolved relative to debian/build/source_rt
+CONFIG_SYSTEM_TRUSTED_KEYS="../../certs/benh@debian.org.cert.pem"
+CONFIG_HWLAT_TRACER=y
diff --git a/config/featureset-rt/defines b/config/featureset-rt/defines
new file mode 100644 (file)
index 0000000..44e2f2b
--- /dev/null
@@ -0,0 +1,7 @@
+[abi]
+ignore-changes: *
+
+[description]
+part-long-rt: This kernel includes the PREEMPT_RT realtime patch set.
+part-short-rt: PREEMPT_RT
+parts: rt
diff --git a/config/hppa/config b/config/hppa/config
new file mode 100644 (file)
index 0000000..9577120
--- /dev/null
@@ -0,0 +1,686 @@
+##
+## file: arch/parisc/Kconfig
+##
+## choice: Processor type
+# CONFIG_PA7100LC is not set
+# CONFIG_PA7200 is not set
+# CONFIG_PA7300LC is not set
+## end choice
+CONFIG_MLONGCALLS=y
+## 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: block/partitions/Kconfig
+##
+# CONFIG_PARTITION_ADVANCED is not set
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_LEGACY=m
+
+##
+## file: drivers/block/Kconfig
+##
+# CONFIG_BLK_DEV_FD 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_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=m
+# 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
+
+##
+## file: drivers/hwmon/Kconfig
+##
+# CONFIG_SENSORS_F71805F is not set
+
+##
+## file: drivers/i2c/Kconfig
+##
+# CONFIG_I2C 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_HP_SDC_RTC is not set
+
+##
+## 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/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/arcnet/Kconfig
+##
+# CONFIG_ARCNET is not set
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+CONFIG_FEALNX=m
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL3=m
+# CONFIG_3C515 is not set
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_3C589=m
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_PCMCIA_AXNET=m
+CONFIG_NE2000=m
+CONFIG_NE2K_PCI=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_ULTRA=m
+CONFIG_WD80x3=m
+
+##
+## file: drivers/net/ethernet/adaptec/Kconfig
+##
+CONFIG_ADAPTEC_STARFIRE=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+CONFIG_AMD8111_ETH=m
+# CONFIG_LANCE is not set
+CONFIG_PCMCIA_NMCLAN=m
+# CONFIG_NI65 is not set
+
+##
+## file: drivers/net/ethernet/broadcom/Kconfig
+##
+CONFIG_B44=m
+
+##
+## file: drivers/net/ethernet/cirrus/Kconfig
+##
+CONFIG_CS89x0=m
+
+##
+## file: drivers/net/ethernet/dec/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_WINBOND_840 is not set
+# CONFIG_DM9102 is not set
+CONFIG_PCMCIA_XIRCOM=m
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+
+##
+## file: drivers/net/ethernet/fujitsu/Kconfig
+##
+CONFIG_PCMCIA_FMVJ18X=m
+
+##
+## file: drivers/net/ethernet/hp/Kconfig
+##
+CONFIG_HP100=m
+
+##
+## file: drivers/net/ethernet/i825xx/Kconfig
+##
+CONFIG_LASI_82596=m
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NATSEMI=m
+
+##
+## file: drivers/net/ethernet/neterion/Kconfig
+##
+# CONFIG_VXGE is not set
+
+##
+## file: drivers/net/ethernet/nvidia/Kconfig
+##
+CONFIG_FORCEDETH=m
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+
+##
+## file: drivers/net/ethernet/sis/Kconfig
+##
+CONFIG_SIS900=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_SMC9194=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_EPIC100=m
+
+##
+## file: drivers/net/ethernet/sun/Kconfig
+##
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+# CONFIG_NIU is not set
+
+##
+## file: drivers/net/ethernet/via/Kconfig
+##
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+
+##
+## file: drivers/net/ethernet/xircom/Kconfig
+##
+CONFIG_PCMCIA_XIRC2PS=m
+
+##
+## file: drivers/net/fddi/Kconfig
+##
+# CONFIG_FDDI is not set
+
+##
+## file: drivers/net/hippi/Kconfig
+##
+# CONFIG_HIPPI is not set
+
+##
+## file: drivers/net/plip/Kconfig
+##
+CONFIG_PLIP=m
+
+##
+## file: drivers/net/wan/Kconfig
+##
+# CONFIG_WAN is not set
+
+##
+## file: drivers/net/wireless/Kconfig
+##
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_PCMCIA_WL3501=m
+
+##
+## file: drivers/net/wireless/atmel/Kconfig
+##
+# CONFIG_ATMEL is not set
+
+##
+## file: drivers/net/wireless/cisco/Kconfig
+##
+CONFIG_AIRO_CS=m
+
+##
+## file: drivers/net/wireless/intel/ipw2x00/Kconfig
+##
+# CONFIG_IPW2100 is not set
+
+##
+## file: drivers/net/wireless/intersil/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/net/wireless/zydas/Kconfig
+##
+# CONFIG_USB_ZD1201 is not set
+
+##
+## 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=y
+CONFIG_RTC_DRV_GENERIC=y
+
+##
+## file: drivers/scsi/Kconfig
+##
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D 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_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_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
+
+##
+## 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_FDOMAIN=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=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_MUX=y
+CONFIG_SERIAL_MUX_CONSOLE=y
+CONFIG_SERIAL_JSM=m
+
+##
+## file: drivers/tty/serial/8250/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
+
+##
+## 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_OHCI_HCD=m
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD 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
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+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_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/w1/Kconfig
+##
+# CONFIG_W1 is not set
+
+##
+## file: fs/nfs/Kconfig
+##
+CONFIG_ROOT_NFS=y
+
+##
+## file: init/Kconfig
+##
+CONFIG_SGETMASK_SYSCALL=y
+CONFIG_SYSFS_SYSCALL=y
+
+##
+## file: lib/Kconfig.debug
+##
+CONFIG_DEBUG_STACKOVERFLOW=y
+# 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/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/lapb/Kconfig
+##
+# CONFIG_LAPB is not set
+
+##
+## file: net/llc/Kconfig
+##
+# CONFIG_LLC2 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
+
diff --git a/config/hppa/config.parisc b/config/hppa/config.parisc
new file mode 100644 (file)
index 0000000..9a07c79
--- /dev/null
@@ -0,0 +1,26 @@
+##
+## file: arch/parisc/Kconfig
+##
+## choice: Processor type
+CONFIG_PA7000=y
+# CONFIG_PA8X00 is not set
+## end choice
+# CONFIG_SMP is not set
+
+##
+## file: drivers/net/ethernet/ti/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
+
diff --git a/config/hppa/config.parisc-smp b/config/hppa/config.parisc-smp
new file mode 100644 (file)
index 0000000..8c9cc9a
--- /dev/null
@@ -0,0 +1,28 @@
+##
+## 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/ethernet/ti/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
+
diff --git a/config/hppa/config.parisc64 b/config/hppa/config.parisc64
new file mode 100644 (file)
index 0000000..7a782e7
--- /dev/null
@@ -0,0 +1,17 @@
+##
+## 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: mm/Kconfig
+##
+## choice: Memory model
+# CONFIG_FLATMEM_MANUAL is not set
+## end choice
+
diff --git a/config/hppa/config.parisc64-smp b/config/hppa/config.parisc64-smp
new file mode 100644 (file)
index 0000000..e39d0c9
--- /dev/null
@@ -0,0 +1,58 @@
+##
+## 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: drivers/ata/Kconfig
+##
+CONFIG_PATA_SIL680=m
+
+##
+## file: drivers/char/agp/Kconfig
+##
+#. for ATI FireGL DRM in C8000 workstation
+CONFIG_AGP=y
+CONFIG_AGP_PARISC=y
+
+##
+## file: drivers/char/ipmi/Kconfig
+##
+CONFIG_IPMI_HANDLER=m
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+#. for ATI FireGL DRM in C8000 workstation
+CONFIG_DRM=y
+CONFIG_DRM_RADEON=m
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C=y
+
+##
+## file: drivers/i2c/algos/Kconfig
+##
+CONFIG_I2C_ALGOBIT=y
+
+##
+## file: mm/Kconfig
+##
+## choice: Memory model
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+## end choice
+
diff --git a/config/hppa/defines b/config/hppa/defines
new file mode 100644 (file)
index 0000000..f75bd1f
--- /dev/null
@@ -0,0 +1,28 @@
+[base]
+flavours: parisc parisc64-smp
+kernel-arch: parisc
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+suggests: palo
+install-stem: vmlinux
+
+[parisc_description]
+hardware: 32-bit PA-RISC
+hardware-long: HP PA-RISC 32-bit systems with max 4 GB RAM
+
+[parisc64-smp_base]
+cflags: -fno-cse-follow-jumps
+override-host-type: hppa64-linux-gnu
+
+[parisc64-smp_description]
+hardware: multiprocessor 64-bit PA-RISC
+hardware-long: HP PA-RISC 64-bit SMP systems with support for more than 4 GB RAM
+
+[relations]
+gcc-6: gcc-6 <!stage1 !cross>, binutils-hppa64-linux-gnu <!stage1 !cross>, gcc-6-hppa64-linux-gnu <!stage1 !cross>, gcc-6-hppa-linux-gnu:native <!stage1 cross>, binutils-hppa64-linux-gnu:native <!stage1 cross>, gcc-6-hppa64-linux-gnu:native <!stage1 cross>
+
diff --git a/config/i386/config b/config/i386/config
new file mode 100644 (file)
index 0000000..736ab72
--- /dev/null
@@ -0,0 +1,556 @@
+##
+## file: arch/x86/Kconfig
+##
+# CONFIG_64BIT is not set
+CONFIG_SMP=y
+CONFIG_X86_BIGSMP=y
+CONFIG_NR_CPUS=32
+# CONFIG_X86_LEGACY_VM86 is not set
+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
+## choice: Memory split
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_3G_OPT is not set
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_2G_OPT is not set
+# CONFIG_VMSPLIT_1G 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 is not set
+
+##
+## file: crypto/Kconfig
+##
+CONFIG_CRYPTO_AES_586=m
+CONFIG_CRYPTO_SALSA20_586=m
+CONFIG_CRYPTO_SERPENT_SSE2_586=m
+CONFIG_CRYPTO_TWOFISH_586=m
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CS5530=m
+CONFIG_PATA_CS5535=m
+CONFIG_PATA_CS5536=m
+CONFIG_PATA_SC1200=m
+CONFIG_PATA_ISAPNP=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_LEGACY=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/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_GX_SUSPMOD=m
+CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
+CONFIG_X86_SPEEDSTEP_ICH=m
+CONFIG_X86_SPEEDSTEP_SMI=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/dma/Kconfig
+##
+CONFIG_PCH_DMA=m
+
+##
+## file: drivers/gpio/Kconfig
+##
+CONFIG_GPIO_VX855=m
+CONFIG_GPIO_CS5535=m
+CONFIG_GPIO_PCH=m
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+CONFIG_DRM_I810=m
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+CONFIG_I2C_EG20T=m
+CONFIG_I2C_PXA=m
+
+##
+## 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/iommu/Kconfig
+##
+# CONFIG_INTEL_IOMMU is not set
+
+##
+## 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 is not set
+
+##
+## file: drivers/macintosh/Kconfig
+##
+# CONFIG_MACINTOSH_DRIVERS is not set
+
+##
+## file: drivers/media/radio/Kconfig
+##
+CONFIG_V4L_RADIO_ISA_DRIVERS=y
+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/mfd/Kconfig
+##
+CONFIG_MFD_CS5535=m
+CONFIG_MFD_VX855=m
+
+##
+## file: drivers/misc/Kconfig
+##
+CONFIG_CS5535_MFGPT=m
+CONFIG_CS5535_CLOCK_EVENT_SRC=m
+CONFIG_PCH_PHUB=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/arcnet/Kconfig
+##
+CONFIG_ARCNET_COM20020_ISA=m
+
+##
+## file: drivers/net/can/Kconfig
+##
+CONFIG_PCH_CAN=m
+
+##
+## file: drivers/net/can/cc770/Kconfig
+##
+CONFIG_CAN_CC770=m
+CONFIG_CAN_CC770_ISA=m
+# CONFIG_CAN_CC770_PLATFORM is not set
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL3=m
+CONFIG_3C515=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_NET_VENDOR_8390=y
+CONFIG_NE2000=m
+CONFIG_ULTRA=m
+CONFIG_WD80x3=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+CONFIG_NET_VENDOR_AMD=y
+CONFIG_LANCE=m
+CONFIG_NI65=m
+
+##
+## file: drivers/net/ethernet/cirrus/Kconfig
+##
+CONFIG_NET_VENDOR_CIRRUS=y
+CONFIG_CS89x0=m
+
+##
+## file: drivers/net/ethernet/dec/Kconfig
+##
+CONFIG_NET_VENDOR_DEC=y
+
+##
+## file: drivers/net/ethernet/fujitsu/Kconfig
+##
+CONFIG_NET_VENDOR_FUJITSU=y
+
+##
+## file: drivers/net/ethernet/oki-semi/pch_gbe/Kconfig
+##
+CONFIG_PCH_GBE=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_NET_VENDOR_SMSC=y
+CONFIG_SMC9194=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/intel/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 is not set
+
+##
+## file: drivers/scsi/Kconfig
+##
+CONFIG_SCSI_EATA_PIO=m
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_INIA100 is not set
+CONFIG_SCSI_NCR53C406A=m
+CONFIG_SCSI_QLOGIC_FAS=m
+CONFIG_SCSI_SYM53C416=m
+CONFIG_SCSI_NSP32=m
+
+##
+## file: drivers/scsi/pcmcia/Kconfig
+##
+CONFIG_PCMCIA_NINJA_SCSI=m
+
+##
+## file: drivers/spi/Kconfig
+##
+CONFIG_SPI_TOPCLIFF_PCH=m
+
+##
+## file: drivers/staging/comedi/Kconfig
+##
+CONFIG_COMEDI_ISA_DRIVERS=y
+CONFIG_COMEDI_PCL711=m
+CONFIG_COMEDI_PCL724=m
+CONFIG_COMEDI_PCL726=m
+CONFIG_COMEDI_PCL730=m
+CONFIG_COMEDI_PCL812=m
+CONFIG_COMEDI_PCL816=m
+CONFIG_COMEDI_PCL818=m
+CONFIG_COMEDI_PCM3724=m
+CONFIG_COMEDI_AMPLC_DIO200_ISA=m
+CONFIG_COMEDI_AMPLC_PC236_ISA=m
+CONFIG_COMEDI_AMPLC_PC263_ISA=m
+CONFIG_COMEDI_RTI800=m
+CONFIG_COMEDI_RTI802=m
+CONFIG_COMEDI_DAC02=m
+CONFIG_COMEDI_DAS16M1=m
+CONFIG_COMEDI_DAS08_ISA=m
+CONFIG_COMEDI_DAS16=m
+CONFIG_COMEDI_DAS800=m
+CONFIG_COMEDI_DAS1800=m
+CONFIG_COMEDI_DAS6402=m
+CONFIG_COMEDI_DT2801=m
+CONFIG_COMEDI_DT2811=m
+CONFIG_COMEDI_DT2814=m
+CONFIG_COMEDI_DT2815=m
+CONFIG_COMEDI_DT2817=m
+CONFIG_COMEDI_DT282X=m
+CONFIG_COMEDI_DMM32AT=m
+CONFIG_COMEDI_FL512=m
+CONFIG_COMEDI_AIO_AIO12_8=m
+CONFIG_COMEDI_AIO_IIRO_16=m
+CONFIG_COMEDI_C6XDIGIO=m
+CONFIG_COMEDI_MPC624=m
+CONFIG_COMEDI_ADQ12B=m
+CONFIG_COMEDI_NI_AT_A2150=m
+CONFIG_COMEDI_NI_AT_AO=m
+CONFIG_COMEDI_NI_ATMIO=m
+CONFIG_COMEDI_NI_ATMIO16D=m
+CONFIG_COMEDI_NI_LABPC_ISA=m
+CONFIG_COMEDI_PCMAD=m
+CONFIG_COMEDI_PCMDA12=m
+CONFIG_COMEDI_PCMMIO=m
+CONFIG_COMEDI_PCMUIO=m
+CONFIG_COMEDI_MULTIQ3=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/speakup/Kconfig
+##
+CONFIG_SPEAKUP_SYNTH_DECPC=m
+
+##
+## file: drivers/tty/Kconfig
+##
+# CONFIG_ISI is not set
+
+##
+## file: drivers/tty/serial/Kconfig
+##
+CONFIG_SERIAL_PCH_UART=m
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250_EXAR_ST16C554=m
+
+##
+## file: drivers/usb/gadget/udc/Kconfig
+##
+CONFIG_USB_AMD5536UDC=m
+
+##
+## file: drivers/video/console/Kconfig
+##
+CONFIG_MDA_CONSOLE=m
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB_I810=m
+CONFIG_FB_I810_GTF=y
+CONFIG_FB_I810_I2C=y
+CONFIG_FB_MATROX_G=y
+CONFIG_FB_MATROX_MAVEN=m
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_SAVAGE_I2C=y
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_SCx200_WDT=m
+CONFIG_SBC8360_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_CS5530=m
+CONFIG_SND_CS5535AUDIO=m
+CONFIG_SND_SIS7019=m
+
diff --git a/config/i386/config.686 b/config/i386/config.686
new file mode 100644 (file)
index 0000000..f07efc7
--- /dev/null
@@ -0,0 +1,82 @@
+##
+## file: arch/x86/Kconfig
+##
+CONFIG_X86_32_IRIS=m
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_EISA is not set
+CONFIG_OLPC=y
+CONFIG_OLPC_XO1_PM=y
+CONFIG_OLPC_XO1_RTC=y
+CONFIG_OLPC_XO1_SCI=y
+CONFIG_OLPC_XO15_SCI=y
+CONFIG_ALIX=y
+CONFIG_NET5501=y
+CONFIG_GEOS=y
+
+##
+## file: arch/x86/Kconfig.cpu
+##
+## choice: Processor family
+# CONFIG_M486 is not set
+CONFIG_M686=y
+## end choice
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C_STUB=m
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+# CONFIG_I2C_ELEKTOR is not set
+
+##
+## file: drivers/input/keyboard/Kconfig
+##
+CONFIG_KEYBOARD_GPIO_POLLED=m
+
+##
+## file: drivers/input/mouse/Kconfig
+##
+CONFIG_MOUSE_PS2_OLPC=y
+
+##
+## 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/platform/x86/Kconfig
+##
+CONFIG_XO1_RFKILL=m
+CONFIG_XO15_EBOOK=m
+
+##
+## file: drivers/power/supply/Kconfig
+##
+CONFIG_BATTERY_OLPC=m
+
+##
+## file: drivers/tty/Kconfig
+##
+# CONFIG_MOXA_INTELLIO is not set
+
+##
+## file: drivers/video/fbdev/geode/Kconfig
+##
+CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_LX=m
+CONFIG_FB_GEODE_GX=m
+CONFIG_FB_GEODE_GX1=m
+
+##
+## file: lib/Kconfig.debug
+##
+# CONFIG_DEBUG_HIGHMEM is not set
+
diff --git a/config/i386/config.686-pae b/config/i386/config.686-pae
new file mode 100644 (file)
index 0000000..c5faf69
--- /dev/null
@@ -0,0 +1,54 @@
+##
+## file: arch/x86/Kconfig
+##
+# CONFIG_X86_32_IRIS is not set
+## 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_ALIX is not set
+# CONFIG_NET5501 is not set
+# CONFIG_GEOS is not set
+
+##
+## file: arch/x86/Kconfig.cpu
+##
+## choice: Processor family
+# CONFIG_M486 is not set
+CONFIG_M686=y
+## end choice
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C_STUB=m
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+# CONFIG_I2C_ELEKTOR 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/tty/Kconfig
+##
+# CONFIG_MOXA_INTELLIO is not set
+
+##
+## file: lib/Kconfig.debug
+##
+# CONFIG_DEBUG_HIGHMEM is not set
+
diff --git a/config/i386/defines b/config/i386/defines
new file mode 100644 (file)
index 0000000..1123508
--- /dev/null
@@ -0,0 +1,35 @@
+[base]
+featuresets:
+ none
+ rt
+kernel-arch: x86
+
+[build]
+image-file: arch/x86/boot/bzImage
+vdso: true
+
+[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,
+ Core and Atom; AMD Geode NX, Athlon (K7), Duron, Opteron, Sempron,
+ Turion or Phenom; Transmeta Efficeon; VIA C7; and some other processors.
+
+[image]
+bootloaders: grub-pc extlinux
+install-stem: vmlinuz
+breaks: xserver-xorg-input-vmmouse (<< 1:13.0.99)
+
+[relations]
+headers%gcc-6: linux-compiler-gcc-6-x86
+
+[686_description]
+hardware: older PCs
+hardware-long: PCs with one or more processors not supporting PAE
+
+[686-pae_build]
+debug-info: true
+
+[686-pae_description]
+hardware: modern PCs
+hardware-long: PCs with one or more processors supporting PAE
+parts: pae
diff --git a/config/i386/none/defines b/config/i386/none/defines
new file mode 100644 (file)
index 0000000..45987b5
--- /dev/null
@@ -0,0 +1,7 @@
+[base]
+flavours:
+ 686
+ 686-pae
+
+[686-pae_description]
+parts: xen
diff --git a/config/i386/rt/defines b/config/i386/rt/defines
new file mode 100644 (file)
index 0000000..358e12d
--- /dev/null
@@ -0,0 +1,3 @@
+[base]
+flavours:
+ 686-pae
diff --git a/config/kernelarch-arm/config b/config/kernelarch-arm/config
new file mode 100644 (file)
index 0000000..eafef74
--- /dev/null
@@ -0,0 +1,117 @@
+##
+## file: arch/arm/Kconfig
+##
+CONFIG_MMU=y
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_CPU_SW_DOMAIN_PAN=y
+CONFIG_SECCOMP=y
+CONFIG_KEXEC=y
+
+##
+## file: arch/arm/crypto/Kconfig
+##
+CONFIG_CRYPTO_SHA1_ARM=m
+CONFIG_CRYPTO_AES_ARM=m
+
+##
+## 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/mtd/maps/Kconfig
+##
+CONFIG_MTD_PHYSMAP=y
+
+##
+## file: drivers/net/wireless/intel/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/pci/Kconfig
+##
+# CONFIG_PCI_IOV 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_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: drivers/thermal/Kconfig
+##
+CONFIG_THERMAL=y
+CONFIG_CPU_THERMAL=y
+
+##
+## file: lib/xz/Kconfig
+##
+CONFIG_XZ_DEC_ARM=y
+CONFIG_XZ_DEC_ARMTHUMB=y
+
diff --git a/config/kernelarch-mips/config b/config/kernelarch-mips/config
new file mode 100644 (file)
index 0000000..3ea9718
--- /dev/null
@@ -0,0 +1,63 @@
+##
+## file: arch/mips/Kconfig
+##
+CONFIG_RELOCATABLE=y
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_KEXEC=y
+CONFIG_SECCOMP=y
+CONFIG_PCI=y
+# CONFIG_RAPIDIO is not set
+#. Ignored in 32-bit configurations
+CONFIG_MIPS32_O32=y
+CONFIG_MIPS32_N32=y
+
+##
+## file: arch/mips/Kconfig.debug
+##
+CONFIG_EARLY_PRINTK=y
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_ATA=y
+
+##
+## file: drivers/net/ethernet/sun/Kconfig
+##
+# CONFIG_NIU is not set
+
+##
+## file: drivers/scsi/Kconfig
+##
+CONFIG_SCSI=y
+CONFIG_BLK_DEV_SD=y
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+
+##
+## file: drivers/usb/Kconfig
+##
+CONFIG_USB=m
+
+##
+## file: drivers/usb/host/Kconfig
+##
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_OHCI_HCD=m
+
+##
+## file: drivers/video/console/Kconfig
+##
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+
+##
+## file: init/Kconfig
+##
+CONFIG_SGETMASK_SYSCALL=y
+CONFIG_SYSFS_SYSCALL=y
+
diff --git a/config/kernelarch-mips/config.loongson-3 b/config/kernelarch-mips/config.loongson-3
new file mode 100644 (file)
index 0000000..9574411
--- /dev/null
@@ -0,0 +1,104 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: System type
+CONFIG_MACH_LOONGSON64=y
+## end choice
+## choice: Kernel code model
+# CONFIG_32BIT is not set
+CONFIG_64BIT=y
+## end choice
+CONFIG_SMP=y
+CONFIG_HOTPLUG_CPU=y
+CONFIG_NR_CPUS=16
+
+##
+## file: arch/mips/loongson64/Kconfig
+##
+## choice: Machine Type
+CONFIG_LOONGSON_MACH3X=y
+## end choice
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_SATA_AHCI=y
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+CONFIG_DRM=m
+CONFIG_DRM_RADEON=m
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C=y
+
+##
+## file: drivers/i2c/algos/Kconfig
+##
+CONFIG_I2C_ALGOBIT=y
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_NE2K_PCI=m
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+
+##
+## file: drivers/pci/pcie/Kconfig
+##
+# CONFIG_PCIEPORTBUS is not set
+
+##
+## file: drivers/rtc/Kconfig
+##
+CONFIG_RTC_DRV_CMOS=y
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+##
+## file: drivers/usb/host/Kconfig
+##
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_UHCI_HCD=m
+CONFIG_USB_SL811_HCD=m
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB_RADEON=y
+
+##
+## file: kernel/Kconfig.preempt
+##
+## choice: Preemption Model
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+## end choice
+
+##
+## file: mm/Kconfig.debug
+##
+# CONFIG_PAGE_EXTENSION is not set
+# CONFIG_PAGE_POISONING is not set
+
+##
+## file: sound/pci/hda/Kconfig
+##
+CONFIG_SND_HDA_INTEL=m
+
diff --git a/config/kernelarch-mips/config.malta b/config/kernelarch-mips/config.malta
new file mode 100644 (file)
index 0000000..c079ae5
--- /dev/null
@@ -0,0 +1,532 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: System type
+CONFIG_MIPS_MALTA=y
+## end choice
+## choice: Kernel page size
+CONFIG_PAGE_SIZE_4KB=y
+## end choice
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_OLDPIIX=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_MPIIX=m
+CONFIG_PATA_NS87410=m
+
+##
+## file: drivers/block/Kconfig
+##
+CONFIG_BLK_DEV_FD=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
+
+##
+## 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_PPDEV=m
+
+##
+## file: drivers/char/ipmi/Kconfig
+##
+CONFIG_IPMI_HANDLER=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+CONFIG_DRM=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_MGA=m
+
+##
+## file: drivers/hwmon/Kconfig
+##
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_MAX1619=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_PCF8591=m
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C=m
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+
+##
+## file: drivers/input/gameport/Kconfig
+##
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_EMU10K1=m
+CONFIG_GAMEPORT_FM801=m
+
+##
+## file: drivers/input/joystick/Kconfig
+##
+CONFIG_INPUT_JOYSTICK=y
+
+##
+## file: drivers/input/keyboard/Kconfig
+##
+CONFIG_KEYBOARD_NEWTON=m
+CONFIG_KEYBOARD_SUNKBD=m
+
+##
+## file: drivers/input/mouse/Kconfig
+##
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_SERIAL=m
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_VSXXXAA=m
+
+##
+## file: drivers/input/serio/Kconfig
+##
+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/mfd/Kconfig
+##
+CONFIG_MFD_SM501=m
+
+##
+## file: drivers/mmc/Kconfig
+##
+CONFIG_MMC=m
+
+##
+## file: drivers/mmc/card/Kconfig
+##
+CONFIG_MMC_BLOCK=m
+
+##
+## file: drivers/mtd/Kconfig
+##
+CONFIG_MTD_REDBOOT_PARTS=y
+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_INTELEXT=m
+CONFIG_MTD_CFI_AMDSTD=m
+CONFIG_MTD_CFI_STAA=m
+CONFIG_MTD_ROM=m
+CONFIG_MTD_ABSENT=m
+
+##
+## file: drivers/mtd/devices/Kconfig
+##
+CONFIG_MTD_PMC551=m
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTD_BLOCK2MTD=m
+
+##
+## file: drivers/mtd/maps/Kconfig
+##
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=m
+CONFIG_MTD_PCI=m
+
+##
+## file: drivers/mtd/nand/Kconfig
+##
+CONFIG_MTD_NAND=m
+CONFIG_MTD_NAND_DISKONCHIP=m
+
+##
+## file: drivers/net/Kconfig
+##
+CONFIG_NET_FC=y
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+CONFIG_FEALNX=m
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_NE2K_PCI=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+CONFIG_AMD8111_ETH=m
+
+##
+## file: drivers/net/ethernet/broadcom/Kconfig
+##
+CONFIG_B44=m
+
+##
+## file: drivers/net/ethernet/dec/tulip/Kconfig
+##
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+CONFIG_DM9102=m
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+CONFIG_SUNDANCE=m
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NATSEMI=m
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+
+##
+## file: drivers/net/ethernet/sis/Kconfig
+##
+CONFIG_SIS900=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_EPIC100=m
+
+##
+## file: drivers/net/ethernet/via/Kconfig
+##
+CONFIG_VIA_RHINE=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/wireless/atmel/Kconfig
+##
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+
+##
+## file: drivers/net/wireless/intel/ipw2x00/Kconfig
+##
+CONFIG_IPW2100=m
+CONFIG_IPW2100_MONITOR=y
+
+##
+## file: drivers/net/wireless/intersil/orinoco/Kconfig
+##
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_PCI_HERMES=m
+
+##
+## file: drivers/net/wireless/marvell/mwifiex/Kconfig
+##
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+
+##
+## file: drivers/net/wireless/zydas/Kconfig
+##
+CONFIG_USB_ZD1201=m
+
+##
+## file: drivers/pci/pcie/Kconfig
+##
+# CONFIG_PCIEPORTBUS 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_RS5C348=m
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_CMOS=y
+CONFIG_RTC_DRV_M48T86=m
+
+##
+## file: drivers/scsi/Kconfig
+##
+CONFIG_SCSI_ARCMSR=m
+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_QLOGIC_1280=m
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_AM53C974=m
+CONFIG_SCSI_DEBUG=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/tty/serial/Kconfig
+##
+CONFIG_SERIAL_JSM=m
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+##
+## file: drivers/usb/Kconfig
+##
+CONFIG_USB_USS720=m
+
+##
+## file: drivers/usb/atm/Kconfig
+##
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+
+##
+## file: drivers/usb/host/Kconfig
+##
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_UHCI_HCD=m
+CONFIG_USB_SL811_HCD=m
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+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_S1D13XXX=m
+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_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_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/watchdog/Kconfig
+##
+CONFIG_PCIPCWATCHDOG=m
+CONFIG_WDTPCI=m
+CONFIG_USBPCWATCHDOG=m
+
+##
+## file: net/ax25/Kconfig
+##
+CONFIG_HAMRADIO=y
+CONFIG_AX25=m
+CONFIG_NETROM=m
+CONFIG_ROSE=m
+
+##
+## file: net/decnet/Kconfig
+##
+CONFIG_DECNET=m
+
+##
+## file: net/decnet/netfilter/Kconfig
+##
+CONFIG_DECNET_NF_GRABULATOR=m
+
+##
+## file: net/ipx/Kconfig
+##
+CONFIG_IPX=m
+
+##
+## file: net/irda/Kconfig
+##
+CONFIG_IRDA=m
+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: net/lapb/Kconfig
+##
+CONFIG_LAPB=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_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_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
+
diff --git a/config/kernelarch-mips/config.mips32r2 b/config/kernelarch-mips/config.mips32r2
new file mode 100644 (file)
index 0000000..88f2c05
--- /dev/null
@@ -0,0 +1,10 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: CPU type
+CONFIG_CPU_MIPS32_R2=y
+## end choice
+## choice: Kernel code model
+CONFIG_32BIT=y
+## end choice
+
diff --git a/config/kernelarch-mips/config.mips32r6 b/config/kernelarch-mips/config.mips32r6
new file mode 100644 (file)
index 0000000..c95ffab
--- /dev/null
@@ -0,0 +1,10 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: CPU type
+CONFIG_CPU_MIPS32_R6=y
+## end choice
+## choice: Kernel code model
+CONFIG_32BIT=y
+## end choice
+
diff --git a/config/kernelarch-mips/config.mips64r2 b/config/kernelarch-mips/config.mips64r2
new file mode 100644 (file)
index 0000000..1c1bed1
--- /dev/null
@@ -0,0 +1,10 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: CPU type
+CONFIG_CPU_MIPS64_R2=y
+## end choice
+## choice: Kernel code model
+CONFIG_64BIT=y
+## end choice
+
diff --git a/config/kernelarch-mips/config.mips64r6 b/config/kernelarch-mips/config.mips64r6
new file mode 100644 (file)
index 0000000..2cd32b0
--- /dev/null
@@ -0,0 +1,10 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: CPU type
+CONFIG_CPU_MIPS64_R6=y
+## end choice
+## choice: Kernel code model
+CONFIG_64BIT=y
+## end choice
+
diff --git a/config/kernelarch-mips/config.octeon b/config/kernelarch-mips/config.octeon
new file mode 100644 (file)
index 0000000..8b1c35a
--- /dev/null
@@ -0,0 +1,187 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: System type
+CONFIG_CAVIUM_OCTEON_SOC=y
+## end choice
+## choice: Kernel code model
+# CONFIG_32BIT is not set
+CONFIG_64BIT=y
+## end choice
+CONFIG_SMP=y
+# CONFIG_HOTPLUG_CPU is not set
+CONFIG_NR_CPUS=64
+
+##
+## file: arch/mips/cavium-octeon/Kconfig
+##
+CONFIG_CAVIUM_CN63XXP1=y
+CONFIG_CAVIUM_OCTEON_CVMSEG_SIZE=1
+# CONFIG_CAVIUM_OCTEON_2ND_KERNEL is not set
+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: crypto/Kconfig
+##
+CONFIG_CRYPTO_MD5_OCTEON=m
+CONFIG_CRYPTO_SHA1_OCTEON=m
+CONFIG_CRYPTO_SHA256_OCTEON=m
+CONFIG_CRYPTO_SHA512_OCTEON=m
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_SATA_AHCI_PLATFORM=m
+CONFIG_AHCI_OCTEON=m
+CONFIG_PATA_OCTEON_CF=y
+
+##
+## file: drivers/char/hw_random/Kconfig
+##
+CONFIG_HW_RANDOM_OCTEON=m
+
+##
+## file: drivers/edac/Kconfig
+##
+CONFIG_EDAC=y
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_OCTEON_PC=m
+CONFIG_EDAC_OCTEON_L2C=m
+CONFIG_EDAC_OCTEON_LMC=m
+CONFIG_EDAC_OCTEON_PCI=m
+
+##
+## file: drivers/hwmon/Kconfig
+##
+CONFIG_SENSORS_ADM1031=m
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C=y
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+CONFIG_I2C_OCTEON=y
+
+##
+## file: drivers/input/keyboard/Kconfig
+##
+# CONFIG_KEYBOARD_ATKBD is not set
+
+##
+## file: drivers/input/mouse/Kconfig
+##
+# CONFIG_MOUSE_PS2 is not set
+
+##
+## file: drivers/input/serio/Kconfig
+##
+# CONFIG_SERIO_I8042 is not set
+
+##
+## file: drivers/input/touchscreen/Kconfig
+##
+# CONFIG_INPUT_TOUCHSCREEN is not set
+
+##
+## file: drivers/mmc/Kconfig
+##
+CONFIG_MMC=m
+
+##
+## file: drivers/mmc/card/Kconfig
+##
+CONFIG_MMC_BLOCK=m
+
+##
+## file: drivers/mtd/Kconfig
+##
+CONFIG_MTD=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/ethernet/cavium/Kconfig
+##
+CONFIG_OCTEON_MGMT_ETHERNET=y
+
+##
+## file: drivers/net/phy/Kconfig
+##
+CONFIG_MDIO_OCTEON=y
+
+##
+## file: drivers/rtc/Kconfig
+##
+CONFIG_RTC_DRV_DS1307=y
+
+##
+## file: drivers/spi/Kconfig
+##
+CONFIG_SPI_OCTEON=y
+
+##
+## file: drivers/staging/octeon/Kconfig
+##
+CONFIG_OCTEON_ETHERNET=y
+
+##
+## file: drivers/staging/octeon-usb/Kconfig
+##
+CONFIG_OCTEON_USB=y
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+CONFIG_SERIAL_8250_DW=y
+
+##
+## file: drivers/usb/host/Kconfig
+##
+CONFIG_USB_OCTEON_EHCI=y
+CONFIG_USB_OCTEON_OHCI=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+# CONFIG_FB is not set
+
+##
+## file: kernel/power/Kconfig
+##
+# CONFIG_SUSPEND is not set
+# CONFIG_HIBERNATION is not set
+
+##
+## file: mm/Kconfig
+##
+## choice: Memory model
+CONFIG_SPARSEMEM_MANUAL=y
+## end choice
+
+##
+## file: unknown
+##
+#. octeon_mmc driver was requested in #800594, but still hasn't landed
+#. upstream.  Last submitted at: https://lkml.org/lkml/2016/12/19/185
+CONFIG_OCTEON_MMC=m
+
diff --git a/config/kernelarch-powerpc/config b/config/kernelarch-powerpc/config
new file mode 100644 (file)
index 0000000..db8641c
--- /dev/null
@@ -0,0 +1,998 @@
+##
+## 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_RAPIDIO is not set
+# CONFIG_ADVANCED_OPTIONS is not set
+
+##
+## file: arch/powerpc/Kconfig.debug
+##
+CONFIG_PPC_DISABLE_WERROR=y
+# 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_BDI_SWITCH is not set
+CONFIG_BOOTX_TEXT=y
+
+##
+## file: arch/powerpc/kvm/Kconfig
+##
+CONFIG_VIRTUALIZATION=y
+
+##
+## file: arch/powerpc/platforms/Kconfig
+##
+CONFIG_KVM_GUEST=y
+CONFIG_RTAS_PROC=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: block/partitions/Kconfig
+##
+CONFIG_AMIGA_PARTITION=y
+CONFIG_MAC_PARTITION=y
+
+##
+## file: crypto/Kconfig
+##
+CONFIG_CRYPTO_SHA1_PPC=m
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_ATA=y
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
+CONFIG_PATA_MACIO=y
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_SC1200=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
+CONFIG_PATA_NS87410=m
+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_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/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_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_POWERNV=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+
+##
+## file: drivers/cpufreq/Kconfig.powerpc
+##
+CONFIG_CPU_FREQ_PMAC=y
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+CONFIG_DRM=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_MGA=m
+# CONFIG_DRM_SIS is not set
+
+##
+## file: drivers/gpu/drm/i2c/Kconfig
+##
+CONFIG_DRM_I2C_CH7006=m
+CONFIG_DRM_I2C_SIL164=m
+
+##
+## file: drivers/gpu/drm/nouveau/Kconfig
+##
+CONFIG_DRM_NOUVEAU=m
+CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+
+##
+## file: drivers/hid/Kconfig
+##
+CONFIG_HID_APPLEIR=m
+
+##
+## file: drivers/hid/usbhid/Kconfig
+##
+CONFIG_USB_HID=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_MAX1619=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_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_STUB is not set
+# 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
+#. This isn't auto-loaded (#713943)
+CONFIG_I2C_POWERMAC=y
+CONFIG_I2C_MPC=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PCA_ISA=m
+CONFIG_SCx200_ACB=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=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_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+
+##
+## 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_DISK 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_WINDFARM=m
+CONFIG_ANSLCD=m
+CONFIG_PMAC_RACKMETER=m
+
+##
+## file: drivers/media/radio/Kconfig
+##
+CONFIG_USB_DSBR=m
+CONFIG_RADIO_MAXIRADIO=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_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 is not set
+CONFIG_ARCNET_COM90xxIO=m
+# CONFIG_ARCNET_RIM_I is not set
+CONFIG_ARCNET_COM20020=m
+CONFIG_ARCNET_COM20020_PCI=m
+CONFIG_ARCNET_COM20020_CS=m
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+CONFIG_FEALNX=m
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_3C589=m
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_PCMCIA_AXNET=m
+CONFIG_NE2K_PCI=m
+CONFIG_PCMCIA_PCNET=m
+
+##
+## file: drivers/net/ethernet/adaptec/Kconfig
+##
+CONFIG_ADAPTEC_STARFIRE=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+# CONFIG_AMD8111_ETH is not set
+CONFIG_PCMCIA_NMCLAN=m
+
+##
+## file: drivers/net/ethernet/apple/Kconfig
+##
+CONFIG_MACE=m
+# CONFIG_MACE_AAUI_PORT is not set
+CONFIG_BMAC=m
+
+##
+## file: drivers/net/ethernet/broadcom/Kconfig
+##
+CONFIG_B44=m
+
+##
+## file: drivers/net/ethernet/dec/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_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_PCMCIA_XIRCOM=m
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+CONFIG_SUNDANCE=m
+CONFIG_SUNDANCE_MMIO=y
+
+##
+## file: drivers/net/ethernet/fujitsu/Kconfig
+##
+CONFIG_PCMCIA_FMVJ18X=m
+
+##
+## file: drivers/net/ethernet/hp/Kconfig
+##
+# CONFIG_HP100 is not set
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/marvell/Kconfig
+##
+CONFIG_MV643XX_ETH=m
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NATSEMI=m
+
+##
+## file: drivers/net/ethernet/nvidia/Kconfig
+##
+# CONFIG_FORCEDETH is not set
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+
+##
+## file: drivers/net/ethernet/sis/Kconfig
+##
+CONFIG_SIS900=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_EPIC100=m
+
+##
+## file: drivers/net/ethernet/sun/Kconfig
+##
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+
+##
+## file: drivers/net/ethernet/ti/Kconfig
+##
+CONFIG_TLAN=m
+
+##
+## file: drivers/net/ethernet/via/Kconfig
+##
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+
+##
+## file: drivers/net/ethernet/xircom/Kconfig
+##
+CONFIG_PCMCIA_XIRC2PS=m
+
+##
+## file: drivers/net/fddi/Kconfig
+##
+CONFIG_FDDI=y
+CONFIG_SKFP=m
+
+##
+## file: drivers/net/hippi/Kconfig
+##
+CONFIG_HIPPI=y
+# CONFIG_ROADRUNNER is not set
+
+##
+## 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/wan/Kconfig
+##
+CONFIG_WAN=y
+CONFIG_LANMEDIA=m
+CONFIG_PCI200SYN=m
+CONFIG_WANXL=m
+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
+
+##
+## file: drivers/net/wireless/Kconfig
+##
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_PCMCIA_WL3501=m
+
+##
+## file: drivers/net/wireless/atmel/Kconfig
+##
+CONFIG_ATMEL=m
+# CONFIG_PCI_ATMEL is not set
+CONFIG_PCMCIA_ATMEL=m
+
+##
+## file: drivers/net/wireless/cisco/Kconfig
+##
+CONFIG_AIRO_CS=m
+
+##
+## file: drivers/net/wireless/intel/ipw2x00/Kconfig
+##
+# CONFIG_IPW2100 is not set
+
+##
+## file: drivers/net/wireless/intersil/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/net/wireless/marvell/mwifiex/Kconfig
+##
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_PCIE=m
+
+##
+## file: drivers/net/wireless/zydas/Kconfig
+##
+CONFIG_USB_ZD1201=m
+
+##
+## 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/supply/Kconfig
+##
+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_AM53C974=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/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_PMACZILOG=y
+CONFIG_SERIAL_PMACZILOG_CONSOLE=y
+CONFIG_SERIAL_JSM=m
+
+##
+## file: drivers/tty/serial/8250/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
+
+##
+## 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_OHCI_HCD=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/console/Kconfig
+##
+CONFIG_VGA_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+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_ASILIANT is not set
+# CONFIG_FB_VGA16 is not set
+CONFIG_FB_S1D13XXX=m
+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_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=y
+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_IBM_GXT4500=m
+# CONFIG_FB_VIRTUAL is not set
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_WATCHDOG_RTAS=m
+CONFIG_PCIPCWATCHDOG=m
+CONFIG_WDTPCI=m
+CONFIG_USBPCWATCHDOG=m
+
+##
+## file: init/Kconfig
+##
+CONFIG_SGETMASK_SYSCALL=y
+
+##
+## file: lib/Kconfig.debug
+##
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+
+##
+## file: lib/xz/Kconfig
+##
+CONFIG_XZ_DEC_POWERPC=y
+
+##
+## 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/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: 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
+
diff --git a/config/kernelarch-powerpc/config-arch-64 b/config/kernelarch-powerpc/config-arch-64
new file mode 100644 (file)
index 0000000..2cf126e
--- /dev/null
@@ -0,0 +1,188 @@
+##
+## file: arch/powerpc/Kconfig
+##
+CONFIG_PPC_TRANSACTIONAL_MEM=y
+# CONFIG_CRASH_DUMP is not set
+CONFIG_IRQ_ALL_CPUS=y
+CONFIG_NUMA=y
+## choice: Page size
+CONFIG_PPC_64K_PAGES=y
+## end choice
+CONFIG_SCHED_SMT=y
+CONFIG_KERNEL_START=0xc000000000000000
+
+##
+## file: arch/powerpc/kvm/Kconfig
+##
+CONFIG_KVM_BOOK3S_64=m
+CONFIG_KVM_BOOK3S_64_HV=m
+CONFIG_KVM_BOOK3S_64_PR=m
+CONFIG_KVM_XICS=y
+
+##
+## file: arch/powerpc/platforms/Kconfig
+##
+CONFIG_RTAS_PROC=y
+CONFIG_RTAS_FLASH=m
+CONFIG_IBMEBUS=y
+
+##
+## file: arch/powerpc/platforms/Kconfig.cputype
+##
+CONFIG_PPC64=y
+CONFIG_ALTIVEC=y
+CONFIG_VSX=y
+CONFIG_SMP=y
+CONFIG_NR_CPUS=2048
+
+##
+## file: arch/powerpc/platforms/powernv/Kconfig
+##
+CONFIG_OPAL_PRD=m
+
+##
+## file: arch/powerpc/platforms/pseries/Kconfig
+##
+CONFIG_PPC_PSERIES=y
+CONFIG_PPC_SPLPAR=y
+CONFIG_SCANLOG=m
+# CONFIG_LPARCFG is not set
+
+##
+## file: block/partitions/Kconfig
+##
+CONFIG_AIX_PARTITION=y
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_PATA_AMD=m
+
+##
+## file: drivers/block/Kconfig
+##
+# CONFIG_MAC_FLOPPY is not set
+CONFIG_BLK_DEV_RSXX=m
+
+##
+## file: drivers/crypto/Kconfig
+##
+CONFIG_CRYPTO_DEV_VMX=y
+
+##
+## file: drivers/crypto/vmx/Kconfig
+##
+CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
+
+##
+## file: drivers/gpu/drm/ast/Kconfig
+##
+CONFIG_DRM_AST=m
+
+##
+## file: drivers/iommu/Kconfig
+##
+CONFIG_SPAPR_TCE_IOMMU=y
+
+##
+## file: drivers/misc/genwqe/Kconfig
+##
+CONFIG_GENWQE=m
+
+##
+## file: drivers/mtd/Kconfig
+##
+CONFIG_MTD=m
+
+##
+## file: drivers/mtd/devices/Kconfig
+##
+CONFIG_MTD_POWERNV_FLASH=m
+
+##
+## file: drivers/net/ethernet/ibm/Kconfig
+##
+CONFIG_IBMVETH=m
+
+##
+## file: drivers/net/ethernet/ibm/emac/Kconfig
+##
+CONFIG_IBM_EMAC=m
+CONFIG_IBM_EMAC_RXB=128
+CONFIG_IBM_EMAC_TXB=64
+CONFIG_IBM_EMAC_POLL_WEIGHT=32
+CONFIG_IBM_EMAC_RX_COPY_THRESHOLD=256
+CONFIG_IBM_EMAC_RX_SKB_HEADROOM=0
+# CONFIG_IBM_EMAC_DEBUG is not set
+
+##
+## file: drivers/net/ethernet/marvell/Kconfig
+##
+# CONFIG_MV643XX_ETH is not set
+
+##
+## file: drivers/pci/hotplug/Kconfig
+##
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HOTPLUG_PCI_RPA=m
+CONFIG_HOTPLUG_PCI_RPA_DLPAR=m
+
+##
+## file: drivers/scsi/Kconfig
+##
+CONFIG_SCSI_IBMVSCSI=m
+CONFIG_SCSI_IBMVSCSIS=m
+CONFIG_SCSI_IBMVFC=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/vfio/Kconfig
+##
+CONFIG_VFIO=m
+
+##
+## file: drivers/vfio/pci/Kconfig
+##
+CONFIG_VFIO_PCI=m
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+# CONFIG_FB_IMSTT is not set
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_WATCHDOG_RTAS=m
+
+##
+## file: lib/Kconfig
+##
+CONFIG_CPUMASK_OFFSTACK=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
+CONFIG_SPARSEMEM_VMEMMAP=y
+
diff --git a/config/kernelarch-powerpc/config-arch-64-be b/config/kernelarch-powerpc/config-arch-64-be
new file mode 100644 (file)
index 0000000..bfd4d90
--- /dev/null
@@ -0,0 +1,111 @@
+##
+## file: arch/powerpc/Kconfig
+##
+CONFIG_CMDLINE="console=hvsi0 console=hvc0 console=ttyS0,9600 console=tty0"
+
+##
+## file: arch/powerpc/platforms/Kconfig
+##
+CONFIG_IBMEBUS=y
+
+##
+## file: arch/powerpc/platforms/cell/Kconfig
+##
+CONFIG_PPC_IBM_CELL_BLADE=y
+CONFIG_SPU_FS=m
+CONFIG_CBE_RAS=y
+CONFIG_CBE_THERM=m
+
+##
+## 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: drivers/char/hw_random/Kconfig
+##
+CONFIG_HW_RANDOM_PASEMI=m
+
+##
+## file: drivers/cpufreq/Kconfig.powerpc
+##
+CONFIG_CPU_FREQ_CBE=m
+CONFIG_CPU_FREQ_PMAC64=y
+#. It's a bool
+CONFIG_PPC_PASEMI_CPUFREQ=y
+
+##
+## file: drivers/i2c/busses/Kconfig
+##
+CONFIG_I2C_PASEMI=m
+
+##
+## file: drivers/macintosh/Kconfig
+##
+CONFIG_WINDFARM_PM81=m
+CONFIG_WINDFARM_PM72=m
+CONFIG_WINDFARM_RM31=m
+CONFIG_WINDFARM_PM91=m
+CONFIG_WINDFARM_PM112=m
+CONFIG_WINDFARM_PM121=m
+
+##
+## file: drivers/net/ethernet/ibm/Kconfig
+##
+CONFIG_EHEA=m
+
+##
+## file: drivers/net/ethernet/pasemi/Kconfig
+##
+CONFIG_PASEMI_MAC=m
+
+##
+## file: drivers/net/ethernet/toshiba/Kconfig
+##
+CONFIG_GELIC_NET=m
+CONFIG_GELIC_WIRELESS=y
+CONFIG_SPIDER_NET=m
+
+##
+## file: drivers/rtc/Kconfig
+##
+CONFIG_RTC_DRV_PS3=m
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB_PS3=y
+CONFIG_FB_PS3_DEFAULT_SIZE_M=9
+
+##
+## file: init/Kconfig
+##
+CONFIG_SYSFS_SYSCALL=y
+
+##
+## file: sound/ppc/Kconfig
+##
+CONFIG_SND_PS3=m
+CONFIG_SND_PS3_DEFAULT_START_DELAY=2000
+
diff --git a/config/kernelarch-powerpc/config-arch-64-le b/config/kernelarch-powerpc/config-arch-64-le
new file mode 100644 (file)
index 0000000..f0ad2b3
--- /dev/null
@@ -0,0 +1,36 @@
+##
+## file: arch/powerpc/Kconfig
+##
+# CONFIG_CMDLINE_BOOL is not set
+
+##
+## file: arch/powerpc/platforms/Kconfig.cputype
+##
+## choice: Endianness selection
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_LITTLE_ENDIAN=y
+## end choice
+
+##
+## file: arch/powerpc/platforms/powermac/Kconfig
+##
+#. This needs to be explicitly disabled currently (3.15)
+# CONFIG_PPC_PMAC is not set
+
+##
+## file: drivers/cpufreq/Kconfig
+##
+## choice: Default CPUFreq governor
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE 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: kernel/power/Kconfig
+##
+#. See #789070
+# CONFIG_HIBERNATION is not set
+
diff --git a/config/kernelarch-sparc/config b/config/kernelarch-sparc/config
new file mode 100644 (file)
index 0000000..0ca9d15
--- /dev/null
@@ -0,0 +1,626 @@
+##
+## file: arch/sparc/Kconfig
+##
+CONFIG_64BIT=y
+CONFIG_SECCOMP=y
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_SUN_LDOMS=y
+CONFIG_PCI=y
+CONFIG_SUN_OPENPROMFS=m
+
+##
+## file: block/partitions/Kconfig
+##
+CONFIG_SUN_PARTITION=y
+
+##
+## file: crypto/Kconfig
+##
+CONFIG_CRYPTO_CRC32C_SPARC64=m
+CONFIG_CRYPTO_MD5_SPARC64=m
+CONFIG_CRYPTO_SHA1_SPARC64=m
+CONFIG_CRYPTO_SHA256_SPARC64=m
+CONFIG_CRYPTO_SHA512_SPARC64=m
+CONFIG_CRYPTO_AES_SPARC64=m
+CONFIG_CRYPTO_CAMELLIA_SPARC64=m
+CONFIG_CRYPTO_DES_SPARC64=m
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_PATA_ALI=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_SERVERWORKS=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_NS87410=m
+CONFIG_PATA_LEGACY=m
+
+##
+## file: drivers/block/Kconfig
+##
+CONFIG_BLK_DEV_FD=y
+# 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_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/crypto/Kconfig
+##
+CONFIG_CRYPTO_DEV_NIAGARA2=m
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+CONFIG_DRM=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_MGA=m
+
+##
+## file: drivers/gpu/drm/i2c/Kconfig
+##
+CONFIG_DRM_I2C_CH7006=m
+CONFIG_DRM_I2C_SIL164=m
+
+##
+## file: drivers/gpu/drm/nouveau/Kconfig
+##
+CONFIG_DRM_NOUVEAU=m
+# CONFIG_DRM_NOUVEAU_BACKLIGHT is not set
+
+##
+## 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_MAX1619 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_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_STUB is not set
+# 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
+
+##
+## 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/pci/cx88/Kconfig
+##
+# CONFIG_VIDEO_CX88 is not set
+
+##
+## file: drivers/media/pci/saa7146/Kconfig
+##
+# CONFIG_VIDEO_HEXIUM_GEMINI is not set
+# CONFIG_VIDEO_HEXIUM_ORION is not set
+# CONFIG_VIDEO_MXB is not set
+
+##
+## file: drivers/media/pci/zoran/Kconfig
+##
+# CONFIG_VIDEO_ZORAN is not set
+
+##
+## file: drivers/media/radio/Kconfig
+##
+# CONFIG_USB_DSBR is not set
+# CONFIG_RADIO_MAXIRADIO 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_FC=y
+
+##
+## file: drivers/net/arcnet/Kconfig
+##
+# CONFIG_ARCNET is not set
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+CONFIG_FEALNX=m
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_NE2K_PCI=m
+
+##
+## file: drivers/net/ethernet/adaptec/Kconfig
+##
+CONFIG_ADAPTEC_STARFIRE=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+# CONFIG_AMD8111_ETH is not set
+CONFIG_SUNLANCE=m
+
+##
+## file: drivers/net/ethernet/broadcom/Kconfig
+##
+CONFIG_B44=m
+
+##
+## file: drivers/net/ethernet/dec/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_WINBOND_840=m
+CONFIG_DM9102=m
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+CONFIG_SUNDANCE=m
+CONFIG_SUNDANCE_MMIO=y
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NATSEMI=m
+
+##
+## file: drivers/net/ethernet/nvidia/Kconfig
+##
+# CONFIG_FORCEDETH is not set
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=m
+
+##
+## file: drivers/net/ethernet/sis/Kconfig
+##
+CONFIG_SIS900=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_EPIC100=m
+
+##
+## file: drivers/net/ethernet/sun/Kconfig
+##
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNBMAC=m
+CONFIG_SUNQE=m
+CONFIG_SUNGEM=m
+CONFIG_SUNVNET=m
+
+##
+## file: drivers/net/ethernet/via/Kconfig
+##
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+
+##
+## file: drivers/net/fddi/Kconfig
+##
+CONFIG_FDDI=y
+CONFIG_SKFP=m
+
+##
+## file: drivers/net/hippi/Kconfig
+##
+# CONFIG_HIPPI is not set
+
+##
+## file: drivers/net/plip/Kconfig
+##
+CONFIG_PLIP=m
+
+##
+## file: drivers/net/wan/Kconfig
+##
+# CONFIG_WAN is not set
+
+##
+## file: drivers/net/wireless/marvell/mwifiex/Kconfig
+##
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_PCIE=m
+
+##
+## 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_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/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_OHCI_HCD=m
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_SL811_HCD is not set
+
+##
+## file: drivers/video/backlight/Kconfig
+##
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+##
+## file: drivers/video/console/Kconfig
+##
+CONFIG_FRAMEBUFFER_CONSOLE=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+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_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/w1/Kconfig
+##
+# CONFIG_W1 is not set
+
+##
+## file: init/Kconfig
+##
+CONFIG_SGETMASK_SYSCALL=y
+CONFIG_SYSFS_SYSCALL=y
+
+##
+## file: lib/xz/Kconfig
+##
+CONFIG_XZ_DEC_SPARC=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/decnet/Kconfig
+##
+CONFIG_DECNET=m
+CONFIG_DECNET_ROUTER=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: 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
+
diff --git a/config/kernelarch-sparc/config-smp b/config/kernelarch-sparc/config-smp
new file mode 100644 (file)
index 0000000..f6412c2
--- /dev/null
@@ -0,0 +1,7 @@
+##
+## file: arch/sparc/Kconfig
+##
+CONFIG_SMP=y
+CONFIG_NR_CPUS=256
+CONFIG_SCHED_SMT=y
+
diff --git a/config/kernelarch-sparc/config-up b/config/kernelarch-sparc/config-up
new file mode 100644 (file)
index 0000000..7586217
--- /dev/null
@@ -0,0 +1,5 @@
+##
+## file: arch/sparc/Kconfig
+##
+# CONFIG_SMP is not set
+
diff --git a/config/kernelarch-x86/config b/config/kernelarch-x86/config
new file mode 100644 (file)
index 0000000..ec71d27
--- /dev/null
@@ -0,0 +1,2092 @@
+##
+## file: arch/Kconfig
+##
+# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
+
+##
+## file: arch/x86/Kconfig
+##
+CONFIG_ZONE_DMA=y
+CONFIG_X86_MPPARSE=y
+# CONFIG_X86_EXTENDED_PLATFORM is not set
+CONFIG_X86_INTEL_LPSS=y
+CONFIG_X86_AMD_PLATFORM_DEVICE=y
+CONFIG_IOSF_MBI=m
+# CONFIG_IOSF_MBI_DEBUG is not set
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
+CONFIG_HYPERVISOR_GUEST=y
+CONFIG_PARAVIRT=y
+# CONFIG_PARAVIRT_DEBUG is not set
+CONFIG_PARAVIRT_SPINLOCKS=y
+# CONFIG_QUEUED_LOCK_STAT is not set
+CONFIG_KVM_GUEST=y
+# CONFIG_KVM_DEBUG_FS is not set
+# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
+CONFIG_HPET_TIMER=y
+CONFIG_DMI=y
+CONFIG_GART_IOMMU=y
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+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_X86_16BIT=y
+CONFIG_I8K=m
+CONFIG_MICROCODE=y
+CONFIG_MICROCODE_INTEL=y
+CONFIG_MICROCODE_AMD=y
+CONFIG_X86_MSR=m
+CONFIG_X86_CPUID=m
+CONFIG_NODES_SHIFT=6
+# CONFIG_ARCH_MEMORY_PROBE is not set
+CONFIG_X86_PMEM_LEGACY=m
+# 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_ARCH_RANDOM=y
+CONFIG_X86_SMAP=y
+CONFIG_X86_INTEL_MPX=y
+CONFIG_EFI=y
+CONFIG_EFI_STUB=y
+CONFIG_EFI_SECURE_BOOT_SECURELEVEL=y
+CONFIG_SECCOMP=y
+CONFIG_KEXEC=y
+CONFIG_CRASH_DUMP=y
+# CONFIG_KEXEC_JUMP is not set
+CONFIG_RELOCATABLE=y
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_HOTPLUG_CPU=y
+# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
+# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
+# CONFIG_COMPAT_VDSO is not set
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_MODIFY_LDT_SYSCALL=y
+CONFIG_PCI=y
+# CONFIG_PCI_CNB20LE_QUIRK is not set
+# CONFIG_RAPIDIO is not set
+#. Doesn't support handover; see #822575
+# CONFIG_X86_SYSFB is not set
+CONFIG_IA32_EMULATION=y
+CONFIG_IA32_AOUT=y
+
+##
+## file: arch/x86/Kconfig.cpu
+##
+# CONFIG_PROCESSOR_SELECT is not set
+
+##
+## file: arch/x86/Kconfig.debug
+##
+# CONFIG_X86_VERBOSE_BOOTUP is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_EARLY_PRINTK_DBGP is not set
+CONFIG_EARLY_PRINTK_EFI=y
+# CONFIG_X86_PTDUMP is not set
+# CONFIG_EFI_PGT_DUMP is not set
+# CONFIG_DEBUG_RODATA_TEST is not set
+CONFIG_DEBUG_WX=y
+CONFIG_DEBUG_SET_MODULE_RONX=y
+# CONFIG_DEBUG_NX_TEST is not set
+CONFIG_DOUBLEFAULT=y
+# CONFIG_DEBUG_TLBFLUSH 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_ENTRY is not set
+# CONFIG_DEBUG_NMI_SELFTEST is not set
+# CONFIG_PUNIT_ATOM_DEBUG is not set
+
+##
+## file: arch/x86/events/Kconfig
+##
+CONFIG_PERF_EVENTS_INTEL_UNCORE=m
+CONFIG_PERF_EVENTS_INTEL_RAPL=m
+CONFIG_PERF_EVENTS_INTEL_CSTATE=m
+CONFIG_PERF_EVENTS_AMD_POWER=m
+
+##
+## file: arch/x86/kvm/Kconfig
+##
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+CONFIG_KVM_INTEL=m
+CONFIG_KVM_AMD=m
+# CONFIG_KVM_MMU_AUDIT is not set
+CONFIG_KVM_DEVICE_ASSIGNMENT=y
+
+##
+## file: arch/x86/ras/Kconfig
+##
+# CONFIG_MCE_AMD_INJ is not set
+
+##
+## file: arch/x86/xen/Kconfig
+##
+CONFIG_XEN=y
+# CONFIG_XEN_DEBUG_FS is not set
+CONFIG_XEN_PVH=y
+
+##
+## file: block/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: crypto/Kconfig
+##
+CONFIG_CRYPTO_CRC32C_INTEL=m
+CONFIG_CRYPTO_CRC32_PCLMUL=m
+CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
+CONFIG_CRYPTO_AES_NI_INTEL=m
+
+##
+## file: drivers/acpi/Kconfig
+##
+CONFIG_ACPI=y
+# CONFIG_ACPI_PROCFS_POWER is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
+# CONFIG_ACPI_EC_DEBUGFS 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=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=y
+CONFIG_ACPI_HOTPLUG_MEMORY=y
+CONFIG_ACPI_SBS=m
+CONFIG_ACPI_HED=m
+# CONFIG_ACPI_CUSTOM_METHOD is not set
+CONFIG_ACPI_EXTLOG=y
+
+##
+## file: drivers/acpi/apei/Kconfig
+##
+CONFIG_ACPI_APEI=y
+CONFIG_ACPI_APEI_GHES=y
+CONFIG_ACPI_APEI_PCIEAER=y
+CONFIG_ACPI_APEI_MEMORY_FAILURE=y
+# CONFIG_ACPI_APEI_EINJ is not set
+# CONFIG_ACPI_APEI_ERST_DEBUG is not set
+
+##
+## file: drivers/acpi/dptf/Kconfig
+##
+CONFIG_DPTF_POWER=m
+
+##
+## file: drivers/ata/Kconfig
+##
+CONFIG_PATA_ALI=m
+CONFIG_PATA_AMD=m
+CONFIG_PATA_ATIIXP=m
+CONFIG_PATA_CMD64X=m
+CONFIG_PATA_EFAR=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_OLDPIIX=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_PDC_OLD=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_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/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_HCIVHCI=m
+
+##
+## file: drivers/char/Kconfig
+##
+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
+CONFIG_HPET_MMAP_DEFAULT=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_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_TIS_I2C_ATMEL=m
+CONFIG_TCG_TIS_I2C_INFINEON=m
+CONFIG_TCG_TIS_I2C_NUVOTON=m
+CONFIG_TCG_NSC=m
+CONFIG_TCG_ATMEL=m
+CONFIG_TCG_INFINEON=m
+CONFIG_TCG_XEN=m
+CONFIG_TCG_CRB=m
+
+##
+## file: drivers/char/tpm/st33zp24/Kconfig
+##
+CONFIG_TCG_TIS_ST33ZP24_I2C=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_INTEL_PSTATE=y
+CONFIG_X86_PCC_CPUFREQ=m
+CONFIG_X86_ACPI_CPUFREQ=m
+CONFIG_X86_ACPI_CPUFREQ_CPB=y
+CONFIG_X86_POWERNOW_K8=m
+CONFIG_X86_AMD_FREQ_SENSITIVITY=m
+CONFIG_X86_SPEEDSTEP_CENTRINO=m
+CONFIG_X86_P4_CLOCKMOD=m
+
+##
+## 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
+CONFIG_CRYPTO_DEV_CCP=y
+
+##
+## file: drivers/crypto/ccp/Kconfig
+##
+CONFIG_CRYPTO_DEV_CCP_DD=m
+CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
+
+##
+## file: drivers/crypto/qat/Kconfig
+##
+CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
+CONFIG_CRYPTO_DEV_QAT_C3XXX=m
+CONFIG_CRYPTO_DEV_QAT_C62X=m
+CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
+CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
+CONFIG_CRYPTO_DEV_QAT_C62XVF=m
+
+##
+## file: drivers/dma/Kconfig
+##
+CONFIG_DMADEVICES=y
+CONFIG_INTEL_IDMA64=m
+CONFIG_INTEL_IOATDMA=m
+
+##
+## file: drivers/dma/dw/Kconfig
+##
+CONFIG_DW_DMAC=m
+
+##
+## 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_I82975X=m
+CONFIG_EDAC_I3000=m
+CONFIG_EDAC_I3200=m
+CONFIG_EDAC_IE31200=m
+CONFIG_EDAC_X38=m
+CONFIG_EDAC_I5400=m
+CONFIG_EDAC_I7CORE=m
+CONFIG_EDAC_I82860=m
+CONFIG_EDAC_R82600=m
+CONFIG_EDAC_I5000=m
+CONFIG_EDAC_I5100=m
+CONFIG_EDAC_I7300=m
+CONFIG_EDAC_SKX=m
+CONFIG_EDAC_AMD8131=m
+CONFIG_EDAC_AMD8111=m
+
+##
+## file: drivers/firmware/Kconfig
+##
+CONFIG_EDD=m
+# CONFIG_EDD_OFF is not set
+CONFIG_FIRMWARE_MEMMAP=y
+CONFIG_DELL_RBU=m
+CONFIG_DCDBAS=m
+CONFIG_DMIID=y
+CONFIG_ISCSI_IBFT_FIND=y
+CONFIG_ISCSI_IBFT=y
+
+##
+## file: drivers/firmware/efi/Kconfig
+##
+CONFIG_EFI_RUNTIME_MAP=y
+# CONFIG_EFI_FAKE_MEMMAP is not set
+
+##
+## file: drivers/firmware/google/Kconfig
+##
+# CONFIG_GOOGLE_FIRMWARE is not set
+
+##
+## file: drivers/gpio/Kconfig
+##
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_AMDPT=m
+# CONFIG_GPIO_ICH is not set
+# CONFIG_GPIO_LYNXPOINT is not set
+# CONFIG_GPIO_F7188X is not set
+# CONFIG_GPIO_SCH is not set
+CONFIG_GPIO_KEMPLD=m
+# CONFIG_GPIO_INTEL_MID is not set
+CONFIG_GPIO_ML_IOH=m
+
+##
+## file: drivers/gpu/drm/Kconfig
+##
+CONFIG_DRM=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_AMDGPU=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+# CONFIG_DRM_I810 is not set
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+
+##
+## file: drivers/gpu/drm/amd/acp/Kconfig
+##
+CONFIG_DRM_AMD_ACP=y
+
+##
+## file: drivers/gpu/drm/amd/amdgpu/Kconfig
+##
+# CONFIG_DRM_AMDGPU_CIK is not set
+CONFIG_DRM_AMDGPU_USERPTR=y
+
+##
+## file: drivers/gpu/drm/amd/amdkfd/Kconfig
+##
+CONFIG_HSA_AMD=m
+
+##
+## file: drivers/gpu/drm/ast/Kconfig
+##
+CONFIG_DRM_AST=m
+
+##
+## file: drivers/gpu/drm/gma500/Kconfig
+##
+CONFIG_DRM_GMA500=m
+CONFIG_DRM_GMA600=y
+CONFIG_DRM_GMA3600=y
+CONFIG_DRM_MEDFIELD=y
+
+##
+## file: drivers/gpu/drm/i2c/Kconfig
+##
+CONFIG_DRM_I2C_CH7006=m
+CONFIG_DRM_I2C_SIL164=m
+
+##
+## file: drivers/gpu/drm/i915/Kconfig
+##
+CONFIG_DRM_I915=m
+# CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set
+
+##
+## file: drivers/gpu/drm/mgag200/Kconfig
+##
+CONFIG_DRM_MGAG200=m
+
+##
+## file: drivers/gpu/drm/nouveau/Kconfig
+##
+CONFIG_DRM_NOUVEAU=m
+CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+
+##
+## file: drivers/gpu/drm/vmwgfx/Kconfig
+##
+CONFIG_DRM_VMWGFX=m
+CONFIG_DRM_VMWGFX_FBCON=y
+
+##
+## file: drivers/gpu/vga/Kconfig
+##
+CONFIG_VGA_ARB_MAX_GPUS=16
+CONFIG_VGA_SWITCHEROO=y
+
+##
+## file: drivers/hid/Kconfig
+##
+CONFIG_HID_APPLEIR=m
+CONFIG_HID_HYPERV_MOUSE=m
+
+##
+## file: drivers/hid/i2c-hid/Kconfig
+##
+CONFIG_I2C_HID=m
+
+##
+## file: drivers/hid/intel-ish-hid/Kconfig
+##
+CONFIG_INTEL_ISH_HID=m
+
+##
+## file: drivers/hid/usbhid/Kconfig
+##
+CONFIG_USB_HID=m
+
+##
+## file: drivers/hv/Kconfig
+##
+CONFIG_HYPERV=m
+CONFIG_HYPERV_UTILS=m
+CONFIG_HYPERV_BALLOON=m
+
+##
+## file: drivers/hwmon/Kconfig
+##
+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_DELL_SMM=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_I5500=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_MENF21BMC_HWMON=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_PC87360=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_SCH5636=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_ACPI_POWER=m
+
+##
+## file: drivers/hwtracing/intel_th/Kconfig
+##
+CONFIG_INTEL_TH=m
+CONFIG_INTEL_TH_PCI=m
+CONFIG_INTEL_TH_GTH=m
+CONFIG_INTEL_TH_MSU=m
+CONFIG_INTEL_TH_PTI=m
+
+##
+## file: drivers/i2c/Kconfig
+##
+CONFIG_I2C=y
+CONFIG_ACPI_I2C_OPREGION=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=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_ISMT=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
+#. Sony Vaio Duo 13".
+CONFIG_I2C_DESIGNWARE_PLATFORM=m
+CONFIG_I2C_DESIGNWARE_PCI=m
+CONFIG_I2C_KEMPLD=m
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PCA_ISA=m
+CONFIG_SCx200_ACB=m
+
+##
+## file: drivers/idle/Kconfig
+##
+CONFIG_INTEL_IDLE=y
+
+##
+## file: drivers/iio/accel/Kconfig
+##
+CONFIG_BMC150_ACCEL=m
+CONFIG_KXCJK1013=m
+CONFIG_MMA9551=m
+CONFIG_MMA9553=m
+
+##
+## file: drivers/iio/gyro/Kconfig
+##
+CONFIG_BMG160=m
+
+##
+## file: drivers/iio/imu/Kconfig
+##
+CONFIG_KMX61=m
+
+##
+## file: drivers/iio/imu/inv_mpu6050/Kconfig
+##
+CONFIG_INV_MPU6050_I2C=m
+
+##
+## file: drivers/iio/light/Kconfig
+##
+CONFIG_JSA1212=m
+#. Cr-48, Acer AC700
+CONFIG_SENSORS_TSL2563=m
+
+##
+## file: drivers/iio/magnetometer/Kconfig
+##
+CONFIG_AK8975=m
+
+##
+## file: drivers/iio/pressure/Kconfig
+##
+CONFIG_BMP280=m
+
+##
+## file: drivers/iio/proximity/Kconfig
+##
+CONFIG_SX9500=m
+
+##
+## file: drivers/infiniband/hw/usnic/Kconfig
+##
+CONFIG_INFINIBAND_USNIC=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_GPIO=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_IDEAPAD_SLIDEBAR=m
+CONFIG_INPUT_SOC_BUTTON_ARRAY=m
+
+##
+## file: drivers/input/mouse/Kconfig
+##
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_VMMOUSE=y
+CONFIG_MOUSE_SERIAL=m
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_BCM5974=m
+CONFIG_MOUSE_CYAPA=m
+CONFIG_MOUSE_ELAN_I2C=m
+CONFIG_MOUSE_ELAN_I2C_I2C=y
+CONFIG_MOUSE_ELAN_I2C_SMBUS=y
+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
+CONFIG_HYPERV_KEYBOARD=m
+
+##
+## file: drivers/input/touchscreen/Kconfig
+##
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_TSC_SERIO=m
+CONFIG_TOUCHSCREEN_SURFACE3_SPI=m
+
+##
+## file: drivers/iommu/Kconfig
+##
+CONFIG_INTEL_IOMMU=y
+CONFIG_INTEL_IOMMU_SVM=y
+# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
+CONFIG_IRQ_REMAP=y
+
+##
+## file: drivers/isdn/Kconfig
+##
+CONFIG_ISDN=y
+CONFIG_ISDN_CAPI=m
+
+##
+## file: drivers/isdn/capi/Kconfig
+##
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+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
+CONFIG_LEDS_DELL_NETBOOKS=m
+CONFIG_LEDS_MENF21BMC=m
+
+##
+## file: drivers/media/dvb-frontends/Kconfig
+##
+CONFIG_DVB_RTL2832_SDR=m
+
+##
+## file: drivers/media/platform/Kconfig
+##
+CONFIG_VIDEO_VIA_CAMERA=m
+
+##
+## file: drivers/media/radio/Kconfig
+##
+CONFIG_USB_DSBR=m
+CONFIG_RADIO_MAXIRADIO=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/media/tuners/Kconfig
+##
+CONFIG_MEDIA_TUNER_MSI001=m
+
+##
+## file: drivers/media/usb/as102/Kconfig
+##
+CONFIG_DVB_AS102=m
+
+##
+## file: drivers/media/usb/go7007/Kconfig
+##
+# CONFIG_VIDEO_GO7007 is not set
+
+##
+## file: drivers/media/usb/tm6000/Kconfig
+##
+CONFIG_VIDEO_TM6000=m
+CONFIG_VIDEO_TM6000_ALSA=m
+CONFIG_VIDEO_TM6000_DVB=m
+
+##
+## file: drivers/mfd/Kconfig
+##
+# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set
+CONFIG_LPC_ICH=m
+CONFIG_MFD_INTEL_LPSS_ACPI=m
+CONFIG_MFD_INTEL_LPSS_PCI=m
+CONFIG_MFD_KEMPLD=m
+CONFIG_MFD_MENF21BMC=m
+
+##
+## file: drivers/misc/Kconfig
+##
+CONFIG_IBM_ASM=m
+CONFIG_PHANTOM=m
+CONFIG_CS5535_MFGPT=m
+CONFIG_HP_ILO=m
+CONFIG_VMWARE_BALLOON=m
+
+##
+## file: drivers/misc/mei/Kconfig
+##
+CONFIG_INTEL_MEI=m
+CONFIG_INTEL_MEI_ME=m
+# CONFIG_INTEL_MEI_TXE is not set
+
+##
+## file: drivers/misc/vmw_vmci/Kconfig
+##
+CONFIG_VMWARE_VMCI=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/host/Kconfig
+##
+CONFIG_MMC_SDHCI_ACPI=m
+
+##
+## file: drivers/mtd/Kconfig
+##
+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_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 is not set
+# 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
+
+##
+## 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_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_L440GX is not set
+CONFIG_MTD_PCI=m
+
+##
+## file: drivers/mtd/nand/Kconfig
+##
+CONFIG_MTD_NAND=m
+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
+
+##
+## file: drivers/net/Kconfig
+##
+CONFIG_DUMMY=m
+CONFIG_NET_FC=y
+CONFIG_NET_SB1000=m
+CONFIG_VMXNET3=m
+
+##
+## 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
+CONFIG_ARCNET_COM20020_CS=m
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+# CONFIG_CX_ECAT is not set
+CONFIG_FEALNX=m
+
+##
+## file: drivers/net/ethernet/3com/Kconfig
+##
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_3C589=m
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_NET_VENDOR_8390=y
+CONFIG_PCMCIA_AXNET=m
+CONFIG_NE2K_PCI=m
+CONFIG_PCMCIA_PCNET=m
+
+##
+## file: drivers/net/ethernet/adaptec/Kconfig
+##
+CONFIG_NET_VENDOR_ADAPTEC=y
+CONFIG_ADAPTEC_STARFIRE=m
+
+##
+## file: drivers/net/ethernet/altera/Kconfig
+##
+# CONFIG_ALTERA_TSE is not set
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+CONFIG_NET_VENDOR_AMD=y
+CONFIG_AMD8111_ETH=m
+CONFIG_PCMCIA_NMCLAN=m
+
+##
+## file: drivers/net/ethernet/broadcom/Kconfig
+##
+CONFIG_NET_VENDOR_BROADCOM=y
+CONFIG_B44=m
+
+##
+## file: drivers/net/ethernet/dec/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_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_PCMCIA_XIRCOM=m
+
+##
+## file: drivers/net/ethernet/dlink/Kconfig
+##
+CONFIG_NET_VENDOR_DLINK=y
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+
+##
+## file: drivers/net/ethernet/fujitsu/Kconfig
+##
+CONFIG_NET_VENDOR_FUJITSU=y
+CONFIG_PCMCIA_FMVJ18X=m
+
+##
+## file: drivers/net/ethernet/hp/Kconfig
+##
+CONFIG_NET_VENDOR_HP=y
+CONFIG_HP100=m
+
+##
+## file: drivers/net/ethernet/intel/Kconfig
+##
+CONFIG_NET_VENDOR_INTEL=y
+CONFIG_E100=m
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_NET_VENDOR_NATSEMI=y
+CONFIG_NATSEMI=m
+
+##
+## file: drivers/net/ethernet/nvidia/Kconfig
+##
+CONFIG_NET_VENDOR_NVIDIA=y
+CONFIG_FORCEDETH=m
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_NET_VENDOR_REALTEK=y
+# CONFIG_ATP is not set
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+
+##
+## file: drivers/net/ethernet/sis/Kconfig
+##
+CONFIG_NET_VENDOR_SIS=y
+CONFIG_SIS900=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_NET_VENDOR_SMSC=y
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_EPIC100=m
+
+##
+## file: drivers/net/ethernet/sun/Kconfig
+##
+CONFIG_NET_VENDOR_SUN=y
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+
+##
+## file: drivers/net/ethernet/via/Kconfig
+##
+CONFIG_NET_VENDOR_VIA=y
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+
+##
+## file: drivers/net/ethernet/xircom/Kconfig
+##
+CONFIG_NET_VENDOR_XIRCOM=y
+CONFIG_PCMCIA_XIRC2PS=m
+
+##
+## file: drivers/net/fddi/Kconfig
+##
+CONFIG_FDDI=y
+CONFIG_SKFP=m
+
+##
+## file: drivers/net/hippi/Kconfig
+##
+CONFIG_HIPPI=y
+CONFIG_ROADRUNNER=m
+# CONFIG_ROADRUNNER_LARGE_RINGS is not set
+
+##
+## file: drivers/net/hyperv/Kconfig
+##
+CONFIG_HYPERV_NET=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/plip/Kconfig
+##
+CONFIG_PLIP=m
+
+##
+## file: drivers/net/wan/Kconfig
+##
+CONFIG_WAN=y
+CONFIG_LANMEDIA=m
+CONFIG_PCI200SYN=m
+CONFIG_WANXL=m
+CONFIG_FARSYNC=m
+CONFIG_DSCC4=m
+CONFIG_DSCC4_PCISYNC=y
+CONFIG_DSCC4_PCI_RST=y
+CONFIG_DLCI=m
+CONFIG_DLCI_MAX=8
+# CONFIG_SBNI is not set
+
+##
+## file: drivers/net/wireless/Kconfig
+##
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_PCMCIA_WL3501=m
+
+##
+## file: drivers/net/wireless/atmel/Kconfig
+##
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+
+##
+## file: drivers/net/wireless/broadcom/brcm80211/Kconfig
+##
+#. Sony Vaio laptops
+CONFIG_BRCMFMAC_SDIO=y
+
+##
+## file: drivers/net/wireless/cisco/Kconfig
+##
+CONFIG_AIRO_CS=m
+
+##
+## file: drivers/net/wireless/intersil/orinoco/Kconfig
+##
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+
+##
+## file: drivers/net/wireless/marvell/mwifiex/Kconfig
+##
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_PCIE=m
+CONFIG_MWIFIEX_USB=m
+
+##
+## file: drivers/net/wireless/zydas/Kconfig
+##
+CONFIG_USB_ZD1201=m
+
+##
+## file: drivers/nfc/Kconfig
+##
+CONFIG_NFC_MEI_PHY=m
+
+##
+## file: drivers/nfc/pn544/Kconfig
+##
+CONFIG_NFC_PN544_MEI=m
+
+##
+## file: drivers/nvdimm/Kconfig
+##
+CONFIG_LIBNVDIMM=m
+CONFIG_BLK_DEV_PMEM=m
+CONFIG_ND_BLK=m
+CONFIG_BTT=y
+
+##
+## file: drivers/pci/Kconfig
+##
+CONFIG_HT_IRQ=y
+CONFIG_PCI_PRI=y
+CONFIG_PCI_PASID=y
+
+##
+## file: drivers/pci/host/Kconfig
+##
+CONFIG_VMD=m
+
+##
+## file: drivers/pci/hotplug/Kconfig
+##
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HOTPLUG_PCI_ACPI=y
+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/pinctrl/intel/Kconfig
+##
+CONFIG_PINCTRL_BAYTRAIL=y
+CONFIG_PINCTRL_CHERRYVIEW=y
+CONFIG_PINCTRL_BROXTON=y
+CONFIG_PINCTRL_SUNRISEPOINT=y
+
+##
+## file: drivers/platform/chrome/Kconfig
+##
+CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHROMEOS_LAPTOP=m
+CONFIG_CHROMEOS_PSTORE=m
+CONFIG_CROS_KBD_LED_BACKLIGHT=m
+
+##
+## file: drivers/platform/x86/Kconfig
+##
+CONFIG_X86_PLATFORM_DEVICES=y
+CONFIG_ACER_WMI=m
+CONFIG_ACERHDF=m
+CONFIG_ALIENWARE_WMI=m
+CONFIG_ASUS_LAPTOP=m
+CONFIG_DELL_SMBIOS=m
+CONFIG_DELL_LAPTOP=m
+CONFIG_DELL_WMI=m
+CONFIG_DELL_WMI_AIO=m
+CONFIG_DELL_SMO8800=m
+CONFIG_DELL_RBTN=m
+CONFIG_FUJITSU_LAPTOP=m
+CONFIG_FUJITSU_TABLET=m
+CONFIG_AMILO_RFKILL=m
+CONFIG_HP_ACCEL=m
+CONFIG_HP_WIRELESS=m
+CONFIG_HP_WMI=m
+CONFIG_MSI_LAPTOP=m
+CONFIG_PANASONIC_LAPTOP=m
+CONFIG_COMPAL_LAPTOP=m
+CONFIG_SONY_LAPTOP=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_ASUS_WIRELESS=m
+CONFIG_ACPI_WMI=m
+CONFIG_MSI_WMI=m
+CONFIG_TOPSTAR_LAPTOP=m
+CONFIG_ACPI_TOSHIBA=m
+CONFIG_TOSHIBA_BT_RFKILL=m
+CONFIG_TOSHIBA_HAPS=m
+CONFIG_ACPI_CMPC=m
+CONFIG_INTEL_HID_EVENT=m
+CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_IPS=m
+CONFIG_IBM_RTL=m
+CONFIG_SAMSUNG_LAPTOP=m
+CONFIG_INTEL_OAKTRAIL=m
+CONFIG_SAMSUNG_Q10=m
+CONFIG_APPLE_GMUX=m
+CONFIG_INTEL_RST=m
+CONFIG_INTEL_SMARTCONNECT=m
+CONFIG_PVPANIC=m
+CONFIG_INTEL_PMC_IPC=m
+CONFIG_SURFACE_PRO3_BUTTON=m
+
+##
+## file: drivers/pnp/Kconfig
+##
+CONFIG_PNP=y
+
+##
+## file: drivers/power/supply/Kconfig
+##
+CONFIG_BATTERY_SBS=m
+
+##
+## file: drivers/powercap/Kconfig
+##
+CONFIG_POWERCAP=y
+CONFIG_INTEL_RAPL=m
+
+##
+## file: drivers/ptp/Kconfig
+##
+CONFIG_PTP_1588_CLOCK_PCH=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_FLASHPOINT is not set
+CONFIG_VMWARE_PVSCSI=m
+CONFIG_HYPERV_STORAGE=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_AM53C974=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/comedi/Kconfig
+##
+CONFIG_COMEDI=m
+# CONFIG_COMEDI_DEBUG is not set
+CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
+CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
+CONFIG_COMEDI_MISC_DRIVERS=y
+CONFIG_COMEDI_BOND=m
+CONFIG_COMEDI_TEST=m
+CONFIG_COMEDI_PARPORT=m
+CONFIG_COMEDI_SERIAL2002=m
+CONFIG_COMEDI_SSV_DNP=m
+# CONFIG_COMEDI_ISA_DRIVERS is not set
+CONFIG_COMEDI_II_PCI20KC=m
+CONFIG_COMEDI_S526=m
+CONFIG_COMEDI_PCI_DRIVERS=y
+CONFIG_COMEDI_8255_PCI=m
+CONFIG_COMEDI_ADDI_APCI_1032=m
+CONFIG_COMEDI_ADDI_APCI_1500=m
+CONFIG_COMEDI_ADDI_APCI_1516=m
+CONFIG_COMEDI_ADDI_APCI_1564=m
+CONFIG_COMEDI_ADDI_APCI_16XX=m
+CONFIG_COMEDI_ADDI_APCI_2032=m
+CONFIG_COMEDI_ADDI_APCI_2200=m
+CONFIG_COMEDI_ADDI_APCI_3120=m
+CONFIG_COMEDI_ADDI_APCI_3501=m
+CONFIG_COMEDI_ADDI_APCI_3XXX=m
+CONFIG_COMEDI_ADL_PCI6208=m
+CONFIG_COMEDI_ADL_PCI7X3X=m
+CONFIG_COMEDI_ADL_PCI8164=m
+CONFIG_COMEDI_ADL_PCI9111=m
+CONFIG_COMEDI_ADL_PCI9118=m
+CONFIG_COMEDI_ADV_PCI1710=m
+CONFIG_COMEDI_ADV_PCI1720=m
+CONFIG_COMEDI_ADV_PCI1723=m
+CONFIG_COMEDI_ADV_PCI1724=m
+CONFIG_COMEDI_ADV_PCI1760=m
+CONFIG_COMEDI_ADV_PCI_DIO=m
+CONFIG_COMEDI_AMPLC_DIO200_PCI=m
+CONFIG_COMEDI_AMPLC_PC236_PCI=m
+CONFIG_COMEDI_AMPLC_PC263_PCI=m
+CONFIG_COMEDI_AMPLC_PCI224=m
+CONFIG_COMEDI_AMPLC_PCI230=m
+CONFIG_COMEDI_CONTEC_PCI_DIO=m
+CONFIG_COMEDI_DAS08_PCI=m
+CONFIG_COMEDI_DT3000=m
+CONFIG_COMEDI_DYNA_PCI10XX=m
+CONFIG_COMEDI_GSC_HPDI=m
+CONFIG_COMEDI_MF6X4=m
+CONFIG_COMEDI_ICP_MULTI=m
+CONFIG_COMEDI_DAQBOARD2000=m
+CONFIG_COMEDI_JR3_PCI=m
+CONFIG_COMEDI_KE_COUNTER=m
+CONFIG_COMEDI_CB_PCIDAS64=m
+CONFIG_COMEDI_CB_PCIDAS=m
+CONFIG_COMEDI_CB_PCIDDA=m
+CONFIG_COMEDI_CB_PCIMDAS=m
+CONFIG_COMEDI_CB_PCIMDDA=m
+CONFIG_COMEDI_ME4000=m
+CONFIG_COMEDI_ME_DAQ=m
+CONFIG_COMEDI_NI_6527=m
+CONFIG_COMEDI_NI_65XX=m
+CONFIG_COMEDI_NI_660X=m
+CONFIG_COMEDI_NI_670X=m
+CONFIG_COMEDI_NI_LABPC_PCI=m
+CONFIG_COMEDI_NI_PCIDIO=m
+CONFIG_COMEDI_NI_PCIMIO=m
+CONFIG_COMEDI_RTD520=m
+CONFIG_COMEDI_S626=m
+CONFIG_COMEDI_PCMCIA_DRIVERS=y
+CONFIG_COMEDI_CB_DAS16_CS=m
+CONFIG_COMEDI_DAS08_CS=m
+CONFIG_COMEDI_NI_DAQ_700_CS=m
+CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
+CONFIG_COMEDI_NI_LABPC_CS=m
+CONFIG_COMEDI_NI_MIO_CS=m
+CONFIG_COMEDI_QUATECH_DAQP_CS=m
+CONFIG_COMEDI_USB_DRIVERS=y
+CONFIG_COMEDI_DT9812=m
+CONFIG_COMEDI_NI_USB6501=m
+CONFIG_COMEDI_USBDUX=m
+CONFIG_COMEDI_USBDUXFAST=m
+CONFIG_COMEDI_USBDUXSIGMA=m
+CONFIG_COMEDI_VMK80XX=m
+CONFIG_COMEDI_8255_SA=m
+CONFIG_COMEDI_KCOMEDILIB=m
+
+##
+## file: drivers/staging/iio/light/Kconfig
+##
+#. Samsung Series 5 550, Chromebook Pixel
+CONFIG_SENSORS_ISL29018=m
+#. Samsung Series 5
+CONFIG_TSL2583=m
+
+##
+## file: drivers/staging/lustre/lnet/Kconfig
+##
+CONFIG_LNET=m
+CONFIG_LNET_MAX_PAYLOAD=1048576
+# CONFIG_LNET_SELFTEST is not set
+CONFIG_LNET_XPRT_IB=m
+
+##
+## file: drivers/staging/lustre/lustre/Kconfig
+##
+CONFIG_LUSTRE_FS=m
+CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER=8192
+# CONFIG_LUSTRE_DEBUG_EXPENSIVE_CHECK is not set
+
+##
+## file: drivers/staging/media/Kconfig
+##
+CONFIG_STAGING_MEDIA=y
+
+##
+## file: drivers/staging/media/bcm2048/Kconfig
+##
+# CONFIG_I2C_BCM2048 is not set
+
+##
+## file: drivers/staging/media/lirc/Kconfig
+##
+CONFIG_LIRC_STAGING=y
+CONFIG_LIRC_BT829=m
+CONFIG_LIRC_IMON=m
+CONFIG_LIRC_SASEM=m
+CONFIG_LIRC_SERIAL=m
+CONFIG_LIRC_SERIAL_TRANSMITTER=y
+CONFIG_LIRC_SIR=m
+CONFIG_LIRC_ZILOG=m
+
+##
+## file: drivers/staging/rtl8192e/Kconfig
+##
+CONFIG_RTLLIB=m
+CONFIG_RTLLIB_CRYPTO_CCMP=m
+CONFIG_RTLLIB_CRYPTO_TKIP=m
+CONFIG_RTLLIB_CRYPTO_WEP=m
+
+##
+## file: drivers/staging/rtl8192e/rtl8192e/Kconfig
+##
+CONFIG_RTL8192E=m
+
+##
+## file: drivers/staging/rtl8192u/Kconfig
+##
+CONFIG_RTL8192U=m
+
+##
+## file: drivers/staging/rts5208/Kconfig
+##
+CONFIG_RTS5208=m
+
+##
+## file: drivers/staging/vt6656/Kconfig
+##
+CONFIG_VT6656=m
+
+##
+## file: drivers/staging/wlan-ng/Kconfig
+##
+CONFIG_PRISM2_USB=m
+
+##
+## file: drivers/thermal/Kconfig
+##
+CONFIG_THERMAL=m
+# CONFIG_THERMAL_OF is not set
+# CONFIG_CPU_THERMAL is not set
+CONFIG_INTEL_POWERCLAMP=m
+CONFIG_X86_PKG_TEMP_THERMAL=m
+CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INTEL_PCH_THERMAL=m
+
+##
+## file: drivers/thermal/int340x_thermal/Kconfig
+##
+CONFIG_INT340X_THERMAL=m
+CONFIG_INT3406_THERMAL=m
+
+##
+## file: drivers/thunderbolt/Kconfig
+##
+CONFIG_THUNDERBOLT=m
+
+##
+## 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/serial/Kconfig
+##
+CONFIG_SERIAL_JSM=m
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_FINTEK=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_8250_DW=y
+# CONFIG_SERIAL_8250_LPSS is not set
+
+##
+## 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/gadget/Kconfig
+##
+CONFIG_USB_GADGET=m
+
+##
+## file: drivers/usb/gadget/udc/Kconfig
+##
+CONFIG_USB_EG20T=m
+
+##
+## file: drivers/usb/host/Kconfig
+##
+CONFIG_USB_EHCI_HCD=m
+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_HCD_ISO is not set
+CONFIG_USB_SL811_CS=m
+
+##
+## file: drivers/usb/usbip/Kconfig
+##
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_VHCI_HC_PORTS=31
+CONFIG_USBIP_VHCI_NR_HCS=8
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_DEBUG is not set
+
+##
+## file: drivers/vfio/Kconfig
+##
+CONFIG_VFIO=m
+
+##
+## file: drivers/vfio/pci/Kconfig
+##
+CONFIG_VFIO_PCI=m
+CONFIG_VFIO_PCI_VGA=y
+
+##
+## file: drivers/video/console/Kconfig
+##
+CONFIG_VGA_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+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_CYBER2000_DDC=y
+# 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_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_FB_HYPERV=m
+#. Doesn't support handover; see #822575
+# CONFIG_FB_SIMPLE is not set
+
+##
+## file: drivers/video/fbdev/geode/Kconfig
+##
+# CONFIG_FB_GEODE is not set
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_MENF21BMC_WATCHDOG=m
+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_EUROTECH_WDT=m
+CONFIG_IB700_WDT=m
+CONFIG_IBMASR=m
+CONFIG_WAFER_WDT=m
+CONFIG_I6300ESB_WDT=m
+CONFIG_IE6XX_WDT=m
+CONFIG_IT8712F_WDT=m
+CONFIG_HP_WATCHDOG=m
+CONFIG_KEMPLD_WDT=m
+CONFIG_HPWDT_NMI_DECODING=y
+CONFIG_SC1200_WDT=m
+CONFIG_NV_TCO=m
+CONFIG_60XX_WDT=m
+CONFIG_CPU5_WDT=m
+CONFIG_VIA_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_ACPI_PROCESSOR=m
+CONFIG_XEN_SYMS=y
+
+##
+## file: fs/proc/Kconfig
+##
+CONFIG_PROC_VMCORE=y
+
+##
+## file: fs/pstore/Kconfig
+##
+CONFIG_PSTORE=y
+
+##
+## file: init/Kconfig
+##
+CONFIG_USELIB=y
+# CONFIG_IRQ_TIME_ACCOUNTING is not set
+CONFIG_SGETMASK_SYSCALL=y
+CONFIG_SYSFS_SYSCALL=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=y
+
+##
+## file: lib/Kconfig.debug
+##
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+CONFIG_MEMTEST=y
+
+##
+## file: lib/xz/Kconfig
+##
+CONFIG_XZ_DEC_X86=y
+
+##
+## file: mm/Kconfig
+##
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
+
+##
+## 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/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/nfc/hci/Kconfig
+##
+CONFIG_NFC_HCI=m
+
+##
+## file: net/vmw_vsock/Kconfig
+##
+CONFIG_VMWARE_VMCI_VSOCKETS=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
+
+##
+## file: sound/soc/Kconfig
+##
+CONFIG_SND_SOC=m
+
+##
+## file: sound/soc/amd/Kconfig
+##
+CONFIG_SND_SOC_AMD_ACP=m
+
+##
+## file: sound/soc/intel/Kconfig
+##
+CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
+# CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH is not set
+# CONFIG_SND_SOC_INTEL_BXT_RT298_MACH is not set
+# CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH is not set
+CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH=m
+CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
+CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
+CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
+CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
+CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
+CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
+CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
+
diff --git a/config/m68k/README.build b/config/m68k/README.build
new file mode 100644 (file)
index 0000000..8941608
--- /dev/null
@@ -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.
+
diff --git a/config/m68k/config b/config/m68k/config
new file mode 100644 (file)
index 0000000..2c49fd7
--- /dev/null
@@ -0,0 +1,888 @@
+##
+## file: arch/m68k/Kconfig
+##
+# CONFIG_PM is not set
+
+##
+## file: arch/m68k/Kconfig.bus
+##
+CONFIG_ZORRO=y
+CONFIG_AMIGA_PCMCIA=y
+CONFIG_ATARI_ROM_ISA=y
+
+##
+## file: arch/m68k/Kconfig.cpu
+##
+CONFIG_M68020=y
+CONFIG_M68030=y
+CONFIG_M68040=y
+CONFIG_M68060=y
+CONFIG_M68KFPU_EMU=y
+# CONFIG_ADVANCED is not set
+
+##
+## file: arch/m68k/Kconfig.debug
+##
+CONFIG_EARLY_PRINTK=y
+
+##
+## file: arch/m68k/Kconfig.devices
+##
+CONFIG_HEARTBEAT=y
+CONFIG_PROC_HARDWARE=y
+CONFIG_NATFEAT=y
+CONFIG_NFBLOCK=y
+CONFIG_NFCON=y
+CONFIG_NFETH=y
+CONFIG_ATARI_ETHERNAT=y
+CONFIG_ATARI_ETHERNEC=y
+CONFIG_ATARI_DSP56K=m
+CONFIG_AMIGA_BUILTIN_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+
+##
+## file: arch/m68k/Kconfig.machine
+##
+CONFIG_AMIGA=y
+CONFIG_ATARI=y
+CONFIG_MAC=y
+CONFIG_APOLLO=y
+CONFIG_VME=y
+CONFIG_MVME147=y
+CONFIG_MVME16x=y
+CONFIG_BVME6000=y
+# CONFIG_HP300 is not set
+# CONFIG_SUN3X is not set
+CONFIG_Q40=y
+# CONFIG_SUN3 is not set
+
+##
+## file: block/Kconfig
+##
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+##
+## file: block/Kconfig.iosched
+##
+CONFIG_IOSCHED_DEADLINE=m
+
+##
+## file: block/partitions/Kconfig
+##
+CONFIG_PARTITION_ADVANCED=y
+CONFIG_AMIGA_PARTITION=y
+CONFIG_ATARI_PARTITION=y
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_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
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_SYSV68_PARTITION=y
+
+##
+## file: drivers/accessibility/Kconfig
+##
+# CONFIG_ACCESSIBILITY is not set
+
+##
+## file: drivers/bcma/Kconfig
+##
+# CONFIG_BCMA is not set
+
+##
+## file: drivers/block/Kconfig
+##
+CONFIG_BLK_DEV_FD=m
+CONFIG_AMIGA_FLOPPY=m
+CONFIG_ATARI_FLOPPY=m
+CONFIG_BLK_DEV_SWIM=m
+CONFIG_AMIGA_Z2RAM=y
+CONFIG_CDROM_PKTCDVD=m
+# CONFIG_BLK_DEV_HD is not set
+# CONFIG_BLK_DEV_RBD is not set
+
+##
+## file: drivers/block/drbd/Kconfig
+##
+# CONFIG_BLK_DEV_DRBD is not set
+
+##
+## file: drivers/block/mtip32xx/Kconfig
+##
+# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
+
+##
+## file: drivers/char/Kconfig
+##
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+CONFIG_NVRAM=y
+
+##
+## file: drivers/connector/Kconfig
+##
+CONFIG_CONNECTOR=m
+
+##
+## file: drivers/crypto/Kconfig
+##
+# CONFIG_CRYPTO_HW 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 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_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_PLATFORM=m
+CONFIG_BLK_DEV_GAYLE=m
+CONFIG_BLK_DEV_BUDDHA=m
+CONFIG_BLK_DEV_FALCON_IDE=m
+CONFIG_BLK_DEV_MAC_IDE=m
+CONFIG_BLK_DEV_Q40IDE=m
+
+##
+## file: drivers/iio/Kconfig
+##
+# CONFIG_IIO is not set
+
+##
+## file: drivers/infiniband/Kconfig
+##
+# CONFIG_INFINIBAND is not set
+
+##
+## file: drivers/input/Kconfig
+##
+CONFIG_INPUT_MOUSEDEV=y
+
+##
+## file: drivers/input/gameport/Kconfig
+##
+# CONFIG_GAMEPORT is not set
+
+##
+## 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_ZHENHUA is not set
+CONFIG_JOYSTICK_DB9=m
+# 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
+# CONFIG_JOYSTICK_IFORCE_232 is not set
+
+##
+## file: drivers/input/keyboard/Kconfig
+##
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+CONFIG_KEYBOARD_AMIGA=y
+CONFIG_KEYBOARD_ATARI=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_QT2160 is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+
+##
+## file: drivers/input/misc/Kconfig
+##
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_M68K_BEEP=m
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_PCF50633_PMU is not set
+
+##
+## file: drivers/input/mouse/Kconfig
+##
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+# CONFIG_MOUSE_PS2_LIFEBOOK is not set
+# CONFIG_MOUSE_PS2_ELANTECH is not set
+# CONFIG_MOUSE_PS2_SENTELIC is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_PS2_OLPC is not set
+CONFIG_MOUSE_SERIAL=m
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+CONFIG_MOUSE_AMIGA=m
+CONFIG_MOUSE_ATARI=m
+# CONFIG_MOUSE_SYNAPTICS_I2C is not set
+# CONFIG_MOUSE_SYNAPTICS_USB is not set
+
+##
+## file: drivers/input/serio/Kconfig
+##
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_Q40KBD=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_ALTERA_PS2 is not set
+
+##
+## file: drivers/input/tablet/Kconfig
+##
+# CONFIG_INPUT_TABLET is not set
+
+##
+## file: drivers/input/touchscreen/Kconfig
+##
+# CONFIG_INPUT_TOUCHSCREEN is not set
+
+##
+## file: drivers/iommu/Kconfig
+##
+# CONFIG_IOMMU_SUPPORT is not set
+
+##
+## file: drivers/leds/Kconfig
+##
+# CONFIG_NEW_LEDS is not set
+
+##
+## file: drivers/macintosh/Kconfig
+##
+CONFIG_ADB=y
+CONFIG_ADB_MACII=y
+# CONFIG_ADB_MACIISI is not set
+#. switched on for the benefit of IIfx, Q900, Q950
+CONFIG_ADB_IOP=y
+CONFIG_ADB_PMU68K=y
+CONFIG_ADB_CUDA=y
+CONFIG_INPUT_ADBHID=y
+CONFIG_MAC_EMUMOUSEBTN=m
+
+##
+## file: drivers/media/Kconfig
+##
+# CONFIG_MEDIA_SUPPORT is not set
+
+##
+## file: drivers/memstick/Kconfig
+##
+# CONFIG_MEMSTICK is not set
+
+##
+## file: drivers/mfd/Kconfig
+##
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_SM501 is not set
+
+##
+## file: drivers/misc/Kconfig
+##
+# CONFIG_ENCLOSURE_SERVICES is not set
+
+##
+## file: drivers/misc/c2port/Kconfig
+##
+# CONFIG_C2PORT is not set
+
+##
+## file: drivers/misc/eeprom/Kconfig
+##
+# CONFIG_EEPROM_93CX6 is not set
+
+##
+## file: drivers/mmc/Kconfig
+##
+# CONFIG_MMC is not set
+
+##
+## file: drivers/mtd/Kconfig
+##
+# CONFIG_MTD is not set
+
+##
+## file: drivers/net/appletalk/Kconfig
+##
+CONFIG_DEV_APPLETALK=m
+
+##
+## file: drivers/net/arcnet/Kconfig
+##
+# CONFIG_ARCNET is not set
+
+##
+## file: drivers/net/ethernet/Kconfig
+##
+# CONFIG_DNET is not set
+# CONFIG_ETHOC is not set
+
+##
+## file: drivers/net/ethernet/8390/Kconfig
+##
+CONFIG_HYDRA=m
+CONFIG_MAC8390=m
+CONFIG_NE2000=m
+CONFIG_APNE=m
+CONFIG_ZORRO8390=m
+
+##
+## file: drivers/net/ethernet/amd/Kconfig
+##
+CONFIG_A2065=m
+CONFIG_ARIADNE=m
+CONFIG_ATARILANCE=m
+CONFIG_MVME147_NET=m
+
+##
+## file: drivers/net/ethernet/apple/Kconfig
+##
+CONFIG_MACMACE=y
+
+##
+## file: drivers/net/ethernet/cirrus/Kconfig
+##
+CONFIG_MAC89x0=m
+
+##
+## file: drivers/net/ethernet/i825xx/Kconfig
+##
+CONFIG_BVME6000_NET=m
+CONFIG_MVME16x_NET=m
+
+##
+## file: drivers/net/ethernet/micrel/Kconfig
+##
+# CONFIG_KS8851_MLL is not set
+
+##
+## file: drivers/net/ethernet/natsemi/Kconfig
+##
+CONFIG_MACSONIC=m
+
+##
+## file: drivers/net/ethernet/smsc/Kconfig
+##
+CONFIG_SMC91X=m
+
+##
+## file: drivers/net/ethernet/wiznet/Kconfig
+##
+# CONFIG_WIZNET_W5100 is not set
+# CONFIG_WIZNET_W5300 is not set
+
+##
+## file: drivers/net/plip/Kconfig
+##
+CONFIG_PLIP=m
+
+##
+## file: drivers/net/wan/Kconfig
+##
+# CONFIG_WAN is not set
+
+##
+## file: drivers/net/wireless/Kconfig
+##
+# CONFIG_WLAN is not set
+
+##
+## file: drivers/parport/Kconfig
+##
+# CONFIG_PARPORT_PC is not set
+CONFIG_PARPORT_AMIGA=m
+CONFIG_PARPORT_MFC3=m
+CONFIG_PARPORT_ATARI=m
+
+##
+## file: drivers/pnp/Kconfig
+##
+# CONFIG_PNP is not set
+
+##
+## file: drivers/power/supply/Kconfig
+##
+# CONFIG_POWER_SUPPLY is not set
+
+##
+## file: drivers/ptp/Kconfig
+##
+# CONFIG_PTP_1588_CLOCK is not set
+
+##
+## file: drivers/rtc/Kconfig
+##
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+CONFIG_RTC_DRV_RP5C01=y
+# CONFIG_RTC_DRV_V3020 is not set
+# CONFIG_RTC_DRV_WM831X is not set
+# CONFIG_RTC_DRV_WM8350 is not set
+CONFIG_RTC_DRV_GENERIC=y
+
+##
+## file: drivers/scsi/Kconfig
+##
+#. for MVME147_SCSI that is not tristate
+CONFIG_SCSI=y
+CONFIG_SCSI_SPI_ATTRS=m
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_LIBFC is not set
+CONFIG_A3000_SCSI=m
+CONFIG_A2091_SCSI=m
+CONFIG_GVP11_SCSI=m
+CONFIG_SCSI_A4000T=m
+CONFIG_SCSI_ZORRO7XX=m
+CONFIG_ATARI_SCSI=m
+CONFIG_MAC_SCSI=m
+CONFIG_SCSI_MAC_ESP=m
+CONFIG_MVME147_SCSI=y
+CONFIG_MVME16x_SCSI=m
+CONFIG_BVME6000_SCSI=m
+
+##
+## file: drivers/scsi/ufs/Kconfig
+##
+# CONFIG_SCSI_UFSHCD is not set
+
+##
+## file: drivers/spi/Kconfig
+##
+# CONFIG_SPI is not set
+
+##
+## file: drivers/ssb/Kconfig
+##
+# CONFIG_SSB is not set
+
+##
+## file: drivers/staging/Kconfig
+##
+# CONFIG_STAGING is not set
+
+##
+## file: drivers/tty/Kconfig
+##
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_N_GSM is not set
+
+##
+## file: drivers/tty/serial/Kconfig
+##
+CONFIG_SERIAL_PMACZILOG=y
+CONFIG_SERIAL_PMACZILOG_TTYS=y
+CONFIG_SERIAL_PMACZILOG_CONSOLE=y
+
+##
+## file: drivers/tty/serial/8250/Kconfig
+##
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+##
+## file: drivers/usb/Kconfig
+##
+# CONFIG_USB_SUPPORT is not set
+
+##
+## file: drivers/video/backlight/Kconfig
+##
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+##
+## file: drivers/video/console/Kconfig
+##
+CONFIG_FRAMEBUFFER_CONSOLE=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB_FOREIGN_ENDIAN=y
+## choice: Choice endianness support
+CONFIG_FB_BOTH_ENDIAN=y
+## end choice
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_CIRRUS=y
+CONFIG_FB_PM2=m
+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_ATARI=y
+CONFIG_FB_VALKYRIE=y
+CONFIG_FB_MAC=y
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_ATY=y
+# CONFIG_FB_ATY_BACKLIGHT is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+
+##
+## file: drivers/video/logo/Kconfig
+##
+# CONFIG_LOGO is not set
+
+##
+## file: drivers/w1/Kconfig
+##
+# CONFIG_W1 is not set
+
+##
+## file: drivers/watchdog/Kconfig
+##
+# CONFIG_WATCHDOG is not set
+
+##
+## file: drivers/zorro/Kconfig
+##
+CONFIG_ZORRO_NAMES=y
+
+##
+## 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/ceph/Kconfig
+##
+# CONFIG_CEPH_FS is not set
+
+##
+## file: fs/dlm/Kconfig
+##
+# CONFIG_DLM is not set
+
+##
+## file: fs/efs/Kconfig
+##
+# CONFIG_EFS_FS is not set
+
+##
+## file: fs/exofs/Kconfig
+##
+# CONFIG_EXOFS_FS is not set
+
+##
+## file: fs/f2fs/Kconfig
+##
+# CONFIG_F2FS_FS is not set
+
+##
+## file: fs/freevxfs/Kconfig
+##
+# CONFIG_VXFS_FS is not set
+
+##
+## file: fs/gfs2/Kconfig
+##
+# CONFIG_GFS2_FS is not set
+
+##
+## file: fs/jfs/Kconfig
+##
+# CONFIG_JFS_FS is not set
+
+##
+## file: fs/ntfs/Kconfig
+##
+# CONFIG_NTFS_FS is not set
+
+##
+## file: fs/ocfs2/Kconfig
+##
+# CONFIG_OCFS2_FS is not set
+
+##
+## file: fs/omfs/Kconfig
+##
+# CONFIG_OMFS_FS is not set
+
+##
+## file: fs/qnx4/Kconfig
+##
+# CONFIG_QNX4FS_FS is not set
+
+##
+## file: fs/reiserfs/Kconfig
+##
+# CONFIG_REISERFS_FS_SECURITY is not set
+
+##
+## file: fs/ubifs/Kconfig
+##
+# CONFIG_UBIFS_FS is not set
+
+##
+## file: init/Kconfig
+##
+CONFIG_USELIB=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_SCHED_AUTOGROUP is not set
+## choice: Compiler optimization level
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+## end choice
+CONFIG_SGETMASK_SYSCALL=y
+CONFIG_SYSFS_SYSCALL=y
+CONFIG_COMPAT_BRK=y
+# CONFIG_MODULE_SIG is not set
+
+##
+## file: kernel/time/Kconfig
+##
+## choice: Timer tick handling
+CONFIG_HZ_PERIODIC=y
+# CONFIG_NO_HZ_IDLE is not set
+# CONFIG_NO_HZ_FULL is not set
+## end choice
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+
+##
+## file: lib/Kconfig.debug
+##
+# CONFIG_DEBUG_FS is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_TIMER_STATS is not set
+
+##
+## file: mm/Kconfig
+##
+# CONFIG_COMPACTION is not set
+# CONFIG_MIGRATION is not set
+# CONFIG_KSM is not set
+
+##
+## file: net/Kconfig
+##
+# CONFIG_WIRELESS is not set
+
+##
+## file: net/atm/Kconfig
+##
+# CONFIG_ATM is not set
+
+##
+## file: net/ax25/Kconfig
+##
+# CONFIG_HAMRADIO is not set
+
+##
+## file: net/batman-adv/Kconfig
+##
+# CONFIG_BATMAN_ADV is not set
+
+##
+## file: net/can/Kconfig
+##
+# CONFIG_CAN is not set
+
+##
+## file: net/ceph/Kconfig
+##
+# CONFIG_CEPH_LIB is not set
+
+##
+## file: net/dcb/Kconfig
+##
+# CONFIG_DCB is not set
+
+##
+## file: net/ieee802154/Kconfig
+##
+# CONFIG_IEEE802154 is not set
+
+##
+## file: net/ipv4/Kconfig
+##
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_TCP_MD5SIG is not set
+
+##
+## file: net/ipv6/Kconfig
+##
+CONFIG_IPV6=m
+
+##
+## file: net/ipx/Kconfig
+##
+CONFIG_IPX=m
+
+##
+## 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/mac80211/Kconfig
+##
+# CONFIG_MAC80211 is not set
+
+##
+## file: net/nfc/Kconfig
+##
+# CONFIG_NFC is not set
+
+##
+## file: net/phonet/Kconfig
+##
+# CONFIG_PHONET is not set
+
+##
+## file: net/rds/Kconfig
+##
+# CONFIG_RDS is not set
+
+##
+## file: net/rfkill/Kconfig
+##
+# CONFIG_RFKILL is not set
+
+##
+## file: net/rxrpc/Kconfig
+##
+# CONFIG_AF_RXRPC is not set
+
+##
+## file: net/sctp/Kconfig
+##
+# CONFIG_IP_SCTP is not set
+
+##
+## file: net/tipc/Kconfig
+##
+# CONFIG_TIPC is not set
+
+##
+## file: net/wimax/Kconfig
+##
+# CONFIG_WIMAX is not set
+
+##
+## file: net/wireless/Kconfig
+##
+# CONFIG_CFG80211 is not set
+
+##
+## file: security/Kconfig
+##
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+
+##
+## file: sound/Kconfig
+##
+# CONFIG_SND is not set
+
+##
+## file: sound/oss/dmasound/Kconfig
+##
+CONFIG_DMASOUND_ATARI=m
+CONFIG_DMASOUND_PAULA=m
+CONFIG_DMASOUND_Q40=m
+
diff --git a/config/m68k/defines b/config/m68k/defines
new file mode 100644 (file)
index 0000000..dcaef97
--- /dev/null
@@ -0,0 +1,17 @@
+[base]
+cflags: -ffreestanding
+flavours:
+ m68k
+kernel-arch: m68k
+
+[build]
+image-file: vmlinux.gz
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+suggests: vmelilo, fdutils
+install-stem: vmlinuz
+
+[m68k_description]
+hardware: Motorola MC68020+ family
diff --git a/config/mips/config b/config/mips/config
new file mode 100644 (file)
index 0000000..5942c9a
--- /dev/null
@@ -0,0 +1,8 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: Endianness selection
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_LITTLE_ENDIAN is not set
+## end choice
+
diff --git a/config/mips/defines b/config/mips/defines
new file mode 100644 (file)
index 0000000..720a051
--- /dev/null
@@ -0,0 +1,39 @@
+[base]
+flavours:
+ 4kc-malta
+ 5kc-malta
+ octeon
+kernel-arch: mips
+
+[build]
+image-file: vmlinux
+# linux-signed should not wait for slow builds
+signed-modules: false
+
+[image]
+install-stem: vmlinux
+
+[4kc-malta_description]
+hardware: MIPS Malta
+hardware-long: MIPS Malta boards
+
+[4kc-malta_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips32r2
+
+[5kc-malta_description]
+hardware: MIPS Malta (64-bit)
+hardware-long: MIPS Malta boards (64-bit)
+
+[5kc-malta_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips64r2
+
+[octeon_description]
+hardware: Octeon
+hardware-long: Cavium Networks Octeon
+
+[octeon_image]
+configs: kernelarch-mips/config.octeon
diff --git a/config/mips64/config b/config/mips64/config
new file mode 100644 (file)
index 0000000..5942c9a
--- /dev/null
@@ -0,0 +1,8 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: Endianness selection
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_LITTLE_ENDIAN is not set
+## end choice
+
diff --git a/config/mips64/defines b/config/mips64/defines
new file mode 100644 (file)
index 0000000..d27c3a5
--- /dev/null
@@ -0,0 +1,29 @@
+[base]
+flavours:
+ 5kc-malta
+ octeon
+kernel-arch: mips
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+install-stem: vmlinux
+
+[5kc-malta_description]
+hardware: MIPS Malta
+hardware-long: MIPS Malta boards
+
+[5kc-malta_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips64r2
+
+[octeon_description]
+hardware: Octeon
+hardware-long: Cavium Networks Octeon
+
+[octeon_image]
+configs: kernelarch-mips/config.octeon
diff --git a/config/mips64el/config b/config/mips64el/config
new file mode 100644 (file)
index 0000000..4807b61
--- /dev/null
@@ -0,0 +1,12 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: Endianness selection
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_LITTLE_ENDIAN=y
+## end choice
+## choice: CPU type
+# CONFIG_CPU_MIPS64_R1 is not set
+CONFIG_CPU_MIPS64_R2=y
+## end choice
+
diff --git a/config/mips64el/defines b/config/mips64el/defines
new file mode 100644 (file)
index 0000000..ec3b0eb
--- /dev/null
@@ -0,0 +1,37 @@
+[base]
+flavours:
+ 5kc-malta
+ loongson-3
+ octeon
+kernel-arch: mips
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+install-stem: vmlinux
+
+[5kc-malta_description]
+hardware: MIPS Malta
+hardware-long: MIPS Malta boards
+
+[5kc-malta_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips64r2
+
+[loongson-3_description]
+hardware: Loongson 3A/3B
+hardware-long: Loongson 3A or 3B based systems (e.g. from Loongson or Lemote)
+
+[loongson-3_image]
+configs: kernelarch-mips/config.loongson-3
+
+[octeon_description]
+hardware: Octeon
+hardware-long: Cavium Networks Octeon
+
+[octeon_image]
+configs: kernelarch-mips/config.octeon
diff --git a/config/mips64r6/config b/config/mips64r6/config
new file mode 100644 (file)
index 0000000..5942c9a
--- /dev/null
@@ -0,0 +1,8 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: Endianness selection
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_LITTLE_ENDIAN is not set
+## end choice
+
diff --git a/config/mips64r6/defines b/config/mips64r6/defines
new file mode 100644 (file)
index 0000000..dc7f22c
--- /dev/null
@@ -0,0 +1,22 @@
+[base]
+flavours:
+ mips64r6
+kernel-arch: mips
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+install-stem: vmlinux
+
+[mips64r6_description]
+hardware: MIPS R6 (64 bit, big endian)
+hardware-long: MIPS R6 (64 bit, big endian)
+
+[mips64r6_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips64r6
+
diff --git a/config/mips64r6el/config b/config/mips64r6el/config
new file mode 100644 (file)
index 0000000..7f124de
--- /dev/null
@@ -0,0 +1,8 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: Endianness selection
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_LITTLE_ENDIAN=y
+## end choice
+
diff --git a/config/mips64r6el/defines b/config/mips64r6el/defines
new file mode 100644 (file)
index 0000000..b60be33
--- /dev/null
@@ -0,0 +1,22 @@
+[base]
+flavours:
+ mips64r6el
+kernel-arch: mips
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+install-stem: vmlinux
+
+[mips64r6el_description]
+hardware: MIPS R6 (64 bit, little endian)
+hardware-long: MIPS R6 (64 bit, little endian)
+
+[mips64r6el_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips64r6
+
diff --git a/config/mipsel/config b/config/mipsel/config
new file mode 100644 (file)
index 0000000..7f124de
--- /dev/null
@@ -0,0 +1,8 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: Endianness selection
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_LITTLE_ENDIAN=y
+## end choice
+
diff --git a/config/mipsel/defines b/config/mipsel/defines
new file mode 100644 (file)
index 0000000..b122b23
--- /dev/null
@@ -0,0 +1,47 @@
+[base]
+flavours:
+ 4kc-malta
+ 5kc-malta
+ loongson-3
+ octeon
+kernel-arch: mips
+
+[build]
+image-file: vmlinux
+# linux-signed should not wait for slow builds
+signed-modules: false
+
+[image]
+install-stem: vmlinux
+
+[4kc-malta_description]
+hardware: MIPS Malta
+hardware-long: MIPS Malta boards
+
+[4kc-malta_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips32r2
+
+[5kc-malta_description]
+hardware: MIPS Malta (64-bit)
+hardware-long: MIPS Malta boards (64-bit)
+
+[5kc-malta_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips64r2
+
+[loongson-3_description]
+hardware: Loongson 3A/3B
+hardware-long: Loongson 3A or 3B based systems (e.g. from Loongson or Lemote)
+
+[loongson-3_image]
+configs: kernelarch-mips/config.loongson-3
+
+[octeon_description]
+hardware: Octeon
+hardware-long: Cavium Networks Octeon
+
+[octeon_image]
+configs: kernelarch-mips/config.octeon
diff --git a/config/mipsn32/defines b/config/mipsn32/defines
new file mode 100644 (file)
index 0000000..fa9b8af
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: mips
+featuresets:
+# empty; mipsn32 must be part of a multiarch installation with a mips64 kernel
diff --git a/config/mipsn32el/defines b/config/mipsn32el/defines
new file mode 100644 (file)
index 0000000..57d6f49
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: mips
+featuresets:
+# empty; mipsn32el must be part of a multiarch installation with a mips64el kernel
diff --git a/config/mipsn32r6/defines b/config/mipsn32r6/defines
new file mode 100644 (file)
index 0000000..2ba5f42
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: mips
+featuresets:
+# empty; mipsn32r6 must be part of a multiarch installation with a mips64r6 kernel
diff --git a/config/mipsn32r6el/defines b/config/mipsn32r6el/defines
new file mode 100644 (file)
index 0000000..f4c8a96
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: mips
+featuresets:
+# empty; mipsn32r6el must be part of a multiarch installation with a mips64r6el kernel
diff --git a/config/mipsr6/config b/config/mipsr6/config
new file mode 100644 (file)
index 0000000..5942c9a
--- /dev/null
@@ -0,0 +1,8 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: Endianness selection
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_LITTLE_ENDIAN is not set
+## end choice
+
diff --git a/config/mipsr6/defines b/config/mipsr6/defines
new file mode 100644 (file)
index 0000000..b945bdd
--- /dev/null
@@ -0,0 +1,32 @@
+[base]
+flavours:
+ mips32r6
+ mips64r6
+kernel-arch: mips
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+install-stem: vmlinux
+
+[mips32r6_description]
+hardware: MIPS R6 (32 bit, big endian)
+hardware-long: MIPS R6 (32 bit, big endian)
+
+[mips32r6_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips32r6
+
+[mips64r6_description]
+hardware: MIPS R6 (64 bit, big endian)
+hardware-long: MIPS R6 (64 bit, big endian)
+
+[mips64r6_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips64r6
+
diff --git a/config/mipsr6el/config b/config/mipsr6el/config
new file mode 100644 (file)
index 0000000..7f124de
--- /dev/null
@@ -0,0 +1,8 @@
+##
+## file: arch/mips/Kconfig
+##
+## choice: Endianness selection
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_LITTLE_ENDIAN=y
+## end choice
+
diff --git a/config/mipsr6el/defines b/config/mipsr6el/defines
new file mode 100644 (file)
index 0000000..f8e4aa4
--- /dev/null
@@ -0,0 +1,32 @@
+[base]
+flavours:
+ mips32r6el
+ mips64r6el
+kernel-arch: mips
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+install-stem: vmlinux
+
+[mips32r6el_description]
+hardware: MIPS R6 (32 bit, little endian)
+hardware-long: MIPS R6 (32 bit, little endian)
+
+[mips32r6el_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips32r6
+
+[mips64r6el_description]
+hardware: MIPS R6 (64 bit, little endian)
+hardware-long: MIPS R6 (64 bit, little endian)
+
+[mips64r6el_image]
+configs:
+ kernelarch-mips/config.malta
+ kernelarch-mips/config.mips64r6
+
diff --git a/config/powerpc/config.powerpc b/config/powerpc/config.powerpc
new file mode 100644 (file)
index 0000000..63a07fb
--- /dev/null
@@ -0,0 +1,113 @@
+##
+## 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: drivers/ata/Kconfig
+##
+CONFIG_PATA_MPC52xx=m
+
+##
+## file: drivers/block/Kconfig
+##
+CONFIG_MAC_FLOPPY=y
+
+##
+## file: drivers/dma/Kconfig
+##
+CONFIG_DMADEVICES=y
+
+##
+## file: drivers/dma/bestcomm/Kconfig
+##
+CONFIG_PPC_BESTCOMM=m
+
+##
+## file: drivers/macintosh/Kconfig
+##
+CONFIG_SENSORS_AMS=m
+CONFIG_SENSORS_AMS_PMU=y
+CONFIG_SENSORS_AMS_I2C=y
+
+##
+## file: drivers/net/ethernet/freescale/Kconfig
+##
+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/fbdev/Kconfig
+##
+CONFIG_FB_CONTROL=y
+CONFIG_FB_PLATINUM=y
+CONFIG_FB_VALKYRIE=y
+CONFIG_FB_CT65550=y
+CONFIG_FB_IMSTT=y
+CONFIG_FB_MATROX=y
+CONFIG_FB_ATY128=y
+CONFIG_FB_ATY=y
+CONFIG_FB_SIS=y
+CONFIG_FB_3DFX=y
+CONFIG_FB_VOODOO1=y
+
+##
+## file: init/Kconfig
+##
+CONFIG_SYSFS_SYSCALL=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
+
diff --git a/config/powerpc/config.powerpc-smp b/config/powerpc/config.powerpc-smp
new file mode 100644 (file)
index 0000000..dfbaaf6
--- /dev/null
@@ -0,0 +1,6 @@
+##
+## file: arch/powerpc/platforms/Kconfig.cputype
+##
+CONFIG_SMP=y
+CONFIG_NR_CPUS=4
+
diff --git a/config/powerpc/defines b/config/powerpc/defines
new file mode 100644 (file)
index 0000000..24b8b52
--- /dev/null
@@ -0,0 +1,30 @@
+[base]
+flavours:
+ powerpc
+ powerpc-smp
+ powerpc64
+kernel-arch: powerpc
+
+[build]
+image-file: vmlinux
+vdso: true
+
+[image]
+configs:
+suggests: mkvmlinuz
+install-stem: vmlinux
+
+[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
+
+[powerpc64_image]
+configs: kernelarch-powerpc/config-arch-64 kernelarch-powerpc/config-arch-64-be
diff --git a/config/powerpcspe/config b/config/powerpcspe/config
new file mode 100644 (file)
index 0000000..8d3fcc5
--- /dev/null
@@ -0,0 +1,33 @@
+##
+## file: arch/powerpc/Kconfig
+##
+CONFIG_HIGHMEM=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0,115200"
+
+##
+## file: arch/powerpc/platforms/85xx/Kconfig
+##
+CONFIG_MPC8540_ADS=y
+CONFIG_MPC8560_ADS=y
+CONFIG_MPC85xx_CDS=y
+CONFIG_MPC85xx_MDS=y
+CONFIG_MPC8536_DS=y
+CONFIG_MPC85xx_DS=y
+CONFIG_MPC85xx_RDB=y
+
+##
+## file: arch/powerpc/platforms/Kconfig.cputype
+##
+## choice: Processor Type
+CONFIG_PPC_85xx=y
+## end choice
+CONFIG_PHYS_64BIT=y
+CONFIG_SMP=y
+CONFIG_NR_CPUS=4
+
+##
+## file: drivers/gpio/Kconfig
+##
+CONFIG_GPIOLIB=y
+
diff --git a/config/powerpcspe/defines b/config/powerpcspe/defines
new file mode 100644 (file)
index 0000000..e978279
--- /dev/null
@@ -0,0 +1,17 @@
+[base]
+flavours:
+ powerpcspe
+kernel-arch: powerpc
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+vdso: true
+
+[image]
+suggests: mkvmlinuz
+install-stem: vmlinux
+
+[description]
+hardware: 32-bit PowerPC with SPE (instead of AltiVec) with SMP support
diff --git a/config/ppc64/defines b/config/ppc64/defines
new file mode 100644 (file)
index 0000000..86b6b20
--- /dev/null
@@ -0,0 +1,21 @@
+[base]
+flavours:
+ powerpc64
+kernel-arch: powerpc
+
+[build]
+image-file: vmlinux
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+vdso: true
+
+[image]
+configs:
+suggests: mkvmlinuz
+install-stem: vmlinux
+
+[powerpc64_description]
+hardware: 64-bit PowerPC
+
+[powerpc64_image]
+configs: kernelarch-powerpc/config-arch-64 kernelarch-powerpc/config-arch-64-be
diff --git a/config/ppc64el/defines b/config/ppc64el/defines
new file mode 100644 (file)
index 0000000..987ab7d
--- /dev/null
@@ -0,0 +1,19 @@
+[base]
+flavours:
+ powerpc64le
+kernel-arch: powerpc
+
+[build]
+image-file: vmlinux
+vdso: true
+
+[image]
+configs:
+suggests: mkvmlinuz
+install-stem: vmlinux
+
+[powerpc64le_description]
+hardware: Little-endian 64-bit PowerPC
+
+[powerpc64le_image]
+configs: kernelarch-powerpc/config-arch-64 kernelarch-powerpc/config-arch-64-le
diff --git a/config/s390/defines b/config/s390/defines
new file mode 100644 (file)
index 0000000..5b14fa7
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: s390
+featuresets:
+# empty; s390 must be part of a multiarch installation with an s390x kernel
diff --git a/config/s390x/config b/config/s390x/config
new file mode 100644 (file)
index 0000000..dedfdab
--- /dev/null
@@ -0,0 +1,217 @@
+##
+## file: arch/s390/Kconfig
+##
+## choice: Processor type
+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
+CONFIG_COMPAT=y
+CONFIG_SMP=y
+CONFIG_NR_CPUS=256
+CONFIG_HOTPLUG_CPU=y
+CONFIG_SCHED_TOPOLOGY=y
+CONFIG_PACK_STACK=y
+# CONFIG_CHECK_STACK is not set
+CONFIG_QDIO=y
+CONFIG_PCI=y
+CONFIG_PCI_NR_FUNCTIONS=64
+CONFIG_CHSC_SCH=m
+CONFIG_SCM_BUS=y
+CONFIG_EADM_SCH=m
+CONFIG_SECCOMP=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_S390_GUEST=y
+
+##
+## file: arch/s390/Kconfig.debug
+##
+# CONFIG_S390_PTDUMP is not set
+
+##
+## file: arch/s390/kvm/Kconfig
+##
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=m
+# CONFIG_KVM_S390_UCONTROL is not set
+
+##
+## file: block/partitions/Kconfig
+##
+CONFIG_IBM_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+
+##
+## file: drivers/block/Kconfig
+##
+# CONFIG_CDROM_PKTCDVD is not set
+
+##
+## file: drivers/crypto/Kconfig
+##
+CONFIG_ZCRYPT=m
+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/input/touchscreen/Kconfig
+##
+# CONFIG_INPUT_TOUCHSCREEN is not set
+
+##
+## file: drivers/memstick/Kconfig
+##
+# CONFIG_MEMSTICK is not set
+
+##
+## file: drivers/net/appletalk/Kconfig
+##
+# CONFIG_ATALK is not set
+
+##
+## file: drivers/net/ppp/Kconfig
+##
+# CONFIG_PPP is not set
+
+##
+## file: drivers/net/slip/Kconfig
+##
+# CONFIG_SLIP is not set
+
+##
+## file: drivers/net/wan/Kconfig
+##
+# CONFIG_WAN is not set
+
+##
+## file: drivers/pci/hotplug/Kconfig
+##
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HOTPLUG_PCI_S390=y
+
+##
+## 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
+CONFIG_SCM_BLOCK=m
+CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
+
+##
+## 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_ASYNC=m
+CONFIG_S390_TAPE=m
+CONFIG_S390_TAPE_34XX=m
+CONFIG_S390_TAPE_3590=m
+CONFIG_VMLOGRDR=m
+CONFIG_VMCP=y
+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=y
+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/video/fbdev/Kconfig
+##
+# CONFIG_FB is not set
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_DIAG288_WATCHDOG=m
+
+##
+## file: init/Kconfig
+##
+# CONFIG_PCI_QUIRKS is not set
+
+##
+## 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/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
+
diff --git a/config/s390x/defines b/config/s390x/defines
new file mode 100644 (file)
index 0000000..8dcf9fd
--- /dev/null
@@ -0,0 +1,21 @@
+[base]
+flavours:
+ s390x
+kernel-arch: s390
+
+[build]
+image-file: arch/s390/boot/image
+vdso: true
+
+[image]
+bootloaders: s390-tools
+install-stem: vmlinuz
+
+[relations]
+headers%gcc-6: linux-compiler-gcc-6-s390
+
+[s390x_build]
+debug-info: true
+
+[s390x_description]
+hardware: IBM zSeries
diff --git a/config/sh3/defines b/config/sh3/defines
new file mode 100644 (file)
index 0000000..71cbe64
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: sh
+featuresets:
+# empty; just building headers yet
diff --git a/config/sh4/config b/config/sh4/config
new file mode 100644 (file)
index 0000000..25694da
--- /dev/null
@@ -0,0 +1,66 @@
+##
+## file: arch/Kconfig
+##
+## choice: Stack Protector buffer overflow detection
+CONFIG_CC_STACKPROTECTOR_REGULAR=y
+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
+## end choice
+
+##
+## file: arch/sh/Kconfig
+##
+CONFIG_KEXEC=y
+CONFIG_SECCOMP=y
+
+##
+## file: arch/sh/Kconfig.cpu
+##
+## choice: Endianness 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_STAT_DETAILS=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_SH_CPU_FREQ=y
+
+##
+## file: drivers/pci/pcie/Kconfig
+##
+# CONFIG_PCIEPORTBUS is not set
+
+##
+## 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
+
diff --git a/config/sh4/config.sh7751r b/config/sh4/config.sh7751r
new file mode 100644 (file)
index 0000000..7ddd7a7
--- /dev/null
@@ -0,0 +1,173 @@
+##
+## file: arch/sh/Kconfig
+##
+## choice: Processor sub-type selection
+CONFIG_CPU_SUBTYPE_SH7751R=y
+## end choice
+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
+
+##
+## file: arch/sh/Kconfig.cpu
+##
+## choice: Endianness 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/clocksource/Kconfig
+##
+CONFIG_SH_TIMER_TMU=y
+
+##
+## file: drivers/hid/Kconfig
+##
+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_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
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_8139CP=y
+
+##
+## file: drivers/rtc/Kconfig
+##
+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/host/Kconfig
+##
+CONFIG_USB_OHCI_HCD=y
+
+##
+## file: drivers/video/console/Kconfig
+##
+CONFIG_FRAMEBUFFER_CONSOLE=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB_SM501=y
+
+##
+## file: mm/Kconfig
+##
+## choice: Memory model
+CONFIG_FLATMEM_MANUAL=y
+## end choice
+
diff --git a/config/sh4/config.sh7785lcr b/config/sh4/config.sh7785lcr
new file mode 100644 (file)
index 0000000..d26ade6
--- /dev/null
@@ -0,0 +1,227 @@
+##
+## file: arch/sh/Kconfig
+##
+## choice: Processor sub-type selection
+CONFIG_CPU_SUBTYPE_SH7785=y
+## end choice
+CONFIG_SH_PCLK_FREQ=50000000
+CONFIG_PCI=y
+
+##
+## file: arch/sh/boards/Kconfig
+##
+CONFIG_SH_SH7785LCR=y
+
+##
+## file: arch/sh/Kconfig.cpu
+##
+## choice: Endianness 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/clocksource/Kconfig
+##
+CONFIG_SH_TIMER_TMU=y
+
+##
+## file: drivers/dma/Kconfig
+##
+CONFIG_DMADEVICES=y
+
+##
+## file: drivers/hid/Kconfig
+##
+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_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
+
+##
+## file: drivers/net/ethernet/realtek/Kconfig
+##
+CONFIG_R8169=y
+
+##
+## file: drivers/rtc/Kconfig
+##
+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
+
+##
+## 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/host/Kconfig
+##
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_R8A66597_HCD=y
+
+##
+## file: drivers/usb/storage/Kconfig
+##
+CONFIG_USB_STORAGE=y
+
+##
+## file: drivers/video/console/Kconfig
+##
+CONFIG_FRAMEBUFFER_CONSOLE=y
+
+##
+## file: drivers/video/fbdev/Kconfig
+##
+CONFIG_FB_SM501=y
+
+##
+## file: drivers/watchdog/Kconfig
+##
+CONFIG_WATCHDOG=y
+CONFIG_SH_WDT=y
+# CONFIG_USBPCWATCHDOG is not set
+
+##
+## file: mm/Kconfig
+##
+## choice: Memory model
+CONFIG_SPARSEMEM_MANUAL=y
+## end choice
+CONFIG_MIGRATION=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+
diff --git a/config/sh4/defines b/config/sh4/defines
new file mode 100644 (file)
index 0000000..75b0011
--- /dev/null
@@ -0,0 +1,27 @@
+[base]
+flavours:
+ sh7751r
+ sh7785lcr
+kernel-arch: sh
+
+[build]
+image-file: arch/sh/boot/zImage
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+install-stem: vmlinuz
+
+[sh7751r_description]
+hardware: sh7751r
+hardware-long: Renesas SH7751R R2D plus board
+
+[sh7785lcr_description]
+hardware: sh7785lcr
+hardware-long: Renesas SH7785 reference board
+
+[sh7785lcr_image]
+recommends: u-boot-tools
+# Kernel partition size: 4MB
+check-size: 4194304
+
diff --git a/config/sparc/defines b/config/sparc/defines
new file mode 100644 (file)
index 0000000..c7e0119
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: sparc
+featuresets:
+# empty; sparc must be part of a multiarch installation with a sparc64 kernel
diff --git a/config/sparc64/defines b/config/sparc64/defines
new file mode 100644 (file)
index 0000000..cd4d9df
--- /dev/null
@@ -0,0 +1,27 @@
+[base]
+flavours:
+ sparc64
+ sparc64-smp
+kernel-arch: sparc
+
+[build]
+image-file: arch/sparc/boot/zImage
+# linux-signed only works for architectures in the main archive
+signed-modules: false
+
+[image]
+configs:
+suggests: silo, fdutils
+install-stem: vmlinuz
+
+[sparc64_description]
+hardware: uniprocessor 64-bit UltraSPARC
+
+[sparc64_image]
+configs: kernelarch-sparc/config-up
+
+[sparc64-smp_description]
+hardware: multiprocessor 64-bit UltraSPARC
+
+[sparc64-smp_image]
+configs: kernelarch-sparc/config-smp
diff --git a/config/tilegx/defines b/config/tilegx/defines
new file mode 100644 (file)
index 0000000..fa3a88b
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: tile
+featuresets:
+# empty; just building headers yet
diff --git a/config/x32/defines b/config/x32/defines
new file mode 100644 (file)
index 0000000..0a19846
--- /dev/null
@@ -0,0 +1,4 @@
+[base]
+kernel-arch: x86
+featuresets:
+# empty; x32 must be part of a multiarch installation with an amd64 kernel
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..7a43962
--- /dev/null
+++ b/control
@@ -0,0 +1,11141 @@
+Source: linux
+Section: kernel
+Priority: optional
+Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
+Uploaders: Bastian Blank <waldi@debian.org>, maximilian attems <maks@debian.org>, Ben Hutchings <ben@decadent.org.uk>, Salvatore Bonaccorso <carnil@debian.org>
+Standards-Version: 3.9.8
+Build-Depends: debhelper (>= 10.1~), dh-exec, python3:any, quilt, cpio <!stage1>, xz-utils <!stage1>, kernel-wedge (>= 2.93~) <!stage1>, kmod <!stage1>, bc <!stage1>, libssl-dev:native <!stage1>, libssl-dev [linux-any] <!stage1 !pkg.linux.notools cross>, openssl (>= 1.1.0-1~) <!stage1> | openssl:native <!stage1>, asciidoc-base <!stage1 !nodoc !pkg.linux.notools> | asciidoc <!stage1 !nodoc !pkg.linux.notools>, xmlto <!stage1 !nodoc !pkg.linux.notools>, bison <!stage1 !pkg.linux.notools !nopython>, flex (>= 2.6.1-1.1~) <!stage1 !pkg.linux.notools !nopython> | flex:native <!stage1 !pkg.linux.notools !nopython>, gcc-multilib [amd64 ppc64 s390x sparc64] <!stage1 !pkg.linux.notools !nopython>, libaudit-dev <!stage1 !pkg.linux.notools !nopython>, libbabeltrace-dev (>= 1.5.0) <!stage1 !pkg.linux.notools !nopython>, libbabeltrace-ctf-dev (>= 1.5.0) <!stage1 !pkg.linux.notools !nopython>, libdw-dev <!stage1 !pkg.linux.notools !nopython>, libelf-dev <!stage1 !pkg.linux.notools !nopython>, libiberty-dev <!stage1 !pkg.linux.notools !nopython>, libnewt-dev <!stage1 !pkg.linux.notools !nopython>, libnuma-dev [amd64 arm64 hppa i386 mips mips64 mips64el mipsel mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el powerpc powerpcspe ppc64 ppc64el sparc x32] <!stage1 !pkg.linux.notools !nopython>, libperl-dev <!stage1 !pkg.linux.notools !nopython>, libunwind8-dev [amd64 armel armhf arm64 i386] <!stage1 !pkg.linux.notools !nopython>, python-dev <!stage1 !pkg.linux.notools !nopython>, autoconf <!stage1 !pkg.linux.notools>, automake <!stage1 !pkg.linux.notools>, libtool <!stage1 !pkg.linux.notools>, libglib2.0-dev <!stage1 !pkg.linux.notools>, libudev-dev <!stage1 !pkg.linux.notools>, libwrap0-dev <!stage1 !pkg.linux.notools>, rsync <!stage1 !pkg.linux.notools>, libpci-dev <!stage1 !pkg.linux.notools>, dh-python <!stage1>, gcc-6 [alpha amd64 arm64 armel armhf hppa i386 m68k mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el s390x sh4 sparc64] <!stage1 !cross>, gcc-6-alpha-linux-gnu:native [alpha] <!stage1 cross>, gcc-6-x86-64-linux-gnu:native [amd64] <!stage1 cross>, gcc-6-aarch64-linux-gnu:native [arm64] <!stage1 cross>, gcc-6-arm-linux-gnueabi:native [armel] <!stage1 cross>, gcc-6-arm-linux-gnueabihf:native [armhf] <!stage1 cross>, binutils-hppa64-linux-gnu [hppa] <!stage1 !cross>, gcc-6-hppa64-linux-gnu [hppa] <!stage1 !cross>, gcc-6-hppa-linux-gnu:native [hppa] <!stage1 cross>, binutils-hppa64-linux-gnu:native [hppa] <!stage1 cross>, gcc-6-hppa64-linux-gnu:native [hppa] <!stage1 cross>, gcc-6-i686-linux-gnu:native [i386] <!stage1 cross>, gcc-6-m68k-linux-gnu:native [m68k] <!stage1 cross>, gcc-6-mips-linux-gnu:native [mips] <!stage1 cross>, gcc-6-mipsel-linux-gnu:native [mipsel] <!stage1 cross>, gcc-6-mips64-linux-gnuabi64:native [mips64] <!stage1 cross>, gcc-6-mips64el-linux-gnuabi64:native [mips64el] <!stage1 cross>, gcc-6-powerpc-linux-gnu:native [powerpc] <!stage1 cross>, gcc-6-powerpc-linux-gnuspe:native [powerpcspe] <!stage1 cross>, gcc-6-powerpc64-linux-gnu:native [ppc64] <!stage1 cross>, gcc-6-powerpc64le-linux-gnu:native [ppc64el] <!stage1 cross>, gcc-6-s390x-linux-gnu:native [s390x] <!stage1 cross>, gcc-6-sh4-linux-gnu:native [sh4] <!stage1 cross>, gcc-6-sparc64-linux-gnu:native [sparc64] <!stage1 cross>
+Build-Depends-Indep: patchutils <!stage1>, python-sphinx <!stage1 !nodoc>, python-sphinx-rtd-theme <!stage1 !nodoc>, xmlto <!stage1 !nodoc>
+Homepage: https://www.kernel.org/
+Vcs-Browser: https://anonscm.debian.org/cgit/kernel/linux.git
+Vcs-Git: https://anonscm.debian.org/git/kernel/linux.git
+
+Package: linux-source-4.9
+Architecture: all
+Section: kernel
+Depends: binutils, xz-utils, ${misc:Depends}
+Recommends: libc6-dev | libc-dev, gcc, make, bc
+Suggests: libncurses-dev | ncurses-dev, libqt4-dev, pkg-config
+Description: Linux kernel source for version 4.9 with Debian patches
+ This package provides source code for the Linux kernel version 4.9. 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.
+Build-Profiles: <!stage1>
+Multi-Arch: foreign
+
+Package: linux-support-4.9.0-3
+Architecture: all
+Section: devel
+Depends: ${python3:Depends}, ${misc:Depends}
+Description: Support files for Linux 4.9
+ 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.
+Build-Profiles: <!stage1>
+Multi-Arch: foreign
+
+Package: linux-doc-4.9
+Architecture: all
+Section: doc
+Depends: ${misc:Depends}
+Description: Linux kernel specific documentation for version 4.9
+ This package provides the various README files and HTML documentation for
+ the Linux kernel version 4.9.  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-4.9/Documentation/00-INDEX for the detailed
+ description of the contents.
+Build-Profiles: <!stage1 !nodoc>
+Multi-Arch: foreign
+
+Package: linux-manual-4.9
+Architecture: all
+Section: doc
+Provides: linux-manual
+Depends: ${misc:Depends}
+Replaces: linux-manual
+Conflicts: linux-manual
+Description: Linux kernel API manual pages for version 4.9
+ 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.
+Build-Profiles: <!stage1 !nodoc>
+Multi-Arch: foreign
+
+Package: linux-kbuild-4.9
+Architecture: linux-any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Kbuild infrastructure for Linux 4.9
+ This package provides the kbuild infrastructure for the headers packages
+ for Linux kernel version 4.9.
+Build-Profiles: <!stage1 !pkg.linux.notools>
+Multi-Arch: foreign
+
+Package: linux-cpupower
+Architecture: linux-any
+Section: admin
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: CPU power management tools for Linux
+ The cpupower command allows inspection and control of cpufreq and cpuidle
+ tunables for hardware that support these features.  It replaces
+ "cpufreq-info" and "cpufreq-set" in cpufrequtils.
+ .
+ ${cpupower:Arch-Description}
+Build-Profiles: <!stage1 !pkg.linux.notools>
+
+Package: libcpupower1
+Architecture: linux-any
+Section: libs
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: CPU frequency and voltage scaling tools for Linux (libraries)
+ This package contains the shared library.
+Build-Profiles: <!stage1 !pkg.linux.notools>
+
+Package: libcpupower-dev
+Architecture: linux-any
+Section: libdevel
+Provides: libcpufreq-dev
+Depends: ${shlibs:Depends}, ${misc:Depends}, libcpupower1 (= ${binary:Version})
+Replaces: libcpufreq-dev
+Conflicts: libcpufreq-dev
+Description: CPU frequency and voltage scaling tools for Linux (development files)
+ This package contains the 'power/cpupower' headers and library shared
+ objects.
+Build-Profiles: <!stage1 !pkg.linux.notools>
+
+Package: linux-perf-4.9
+Architecture: alpha amd64 arm64 armel armhf hppa i386 mips mips64 mips64el mips64r6 mips64r6el mipsel mipsn32 mipsn32el mipsn32r6 mipsn32r6el mipsr6 mipsr6el powerpc powerpcspe ppc64 ppc64el s390 s390x sh4 sparc sparc64
+Section: devel
+Provides: linux-tools-4.9
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ${python:Depends}
+Recommends: linux-base
+Suggests: linux-doc-4.9
+Replaces: linux-tools-4.9
+Conflicts: linux-tools-4.9
+Description: Performance analysis tools for Linux 4.9
+ This package contains the 'perf' performance analysis tools for Linux
+ kernel version 4.9.
+ .
+ The linux-base package contains a 'perf' command which will invoke the
+ appropriate version for the running kernel.
+Build-Profiles: <!stage1 !pkg.linux.notools !nopython>
+
+Package: libusbip-dev
+Architecture: linux-any
+Section: libdevel
+Depends: ${misc:Depends}
+Description: USB device sharing system over IP network (development files)
+ USB/IP is a system for sharing USB devices over the network.
+ .
+ This package provides headers for the libusbip library and the library
+ itself for static linking.
+Build-Profiles: <!stage1 !pkg.linux.notools>
+
+Package: usbip
+Architecture: linux-any
+Section: admin
+Depends: usbutils, ${shlibs:Depends}, ${misc:Depends}
+Description: USB device sharing system over IP network
+ USB/IP is a system for sharing USB devices over the network.
+ .
+ To share USB devices between computers with their full functionality,
+ USB/IP encapsulates "USB requests" into IP packets and transmits them
+ between computers.
+ .
+ Original USB device drivers and applications can be used for remote USB
+ devices without any modification of them.  A computer can use remote USB
+ devices as if they were directly attached.
+ .
+ Currently USB/IP provides no access control or encryption.  It should only
+ be used in trusted environments.
+ .
+ This package provides the server component 'usbipd' and the client tool
+ 'usbip'.
+Build-Profiles: <!stage1 !pkg.linux.notools>
+
+Package: hyperv-daemons
+Architecture: amd64 i386 x32
+Section: admin
+Depends: lsb-base, ${shlibs:Depends}, ${misc:Depends}
+Description: Support daemons for Linux running on Hyper-V
+ Suite of daemons for Linux guests running on Hyper-V, consisting of
+ hv_fcopy_daemon, hv_kvp_daemon and hv_vss_daemon.
+ .
+ hv_fcopy_daemon provides the file copy service, allowing the host to copy
+ files into the guest.
+ .
+ hv_kvp_daemon provides the key-value pair (KVP) service, allowing the host
+ to get and set the IP networking configuration of the guest.  (This
+ requires helper scripts which are not currently included.)
+ .
+ hv_vss_daemon provides the volume shadow copy service (VSS), allowing the
+ host to freeze the guest filesystems while taking a snapshot.
+Build-Profiles: <!stage1 !pkg.linux.notools>
+
+Package: linux-headers-4.9.0-3-common
+Architecture: all
+Depends: ${misc:Depends}
+Description: Common header files for Linux 4.9.0-3
+ This package provides the common kernel header files for Linux kernel
+ version 4.9.0-3, generally used for building out-of-tree kernel modules.
+ To obtain a complete set of headers you also need to install the
+ linux-headers-4.9.0-3-(flavour) package, matching the flavour of the
+ kernel you intend the build for.
+Build-Profiles: <!stage1>
+Multi-Arch: foreign
+
+Package: linux-headers-4.9.0-3-common-rt
+Architecture: all
+Depends: ${misc:Depends}
+Description: Common header files for Linux 4.9.0-3-rt
+ This package provides the common kernel header files for Linux kernel
+ version 4.9.0-3 with the PREEMPT_RT featureset, generally used for
+ building out-of-tree kernel modules.  To obtain a complete set of headers
+ you also need to install the linux-headers-4.9.0-3-(flavour) package,
+ matching the flavour of the kernel you intend the build for.
+Build-Profiles: <!stage1>
+Multi-Arch: foreign
+
+Package: linux-libc-dev
+Architecture: alpha amd64 arm64 armel armhf hppa i386 m68k mips mips64 mips64el mipsel mipsn32 mipsn32el powerpc powerpcspe ppc64 ppc64el s390 s390x sh3 sh4 sparc sparc64 tilegx x32
+Section: devel
+Provides: linux-kernel-headers
+Depends: ${misc:Depends}
+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 libc and other system
+ libraries.
+Multi-Arch: same
+
+Package: linux-headers-4.9.0-3-all
+Architecture: alpha amd64 arm64 armel armhf hppa i386 m68k mips mips64 mips64el mipsel powerpc powerpcspe ppc64 ppc64el s390x sh4 sparc64
+Depends: linux-headers-4.9.0-3-all-${kernel:Arch} (= ${binary:Version}), ${misc:Depends}
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-alpha
+Architecture: alpha
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-alpha-generic (= ${binary:Version}), linux-headers-4.9.0-3-alpha-smp (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, nic-shared-modules-4.9.0-3-alpha-generic-di, crc-modules-4.9.0-3-alpha-generic-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, nic-shared-modules-4.9.0-3-alpha-generic-di, usb-modules-4.9.0-3-alpha-generic-di, pcmcia-modules-4.9.0-3-alpha-generic-di, crc-modules-4.9.0-3-alpha-generic-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, pcmcia-modules-4.9.0-3-alpha-generic-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, usb-modules-4.9.0-3-alpha-generic-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, serial-modules-4.9.0-3-alpha-generic-di, zlib-modules-4.9.0-3-alpha-generic-di, crc-modules-4.9.0-3-alpha-generic-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, ata-modules-4.9.0-3-alpha-generic-di, scsi-core-modules-4.9.0-3-alpha-generic-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, scsi-core-modules-4.9.0-3-alpha-generic-di, isofs-modules-4.9.0-3-alpha-generic-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, scsi-core-modules-4.9.0-3-alpha-generic-di, cdrom-core-modules-4.9.0-3-alpha-generic-di, ata-modules-4.9.0-3-alpha-generic-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, crc-modules-4.9.0-3-alpha-generic-di, zlib-modules-4.9.0-3-alpha-generic-di, md-modules-4.9.0-3-alpha-generic-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, crc-modules-4.9.0-3-alpha-generic-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, crc-modules-4.9.0-3-alpha-generic-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, crc-modules-4.9.0-3-alpha-generic-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, md-modules-4.9.0-3-alpha-generic-di, scsi-core-modules-4.9.0-3-alpha-generic-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, scsi-modules-4.9.0-3-alpha-generic-di, usb-modules-4.9.0-3-alpha-generic-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, usb-modules-4.9.0-3-alpha-generic-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, event-modules-4.9.0-3-alpha-generic-di, input-modules-4.9.0-3-alpha-generic-di, usb-modules-4.9.0-3-alpha-generic-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: nic-pcmcia-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: nic-pcmcia-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, nic-shared-modules-4.9.0-3-alpha-generic-di, nic-wireless-modules-4.9.0-3-alpha-generic-di, pcmcia-modules-4.9.0-3-alpha-generic-di
+Description: Common PCMCIA NIC drivers
+ This package contains common PCMCIA NIC drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: pcmcia-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: Common PCMCIA drivers
+ This package contains common PCMCIA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, nic-shared-modules-4.9.0-3-alpha-generic-di, nic-wireless-modules-4.9.0-3-alpha-generic-di, usb-modules-4.9.0-3-alpha-generic-di, crc-modules-4.9.0-3-alpha-generic-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, scsi-core-modules-4.9.0-3-alpha-generic-di, ata-modules-4.9.0-3-alpha-generic-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, md-modules-4.9.0-3-alpha-generic-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, scsi-core-modules-4.9.0-3-alpha-generic-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di, scsi-core-modules-4.9.0-3-alpha-generic-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: srm-modules-4.9.0-3-alpha-generic-di
+Architecture: alpha
+Section: debian-installer
+Priority: standard
+Provides: srm-modules
+Depends: kernel-image-4.9.0-3-alpha-generic-di
+Description: SRM modules
+ This package contains the srm_env module which provides access to the SRM
+ environment.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-alpha-generic
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-alpha-generic
+Architecture: alpha
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [alpha] | linux-initramfs-tool [alpha]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, aboot [alpha], fdutils [alpha]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for Alpha
+ The Linux kernel 4.9 and modules for use on DEC Alpha systems with
+ extended kernel start address (Wildfire, Titan, Marvel).
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-alpha-generic
+Architecture: alpha
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-alpha-generic
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-alpha-generic, generally used for building
+ out-of-tree kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-alpha-generic, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-alpha-generic package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-alpha-generic-dbg
+Architecture: alpha
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-alpha-generic
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-alpha-generic.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-alpha-smp
+Architecture: alpha
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [alpha] | linux-initramfs-tool [alpha]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, aboot [alpha], fdutils [alpha]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for Alpha SMP
+ The Linux kernel 4.9 and modules for use on DEC Alpha SMP systems with
+ extended kernel start address (Wildfire, Titan, Marvel).
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-alpha-smp
+Architecture: alpha
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-alpha-smp
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-alpha-smp, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-alpha-smp, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-alpha-smp package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-alpha-smp-dbg
+Architecture: alpha
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-alpha-smp
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-alpha-smp.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-amd64
+Architecture: amd64
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-amd64 (= ${binary:Version}), linux-headers-4.9.0-3-rt-amd64 (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, zlib-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-amd64-di, nic-shared-modules-4.9.0-3-amd64-di, i2c-modules-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-amd64-di, nic-shared-modules-4.9.0-3-amd64-di, usb-modules-4.9.0-3-amd64-di, mmc-modules-4.9.0-3-amd64-di, pcmcia-modules-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-amd64-di, pcmcia-modules-4.9.0-3-amd64-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-amd64-di, usb-modules-4.9.0-3-amd64-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-amd64-di, serial-modules-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-amd64-di, ata-modules-4.9.0-3-amd64-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di, isofs-modules-4.9.0-3-amd64-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di, cdrom-core-modules-4.9.0-3-amd64-di, ata-modules-4.9.0-3-amd64-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di, md-modules-4.9.0-3-amd64-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: ntfs-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: ntfs-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: NTFS filesystem support
+ This package contains the NTFS file system module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-amd64-di, md-modules-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di, usb-modules-4.9.0-3-amd64-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: pcmcia-storage-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-storage-modules
+Depends: kernel-image-4.9.0-3-amd64-di, cdrom-core-modules-4.9.0-3-amd64-di, pcmcia-modules-4.9.0-3-amd64-di, ata-modules-4.9.0-3-amd64-di
+Description: PCMCIA storage drivers
+ This package contains PCMCIA storage drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-amd64-di, i2c-modules-4.9.0-3-amd64-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-amd64-di, usb-modules-4.9.0-3-amd64-di, i2c-modules-4.9.0-3-amd64-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-amd64-di, event-modules-4.9.0-3-amd64-di, input-modules-4.9.0-3-amd64-di, usb-modules-4.9.0-3-amd64-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: nic-pcmcia-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: nic-pcmcia-modules
+Depends: kernel-image-4.9.0-3-amd64-di, nic-shared-modules-4.9.0-3-amd64-di, nic-wireless-modules-4.9.0-3-amd64-di, pcmcia-modules-4.9.0-3-amd64-di, mmc-core-modules-4.9.0-3-amd64-di
+Description: Common PCMCIA NIC drivers
+ This package contains common PCMCIA NIC drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: pcmcia-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: Common PCMCIA drivers
+ This package contains common PCMCIA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-amd64-di, nic-shared-modules-4.9.0-3-amd64-di, nic-wireless-modules-4.9.0-3-amd64-di, usb-modules-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di, ata-modules-4.9.0-3-amd64-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: acpi-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: acpi-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: ACPI support modules
+ This package contains kernel modules for ACPI.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: i2c-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: i2c-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: i2c support modules
+ This package contains basic i2c support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-amd64-di, md-modules-4.9.0-3-amd64-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: efi-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: efi-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: EFI modules
+ This package contains EFI modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: mmc-core-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: mmc-core-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: MMC/SD/SDIO core modules
+ This package contains core modules for MMC/SD/SDIO support.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: mmc-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: mmc-modules
+Depends: kernel-image-4.9.0-3-amd64-di, mmc-core-modules-4.9.0-3-amd64-di, usb-modules-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and SD
+ cards.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: speakup-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: speakup-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: speakup modules
+ This package contains speakup modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-amd64-di, i2c-modules-4.9.0-3-amd64-di, usb-modules-4.9.0-3-amd64-di, pcmcia-modules-4.9.0-3-amd64-di, firewire-core-modules-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: hyperv-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: hyperv-modules
+Depends: kernel-image-4.9.0-3-amd64-di, input-modules-4.9.0-3-amd64-di, scsi-core-modules-4.9.0-3-amd64-di
+Description: Hyper-V modules
+ This package contains Hyper-V paravirtualised drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-amd64-di, crc-modules-4.9.0-3-amd64-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-amd64-di
+Architecture: amd64
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-amd64-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-amd64
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-amd64
+Architecture: amd64
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [amd64] | linux-initramfs-tool [amd64]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, grub-pc [amd64] | grub-efi-amd64 [amd64] | extlinux [amd64]
+Breaks: xserver-xorg-input-vmmouse (<< 1:13.0.99) [amd64], initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for 64-bit PCs
+ The Linux kernel 4.9 and modules for use on PCs with AMD64, Intel 64 or
+ VIA Nano processors.
+ .
+ This kernel also runs on a Xen hypervisor.  It supports both privileged
+ (dom0) and unprivileged (domU) operation.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-amd64
+Architecture: amd64
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-x86
+Description: Header files for Linux 4.9.0-3-amd64
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-amd64, generally used for building out-of-tree kernel
+ modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-amd64, and can be used for building modules
+ that load into the kernel provided by the linux-image-4.9.0-3-amd64
+ package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-amd64-dbg
+Architecture: amd64
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-amd64
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-amd64.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-rt-amd64
+Architecture: amd64
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [amd64] | linux-initramfs-tool [amd64]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, grub-pc [amd64] | grub-efi-amd64 [amd64] | extlinux [amd64]
+Breaks: xserver-xorg-input-vmmouse (<< 1:13.0.99) [amd64], initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for 64-bit PCs, PREEMPT_RT
+ The Linux kernel 4.9 and modules for use on PCs with AMD64, Intel 64 or
+ VIA Nano processors.
+ .
+ This kernel includes the PREEMPT_RT realtime patch set.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-rt-amd64
+Architecture: amd64
+Depends: linux-headers-4.9.0-3-common-rt (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-x86
+Description: Header files for Linux 4.9.0-3-rt-amd64
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-rt-amd64, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-rt-amd64, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-rt-amd64 package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-rt-amd64-dbg
+Architecture: amd64
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-rt-amd64
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-rt-amd64.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-arm64
+Architecture: arm64
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-arm64 (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, zlib-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-arm64-di, nic-shared-modules-4.9.0-3-arm64-di, i2c-modules-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-arm64-di, nic-shared-modules-4.9.0-3-arm64-di, usb-modules-4.9.0-3-arm64-di, mmc-modules-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-arm64-di, scsi-core-modules-4.9.0-3-arm64-di, isofs-modules-4.9.0-3-arm64-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-arm64-di, scsi-core-modules-4.9.0-3-arm64-di, cdrom-core-modules-4.9.0-3-arm64-di, ata-modules-4.9.0-3-arm64-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di, md-modules-4.9.0-3-arm64-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-arm64-di, md-modules-4.9.0-3-arm64-di, scsi-core-modules-4.9.0-3-arm64-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-arm64-di, scsi-core-modules-4.9.0-3-arm64-di, usb-modules-4.9.0-3-arm64-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-arm64-di, i2c-modules-4.9.0-3-arm64-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-arm64-di, usb-modules-4.9.0-3-arm64-di, i2c-modules-4.9.0-3-arm64-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-arm64-di, nic-shared-modules-4.9.0-3-arm64-di, nic-wireless-modules-4.9.0-3-arm64-di, usb-modules-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-arm64-di, scsi-core-modules-4.9.0-3-arm64-di, ata-modules-4.9.0-3-arm64-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: i2c-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: i2c-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: i2c support modules
+ This package contains basic i2c support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-arm64-di, md-modules-4.9.0-3-arm64-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: efi-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: efi-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: EFI modules
+ This package contains EFI modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-arm64-di, scsi-core-modules-4.9.0-3-arm64-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: mmc-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: mmc-modules
+Depends: kernel-image-4.9.0-3-arm64-di, usb-modules-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and SD
+ cards.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-arm64-di, scsi-core-modules-4.9.0-3-arm64-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: leds-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: leds-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: LED modules
+ This package contains LED modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-arm64-di, crc-modules-4.9.0-3-arm64-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-arm64-di
+Architecture: arm64
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-arm64-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-arm64
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-arm64
+Architecture: arm64
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [arm64] | linux-initramfs-tool [arm64]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: libmozjs185-1.0 [arm64], libmozjs-24-0 (<< 24.2.0-5.1~) [arm64], initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for 64-bit ARMv8 machines
+ The Linux kernel 4.9 and modules for use on 64-bit ARMv8 machines.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-arm64
+Architecture: arm64
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-arm64
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-arm64, generally used for building out-of-tree kernel
+ modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-arm64, and can be used for building modules
+ that load into the kernel provided by the linux-image-4.9.0-3-arm64
+ package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-arm64-dbg
+Architecture: arm64
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-arm64
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-arm64.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-armel
+Architecture: armel
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-marvell (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, rtc-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-marvell-di, nic-shared-modules-4.9.0-3-marvell-di, crc-modules-4.9.0-3-marvell-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-marvell-di, usb-modules-4.9.0-3-marvell-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-marvell-di, zlib-modules-4.9.0-3-marvell-di, crc-modules-4.9.0-3-marvell-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-marvell-di, scsi-core-modules-4.9.0-3-marvell-di, isofs-modules-4.9.0-3-marvell-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: ipv6-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: ipv6-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: IPv6 driver
+ This package contains the IPv6 driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-marvell-di, crc-modules-4.9.0-3-marvell-di, zlib-modules-4.9.0-3-marvell-di, md-modules-4.9.0-3-marvell-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-marvell-di, crc-modules-4.9.0-3-marvell-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: jffs2-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: jffs2-modules
+Depends: kernel-image-4.9.0-3-marvell-di, zlib-modules-4.9.0-3-marvell-di
+Description: JFFS2 filesystem support
+ This package contains the JFFS2 filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: minix-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: minix-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: Minix filesystem support
+ This package contains the Minix filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-marvell-di, crc-modules-4.9.0-3-marvell-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-marvell-di, md-modules-4.9.0-3-marvell-di, scsi-core-modules-4.9.0-3-marvell-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-marvell-di, scsi-core-modules-4.9.0-3-marvell-di, usb-modules-4.9.0-3-marvell-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-marvell-di, usb-modules-4.9.0-3-marvell-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-marvell-di, usb-modules-4.9.0-3-marvell-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-marvell-di, event-modules-4.9.0-3-marvell-di, input-modules-4.9.0-3-marvell-di, usb-modules-4.9.0-3-marvell-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-marvell-di, nic-shared-modules-4.9.0-3-marvell-di, usb-modules-4.9.0-3-marvell-di, crc-modules-4.9.0-3-marvell-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-marvell-di, scsi-core-modules-4.9.0-3-marvell-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-marvell-di, md-modules-4.9.0-3-marvell-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: mmc-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: mmc-modules
+Depends: kernel-image-4.9.0-3-marvell-di, usb-modules-4.9.0-3-marvell-di, crc-modules-4.9.0-3-marvell-di
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and SD
+ cards.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: leds-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: leds-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: LED modules
+ This package contains LED modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-marvell-di, crc-modules-4.9.0-3-marvell-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: mtd-modules-4.9.0-3-marvell-di
+Architecture: armel
+Section: debian-installer
+Priority: extra
+Provides: mtd-modules
+Depends: kernel-image-4.9.0-3-marvell-di
+Description: MTD modules
+ This package contains MTD modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-marvell
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-marvell
+Architecture: armel
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [armel] | linux-initramfs-tool [armel]
+Recommends: firmware-linux-free, ${kernel:Recommends}, u-boot-tools [armel]
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: flash-kernel (<< 3.57~) [armel], initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for Marvell Kirkwood/Orion
+ The Linux kernel 4.9 and modules for use on Marvell Kirkwood based systems
+ (SheevaPlug, QNAP TS-119/TS-219, etc) and Orion 5181, 5182 and 5281 based
+ systems (QNAP TS-109/TS-209, etc).
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-marvell
+Architecture: armel
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-arm
+Description: Header files for Linux 4.9.0-3-marvell
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-marvell, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-marvell, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-marvell package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-marvell-dbg
+Architecture: armel
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-marvell
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-marvell.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-armhf
+Architecture: armhf
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-armmp (= ${binary:Version}), linux-headers-4.9.0-3-armmp-lpae (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-armmp-di, nic-shared-modules-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-armmp-di, nic-shared-modules-4.9.0-3-armmp-di, usb-modules-4.9.0-3-armmp-di, mmc-modules-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-armmp-di, zlib-modules-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-armmp-di, ata-modules-4.9.0-3-armmp-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-armmp-di, scsi-core-modules-4.9.0-3-armmp-di, ata-modules-4.9.0-3-armmp-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di, zlib-modules-4.9.0-3-armmp-di, md-modules-4.9.0-3-armmp-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-armmp-di, md-modules-4.9.0-3-armmp-di, scsi-core-modules-4.9.0-3-armmp-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-armmp-di, scsi-core-modules-4.9.0-3-armmp-di, usb-modules-4.9.0-3-armmp-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-armmp-di, usb-modules-4.9.0-3-armmp-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-armmp-di, nic-shared-modules-4.9.0-3-armmp-di, nic-wireless-modules-4.9.0-3-armmp-di, usb-modules-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-armmp-di, scsi-core-modules-4.9.0-3-armmp-di, ata-modules-4.9.0-3-armmp-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-armmp-di, md-modules-4.9.0-3-armmp-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: efi-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: efi-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: EFI modules
+ This package contains EFI modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-armmp-di, scsi-core-modules-4.9.0-3-armmp-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: mmc-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: mmc-modules
+Depends: kernel-image-4.9.0-3-armmp-di, usb-modules-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and SD
+ cards.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-armmp-di, scsi-core-modules-4.9.0-3-armmp-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: leds-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: leds-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: LED modules
+ This package contains LED modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-armmp-di, crc-modules-4.9.0-3-armmp-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: mtd-modules-4.9.0-3-armmp-di
+Architecture: armhf
+Section: debian-installer
+Priority: extra
+Provides: mtd-modules
+Depends: kernel-image-4.9.0-3-armmp-di
+Description: MTD modules
+ This package contains MTD modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-armmp
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-armmp
+Architecture: armhf
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [armhf] | linux-initramfs-tool [armhf]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for ARMv7 multiplatform compatible SoCs
+ The Linux kernel 4.9 and modules for use on ARMv7 multiplatform kernel.
+ See https://wiki.debian.org/DebianKernel/ARMMP for details of supported
+ platforms.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-armmp
+Architecture: armhf
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-arm
+Description: Header files for Linux 4.9.0-3-armmp
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-armmp, generally used for building out-of-tree kernel
+ modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-armmp, and can be used for building modules
+ that load into the kernel provided by the linux-image-4.9.0-3-armmp
+ package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-armmp-dbg
+Architecture: armhf
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-armmp
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-armmp.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-armmp-lpae
+Architecture: armhf
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [armhf] | linux-initramfs-tool [armhf]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for ARMv7 multiplatform compatible SoCs supporting LPAE
+ The Linux kernel 4.9 and modules for use on ARMv7 multiplatform kernel
+ supporting LPAE. See https://wiki.debian.org/DebianKernel/ARMMP for
+ details of supported platforms..
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-armmp-lpae
+Architecture: armhf
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-arm
+Description: Header files for Linux 4.9.0-3-armmp-lpae
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-armmp-lpae, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-armmp-lpae, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-armmp-lpae package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-armmp-lpae-dbg
+Architecture: armhf
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-armmp-lpae
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-armmp-lpae.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-hppa
+Architecture: hppa
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-parisc (= ${binary:Version}), linux-headers-4.9.0-3-parisc64-smp (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-parisc-di, nic-shared-modules-4.9.0-3-parisc-di, crc-modules-4.9.0-3-parisc-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-parisc-di, usb-modules-4.9.0-3-parisc-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-parisc-di, serial-modules-4.9.0-3-parisc-di, zlib-modules-4.9.0-3-parisc-di, crc-modules-4.9.0-3-parisc-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-parisc-di, ata-modules-4.9.0-3-parisc-di, scsi-core-modules-4.9.0-3-parisc-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-parisc-di, scsi-core-modules-4.9.0-3-parisc-di, isofs-modules-4.9.0-3-parisc-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-parisc-di, scsi-core-modules-4.9.0-3-parisc-di, cdrom-core-modules-4.9.0-3-parisc-di, ata-modules-4.9.0-3-parisc-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-parisc-di, crc-modules-4.9.0-3-parisc-di, zlib-modules-4.9.0-3-parisc-di, md-modules-4.9.0-3-parisc-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-parisc-di, crc-modules-4.9.0-3-parisc-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-parisc-di, crc-modules-4.9.0-3-parisc-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-parisc-di, crc-modules-4.9.0-3-parisc-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-parisc-di, md-modules-4.9.0-3-parisc-di, scsi-core-modules-4.9.0-3-parisc-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-parisc-di, scsi-modules-4.9.0-3-parisc-di, usb-modules-4.9.0-3-parisc-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-parisc-di, usb-modules-4.9.0-3-parisc-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-parisc-di, event-modules-4.9.0-3-parisc-di, input-modules-4.9.0-3-parisc-di, usb-modules-4.9.0-3-parisc-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-parisc-di, nic-shared-modules-4.9.0-3-parisc-di, usb-modules-4.9.0-3-parisc-di, crc-modules-4.9.0-3-parisc-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-parisc-di, scsi-core-modules-4.9.0-3-parisc-di, ata-modules-4.9.0-3-parisc-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-parisc-di, md-modules-4.9.0-3-parisc-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-parisc-di, scsi-core-modules-4.9.0-3-parisc-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-parisc-di, scsi-core-modules-4.9.0-3-parisc-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-parisc-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-parisc-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc
+Package-Type: udeb
+
+Package: kernel-image-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, i2c-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, nic-shared-modules-4.9.0-3-parisc64-smp-di, crc-modules-4.9.0-3-parisc64-smp-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, usb-modules-4.9.0-3-parisc64-smp-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, serial-modules-4.9.0-3-parisc64-smp-di, zlib-modules-4.9.0-3-parisc64-smp-di, crc-modules-4.9.0-3-parisc64-smp-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, ata-modules-4.9.0-3-parisc64-smp-di, scsi-core-modules-4.9.0-3-parisc64-smp-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, scsi-core-modules-4.9.0-3-parisc64-smp-di, isofs-modules-4.9.0-3-parisc64-smp-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, scsi-core-modules-4.9.0-3-parisc64-smp-di, cdrom-core-modules-4.9.0-3-parisc64-smp-di, ata-modules-4.9.0-3-parisc64-smp-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, crc-modules-4.9.0-3-parisc64-smp-di, zlib-modules-4.9.0-3-parisc64-smp-di, md-modules-4.9.0-3-parisc64-smp-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, crc-modules-4.9.0-3-parisc64-smp-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, crc-modules-4.9.0-3-parisc64-smp-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, crc-modules-4.9.0-3-parisc64-smp-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, md-modules-4.9.0-3-parisc64-smp-di, scsi-core-modules-4.9.0-3-parisc64-smp-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, scsi-modules-4.9.0-3-parisc64-smp-di, usb-modules-4.9.0-3-parisc64-smp-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, usb-modules-4.9.0-3-parisc64-smp-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, event-modules-4.9.0-3-parisc64-smp-di, input-modules-4.9.0-3-parisc64-smp-di, usb-modules-4.9.0-3-parisc64-smp-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, nic-shared-modules-4.9.0-3-parisc64-smp-di, usb-modules-4.9.0-3-parisc64-smp-di, crc-modules-4.9.0-3-parisc64-smp-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, scsi-core-modules-4.9.0-3-parisc64-smp-di, ata-modules-4.9.0-3-parisc64-smp-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, md-modules-4.9.0-3-parisc64-smp-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, scsi-core-modules-4.9.0-3-parisc64-smp-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di, scsi-core-modules-4.9.0-3-parisc64-smp-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-parisc64-smp-di
+Architecture: hppa
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-parisc64-smp-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-parisc64-smp
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-parisc
+Architecture: hppa
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [hppa] | linux-initramfs-tool [hppa]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, palo [hppa]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for 32-bit PA-RISC
+ The Linux kernel 4.9 and modules for use on HP PA-RISC 32-bit systems with
+ max 4 GB RAM.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-parisc
+Architecture: hppa
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6, binutils-hppa64-linux-gnu, gcc-6-hppa64-linux-gnu
+Description: Header files for Linux 4.9.0-3-parisc
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-parisc, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-parisc, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-parisc package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-parisc-dbg
+Architecture: hppa
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-parisc
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-parisc.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-parisc64-smp
+Architecture: hppa
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [hppa] | linux-initramfs-tool [hppa]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, palo [hppa]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for multiprocessor 64-bit PA-RISC
+ The Linux kernel 4.9 and modules for use on HP PA-RISC 64-bit SMP systems
+ with support for more than 4 GB RAM.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-parisc64-smp
+Architecture: hppa
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6, binutils-hppa64-linux-gnu, gcc-6-hppa64-linux-gnu
+Description: Header files for Linux 4.9.0-3-parisc64-smp
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-parisc64-smp, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-parisc64-smp, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-parisc64-smp package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-parisc64-smp-dbg
+Architecture: hppa
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-parisc64-smp
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-parisc64-smp.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-i386
+Architecture: i386
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-686 (= ${binary:Version}), linux-headers-4.9.0-3-686-pae (= ${binary:Version}), linux-headers-4.9.0-3-rt-686-pae (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, rtc-modules, zlib-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-686-di, nic-shared-modules-4.9.0-3-686-di, i2c-modules-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-686-di, nic-shared-modules-4.9.0-3-686-di, usb-modules-4.9.0-3-686-di, mmc-modules-4.9.0-3-686-di, pcmcia-modules-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-686-di, pcmcia-modules-4.9.0-3-686-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-686-di, usb-modules-4.9.0-3-686-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-686-di, serial-modules-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-686-di, ata-modules-4.9.0-3-686-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di, isofs-modules-4.9.0-3-686-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di, cdrom-core-modules-4.9.0-3-686-di, ata-modules-4.9.0-3-686-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di, md-modules-4.9.0-3-686-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: ntfs-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: ntfs-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: NTFS filesystem support
+ This package contains the NTFS file system module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-686-di, md-modules-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di, usb-modules-4.9.0-3-686-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: pcmcia-storage-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-storage-modules
+Depends: kernel-image-4.9.0-3-686-di, cdrom-core-modules-4.9.0-3-686-di, pcmcia-modules-4.9.0-3-686-di, ata-modules-4.9.0-3-686-di
+Description: PCMCIA storage drivers
+ This package contains PCMCIA storage drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-686-di, i2c-modules-4.9.0-3-686-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-686-di, usb-modules-4.9.0-3-686-di, i2c-modules-4.9.0-3-686-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-686-di, event-modules-4.9.0-3-686-di, input-modules-4.9.0-3-686-di, usb-modules-4.9.0-3-686-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: nic-pcmcia-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-pcmcia-modules
+Depends: kernel-image-4.9.0-3-686-di, nic-shared-modules-4.9.0-3-686-di, nic-wireless-modules-4.9.0-3-686-di, pcmcia-modules-4.9.0-3-686-di, mmc-core-modules-4.9.0-3-686-di
+Description: Common PCMCIA NIC drivers
+ This package contains common PCMCIA NIC drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: pcmcia-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: Common PCMCIA drivers
+ This package contains common PCMCIA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-686-di, nic-shared-modules-4.9.0-3-686-di, nic-wireless-modules-4.9.0-3-686-di, usb-modules-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di, ata-modules-4.9.0-3-686-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: acpi-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: acpi-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: ACPI support modules
+ This package contains kernel modules for ACPI.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: i2c-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: i2c-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: i2c support modules
+ This package contains basic i2c support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-686-di, md-modules-4.9.0-3-686-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: efi-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: efi-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: EFI modules
+ This package contains EFI modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: mmc-core-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: mmc-core-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: MMC/SD/SDIO core modules
+ This package contains core modules for MMC/SD/SDIO support.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: mmc-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: mmc-modules
+Depends: kernel-image-4.9.0-3-686-di, mmc-core-modules-4.9.0-3-686-di, usb-modules-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and SD
+ cards.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: speakup-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: speakup-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: speakup modules
+ This package contains speakup modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-686-di, i2c-modules-4.9.0-3-686-di, usb-modules-4.9.0-3-686-di, pcmcia-modules-4.9.0-3-686-di, firewire-core-modules-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: hyperv-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: hyperv-modules
+Depends: kernel-image-4.9.0-3-686-di, input-modules-4.9.0-3-686-di, scsi-core-modules-4.9.0-3-686-di
+Description: Hyper-V modules
+ This package contains Hyper-V paravirtualised drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-686-di, crc-modules-4.9.0-3-686-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-686-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-686-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686
+Package-Type: udeb
+
+Package: kernel-image-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, rtc-modules, zlib-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, nic-shared-modules-4.9.0-3-686-pae-di, i2c-modules-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, nic-shared-modules-4.9.0-3-686-pae-di, usb-modules-4.9.0-3-686-pae-di, mmc-modules-4.9.0-3-686-pae-di, pcmcia-modules-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, pcmcia-modules-4.9.0-3-686-pae-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, usb-modules-4.9.0-3-686-pae-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, serial-modules-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, ata-modules-4.9.0-3-686-pae-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di, isofs-modules-4.9.0-3-686-pae-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di, cdrom-core-modules-4.9.0-3-686-pae-di, ata-modules-4.9.0-3-686-pae-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di, md-modules-4.9.0-3-686-pae-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: ntfs-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: ntfs-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: NTFS filesystem support
+ This package contains the NTFS file system module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, md-modules-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di, usb-modules-4.9.0-3-686-pae-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: pcmcia-storage-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-storage-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, cdrom-core-modules-4.9.0-3-686-pae-di, pcmcia-modules-4.9.0-3-686-pae-di, ata-modules-4.9.0-3-686-pae-di
+Description: PCMCIA storage drivers
+ This package contains PCMCIA storage drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, i2c-modules-4.9.0-3-686-pae-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, usb-modules-4.9.0-3-686-pae-di, i2c-modules-4.9.0-3-686-pae-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, event-modules-4.9.0-3-686-pae-di, input-modules-4.9.0-3-686-pae-di, usb-modules-4.9.0-3-686-pae-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: nic-pcmcia-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-pcmcia-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, nic-shared-modules-4.9.0-3-686-pae-di, nic-wireless-modules-4.9.0-3-686-pae-di, pcmcia-modules-4.9.0-3-686-pae-di, mmc-core-modules-4.9.0-3-686-pae-di
+Description: Common PCMCIA NIC drivers
+ This package contains common PCMCIA NIC drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: pcmcia-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: Common PCMCIA drivers
+ This package contains common PCMCIA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, nic-shared-modules-4.9.0-3-686-pae-di, nic-wireless-modules-4.9.0-3-686-pae-di, usb-modules-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di, ata-modules-4.9.0-3-686-pae-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: acpi-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: acpi-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: ACPI support modules
+ This package contains kernel modules for ACPI.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: i2c-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: i2c-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: i2c support modules
+ This package contains basic i2c support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, md-modules-4.9.0-3-686-pae-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: efi-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: efi-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: EFI modules
+ This package contains EFI modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: mmc-core-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: mmc-core-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: MMC/SD/SDIO core modules
+ This package contains core modules for MMC/SD/SDIO support.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: mmc-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: mmc-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, mmc-core-modules-4.9.0-3-686-pae-di, usb-modules-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and SD
+ cards.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: speakup-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: speakup-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: speakup modules
+ This package contains speakup modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, i2c-modules-4.9.0-3-686-pae-di, usb-modules-4.9.0-3-686-pae-di, pcmcia-modules-4.9.0-3-686-pae-di, firewire-core-modules-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: hyperv-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: hyperv-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, input-modules-4.9.0-3-686-pae-di, scsi-core-modules-4.9.0-3-686-pae-di
+Description: Hyper-V modules
+ This package contains Hyper-V paravirtualised drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-686-pae-di, crc-modules-4.9.0-3-686-pae-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-686-pae-di
+Architecture: i386
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-686-pae-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-686-pae
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-686
+Architecture: i386
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [i386] | linux-initramfs-tool [i386]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, grub-pc [i386] | extlinux [i386]
+Breaks: xserver-xorg-input-vmmouse (<< 1:13.0.99) [i386], initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for older PCs
+ The Linux kernel 4.9 and modules for use on PCs with one or more
+ processors not supporting PAE.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-686
+Architecture: i386
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-x86
+Description: Header files for Linux 4.9.0-3-686
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-686, generally used for building out-of-tree kernel
+ modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-686, and can be used for building modules
+ that load into the kernel provided by the linux-image-4.9.0-3-686 package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-686-dbg
+Architecture: i386
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-686
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-686.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-686-pae
+Architecture: i386
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [i386] | linux-initramfs-tool [i386]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, grub-pc [i386] | extlinux [i386]
+Breaks: xserver-xorg-input-vmmouse (<< 1:13.0.99) [i386], initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for modern PCs
+ The Linux kernel 4.9 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, Core and Atom; AMD
+ Geode NX, Athlon (K7), Duron, Opteron, Sempron, Turion or Phenom;
+ Transmeta Efficeon; VIA C7; and some other processors.
+ .
+ This kernel also runs on a Xen hypervisor.  It supports both privileged
+ (dom0) and unprivileged (domU) operation.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-686-pae
+Architecture: i386
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-x86
+Description: Header files for Linux 4.9.0-3-686-pae
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-686-pae, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-686-pae, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-686-pae package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-686-pae-dbg
+Architecture: i386
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-686-pae
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-686-pae.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-rt-686-pae
+Architecture: i386
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [i386] | linux-initramfs-tool [i386]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, grub-pc [i386] | extlinux [i386]
+Breaks: xserver-xorg-input-vmmouse (<< 1:13.0.99) [i386], initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for modern PCs, PREEMPT_RT
+ The Linux kernel 4.9 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, Core and Atom; AMD
+ Geode NX, Athlon (K7), Duron, Opteron, Sempron, Turion or Phenom;
+ Transmeta Efficeon; VIA C7; and some other processors.
+ .
+ This kernel includes the PREEMPT_RT realtime patch set.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-rt-686-pae
+Architecture: i386
+Depends: linux-headers-4.9.0-3-common-rt (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-x86
+Description: Header files for Linux 4.9.0-3-rt-686-pae
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-rt-686-pae, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-rt-686-pae, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-rt-686-pae package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-rt-686-pae-dbg
+Architecture: i386
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-rt-686-pae
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-rt-686-pae.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-m68k
+Architecture: m68k
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-m68k (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-m68k-di, zlib-modules-4.9.0-3-m68k-di, crc-modules-4.9.0-3-m68k-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-m68k-di, isofs-modules-4.9.0-3-m68k-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-m68k-di, cdrom-core-modules-4.9.0-3-m68k-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-m68k-di, crc-modules-4.9.0-3-m68k-di, zlib-modules-4.9.0-3-m68k-di, md-modules-4.9.0-3-m68k-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-m68k-di, crc-modules-4.9.0-3-m68k-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-m68k-di, crc-modules-4.9.0-3-m68k-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-m68k-di, crc-modules-4.9.0-3-m68k-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-m68k-di
+Architecture: m68k
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-m68k-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-m68k
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-m68k
+Architecture: m68k
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [m68k] | linux-initramfs-tool [m68k]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, vmelilo [m68k], fdutils [m68k]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for Motorola MC68020+ family
+ The Linux kernel 4.9 and modules for use on Motorola MC68020+ family.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-m68k
+Architecture: m68k
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-m68k
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-m68k, generally used for building out-of-tree kernel
+ modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-m68k, and can be used for building modules
+ that load into the kernel provided by the linux-image-4.9.0-3-m68k
+ package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-m68k-dbg
+Architecture: m68k
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-m68k
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-m68k.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-mips
+Architecture: mips
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-4kc-malta (= ${binary:Version}), linux-headers-4.9.0-3-5kc-malta (= ${binary:Version}), linux-headers-4.9.0-3-octeon (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, rtc-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, nic-shared-modules-4.9.0-3-4kc-malta-di, i2c-modules-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, nic-shared-modules-4.9.0-3-4kc-malta-di, usb-modules-4.9.0-3-4kc-malta-di, mmc-modules-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, usb-modules-4.9.0-3-4kc-malta-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, zlib-modules-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, ata-modules-4.9.0-3-4kc-malta-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, scsi-core-modules-4.9.0-3-4kc-malta-di, isofs-modules-4.9.0-3-4kc-malta-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, scsi-core-modules-4.9.0-3-4kc-malta-di, cdrom-core-modules-4.9.0-3-4kc-malta-di, ata-modules-4.9.0-3-4kc-malta-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di, zlib-modules-4.9.0-3-4kc-malta-di, md-modules-4.9.0-3-4kc-malta-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: ntfs-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: ntfs-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: NTFS filesystem support
+ This package contains the NTFS file system module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: hfs-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: hfs-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: HFS filesystem support
+ This package contains the HFS and HFS+ filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: affs-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: affs-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: Amiga filesystem support
+ This package contains the Amiga filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: minix-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: minix-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: Minix filesystem support
+ This package contains the Minix filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, md-modules-4.9.0-3-4kc-malta-di, scsi-core-modules-4.9.0-3-4kc-malta-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, scsi-core-modules-4.9.0-3-4kc-malta-di, usb-modules-4.9.0-3-4kc-malta-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, usb-modules-4.9.0-3-4kc-malta-di, i2c-modules-4.9.0-3-4kc-malta-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, event-modules-4.9.0-3-4kc-malta-di, input-modules-4.9.0-3-4kc-malta-di, usb-modules-4.9.0-3-4kc-malta-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, nic-shared-modules-4.9.0-3-4kc-malta-di, nic-wireless-modules-4.9.0-3-4kc-malta-di, usb-modules-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, scsi-core-modules-4.9.0-3-4kc-malta-di, ata-modules-4.9.0-3-4kc-malta-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: i2c-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: i2c-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: i2c support modules
+ This package contains basic i2c support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, md-modules-4.9.0-3-4kc-malta-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, scsi-core-modules-4.9.0-3-4kc-malta-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: mmc-core-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: mmc-core-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: MMC/SD/SDIO core modules
+ This package contains core modules for MMC/SD/SDIO support.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: mmc-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: mmc-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, mmc-core-modules-4.9.0-3-4kc-malta-di, usb-modules-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and SD
+ cards.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, scsi-core-modules-4.9.0-3-4kc-malta-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, i2c-modules-4.9.0-3-4kc-malta-di, usb-modules-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di, crc-modules-4.9.0-3-4kc-malta-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-4kc-malta-di
+Architecture: mips mipsel
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-4kc-malta-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-4kc-malta
+Package-Type: udeb
+
+Package: kernel-image-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, rtc-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-octeon-di, nic-shared-modules-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-octeon-di, nic-shared-modules-4.9.0-3-octeon-di, usb-modules-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-octeon-di, usb-modules-4.9.0-3-octeon-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-octeon-di, zlib-modules-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-octeon-di, scsi-core-modules-4.9.0-3-octeon-di, isofs-modules-4.9.0-3-octeon-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-octeon-di, scsi-core-modules-4.9.0-3-octeon-di, cdrom-core-modules-4.9.0-3-octeon-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di, zlib-modules-4.9.0-3-octeon-di, md-modules-4.9.0-3-octeon-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: ntfs-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: ntfs-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: NTFS filesystem support
+ This package contains the NTFS file system module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: hfs-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: hfs-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: HFS filesystem support
+ This package contains the HFS and HFS+ filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: affs-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: affs-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: Amiga filesystem support
+ This package contains the Amiga filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: minix-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: minix-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: Minix filesystem support
+ This package contains the Minix filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-octeon-di, md-modules-4.9.0-3-octeon-di, scsi-core-modules-4.9.0-3-octeon-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-octeon-di, scsi-core-modules-4.9.0-3-octeon-di, usb-modules-4.9.0-3-octeon-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-octeon-di, usb-modules-4.9.0-3-octeon-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-octeon-di, nic-shared-modules-4.9.0-3-octeon-di, nic-wireless-modules-4.9.0-3-octeon-di, usb-modules-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-octeon-di, scsi-core-modules-4.9.0-3-octeon-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-octeon-di, md-modules-4.9.0-3-octeon-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: rtc-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: rtc-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: RTC modules
+ This package contains RTC modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-octeon-di, scsi-core-modules-4.9.0-3-octeon-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-octeon-di, usb-modules-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-octeon-di, crc-modules-4.9.0-3-octeon-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-octeon-di
+Architecture: mips mips64 mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-octeon-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-octeon
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-4kc-malta
+Architecture: mips mipsel
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [mips mipsel] | linux-initramfs-tool [mips mipsel]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for MIPS Malta
+ The Linux kernel 4.9 and modules for use on MIPS Malta boards.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-4kc-malta
+Architecture: mips mipsel
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-4kc-malta
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-4kc-malta, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-4kc-malta, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-4kc-malta package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-4kc-malta-dbg
+Architecture: mips mipsel
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-4kc-malta
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-4kc-malta.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-5kc-malta
+Architecture: mips mips64 mips64el mipsel
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [mips mipsel mips64 mips64el] | linux-initramfs-tool [mips mipsel mips64 mips64el]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for MIPS Malta (64-bit)
+ The Linux kernel 4.9 and modules for use on MIPS Malta boards (64-bit).
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-5kc-malta
+Architecture: mips mips64 mips64el mipsel
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-5kc-malta
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-5kc-malta, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-5kc-malta, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-5kc-malta package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-5kc-malta-dbg
+Architecture: mips mips64 mips64el mipsel
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-5kc-malta
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-5kc-malta.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-octeon
+Architecture: mips mips64 mips64el mipsel
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [mips mipsel mips64 mips64el] | linux-initramfs-tool [mips mipsel mips64 mips64el]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for Octeon
+ The Linux kernel 4.9 and modules for use on Cavium Networks Octeon.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-octeon
+Architecture: mips mips64 mips64el mipsel
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-octeon
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-octeon, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-octeon, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-octeon package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-octeon-dbg
+Architecture: mips mips64 mips64el mipsel
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-octeon
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-octeon.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-mipsel
+Architecture: mipsel
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-4kc-malta (= ${binary:Version}), linux-headers-4.9.0-3-5kc-malta (= ${binary:Version}), linux-headers-4.9.0-3-loongson-3 (= ${binary:Version}), linux-headers-4.9.0-3-octeon (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, i2c-modules, rtc-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, nic-shared-modules-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, nic-shared-modules-4.9.0-3-loongson-3-di, usb-modules-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, usb-modules-4.9.0-3-loongson-3-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, zlib-modules-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, ata-modules-4.9.0-3-loongson-3-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, scsi-core-modules-4.9.0-3-loongson-3-di, isofs-modules-4.9.0-3-loongson-3-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, scsi-core-modules-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, scsi-core-modules-4.9.0-3-loongson-3-di, cdrom-core-modules-4.9.0-3-loongson-3-di, ata-modules-4.9.0-3-loongson-3-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di, zlib-modules-4.9.0-3-loongson-3-di, md-modules-4.9.0-3-loongson-3-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: ntfs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: ntfs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: NTFS filesystem support
+ This package contains the NTFS file system module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: hfs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: hfs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: HFS filesystem support
+ This package contains the HFS and HFS+ filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: affs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: affs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: Amiga filesystem support
+ This package contains the Amiga filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: minix-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: minix-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: Minix filesystem support
+ This package contains the Minix filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: nfs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: nfs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: NFS filesystem support
+ This package contains the NFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, md-modules-4.9.0-3-loongson-3-di, scsi-core-modules-4.9.0-3-loongson-3-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, scsi-core-modules-4.9.0-3-loongson-3-di, usb-modules-4.9.0-3-loongson-3-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, usb-modules-4.9.0-3-loongson-3-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, nic-shared-modules-4.9.0-3-loongson-3-di, nic-wireless-modules-4.9.0-3-loongson-3-di, usb-modules-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, scsi-core-modules-4.9.0-3-loongson-3-di, ata-modules-4.9.0-3-loongson-3-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, md-modules-4.9.0-3-loongson-3-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, scsi-core-modules-4.9.0-3-loongson-3-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: speakup-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: speakup-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: speakup modules
+ This package contains speakup modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, scsi-core-modules-4.9.0-3-loongson-3-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, usb-modules-4.9.0-3-loongson-3-di, firewire-core-modules-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di, crc-modules-4.9.0-3-loongson-3-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-loongson-3-di
+Architecture: mips64el mipsel
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-loongson-3-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-loongson-3
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-loongson-3
+Architecture: mips64el mipsel
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [mipsel mips64el] | linux-initramfs-tool [mipsel mips64el]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for Loongson 3A/3B
+ The Linux kernel 4.9 and modules for use on Loongson 3A or 3B based
+ systems (e.g.  from Loongson or Lemote).
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-loongson-3
+Architecture: mips64el mipsel
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-loongson-3
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-loongson-3, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-loongson-3, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-loongson-3 package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-loongson-3-dbg
+Architecture: mips64el mipsel
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-loongson-3
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-loongson-3.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-mips64
+Architecture: mips64
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-5kc-malta (= ${binary:Version}), linux-headers-4.9.0-3-octeon (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, rtc-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, nic-shared-modules-4.9.0-3-5kc-malta-di, i2c-modules-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: nic-wireless-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: nic-wireless-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, nic-shared-modules-4.9.0-3-5kc-malta-di, usb-modules-4.9.0-3-5kc-malta-di, mmc-modules-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.  Includes
+ crypto modules only needed for wireless (WEP, WPA).
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, usb-modules-4.9.0-3-5kc-malta-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, zlib-modules-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, ata-modules-4.9.0-3-5kc-malta-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, scsi-core-modules-4.9.0-3-5kc-malta-di, isofs-modules-4.9.0-3-5kc-malta-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, scsi-core-modules-4.9.0-3-5kc-malta-di, cdrom-core-modules-4.9.0-3-5kc-malta-di, ata-modules-4.9.0-3-5kc-malta-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di, zlib-modules-4.9.0-3-5kc-malta-di, md-modules-4.9.0-3-5kc-malta-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: ntfs-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: ntfs-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: NTFS filesystem support
+ This package contains the NTFS file system module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: hfs-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: hfs-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: HFS filesystem support
+ This package contains the HFS and HFS+ filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: affs-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: affs-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: Amiga filesystem support
+ This package contains the Amiga filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: minix-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: minix-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: Minix filesystem support
+ This package contains the Minix filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, md-modules-4.9.0-3-5kc-malta-di, scsi-core-modules-4.9.0-3-5kc-malta-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, scsi-core-modules-4.9.0-3-5kc-malta-di, usb-modules-4.9.0-3-5kc-malta-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, usb-modules-4.9.0-3-5kc-malta-di, i2c-modules-4.9.0-3-5kc-malta-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, event-modules-4.9.0-3-5kc-malta-di, input-modules-4.9.0-3-5kc-malta-di, usb-modules-4.9.0-3-5kc-malta-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, nic-shared-modules-4.9.0-3-5kc-malta-di, nic-wireless-modules-4.9.0-3-5kc-malta-di, usb-modules-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, scsi-core-modules-4.9.0-3-5kc-malta-di, ata-modules-4.9.0-3-5kc-malta-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: i2c-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: i2c-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: i2c support modules
+ This package contains basic i2c support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, md-modules-4.9.0-3-5kc-malta-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, scsi-core-modules-4.9.0-3-5kc-malta-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: mmc-core-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: mmc-core-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: MMC/SD/SDIO core modules
+ This package contains core modules for MMC/SD/SDIO support.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: mmc-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: mmc-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, mmc-core-modules-4.9.0-3-5kc-malta-di, usb-modules-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and SD
+ cards.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, scsi-core-modules-4.9.0-3-5kc-malta-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, i2c-modules-4.9.0-3-5kc-malta-di, usb-modules-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di, crc-modules-4.9.0-3-5kc-malta-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-5kc-malta-di
+Architecture: mips64 mips64el
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-5kc-malta-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-5kc-malta
+Package-Type: udeb
+
+Package: linux-headers-4.9.0-3-all-mips64el
+Architecture: mips64el
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-5kc-malta (= ${binary:Version}), linux-headers-4.9.0-3-loongson-3 (= ${binary:Version}), linux-headers-4.9.0-3-octeon (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-powerpc
+Architecture: powerpc
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-powerpc (= ${binary:Version}), linux-headers-4.9.0-3-powerpc-smp (= ${binary:Version}), linux-headers-4.9.0-3-powerpc64 (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, nic-shared-modules-4.9.0-3-powerpc-di, crc-modules-4.9.0-3-powerpc-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, pcmcia-modules-4.9.0-3-powerpc-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, usb-modules-4.9.0-3-powerpc-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, serial-modules-4.9.0-3-powerpc-di, zlib-modules-4.9.0-3-powerpc-di, crc-modules-4.9.0-3-powerpc-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, ata-modules-4.9.0-3-powerpc-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, scsi-core-modules-4.9.0-3-powerpc-di, isofs-modules-4.9.0-3-powerpc-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, scsi-core-modules-4.9.0-3-powerpc-di, crc-modules-4.9.0-3-powerpc-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, scsi-core-modules-4.9.0-3-powerpc-di, cdrom-core-modules-4.9.0-3-powerpc-di, ata-modules-4.9.0-3-powerpc-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, crc-modules-4.9.0-3-powerpc-di, zlib-modules-4.9.0-3-powerpc-di, md-modules-4.9.0-3-powerpc-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, crc-modules-4.9.0-3-powerpc-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, crc-modules-4.9.0-3-powerpc-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: hfs-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: hfs-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: HFS filesystem support
+ This package contains the HFS and HFS+ filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: affs-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: affs-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: Amiga filesystem support
+ This package contains the Amiga filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, crc-modules-4.9.0-3-powerpc-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, md-modules-4.9.0-3-powerpc-di, scsi-core-modules-4.9.0-3-powerpc-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, scsi-core-modules-4.9.0-3-powerpc-di, usb-modules-4.9.0-3-powerpc-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: pcmcia-storage-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-storage-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, cdrom-core-modules-4.9.0-3-powerpc-di, pcmcia-modules-4.9.0-3-powerpc-di, ata-modules-4.9.0-3-powerpc-di
+Description: PCMCIA storage drivers
+ This package contains PCMCIA storage drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: fb-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: fb-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, usb-modules-4.9.0-3-powerpc-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, event-modules-4.9.0-3-powerpc-di, input-modules-4.9.0-3-powerpc-di, usb-modules-4.9.0-3-powerpc-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: nic-pcmcia-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: nic-pcmcia-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, nic-modules-4.9.0-3-powerpc-di, nic-shared-modules-4.9.0-3-powerpc-di, pcmcia-modules-4.9.0-3-powerpc-di
+Description: Common PCMCIA NIC drivers
+ This package contains common PCMCIA NIC drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: pcmcia-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: Common PCMCIA drivers
+ This package contains common PCMCIA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, scsi-core-modules-4.9.0-3-powerpc-di, ata-modules-4.9.0-3-powerpc-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, md-modules-4.9.0-3-powerpc-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, scsi-core-modules-4.9.0-3-powerpc-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, scsi-core-modules-4.9.0-3-powerpc-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-powerpc-di, crc-modules-4.9.0-3-powerpc-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-powerpc-di
+Architecture: powerpc
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-powerpc-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc
+Package-Type: udeb
+
+Package: kernel-image-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, nic-shared-modules-4.9.0-3-powerpc64-di, crc-modules-4.9.0-3-powerpc64-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, pcmcia-modules-4.9.0-3-powerpc64-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, usb-modules-4.9.0-3-powerpc64-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, serial-modules-4.9.0-3-powerpc64-di, crc-modules-4.9.0-3-powerpc64-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, ata-modules-4.9.0-3-powerpc64-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, scsi-core-modules-4.9.0-3-powerpc64-di, isofs-modules-4.9.0-3-powerpc64-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, scsi-core-modules-4.9.0-3-powerpc64-di, crc-modules-4.9.0-3-powerpc64-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, scsi-core-modules-4.9.0-3-powerpc64-di, cdrom-core-modules-4.9.0-3-powerpc64-di, ata-modules-4.9.0-3-powerpc64-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, crc-modules-4.9.0-3-powerpc64-di, md-modules-4.9.0-3-powerpc64-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, crc-modules-4.9.0-3-powerpc64-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, crc-modules-4.9.0-3-powerpc64-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: hfs-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: hfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: HFS filesystem support
+ This package contains the HFS and HFS+ filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: affs-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: affs-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: Amiga filesystem support
+ This package contains the Amiga filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, crc-modules-4.9.0-3-powerpc64-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, md-modules-4.9.0-3-powerpc64-di, scsi-core-modules-4.9.0-3-powerpc64-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, scsi-core-modules-4.9.0-3-powerpc64-di, usb-modules-4.9.0-3-powerpc64-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: pcmcia-storage-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-storage-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, cdrom-core-modules-4.9.0-3-powerpc64-di, pcmcia-modules-4.9.0-3-powerpc64-di, ata-modules-4.9.0-3-powerpc64-di
+Description: PCMCIA storage drivers
+ This package contains PCMCIA storage drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, usb-modules-4.9.0-3-powerpc64-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, event-modules-4.9.0-3-powerpc64-di, input-modules-4.9.0-3-powerpc64-di, usb-modules-4.9.0-3-powerpc64-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: nic-pcmcia-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: nic-pcmcia-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, nic-modules-4.9.0-3-powerpc64-di, nic-shared-modules-4.9.0-3-powerpc64-di, pcmcia-modules-4.9.0-3-powerpc64-di
+Description: Common PCMCIA NIC drivers
+ This package contains common PCMCIA NIC drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: pcmcia-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: pcmcia-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: Common PCMCIA drivers
+ This package contains common PCMCIA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, scsi-core-modules-4.9.0-3-powerpc64-di, ata-modules-4.9.0-3-powerpc64-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, md-modules-4.9.0-3-powerpc64-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, scsi-core-modules-4.9.0-3-powerpc64-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, scsi-core-modules-4.9.0-3-powerpc64-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di, crc-modules-4.9.0-3-powerpc64-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: hypervisor-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: hypervisor-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: IBM 64bit hypervisor console modules
+ Contains drivers for the hypervisor console, used as console for linux
+ running in logical partitions of IBM hardware supporting it.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: fancontrol-modules-4.9.0-3-powerpc64-di
+Architecture: powerpc ppc64
+Section: debian-installer
+Priority: standard
+Provides: fancontrol-modules
+Depends: kernel-image-4.9.0-3-powerpc64-di
+Description: Apple powermac fancontrol modules
+ Contains drivers for macintosh i2c bus as well as for the monitoring
+ devices connected to it.  This allows to control the fans during
+ installation.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-powerpc
+Architecture: powerpc
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [powerpc] | linux-initramfs-tool [powerpc]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, mkvmlinuz [powerpc]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for uniprocessor 32-bit PowerPC
+ The Linux kernel 4.9 and modules for use on uniprocessor 32-bit PowerPC.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-powerpc
+Architecture: powerpc
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-powerpc
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-powerpc, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-powerpc, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-powerpc package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-powerpc-dbg
+Architecture: powerpc
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-powerpc
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-powerpc.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-powerpc-smp
+Architecture: powerpc
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [powerpc] | linux-initramfs-tool [powerpc]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, mkvmlinuz [powerpc]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for multiprocessor 32-bit PowerPC
+ The Linux kernel 4.9 and modules for use on multiprocessor 32-bit PowerPC.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-powerpc-smp
+Architecture: powerpc
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-powerpc-smp
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-powerpc-smp, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-powerpc-smp, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-powerpc-smp package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-powerpc-smp-dbg
+Architecture: powerpc
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-powerpc-smp
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-powerpc-smp.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-powerpc64
+Architecture: powerpc ppc64
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [powerpc ppc64] | linux-initramfs-tool [powerpc ppc64]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, mkvmlinuz [powerpc ppc64]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for 64-bit PowerPC
+ The Linux kernel 4.9 and modules for use on 64-bit PowerPC.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-powerpc64
+Architecture: powerpc ppc64
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-powerpc64
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-powerpc64, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-powerpc64, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-powerpc64 package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-powerpc64-dbg
+Architecture: powerpc ppc64
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-powerpc64
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-powerpc64.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-powerpcspe
+Architecture: powerpcspe
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-powerpcspe (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-powerpcspe
+Architecture: powerpcspe
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [powerpcspe] | linux-initramfs-tool [powerpcspe]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, mkvmlinuz [powerpcspe]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for 32-bit PowerPC with SPE (instead of AltiVec) with SMP support
+ The Linux kernel 4.9 and modules for use on 32-bit PowerPC with SPE
+ (instead of AltiVec) with SMP support.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-powerpcspe
+Architecture: powerpcspe
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-powerpcspe
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-powerpcspe, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-powerpcspe, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-powerpcspe package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-powerpcspe-dbg
+Architecture: powerpcspe
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-powerpcspe
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-powerpcspe.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-ppc64
+Architecture: ppc64
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-powerpc64 (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-ppc64el
+Architecture: ppc64el
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-powerpc64le (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, nic-shared-modules-4.9.0-3-powerpc64le-di, crc-modules-4.9.0-3-powerpc64le-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: nic-shared-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: nic-shared-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: serial-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: optional
+Provides: serial-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, usb-modules-4.9.0-3-powerpc64le-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, serial-modules-4.9.0-3-powerpc64le-di, crc-modules-4.9.0-3-powerpc64le-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, scsi-core-modules-4.9.0-3-powerpc64le-di, isofs-modules-4.9.0-3-powerpc64le-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, scsi-core-modules-4.9.0-3-powerpc64le-di, crc-modules-4.9.0-3-powerpc64le-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, scsi-core-modules-4.9.0-3-powerpc64le-di, cdrom-core-modules-4.9.0-3-powerpc64le-di, ata-modules-4.9.0-3-powerpc64le-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, crc-modules-4.9.0-3-powerpc64le-di, md-modules-4.9.0-3-powerpc64le-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, crc-modules-4.9.0-3-powerpc64le-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, crc-modules-4.9.0-3-powerpc64le-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, crc-modules-4.9.0-3-powerpc64le-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, md-modules-4.9.0-3-powerpc64le-di, scsi-core-modules-4.9.0-3-powerpc64le-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, scsi-core-modules-4.9.0-3-powerpc64le-di, usb-modules-4.9.0-3-powerpc64le-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, usb-modules-4.9.0-3-powerpc64le-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: event-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: event-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: Event support
+ This package contains event drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: mouse-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: mouse-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, event-modules-4.9.0-3-powerpc64le-di, input-modules-4.9.0-3-powerpc64le-di, usb-modules-4.9.0-3-powerpc64le-di
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, scsi-core-modules-4.9.0-3-powerpc64le-di, ata-modules-4.9.0-3-powerpc64le-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, md-modules-4.9.0-3-powerpc64le-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, scsi-core-modules-4.9.0-3-powerpc64le-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, scsi-core-modules-4.9.0-3-powerpc64le-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: uinput-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: uinput-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: uinput support
+ This package contains the uinput module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di, crc-modules-4.9.0-3-powerpc64le-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: hypervisor-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: hypervisor-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: IBM 64bit hypervisor console modules
+ Contains drivers for the hypervisor console, used as console for linux
+ running in logical partitions of IBM hardware supporting it.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: fancontrol-modules-4.9.0-3-powerpc64le-di
+Architecture: ppc64el
+Section: debian-installer
+Priority: standard
+Provides: fancontrol-modules
+Depends: kernel-image-4.9.0-3-powerpc64le-di
+Description: Apple powermac fancontrol modules
+ Contains drivers for macintosh i2c bus as well as for the monitoring
+ devices connected to it.  This allows to control the fans during
+ installation.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-powerpc64le
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-powerpc64le
+Architecture: ppc64el
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [ppc64el] | linux-initramfs-tool [ppc64el]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, mkvmlinuz [ppc64el]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for Little-endian 64-bit PowerPC
+ The Linux kernel 4.9 and modules for use on Little-endian 64-bit PowerPC.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-powerpc64le
+Architecture: ppc64el
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-powerpc64le
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-powerpc64le, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-powerpc64le, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-powerpc64le package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-powerpc64le-dbg
+Architecture: ppc64el
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-powerpc64le
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-powerpc64le.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-s390x
+Architecture: s390x
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-s390x (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-s390x-di, crc-modules-4.9.0-3-s390x-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-s390x-di, scsi-core-modules-4.9.0-3-s390x-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-s390x-di, crc-modules-4.9.0-3-s390x-di, zlib-modules-4.9.0-3-s390x-di, md-modules-4.9.0-3-s390x-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-s390x-di, crc-modules-4.9.0-3-s390x-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-s390x-di, crc-modules-4.9.0-3-s390x-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-s390x-di, crc-modules-4.9.0-3-s390x-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-s390x-di, md-modules-4.9.0-3-s390x-di, scsi-core-modules-4.9.0-3-s390x-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-s390x-di, md-modules-4.9.0-3-s390x-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-s390x-di, scsi-core-modules-4.9.0-3-s390x-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-s390x-di, crc-modules-4.9.0-3-s390x-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: dasd-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: standard
+Provides: dasd-modules
+Depends: kernel-image-4.9.0-3-s390x-di
+Description: dasd modules
+ This package contains dasd modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: dasd-extra-modules-4.9.0-3-s390x-di
+Architecture: s390x
+Section: debian-installer
+Priority: extra
+Provides: dasd-extra-modules
+Depends: kernel-image-4.9.0-3-s390x-di, dasd-modules-4.9.0-3-s390x-di
+Description: optional dasd DIAG support
+ This package contains the module for dasd DIAG support.  The udeb is not
+ loaded by default as the installer does not actually support this.  It can
+ however be useful to have available in rescue situations.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-s390x
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-s390x
+Architecture: s390x
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [s390x] | linux-initramfs-tool [s390x]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, s390-tools [s390x]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for IBM zSeries
+ The Linux kernel 4.9 and modules for use on IBM zSeries.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-s390x
+Architecture: s390x
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, linux-compiler-gcc-6-s390
+Description: Header files for Linux 4.9.0-3-s390x
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-s390x, generally used for building out-of-tree kernel
+ modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-s390x, and can be used for building modules
+ that load into the kernel provided by the linux-image-4.9.0-3-s390x
+ package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-s390x-dbg
+Architecture: s390x
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-s390x
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-s390x.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-sh4
+Architecture: sh4
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-sh7751r (= ${binary:Version}), linux-headers-4.9.0-3-sh7785lcr (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, event-modules, fb-modules, input-modules, mouse-modules, nic-shared-modules, rtc-modules, uinput-modules, usb-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, i2c-modules-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, zlib-modules-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, isofs-modules-4.9.0-3-sh7751r-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di, zlib-modules-4.9.0-3-sh7751r-di, md-modules-4.9.0-3-sh7751r-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: minix-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: minix-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: Minix filesystem support
+ This package contains the Minix filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, md-modules-4.9.0-3-sh7751r-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: i2c-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: i2c-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: i2c support modules
+ This package contains basic i2c support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, md-modules-4.9.0-3-sh7751r-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: speakup-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: speakup-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: speakup modules
+ This package contains speakup modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, i2c-modules-4.9.0-3-sh7751r-di, firewire-core-modules-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di, crc-modules-4.9.0-3-sh7751r-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-sh7751r-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-sh7751r-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7751r
+Package-Type: udeb
+
+Package: kernel-image-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: kernel-image, event-modules, fb-modules, input-modules, mouse-modules, nic-shared-modules, rtc-modules, uinput-modules, usb-modules
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: usb-serial-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: optional
+Provides: usb-serial-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, zlib-modules-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, isofs-modules-4.9.0-3-sh7785lcr-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: firewire-core-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: firewire-core-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: loop-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: loop-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di, zlib-modules-4.9.0-3-sh7785lcr-di, md-modules-4.9.0-3-sh7785lcr-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: minix-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: minix-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: Minix filesystem support
+ This package contains the Minix filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, md-modules-4.9.0-3-sh7785lcr-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: nic-usb-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: nic-usb-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, md-modules-4.9.0-3-sh7785lcr-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: speakup-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: speakup-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: speakup modules
+ This package contains speakup modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: sound-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: sound-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, firewire-core-modules-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: sound support
+ This package contains sound modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di, crc-modules-4.9.0-3-sh7785lcr-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-sh7785lcr-di
+Architecture: sh4
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-sh7785lcr-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sh7785lcr
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-sh7751r
+Architecture: sh4
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [sh4] | linux-initramfs-tool [sh4]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for sh7751r
+ The Linux kernel 4.9 and modules for use on Renesas SH7751R R2D plus
+ board.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-sh7751r
+Architecture: sh4
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-sh7751r
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-sh7751r, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-sh7751r, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-sh7751r package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-sh7751r-dbg
+Architecture: sh4
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-sh7751r
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-sh7751r.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-sh7785lcr
+Architecture: sh4
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [sh4] | linux-initramfs-tool [sh4]
+Recommends: firmware-linux-free, ${kernel:Recommends}, u-boot-tools [sh4]
+Suggests: linux-doc-4.9, debian-kernel-handbook
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for sh7785lcr
+ The Linux kernel 4.9 and modules for use on Renesas SH7785 reference
+ board.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-sh7785lcr
+Architecture: sh4
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-sh7785lcr
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-sh7785lcr, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-sh7785lcr, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-sh7785lcr package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-sh7785lcr-dbg
+Architecture: sh4
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-sh7785lcr
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-sh7785lcr.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-all-sparc64
+Architecture: sparc64
+Depends: ${misc:Depends}, linux-headers-4.9.0-3-sparc64 (= ${binary:Version}), linux-headers-4.9.0-3-sparc64-smp (= ${binary:Version})
+Description: All header files for Linux 4.9 (meta-package)
+ This package depends against all architecture-specific kernel header files
+ for Linux kernel version 4.9, generally used for building out-of-tree
+ kernel modules.
+Build-Profiles: <!stage1>
+
+Package: kernel-image-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: kernel-image
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images.  It does _not_ provide a usable kernel for your
+ full Debian system.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: nic-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: nic-modules, nic-extra-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, crc-modules-4.9.0-3-sparc64-di
+Description: Network card modules for Sparc kernels
+ This package contains the drivers for the Happy Meal/Big Mac 10/100BaseT,
+ Sun QuadEthernet and MyriCOM Gigabit Ethernet SBus devices for SPARC
+ systems, as well as various PCI NIC drivers (only on sparc64.)
+ .
+ Do not install this package on a real Debian system!  You probably want a
+ kernel-image package instead.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: ppp-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: optional
+Provides: ppp-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, zlib-modules-4.9.0-3-sparc64-di, crc-modules-4.9.0-3-sparc64-di
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: pata-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: pata-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, ata-modules-4.9.0-3-sparc64-di
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: cdrom-core-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: cdrom-core-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, scsi-core-modules-4.9.0-3-sparc64-di, isofs-modules-4.9.0-3-sparc64-di
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: scsi-core-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: scsi-core-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: scsi-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: scsi-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, scsi-core-modules-4.9.0-3-sparc64-di, cdrom-core-modules-4.9.0-3-sparc64-di, ata-modules-4.9.0-3-sparc64-di
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: btrfs-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: btrfs-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, crc-modules-4.9.0-3-sparc64-di, zlib-modules-4.9.0-3-sparc64-di, md-modules-4.9.0-3-sparc64-di
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: ext4-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: ext4-modules, ext2-modules, ext3-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, crc-modules-4.9.0-3-sparc64-di
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: isofs-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: isofs-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: jfs-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: jfs-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: ufs-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: ufs-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: UFS filesystem support
+ This package contains the UFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: xfs-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: xfs-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, crc-modules-4.9.0-3-sparc64-di
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: fat-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: fat-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: md-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: md-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, crc-modules-4.9.0-3-sparc64-di
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: multipath-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: multipath-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, md-modules-4.9.0-3-sparc64-di, scsi-core-modules-4.9.0-3-sparc64-di
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: usb-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: usb-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: USB support
+ This package contains core USB drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: usb-storage-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: usb-storage-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, scsi-core-modules-4.9.0-3-sparc64-di, usb-modules-4.9.0-3-sparc64-di
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: input-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: input-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, usb-modules-4.9.0-3-sparc64-di
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: sata-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: standard
+Provides: sata-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, scsi-core-modules-4.9.0-3-sparc64-di, ata-modules-4.9.0-3-sparc64-di
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: crc-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: crc-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: CRC modules
+ This package contains CRC support modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: crypto-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: crypto-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: crypto modules
+ This package contains crypto modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: crypto-dm-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: crypto-dm-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, md-modules-4.9.0-3-sparc64-di
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: ata-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: ata-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, scsi-core-modules-4.9.0-3-sparc64-di
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: nbd-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: nbd-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network
+ Block Device
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: squashfs-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: squashfs-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: squashfs modules
+ This package contains squashfs modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: virtio-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: virtio-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, scsi-core-modules-4.9.0-3-sparc64-di
+Description: virtio modules
+ This package contains virtio modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: zlib-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: zlib-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: zlib modules
+ This package contains zlib modules.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: udf-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: udf-modules
+Depends: kernel-image-4.9.0-3-sparc64-di, crc-modules-4.9.0-3-sparc64-di
+Description: UDF modules
+ This package contains the UDF filesystem module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: fuse-modules-4.9.0-3-sparc64-di
+Architecture: sparc64
+Section: debian-installer
+Priority: extra
+Provides: fuse-modules
+Depends: kernel-image-4.9.0-3-sparc64-di
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+Build-Profiles: <!stage1>
+Kernel-Version: 4.9.0-3-sparc64
+Package-Type: udeb
+
+Package: linux-image-4.9.0-3-sparc64
+Architecture: sparc64
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [sparc64] | linux-initramfs-tool [sparc64]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, silo [sparc64], fdutils [sparc64]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for uniprocessor 64-bit UltraSPARC
+ The Linux kernel 4.9 and modules for use on uniprocessor 64-bit
+ UltraSPARC.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-sparc64
+Architecture: sparc64
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-sparc64
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-sparc64, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-sparc64, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-sparc64 package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-sparc64-dbg
+Architecture: sparc64
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-sparc64
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-sparc64.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-sparc64-smp
+Architecture: sparc64
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}, initramfs-tools (>= 0.120+deb8u2) [sparc64] | linux-initramfs-tool [sparc64]
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-4.9, debian-kernel-handbook, silo [sparc64], fdutils [sparc64]
+Breaks: initramfs-tools (<< 0.120+deb8u2)
+Description: Linux 4.9 for multiprocessor 64-bit UltraSPARC
+ The Linux kernel 4.9 and modules for use on multiprocessor 64-bit
+ UltraSPARC.
+Build-Profiles: <!stage1>
+
+Package: linux-headers-4.9.0-3-sparc64-smp
+Architecture: sparc64
+Depends: linux-headers-4.9.0-3-common (= ${binary:Version}), linux-kbuild-4.9, ${misc:Depends}, gcc-6
+Description: Header files for Linux 4.9.0-3-sparc64-smp
+ This package provides the architecture-specific kernel header files for
+ Linux kernel 4.9.0-3-sparc64-smp, generally used for building out-of-tree
+ kernel modules.  These files are going to be installed into
+ /usr/src/linux-headers-4.9.0-3-sparc64-smp, and can be used for building
+ modules that load into the kernel provided by the
+ linux-image-4.9.0-3-sparc64-smp package.
+Build-Profiles: <!stage1>
+
+Package: linux-image-4.9.0-3-sparc64-smp-dbg
+Architecture: sparc64
+Section: debug
+Priority: extra
+Depends: ${misc:Depends}
+Description: Debug symbols for linux-image-4.9.0-3-sparc64-smp
+ This package provides the detached debug symbols for the Linux kernel and
+ modules in linux-image-4.9.0-3-sparc64-smp.
+Build-Profiles: <!stage1>
+
+Package: linux-compiler-gcc-6-arm
+Architecture: armel armhf
+Depends: gcc-6, ${misc:Depends}
+Description: Compiler for Linux on ARM (meta-package)
+ This package depends on gcc 6 of the appropriate architecture for Linux on
+ armel and armhf.
+Build-Profiles: <!stage1>
+Multi-Arch: foreign
+
+Package: linux-compiler-gcc-6-s390
+Architecture: s390 s390x
+Depends: gcc-6, ${misc:Depends}
+Description: Compiler for Linux on IBM zSeries (meta-package)
+ This package depends on gcc 6 of the appropriate architecture for Linux on
+ s390 and s390x.
+Build-Profiles: <!stage1>
+Multi-Arch: foreign
+
+Package: linux-compiler-gcc-6-x86
+Architecture: amd64 i386 x32
+Depends: gcc-6, ${misc:Depends}
+Description: Compiler for Linux on x86 (meta-package)
+ This package depends on gcc 6 of the appropriate architecture for Linux on
+ amd64, i386 and x32.
+Build-Profiles: <!stage1>
+Multi-Arch: foreign
+
diff --git a/control.md5sum b/control.md5sum
new file mode 100644 (file)
index 0000000..c43cdd7
--- /dev/null
@@ -0,0 +1,106 @@
+d283c069b160f0834a069a23b9fc79a4  debian/bin/gencontrol.py
+a3699b988664abb1a99caed0a491474c  debian/changelog
+e492c730e8bc71cc52aa5315391e587e  debian/templates/control.main.in
+38004750aa03cea41d5d3aeafff16fcc  debian/templates/image.preinst.in
+afb508873a44a1f196c2a525fec4b415  debian/templates/image.prerm.in
+0d7f6ea42f52d0a6013535a80111ee3e  debian/templates/headers.postinst.in
+56f7b7e91f52c76cc7477f18d7351318  debian/templates/control.tools.in
+ae49ef5fe8221e8aa846a8dd8faaed0e  debian/templates/control.image.in
+a4a60fc48b3240e46bbac6a1ddcaad30  debian/templates/image.postrm.in
+8ff553ff7232b003c35bdd074913bc8a  debian/templates/control.image-unsigned.in
+650118d2a8d44fba12cd43586a40ec3d  debian/templates/control.image-dbg.in
+f73118b69c24c8014381c1bc65fc5b86  debian/templates/control.source.in
+51797b6c275eb14e99009e78553904cc  debian/templates/lintian-overrides.perf.in
+63c0d01ea032d0acfa5e069d31daa938  debian/templates/control.libc-dev.in
+1d1f3a359852289a620e328d676aad72  debian/templates/image-dbg.lintian-override.in
+46cc93799a6214c79efea8084bc9a329  debian/templates/control.headers.featureset.in
+814dda166c7e3ef02e6e259e805ac66a  debian/templates/tests-control.main.in
+0327750d6696dee915a532aec73a0fd6  debian/templates/image.postinst.in
+5fcd1fcb86826db36e024047512340c4  debian/templates/control.headers.in
+c6cea196527a033d3d3bed7c8bc141f4  debian/templates/control.extra.in
+fc3e8629682e63a1858b15d7f3df0ef9  debian/templates/control.docs.in
+5f1df5cd150d7663b81f5c54a604a766  debian/templates/control.headers.arch.in
+5b93c030a73e88590e106355115ce556  debian/config/defines
+c0f55b1ebb6d0e78559f5bb2a60268c2  debian/config/i386/defines
+6f7d102847d8168a3c71c044ea7127ac  debian/config/tilegx/defines
+6efeb6f3f8ad4ecef3fff0d012fabad0  debian/config/mips64el/defines
+8f2e4969633ff660d026f2b7e02e6336  debian/config/sh3/defines
+ff1f9b857ee6f0c977d2f8541211a9f5  debian/config/mipsr6/defines
+94ba8bbdb7fe938d1fc6c632eeef04aa  debian/config/armhf/defines
+c9cb44fd9a332a58b1278f9afd69f674  debian/config/amd64/defines
+f74b224857e0111bf2e14b124b3e2be2  debian/config/mipsr6el/defines
+12c5f99fafdfd2d3696623ba86b2cc46  debian/config/mips/defines
+3d514fbbc086aae2b520554dd995a705  debian/config/arm64/defines
+e411d2dfe0018a7c40b6bf7efd45cd29  debian/config/mipsn32/defines
+174058e52aced932bf02606d6cb5649c  debian/config/mipsn32el/defines
+366b94d652a66b437eabcd165bcc9610  debian/config/featureset-rt/defines
+8d317c1872f3bd8da4feae25a7c61df3  debian/config/sparc/defines
+e9ffe255afcab8138ebf4106c3707e44  debian/config/powerpc/defines
+91a544ce36cc1717eee3e07211633e2c  debian/config/ppc64/defines
+f4b2921156e7b1a038862f848fdfe48f  debian/config/x32/defines
+c8677acd57ee1da9d592d7e1ce7ac3d7  debian/config/mips64/defines
+788bca75e2379d4c6a5f937db95cf8dc  debian/config/sparc64/defines
+e893f7044a89425752b95b8c997938e9  debian/config/mipsel/defines
+2d093d5d5d6dd1e2b27d717678cb9ece  debian/config/sh4/defines
+0162bb2f03eb0a881253e9abe9df16a3  debian/config/hppa/defines
+92c952083bf0523c5cdffe9f2e7dd300  debian/config/powerpcspe/defines
+2776c7338272b480295da18b47b08a7d  debian/config/m68k/defines
+95afd8c730829f00f334595dd678639b  debian/config/s390x/defines
+882fb0fec3cbd0239817994223fa71e5  debian/config/mipsn32r6/defines
+4069594eeb2a1856c6806812055249b2  debian/config/alpha/defines
+73e2f095b2485f95bc164bf685684a47  debian/config/mipsn32r6el/defines
+4987bf8df1bf042f19fdec4da87aa1d4  debian/config/ppc64el/defines
+7dea833991a13b2df067bd6941ee96a1  debian/config/armel/defines
+98673c303524a87722b25c9e6b8cdd81  debian/config/mips64r6/defines
+8f8f7ed35c8dafdc5c6d4ded40bf5920  debian/config/mips64r6el/defines
+9462622a41b618007bf9e8343f2fb3ce  debian/config/s390/defines
+f4c0f31783984e0a9a5b7091200b80fc  debian/config/i386/none/defines
+7146ff53fc4f9fbb49948225d8589b69  debian/config/i386/rt/defines
+c0e5f329e129383e456f94d987cf3ab0  debian/config/amd64/none/defines
+7dc981827930ed6844a731ed954b9b9d  debian/config/amd64/rt/defines
+d3c04182d8746e4871de922a63f03f97  debian/config/arm64/none/defines
+a1f1e1c8213e10fb3a416d58fb61bc3c  debian/installer/i386/kernel-versions
+a38b614c64d74861e6c844adfd7fc935  debian/installer/ppc64el/kernel-versions
+8b2032899d26c7029402cc5f3a68280d  debian/installer/mips64el/kernel-versions
+2c18144b7fbfd950ec1a305728e1e003  debian/installer/mipsr6/kernel-versions
+3217c84b23f44f3fecb41d132f310ade  debian/installer/armhf/kernel-versions
+7ecaa8334419297fe6715afadae794c6  debian/installer/amd64/kernel-versions
+b2f2f5b2d18a383b6b5e1961fbf8aeb1  debian/installer/mipsr6el/kernel-versions
+00a8913a1998e0a7083495be7a9622f7  debian/installer/mips/kernel-versions
+cc12b5c69d0930a4400e9ec072d9f915  debian/installer/arm64/kernel-versions
+42aaaa53f3ecb95030e1a33654db6f8e  debian/installer/powerpc/kernel-versions
+0cb3424304d9602f321919da020eef8c  debian/installer/ppc64/kernel-versions
+18d013f76c11803b03d2ea610cc201c9  debian/installer/mips64/kernel-versions
+61a070b81f93d4c9e955dc90587702f3  debian/installer/sparc64/kernel-versions
+0e06b9acdcb4cd8dc06985dd49bdde05  debian/installer/mipsel/kernel-versions
+49f36561dee0396410815d4e92beb01e  debian/installer/sh4/kernel-versions
+37c326d05ccb673603146e59a23cdda9  debian/installer/m68k/kernel-versions
+f8348b90fe2b9e1e75bddda4dbb832c4  debian/installer/s390x/kernel-versions
+1306c7e5b695c185d3193774b566e9e8  debian/installer/alpha/kernel-versions
+8512485f3a856fe5225fa9c74ea32d5a  debian/installer/hppa/kernel-versions
+de8f39f8b1f1f8a34db1ca2920796b0d  debian/installer/armel/kernel-versions
+bb7aa9ad2c62b074f1c2258a02c5d76c  debian/installer/mips64r6/kernel-versions
+35e1ed0ef705c3d60069ac8f13af000d  debian/installer/mips64r6el/kernel-versions
+a7421d0f16ac8a0fb443591062293101  debian/installer/i386/package-list
+8b7d23c8cd92a63434be9319b47d23e9  debian/installer/ppc64el/package-list
+2bfc44ae55c0c1d5676946c71d1f07f4  debian/installer/mips64el/package-list
+0fc827f651bf58416e4e2231b01f6908  debian/installer/mipsr6/package-list
+d09d2db2d7b84bf6a421c8e5b709a346  debian/installer/armhf/package-list
+85882269667af235595b7b4b744e9ecb  debian/installer/amd64/package-list
+0fc827f651bf58416e4e2231b01f6908  debian/installer/mipsr6el/package-list
+0fc827f651bf58416e4e2231b01f6908  debian/installer/mips/package-list
+9e2b11d9b288c0400e77b23245fd0ef0  debian/installer/arm64/package-list
+8b7d23c8cd92a63434be9319b47d23e9  debian/installer/powerpc/package-list
+8b7d23c8cd92a63434be9319b47d23e9  debian/installer/ppc64/package-list
+0fc827f651bf58416e4e2231b01f6908  debian/installer/mips64/package-list
+b9df39e550a637012ccd5b1ddaa4b74a  debian/installer/sparc64/package-list
+2bfc44ae55c0c1d5676946c71d1f07f4  debian/installer/mipsel/package-list
+829a090aa9cb3a272daf6b77006c6519  debian/installer/sh4/package-list
+d243c37c6930b5d5f646e8b55b317376  debian/installer/m68k/package-list
+4c1bf26b971d89864682040568fa388e  debian/installer/s390x/package-list
+7f3b9396be74d9a40cfb6db48847a5dc  debian/installer/alpha/package-list
+42f64d483c9033b8af2bf2761a4a62fc  debian/installer/hppa/package-list
+2cbb54dee5b4512d847c67b20bb35caa  debian/installer/armel/package-list
+0fc827f651bf58416e4e2231b01f6908  debian/installer/mips64r6/package-list
+0fc827f651bf58416e4e2231b01f6908  debian/installer/mips64r6el/package-list
+468b1d31cbbb979a4586d7d991aafb9a  debian/installer/package-list
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..c3ad490
--- /dev/null
+++ b/copyright
@@ -0,0 +1,164 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: Linux kernel
+Source: http://ftp.kernel.org/pub/linux/kernel/
+Comment:
+ 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.
+
+Files: *
+Copyright: 1991-2012 Linus Torvalds and many others
+License: GPL-2
+
+Files: debian/*
+Copyright: 1996-2006 Manoj Srivastava
+           2005-2012 Debian kernel team
+License: GPL-2
+
+Files: debian/rules.d/tools/hv/check-hyperv.c
+Copyright: 2011 Lennart Poettering
+License: LGPL-2.1
+
+Files: drivers/crypto/vmx/*.pl
+Copyright: 2006,2014 Andy Polyakov <appro@openssl.org>
+License: CRYPTOGAMS
+ All rights reserved.
+ .
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ * Redistributions of source code must retain copyright notices, this
+   list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+ * Neither the name of the CRYPTOGAMS nor the names of its copyright
+   holder and contributors may be used to endorse or promote products
+   derived from this software without specific prior written
+   permission.
+ .
+ ALTERNATIVELY, provided that this notice is retained in full, this
+ product may be distributed under the terms of the GNU General Public
+ License (GPL), in which case the provisions of the GPL apply INSTEAD
+ OF those given above.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Files: fs/nls/mac-*
+Copyright: 1991-2012 Unicode, Inc.
+License: Unicode-data
+ All rights reserved.  Distributed under the Terms of Use in
+ http://www.unicode.org/copyright.html.
+ .
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of the Unicode data files and any associated documentation (the "Data
+ Files") or Unicode software and any associated documentation (the
+ "Software") to deal in the Data Files or Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, and/or sell copies of the Data Files or Software, and
+ to permit persons to whom the Data Files or Software are furnished to do
+ so, provided that (a) the above copyright notice(s) and this permission
+ notice appear with all copies of the Data Files or Software, (b) both the
+ above copyright notice(s) and this permission notice appear in associated
+ documentation, and (c) there is clear notice in each modified Data File or
+ in the Software as well as in the documentation associated with the Data
+ File(s) or Software that the data or software has been modified.
+ .
+ THE DATA FILES AND SOFTWARE ARE 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 OF
+ THIRD PARTY RIGHTS.  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
+ INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
+ OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+ .
+ Except as contained in this notice, the name of a copyright holder shall
+ not be used in advertising or otherwise to promote the sale, use or other
+ dealings in these Data Files or Software without prior written
+ authorization of the copyright holder.
+
+Files: include/xen/interface/*
+Copyright: 2002-2006 Keir Fraser
+           2004 Tim Deegan
+           2004 Andrew Warfield
+           2005 Nguyen Anh Quynh
+           2005-2006 IBM Corporation
+           2005 Anthony Liguori
+           2005 Rusty Russell
+           2005-2006 XenSource Ltd.
+           2006 Ian Campbell
+           2006 Red Hat, Inc.
+           2010 Ryan Wilson
+License: Xen-interface
+ 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.
+
+Files: scripts/extract-cert.c scripts/sign-file.c
+Copyright: 2014-2015 Red Hat, Inc.
+           2015 Intel Corporation
+License: LGPL-2.1
+
+License: GPL-2
+ 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: LGPL-2.1
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 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
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU Lesser General Public
+ License version 2.1 can be found in `/usr/share/common-licenses/LGPL-2.1'.
diff --git a/hyperv-daemons.README.Debian b/hyperv-daemons.README.Debian
new file mode 100644 (file)
index 0000000..8fff2af
--- /dev/null
@@ -0,0 +1,14 @@
+hyperv-daemon for Debian
+------------------------
+
+ If you want to change screen resolution on Linux guest, 
+ plese update kernel parameter.
+
+  1. edit /etc/default/grub file
+     - add 'video=hyperv_fb:"horizontal"x"vertical"' to 
+       'GRUB_CMDLINE_LINUX_DEFAULT=' or 'GRUB_CMDLINE_LINUX=' line
+        (e.g. GRUB_CMDLINE_LINUX=video=hyperv_fb:1280x1024)
+  2. then, exec update-grub
+  3. reboot Linux guest
+
+ -- Hideki Yamane <henrich@debian.org>  Thu, 28 May 2015 10:23:52 +0900
diff --git a/hyperv-daemons.hv-fcopy-daemon.init b/hyperv-daemons.hv-fcopy-daemon.init
new file mode 100755 (executable)
index 0000000..24d944d
--- /dev/null
@@ -0,0 +1,110 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          hyperv-daemons.hv-fcopy-daemon
+# Required-Start:    $remote_fs $syslog
+# Required-Stop:     $remote_fs $syslog
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Hyper-V file copy service (FCOPY) daemon
+### END INIT INFO
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="Hyper-V file copy service (FCOPY) daemon"
+NAME=hv_fcopy_daemon
+DAEMON=/usr/sbin/$NAME
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/hyperv-daemons.hv-fcopy-daemon
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Exit if we are not running under Hyper-V or the kernel device does not exist
+/lib/hyperv-daemons/check-hyperv || exit 0
+[ -e "/dev/vmbus/hv_fcopy" ] || exit 0
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+       # Return
+       #   0 if daemon has been started
+       #   1 if daemon was already running
+       #   2 if daemon could not be started
+       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+               || return 1
+       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile -- -n \
+               || return 2
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+       # Return
+       #   0 if daemon has been stopped
+       #   1 if daemon was already stopped
+       #   2 if daemon could not be stopped
+       #   other if a failure occurred
+       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+       [ "$?" = 2 ] && return 2
+       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+       RETVAL=$?
+       [ "$RETVAL" = 2 ] && return 2
+       # Many daemons don't delete their pidfiles when they exit.
+       rm -f $PIDFILE
+       return "$RETVAL"
+}
+
+case "$1" in
+  start)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+       do_start
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  stop)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+       do_stop
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  status)
+       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+       ;;
+  restart|force-reload)
+       log_daemon_msg "Restarting $DESC" "$NAME"
+       do_stop
+       case "$?" in
+         0|1)
+               do_start
+               case "$?" in
+                       0) log_end_msg 0 ;;
+                       1) log_end_msg 1 ;; # Old process is still running
+                       *) log_end_msg 1 ;; # Failed to start
+               esac
+               ;;
+         *)
+               # Failed to stop
+               log_end_msg 1
+               ;;
+       esac
+       ;;
+  *)
+       echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+       exit 3
+       ;;
+esac
+
+:
diff --git a/hyperv-daemons.hv-fcopy-daemon.service b/hyperv-daemons.hv-fcopy-daemon.service
new file mode 100644 (file)
index 0000000..6aec2b3
--- /dev/null
@@ -0,0 +1,10 @@
+[Unit]
+Description=Hyper-V file copy service (FCOPY) daemon
+ConditionVirtualization=microsoft
+ConditionPathExists=/dev/vmbus/hv_fcopy
+
+[Service]
+ExecStart=/usr/sbin/hv_fcopy_daemon -n
+
+[Install]
+WantedBy=multi-user.target
diff --git a/hyperv-daemons.hv-kvp-daemon.init b/hyperv-daemons.hv-kvp-daemon.init
new file mode 100755 (executable)
index 0000000..e5908ec
--- /dev/null
@@ -0,0 +1,109 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          hyperv-daemons.hv-kvp-daemon
+# Required-Start:    $remote_fs $syslog
+# Required-Stop:     $remote_fs $syslog
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Hyper-V key-value pair (KVP) daemon
+### END INIT INFO
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="Hyper-V key-value pair (KVP) daemon"
+NAME=hv_kvp_daemon
+DAEMON=/usr/sbin/$NAME
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/hyperv-daemons.hv-kvp-daemon
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Exit if we are not running under Hyper-V
+/lib/hyperv-daemons/check-hyperv || exit 0
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+       # Return
+       #   0 if daemon has been started
+       #   1 if daemon was already running
+       #   2 if daemon could not be started
+       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+               || return 1
+       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile -- -n \
+               || return 2
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+       # Return
+       #   0 if daemon has been stopped
+       #   1 if daemon was already stopped
+       #   2 if daemon could not be stopped
+       #   other if a failure occurred
+       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+       [ "$?" = 2 ] && return 2
+       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+       RETVAL=$?
+       [ "$RETVAL" = 2 ] && return 2
+       # Many daemons don't delete their pidfiles when they exit.
+       rm -f $PIDFILE
+       return "$RETVAL"
+}
+
+case "$1" in
+  start)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+       do_start
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  stop)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+       do_stop
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  status)
+       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+       ;;
+  restart|force-reload)
+       log_daemon_msg "Restarting $DESC" "$NAME"
+       do_stop
+       case "$?" in
+         0|1)
+               do_start
+               case "$?" in
+                       0) log_end_msg 0 ;;
+                       1) log_end_msg 1 ;; # Old process is still running
+                       *) log_end_msg 1 ;; # Failed to start
+               esac
+               ;;
+         *)
+               # Failed to stop
+               log_end_msg 1
+               ;;
+       esac
+       ;;
+  *)
+       echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+       exit 3
+       ;;
+esac
+
+:
diff --git a/hyperv-daemons.hv-kvp-daemon.service b/hyperv-daemons.hv-kvp-daemon.service
new file mode 100644 (file)
index 0000000..f6f6f0d
--- /dev/null
@@ -0,0 +1,9 @@
+[Unit]
+Description=Hyper-V key-value pair (KVP) daemon
+ConditionVirtualization=microsoft
+
+[Service]
+ExecStart=/usr/sbin/hv_kvp_daemon -n
+
+[Install]
+WantedBy=multi-user.target
diff --git a/hyperv-daemons.hv-vss-daemon.init b/hyperv-daemons.hv-vss-daemon.init
new file mode 100755 (executable)
index 0000000..aff28fc
--- /dev/null
@@ -0,0 +1,109 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          hyperv-daemons.hv-vss-daemon
+# Required-Start:    $remote_fs $syslog
+# Required-Stop:     $remote_fs $syslog
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Hyper-V volume shadow copy service (VSS) daemon
+### END INIT INFO
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="Hyper-V volume shadow copy service (VSS) daemon"
+NAME=hv_vss_daemon
+DAEMON=/usr/sbin/$NAME
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/hyperv-daemons.hv-vss-daemon
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Exit if we are not running under Hyper-V
+/lib/hyperv-daemons/check-hyperv || exit 0
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+       # Return
+       #   0 if daemon has been started
+       #   1 if daemon was already running
+       #   2 if daemon could not be started
+       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+               || return 1
+       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile -- -n \
+               || return 2
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+       # Return
+       #   0 if daemon has been stopped
+       #   1 if daemon was already stopped
+       #   2 if daemon could not be stopped
+       #   other if a failure occurred
+       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+       [ "$?" = 2 ] && return 2
+       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+       RETVAL=$?
+       [ "$RETVAL" = 2 ] && return 2
+       # Many daemons don't delete their pidfiles when they exit.
+       rm -f $PIDFILE
+       return "$RETVAL"
+}
+
+case "$1" in
+  start)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+       do_start
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  stop)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+       do_stop
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  status)
+       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+       ;;
+  restart|force-reload)
+       log_daemon_msg "Restarting $DESC" "$NAME"
+       do_stop
+       case "$?" in
+         0|1)
+               do_start
+               case "$?" in
+                       0) log_end_msg 0 ;;
+                       1) log_end_msg 1 ;; # Old process is still running
+                       *) log_end_msg 1 ;; # Failed to start
+               esac
+               ;;
+         *)
+               # Failed to stop
+               log_end_msg 1
+               ;;
+       esac
+       ;;
+  *)
+       echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+       exit 3
+       ;;
+esac
+
+:
diff --git a/hyperv-daemons.hv-vss-daemon.service b/hyperv-daemons.hv-vss-daemon.service
new file mode 100644 (file)
index 0000000..3e6534d
--- /dev/null
@@ -0,0 +1,9 @@
+[Unit]
+Description=Hyper-V volume shadow copy service (VSS) daemon
+ConditionVirtualization=microsoft
+
+[Service]
+ExecStart=/usr/sbin/hv_vss_daemon -n
+
+[Install]
+WantedBy=multi-user.target
diff --git a/hyperv-daemons.install b/hyperv-daemons.install
new file mode 100644 (file)
index 0000000..2c00a4a
--- /dev/null
@@ -0,0 +1 @@
+debian/hyperv-daemons.*.service        lib/systemd/system/
diff --git a/installer/alpha/kernel-versions b/installer/alpha/kernel-versions
new file mode 100644 (file)
index 0000000..1a479fb
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour            installedname suffix build-depends
+alpha  -       alpha-generic      -             y      -
diff --git a/installer/alpha/modules/alpha-generic/ata-modules b/installer/alpha/modules/alpha-generic/ata-modules
new file mode 100644 (file)
index 0000000..b81c0f3
--- /dev/null
@@ -0,0 +1 @@
+#include <ata-modules>
diff --git a/installer/alpha/modules/alpha-generic/btrfs-modules b/installer/alpha/modules/alpha-generic/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/alpha/modules/alpha-generic/cdrom-core-modules b/installer/alpha/modules/alpha-generic/cdrom-core-modules
new file mode 100644 (file)
index 0000000..3ff69b4
--- /dev/null
@@ -0,0 +1 @@
+#include <cdrom-core-modules>
diff --git a/installer/alpha/modules/alpha-generic/crc-modules b/installer/alpha/modules/alpha-generic/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/alpha/modules/alpha-generic/crypto-dm-modules b/installer/alpha/modules/alpha-generic/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/alpha/modules/alpha-generic/crypto-modules b/installer/alpha/modules/alpha-generic/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/alpha/modules/alpha-generic/event-modules b/installer/alpha/modules/alpha-generic/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/alpha/modules/alpha-generic/ext4-modules b/installer/alpha/modules/alpha-generic/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/alpha/modules/alpha-generic/fat-modules b/installer/alpha/modules/alpha-generic/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/alpha/modules/alpha-generic/fb-modules b/installer/alpha/modules/alpha-generic/fb-modules
new file mode 100644 (file)
index 0000000..11d5497
--- /dev/null
@@ -0,0 +1,4 @@
+fbcon ?
+lxfb ?
+vesafb ?
+vga16fb ?
diff --git a/installer/alpha/modules/alpha-generic/fuse-modules b/installer/alpha/modules/alpha-generic/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/alpha/modules/alpha-generic/input-modules b/installer/alpha/modules/alpha-generic/input-modules
new file mode 100644 (file)
index 0000000..5ecb595
--- /dev/null
@@ -0,0 +1 @@
+#include <input-modules>
diff --git a/installer/alpha/modules/alpha-generic/isofs-modules b/installer/alpha/modules/alpha-generic/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/alpha/modules/alpha-generic/jfs-modules b/installer/alpha/modules/alpha-generic/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/alpha/modules/alpha-generic/kernel-image b/installer/alpha/modules/alpha-generic/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/alpha/modules/alpha-generic/loop-modules b/installer/alpha/modules/alpha-generic/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/alpha/modules/alpha-generic/md-modules b/installer/alpha/modules/alpha-generic/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/alpha/modules/alpha-generic/mouse-modules b/installer/alpha/modules/alpha-generic/mouse-modules
new file mode 100644 (file)
index 0000000..15fcb00
--- /dev/null
@@ -0,0 +1 @@
+#include <mouse-modules>
diff --git a/installer/alpha/modules/alpha-generic/multipath-modules b/installer/alpha/modules/alpha-generic/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/alpha/modules/alpha-generic/nbd-modules b/installer/alpha/modules/alpha-generic/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/alpha/modules/alpha-generic/nic-modules b/installer/alpha/modules/alpha-generic/nic-modules
new file mode 100644 (file)
index 0000000..2512e83
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-modules>
diff --git a/installer/alpha/modules/alpha-generic/nic-pcmcia-modules b/installer/alpha/modules/alpha-generic/nic-pcmcia-modules
new file mode 100644 (file)
index 0000000..7a0702c
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-pcmcia-modules>
diff --git a/installer/alpha/modules/alpha-generic/nic-shared-modules b/installer/alpha/modules/alpha-generic/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/alpha/modules/alpha-generic/nic-usb-modules b/installer/alpha/modules/alpha-generic/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/alpha/modules/alpha-generic/nic-wireless-modules b/installer/alpha/modules/alpha-generic/nic-wireless-modules
new file mode 100644 (file)
index 0000000..53fd18d
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-wireless-modules>
diff --git a/installer/alpha/modules/alpha-generic/pata-modules b/installer/alpha/modules/alpha-generic/pata-modules
new file mode 100644 (file)
index 0000000..b0cd633
--- /dev/null
@@ -0,0 +1 @@
+#include <pata-modules>
diff --git a/installer/alpha/modules/alpha-generic/pcmcia-modules b/installer/alpha/modules/alpha-generic/pcmcia-modules
new file mode 100644 (file)
index 0000000..2bb5350
--- /dev/null
@@ -0,0 +1 @@
+#include <pcmcia-modules>
diff --git a/installer/alpha/modules/alpha-generic/ppp-modules b/installer/alpha/modules/alpha-generic/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/alpha/modules/alpha-generic/sata-modules b/installer/alpha/modules/alpha-generic/sata-modules
new file mode 100644 (file)
index 0000000..01318c2
--- /dev/null
@@ -0,0 +1 @@
+#include <sata-modules>
diff --git a/installer/alpha/modules/alpha-generic/scsi-core-modules b/installer/alpha/modules/alpha-generic/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/alpha/modules/alpha-generic/scsi-modules b/installer/alpha/modules/alpha-generic/scsi-modules
new file mode 100644 (file)
index 0000000..8909dfb
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-modules>
diff --git a/installer/alpha/modules/alpha-generic/serial-modules b/installer/alpha/modules/alpha-generic/serial-modules
new file mode 100644 (file)
index 0000000..6ab8b8c
--- /dev/null
@@ -0,0 +1 @@
+#include <serial-modules>
diff --git a/installer/alpha/modules/alpha-generic/squashfs-modules b/installer/alpha/modules/alpha-generic/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/alpha/modules/alpha-generic/srm-modules b/installer/alpha/modules/alpha-generic/srm-modules
new file mode 100644 (file)
index 0000000..0160119
--- /dev/null
@@ -0,0 +1 @@
+srm_env
diff --git a/installer/alpha/modules/alpha-generic/usb-modules b/installer/alpha/modules/alpha-generic/usb-modules
new file mode 100644 (file)
index 0000000..c598ded
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-modules>
diff --git a/installer/alpha/modules/alpha-generic/usb-serial-modules b/installer/alpha/modules/alpha-generic/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/alpha/modules/alpha-generic/usb-storage-modules b/installer/alpha/modules/alpha-generic/usb-storage-modules
new file mode 100644 (file)
index 0000000..8c5e81b
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-storage-modules>
diff --git a/installer/alpha/modules/alpha-generic/virtio-modules b/installer/alpha/modules/alpha-generic/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/alpha/modules/alpha-generic/xfs-modules b/installer/alpha/modules/alpha-generic/xfs-modules
new file mode 100644 (file)
index 0000000..98374e2
--- /dev/null
@@ -0,0 +1 @@
+#include <xfs-modules>
diff --git a/installer/alpha/modules/alpha-generic/zlib-modules b/installer/alpha/modules/alpha-generic/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/alpha/package-list b/installer/alpha/package-list
new file mode 100644 (file)
index 0000000..d333207
--- /dev/null
@@ -0,0 +1,22 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+
+Package: usb-storage-modules
+Depends: kernel-image, scsi-modules, usb-modules
+
+Package: pata-modules
+Depends: kernel-image, ata-modules, scsi-core-modules
+
+Package: fb-modules
+Depends: kernel-image, i2c-modules
+
+Package: srm-modules
+Depends: kernel-image
+Priority: standard
+Description: SRM modules
+ This package contains the srm_env module which provides access to the SRM
+ environment.
diff --git a/installer/amd64/TODO b/installer/amd64/TODO
new file mode 100644 (file)
index 0000000..d02dd6c
--- /dev/null
@@ -0,0 +1,3 @@
+* The 2.6 kernel is missing a lot of modules, need to get a list of all
+  modules included in the udebs, and compare vs. the full module list and
+  add missing stuff.
diff --git a/installer/amd64/kernel-versions b/installer/amd64/kernel-versions
new file mode 100644 (file)
index 0000000..1700a94
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour installedname suffix build-depends
+amd64  -       amd64   -             -      -
diff --git a/installer/amd64/modules/amd64/acpi-modules b/installer/amd64/modules/amd64/acpi-modules
new file mode 100644 (file)
index 0000000..307528f
--- /dev/null
@@ -0,0 +1,2 @@
+#include <acpi-modules>
+
diff --git a/installer/amd64/modules/amd64/ata-modules b/installer/amd64/modules/amd64/ata-modules
new file mode 100644 (file)
index 0000000..9409e7c
--- /dev/null
@@ -0,0 +1,2 @@
+#include <ata-modules>
+
diff --git a/installer/amd64/modules/amd64/btrfs-modules b/installer/amd64/modules/amd64/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/amd64/modules/amd64/cdrom-core-modules b/installer/amd64/modules/amd64/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/amd64/modules/amd64/crc-modules b/installer/amd64/modules/amd64/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/amd64/modules/amd64/crypto-dm-modules b/installer/amd64/modules/amd64/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/amd64/modules/amd64/crypto-modules b/installer/amd64/modules/amd64/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/amd64/modules/amd64/efi-modules b/installer/amd64/modules/amd64/efi-modules
new file mode 100644 (file)
index 0000000..e1dc05e
--- /dev/null
@@ -0,0 +1 @@
+#include <efi-modules>
diff --git a/installer/amd64/modules/amd64/event-modules b/installer/amd64/modules/amd64/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/amd64/modules/amd64/ext4-modules b/installer/amd64/modules/amd64/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/amd64/modules/amd64/fat-modules b/installer/amd64/modules/amd64/fat-modules
new file mode 100644 (file)
index 0000000..cce8fd3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <fat-modules>
+
diff --git a/installer/amd64/modules/amd64/fb-modules b/installer/amd64/modules/amd64/fb-modules
new file mode 100644 (file)
index 0000000..1601467
--- /dev/null
@@ -0,0 +1,3 @@
+fbcon ?
+vesafb ?
+vga16fb
diff --git a/installer/amd64/modules/amd64/firewire-core-modules b/installer/amd64/modules/amd64/firewire-core-modules
new file mode 100644 (file)
index 0000000..dcac80a
--- /dev/null
@@ -0,0 +1 @@
+#include <firewire-core-modules>
diff --git a/installer/amd64/modules/amd64/fuse-modules b/installer/amd64/modules/amd64/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/amd64/modules/amd64/hyperv-modules b/installer/amd64/modules/amd64/hyperv-modules
new file mode 100644 (file)
index 0000000..69fdd5d
--- /dev/null
@@ -0,0 +1 @@
+#include <hyperv-modules>
diff --git a/installer/amd64/modules/amd64/i2c-modules b/installer/amd64/modules/amd64/i2c-modules
new file mode 100644 (file)
index 0000000..203a607
--- /dev/null
@@ -0,0 +1 @@
+#include <i2c-modules>
diff --git a/installer/amd64/modules/amd64/input-modules b/installer/amd64/modules/amd64/input-modules
new file mode 100644 (file)
index 0000000..5ecb595
--- /dev/null
@@ -0,0 +1 @@
+#include <input-modules>
diff --git a/installer/amd64/modules/amd64/isofs-modules b/installer/amd64/modules/amd64/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/amd64/modules/amd64/jfs-modules b/installer/amd64/modules/amd64/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/amd64/modules/amd64/kernel-image b/installer/amd64/modules/amd64/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/amd64/modules/amd64/loop-modules b/installer/amd64/modules/amd64/loop-modules
new file mode 100644 (file)
index 0000000..1644677
--- /dev/null
@@ -0,0 +1,2 @@
+#include <loop-modules>
+
diff --git a/installer/amd64/modules/amd64/md-modules b/installer/amd64/modules/amd64/md-modules
new file mode 100644 (file)
index 0000000..ade088d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <md-modules>
+
diff --git a/installer/amd64/modules/amd64/mmc-core-modules b/installer/amd64/modules/amd64/mmc-core-modules
new file mode 100644 (file)
index 0000000..7bf3846
--- /dev/null
@@ -0,0 +1 @@
+#include <mmc-core-modules>
diff --git a/installer/amd64/modules/amd64/mmc-modules b/installer/amd64/modules/amd64/mmc-modules
new file mode 100644 (file)
index 0000000..dadfd53
--- /dev/null
@@ -0,0 +1 @@
+#include <mmc-modules>
diff --git a/installer/amd64/modules/amd64/mouse-modules b/installer/amd64/modules/amd64/mouse-modules
new file mode 100644 (file)
index 0000000..15fcb00
--- /dev/null
@@ -0,0 +1 @@
+#include <mouse-modules>
diff --git a/installer/amd64/modules/amd64/multipath-modules b/installer/amd64/modules/amd64/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/amd64/modules/amd64/nbd-modules b/installer/amd64/modules/amd64/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/amd64/modules/amd64/nic-modules b/installer/amd64/modules/amd64/nic-modules
new file mode 100644 (file)
index 0000000..2512e83
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-modules>
diff --git a/installer/amd64/modules/amd64/nic-pcmcia-modules b/installer/amd64/modules/amd64/nic-pcmcia-modules
new file mode 100644 (file)
index 0000000..7a0702c
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-pcmcia-modules>
diff --git a/installer/amd64/modules/amd64/nic-shared-modules b/installer/amd64/modules/amd64/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/amd64/modules/amd64/nic-usb-modules b/installer/amd64/modules/amd64/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/amd64/modules/amd64/nic-wireless-modules b/installer/amd64/modules/amd64/nic-wireless-modules
new file mode 100644 (file)
index 0000000..53fd18d
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-wireless-modules>
diff --git a/installer/amd64/modules/amd64/ntfs-modules b/installer/amd64/modules/amd64/ntfs-modules
new file mode 100644 (file)
index 0000000..ac1bc6a
--- /dev/null
@@ -0,0 +1 @@
+ntfs
diff --git a/installer/amd64/modules/amd64/pata-modules b/installer/amd64/modules/amd64/pata-modules
new file mode 100644 (file)
index 0000000..8c4e514
--- /dev/null
@@ -0,0 +1,2 @@
+#include <pata-modules>
+
diff --git a/installer/amd64/modules/amd64/pcmcia-modules b/installer/amd64/modules/amd64/pcmcia-modules
new file mode 100644 (file)
index 0000000..2bb5350
--- /dev/null
@@ -0,0 +1 @@
+#include <pcmcia-modules>
diff --git a/installer/amd64/modules/amd64/pcmcia-storage-modules b/installer/amd64/modules/amd64/pcmcia-storage-modules
new file mode 100644 (file)
index 0000000..f73ae5b
--- /dev/null
@@ -0,0 +1 @@
+#include <pcmcia-storage-modules>
diff --git a/installer/amd64/modules/amd64/ppp-modules b/installer/amd64/modules/amd64/ppp-modules
new file mode 100644 (file)
index 0000000..f1ae9b3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <ppp-modules>
+
diff --git a/installer/amd64/modules/amd64/sata-modules b/installer/amd64/modules/amd64/sata-modules
new file mode 100644 (file)
index 0000000..01318c2
--- /dev/null
@@ -0,0 +1 @@
+#include <sata-modules>
diff --git a/installer/amd64/modules/amd64/scsi-core-modules b/installer/amd64/modules/amd64/scsi-core-modules
new file mode 100644 (file)
index 0000000..778a022
--- /dev/null
@@ -0,0 +1,4 @@
+#include <scsi-core-modules>
+
+# Needed by hv_storvsc in hyperv-modules as well as scsi-modules
+scsi_transport_fc
diff --git a/installer/amd64/modules/amd64/scsi-modules b/installer/amd64/modules/amd64/scsi-modules
new file mode 100644 (file)
index 0000000..8909dfb
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-modules>
diff --git a/installer/amd64/modules/amd64/serial-modules b/installer/amd64/modules/amd64/serial-modules
new file mode 100644 (file)
index 0000000..6ab8b8c
--- /dev/null
@@ -0,0 +1 @@
+#include <serial-modules>
diff --git a/installer/amd64/modules/amd64/sound-modules b/installer/amd64/modules/amd64/sound-modules
new file mode 100644 (file)
index 0000000..68395ab
--- /dev/null
@@ -0,0 +1 @@
+#include <sound-modules>
diff --git a/installer/amd64/modules/amd64/speakup-modules b/installer/amd64/modules/amd64/speakup-modules
new file mode 100644 (file)
index 0000000..2959272
--- /dev/null
@@ -0,0 +1 @@
+#include <speakup-modules>
diff --git a/installer/amd64/modules/amd64/squashfs-modules b/installer/amd64/modules/amd64/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/amd64/modules/amd64/udf-modules b/installer/amd64/modules/amd64/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/amd64/modules/amd64/uinput-modules b/installer/amd64/modules/amd64/uinput-modules
new file mode 100644 (file)
index 0000000..58a8337
--- /dev/null
@@ -0,0 +1 @@
+#include <uinput-modules>
diff --git a/installer/amd64/modules/amd64/usb-modules b/installer/amd64/modules/amd64/usb-modules
new file mode 100644 (file)
index 0000000..c598ded
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-modules>
diff --git a/installer/amd64/modules/amd64/usb-serial-modules b/installer/amd64/modules/amd64/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/amd64/modules/amd64/usb-storage-modules b/installer/amd64/modules/amd64/usb-storage-modules
new file mode 100644 (file)
index 0000000..272d95e
--- /dev/null
@@ -0,0 +1,2 @@
+#include <usb-storage-modules>
+
diff --git a/installer/amd64/modules/amd64/virtio-modules b/installer/amd64/modules/amd64/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/amd64/modules/amd64/xfs-modules b/installer/amd64/modules/amd64/xfs-modules
new file mode 100644 (file)
index 0000000..c020b5d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <xfs-modules>
+
diff --git a/installer/amd64/package-list b/installer/amd64/package-list
new file mode 100644 (file)
index 0000000..e55a710
--- /dev/null
@@ -0,0 +1,14 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+
+Package: fat-modules
+Priority: standard
+
+Package: scsi-modules
+Depends: kernel-image, scsi-core-modules, cdrom-core-modules, core-modules, ata-modules
+
+Package: kernel-image
+Provides: zlib-modules
diff --git a/installer/arm64/kernel-versions b/installer/arm64/kernel-versions
new file mode 100644 (file)
index 0000000..11d7399
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour installedname suffix build-depends
+arm64  -       arm64   -             -      -
diff --git a/installer/arm64/modules/arm64/ata-modules b/installer/arm64/modules/arm64/ata-modules
new file mode 100644 (file)
index 0000000..04d9c88
--- /dev/null
@@ -0,0 +1 @@
+libata
diff --git a/installer/arm64/modules/arm64/btrfs-modules b/installer/arm64/modules/arm64/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/arm64/modules/arm64/cdrom-core-modules b/installer/arm64/modules/arm64/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/arm64/modules/arm64/crc-modules b/installer/arm64/modules/arm64/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/arm64/modules/arm64/crypto-dm-modules b/installer/arm64/modules/arm64/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/arm64/modules/arm64/crypto-modules b/installer/arm64/modules/arm64/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/arm64/modules/arm64/efi-modules b/installer/arm64/modules/arm64/efi-modules
new file mode 100644 (file)
index 0000000..e1dc05e
--- /dev/null
@@ -0,0 +1 @@
+#include <efi-modules>
diff --git a/installer/arm64/modules/arm64/event-modules b/installer/arm64/modules/arm64/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/arm64/modules/arm64/ext4-modules b/installer/arm64/modules/arm64/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/arm64/modules/arm64/fat-modules b/installer/arm64/modules/arm64/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/arm64/modules/arm64/fb-modules b/installer/arm64/modules/arm64/fb-modules
new file mode 100644 (file)
index 0000000..f96aaea
--- /dev/null
@@ -0,0 +1,2 @@
+ast
+tegra-drm
diff --git a/installer/arm64/modules/arm64/fuse-modules b/installer/arm64/modules/arm64/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/arm64/modules/arm64/i2c-modules b/installer/arm64/modules/arm64/i2c-modules
new file mode 100644 (file)
index 0000000..bfe65b4
--- /dev/null
@@ -0,0 +1,2 @@
+#include <i2c-modules>
+i2c-tegra
diff --git a/installer/arm64/modules/arm64/input-modules b/installer/arm64/modules/arm64/input-modules
new file mode 100644 (file)
index 0000000..5ecb595
--- /dev/null
@@ -0,0 +1 @@
+#include <input-modules>
diff --git a/installer/arm64/modules/arm64/isofs-modules b/installer/arm64/modules/arm64/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/arm64/modules/arm64/jfs-modules b/installer/arm64/modules/arm64/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/arm64/modules/arm64/kernel-image b/installer/arm64/modules/arm64/kernel-image
new file mode 100644 (file)
index 0000000..6b6fb41
--- /dev/null
@@ -0,0 +1,7 @@
+#include <kernel-image>
+
+# Regulators
+drivers/regulator/**
+
+# SoC modules
+drivers/soc/**
diff --git a/installer/arm64/modules/arm64/leds-modules b/installer/arm64/modules/arm64/leds-modules
new file mode 100644 (file)
index 0000000..85d9f25
--- /dev/null
@@ -0,0 +1 @@
+#include <leds-modules>
diff --git a/installer/arm64/modules/arm64/loop-modules b/installer/arm64/modules/arm64/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/arm64/modules/arm64/md-modules b/installer/arm64/modules/arm64/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/arm64/modules/arm64/mmc-modules b/installer/arm64/modules/arm64/mmc-modules
new file mode 100644 (file)
index 0000000..dadfd53
--- /dev/null
@@ -0,0 +1 @@
+#include <mmc-modules>
diff --git a/installer/arm64/modules/arm64/multipath-modules b/installer/arm64/modules/arm64/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/arm64/modules/arm64/nbd-modules b/installer/arm64/modules/arm64/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/arm64/modules/arm64/nic-modules b/installer/arm64/modules/arm64/nic-modules
new file mode 100644 (file)
index 0000000..22ea989
--- /dev/null
@@ -0,0 +1,9 @@
+#include <nic-modules>
+amd-xgbe
+smc91x
+smsc911x
+stmmac
+stmmac-platform
+dwmac-generic
+dwmac-ipq806x
+xgene-enet
diff --git a/installer/arm64/modules/arm64/nic-shared-modules b/installer/arm64/modules/arm64/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/arm64/modules/arm64/nic-usb-modules b/installer/arm64/modules/arm64/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/arm64/modules/arm64/nic-wireless-modules b/installer/arm64/modules/arm64/nic-wireless-modules
new file mode 100644 (file)
index 0000000..53fd18d
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-wireless-modules>
diff --git a/installer/arm64/modules/arm64/ppp-modules b/installer/arm64/modules/arm64/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/arm64/modules/arm64/sata-modules b/installer/arm64/modules/arm64/sata-modules
new file mode 100644 (file)
index 0000000..740a93c
--- /dev/null
@@ -0,0 +1,4 @@
+#include <sata-modules>
+phy-qcom-apq8064-sata
+phy-qcom-ipq806x-sata
+phy-xgene
diff --git a/installer/arm64/modules/arm64/scsi-core-modules b/installer/arm64/modules/arm64/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/arm64/modules/arm64/scsi-modules b/installer/arm64/modules/arm64/scsi-modules
new file mode 100644 (file)
index 0000000..8909dfb
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-modules>
diff --git a/installer/arm64/modules/arm64/squashfs-modules b/installer/arm64/modules/arm64/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/arm64/modules/arm64/udf-modules b/installer/arm64/modules/arm64/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/arm64/modules/arm64/uinput-modules b/installer/arm64/modules/arm64/uinput-modules
new file mode 100644 (file)
index 0000000..58a8337
--- /dev/null
@@ -0,0 +1 @@
+#include <uinput-modules>
diff --git a/installer/arm64/modules/arm64/usb-modules b/installer/arm64/modules/arm64/usb-modules
new file mode 100644 (file)
index 0000000..7614f23
--- /dev/null
@@ -0,0 +1,3 @@
+#include <usb-modules>
+dwc2
+dwc3
diff --git a/installer/arm64/modules/arm64/usb-storage-modules b/installer/arm64/modules/arm64/usb-storage-modules
new file mode 100644 (file)
index 0000000..8c5e81b
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-storage-modules>
diff --git a/installer/arm64/modules/arm64/virtio-modules b/installer/arm64/modules/arm64/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/arm64/modules/arm64/xfs-modules b/installer/arm64/modules/arm64/xfs-modules
new file mode 100644 (file)
index 0000000..98374e2
--- /dev/null
@@ -0,0 +1 @@
+#include <xfs-modules>
diff --git a/installer/arm64/package-list b/installer/arm64/package-list
new file mode 100644 (file)
index 0000000..22daaa6
--- /dev/null
@@ -0,0 +1,8 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+
+Package: kernel-image
+Provides: zlib-modules
diff --git a/installer/armel/kernel-versions b/installer/armel/kernel-versions
new file mode 100644 (file)
index 0000000..49eb646
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour   installedname suffix build-depends
+armel  -       marvell   -             y      -
diff --git a/installer/armel/modules/armel-marvell/btrfs-modules b/installer/armel/modules/armel-marvell/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/armel/modules/armel-marvell/cdrom-core-modules b/installer/armel/modules/armel-marvell/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/armel/modules/armel-marvell/crc-modules b/installer/armel/modules/armel-marvell/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/armel/modules/armel-marvell/crypto-dm-modules b/installer/armel/modules/armel-marvell/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/armel/modules/armel-marvell/crypto-modules b/installer/armel/modules/armel-marvell/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/armel/modules/armel-marvell/event-modules b/installer/armel/modules/armel-marvell/event-modules
new file mode 100644 (file)
index 0000000..0bc9f77
--- /dev/null
@@ -0,0 +1,2 @@
+#include <event-modules>
+gpio_keys
diff --git a/installer/armel/modules/armel-marvell/ext4-modules b/installer/armel/modules/armel-marvell/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/armel/modules/armel-marvell/fat-modules b/installer/armel/modules/armel-marvell/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/armel/modules/armel-marvell/fb-modules b/installer/armel/modules/armel-marvell/fb-modules
new file mode 100644 (file)
index 0000000..4654768
--- /dev/null
@@ -0,0 +1,3 @@
+fbcon
+udlfb
+xgifb
diff --git a/installer/armel/modules/armel-marvell/fuse-modules b/installer/armel/modules/armel-marvell/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/armel/modules/armel-marvell/input-modules b/installer/armel/modules/armel-marvell/input-modules
new file mode 100644 (file)
index 0000000..3418358
--- /dev/null
@@ -0,0 +1,3 @@
+#include <input-modules>
+# Moved to event-modules for use in network-console builds
+gpio_keys -
diff --git a/installer/armel/modules/armel-marvell/ipv6-modules b/installer/armel/modules/armel-marvell/ipv6-modules
new file mode 100644 (file)
index 0000000..1e3fc33
--- /dev/null
@@ -0,0 +1 @@
+#include <ipv6-modules>
diff --git a/installer/armel/modules/armel-marvell/isofs-modules b/installer/armel/modules/armel-marvell/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/armel/modules/armel-marvell/jffs2-modules b/installer/armel/modules/armel-marvell/jffs2-modules
new file mode 100644 (file)
index 0000000..245c7d8
--- /dev/null
@@ -0,0 +1 @@
+#include <jffs2-modules>
diff --git a/installer/armel/modules/armel-marvell/jfs-modules b/installer/armel/modules/armel-marvell/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/armel/modules/armel-marvell/kernel-image b/installer/armel/modules/armel-marvell/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/armel/modules/armel-marvell/leds-modules b/installer/armel/modules/armel-marvell/leds-modules
new file mode 100644 (file)
index 0000000..b18bac1
--- /dev/null
@@ -0,0 +1,2 @@
+leds-ns2
+leds-netxbig
diff --git a/installer/armel/modules/armel-marvell/loop-modules b/installer/armel/modules/armel-marvell/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/armel/modules/armel-marvell/md-modules b/installer/armel/modules/armel-marvell/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/armel/modules/armel-marvell/minix-modules b/installer/armel/modules/armel-marvell/minix-modules
new file mode 100644 (file)
index 0000000..82b9843
--- /dev/null
@@ -0,0 +1 @@
+#include <minix-modules>
diff --git a/installer/armel/modules/armel-marvell/mmc-modules b/installer/armel/modules/armel-marvell/mmc-modules
new file mode 100644 (file)
index 0000000..e8c7b46
--- /dev/null
@@ -0,0 +1,2 @@
+#include <mmc-modules>
+mvsdio
diff --git a/installer/armel/modules/armel-marvell/mouse-modules b/installer/armel/modules/armel-marvell/mouse-modules
new file mode 100644 (file)
index 0000000..15fcb00
--- /dev/null
@@ -0,0 +1 @@
+#include <mouse-modules>
diff --git a/installer/armel/modules/armel-marvell/mtd-modules b/installer/armel/modules/armel-marvell/mtd-modules
new file mode 100644 (file)
index 0000000..5fcac1e
--- /dev/null
@@ -0,0 +1,2 @@
+#include <mtd-modules>
+m25p80
diff --git a/installer/armel/modules/armel-marvell/multipath-modules b/installer/armel/modules/armel-marvell/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/armel/modules/armel-marvell/nbd-modules b/installer/armel/modules/armel-marvell/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/armel/modules/armel-marvell/nic-modules b/installer/armel/modules/armel-marvell/nic-modules
new file mode 100644 (file)
index 0000000..1a2cdb1
--- /dev/null
@@ -0,0 +1,2 @@
+mv643xx_eth
+mvmdio
diff --git a/installer/armel/modules/armel-marvell/nic-shared-modules b/installer/armel/modules/armel-marvell/nic-shared-modules
new file mode 100644 (file)
index 0000000..e02d64f
--- /dev/null
@@ -0,0 +1,2 @@
+#include <nic-shared-modules>
+of_mdio
diff --git a/installer/armel/modules/armel-marvell/nic-usb-modules b/installer/armel/modules/armel-marvell/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/armel/modules/armel-marvell/ppp-modules b/installer/armel/modules/armel-marvell/ppp-modules
new file mode 100644 (file)
index 0000000..f1ae9b3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <ppp-modules>
+
diff --git a/installer/armel/modules/armel-marvell/sata-modules b/installer/armel/modules/armel-marvell/sata-modules
new file mode 100644 (file)
index 0000000..3adbfa1
--- /dev/null
@@ -0,0 +1,2 @@
+ahci
+sata_mv
diff --git a/installer/armel/modules/armel-marvell/scsi-core-modules b/installer/armel/modules/armel-marvell/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/armel/modules/armel-marvell/squashfs-modules b/installer/armel/modules/armel-marvell/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/armel/modules/armel-marvell/udf-modules b/installer/armel/modules/armel-marvell/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/armel/modules/armel-marvell/uinput-modules b/installer/armel/modules/armel-marvell/uinput-modules
new file mode 100644 (file)
index 0000000..58a8337
--- /dev/null
@@ -0,0 +1 @@
+#include <uinput-modules>
diff --git a/installer/armel/modules/armel-marvell/usb-modules b/installer/armel/modules/armel-marvell/usb-modules
new file mode 100644 (file)
index 0000000..772c4af
--- /dev/null
@@ -0,0 +1,2 @@
+#include <usb-modules>
+ehci-orion
diff --git a/installer/armel/modules/armel-marvell/usb-serial-modules b/installer/armel/modules/armel-marvell/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/armel/modules/armel-marvell/usb-storage-modules b/installer/armel/modules/armel-marvell/usb-storage-modules
new file mode 100644 (file)
index 0000000..8c5e81b
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-storage-modules>
diff --git a/installer/armel/modules/armel-marvell/zlib-modules b/installer/armel/modules/armel-marvell/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/armel/package-list b/installer/armel/package-list
new file mode 100644 (file)
index 0000000..d975323
--- /dev/null
@@ -0,0 +1,11 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides_marvell: rtc-modules
+Provides_versatile: rtc-modules
+
+Package: fb-modules
+Depends: kernel-image, usb-modules
diff --git a/installer/armhf/kernel-versions b/installer/armhf/kernel-versions
new file mode 100644 (file)
index 0000000..c73dcc7
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour  installedname suffix build-depends
+armhf  -       armmp    -             -      -
diff --git a/installer/armhf/modules/armhf-armmp/ata-modules b/installer/armhf/modules/armhf-armmp/ata-modules
new file mode 100644 (file)
index 0000000..04d9c88
--- /dev/null
@@ -0,0 +1 @@
+libata
diff --git a/installer/armhf/modules/armhf-armmp/btrfs-modules b/installer/armhf/modules/armhf-armmp/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/armhf/modules/armhf-armmp/crc-modules b/installer/armhf/modules/armhf-armmp/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/armhf/modules/armhf-armmp/crypto-dm-modules b/installer/armhf/modules/armhf-armmp/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/armhf/modules/armhf-armmp/crypto-modules b/installer/armhf/modules/armhf-armmp/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/armhf/modules/armhf-armmp/efi-modules b/installer/armhf/modules/armhf-armmp/efi-modules
new file mode 100644 (file)
index 0000000..e1dc05e
--- /dev/null
@@ -0,0 +1 @@
+#include <efi-modules>
diff --git a/installer/armhf/modules/armhf-armmp/event-modules b/installer/armhf/modules/armhf-armmp/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/armhf/modules/armhf-armmp/ext4-modules b/installer/armhf/modules/armhf-armmp/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/armhf/modules/armhf-armmp/fat-modules b/installer/armhf/modules/armhf-armmp/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/armhf/modules/armhf-armmp/fb-modules b/installer/armhf/modules/armhf-armmp/fb-modules
new file mode 100644 (file)
index 0000000..849ebe2
--- /dev/null
@@ -0,0 +1,3 @@
+imx-ipuv3-crtc
+dw_hdmi-imx
+tegra-drm
diff --git a/installer/armhf/modules/armhf-armmp/fuse-modules b/installer/armhf/modules/armhf-armmp/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/armhf/modules/armhf-armmp/input-modules b/installer/armhf/modules/armhf-armmp/input-modules
new file mode 100644 (file)
index 0000000..5ecb595
--- /dev/null
@@ -0,0 +1 @@
+#include <input-modules>
diff --git a/installer/armhf/modules/armhf-armmp/isofs-modules b/installer/armhf/modules/armhf-armmp/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/armhf/modules/armhf-armmp/jfs-modules b/installer/armhf/modules/armhf-armmp/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/armhf/modules/armhf-armmp/kernel-image b/installer/armhf/modules/armhf-armmp/kernel-image
new file mode 100644 (file)
index 0000000..edd1bf7
--- /dev/null
@@ -0,0 +1,17 @@
+#include <kernel-image>
+
+# Clocks
+clk-palmas ?
+clk-s2mps11 ?
+clk-twl6040 ?
+
+# GPIO
+gpio-da9052 ?
+gpio-pca953x ?
+
+# PCIe PHYs
+phy-omap-control ?
+phy-ti-pipe3 ?
+
+# Regulators
+drivers/regulator/**
diff --git a/installer/armhf/modules/armhf-armmp/leds-modules b/installer/armhf/modules/armhf-armmp/leds-modules
new file mode 100644 (file)
index 0000000..85d9f25
--- /dev/null
@@ -0,0 +1 @@
+#include <leds-modules>
diff --git a/installer/armhf/modules/armhf-armmp/loop-modules b/installer/armhf/modules/armhf-armmp/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/armhf/modules/armhf-armmp/md-modules b/installer/armhf/modules/armhf-armmp/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/armhf/modules/armhf-armmp/mmc-modules b/installer/armhf/modules/armhf-armmp/mmc-modules
new file mode 100644 (file)
index 0000000..dadfd53
--- /dev/null
@@ -0,0 +1 @@
+#include <mmc-modules>
diff --git a/installer/armhf/modules/armhf-armmp/mtd-modules b/installer/armhf/modules/armhf-armmp/mtd-modules
new file mode 100644 (file)
index 0000000..7370cda
--- /dev/null
@@ -0,0 +1,3 @@
+#include <mtd-modules>
+mxc_nand
+pxa3xx_nand
diff --git a/installer/armhf/modules/armhf-armmp/multipath-modules b/installer/armhf/modules/armhf-armmp/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/armhf/modules/armhf-armmp/nbd-modules b/installer/armhf/modules/armhf-armmp/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/armhf/modules/armhf-armmp/nic-modules b/installer/armhf/modules/armhf-armmp/nic-modules
new file mode 100644 (file)
index 0000000..75a4eb9
--- /dev/null
@@ -0,0 +1,14 @@
+#include <nic-modules>
+mvneta
+mvmdio
+smsc911x
+stmmac
+stmmac-platform
+dwmac-generic
+dwmac-altr-socfpga
+dwmac-sunxi
+sun4i-emac
+xgmac
+ti_cpsw
+davinci_mdio
+davinci_cpdma
diff --git a/installer/armhf/modules/armhf-armmp/nic-shared-modules b/installer/armhf/modules/armhf-armmp/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/armhf/modules/armhf-armmp/nic-usb-modules b/installer/armhf/modules/armhf-armmp/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/armhf/modules/armhf-armmp/nic-wireless-modules b/installer/armhf/modules/armhf-armmp/nic-wireless-modules
new file mode 100644 (file)
index 0000000..53fd18d
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-wireless-modules>
diff --git a/installer/armhf/modules/armhf-armmp/pata-modules b/installer/armhf/modules/armhf-armmp/pata-modules
new file mode 100644 (file)
index 0000000..2ff7276
--- /dev/null
@@ -0,0 +1 @@
+pata_imx
diff --git a/installer/armhf/modules/armhf-armmp/ppp-modules b/installer/armhf/modules/armhf-armmp/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/armhf/modules/armhf-armmp/sata-modules b/installer/armhf/modules/armhf-armmp/sata-modules
new file mode 100644 (file)
index 0000000..8e7e1ed
--- /dev/null
@@ -0,0 +1,5 @@
+#include <sata-modules>
+sata_highbank
+
+# SATA PHYs
+phy-exynos5250-sata
diff --git a/installer/armhf/modules/armhf-armmp/scsi-core-modules b/installer/armhf/modules/armhf-armmp/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/armhf/modules/armhf-armmp/scsi-modules b/installer/armhf/modules/armhf-armmp/scsi-modules
new file mode 100644 (file)
index 0000000..675462a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <scsi-modules>
+
diff --git a/installer/armhf/modules/armhf-armmp/squashfs-modules b/installer/armhf/modules/armhf-armmp/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/armhf/modules/armhf-armmp/udf-modules b/installer/armhf/modules/armhf-armmp/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/armhf/modules/armhf-armmp/uinput-modules b/installer/armhf/modules/armhf-armmp/uinput-modules
new file mode 100644 (file)
index 0000000..58a8337
--- /dev/null
@@ -0,0 +1 @@
+#include <uinput-modules>
diff --git a/installer/armhf/modules/armhf-armmp/usb-modules b/installer/armhf/modules/armhf-armmp/usb-modules
new file mode 100644 (file)
index 0000000..7e20ccb
--- /dev/null
@@ -0,0 +1,3 @@
+#include <usb-modules>
+omap-ocp2scp
+extcon-usb-gpio
diff --git a/installer/armhf/modules/armhf-armmp/usb-storage-modules b/installer/armhf/modules/armhf-armmp/usb-storage-modules
new file mode 100644 (file)
index 0000000..8c5e81b
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-storage-modules>
diff --git a/installer/armhf/modules/armhf-armmp/virtio-modules b/installer/armhf/modules/armhf-armmp/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/armhf/modules/armhf-armmp/zlib-modules b/installer/armhf/modules/armhf-armmp/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/armhf/package-list b/installer/armhf/package-list
new file mode 100644 (file)
index 0000000..d0fd385
--- /dev/null
@@ -0,0 +1,9 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+
+Package: pata-modules
+Priority: extra
diff --git a/installer/hppa/kernel-versions b/installer/hppa/kernel-versions
new file mode 100644 (file)
index 0000000..e59e12c
--- /dev/null
@@ -0,0 +1,3 @@
+# arch version flavour      installedname suffix build-depends
+hppa   -       parisc       -             y      -
+hppa   -       parisc64-smp -             y      -
diff --git a/installer/hppa/modules/hppa-parisc64-smp/ata-modules b/installer/hppa/modules/hppa-parisc64-smp/ata-modules
new file mode 100644 (file)
index 0000000..08f295a
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/ata-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/btrfs-modules b/installer/hppa/modules/hppa-parisc64-smp/btrfs-modules
new file mode 100644 (file)
index 0000000..677b351
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/btrfs-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/cdrom-core-modules b/installer/hppa/modules/hppa-parisc64-smp/cdrom-core-modules
new file mode 100644 (file)
index 0000000..9656269
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/cdrom-core-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/crc-modules b/installer/hppa/modules/hppa-parisc64-smp/crc-modules
new file mode 100644 (file)
index 0000000..f75e86b
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/crc-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/crypto-dm-modules b/installer/hppa/modules/hppa-parisc64-smp/crypto-dm-modules
new file mode 100644 (file)
index 0000000..ed740a5
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/crypto-dm-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/crypto-modules b/installer/hppa/modules/hppa-parisc64-smp/crypto-modules
new file mode 100644 (file)
index 0000000..1c4d2d0
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/crypto-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/event-modules b/installer/hppa/modules/hppa-parisc64-smp/event-modules
new file mode 100644 (file)
index 0000000..1a5cbb0
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/event-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/ext4-modules b/installer/hppa/modules/hppa-parisc64-smp/ext4-modules
new file mode 100644 (file)
index 0000000..00920ac
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/ext4-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/fat-modules b/installer/hppa/modules/hppa-parisc64-smp/fat-modules
new file mode 100644 (file)
index 0000000..ef6dd33
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/fat-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/fb-modules b/installer/hppa/modules/hppa-parisc64-smp/fb-modules
new file mode 100644 (file)
index 0000000..acaf53b
--- /dev/null
@@ -0,0 +1,6 @@
+drm ?
+drm_kms_helper ?
+radeon ?
+ttm ?
+
+
diff --git a/installer/hppa/modules/hppa-parisc64-smp/fuse-modules b/installer/hppa/modules/hppa-parisc64-smp/fuse-modules
new file mode 100644 (file)
index 0000000..06f8ccf
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/fuse-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/input-modules b/installer/hppa/modules/hppa-parisc64-smp/input-modules
new file mode 100644 (file)
index 0000000..cdeaa30
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/input-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/isofs-modules b/installer/hppa/modules/hppa-parisc64-smp/isofs-modules
new file mode 100644 (file)
index 0000000..9e8e2df
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/isofs-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/jfs-modules b/installer/hppa/modules/hppa-parisc64-smp/jfs-modules
new file mode 100644 (file)
index 0000000..a3b6beb
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/jfs-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/kernel-image b/installer/hppa/modules/hppa-parisc64-smp/kernel-image
new file mode 100644 (file)
index 0000000..93d59f5
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/kernel-image"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/loop-modules b/installer/hppa/modules/hppa-parisc64-smp/loop-modules
new file mode 100644 (file)
index 0000000..721ffec
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/loop-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/md-modules b/installer/hppa/modules/hppa-parisc64-smp/md-modules
new file mode 100644 (file)
index 0000000..d7e9720
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/md-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/mouse-modules b/installer/hppa/modules/hppa-parisc64-smp/mouse-modules
new file mode 100644 (file)
index 0000000..f9edf83
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/mouse-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/multipath-modules b/installer/hppa/modules/hppa-parisc64-smp/multipath-modules
new file mode 100644 (file)
index 0000000..46f68a3
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/multipath-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/nbd-modules b/installer/hppa/modules/hppa-parisc64-smp/nbd-modules
new file mode 100644 (file)
index 0000000..b4c4622
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/nbd-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/nic-modules b/installer/hppa/modules/hppa-parisc64-smp/nic-modules
new file mode 100644 (file)
index 0000000..e15b2d5
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/nic-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/nic-shared-modules b/installer/hppa/modules/hppa-parisc64-smp/nic-shared-modules
new file mode 100644 (file)
index 0000000..fd0b19c
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/nic-shared-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/nic-usb-modules b/installer/hppa/modules/hppa-parisc64-smp/nic-usb-modules
new file mode 100644 (file)
index 0000000..261192d
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/nic-usb-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/pata-modules b/installer/hppa/modules/hppa-parisc64-smp/pata-modules
new file mode 100644 (file)
index 0000000..46bc719
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/pata-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/ppp-modules b/installer/hppa/modules/hppa-parisc64-smp/ppp-modules
new file mode 100644 (file)
index 0000000..b78085c
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/ppp-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/sata-modules b/installer/hppa/modules/hppa-parisc64-smp/sata-modules
new file mode 100644 (file)
index 0000000..a2ebc29
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/sata-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/scsi-core-modules b/installer/hppa/modules/hppa-parisc64-smp/scsi-core-modules
new file mode 100644 (file)
index 0000000..ff84a70
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/scsi-core-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/scsi-modules b/installer/hppa/modules/hppa-parisc64-smp/scsi-modules
new file mode 100644 (file)
index 0000000..229e060
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/scsi-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/serial-modules b/installer/hppa/modules/hppa-parisc64-smp/serial-modules
new file mode 100644 (file)
index 0000000..a84a550
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/serial-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/squashfs-modules b/installer/hppa/modules/hppa-parisc64-smp/squashfs-modules
new file mode 100644 (file)
index 0000000..f0c79aa
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/squashfs-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/usb-modules b/installer/hppa/modules/hppa-parisc64-smp/usb-modules
new file mode 100644 (file)
index 0000000..df2abbb
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/usb-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/usb-serial-modules b/installer/hppa/modules/hppa-parisc64-smp/usb-serial-modules
new file mode 100644 (file)
index 0000000..1dd0503
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/usb-serial-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/usb-storage-modules b/installer/hppa/modules/hppa-parisc64-smp/usb-storage-modules
new file mode 100644 (file)
index 0000000..5562ed4
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/usb-storage-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/virtio-modules b/installer/hppa/modules/hppa-parisc64-smp/virtio-modules
new file mode 100644 (file)
index 0000000..2f4e67a
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/virtio-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/xfs-modules b/installer/hppa/modules/hppa-parisc64-smp/xfs-modules
new file mode 100644 (file)
index 0000000..7960e0b
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/xfs-modules"
diff --git a/installer/hppa/modules/hppa-parisc64-smp/zlib-modules b/installer/hppa/modules/hppa-parisc64-smp/zlib-modules
new file mode 100644 (file)
index 0000000..b3f829c
--- /dev/null
@@ -0,0 +1 @@
+#include "../hppa/zlib-modules"
diff --git a/installer/hppa/modules/hppa/ata-modules b/installer/hppa/modules/hppa/ata-modules
new file mode 100644 (file)
index 0000000..b81c0f3
--- /dev/null
@@ -0,0 +1 @@
+#include <ata-modules>
diff --git a/installer/hppa/modules/hppa/btrfs-modules b/installer/hppa/modules/hppa/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/hppa/modules/hppa/cdrom-core-modules b/installer/hppa/modules/hppa/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/hppa/modules/hppa/crc-modules b/installer/hppa/modules/hppa/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/hppa/modules/hppa/crypto-dm-modules b/installer/hppa/modules/hppa/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/hppa/modules/hppa/crypto-modules b/installer/hppa/modules/hppa/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/hppa/modules/hppa/event-modules b/installer/hppa/modules/hppa/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/hppa/modules/hppa/ext4-modules b/installer/hppa/modules/hppa/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/hppa/modules/hppa/fat-modules b/installer/hppa/modules/hppa/fat-modules
new file mode 100644 (file)
index 0000000..cce8fd3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <fat-modules>
+
diff --git a/installer/hppa/modules/hppa/fuse-modules b/installer/hppa/modules/hppa/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/hppa/modules/hppa/input-modules b/installer/hppa/modules/hppa/input-modules
new file mode 100644 (file)
index 0000000..9d4cbf6
--- /dev/null
@@ -0,0 +1,6 @@
+#include <input-modules>
+hil_kbd ?
+hilkbd ?
+hp_sdc_mlc ?
+hil_mlc ?
+hp_sdc ?
diff --git a/installer/hppa/modules/hppa/isofs-modules b/installer/hppa/modules/hppa/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/hppa/modules/hppa/jfs-modules b/installer/hppa/modules/hppa/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/hppa/modules/hppa/kernel-image b/installer/hppa/modules/hppa/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/hppa/modules/hppa/loop-modules b/installer/hppa/modules/hppa/loop-modules
new file mode 100644 (file)
index 0000000..1644677
--- /dev/null
@@ -0,0 +1,2 @@
+#include <loop-modules>
+
diff --git a/installer/hppa/modules/hppa/md-modules b/installer/hppa/modules/hppa/md-modules
new file mode 100644 (file)
index 0000000..ade088d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <md-modules>
+
diff --git a/installer/hppa/modules/hppa/mouse-modules b/installer/hppa/modules/hppa/mouse-modules
new file mode 100644 (file)
index 0000000..15fcb00
--- /dev/null
@@ -0,0 +1 @@
+#include <mouse-modules>
diff --git a/installer/hppa/modules/hppa/multipath-modules b/installer/hppa/modules/hppa/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/hppa/modules/hppa/nbd-modules b/installer/hppa/modules/hppa/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/hppa/modules/hppa/nic-modules b/installer/hppa/modules/hppa/nic-modules
new file mode 100644 (file)
index 0000000..8a4b656
--- /dev/null
@@ -0,0 +1,4 @@
+lasi_82596
+tg3
+tulip
+e1000
diff --git a/installer/hppa/modules/hppa/nic-shared-modules b/installer/hppa/modules/hppa/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/hppa/modules/hppa/nic-usb-modules b/installer/hppa/modules/hppa/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/hppa/modules/hppa/pata-modules b/installer/hppa/modules/hppa/pata-modules
new file mode 100644 (file)
index 0000000..8c4e514
--- /dev/null
@@ -0,0 +1,2 @@
+#include <pata-modules>
+
diff --git a/installer/hppa/modules/hppa/ppp-modules b/installer/hppa/modules/hppa/ppp-modules
new file mode 100644 (file)
index 0000000..f1ae9b3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <ppp-modules>
+
diff --git a/installer/hppa/modules/hppa/sata-modules b/installer/hppa/modules/hppa/sata-modules
new file mode 100644 (file)
index 0000000..071cb86
--- /dev/null
@@ -0,0 +1,2 @@
+#include <sata-modules>
+
diff --git a/installer/hppa/modules/hppa/scsi-core-modules b/installer/hppa/modules/hppa/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/hppa/modules/hppa/scsi-modules b/installer/hppa/modules/hppa/scsi-modules
new file mode 100644 (file)
index 0000000..43d9b03
--- /dev/null
@@ -0,0 +1,19 @@
+aic79xx
+aic7xxx
+BusLogic ?
+sym53c8xx
+sym53c8xx_2 ?
+53c700
+ch
+lasi700
+osst
+sg
+st
+zalon7xx
+megaraid ?
+megaraid_mbox ?
+megaraid_mm ?
+megaraid_sas ?
+qlogicfas408
+mptbase
+mptspi
diff --git a/installer/hppa/modules/hppa/serial-modules b/installer/hppa/modules/hppa/serial-modules
new file mode 100644 (file)
index 0000000..6ab8b8c
--- /dev/null
@@ -0,0 +1 @@
+#include <serial-modules>
diff --git a/installer/hppa/modules/hppa/squashfs-modules b/installer/hppa/modules/hppa/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/hppa/modules/hppa/usb-modules b/installer/hppa/modules/hppa/usb-modules
new file mode 100644 (file)
index 0000000..c598ded
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-modules>
diff --git a/installer/hppa/modules/hppa/usb-serial-modules b/installer/hppa/modules/hppa/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/hppa/modules/hppa/usb-storage-modules b/installer/hppa/modules/hppa/usb-storage-modules
new file mode 100644 (file)
index 0000000..272d95e
--- /dev/null
@@ -0,0 +1,2 @@
+#include <usb-storage-modules>
+
diff --git a/installer/hppa/modules/hppa/virtio-modules b/installer/hppa/modules/hppa/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/hppa/modules/hppa/xfs-modules b/installer/hppa/modules/hppa/xfs-modules
new file mode 100644 (file)
index 0000000..98374e2
--- /dev/null
@@ -0,0 +1 @@
+#include <xfs-modules>
diff --git a/installer/hppa/modules/hppa/zlib-modules b/installer/hppa/modules/hppa/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/hppa/package-list b/installer/hppa/package-list
new file mode 100644 (file)
index 0000000..ef75129
--- /dev/null
@@ -0,0 +1,17 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides_parisc64-smp: i2c-modules
+
+Package: usb-storage-modules
+Depends: kernel-image, scsi-modules, usb-modules
+
+Package: pata-modules
+Depends: kernel-image, ata-modules, scsi-core-modules
+
+Package: fb-modules
+Depends: kernel-image
+Priority: standard
diff --git a/installer/i386/kernel-versions b/installer/i386/kernel-versions
new file mode 100644 (file)
index 0000000..c08de14
--- /dev/null
@@ -0,0 +1,3 @@
+# arch version flavour installedname suffix build-depends
+i386   -       686     -             -      -
+i386   -       686-pae -             -      -
diff --git a/installer/i386/modules/i386/acpi-modules b/installer/i386/modules/i386/acpi-modules
new file mode 100644 (file)
index 0000000..307528f
--- /dev/null
@@ -0,0 +1,2 @@
+#include <acpi-modules>
+
diff --git a/installer/i386/modules/i386/ata-modules b/installer/i386/modules/i386/ata-modules
new file mode 100644 (file)
index 0000000..9409e7c
--- /dev/null
@@ -0,0 +1,2 @@
+#include <ata-modules>
+
diff --git a/installer/i386/modules/i386/btrfs-modules b/installer/i386/modules/i386/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/i386/modules/i386/cdrom-core-modules b/installer/i386/modules/i386/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/i386/modules/i386/crc-modules b/installer/i386/modules/i386/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/i386/modules/i386/crypto-dm-modules b/installer/i386/modules/i386/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/i386/modules/i386/crypto-modules b/installer/i386/modules/i386/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/i386/modules/i386/efi-modules b/installer/i386/modules/i386/efi-modules
new file mode 100644 (file)
index 0000000..e1dc05e
--- /dev/null
@@ -0,0 +1 @@
+#include <efi-modules>
diff --git a/installer/i386/modules/i386/event-modules b/installer/i386/modules/i386/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/i386/modules/i386/ext4-modules b/installer/i386/modules/i386/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/i386/modules/i386/fat-modules b/installer/i386/modules/i386/fat-modules
new file mode 100644 (file)
index 0000000..cce8fd3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <fat-modules>
+
diff --git a/installer/i386/modules/i386/fb-modules b/installer/i386/modules/i386/fb-modules
new file mode 100644 (file)
index 0000000..3180564
--- /dev/null
@@ -0,0 +1,5 @@
+fbcon ?
+lxfb ?
+vesafb ?
+vga16fb
+viafb
diff --git a/installer/i386/modules/i386/firewire-core-modules b/installer/i386/modules/i386/firewire-core-modules
new file mode 100644 (file)
index 0000000..dcac80a
--- /dev/null
@@ -0,0 +1 @@
+#include <firewire-core-modules>
diff --git a/installer/i386/modules/i386/fuse-modules b/installer/i386/modules/i386/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/i386/modules/i386/hyperv-modules b/installer/i386/modules/i386/hyperv-modules
new file mode 100644 (file)
index 0000000..69fdd5d
--- /dev/null
@@ -0,0 +1 @@
+#include <hyperv-modules>
diff --git a/installer/i386/modules/i386/i2c-modules b/installer/i386/modules/i386/i2c-modules
new file mode 100644 (file)
index 0000000..203a607
--- /dev/null
@@ -0,0 +1 @@
+#include <i2c-modules>
diff --git a/installer/i386/modules/i386/input-modules b/installer/i386/modules/i386/input-modules
new file mode 100644 (file)
index 0000000..cdba2e4
--- /dev/null
@@ -0,0 +1,5 @@
+#include <input-modules>
+# Needed on some Geode LX boards - Alix2/3/6, Soekris net5501, Traverse GEOS
+# so only built for 586 flavour
+gpio_keys_polled ?
+leds-gpio ?
diff --git a/installer/i386/modules/i386/isofs-modules b/installer/i386/modules/i386/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/i386/modules/i386/jfs-modules b/installer/i386/modules/i386/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/i386/modules/i386/kernel-image b/installer/i386/modules/i386/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/i386/modules/i386/loop-modules b/installer/i386/modules/i386/loop-modules
new file mode 100644 (file)
index 0000000..1644677
--- /dev/null
@@ -0,0 +1,2 @@
+#include <loop-modules>
+
diff --git a/installer/i386/modules/i386/md-modules b/installer/i386/modules/i386/md-modules
new file mode 100644 (file)
index 0000000..ade088d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <md-modules>
+
diff --git a/installer/i386/modules/i386/mmc-core-modules b/installer/i386/modules/i386/mmc-core-modules
new file mode 100644 (file)
index 0000000..7bf3846
--- /dev/null
@@ -0,0 +1 @@
+#include <mmc-core-modules>
diff --git a/installer/i386/modules/i386/mmc-modules b/installer/i386/modules/i386/mmc-modules
new file mode 100644 (file)
index 0000000..dadfd53
--- /dev/null
@@ -0,0 +1 @@
+#include <mmc-modules>
diff --git a/installer/i386/modules/i386/mouse-modules b/installer/i386/modules/i386/mouse-modules
new file mode 100644 (file)
index 0000000..15fcb00
--- /dev/null
@@ -0,0 +1 @@
+#include <mouse-modules>
diff --git a/installer/i386/modules/i386/multipath-modules b/installer/i386/modules/i386/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/i386/modules/i386/nbd-modules b/installer/i386/modules/i386/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/i386/modules/i386/nic-modules b/installer/i386/modules/i386/nic-modules
new file mode 100644 (file)
index 0000000..2512e83
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-modules>
diff --git a/installer/i386/modules/i386/nic-pcmcia-modules b/installer/i386/modules/i386/nic-pcmcia-modules
new file mode 100644 (file)
index 0000000..7a0702c
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-pcmcia-modules>
diff --git a/installer/i386/modules/i386/nic-shared-modules b/installer/i386/modules/i386/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/i386/modules/i386/nic-usb-modules b/installer/i386/modules/i386/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/i386/modules/i386/nic-wireless-modules b/installer/i386/modules/i386/nic-wireless-modules
new file mode 100644 (file)
index 0000000..53fd18d
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-wireless-modules>
diff --git a/installer/i386/modules/i386/ntfs-modules b/installer/i386/modules/i386/ntfs-modules
new file mode 100644 (file)
index 0000000..ac1bc6a
--- /dev/null
@@ -0,0 +1 @@
+ntfs
diff --git a/installer/i386/modules/i386/pata-modules b/installer/i386/modules/i386/pata-modules
new file mode 100644 (file)
index 0000000..8c4e514
--- /dev/null
@@ -0,0 +1,2 @@
+#include <pata-modules>
+
diff --git a/installer/i386/modules/i386/pcmcia-modules b/installer/i386/modules/i386/pcmcia-modules
new file mode 100644 (file)
index 0000000..2bb5350
--- /dev/null
@@ -0,0 +1 @@
+#include <pcmcia-modules>
diff --git a/installer/i386/modules/i386/pcmcia-storage-modules b/installer/i386/modules/i386/pcmcia-storage-modules
new file mode 100644 (file)
index 0000000..f73ae5b
--- /dev/null
@@ -0,0 +1 @@
+#include <pcmcia-storage-modules>
diff --git a/installer/i386/modules/i386/ppp-modules b/installer/i386/modules/i386/ppp-modules
new file mode 100644 (file)
index 0000000..f1ae9b3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <ppp-modules>
+
diff --git a/installer/i386/modules/i386/sata-modules b/installer/i386/modules/i386/sata-modules
new file mode 100644 (file)
index 0000000..071cb86
--- /dev/null
@@ -0,0 +1,2 @@
+#include <sata-modules>
+
diff --git a/installer/i386/modules/i386/scsi-core-modules b/installer/i386/modules/i386/scsi-core-modules
new file mode 100644 (file)
index 0000000..778a022
--- /dev/null
@@ -0,0 +1,4 @@
+#include <scsi-core-modules>
+
+# Needed by hv_storvsc in hyperv-modules as well as scsi-modules
+scsi_transport_fc
diff --git a/installer/i386/modules/i386/scsi-modules b/installer/i386/modules/i386/scsi-modules
new file mode 100644 (file)
index 0000000..8909dfb
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-modules>
diff --git a/installer/i386/modules/i386/serial-modules b/installer/i386/modules/i386/serial-modules
new file mode 100644 (file)
index 0000000..6ab8b8c
--- /dev/null
@@ -0,0 +1 @@
+#include <serial-modules>
diff --git a/installer/i386/modules/i386/sound-modules b/installer/i386/modules/i386/sound-modules
new file mode 100644 (file)
index 0000000..68395ab
--- /dev/null
@@ -0,0 +1 @@
+#include <sound-modules>
diff --git a/installer/i386/modules/i386/speakup-modules b/installer/i386/modules/i386/speakup-modules
new file mode 100644 (file)
index 0000000..2959272
--- /dev/null
@@ -0,0 +1 @@
+#include <speakup-modules>
diff --git a/installer/i386/modules/i386/squashfs-modules b/installer/i386/modules/i386/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/i386/modules/i386/udf-modules b/installer/i386/modules/i386/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/i386/modules/i386/uinput-modules b/installer/i386/modules/i386/uinput-modules
new file mode 100644 (file)
index 0000000..58a8337
--- /dev/null
@@ -0,0 +1 @@
+#include <uinput-modules>
diff --git a/installer/i386/modules/i386/usb-modules b/installer/i386/modules/i386/usb-modules
new file mode 100644 (file)
index 0000000..c598ded
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-modules>
diff --git a/installer/i386/modules/i386/usb-serial-modules b/installer/i386/modules/i386/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/i386/modules/i386/usb-storage-modules b/installer/i386/modules/i386/usb-storage-modules
new file mode 100644 (file)
index 0000000..272d95e
--- /dev/null
@@ -0,0 +1,2 @@
+#include <usb-storage-modules>
+
diff --git a/installer/i386/modules/i386/virtio-modules b/installer/i386/modules/i386/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/i386/modules/i386/xfs-modules b/installer/i386/modules/i386/xfs-modules
new file mode 100644 (file)
index 0000000..c020b5d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <xfs-modules>
+
diff --git a/installer/i386/package-list b/installer/i386/package-list
new file mode 100644 (file)
index 0000000..b92d695
--- /dev/null
@@ -0,0 +1,14 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+
+Package: kernel-image
+Provides: rtc-modules, zlib-modules
+
+Package: fat-modules
+Priority: standard
+
+Package: fb-modules
+Depends: kernel-image, i2c-modules
diff --git a/installer/m68k/kernel-versions b/installer/m68k/kernel-versions
new file mode 100644 (file)
index 0000000..ec5f9d3
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour installedname suffix build-depends
+m68k   -       m68k    -             y      -
diff --git a/installer/m68k/modules/m68k/btrfs-modules b/installer/m68k/modules/m68k/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/m68k/modules/m68k/cdrom-core-modules b/installer/m68k/modules/m68k/cdrom-core-modules
new file mode 100644 (file)
index 0000000..3ff69b4
--- /dev/null
@@ -0,0 +1 @@
+#include <cdrom-core-modules>
diff --git a/installer/m68k/modules/m68k/crc-modules b/installer/m68k/modules/m68k/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/m68k/modules/m68k/crypto-modules b/installer/m68k/modules/m68k/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/m68k/modules/m68k/ext4-modules b/installer/m68k/modules/m68k/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/m68k/modules/m68k/fat-modules b/installer/m68k/modules/m68k/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/m68k/modules/m68k/fuse-modules b/installer/m68k/modules/m68k/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/m68k/modules/m68k/isofs-modules b/installer/m68k/modules/m68k/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/m68k/modules/m68k/kernel-image b/installer/m68k/modules/m68k/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/m68k/modules/m68k/md-modules b/installer/m68k/modules/m68k/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/m68k/modules/m68k/nbd-modules b/installer/m68k/modules/m68k/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/m68k/modules/m68k/nic-shared-modules b/installer/m68k/modules/m68k/nic-shared-modules
new file mode 100644 (file)
index 0000000..5bff60c
--- /dev/null
@@ -0,0 +1,20 @@
+#include <nic-shared-modules>
+82596 ?
+8390 ?
+8390p ?
+7990 ?
+a2065 ?
+apne ?
+ariadne ?
+ariadne2 ?
+atarilance ?
+dummy
+hydra ?
+mac8390 ?
+mac89x0 ?
+macsonic ?
+zorro8390 ?
+ne ?
+atari_ethernec ?
+smc91x ?
+libphy
diff --git a/installer/m68k/modules/m68k/ppp-modules b/installer/m68k/modules/m68k/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/m68k/modules/m68k/scsi-modules b/installer/m68k/modules/m68k/scsi-modules
new file mode 100644 (file)
index 0000000..3a411a3
--- /dev/null
@@ -0,0 +1 @@
+sg
diff --git a/installer/m68k/modules/m68k/squashfs-modules b/installer/m68k/modules/m68k/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/m68k/modules/m68k/udf-modules b/installer/m68k/modules/m68k/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/m68k/modules/m68k/zlib-modules b/installer/m68k/modules/m68k/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/m68k/package-list b/installer/m68k/package-list
new file mode 100644 (file)
index 0000000..6caf4cb
--- /dev/null
@@ -0,0 +1,6 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+
diff --git a/installer/mips/kernel-versions b/installer/mips/kernel-versions
new file mode 100644 (file)
index 0000000..4bc5575
--- /dev/null
@@ -0,0 +1,3 @@
+# arch version flavour       installedname suffix build-depends
+mips   -       4kc-malta     -             y      -
+mips   -       octeon        -             y      -
diff --git a/installer/mips/modules/mips-4kc-malta/affs-modules b/installer/mips/modules/mips-4kc-malta/affs-modules
new file mode 100644 (file)
index 0000000..21d616a
--- /dev/null
@@ -0,0 +1 @@
+#include <affs-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/ata-modules b/installer/mips/modules/mips-4kc-malta/ata-modules
new file mode 100644 (file)
index 0000000..b81c0f3
--- /dev/null
@@ -0,0 +1 @@
+#include <ata-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/btrfs-modules b/installer/mips/modules/mips-4kc-malta/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/cdrom-core-modules b/installer/mips/modules/mips-4kc-malta/cdrom-core-modules
new file mode 100644 (file)
index 0000000..3ff69b4
--- /dev/null
@@ -0,0 +1 @@
+#include <cdrom-core-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/crc-modules b/installer/mips/modules/mips-4kc-malta/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/crypto-dm-modules b/installer/mips/modules/mips-4kc-malta/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/crypto-modules b/installer/mips/modules/mips-4kc-malta/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/event-modules b/installer/mips/modules/mips-4kc-malta/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/ext4-modules b/installer/mips/modules/mips-4kc-malta/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/fat-modules b/installer/mips/modules/mips-4kc-malta/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/fuse-modules b/installer/mips/modules/mips-4kc-malta/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/hfs-modules b/installer/mips/modules/mips-4kc-malta/hfs-modules
new file mode 100644 (file)
index 0000000..57d12f6
--- /dev/null
@@ -0,0 +1 @@
+#include <hfs-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/i2c-modules b/installer/mips/modules/mips-4kc-malta/i2c-modules
new file mode 100644 (file)
index 0000000..203a607
--- /dev/null
@@ -0,0 +1 @@
+#include <i2c-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/input-modules b/installer/mips/modules/mips-4kc-malta/input-modules
new file mode 100644 (file)
index 0000000..5ecb595
--- /dev/null
@@ -0,0 +1 @@
+#include <input-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/isofs-modules b/installer/mips/modules/mips-4kc-malta/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/jfs-modules b/installer/mips/modules/mips-4kc-malta/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/kernel-image b/installer/mips/modules/mips-4kc-malta/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/mips/modules/mips-4kc-malta/loop-modules b/installer/mips/modules/mips-4kc-malta/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/md-modules b/installer/mips/modules/mips-4kc-malta/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/minix-modules b/installer/mips/modules/mips-4kc-malta/minix-modules
new file mode 100644 (file)
index 0000000..82b9843
--- /dev/null
@@ -0,0 +1 @@
+#include <minix-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/mmc-core-modules b/installer/mips/modules/mips-4kc-malta/mmc-core-modules
new file mode 100644 (file)
index 0000000..7bf3846
--- /dev/null
@@ -0,0 +1 @@
+#include <mmc-core-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/mmc-modules b/installer/mips/modules/mips-4kc-malta/mmc-modules
new file mode 100644 (file)
index 0000000..dadfd53
--- /dev/null
@@ -0,0 +1 @@
+#include <mmc-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/mouse-modules b/installer/mips/modules/mips-4kc-malta/mouse-modules
new file mode 100644 (file)
index 0000000..15fcb00
--- /dev/null
@@ -0,0 +1 @@
+#include <mouse-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/multipath-modules b/installer/mips/modules/mips-4kc-malta/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/nbd-modules b/installer/mips/modules/mips-4kc-malta/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/nic-modules b/installer/mips/modules/mips-4kc-malta/nic-modules
new file mode 100644 (file)
index 0000000..44a607e
--- /dev/null
@@ -0,0 +1,4 @@
+#include <nic-modules>
+skfp -
+starfire -
+winbond-840 -
diff --git a/installer/mips/modules/mips-4kc-malta/nic-shared-modules b/installer/mips/modules/mips-4kc-malta/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/nic-usb-modules b/installer/mips/modules/mips-4kc-malta/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/nic-wireless-modules b/installer/mips/modules/mips-4kc-malta/nic-wireless-modules
new file mode 100644 (file)
index 0000000..53fd18d
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-wireless-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/ntfs-modules b/installer/mips/modules/mips-4kc-malta/ntfs-modules
new file mode 100644 (file)
index 0000000..ac1bc6a
--- /dev/null
@@ -0,0 +1 @@
+ntfs
diff --git a/installer/mips/modules/mips-4kc-malta/pata-modules b/installer/mips/modules/mips-4kc-malta/pata-modules
new file mode 100644 (file)
index 0000000..b0cd633
--- /dev/null
@@ -0,0 +1 @@
+#include <pata-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/ppp-modules b/installer/mips/modules/mips-4kc-malta/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/qnx4-modules b/installer/mips/modules/mips-4kc-malta/qnx4-modules
new file mode 100644 (file)
index 0000000..cd0c96d
--- /dev/null
@@ -0,0 +1 @@
+#include <qnx4-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/sata-modules b/installer/mips/modules/mips-4kc-malta/sata-modules
new file mode 100644 (file)
index 0000000..01318c2
--- /dev/null
@@ -0,0 +1 @@
+#include <sata-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/scsi-core-modules b/installer/mips/modules/mips-4kc-malta/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/scsi-modules b/installer/mips/modules/mips-4kc-malta/scsi-modules
new file mode 100644 (file)
index 0000000..8909dfb
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/sound-modules b/installer/mips/modules/mips-4kc-malta/sound-modules
new file mode 100644 (file)
index 0000000..68395ab
--- /dev/null
@@ -0,0 +1 @@
+#include <sound-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/squashfs-modules b/installer/mips/modules/mips-4kc-malta/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/udf-modules b/installer/mips/modules/mips-4kc-malta/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/usb-modules b/installer/mips/modules/mips-4kc-malta/usb-modules
new file mode 100644 (file)
index 0000000..c598ded
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/usb-serial-modules b/installer/mips/modules/mips-4kc-malta/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/usb-storage-modules b/installer/mips/modules/mips-4kc-malta/usb-storage-modules
new file mode 100644 (file)
index 0000000..8c5e81b
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-storage-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/virtio-modules b/installer/mips/modules/mips-4kc-malta/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/xfs-modules b/installer/mips/modules/mips-4kc-malta/xfs-modules
new file mode 100644 (file)
index 0000000..98374e2
--- /dev/null
@@ -0,0 +1 @@
+#include <xfs-modules>
diff --git a/installer/mips/modules/mips-4kc-malta/zlib-modules b/installer/mips/modules/mips-4kc-malta/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/mips/modules/mips-octeon/affs-modules b/installer/mips/modules/mips-octeon/affs-modules
new file mode 100644 (file)
index 0000000..21d616a
--- /dev/null
@@ -0,0 +1 @@
+#include <affs-modules>
diff --git a/installer/mips/modules/mips-octeon/btrfs-modules b/installer/mips/modules/mips-octeon/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/mips/modules/mips-octeon/cdrom-core-modules b/installer/mips/modules/mips-octeon/cdrom-core-modules
new file mode 100644 (file)
index 0000000..3ff69b4
--- /dev/null
@@ -0,0 +1 @@
+#include <cdrom-core-modules>
diff --git a/installer/mips/modules/mips-octeon/crc-modules b/installer/mips/modules/mips-octeon/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/mips/modules/mips-octeon/crypto-dm-modules b/installer/mips/modules/mips-octeon/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/mips/modules/mips-octeon/crypto-modules b/installer/mips/modules/mips-octeon/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/mips/modules/mips-octeon/event-modules b/installer/mips/modules/mips-octeon/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/mips/modules/mips-octeon/ext4-modules b/installer/mips/modules/mips-octeon/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/mips/modules/mips-octeon/fat-modules b/installer/mips/modules/mips-octeon/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/mips/modules/mips-octeon/fuse-modules b/installer/mips/modules/mips-octeon/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/mips/modules/mips-octeon/hfs-modules b/installer/mips/modules/mips-octeon/hfs-modules
new file mode 100644 (file)
index 0000000..57d12f6
--- /dev/null
@@ -0,0 +1 @@
+#include <hfs-modules>
diff --git a/installer/mips/modules/mips-octeon/input-modules b/installer/mips/modules/mips-octeon/input-modules
new file mode 100644 (file)
index 0000000..5ecb595
--- /dev/null
@@ -0,0 +1 @@
+#include <input-modules>
diff --git a/installer/mips/modules/mips-octeon/isofs-modules b/installer/mips/modules/mips-octeon/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/mips/modules/mips-octeon/jfs-modules b/installer/mips/modules/mips-octeon/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/mips/modules/mips-octeon/kernel-image b/installer/mips/modules/mips-octeon/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/mips/modules/mips-octeon/loop-modules b/installer/mips/modules/mips-octeon/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/mips/modules/mips-octeon/md-modules b/installer/mips/modules/mips-octeon/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/mips/modules/mips-octeon/minix-modules b/installer/mips/modules/mips-octeon/minix-modules
new file mode 100644 (file)
index 0000000..82b9843
--- /dev/null
@@ -0,0 +1 @@
+#include <minix-modules>
diff --git a/installer/mips/modules/mips-octeon/multipath-modules b/installer/mips/modules/mips-octeon/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/mips/modules/mips-octeon/nbd-modules b/installer/mips/modules/mips-octeon/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/mips/modules/mips-octeon/nic-modules b/installer/mips/modules/mips-octeon/nic-modules
new file mode 100644 (file)
index 0000000..3a2814f
--- /dev/null
@@ -0,0 +1,15 @@
+#include <nic-modules>
+8139cp -
+8139too -
+dmfe -
+e100 -
+epic100 -
+fealnx -
+natsemi -
+ne2k-pci -
+skfp -
+sundance -
+starfire -
+tulip -
+typhoon -
+winbond-840 -
diff --git a/installer/mips/modules/mips-octeon/nic-shared-modules b/installer/mips/modules/mips-octeon/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/mips/modules/mips-octeon/nic-usb-modules b/installer/mips/modules/mips-octeon/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/mips/modules/mips-octeon/nic-wireless-modules b/installer/mips/modules/mips-octeon/nic-wireless-modules
new file mode 100644 (file)
index 0000000..53fd18d
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-wireless-modules>
diff --git a/installer/mips/modules/mips-octeon/ntfs-modules b/installer/mips/modules/mips-octeon/ntfs-modules
new file mode 100644 (file)
index 0000000..ac1bc6a
--- /dev/null
@@ -0,0 +1 @@
+ntfs
diff --git a/installer/mips/modules/mips-octeon/pata-modules b/installer/mips/modules/mips-octeon/pata-modules
new file mode 100644 (file)
index 0000000..b0cd633
--- /dev/null
@@ -0,0 +1 @@
+#include <pata-modules>
diff --git a/installer/mips/modules/mips-octeon/ppp-modules b/installer/mips/modules/mips-octeon/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/mips/modules/mips-octeon/qnx4-modules b/installer/mips/modules/mips-octeon/qnx4-modules
new file mode 100644 (file)
index 0000000..cd0c96d
--- /dev/null
@@ -0,0 +1 @@
+#include <qnx4-modules>
diff --git a/installer/mips/modules/mips-octeon/rtc-modules b/installer/mips/modules/mips-octeon/rtc-modules
new file mode 100644 (file)
index 0000000..e20e792
--- /dev/null
@@ -0,0 +1 @@
+#include <rtc-modules>
diff --git a/installer/mips/modules/mips-octeon/sata-modules b/installer/mips/modules/mips-octeon/sata-modules
new file mode 100644 (file)
index 0000000..01318c2
--- /dev/null
@@ -0,0 +1 @@
+#include <sata-modules>
diff --git a/installer/mips/modules/mips-octeon/scsi-core-modules b/installer/mips/modules/mips-octeon/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/mips/modules/mips-octeon/scsi-modules b/installer/mips/modules/mips-octeon/scsi-modules
new file mode 100644 (file)
index 0000000..44a9049
--- /dev/null
@@ -0,0 +1,6 @@
+#include <scsi-modules>
+DAC960 -
+cciss -
+dmx3191d -
+ips -
+sym53c8xx -
diff --git a/installer/mips/modules/mips-octeon/sound-modules b/installer/mips/modules/mips-octeon/sound-modules
new file mode 100644 (file)
index 0000000..68395ab
--- /dev/null
@@ -0,0 +1 @@
+#include <sound-modules>
diff --git a/installer/mips/modules/mips-octeon/squashfs-modules b/installer/mips/modules/mips-octeon/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/mips/modules/mips-octeon/udf-modules b/installer/mips/modules/mips-octeon/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/mips/modules/mips-octeon/usb-modules b/installer/mips/modules/mips-octeon/usb-modules
new file mode 100644 (file)
index 0000000..6c3464a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <usb-modules>
+octeon-hcd
diff --git a/installer/mips/modules/mips-octeon/usb-serial-modules b/installer/mips/modules/mips-octeon/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/mips/modules/mips-octeon/usb-storage-modules b/installer/mips/modules/mips-octeon/usb-storage-modules
new file mode 100644 (file)
index 0000000..8c5e81b
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-storage-modules>
diff --git a/installer/mips/modules/mips-octeon/virtio-modules b/installer/mips/modules/mips-octeon/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/mips/modules/mips-octeon/xfs-modules b/installer/mips/modules/mips-octeon/xfs-modules
new file mode 100644 (file)
index 0000000..98374e2
--- /dev/null
@@ -0,0 +1 @@
+#include <xfs-modules>
diff --git a/installer/mips/modules/mips-octeon/zlib-modules b/installer/mips/modules/mips-octeon/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/mips/modules/mips/btrfs-modules b/installer/mips/modules/mips/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/mips/modules/mips/crc-modules b/installer/mips/modules/mips/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/mips/modules/mips/crypto-dm-modules b/installer/mips/modules/mips/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/mips/modules/mips/crypto-modules b/installer/mips/modules/mips/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/mips/modules/mips/ext4-modules b/installer/mips/modules/mips/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/mips/modules/mips/fuse-modules b/installer/mips/modules/mips/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/mips/modules/mips/isofs-modules b/installer/mips/modules/mips/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/mips/modules/mips/jfs-modules b/installer/mips/modules/mips/jfs-modules
new file mode 100644 (file)
index 0000000..925a43a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <jfs-modules>
+
diff --git a/installer/mips/modules/mips/kernel-image b/installer/mips/modules/mips/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/mips/modules/mips/loop-modules b/installer/mips/modules/mips/loop-modules
new file mode 100644 (file)
index 0000000..1644677
--- /dev/null
@@ -0,0 +1,2 @@
+#include <loop-modules>
+
diff --git a/installer/mips/modules/mips/md-modules b/installer/mips/modules/mips/md-modules
new file mode 100644 (file)
index 0000000..ade088d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <md-modules>
+
diff --git a/installer/mips/modules/mips/multipath-modules b/installer/mips/modules/mips/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/mips/modules/mips/nbd-modules b/installer/mips/modules/mips/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/mips/modules/mips/nic-shared-modules b/installer/mips/modules/mips/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/mips/modules/mips/squashfs-modules b/installer/mips/modules/mips/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/mips/modules/mips/udf-modules b/installer/mips/modules/mips/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/mips/modules/mips/xfs-modules b/installer/mips/modules/mips/xfs-modules
new file mode 100644 (file)
index 0000000..c020b5d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <xfs-modules>
+
diff --git a/installer/mips/modules/mips/zlib-modules b/installer/mips/modules/mips/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/mips/package-list b/installer/mips/package-list
new file mode 100644 (file)
index 0000000..b7141bb
--- /dev/null
@@ -0,0 +1,7 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: rtc-modules
diff --git a/installer/mips64/kernel-versions b/installer/mips64/kernel-versions
new file mode 100644 (file)
index 0000000..24a6c52
--- /dev/null
@@ -0,0 +1,3 @@
+# arch version flavour       installedname suffix build-depends
+mips64   -       5kc-malta     -             y      -
+mips64   -       octeon        -             y      -
diff --git a/installer/mips64/modules/mips64 b/installer/mips64/modules/mips64
new file mode 120000 (symlink)
index 0000000..d3bf739
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips
\ No newline at end of file
diff --git a/installer/mips64/modules/mips64-5kc-malta b/installer/mips64/modules/mips64-5kc-malta
new file mode 120000 (symlink)
index 0000000..84b512e
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips-4kc-malta
\ No newline at end of file
diff --git a/installer/mips64/modules/mips64-octeon b/installer/mips64/modules/mips64-octeon
new file mode 120000 (symlink)
index 0000000..da584c6
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips-octeon
\ No newline at end of file
diff --git a/installer/mips64/package-list b/installer/mips64/package-list
new file mode 100644 (file)
index 0000000..b7141bb
--- /dev/null
@@ -0,0 +1,7 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: rtc-modules
diff --git a/installer/mips64el/kernel-versions b/installer/mips64el/kernel-versions
new file mode 100644 (file)
index 0000000..7135f74
--- /dev/null
@@ -0,0 +1,4 @@
+# arch version flavour       installedname suffix build-depends
+mips64el -       5kc-malta     -             y      -
+mips64el -       loongson-3    -             y      -
+mips64el -       octeon        -             y      -
diff --git a/installer/mips64el/modules/mips64el-5kc-malta b/installer/mips64el/modules/mips64el-5kc-malta
new file mode 120000 (symlink)
index 0000000..84b512e
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips-4kc-malta
\ No newline at end of file
diff --git a/installer/mips64el/modules/mips64el-loongson-3 b/installer/mips64el/modules/mips64el-loongson-3
new file mode 120000 (symlink)
index 0000000..7f6e967
--- /dev/null
@@ -0,0 +1 @@
+../../mipsel/modules/mipsel-loongson-3
\ No newline at end of file
diff --git a/installer/mips64el/modules/mips64el-octeon b/installer/mips64el/modules/mips64el-octeon
new file mode 120000 (symlink)
index 0000000..da584c6
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips-octeon
\ No newline at end of file
diff --git a/installer/mips64el/package-list b/installer/mips64el/package-list
new file mode 100644 (file)
index 0000000..621363a
--- /dev/null
@@ -0,0 +1,8 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: rtc-modules
+Provides_loongson-3: i2c-modules, rtc-modules
diff --git a/installer/mips64r6/kernel-versions b/installer/mips64r6/kernel-versions
new file mode 100644 (file)
index 0000000..a4e3787
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour       installedname suffix build-depends
+mips64r6   -       mips64r6     -             y      -
diff --git a/installer/mips64r6/modules/mips64r6 b/installer/mips64r6/modules/mips64r6
new file mode 120000 (symlink)
index 0000000..d3bf739
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips
\ No newline at end of file
diff --git a/installer/mips64r6/package-list b/installer/mips64r6/package-list
new file mode 100644 (file)
index 0000000..b7141bb
--- /dev/null
@@ -0,0 +1,7 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: rtc-modules
diff --git a/installer/mips64r6el/kernel-versions b/installer/mips64r6el/kernel-versions
new file mode 100644 (file)
index 0000000..426e2ba
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour       installedname suffix build-depends
+mips64r6el   -       mips64r6     -             y      -
diff --git a/installer/mips64r6el/modules/mips64r6 b/installer/mips64r6el/modules/mips64r6
new file mode 120000 (symlink)
index 0000000..d3bf739
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips
\ No newline at end of file
diff --git a/installer/mips64r6el/package-list b/installer/mips64r6el/package-list
new file mode 100644 (file)
index 0000000..b7141bb
--- /dev/null
@@ -0,0 +1,7 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: rtc-modules
diff --git a/installer/mipsel/kernel-versions b/installer/mipsel/kernel-versions
new file mode 100644 (file)
index 0000000..dcf3510
--- /dev/null
@@ -0,0 +1,4 @@
+# arch version flavour       installedname suffix build-depends
+mipsel -       4kc-malta     -             y      -
+mipsel -       loongson-3    -             y      -
+mipsel -       octeon        -             y      -
diff --git a/installer/mipsel/modules/mipsel-4kc-malta b/installer/mipsel/modules/mipsel-4kc-malta
new file mode 120000 (symlink)
index 0000000..84b512e
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips-4kc-malta
\ No newline at end of file
diff --git a/installer/mipsel/modules/mipsel-loongson-3/affs-modules b/installer/mipsel/modules/mipsel-loongson-3/affs-modules
new file mode 100644 (file)
index 0000000..21d616a
--- /dev/null
@@ -0,0 +1 @@
+#include <affs-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/ata-modules b/installer/mipsel/modules/mipsel-loongson-3/ata-modules
new file mode 100644 (file)
index 0000000..b81c0f3
--- /dev/null
@@ -0,0 +1 @@
+#include <ata-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/btrfs-modules b/installer/mipsel/modules/mipsel-loongson-3/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/cdrom-core-modules b/installer/mipsel/modules/mipsel-loongson-3/cdrom-core-modules
new file mode 100644 (file)
index 0000000..3ff69b4
--- /dev/null
@@ -0,0 +1 @@
+#include <cdrom-core-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/crc-modules b/installer/mipsel/modules/mipsel-loongson-3/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/crypto-dm-modules b/installer/mipsel/modules/mipsel-loongson-3/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/crypto-modules b/installer/mipsel/modules/mipsel-loongson-3/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/event-modules b/installer/mipsel/modules/mipsel-loongson-3/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/ext4-modules b/installer/mipsel/modules/mipsel-loongson-3/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/fat-modules b/installer/mipsel/modules/mipsel-loongson-3/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/fb-modules b/installer/mipsel/modules/mipsel-loongson-3/fb-modules
new file mode 100644 (file)
index 0000000..553c79c
--- /dev/null
@@ -0,0 +1 @@
+radeon
diff --git a/installer/mipsel/modules/mipsel-loongson-3/firewire-core-modules b/installer/mipsel/modules/mipsel-loongson-3/firewire-core-modules
new file mode 100644 (file)
index 0000000..dcac80a
--- /dev/null
@@ -0,0 +1 @@
+#include <firewire-core-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/fuse-modules b/installer/mipsel/modules/mipsel-loongson-3/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/hfs-modules b/installer/mipsel/modules/mipsel-loongson-3/hfs-modules
new file mode 100644 (file)
index 0000000..57d12f6
--- /dev/null
@@ -0,0 +1 @@
+#include <hfs-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/input-modules b/installer/mipsel/modules/mipsel-loongson-3/input-modules
new file mode 100644 (file)
index 0000000..5ecb595
--- /dev/null
@@ -0,0 +1 @@
+#include <input-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/isofs-modules b/installer/mipsel/modules/mipsel-loongson-3/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/jfs-modules b/installer/mipsel/modules/mipsel-loongson-3/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/kernel-image b/installer/mipsel/modules/mipsel-loongson-3/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/loop-modules b/installer/mipsel/modules/mipsel-loongson-3/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/md-modules b/installer/mipsel/modules/mipsel-loongson-3/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/minix-modules b/installer/mipsel/modules/mipsel-loongson-3/minix-modules
new file mode 100644 (file)
index 0000000..82b9843
--- /dev/null
@@ -0,0 +1 @@
+#include <minix-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/multipath-modules b/installer/mipsel/modules/mipsel-loongson-3/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/nbd-modules b/installer/mipsel/modules/mipsel-loongson-3/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/nfs-modules b/installer/mipsel/modules/mipsel-loongson-3/nfs-modules
new file mode 100644 (file)
index 0000000..946fb8e
--- /dev/null
@@ -0,0 +1 @@
+#include <nfs-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/nic-modules b/installer/mipsel/modules/mipsel-loongson-3/nic-modules
new file mode 100644 (file)
index 0000000..a2feefc
--- /dev/null
@@ -0,0 +1,11 @@
+#include <nic-modules>
+dmfe -
+epic100 -
+fealnx -
+natsemi -
+skfp -
+starfire -
+sundance -
+tulip -
+typhoon -
+winbond-840 -
diff --git a/installer/mipsel/modules/mipsel-loongson-3/nic-shared-modules b/installer/mipsel/modules/mipsel-loongson-3/nic-shared-modules
new file mode 100644 (file)
index 0000000..cc84b14
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-shared-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/nic-usb-modules b/installer/mipsel/modules/mipsel-loongson-3/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/nic-wireless-modules b/installer/mipsel/modules/mipsel-loongson-3/nic-wireless-modules
new file mode 100644 (file)
index 0000000..53fd18d
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-wireless-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/ntfs-modules b/installer/mipsel/modules/mipsel-loongson-3/ntfs-modules
new file mode 100644 (file)
index 0000000..ac1bc6a
--- /dev/null
@@ -0,0 +1 @@
+ntfs
diff --git a/installer/mipsel/modules/mipsel-loongson-3/pata-modules b/installer/mipsel/modules/mipsel-loongson-3/pata-modules
new file mode 100644 (file)
index 0000000..b0cd633
--- /dev/null
@@ -0,0 +1 @@
+#include <pata-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/ppp-modules b/installer/mipsel/modules/mipsel-loongson-3/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/qnx4-modules b/installer/mipsel/modules/mipsel-loongson-3/qnx4-modules
new file mode 100644 (file)
index 0000000..cd0c96d
--- /dev/null
@@ -0,0 +1 @@
+#include <qnx4-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/sata-modules b/installer/mipsel/modules/mipsel-loongson-3/sata-modules
new file mode 100644 (file)
index 0000000..01318c2
--- /dev/null
@@ -0,0 +1 @@
+#include <sata-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/scsi-core-modules b/installer/mipsel/modules/mipsel-loongson-3/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/scsi-modules b/installer/mipsel/modules/mipsel-loongson-3/scsi-modules
new file mode 100644 (file)
index 0000000..44a9049
--- /dev/null
@@ -0,0 +1,6 @@
+#include <scsi-modules>
+DAC960 -
+cciss -
+dmx3191d -
+ips -
+sym53c8xx -
diff --git a/installer/mipsel/modules/mipsel-loongson-3/sound-modules b/installer/mipsel/modules/mipsel-loongson-3/sound-modules
new file mode 100644 (file)
index 0000000..68395ab
--- /dev/null
@@ -0,0 +1 @@
+#include <sound-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/speakup-modules b/installer/mipsel/modules/mipsel-loongson-3/speakup-modules
new file mode 100644 (file)
index 0000000..2959272
--- /dev/null
@@ -0,0 +1 @@
+#include <speakup-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/squashfs-modules b/installer/mipsel/modules/mipsel-loongson-3/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/udf-modules b/installer/mipsel/modules/mipsel-loongson-3/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/usb-modules b/installer/mipsel/modules/mipsel-loongson-3/usb-modules
new file mode 100644 (file)
index 0000000..c598ded
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/usb-serial-modules b/installer/mipsel/modules/mipsel-loongson-3/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/usb-storage-modules b/installer/mipsel/modules/mipsel-loongson-3/usb-storage-modules
new file mode 100644 (file)
index 0000000..8c5e81b
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-storage-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/virtio-modules b/installer/mipsel/modules/mipsel-loongson-3/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/xfs-modules b/installer/mipsel/modules/mipsel-loongson-3/xfs-modules
new file mode 100644 (file)
index 0000000..98374e2
--- /dev/null
@@ -0,0 +1 @@
+#include <xfs-modules>
diff --git a/installer/mipsel/modules/mipsel-loongson-3/zlib-modules b/installer/mipsel/modules/mipsel-loongson-3/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/mipsel/modules/mipsel-octeon b/installer/mipsel/modules/mipsel-octeon
new file mode 120000 (symlink)
index 0000000..da584c6
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips-octeon
\ No newline at end of file
diff --git a/installer/mipsel/package-list b/installer/mipsel/package-list
new file mode 100644 (file)
index 0000000..621363a
--- /dev/null
@@ -0,0 +1,8 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: rtc-modules
+Provides_loongson-3: i2c-modules, rtc-modules
diff --git a/installer/mipsr6/kernel-versions b/installer/mipsr6/kernel-versions
new file mode 100644 (file)
index 0000000..db5d2d2
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour       installedname suffix build-depends
+mipsr6   -       mips32r6     -             y      -
diff --git a/installer/mipsr6/modules/mips32r6 b/installer/mipsr6/modules/mips32r6
new file mode 120000 (symlink)
index 0000000..d3bf739
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips
\ No newline at end of file
diff --git a/installer/mipsr6/package-list b/installer/mipsr6/package-list
new file mode 100644 (file)
index 0000000..b7141bb
--- /dev/null
@@ -0,0 +1,7 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: rtc-modules
diff --git a/installer/mipsr6el/kernel-versions b/installer/mipsr6el/kernel-versions
new file mode 100644 (file)
index 0000000..330e1ed
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour       installedname suffix build-depends
+mipsr6el   -       mips32r6     -             y      -
diff --git a/installer/mipsr6el/modules/mips32r6 b/installer/mipsr6el/modules/mips32r6
new file mode 120000 (symlink)
index 0000000..d3bf739
--- /dev/null
@@ -0,0 +1 @@
+../../mips/modules/mips
\ No newline at end of file
diff --git a/installer/mipsr6el/package-list b/installer/mipsr6el/package-list
new file mode 100644 (file)
index 0000000..b7141bb
--- /dev/null
@@ -0,0 +1,7 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: rtc-modules
diff --git a/installer/modules/acpi-modules b/installer/modules/acpi-modules
new file mode 100644 (file)
index 0000000..d4723a1
--- /dev/null
@@ -0,0 +1,2 @@
+fan
+thermal
diff --git a/installer/modules/affs-modules b/installer/modules/affs-modules
new file mode 100644 (file)
index 0000000..ac28259
--- /dev/null
@@ -0,0 +1 @@
+affs
diff --git a/installer/modules/ata-modules b/installer/modules/ata-modules
new file mode 100644 (file)
index 0000000..6ca33ce
--- /dev/null
@@ -0,0 +1,2 @@
+libata
+ata_generic
diff --git a/installer/modules/btrfs-modules b/installer/modules/btrfs-modules
new file mode 100644 (file)
index 0000000..00531f6
--- /dev/null
@@ -0,0 +1 @@
+btrfs
diff --git a/installer/modules/cdrom-core-modules b/installer/modules/cdrom-core-modules
new file mode 100644 (file)
index 0000000..62e5e83
--- /dev/null
@@ -0,0 +1,2 @@
+cdrom ?
+sr_mod ?
diff --git a/installer/modules/crc-modules b/installer/modules/crc-modules
new file mode 100644 (file)
index 0000000..5654d80
--- /dev/null
@@ -0,0 +1,5 @@
+crc-ccitt
+libcrc32c
+crc32c_generic
+crc-itu-t
+crc16
diff --git a/installer/modules/crypto-dm-modules b/installer/modules/crypto-dm-modules
new file mode 100644 (file)
index 0000000..189131f
--- /dev/null
@@ -0,0 +1 @@
+dm-crypt
diff --git a/installer/modules/crypto-modules b/installer/modules/crypto-modules
new file mode 100644 (file)
index 0000000..40ee863
--- /dev/null
@@ -0,0 +1,9 @@
+aes_generic
+blowfish_generic
+twofish_generic
+serpent_generic
+sha256_generic
+cbc ?
+ccm
+ctr
+xts
diff --git a/installer/modules/efi-modules b/installer/modules/efi-modules
new file mode 100644 (file)
index 0000000..9173272
--- /dev/null
@@ -0,0 +1 @@
+efivars
diff --git a/installer/modules/event-modules b/installer/modules/event-modules
new file mode 100644 (file)
index 0000000..97a5e58
--- /dev/null
@@ -0,0 +1 @@
+evdev
diff --git a/installer/modules/ext4-modules b/installer/modules/ext4-modules
new file mode 100644 (file)
index 0000000..6100342
--- /dev/null
@@ -0,0 +1,2 @@
+ext4
+jbd2
diff --git a/installer/modules/fat-modules b/installer/modules/fat-modules
new file mode 100644 (file)
index 0000000..0498cf8
--- /dev/null
@@ -0,0 +1,6 @@
+fat ?
+vfat
+# the default codepage for fat (as of 2.6.8)
+nls_cp437 ?
+# the default i/o character set for fat (as of 4.7.2-1)
+nls_ascii ?
diff --git a/installer/modules/firewire-core-modules b/installer/modules/firewire-core-modules
new file mode 100644 (file)
index 0000000..bcc31d5
--- /dev/null
@@ -0,0 +1,3 @@
+firewire-core
+firewire-ohci
+firewire-sbp2
diff --git a/installer/modules/fuse-modules b/installer/modules/fuse-modules
new file mode 100644 (file)
index 0000000..a517c48
--- /dev/null
@@ -0,0 +1 @@
+fuse
diff --git a/installer/modules/hfs-modules b/installer/modules/hfs-modules
new file mode 100644 (file)
index 0000000..4a31155
--- /dev/null
@@ -0,0 +1,2 @@
+hfs
+hfsplus
diff --git a/installer/modules/hyperv-modules b/installer/modules/hyperv-modules
new file mode 100644 (file)
index 0000000..4c7d2cd
--- /dev/null
@@ -0,0 +1,7 @@
+# All Hyper-V paravirtual drivers
+hid-hyperv
+hv_netvsc
+hv_storvsc
+hv_utils
+hv_vmbus
+hyperv-keyboard
diff --git a/installer/modules/i2c-modules b/installer/modules/i2c-modules
new file mode 100644 (file)
index 0000000..0c4999f
--- /dev/null
@@ -0,0 +1,3 @@
+i2c-core
+i2c-algo-bit
+i2c-designware-platform ?
diff --git a/installer/modules/input-modules b/installer/modules/input-modules
new file mode 100644 (file)
index 0000000..3245d16
--- /dev/null
@@ -0,0 +1,39 @@
+# Include HID drivers by default
+drivers/hid/**
+
+# Exclude hid-hyperv, packaged in hyperv-modules
+hid-hyperv -
+
+# Exclude drivers for anything but keyboard and mouse/trackball/touchpad
+drivers/hid/hid-*ff -
+hid-dr -
+hid-elecom -
+hid-gyration -
+hid-icade -
+hid-lcpower -
+hid-ntrig -
+hid-petalynx -
+hid-picolcd -
+hid-pl -
+hid-prodikeys -
+hid-ps3remote -
+hid-quanta -
+drivers/hid/hid-roccat-ko* -
+hid-roccat-pyra -
+hid-saitek -
+hid-sensor-hub -
+hid-sony -
+hid-tivo -
+hid-twinhan -
+hid-uclogic -
+hid-wacom -
+hid-waltop -
+hid-wiimote -
+hid-zydacron -
+wacom -
+
+# Miscellaneous input drivers
+synaptics_usb ?
+wistron_btns ?
+gpio_keys ?
+soc_button_array ?
diff --git a/installer/modules/ipv6-modules b/installer/modules/ipv6-modules
new file mode 100644 (file)
index 0000000..13ac34b
--- /dev/null
@@ -0,0 +1 @@
+ipv6
diff --git a/installer/modules/isofs-modules b/installer/modules/isofs-modules
new file mode 100644 (file)
index 0000000..0f41779
--- /dev/null
@@ -0,0 +1 @@
+isofs
diff --git a/installer/modules/jffs2-modules b/installer/modules/jffs2-modules
new file mode 100644 (file)
index 0000000..19f4e10
--- /dev/null
@@ -0,0 +1 @@
+jffs2
diff --git a/installer/modules/jfs-modules b/installer/modules/jfs-modules
new file mode 100644 (file)
index 0000000..aa604c4
--- /dev/null
@@ -0,0 +1 @@
+jfs
diff --git a/installer/modules/kernel-image b/installer/modules/kernel-image
new file mode 100644 (file)
index 0000000..a008c88
--- /dev/null
@@ -0,0 +1,8 @@
+bitrev ?
+eeprom_93cx6 ?
+led-class ?
+mbcache
+# Default I/O charset for most filesystems that do character conversion
+nls_utf8
+
+mfd-core ?
diff --git a/installer/modules/leds-modules b/installer/modules/leds-modules
new file mode 100644 (file)
index 0000000..fef2e53
--- /dev/null
@@ -0,0 +1 @@
+leds-gpio
diff --git a/installer/modules/loop-modules b/installer/modules/loop-modules
new file mode 100644 (file)
index 0000000..1ef2ddf
--- /dev/null
@@ -0,0 +1 @@
+loop
diff --git a/installer/modules/lzo-modules b/installer/modules/lzo-modules
new file mode 100644 (file)
index 0000000..d1a1583
--- /dev/null
@@ -0,0 +1 @@
+lzo_compress
diff --git a/installer/modules/md-modules b/installer/modules/md-modules
new file mode 100644 (file)
index 0000000..923cba0
--- /dev/null
@@ -0,0 +1,15 @@
+linear
+md-mod
+dm-mod
+multipath
+raid0
+raid1
+raid456
+raid10
+dm-mirror
+dm-snapshot
+bcache
+
+# RAID-related libraries, also used by btrfs
+raid6_pq
+xor
diff --git a/installer/modules/minix-modules b/installer/modules/minix-modules
new file mode 100644 (file)
index 0000000..aa6ca5d
--- /dev/null
@@ -0,0 +1 @@
+minix
diff --git a/installer/modules/mmc-core-modules b/installer/modules/mmc-core-modules
new file mode 100644 (file)
index 0000000..67128ea
--- /dev/null
@@ -0,0 +1 @@
+mmc_core
diff --git a/installer/modules/mmc-modules b/installer/modules/mmc-modules
new file mode 100644 (file)
index 0000000..c7aa372
--- /dev/null
@@ -0,0 +1,8 @@
+mmc_block
+drivers/mmc/host/**
+
+# Multifunction card reader driver
+tifm_7xx1 ?
+
+# Adds a dependency on pcmcia-modules
+sdricoh_cs -
diff --git a/installer/modules/mouse-modules b/installer/modules/mouse-modules
new file mode 100644 (file)
index 0000000..8d65ba4
--- /dev/null
@@ -0,0 +1 @@
+psmouse
diff --git a/installer/modules/mtd-modules b/installer/modules/mtd-modules
new file mode 100644 (file)
index 0000000..637116f
--- /dev/null
@@ -0,0 +1,2 @@
+mtd
+mtdblock
diff --git a/installer/modules/multipath-modules b/installer/modules/multipath-modules
new file mode 100644 (file)
index 0000000..3b96ab9
--- /dev/null
@@ -0,0 +1,3 @@
+dm-multipath
+dm-round-robin
+dm-service-time
diff --git a/installer/modules/nbd-modules b/installer/modules/nbd-modules
new file mode 100644 (file)
index 0000000..cb3ca60
--- /dev/null
@@ -0,0 +1 @@
+nbd
diff --git a/installer/modules/nfs-modules b/installer/modules/nfs-modules
new file mode 100644 (file)
index 0000000..a5bfd2c
--- /dev/null
@@ -0,0 +1,3 @@
+nfs
+lockd
+sunrpc
diff --git a/installer/modules/nic-modules b/installer/modules/nic-modules
new file mode 100644 (file)
index 0000000..0c4b2fb
--- /dev/null
@@ -0,0 +1,23 @@
+# Include Ethernet switch, controller and PHY drivers by default
+drivers/net/dsa/** ?
+drivers/net/ethernet/**
+drivers/net/phy/*
+
+# Include paravirtual network drivers with minimal dependencies
+vmxnet3 ?
+xen-netfront ?
+
+# Include VLAN driver
+8021q
+
+# Exclude drivers packaged in nic-pcmcia-modules
+drivers/net/**_cs -
+b44 -
+xircom_cb -
+
+# Exclude libraries packaged in nic-{common,shared} modules
+8390 -
+libphy -
+
+# Exclude iSCSI drivers packaged in scsi-modules
+cnic -
diff --git a/installer/modules/nic-pcmcia-modules b/installer/modules/nic-pcmcia-modules
new file mode 100644 (file)
index 0000000..31c360d
--- /dev/null
@@ -0,0 +1,10 @@
+# Include PCMCIA Ethernet and wireless drivers by default
+drivers/net/ethernet/**_cs
+drivers/net/wireless/**_cs
+b44 ?
+hostap_plx ?
+xircom_cb
+
+# Exclude drivers packaged in nic-wireless-modules
+libertas_cs -
+spectrum_cs -
diff --git a/installer/modules/nic-shared-modules b/installer/modules/nic-shared-modules
new file mode 100644 (file)
index 0000000..c672dfb
--- /dev/null
@@ -0,0 +1,5 @@
+8390 ?
+libphy ?
+mii ?
+pps_core ?
+ptp ?
diff --git a/installer/modules/nic-usb-modules b/installer/modules/nic-usb-modules
new file mode 100644 (file)
index 0000000..332e015
--- /dev/null
@@ -0,0 +1,15 @@
+# Include USB wired drivers by default
+drivers/net/usb/*
+
+# Include rndis_wlan, which depends on rndis_host
+rndis_wlan
+
+# Exclude wireless modem drivers which need extra configuration
+cdc_mbim -
+cdc-phonet -
+hso -
+huawei_cdc_ncm -
+kalmia -
+lg-vl600 -
+qmi_wwan -
+sierra_net -
diff --git a/installer/modules/nic-wireless-modules b/installer/modules/nic-wireless-modules
new file mode 100644 (file)
index 0000000..104a3a1
--- /dev/null
@@ -0,0 +1,31 @@
+# Include wireless drivers by default
+drivers/net/wireless/**
+
+# Include staging wireless drivers
+prism2_usb ?
+drivers/staging/rtl8** ?
+vt6656_stage ?
+
+# Exclude drivers packaged in nic-pcmcia-modules
+drivers/net/wireless/**_cs -
+airo -
+hostap_plx -
+
+# Don't separate these from their driver families
+libertas_cs ?
+spectrum_cs ?
+
+# Exclude drivers packaged in nic-usb-modules
+rndis_wlan -
+
+# Exclude debug driver
+mac80211_hwsim -
+
+# lib80211 encryption algorithms
+lib80211_crypt_wep ?
+lib80211_crypt_ccmp ?
+lib80211_crypt_tkip ?
+
+# Crypto modules needed for ieee80211 WEP support
+ecb ?
+arc4 ?
diff --git a/installer/modules/pata-modules b/installer/modules/pata-modules
new file mode 100644 (file)
index 0000000..1d963a1
--- /dev/null
@@ -0,0 +1,9 @@
+# Include PATA drivers by default
+drivers/ata/pata_*
+
+# Exclude pata_sis, which goes in sata-modules as a dependency of sata_sis
+pata_sis -
+
+# Exclude drivers packaged in pcmcia-storage-modules
+pata_ninja32 -
+pata_pcmcia -
diff --git a/installer/modules/pcmcia-modules b/installer/modules/pcmcia-modules
new file mode 100644 (file)
index 0000000..ab5b4b2
--- /dev/null
@@ -0,0 +1,8 @@
+pcmcia
+
+i82092
+i82365 ?
+pcmcia_core
+tcic ?
+yenta_socket
+pd6729 ?
diff --git a/installer/modules/pcmcia-storage-modules b/installer/modules/pcmcia-storage-modules
new file mode 100644 (file)
index 0000000..b6b1721
--- /dev/null
@@ -0,0 +1,2 @@
+pata_ninja32 ?
+pata_pcmcia ?
diff --git a/installer/modules/ppp-modules b/installer/modules/ppp-modules
new file mode 100644 (file)
index 0000000..0dd77f0
--- /dev/null
@@ -0,0 +1,5 @@
+ppp_async ?
+ppp_deflate
+ppp_synctty ?
+pppoe
+pppox
diff --git a/installer/modules/qnx4-modules b/installer/modules/qnx4-modules
new file mode 100644 (file)
index 0000000..05d4adc
--- /dev/null
@@ -0,0 +1 @@
+qnx4
diff --git a/installer/modules/rtc-modules b/installer/modules/rtc-modules
new file mode 100644 (file)
index 0000000..0a78e78
--- /dev/null
@@ -0,0 +1,2 @@
+rtc ?
+rtc-cmos
diff --git a/installer/modules/sata-modules b/installer/modules/sata-modules
new file mode 100644 (file)
index 0000000..e3be90b
--- /dev/null
@@ -0,0 +1,16 @@
+# Include SATA drivers by default
+drivers/ata/ahci* ?
+drivers/ata/sata_*
+
+# sata-sis depends on pata-sis; avoid a dependency
+pata_sis ?
+
+# Include more SATA drivers with unusual names
+acard-ahci ?
+ata_piix ?
+sx8 ?
+pdc_adma ?
+mtip32xx ?
+
+# XXX not actually SATA
+nvme ?
diff --git a/installer/modules/scsi-core-modules b/installer/modules/scsi-core-modules
new file mode 100644 (file)
index 0000000..e0d1d8f
--- /dev/null
@@ -0,0 +1,4 @@
+scsi_mod
+sd_mod
+scsi_transport_sas ?
+scsi_transport_spi ?
diff --git a/installer/modules/scsi-modules b/installer/modules/scsi-modules
new file mode 100644 (file)
index 0000000..577914a
--- /dev/null
@@ -0,0 +1,50 @@
+# Include SCSI controller drivers by default
+drivers/scsi/**
+DAC960 ?
+cciss ?
+mptfc
+mptsas
+mptspi
+
+# Include iSCSI boot support
+iscsi_ibft ?
+
+# Include Xen block driver even though it's not SCSI
+xen-blkfront ?
+
+# Exclude hv_storvsc, packaged in hyperv-modules
+hv_storvsc -
+
+# Exclude virtio_scsi, packaged in virtio-modules
+virtio_scsi -
+
+# Exclude PCMCIA drivers, which depend on pcmcia-modules (FIXME)
+drivers/scsi/pcmcia/* -
+
+# Exclude Chelsio iSCSI drivers, which depend on the corresponding Ethernet
+# drivers in nic-modules (FIXME)
+drivers/scsi/cxgbi/* -
+cxgb3i -
+cxgb4i -
+
+# Exclude enclosure driver
+ses -
+
+# Exclude target drivers
+tcm_qla2xxx -
+
+# Exclude common code packaged in {cdrom,scsi}-core-modules
+scsi_mod -
+sd_mod -
+sr_mod -
+scsi_transport_sas -
+scsi_transport_spi -
+
+# Exclude any other common code that isn't pulled in by dependencies
+drivers/scsi/device_handler/* -
+drivers/scsi/lib** -
+drivers/scsi/osd/* -
+drivers/scsi/scsi_transport_* -
+fcoe -
+raid_class -
+scsi_debug -
diff --git a/installer/modules/serial-modules b/installer/modules/serial-modules
new file mode 100644 (file)
index 0000000..e046330
--- /dev/null
@@ -0,0 +1,3 @@
+rp2 ?
+serial_cs
+synclink_cs ?
diff --git a/installer/modules/sound-modules b/installer/modules/sound-modules
new file mode 100644 (file)
index 0000000..7bd30ee
--- /dev/null
@@ -0,0 +1,15 @@
+# Include sound drivers by default
+sound/**
+
+# Exclude any core/shared modules that aren't pulled in by dependencies
+sound/core/** -
+sound/drivers/** -
+sound/i2c/** -
+
+# Exclude synthesiser drivers
+snd-adlib -
+sound/**-synth -
+
+# Exclude soft-modem drivers
+sound/**-modem -
+snd-intel8x0m -
diff --git a/installer/modules/speakup-modules b/installer/modules/speakup-modules
new file mode 100644 (file)
index 0000000..16822b9
--- /dev/null
@@ -0,0 +1,15 @@
+speakup
+speakup_acntpc ?
+speakup_acntsa
+speakup_apollo
+speakup_audptr
+speakup_bns
+speakup_decext
+speakup_dectlk
+speakup_dtlk ?
+speakup_dummy
+speakup_keypc ?
+speakup_ltlk
+speakup_soft
+speakup_spkout
+speakup_txprt
diff --git a/installer/modules/squashfs-modules b/installer/modules/squashfs-modules
new file mode 100644 (file)
index 0000000..7c1157f
--- /dev/null
@@ -0,0 +1 @@
+squashfs
diff --git a/installer/modules/udf-modules b/installer/modules/udf-modules
new file mode 100644 (file)
index 0000000..97c604f
--- /dev/null
@@ -0,0 +1 @@
+udf
diff --git a/installer/modules/ufs-modules b/installer/modules/ufs-modules
new file mode 100644 (file)
index 0000000..19173e9
--- /dev/null
@@ -0,0 +1 @@
+ufs
diff --git a/installer/modules/uinput-modules b/installer/modules/uinput-modules
new file mode 100644 (file)
index 0000000..42bc005
--- /dev/null
@@ -0,0 +1 @@
+uinput
diff --git a/installer/modules/usb-modules b/installer/modules/usb-modules
new file mode 100644 (file)
index 0000000..c11b1cb
--- /dev/null
@@ -0,0 +1,20 @@
+# Include USB host and dual-role drivers by default
+drivers/usb/host/**
+drivers/usb/c67x00/* ?
+drivers/usb/chipidea/* ?
+drivers/usb/dwc2/* ?
+drivers/usb/dwc3/* ?
+drivers/usb/isp1760/* ?
+drivers/usb/musb/* ?
+drivers/usb/renesas_usbhs/* ?
+
+# Exclude some obscure host drivers
+hwa-hc -
+sl811_cs -
+sl811-hcd -
+u132-hcd -
+whci-hcd -
+
+# Include USB PHY drivers by default
+drivers/phy/phy-*-usb* ?
+drivers/usb/phy/* ?
diff --git a/installer/modules/usb-serial-modules b/installer/modules/usb-serial-modules
new file mode 100644 (file)
index 0000000..28f3aa7
--- /dev/null
@@ -0,0 +1,28 @@
+# Include USB serial drivers by default
+drivers/usb/serial/*
+
+# Exclude drivers that are useless for serial consoles
+aircable -
+cyberjack -
+cypress_m8 -
+empeg -
+garmin_gps -
+ipaq -
+ipw -
+ir-usb -
+iuu_phoenix -
+kobil_sct -
+metro-usb -
+navman -
+omninet -
+opticon -
+option -
+qcaux -
+qcserial -
+sierra -
+symbolserial -
+usb_debug -
+usb_wwan -
+visor -
+wishbone-serial -
+xsens_mt -
diff --git a/installer/modules/usb-storage-modules b/installer/modules/usb-storage-modules
new file mode 100644 (file)
index 0000000..013c58c
--- /dev/null
@@ -0,0 +1,2 @@
+# Include USB storage drivers by default
+drivers/usb/storage/*
diff --git a/installer/modules/virtio-modules b/installer/modules/virtio-modules
new file mode 100644 (file)
index 0000000..bb89475
--- /dev/null
@@ -0,0 +1,9 @@
+virtio_net
+virtio_blk
+virtio_balloon
+virtio_scsi
+virtio_input
+
+# Some architectures do not have PCI bus
+virtio_pci ?
+virtio_mmio ?
diff --git a/installer/modules/xfs-modules b/installer/modules/xfs-modules
new file mode 100644 (file)
index 0000000..7bd8fb2
--- /dev/null
@@ -0,0 +1,2 @@
+# Not available currently on all kernel versions, so marked optional.
+xfs ?
diff --git a/installer/modules/zlib-modules b/installer/modules/zlib-modules
new file mode 100644 (file)
index 0000000..322c546
--- /dev/null
@@ -0,0 +1 @@
+zlib_deflate
diff --git a/installer/package-list b/installer/package-list
new file mode 100644 (file)
index 0000000..6207e39
--- /dev/null
@@ -0,0 +1,391 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+#
+Package: kernel-image
+Priority: standard
+Description: Linux kernel image and core modules for the Debian installer
+ This package contains the kernel image and core modules for the Debian
+ installer boot images. It does _not_ provide a usable kernel for your full
+ Debian system.
+
+Package: nic-modules
+Depends: kernel-image, nic-shared-modules, i2c-modules, crc-modules
+Provides: nic-extra-modules
+Priority: standard
+Description: NIC drivers
+ This package contains Ethernet and some paravirtualised network drivers
+ for the kernel.
+
+Package: nic-wireless-modules
+Depends: kernel-image, nic-shared-modules, usb-modules, mmc-modules, pcmcia-modules, crc-modules
+Priority: standard
+Description: Wireless NIC drivers
+ This package contains wireless NIC drivers for the kernel.
+ Includes crypto modules only needed for wireless (WEP, WPA).
+
+Package: nic-shared-modules
+Depends: kernel-image
+Priority: standard
+Description: Shared NIC drivers
+ This package contains NIC drivers needed by combinations of nic-modules,
+ nic-pcmcia-modules, nic-usb-modules and nic-wireless-modules.
+
+Package: serial-modules
+Depends: kernel-image, pcmcia-modules
+Priority: optional
+Description: Serial drivers
+ This package contains serial drivers for the kernel.
+
+Package: usb-serial-modules
+Depends: kernel-image, usb-modules
+Priority: optional
+Description: USB serial drivers
+ This package contains USB serial drivers for the kernel.
+
+Package: ppp-modules
+Depends: kernel-image, serial-modules, zlib-modules, crc-modules
+Priority: optional
+Description: PPP drivers
+ This package contains PPP drivers for the kernel.
+
+Package: pata-modules
+Depends: kernel-image, ata-modules
+Priority: standard
+Description: PATA drivers
+ This package contains PATA drivers for the kernel.
+
+Package: cdrom-core-modules
+Depends: kernel-image, scsi-core-modules, isofs-modules
+Priority: standard
+Description: CDROM support
+ This package contains core CDROM support for the kernel.
+
+Package: firewire-core-modules
+Depends: kernel-image, scsi-core-modules, crc-modules
+Priority: standard
+Description: Core FireWire drivers
+ This package contains core FireWire drivers for the kernel.
+
+Package: scsi-core-modules
+Depends: kernel-image
+Priority: standard
+Description: Core SCSI subsystem
+ This package contains the core SCSI subsystem for the kernel.
+
+Package: scsi-modules
+Depends: kernel-image, scsi-core-modules, cdrom-core-modules, ata-modules
+Priority: standard
+Description: SCSI drivers
+ This package contains SCSI drivers for the kernel.
+
+Package: loop-modules
+Depends: kernel-image
+Priority: standard
+Description: Loopback filesystem support
+ This package contains loopback filesystem support for the kernel.
+
+Package: ipv6-modules
+Depends: kernel-image
+Priority: extra
+Description: IPv6 driver
+ This package contains the IPv6 driver for the kernel.
+
+Package: btrfs-modules
+Depends: kernel-image, crc-modules, zlib-modules, lzo-modules, md-modules
+Priority: extra
+Description: BTRFS filesystem support
+ This package contains the BTRFS filesystem module for the kernel.
+
+Package: ext4-modules
+Depends: kernel-image, crc-modules
+Provides: ext2-modules, ext3-modules
+Priority: standard
+Description: ext2/ext3/ext4 filesystem support
+ This package contains the ext4 filesystem module for the kernel, which
+ also supports ext2 and ext3.
+
+Package: isofs-modules
+Depends: kernel-image
+Priority: standard
+Description: ISOFS filesystem support
+ This package contains the ISOFS filesystem module for the kernel.
+
+Package: jffs2-modules
+Depends: kernel-image, zlib-modules, lzo-modules
+Priority: extra
+Description: JFFS2 filesystem support
+ This package contains the JFFS2 filesystem module for the kernel.
+
+Package: jfs-modules
+Depends: kernel-image
+Priority: standard
+Description: JFS filesystem support
+ This package contains the JFS filesystem module for the kernel.
+
+Package: ntfs-modules
+Depends: kernel-image
+Priority: extra
+Description: NTFS filesystem support
+ This package contains the NTFS file system module for the kernel.
+
+Package: ufs-modules
+Depends: kernel-image
+Priority: extra
+Description: UFS filesystem support
+ This package contains the UFS filesystem module for the kernel.
+
+Package: xfs-modules
+Depends: kernel-image, crc-modules
+Priority: standard
+Description: XFS filesystem support
+ This package contains the XFS filesystem module for the kernel.
+
+Package: fat-modules
+Depends: kernel-image
+Priority: extra
+Description: FAT filesystem support
+ This package contains the FAT and VFAT filesystem modules for the kernel.
+
+Package: hfs-modules
+Depends: kernel-image
+Priority: extra
+Description: HFS filesystem support
+ This package contains the HFS and HFS+ filesystem modules for the kernel.
+
+Package: affs-modules
+Depends: kernel-image
+Priority: extra
+Description: Amiga filesystem support
+ This package contains the Amiga filesystem module for the kernel.
+
+Package: minix-modules
+Depends: kernel-image
+Priority: extra
+Description: Minix filesystem support
+ This package contains the Minix filesystem module for the kernel.
+
+Package: nfs-modules
+Depends: kernel-image
+Priority: extra
+Description: NFS filesystem support
+ This package contains the NFS filesystem module for the kernel.
+
+Package: md-modules
+Depends: kernel-image, crc-modules
+Priority: extra
+Description: RAID and LVM support
+ This package contains RAID and LVM modules for the kernel.
+
+Package: multipath-modules
+Depends: kernel-image, md-modules, scsi-core-modules
+Priority: extra
+Description: Multipath support
+ This package contains DM-Multipath modules for the kernel.
+
+Package: usb-modules
+Depends: kernel-image
+Priority: extra
+Description: USB support
+ This package contains core USB drivers for the kernel.
+
+Package: usb-storage-modules
+Depends: kernel-image, scsi-core-modules, usb-modules
+Priority: standard
+Description: USB storage support
+ This package contains the USB storage driver for the kernel.
+
+Package: pcmcia-storage-modules
+Depends: kernel-image, cdrom-core-modules, pcmcia-modules, ata-modules
+Priority: standard
+Description: PCMCIA storage drivers
+ This package contains PCMCIA storage drivers for the kernel.
+
+Package: fb-modules
+Depends: kernel-image, i2c-modules
+Priority: extra
+Description: Frame buffer support
+ This package contains Frame buffer drivers for the kernel.
+
+Package: input-modules
+Depends: kernel-image, usb-modules, i2c-modules
+Priority: extra
+Description: Input devices support
+ This package contains input device drivers for the kernel.
+
+Package: event-modules
+Depends: kernel-image
+Priority: extra
+Description: Event support
+ This package contains event drivers for the kernel.
+
+Package: mouse-modules
+Depends: kernel-image, event-modules, input-modules, usb-modules
+Priority: extra
+Description: Mouse support
+ This package contains mouse drivers for the kernel.
+
+Package: nic-pcmcia-modules
+Depends: kernel-image, nic-shared-modules, nic-wireless-modules, pcmcia-modules, mmc-core-modules
+Priority: standard
+Description: Common PCMCIA NIC drivers
+ This package contains common PCMCIA NIC drivers for the kernel.
+
+Package: pcmcia-modules
+Depends: kernel-image
+Priority: standard
+Description: Common PCMCIA drivers
+ This package contains common PCMCIA drivers for the kernel.
+
+Package: nic-usb-modules
+Depends: kernel-image, nic-shared-modules, nic-wireless-modules, usb-modules, crc-modules
+Priority: standard
+Description: USB NIC drivers
+ This package contains USB network adapter drivers for the kernel.
+
+Package: sata-modules
+Depends: kernel-image, scsi-core-modules, ata-modules
+Priority: standard
+Description: SATA drivers
+ This package contains SATA drivers for the kernel.
+
+Package: acpi-modules
+Depends: kernel-image
+Priority: extra
+Description: ACPI support modules
+ This package contains kernel modules for ACPI.
+
+Package: i2c-modules
+Depends: kernel-image
+Priority: extra
+Description: i2c support modules
+ This package contains basic i2c support modules.
+
+Package: crc-modules
+Depends: kernel-image
+Priority: extra
+Description: CRC modules
+ This package contains CRC support modules.
+
+Package: crypto-modules
+Depends: kernel-image
+Priority: extra
+Description: crypto modules
+ This package contains crypto modules.
+
+Package: crypto-dm-modules
+Depends: kernel-image, md-modules
+Priority: extra
+Description: devicemapper crypto module
+ This package contains the devicemapper crypto (dm-crypt) module.
+
+Package: efi-modules
+Depends: kernel-image
+Priority: extra
+Description: EFI modules
+ This package contains EFI modules.
+
+Package: ata-modules
+Depends: kernel-image, scsi-core-modules
+Priority: extra
+Description: ATA disk modules
+ This package contains core ATA disk modules used by both PATA and SATA
+ disk drivers.
+
+Package: mmc-core-modules
+Depends: kernel-image
+Priority: extra
+Description: MMC/SD/SDIO core modules
+ This package contains core modules for MMC/SD/SDIO support.
+
+Package: mmc-modules
+Depends: kernel-image, mmc-core-modules, usb-modules, crc-modules
+Priority: extra
+Description: MMC/SD card modules
+ This package contains modules needed to support MMC (multimedia) and
+ SD cards.
+
+Package: nbd-modules
+Depends: kernel-image
+Priority: extra
+Description: Network Block Device modules
+ This package contains the modules required for support of the Network Block
+ Device
+
+Package: squashfs-modules
+Depends: kernel-image
+Priority: extra
+Description: squashfs modules
+ This package contains squashfs modules.
+
+Package: speakup-modules
+Depends: kernel-image
+Priority: extra
+Description: speakup modules
+ This package contains speakup modules.
+
+Package: rtc-modules
+Depends: kernel-image
+Priority: extra
+Description: RTC modules
+ This package contains RTC modules.
+
+Package: virtio-modules
+Depends: kernel-image, scsi-core-modules
+Priority: extra
+Description: virtio modules
+ This package contains virtio modules.
+
+Package: uinput-modules
+Depends: kernel-image
+Priority: extra
+Description: uinput support
+ This package contains the uinput module.
+
+Package: sound-modules
+Depends: kernel-image, i2c-modules, usb-modules, pcmcia-modules, firewire-core-modules, crc-modules
+Priority: extra
+Description: sound support
+ This package contains sound modules.
+
+Package: zlib-modules
+Depends: kernel-image
+Priority: extra
+Description: zlib modules
+ This package contains zlib modules.
+
+Package: lzo-modules
+Depends: kernel-image
+Priority: extra
+Description: lzo modules
+ This package contains lzo modules.
+
+Package: leds-modules
+Depends: kernel-image
+Priority: extra
+Description: LED modules
+ This package contains LED modules.
+
+Package: hyperv-modules
+Depends: kernel-image, input-modules, scsi-core-modules
+Priority: extra
+Description: Hyper-V modules
+ This package contains Hyper-V paravirtualised drivers for the kernel.
+
+Package: udf-modules
+Depends: kernel-image, crc-modules
+Priority: extra
+Description: UDF modules
+ This package contains the UDF filesystem module.
+
+Package: fuse-modules
+Depends: kernel-image
+Priority: extra
+Description: FUSE modules
+ This package contains the Filesystem in Userspace (FUSE) module.
+
+Package: mtd-modules
+Depends: kernel-image
+Priority: extra
+Description: MTD modules
+ This package contains MTD modules.
diff --git a/installer/powerpc/kernel-versions b/installer/powerpc/kernel-versions
new file mode 100644 (file)
index 0000000..50cf212
--- /dev/null
@@ -0,0 +1,3 @@
+# arch  version flavour   installedname suffix build-depends
+powerpc -       powerpc   -             -      -
+powerpc -       powerpc64 -             -      -
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/affs-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/affs-modules
new file mode 100644 (file)
index 0000000..f12f6ac
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/affs-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/ata-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/ata-modules
new file mode 100644 (file)
index 0000000..39540d4
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/ata-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/btrfs-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/cdrom-core-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/cdrom-core-modules
new file mode 100644 (file)
index 0000000..feed89a
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/cdrom-core-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/crc-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/crypto-dm-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/crypto-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/event-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/ext4-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/fat-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/fat-modules
new file mode 100644 (file)
index 0000000..043dc56
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/fat-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/firewire-core-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/firewire-core-modules
new file mode 100644 (file)
index 0000000..035ab31
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/firewire-core-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/fuse-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/fuse-modules
new file mode 100644 (file)
index 0000000..49bdce4
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/fuse-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/hfs-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/hfs-modules
new file mode 100644 (file)
index 0000000..a85f691
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/hfs-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/input-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/input-modules
new file mode 100644 (file)
index 0000000..38a8889
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/input-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/isofs-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/jfs-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/jfs-modules
new file mode 100644 (file)
index 0000000..b71ebd3
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/jfs-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/kernel-image b/installer/powerpc/modules/powerpc-powerpc-miboot/kernel-image
new file mode 100644 (file)
index 0000000..a0b7d0c
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/kernel-image"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/loop-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/loop-modules
new file mode 100644 (file)
index 0000000..e227368
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/loop-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/md-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/md-modules
new file mode 100644 (file)
index 0000000..93be33f
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/md-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/mouse-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/mouse-modules
new file mode 100644 (file)
index 0000000..22aca94
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/mouse-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/multipath-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/nbd-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/nic-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/nic-modules
new file mode 100644 (file)
index 0000000..b32747c
--- /dev/null
@@ -0,0 +1,28 @@
+3c59x
+8139too
+de2104x
+dl2k
+dmfe
+e100
+fealnx
+hamachi
+ixgb
+natsemi
+ne2k-pci
+ns83820
+p54pci
+p54usb
+prism54 ?
+r8169
+s2io
+starfire
+tg3 ?
+tlan
+tulip
+winbond-840
+winbond-840
+yellowfin
+
+broadcom ?
+
+8021q
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/nic-pcmcia-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/nic-pcmcia-modules
new file mode 100644 (file)
index 0000000..3f521e9
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/nic-pcmcia-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/nic-shared-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/nic-shared-modules
new file mode 100644 (file)
index 0000000..5b05e0d
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/nic-shared-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/pata-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/pata-modules
new file mode 100644 (file)
index 0000000..bb9cbe3
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/pata-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/pcmcia-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/pcmcia-modules
new file mode 100644 (file)
index 0000000..e508df6
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/pcmcia-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/pcmcia-storage-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/pcmcia-storage-modules
new file mode 100644 (file)
index 0000000..f00f246
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/pcmcia-storage-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/ppp-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/ppp-modules
new file mode 100644 (file)
index 0000000..eb7ab74
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/ppp-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/sata-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/sata-modules
new file mode 100644 (file)
index 0000000..591ad74
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/sata-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/scsi-core-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/scsi-core-modules
new file mode 100644 (file)
index 0000000..c972a47
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/scsi-core-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/scsi-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/scsi-modules
new file mode 100644 (file)
index 0000000..dd5ae9c
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/scsi-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/serial-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/serial-modules
new file mode 100644 (file)
index 0000000..349196e
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/serial-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/squashfs-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/udf-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/uinput-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/uinput-modules
new file mode 100644 (file)
index 0000000..58a8337
--- /dev/null
@@ -0,0 +1 @@
+#include <uinput-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/usb-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/usb-modules
new file mode 100644 (file)
index 0000000..9c5b10a
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/usb-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/usb-serial-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/usb-serial-modules
new file mode 100644 (file)
index 0000000..e25b558
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/usb-serial-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/usb-storage-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/usb-storage-modules
new file mode 100644 (file)
index 0000000..5f278e6
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/usb-storage-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/xfs-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/xfs-modules
new file mode 100644 (file)
index 0000000..c850127
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/xfs-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc-miboot/zlib-modules b/installer/powerpc/modules/powerpc-powerpc-miboot/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/affs-modules b/installer/powerpc/modules/powerpc-powerpc64/affs-modules
new file mode 100644 (file)
index 0000000..f12f6ac
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/affs-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/ata-modules b/installer/powerpc/modules/powerpc-powerpc64/ata-modules
new file mode 100644 (file)
index 0000000..39540d4
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/ata-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/btrfs-modules b/installer/powerpc/modules/powerpc-powerpc64/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/cdrom-core-modules b/installer/powerpc/modules/powerpc-powerpc64/cdrom-core-modules
new file mode 100644 (file)
index 0000000..feed89a
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/cdrom-core-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/crc-modules b/installer/powerpc/modules/powerpc-powerpc64/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/crypto-dm-modules b/installer/powerpc/modules/powerpc-powerpc64/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/crypto-modules b/installer/powerpc/modules/powerpc-powerpc64/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/event-modules b/installer/powerpc/modules/powerpc-powerpc64/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/ext4-modules b/installer/powerpc/modules/powerpc-powerpc64/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/fancontrol-modules b/installer/powerpc/modules/powerpc-powerpc64/fancontrol-modules
new file mode 100644 (file)
index 0000000..a3fc55c
--- /dev/null
@@ -0,0 +1,19 @@
+i2c-powermac ?
+windfarm_core ?
+windfarm_cpufreq_clamp ?
+windfarm_lm75_sensor ?
+windfarm_max6690_sensor ?
+windfarm_pid ?
+windfarm_pm121 ?
+windfarm_pm112 ?
+windfarm_pm81 ?
+windfarm_pm91 ?
+windfarm_pm72 ?
+windfarm_rm31 ?
+windfarm_smu_controls ?
+windfarm_smu_sat ?
+windfarm_smu_sensors ?
+windfarm_ad7417_sensor ?
+windfarm_fcu_controls ?
+windfarm_lm87_sensor ?
+windfarm_pid ?
diff --git a/installer/powerpc/modules/powerpc-powerpc64/fat-modules b/installer/powerpc/modules/powerpc-powerpc64/fat-modules
new file mode 100644 (file)
index 0000000..043dc56
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/fat-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/firewire-core-modules b/installer/powerpc/modules/powerpc-powerpc64/firewire-core-modules
new file mode 100644 (file)
index 0000000..035ab31
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/firewire-core-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/fuse-modules b/installer/powerpc/modules/powerpc-powerpc64/fuse-modules
new file mode 100644 (file)
index 0000000..49bdce4
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/fuse-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/hfs-modules b/installer/powerpc/modules/powerpc-powerpc64/hfs-modules
new file mode 100644 (file)
index 0000000..a85f691
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/hfs-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/hypervisor-modules b/installer/powerpc/modules/powerpc-powerpc64/hypervisor-modules
new file mode 100644 (file)
index 0000000..29ceb61
--- /dev/null
@@ -0,0 +1,2 @@
+hvcserver
+hvcs
diff --git a/installer/powerpc/modules/powerpc-powerpc64/input-modules b/installer/powerpc/modules/powerpc-powerpc64/input-modules
new file mode 100644 (file)
index 0000000..38a8889
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/input-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/isofs-modules b/installer/powerpc/modules/powerpc-powerpc64/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/jfs-modules b/installer/powerpc/modules/powerpc-powerpc64/jfs-modules
new file mode 100644 (file)
index 0000000..b71ebd3
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/jfs-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/kernel-image b/installer/powerpc/modules/powerpc-powerpc64/kernel-image
new file mode 100644 (file)
index 0000000..a0b7d0c
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/kernel-image"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/loop-modules b/installer/powerpc/modules/powerpc-powerpc64/loop-modules
new file mode 100644 (file)
index 0000000..e227368
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/loop-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/md-modules b/installer/powerpc/modules/powerpc-powerpc64/md-modules
new file mode 100644 (file)
index 0000000..93be33f
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/md-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/mouse-modules b/installer/powerpc/modules/powerpc-powerpc64/mouse-modules
new file mode 100644 (file)
index 0000000..22aca94
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/mouse-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/multipath-modules b/installer/powerpc/modules/powerpc-powerpc64/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/nbd-modules b/installer/powerpc/modules/powerpc-powerpc64/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/nic-modules b/installer/powerpc/modules/powerpc-powerpc64/nic-modules
new file mode 100644 (file)
index 0000000..95052e9
--- /dev/null
@@ -0,0 +1,7 @@
+#include "../powerpc/nic-modules"
+
+ehea
+ibmveth
+pasemi_mac ?
+ps3_gelic
+spidernet
diff --git a/installer/powerpc/modules/powerpc-powerpc64/nic-pcmcia-modules b/installer/powerpc/modules/powerpc-powerpc64/nic-pcmcia-modules
new file mode 100644 (file)
index 0000000..7a0702c
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-pcmcia-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/nic-shared-modules b/installer/powerpc/modules/powerpc-powerpc64/nic-shared-modules
new file mode 100644 (file)
index 0000000..5b05e0d
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/nic-shared-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/pata-modules b/installer/powerpc/modules/powerpc-powerpc64/pata-modules
new file mode 100644 (file)
index 0000000..bb9cbe3
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/pata-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/pcmcia-modules b/installer/powerpc/modules/powerpc-powerpc64/pcmcia-modules
new file mode 100644 (file)
index 0000000..e508df6
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/pcmcia-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/pcmcia-storage-modules b/installer/powerpc/modules/powerpc-powerpc64/pcmcia-storage-modules
new file mode 100644 (file)
index 0000000..f00f246
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/pcmcia-storage-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/ppp-modules b/installer/powerpc/modules/powerpc-powerpc64/ppp-modules
new file mode 100644 (file)
index 0000000..eb7ab74
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/ppp-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/sata-modules b/installer/powerpc/modules/powerpc-powerpc64/sata-modules
new file mode 100644 (file)
index 0000000..591ad74
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/sata-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/scsi-core-modules b/installer/powerpc/modules/powerpc-powerpc64/scsi-core-modules
new file mode 100644 (file)
index 0000000..c972a47
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/scsi-core-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/scsi-modules b/installer/powerpc/modules/powerpc-powerpc64/scsi-modules
new file mode 100644 (file)
index 0000000..d0671e5
--- /dev/null
@@ -0,0 +1,8 @@
+#include <scsi-modules>
+
+ibmvscsi
+ps3disk ?
+ps3rom
+
+# Exclude target driver
+ibmvscsis -
diff --git a/installer/powerpc/modules/powerpc-powerpc64/serial-modules b/installer/powerpc/modules/powerpc-powerpc64/serial-modules
new file mode 100644 (file)
index 0000000..349196e
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/serial-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/squashfs-modules b/installer/powerpc/modules/powerpc-powerpc64/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/udf-modules b/installer/powerpc/modules/powerpc-powerpc64/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/uinput-modules b/installer/powerpc/modules/powerpc-powerpc64/uinput-modules
new file mode 100644 (file)
index 0000000..58a8337
--- /dev/null
@@ -0,0 +1 @@
+#include <uinput-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/usb-modules b/installer/powerpc/modules/powerpc-powerpc64/usb-modules
new file mode 100644 (file)
index 0000000..9c5b10a
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/usb-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/usb-serial-modules b/installer/powerpc/modules/powerpc-powerpc64/usb-serial-modules
new file mode 100644 (file)
index 0000000..e25b558
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/usb-serial-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/usb-storage-modules b/installer/powerpc/modules/powerpc-powerpc64/usb-storage-modules
new file mode 100644 (file)
index 0000000..5f278e6
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/usb-storage-modules"
diff --git a/installer/powerpc/modules/powerpc-powerpc64/virtio-modules b/installer/powerpc/modules/powerpc-powerpc64/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/powerpc/modules/powerpc-powerpc64/xfs-modules b/installer/powerpc/modules/powerpc-powerpc64/xfs-modules
new file mode 100644 (file)
index 0000000..c850127
--- /dev/null
@@ -0,0 +1 @@
+#include "../powerpc/xfs-modules"
diff --git a/installer/powerpc/modules/powerpc/affs-modules b/installer/powerpc/modules/powerpc/affs-modules
new file mode 100644 (file)
index 0000000..3f0e4bb
--- /dev/null
@@ -0,0 +1,2 @@
+#include <affs-modules>
+
diff --git a/installer/powerpc/modules/powerpc/ata-modules b/installer/powerpc/modules/powerpc/ata-modules
new file mode 100644 (file)
index 0000000..b81c0f3
--- /dev/null
@@ -0,0 +1 @@
+#include <ata-modules>
diff --git a/installer/powerpc/modules/powerpc/btrfs-modules b/installer/powerpc/modules/powerpc/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/powerpc/modules/powerpc/cdrom-core-modules b/installer/powerpc/modules/powerpc/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/powerpc/modules/powerpc/crc-modules b/installer/powerpc/modules/powerpc/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/powerpc/modules/powerpc/crypto-dm-modules b/installer/powerpc/modules/powerpc/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/powerpc/modules/powerpc/crypto-modules b/installer/powerpc/modules/powerpc/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/powerpc/modules/powerpc/event-modules b/installer/powerpc/modules/powerpc/event-modules
new file mode 100644 (file)
index 0000000..f8819af
--- /dev/null
@@ -0,0 +1 @@
+#include <event-modules>
diff --git a/installer/powerpc/modules/powerpc/ext4-modules b/installer/powerpc/modules/powerpc/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/powerpc/modules/powerpc/fat-modules b/installer/powerpc/modules/powerpc/fat-modules
new file mode 100644 (file)
index 0000000..cce8fd3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <fat-modules>
+
diff --git a/installer/powerpc/modules/powerpc/fb-modules b/installer/powerpc/modules/powerpc/fb-modules
new file mode 100644 (file)
index 0000000..29bfc4c
--- /dev/null
@@ -0,0 +1,5 @@
+# 32-bit PowerMacs mostly have either ATI Rage 128 or Radeon graphics
+# chips for which the offb driver doesn't work properly.  aty128fb is
+# currently built-in but that could plausibly change in future.
+aty128fb
+radeonfb
diff --git a/installer/powerpc/modules/powerpc/firewire-core-modules b/installer/powerpc/modules/powerpc/firewire-core-modules
new file mode 100644 (file)
index 0000000..dcac80a
--- /dev/null
@@ -0,0 +1 @@
+#include <firewire-core-modules>
diff --git a/installer/powerpc/modules/powerpc/fuse-modules b/installer/powerpc/modules/powerpc/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/powerpc/modules/powerpc/hfs-modules b/installer/powerpc/modules/powerpc/hfs-modules
new file mode 100644 (file)
index 0000000..57d12f6
--- /dev/null
@@ -0,0 +1 @@
+#include <hfs-modules>
diff --git a/installer/powerpc/modules/powerpc/input-modules b/installer/powerpc/modules/powerpc/input-modules
new file mode 100644 (file)
index 0000000..51e37ce
--- /dev/null
@@ -0,0 +1,3 @@
+#include <input-modules>
+atkbd
+i8042
diff --git a/installer/powerpc/modules/powerpc/isofs-modules b/installer/powerpc/modules/powerpc/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/powerpc/modules/powerpc/jfs-modules b/installer/powerpc/modules/powerpc/jfs-modules
new file mode 100644 (file)
index 0000000..925a43a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <jfs-modules>
+
diff --git a/installer/powerpc/modules/powerpc/kernel-image b/installer/powerpc/modules/powerpc/kernel-image
new file mode 100644 (file)
index 0000000..b17bb59
--- /dev/null
@@ -0,0 +1,2 @@
+#include <kernel-image>
+bestcomm-core ?
diff --git a/installer/powerpc/modules/powerpc/loop-modules b/installer/powerpc/modules/powerpc/loop-modules
new file mode 100644 (file)
index 0000000..1644677
--- /dev/null
@@ -0,0 +1,2 @@
+#include <loop-modules>
+
diff --git a/installer/powerpc/modules/powerpc/md-modules b/installer/powerpc/modules/powerpc/md-modules
new file mode 100644 (file)
index 0000000..ade088d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <md-modules>
+
diff --git a/installer/powerpc/modules/powerpc/mouse-modules b/installer/powerpc/modules/powerpc/mouse-modules
new file mode 100644 (file)
index 0000000..15fcb00
--- /dev/null
@@ -0,0 +1 @@
+#include <mouse-modules>
diff --git a/installer/powerpc/modules/powerpc/multipath-modules b/installer/powerpc/modules/powerpc/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/powerpc/modules/powerpc/nbd-modules b/installer/powerpc/modules/powerpc/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/powerpc/modules/powerpc/nic-modules b/installer/powerpc/modules/powerpc/nic-modules
new file mode 100644 (file)
index 0000000..fa15106
--- /dev/null
@@ -0,0 +1,8 @@
+#include <nic-modules>
+
+ipddp
+sunhme
+airport
+sungem
+sungem_phy
+bmac ?
diff --git a/installer/powerpc/modules/powerpc/nic-pcmcia-modules b/installer/powerpc/modules/powerpc/nic-pcmcia-modules
new file mode 100644 (file)
index 0000000..7a0702c
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-pcmcia-modules>
diff --git a/installer/powerpc/modules/powerpc/nic-shared-modules b/installer/powerpc/modules/powerpc/nic-shared-modules
new file mode 100644 (file)
index 0000000..a6f274a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <nic-shared-modules>
+llc
diff --git a/installer/powerpc/modules/powerpc/pata-modules b/installer/powerpc/modules/powerpc/pata-modules
new file mode 100644 (file)
index 0000000..4c7d429
--- /dev/null
@@ -0,0 +1,3 @@
+#include <pata-modules>
+pata_mpc52xx ?
+pata_macio ?
diff --git a/installer/powerpc/modules/powerpc/pcmcia-modules b/installer/powerpc/modules/powerpc/pcmcia-modules
new file mode 100644 (file)
index 0000000..2bb5350
--- /dev/null
@@ -0,0 +1 @@
+#include <pcmcia-modules>
diff --git a/installer/powerpc/modules/powerpc/pcmcia-storage-modules b/installer/powerpc/modules/powerpc/pcmcia-storage-modules
new file mode 100644 (file)
index 0000000..9fbaff3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <pcmcia-storage-modules>
+
diff --git a/installer/powerpc/modules/powerpc/ppp-modules b/installer/powerpc/modules/powerpc/ppp-modules
new file mode 100644 (file)
index 0000000..f1ae9b3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <ppp-modules>
+
diff --git a/installer/powerpc/modules/powerpc/sata-modules b/installer/powerpc/modules/powerpc/sata-modules
new file mode 100644 (file)
index 0000000..071cb86
--- /dev/null
@@ -0,0 +1,2 @@
+#include <sata-modules>
+
diff --git a/installer/powerpc/modules/powerpc/scsi-core-modules b/installer/powerpc/modules/powerpc/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd65d66
--- /dev/null
@@ -0,0 +1 @@
+#include <scsi-core-modules>
diff --git a/installer/powerpc/modules/powerpc/scsi-modules b/installer/powerpc/modules/powerpc/scsi-modules
new file mode 100644 (file)
index 0000000..c75c32d
--- /dev/null
@@ -0,0 +1,5 @@
+#include <scsi-modules>
+
+a100u2w
+mac53c94
+mesh
diff --git a/installer/powerpc/modules/powerpc/serial-modules b/installer/powerpc/modules/powerpc/serial-modules
new file mode 100644 (file)
index 0000000..6ab8b8c
--- /dev/null
@@ -0,0 +1 @@
+#include <serial-modules>
diff --git a/installer/powerpc/modules/powerpc/squashfs-modules b/installer/powerpc/modules/powerpc/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/powerpc/modules/powerpc/udf-modules b/installer/powerpc/modules/powerpc/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/powerpc/modules/powerpc/uinput-modules b/installer/powerpc/modules/powerpc/uinput-modules
new file mode 100644 (file)
index 0000000..58a8337
--- /dev/null
@@ -0,0 +1 @@
+#include <uinput-modules>
diff --git a/installer/powerpc/modules/powerpc/usb-modules b/installer/powerpc/modules/powerpc/usb-modules
new file mode 100644 (file)
index 0000000..c598ded
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-modules>
diff --git a/installer/powerpc/modules/powerpc/usb-serial-modules b/installer/powerpc/modules/powerpc/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/powerpc/modules/powerpc/usb-storage-modules b/installer/powerpc/modules/powerpc/usb-storage-modules
new file mode 100644 (file)
index 0000000..272d95e
--- /dev/null
@@ -0,0 +1,2 @@
+#include <usb-storage-modules>
+
diff --git a/installer/powerpc/modules/powerpc/virtio-modules b/installer/powerpc/modules/powerpc/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/powerpc/modules/powerpc/xfs-modules b/installer/powerpc/modules/powerpc/xfs-modules
new file mode 100644 (file)
index 0000000..c020b5d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <xfs-modules>
+
diff --git a/installer/powerpc/modules/powerpc/zlib-modules b/installer/powerpc/modules/powerpc/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/powerpc/package-list b/installer/powerpc/package-list
new file mode 100644 (file)
index 0000000..798bdf5
--- /dev/null
@@ -0,0 +1,25 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+
+Package: pata-modules
+Depends: kernel-image, ata-modules, core-modules
+
+Package: nic-pcmcia-modules
+Depends: kernel-image, nic-modules, nic-shared-modules, nic-wireless-modules, pcmcia-modules, core-modules
+
+Package: hypervisor-modules
+Depends: kernel-image
+Priority: standard
+Description: IBM 64bit hypervisor console modules
+ Contains drivers for the hypervisor console, used as console for linux
+ running in logical partitions of IBM hardware supporting it.
+
+Package: fancontrol-modules
+Depends: kernel-image
+Priority: standard
+Description: Apple powermac fancontrol modules
+ Contains drivers for macintosh i2c bus as well as for the monitoring devices
+ connected to it. This allows to control the fans during installation.
diff --git a/installer/ppc64/kernel-versions b/installer/ppc64/kernel-versions
new file mode 100644 (file)
index 0000000..359bd10
--- /dev/null
@@ -0,0 +1,2 @@
+# arch  version flavour   installedname suffix build-depends
+ppc64   -       powerpc64 -             -      -
diff --git a/installer/ppc64/modules/powerpc b/installer/ppc64/modules/powerpc
new file mode 120000 (symlink)
index 0000000..207f243
--- /dev/null
@@ -0,0 +1 @@
+../../powerpc/modules/powerpc
\ No newline at end of file
diff --git a/installer/ppc64/modules/ppc64 b/installer/ppc64/modules/ppc64
new file mode 120000 (symlink)
index 0000000..f007b6a
--- /dev/null
@@ -0,0 +1 @@
+../../powerpc/modules/powerpc-powerpc64
\ No newline at end of file
diff --git a/installer/ppc64/package-list b/installer/ppc64/package-list
new file mode 120000 (symlink)
index 0000000..d571676
--- /dev/null
@@ -0,0 +1 @@
+../powerpc/package-list
\ No newline at end of file
diff --git a/installer/ppc64el/kernel-versions b/installer/ppc64el/kernel-versions
new file mode 100644 (file)
index 0000000..5f0d460
--- /dev/null
@@ -0,0 +1,2 @@
+# arch  version flavour     installedname suffix build-depends
+ppc64el -       powerpc64le -             -      -
diff --git a/installer/ppc64el/modules/ppc64el/ata-modules b/installer/ppc64el/modules/ppc64el/ata-modules
new file mode 100644 (file)
index 0000000..77a471d
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/ata-modules"
diff --git a/installer/ppc64el/modules/ppc64el/btrfs-modules b/installer/ppc64el/modules/ppc64el/btrfs-modules
new file mode 100644 (file)
index 0000000..4ab00be
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/btrfs-modules"
diff --git a/installer/ppc64el/modules/ppc64el/cdrom-core-modules b/installer/ppc64el/modules/ppc64el/cdrom-core-modules
new file mode 100644 (file)
index 0000000..ab06dbd
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/cdrom-core-modules"
diff --git a/installer/ppc64el/modules/ppc64el/crc-modules b/installer/ppc64el/modules/ppc64el/crc-modules
new file mode 100644 (file)
index 0000000..faf2d62
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/crc-modules"
diff --git a/installer/ppc64el/modules/ppc64el/crypto-dm-modules b/installer/ppc64el/modules/ppc64el/crypto-dm-modules
new file mode 100644 (file)
index 0000000..2c530b3
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/crypto-dm-modules"
diff --git a/installer/ppc64el/modules/ppc64el/crypto-modules b/installer/ppc64el/modules/ppc64el/crypto-modules
new file mode 100644 (file)
index 0000000..c6170b1
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/crypto-modules"
diff --git a/installer/ppc64el/modules/ppc64el/event-modules b/installer/ppc64el/modules/ppc64el/event-modules
new file mode 100644 (file)
index 0000000..b0e5f56
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/event-modules"
diff --git a/installer/ppc64el/modules/ppc64el/ext4-modules b/installer/ppc64el/modules/ppc64el/ext4-modules
new file mode 100644 (file)
index 0000000..ac5f4c0
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/ext4-modules"
diff --git a/installer/ppc64el/modules/ppc64el/fancontrol-modules b/installer/ppc64el/modules/ppc64el/fancontrol-modules
new file mode 100644 (file)
index 0000000..55cde68
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/fancontrol-modules"
diff --git a/installer/ppc64el/modules/ppc64el/fat-modules b/installer/ppc64el/modules/ppc64el/fat-modules
new file mode 100644 (file)
index 0000000..9ef0e07
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/fat-modules"
diff --git a/installer/ppc64el/modules/ppc64el/firewire-core-modules b/installer/ppc64el/modules/ppc64el/firewire-core-modules
new file mode 100644 (file)
index 0000000..30b2c4c
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/firewire-core-modules"
diff --git a/installer/ppc64el/modules/ppc64el/fuse-modules b/installer/ppc64el/modules/ppc64el/fuse-modules
new file mode 100644 (file)
index 0000000..73597f9
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/fuse-modules"
diff --git a/installer/ppc64el/modules/ppc64el/hypervisor-modules b/installer/ppc64el/modules/ppc64el/hypervisor-modules
new file mode 100644 (file)
index 0000000..f2edc4b
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/hypervisor-modules"
diff --git a/installer/ppc64el/modules/ppc64el/input-modules b/installer/ppc64el/modules/ppc64el/input-modules
new file mode 100644 (file)
index 0000000..e4625ac
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/input-modules"
diff --git a/installer/ppc64el/modules/ppc64el/isofs-modules b/installer/ppc64el/modules/ppc64el/isofs-modules
new file mode 100644 (file)
index 0000000..18fb993
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/isofs-modules"
diff --git a/installer/ppc64el/modules/ppc64el/jfs-modules b/installer/ppc64el/modules/ppc64el/jfs-modules
new file mode 100644 (file)
index 0000000..193513f
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/jfs-modules"
diff --git a/installer/ppc64el/modules/ppc64el/kernel-image b/installer/ppc64el/modules/ppc64el/kernel-image
new file mode 100644 (file)
index 0000000..93f4a37
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/kernel-image"
diff --git a/installer/ppc64el/modules/ppc64el/loop-modules b/installer/ppc64el/modules/ppc64el/loop-modules
new file mode 100644 (file)
index 0000000..fac3d38
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/loop-modules"
diff --git a/installer/ppc64el/modules/ppc64el/md-modules b/installer/ppc64el/modules/ppc64el/md-modules
new file mode 100644 (file)
index 0000000..03b1018
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/md-modules"
diff --git a/installer/ppc64el/modules/ppc64el/mouse-modules b/installer/ppc64el/modules/ppc64el/mouse-modules
new file mode 100644 (file)
index 0000000..163e3ba
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/mouse-modules"
diff --git a/installer/ppc64el/modules/ppc64el/multipath-modules b/installer/ppc64el/modules/ppc64el/multipath-modules
new file mode 100644 (file)
index 0000000..cb7afcb
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/multipath-modules"
diff --git a/installer/ppc64el/modules/ppc64el/nbd-modules b/installer/ppc64el/modules/ppc64el/nbd-modules
new file mode 100644 (file)
index 0000000..6540c0a
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/nbd-modules"
diff --git a/installer/ppc64el/modules/ppc64el/nic-modules b/installer/ppc64el/modules/ppc64el/nic-modules
new file mode 100644 (file)
index 0000000..f8c5bb0
--- /dev/null
@@ -0,0 +1,6 @@
+#include "../../../ppc64/modules/ppc64/nic-modules"
+
+airport -
+ehea -
+ps3_gelic -
+spidernet -
diff --git a/installer/ppc64el/modules/ppc64el/nic-shared-modules b/installer/ppc64el/modules/ppc64el/nic-shared-modules
new file mode 100644 (file)
index 0000000..13812a8
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/nic-shared-modules"
diff --git a/installer/ppc64el/modules/ppc64el/ppp-modules b/installer/ppc64el/modules/ppc64el/ppp-modules
new file mode 100644 (file)
index 0000000..6262019
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/ppp-modules"
diff --git a/installer/ppc64el/modules/ppc64el/sata-modules b/installer/ppc64el/modules/ppc64el/sata-modules
new file mode 100644 (file)
index 0000000..6907d27
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/sata-modules"
diff --git a/installer/ppc64el/modules/ppc64el/scsi-core-modules b/installer/ppc64el/modules/ppc64el/scsi-core-modules
new file mode 100644 (file)
index 0000000..dd496f7
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/scsi-core-modules"
diff --git a/installer/ppc64el/modules/ppc64el/scsi-modules b/installer/ppc64el/modules/ppc64el/scsi-modules
new file mode 100644 (file)
index 0000000..da4567b
--- /dev/null
@@ -0,0 +1,3 @@
+#include "../../../ppc64/modules/ppc64/scsi-modules"
+
+ps3rom -
diff --git a/installer/ppc64el/modules/ppc64el/serial-modules b/installer/ppc64el/modules/ppc64el/serial-modules
new file mode 100644 (file)
index 0000000..22548f4
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/serial-modules"
diff --git a/installer/ppc64el/modules/ppc64el/squashfs-modules b/installer/ppc64el/modules/ppc64el/squashfs-modules
new file mode 100644 (file)
index 0000000..8c0c6d1
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/squashfs-modules"
diff --git a/installer/ppc64el/modules/ppc64el/udf-modules b/installer/ppc64el/modules/ppc64el/udf-modules
new file mode 100644 (file)
index 0000000..9ab96e0
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/udf-modules"
diff --git a/installer/ppc64el/modules/ppc64el/uinput-modules b/installer/ppc64el/modules/ppc64el/uinput-modules
new file mode 100644 (file)
index 0000000..3d3929e
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/uinput-modules"
diff --git a/installer/ppc64el/modules/ppc64el/usb-modules b/installer/ppc64el/modules/ppc64el/usb-modules
new file mode 100644 (file)
index 0000000..45ac3cf
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/usb-modules"
diff --git a/installer/ppc64el/modules/ppc64el/usb-serial-modules b/installer/ppc64el/modules/ppc64el/usb-serial-modules
new file mode 100644 (file)
index 0000000..63a8412
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/usb-serial-modules"
diff --git a/installer/ppc64el/modules/ppc64el/usb-storage-modules b/installer/ppc64el/modules/ppc64el/usb-storage-modules
new file mode 100644 (file)
index 0000000..1679b92
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/usb-storage-modules"
diff --git a/installer/ppc64el/modules/ppc64el/virtio-modules b/installer/ppc64el/modules/ppc64el/virtio-modules
new file mode 100644 (file)
index 0000000..cbfbd11
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/virtio-modules"
diff --git a/installer/ppc64el/modules/ppc64el/xfs-modules b/installer/ppc64el/modules/ppc64el/xfs-modules
new file mode 100644 (file)
index 0000000..5e8a7ce
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../ppc64/modules/ppc64/xfs-modules"
diff --git a/installer/ppc64el/package-list b/installer/ppc64el/package-list
new file mode 120000 (symlink)
index 0000000..a872ee1
--- /dev/null
@@ -0,0 +1 @@
+../ppc64/package-list
\ No newline at end of file
diff --git a/installer/s390x/kernel-versions b/installer/s390x/kernel-versions
new file mode 100644 (file)
index 0000000..bbe139d
--- /dev/null
@@ -0,0 +1,2 @@
+# arch version flavour    installedname suffix build-depends
+s390x  -       s390x      -             -      -
diff --git a/installer/s390x/modules/s390x/btrfs-modules b/installer/s390x/modules/s390x/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/s390x/modules/s390x/crc-modules b/installer/s390x/modules/s390x/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/s390x/modules/s390x/crypto-dm-modules b/installer/s390x/modules/s390x/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/s390x/modules/s390x/crypto-modules b/installer/s390x/modules/s390x/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/s390x/modules/s390x/dasd-extra-modules b/installer/s390x/modules/s390x/dasd-extra-modules
new file mode 100644 (file)
index 0000000..ddd10cd
--- /dev/null
@@ -0,0 +1 @@
+dasd_diag_mod
diff --git a/installer/s390x/modules/s390x/dasd-modules b/installer/s390x/modules/s390x/dasd-modules
new file mode 100644 (file)
index 0000000..d3df219
--- /dev/null
@@ -0,0 +1,2 @@
+dasd_eckd_mod
+dasd_fba_mod
diff --git a/installer/s390x/modules/s390x/ext4-modules b/installer/s390x/modules/s390x/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/s390x/modules/s390x/fat-modules b/installer/s390x/modules/s390x/fat-modules
new file mode 100644 (file)
index 0000000..cce8fd3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <fat-modules>
+
diff --git a/installer/s390x/modules/s390x/fuse-modules b/installer/s390x/modules/s390x/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/s390x/modules/s390x/isofs-modules b/installer/s390x/modules/s390x/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/s390x/modules/s390x/kernel-image b/installer/s390x/modules/s390x/kernel-image
new file mode 100644 (file)
index 0000000..fd8c3a7
--- /dev/null
@@ -0,0 +1,2 @@
+#include <kernel-image>
+vmcp ?
diff --git a/installer/s390x/modules/s390x/loop-modules b/installer/s390x/modules/s390x/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/s390x/modules/s390x/md-modules b/installer/s390x/modules/s390x/md-modules
new file mode 100644 (file)
index 0000000..ade088d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <md-modules>
+
diff --git a/installer/s390x/modules/s390x/multipath-modules b/installer/s390x/modules/s390x/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/s390x/modules/s390x/nbd-modules b/installer/s390x/modules/s390x/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/s390x/modules/s390x/nic-modules b/installer/s390x/modules/s390x/nic-modules
new file mode 100644 (file)
index 0000000..3205651
--- /dev/null
@@ -0,0 +1,6 @@
+netiucv
+ctcm
+lcs
+qeth
+qeth_l2
+qeth_l3
diff --git a/installer/s390x/modules/s390x/scsi-core-modules b/installer/s390x/modules/s390x/scsi-core-modules
new file mode 100644 (file)
index 0000000..3537f82
--- /dev/null
@@ -0,0 +1,2 @@
+#include <scsi-core-modules>
+
diff --git a/installer/s390x/modules/s390x/scsi-modules b/installer/s390x/modules/s390x/scsi-modules
new file mode 100644 (file)
index 0000000..1f0171d
--- /dev/null
@@ -0,0 +1 @@
+zfcp
diff --git a/installer/s390x/modules/s390x/udf-modules b/installer/s390x/modules/s390x/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/s390x/modules/s390x/virtio-modules b/installer/s390x/modules/s390x/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/s390x/modules/s390x/xfs-modules b/installer/s390x/modules/s390x/xfs-modules
new file mode 100644 (file)
index 0000000..c020b5d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <xfs-modules>
+
diff --git a/installer/s390x/modules/s390x/zlib-modules b/installer/s390x/modules/s390x/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/s390x/package-list b/installer/s390x/package-list
new file mode 100644 (file)
index 0000000..74d4691
--- /dev/null
@@ -0,0 +1,19 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+
+Package: dasd-modules
+Depends: kernel-image
+Priority: standard
+Description: dasd modules
+ This package contains dasd modules.
+
+Package: dasd-extra-modules
+Depends: kernel-image, dasd-modules
+Priority: extra
+Description: optional dasd DIAG support
+ This package contains the module for dasd DIAG support. The udeb is
+ not loaded by default as the installer does not actually support this.
+ It can however be useful to have available in rescue situations.
diff --git a/installer/sh4/kernel-versions b/installer/sh4/kernel-versions
new file mode 100644 (file)
index 0000000..b39e3cf
--- /dev/null
@@ -0,0 +1,3 @@
+# arch version flavour   installedname suffix build-depends
+sh4    -       sh7751r   -             y      -
+sh4    -       sh7785lcr -             y      -
diff --git a/installer/sh4/modules/sh4-sh7751r/btrfs-modules b/installer/sh4/modules/sh4-sh7751r/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/cdrom-core-modules b/installer/sh4/modules/sh4-sh7751r/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/sh4/modules/sh4-sh7751r/crc-modules b/installer/sh4/modules/sh4-sh7751r/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/crypto-dm-modules b/installer/sh4/modules/sh4-sh7751r/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/crypto-modules b/installer/sh4/modules/sh4-sh7751r/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/ext4-modules b/installer/sh4/modules/sh4-sh7751r/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/fat-modules b/installer/sh4/modules/sh4-sh7751r/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/firewire-core-modules b/installer/sh4/modules/sh4-sh7751r/firewire-core-modules
new file mode 100644 (file)
index 0000000..dcac80a
--- /dev/null
@@ -0,0 +1 @@
+#include <firewire-core-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/fuse-modules b/installer/sh4/modules/sh4-sh7751r/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/i2c-modules b/installer/sh4/modules/sh4-sh7751r/i2c-modules
new file mode 100644 (file)
index 0000000..203a607
--- /dev/null
@@ -0,0 +1 @@
+#include <i2c-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/isofs-modules b/installer/sh4/modules/sh4-sh7751r/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/jfs-modules b/installer/sh4/modules/sh4-sh7751r/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/kernel-image b/installer/sh4/modules/sh4-sh7751r/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/sh4/modules/sh4-sh7751r/loop-modules b/installer/sh4/modules/sh4-sh7751r/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/md-modules b/installer/sh4/modules/sh4-sh7751r/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/minix-modules b/installer/sh4/modules/sh4-sh7751r/minix-modules
new file mode 100644 (file)
index 0000000..82b9843
--- /dev/null
@@ -0,0 +1 @@
+#include <minix-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/multipath-modules b/installer/sh4/modules/sh4-sh7751r/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/nbd-modules b/installer/sh4/modules/sh4-sh7751r/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/nic-modules b/installer/sh4/modules/sh4-sh7751r/nic-modules
new file mode 100644 (file)
index 0000000..67761a6
--- /dev/null
@@ -0,0 +1,6 @@
+3c59x ?
+8139too ?
+e100 ?
+e1000 ?
+ne2k-pci ?
+r8169 ?
diff --git a/installer/sh4/modules/sh4-sh7751r/nic-usb-modules b/installer/sh4/modules/sh4-sh7751r/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/pata-modules b/installer/sh4/modules/sh4-sh7751r/pata-modules
new file mode 100644 (file)
index 0000000..b0cd633
--- /dev/null
@@ -0,0 +1 @@
+#include <pata-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/ppp-modules b/installer/sh4/modules/sh4-sh7751r/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/sata-modules b/installer/sh4/modules/sh4-sh7751r/sata-modules
new file mode 100644 (file)
index 0000000..01318c2
--- /dev/null
@@ -0,0 +1 @@
+#include <sata-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/sound-modules b/installer/sh4/modules/sh4-sh7751r/sound-modules
new file mode 100644 (file)
index 0000000..68395ab
--- /dev/null
@@ -0,0 +1 @@
+#include <sound-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/speakup-modules b/installer/sh4/modules/sh4-sh7751r/speakup-modules
new file mode 100644 (file)
index 0000000..2959272
--- /dev/null
@@ -0,0 +1 @@
+#include <speakup-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/squashfs-modules b/installer/sh4/modules/sh4-sh7751r/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/udf-modules b/installer/sh4/modules/sh4-sh7751r/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/usb-serial-modules b/installer/sh4/modules/sh4-sh7751r/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/usb-storage-modules b/installer/sh4/modules/sh4-sh7751r/usb-storage-modules
new file mode 100644 (file)
index 0000000..8c5e81b
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-storage-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/virtio-modules b/installer/sh4/modules/sh4-sh7751r/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/xfs-modules b/installer/sh4/modules/sh4-sh7751r/xfs-modules
new file mode 100644 (file)
index 0000000..98374e2
--- /dev/null
@@ -0,0 +1 @@
+#include <xfs-modules>
diff --git a/installer/sh4/modules/sh4-sh7751r/zlib-modules b/installer/sh4/modules/sh4-sh7751r/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/btrfs-modules b/installer/sh4/modules/sh4-sh7785lcr/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/cdrom-core-modules b/installer/sh4/modules/sh4-sh7785lcr/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/sh4/modules/sh4-sh7785lcr/crc-modules b/installer/sh4/modules/sh4-sh7785lcr/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/crypto-dm-modules b/installer/sh4/modules/sh4-sh7785lcr/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/crypto-modules b/installer/sh4/modules/sh4-sh7785lcr/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/ext4-modules b/installer/sh4/modules/sh4-sh7785lcr/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/fat-modules b/installer/sh4/modules/sh4-sh7785lcr/fat-modules
new file mode 100644 (file)
index 0000000..274584e
--- /dev/null
@@ -0,0 +1 @@
+#include <fat-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/firewire-core-modules b/installer/sh4/modules/sh4-sh7785lcr/firewire-core-modules
new file mode 100644 (file)
index 0000000..dcac80a
--- /dev/null
@@ -0,0 +1 @@
+#include <firewire-core-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/fuse-modules b/installer/sh4/modules/sh4-sh7785lcr/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/isofs-modules b/installer/sh4/modules/sh4-sh7785lcr/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/jfs-modules b/installer/sh4/modules/sh4-sh7785lcr/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/kernel-image b/installer/sh4/modules/sh4-sh7785lcr/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/loop-modules b/installer/sh4/modules/sh4-sh7785lcr/loop-modules
new file mode 100644 (file)
index 0000000..c1c948f
--- /dev/null
@@ -0,0 +1 @@
+#include <loop-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/md-modules b/installer/sh4/modules/sh4-sh7785lcr/md-modules
new file mode 100644 (file)
index 0000000..26115e1
--- /dev/null
@@ -0,0 +1 @@
+#include <md-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/minix-modules b/installer/sh4/modules/sh4-sh7785lcr/minix-modules
new file mode 100644 (file)
index 0000000..82b9843
--- /dev/null
@@ -0,0 +1 @@
+#include <minix-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/multipath-modules b/installer/sh4/modules/sh4-sh7785lcr/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/nbd-modules b/installer/sh4/modules/sh4-sh7785lcr/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/nic-modules b/installer/sh4/modules/sh4-sh7785lcr/nic-modules
new file mode 100644 (file)
index 0000000..67761a6
--- /dev/null
@@ -0,0 +1,6 @@
+3c59x ?
+8139too ?
+e100 ?
+e1000 ?
+ne2k-pci ?
+r8169 ?
diff --git a/installer/sh4/modules/sh4-sh7785lcr/nic-usb-modules b/installer/sh4/modules/sh4-sh7785lcr/nic-usb-modules
new file mode 100644 (file)
index 0000000..c479669
--- /dev/null
@@ -0,0 +1 @@
+#include <nic-usb-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/pata-modules b/installer/sh4/modules/sh4-sh7785lcr/pata-modules
new file mode 100644 (file)
index 0000000..b0cd633
--- /dev/null
@@ -0,0 +1 @@
+#include <pata-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/ppp-modules b/installer/sh4/modules/sh4-sh7785lcr/ppp-modules
new file mode 100644 (file)
index 0000000..1f26aa1
--- /dev/null
@@ -0,0 +1 @@
+#include <ppp-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/sata-modules b/installer/sh4/modules/sh4-sh7785lcr/sata-modules
new file mode 100644 (file)
index 0000000..01318c2
--- /dev/null
@@ -0,0 +1 @@
+#include <sata-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/sound-modules b/installer/sh4/modules/sh4-sh7785lcr/sound-modules
new file mode 100644 (file)
index 0000000..68395ab
--- /dev/null
@@ -0,0 +1 @@
+#include <sound-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/speakup-modules b/installer/sh4/modules/sh4-sh7785lcr/speakup-modules
new file mode 100644 (file)
index 0000000..2959272
--- /dev/null
@@ -0,0 +1 @@
+#include <speakup-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/squashfs-modules b/installer/sh4/modules/sh4-sh7785lcr/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/udf-modules b/installer/sh4/modules/sh4-sh7785lcr/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/usb-serial-modules b/installer/sh4/modules/sh4-sh7785lcr/usb-serial-modules
new file mode 100644 (file)
index 0000000..c0a0dc3
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-serial-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/xfs-modules b/installer/sh4/modules/sh4-sh7785lcr/xfs-modules
new file mode 100644 (file)
index 0000000..98374e2
--- /dev/null
@@ -0,0 +1 @@
+#include <xfs-modules>
diff --git a/installer/sh4/modules/sh4-sh7785lcr/zlib-modules b/installer/sh4/modules/sh4-sh7785lcr/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/sh4/package-list b/installer/sh4/package-list
new file mode 100644 (file)
index 0000000..934de9c
--- /dev/null
@@ -0,0 +1,7 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+Package: kernel-image
+Provides: event-modules, fb-modules, input-modules, mouse-modules, nic-shared-modules, rtc-modules, uinput-modules, usb-modules
diff --git a/installer/sparc64/kernel-versions b/installer/sparc64/kernel-versions
new file mode 100644 (file)
index 0000000..4811933
--- /dev/null
@@ -0,0 +1,2 @@
+# arch  version flavour installedname suffix build-depends
+sparc64 -       sparc64 -             y      -
diff --git a/installer/sparc64/modules/sparc64/ata-modules b/installer/sparc64/modules/sparc64/ata-modules
new file mode 100644 (file)
index 0000000..b81c0f3
--- /dev/null
@@ -0,0 +1 @@
+#include <ata-modules>
diff --git a/installer/sparc64/modules/sparc64/btrfs-modules b/installer/sparc64/modules/sparc64/btrfs-modules
new file mode 100644 (file)
index 0000000..e261e13
--- /dev/null
@@ -0,0 +1 @@
+#include <btrfs-modules>
diff --git a/installer/sparc64/modules/sparc64/cdrom-core-modules b/installer/sparc64/modules/sparc64/cdrom-core-modules
new file mode 100644 (file)
index 0000000..e264d7a
--- /dev/null
@@ -0,0 +1,2 @@
+#include <cdrom-core-modules>
+
diff --git a/installer/sparc64/modules/sparc64/crc-modules b/installer/sparc64/modules/sparc64/crc-modules
new file mode 100644 (file)
index 0000000..7e00de7
--- /dev/null
@@ -0,0 +1 @@
+#include <crc-modules>
diff --git a/installer/sparc64/modules/sparc64/crypto-dm-modules b/installer/sparc64/modules/sparc64/crypto-dm-modules
new file mode 100644 (file)
index 0000000..4c8f235
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-dm-modules>
diff --git a/installer/sparc64/modules/sparc64/crypto-modules b/installer/sparc64/modules/sparc64/crypto-modules
new file mode 100644 (file)
index 0000000..3a1e862
--- /dev/null
@@ -0,0 +1 @@
+#include <crypto-modules>
diff --git a/installer/sparc64/modules/sparc64/ext4-modules b/installer/sparc64/modules/sparc64/ext4-modules
new file mode 100644 (file)
index 0000000..394c577
--- /dev/null
@@ -0,0 +1 @@
+#include <ext4-modules>
diff --git a/installer/sparc64/modules/sparc64/fat-modules b/installer/sparc64/modules/sparc64/fat-modules
new file mode 100644 (file)
index 0000000..cce8fd3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <fat-modules>
+
diff --git a/installer/sparc64/modules/sparc64/fuse-modules b/installer/sparc64/modules/sparc64/fuse-modules
new file mode 100644 (file)
index 0000000..0b6ba0c
--- /dev/null
@@ -0,0 +1 @@
+#include <fuse-modules>
diff --git a/installer/sparc64/modules/sparc64/input-modules b/installer/sparc64/modules/sparc64/input-modules
new file mode 100644 (file)
index 0000000..5ecb595
--- /dev/null
@@ -0,0 +1 @@
+#include <input-modules>
diff --git a/installer/sparc64/modules/sparc64/isofs-modules b/installer/sparc64/modules/sparc64/isofs-modules
new file mode 100644 (file)
index 0000000..da4fa9a
--- /dev/null
@@ -0,0 +1 @@
+#include <isofs-modules>
diff --git a/installer/sparc64/modules/sparc64/jfs-modules b/installer/sparc64/modules/sparc64/jfs-modules
new file mode 100644 (file)
index 0000000..7e4d912
--- /dev/null
@@ -0,0 +1 @@
+#include <jfs-modules>
diff --git a/installer/sparc64/modules/sparc64/kernel-image b/installer/sparc64/modules/sparc64/kernel-image
new file mode 100644 (file)
index 0000000..1d11b19
--- /dev/null
@@ -0,0 +1 @@
+#include <kernel-image>
diff --git a/installer/sparc64/modules/sparc64/md-modules b/installer/sparc64/modules/sparc64/md-modules
new file mode 100644 (file)
index 0000000..ade088d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <md-modules>
+
diff --git a/installer/sparc64/modules/sparc64/multipath-modules b/installer/sparc64/modules/sparc64/multipath-modules
new file mode 100644 (file)
index 0000000..a8b69b2
--- /dev/null
@@ -0,0 +1 @@
+#include <multipath-modules>
diff --git a/installer/sparc64/modules/sparc64/nbd-modules b/installer/sparc64/modules/sparc64/nbd-modules
new file mode 100644 (file)
index 0000000..3c9b3e5
--- /dev/null
@@ -0,0 +1 @@
+#include <nbd-modules>
diff --git a/installer/sparc64/modules/sparc64/nic-modules b/installer/sparc64/modules/sparc64/nic-modules
new file mode 100644 (file)
index 0000000..ed62504
--- /dev/null
@@ -0,0 +1,50 @@
+3c59x
+8139too
+8390
+b44
+dl2k
+epic100
+eql
+fealnx
+mii
+natsemi
+ne2k-pci
+ns83820
+pcnet32
+sis900
+starfire
+sundance
+typhoon
+via-rhine
+yellowfin
+e100
+e1000
+e1000e
+skfp
+tg3
+sungem
+sungem_phy
+tulip
+winbond-840
+dmfe
+sunhme
+sunqe
+sunlance
+sunbmac
+myri_sbus ?
+cassini
+cxgb
+sis190
+skge
+uli526x
+qla3xxx
+atl1
+niu
+igb
+igbvf
+
+# Support for virtual network devices under Sun Logical Domains.
+sunvnet ?
+
+pps_core
+ptp
diff --git a/installer/sparc64/modules/sparc64/pata-modules b/installer/sparc64/modules/sparc64/pata-modules
new file mode 100644 (file)
index 0000000..b0cd633
--- /dev/null
@@ -0,0 +1 @@
+#include <pata-modules>
diff --git a/installer/sparc64/modules/sparc64/ppp-modules b/installer/sparc64/modules/sparc64/ppp-modules
new file mode 100644 (file)
index 0000000..f1ae9b3
--- /dev/null
@@ -0,0 +1,2 @@
+#include <ppp-modules>
+
diff --git a/installer/sparc64/modules/sparc64/sata-modules b/installer/sparc64/modules/sparc64/sata-modules
new file mode 100644 (file)
index 0000000..01318c2
--- /dev/null
@@ -0,0 +1 @@
+#include <sata-modules>
diff --git a/installer/sparc64/modules/sparc64/scsi-core-modules b/installer/sparc64/modules/sparc64/scsi-core-modules
new file mode 100644 (file)
index 0000000..6026fdf
--- /dev/null
@@ -0,0 +1,6 @@
+#include <scsi-core-modules>
+
+# Support for virtual disk devices as a client under Sun Logical Domains.
+# Does not really belong here, but it's better than adding a new kernel
+# udeb just for this module.
+sunvdc ?
diff --git a/installer/sparc64/modules/sparc64/scsi-modules b/installer/sparc64/modules/sparc64/scsi-modules
new file mode 100644 (file)
index 0000000..afceaf8
--- /dev/null
@@ -0,0 +1,27 @@
+3w-9xxx
+3w-xxxx
+aacraid
+aic79xx
+aic7xxx
+aic94xx
+arcmsr
+atp870u ?
+dc395x
+dmx3191d
+hptiop
+initio
+ipr
+lpfc
+megaraid
+megaraid_sas
+mpt3sas
+mptsas
+mptspi
+osst
+qla1280 ?
+qla2xxx ?
+qla4xxx ?
+qlogicpti ?
+stex
+sun_esp
+sym53c8xx
diff --git a/installer/sparc64/modules/sparc64/squashfs-modules b/installer/sparc64/modules/sparc64/squashfs-modules
new file mode 100644 (file)
index 0000000..42d7788
--- /dev/null
@@ -0,0 +1 @@
+#include <squashfs-modules>
diff --git a/installer/sparc64/modules/sparc64/udf-modules b/installer/sparc64/modules/sparc64/udf-modules
new file mode 100644 (file)
index 0000000..b90d7ee
--- /dev/null
@@ -0,0 +1 @@
+#include <udf-modules>
diff --git a/installer/sparc64/modules/sparc64/ufs-modules b/installer/sparc64/modules/sparc64/ufs-modules
new file mode 100644 (file)
index 0000000..163ead0
--- /dev/null
@@ -0,0 +1 @@
+#include <ufs-modules>
diff --git a/installer/sparc64/modules/sparc64/usb-modules b/installer/sparc64/modules/sparc64/usb-modules
new file mode 100644 (file)
index 0000000..c598ded
--- /dev/null
@@ -0,0 +1 @@
+#include <usb-modules>
diff --git a/installer/sparc64/modules/sparc64/usb-storage-modules b/installer/sparc64/modules/sparc64/usb-storage-modules
new file mode 100644 (file)
index 0000000..272d95e
--- /dev/null
@@ -0,0 +1,2 @@
+#include <usb-storage-modules>
+
diff --git a/installer/sparc64/modules/sparc64/virtio-modules b/installer/sparc64/modules/sparc64/virtio-modules
new file mode 100644 (file)
index 0000000..61da396
--- /dev/null
@@ -0,0 +1 @@
+#include <virtio-modules>
diff --git a/installer/sparc64/modules/sparc64/xfs-modules b/installer/sparc64/modules/sparc64/xfs-modules
new file mode 100644 (file)
index 0000000..c020b5d
--- /dev/null
@@ -0,0 +1,2 @@
+#include <xfs-modules>
+
diff --git a/installer/sparc64/modules/sparc64/zlib-modules b/installer/sparc64/modules/sparc64/zlib-modules
new file mode 100644 (file)
index 0000000..e02ad64
--- /dev/null
@@ -0,0 +1 @@
+#include <zlib-modules>
diff --git a/installer/sparc64/package-list b/installer/sparc64/package-list
new file mode 100644 (file)
index 0000000..1e5e2f6
--- /dev/null
@@ -0,0 +1,15 @@
+# This file is used to build up the control file. The kernel version and
+# "-di" are appended to the package names. Section can be left out. So can
+# architecture, which is derived from the files in the modules directory.
+# It overwrites specifications from /usr/share/kernel-wedge/package-list.
+#
+
+Package: nic-modules
+Priority: standard
+Description: Network card modules for Sparc kernels
+ This package contains the drivers for the Happy Meal/Big Mac 10/100BaseT,
+ Sun QuadEthernet and MyriCOM Gigabit Ethernet SBus devices for SPARC
+ systems, as well as various PCI NIC drivers (only on sparc64.)
+ .
+ Do not install this package on a real Debian system! You probably
+ want a kernel-image package instead.
diff --git a/lib/python/debian_linux/__init__.py b/lib/python/debian_linux/__init__.py
new file mode 100644 (file)
index 0000000..b785ceb
--- /dev/null
@@ -0,0 +1 @@
+# Module
diff --git a/lib/python/debian_linux/abi.py b/lib/python/debian_linux/abi.py
new file mode 100644 (file)
index 0000000..0c4b3bd
--- /dev/null
@@ -0,0 +1,42 @@
+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):
+        for s in sorted(self.values(), key=lambda i: i.name):
+            file.write("%s %s %s %s\n" %
+                    (s.version, s.name, s.module, s.export))
diff --git a/lib/python/debian_linux/config.py b/lib/python/debian_linux/config.py
new file mode 100644 (file)
index 0000000..004469a
--- /dev/null
@@ -0,0 +1,260 @@
+import collections
+import os
+import os.path
+import pickle
+import re
+import sys
+import textwrap
+
+from configparser import RawConfigParser
+
+__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 SchemaItemInteger(object):
+    def __call__(self, i):
+        try:
+            return int(i.strip(), 0)
+        except ValueError:
+            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)]
+
+
+# Using OrderedDict instead of dict makes the pickled config reproducible
+class ConfigCore(collections.OrderedDict):
+    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):
+        pickle.dump(self, fp, 0)
+
+
+class ConfigCoreDump(object):
+    def __new__(self, fp):
+        return pickle.load(fp)
+
+
+class ConfigCoreHierarchy(object):
+    schema_base = {
+        'base': {
+            'arches': SchemaItemList(),
+            'enabled': SchemaItemBoolean(),
+            'featuresets': SchemaItemList(),
+            'flavours': SchemaItemList(),
+        },
+    }
+
+    def __new__(cls, schema, dirs=[]):
+        schema_complete = cls.schema_base.copy()
+        for key, value in schema.items():
+            schema_complete.setdefault(key, {}).update(value)
+        return cls.Reader(dirs, schema_complete)()
+
+    class Reader(object):
+        config_name = "defines"
+
+        def __init__(self, dirs, schema):
+            self.dirs, self.schema = dirs, schema
+
+        def __call__(self):
+            ret = ConfigCore()
+            self.read(ret)
+            return ret
+
+        def get_files(self, *dirs):
+            dirs = list(dirs)
+            dirs.append(self.config_name)
+            return (os.path.join(i, *dirs) for i in self.dirs if i)
+
+        def read_arch(self, ret, arch):
+            config = ConfigParser(self.schema)
+            config.read(self.get_files(arch))
+
+            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 = ret.get(real, {})
+                s.update(config[section])
+                ret[tuple(real)] = s
+
+            for featureset in featuresets:
+                self.read_arch_featureset(ret, arch, featureset)
+
+            if flavours:
+                base = ret['base', arch]
+                featuresets.insert(0, 'none')
+                base['featuresets'] = featuresets
+                del base['flavours']
+                ret['base', arch] = base
+                ret['base', arch, 'none'] = {'flavours': flavours, 'implicit-flavour': True}
+
+        def read_arch_featureset(self, ret, arch, featureset):
+            config = ConfigParser(self.schema)
+            config.read(self.get_files(arch, featureset))
+
+            flavours = config['base', ].get('flavours', [])
+
+            for section in iter(config):
+                real = (section[-1], arch, featureset) + section[:-1]
+                s = ret.get(real, {})
+                s.update(config[section])
+                ret[tuple(real)] = s
+
+        def read(self, ret):
+            config = ConfigParser(self.schema)
+            config.read(self.get_files())
+
+            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][11:])
+                else:
+                    real = (section[-1],) + section[1:]
+                ret[real] = config[section]
+
+            for arch in arches:
+                self.read_arch(ret, arch)
+            for featureset in featuresets:
+                self.read_featureset(ret, featureset)
+
+        def read_featureset(self, ret, featureset):
+            config = ConfigParser(self.schema)
+            config.read(self.get_files('featureset-%s' % featureset))
+
+            for section in iter(config):
+                real = (section[-1], None, featureset)
+                s = ret.get(real, {})
+                s.update(config[section])
+                ret[real] = s
+
+
+class ConfigParser(object):
+    __slots__ = '_config', 'schemas'
+
+    def __init__(self, schemas):
+        self.schemas = schemas
+
+        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
+            section_list = section.split('_')
+            section_base = section_list[-1]
+            if section_base in self.schemas:
+                section_ret = tuple(section_list)
+                data = self._convert_one(self.schemas[section_base], data)
+            else:
+                section_ret = (section, )
+            ret[section_ret] = data
+        return ret
+
+    def _convert_one(self, schema, data):
+        ret = {}
+        for key, value in data.items():
+            if key in schema:
+                value = schema[key](value)
+            ret[key] = value
+        return ret
+    def keys(self):
+        return self._convert().keys()
+
+    def read(self, data):
+        return self._config.read(data)
+
+
+if __name__ == '__main__':
+    import sys
+    sys.path.append('debian/lib/python')
+    config = ConfigCoreDump(open('debian/config.defines.dump', 'rb'))
+    for section, items in sorted(config.items(), key=lambda a:tuple(i or '' for i in a[0])):
+        print(u"[%s]" % (section,))
+        for item, value in sorted(items.items()):
+            print(u"%s: %s" % (item, value))
+        print()
diff --git a/lib/python/debian_linux/debian.py b/lib/python/debian_linux/debian.py
new file mode 100644 (file)
index 0000000..92576d1
--- /dev/null
@@ -0,0 +1,467 @@
+import collections
+import os.path
+import re
+
+from . import utils
+
+
+class Changelog(list):
+    _rules = r"""
+^
+(?P<source>
+    \w[-+0-9a-z.]+
+)
+\ 
+\(
+(?P<version>
+    [^\(\)\ \t]+
+)
+\)
+\s+
+(?P<distribution>
+    [-+0-9a-zA-Z.]+
+)
+\;\s+urgency=
+(?P<urgency>
+    \w+
+)
+"""
+    _re = re.compile(_rules, re.X)
+
+    class Entry(object):
+        __slot__ = 'distribution', 'source', 'version', 'urgency'
+
+        def __init__(self, distribution, source, version, urgency):
+            self.distribution, self.source, self.version, self.urgency = \
+                distribution, source, version, urgency
+
+    def __init__(self, dir='', version=None):
+        if version is None:
+            version = Version
+        f = open(os.path.join(dir, "debian/changelog"), encoding="UTF-8")
+        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,
+                                   match.group('urgency')))
+
+
+class Version(object):
+    _version_rules = r"""
+^
+(?:
+    (?P<epoch>
+        \d+
+    )
+    :
+)?
+(?P<upstream>
+    .+?
+)   
+(?:
+    -
+    (?P<revision>[^-]+)
+)?
+$
+"""
+    _version_re = re.compile(_version_rules, re.X)
+
+    def __init__(self, version):
+        match = self._version_re.match(version)
+        if match is None:
+            raise RuntimeError(u"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 u"%d:%s" % (self.epoch, self.complete_noepoch)
+        return self.complete_noepoch
+
+    @property
+    def complete_noepoch(self):
+        if self.revision is not None:
+            return u"%s-%s" % (self.upstream, self.revision)
+        return self.upstream
+
+    @property
+    def debian(self):
+        from warnings import warn
+        warn(u"debian argument was replaced by revision", DeprecationWarning, stacklevel=2)
+        return self.revision
+
+
+class VersionLinux(Version):
+    _version_linux_rules = r"""
+^
+(?P<version>
+    \d+\.\d+
+)
+(?P<update>
+    (?:\.\d+)?
+    (?:-[a-z]+\d+)?
+)
+(?:
+    ~
+    (?P<modifier>
+        .+?
+    )
+)?
+(?:
+    \.dfsg\.
+    (?P<dfsg>
+        \d+
+    )
+)?
+-
+\d+
+(\.\d+)?
+(?:
+    (?P<revision_experimental>
+        ~exp\d+
+    )
+    |
+    (?P<revision_security>
+        [~+]deb\d+u\d+
+    )?
+    (?P<revision_backports>
+        ~bpo\d+\+\d+
+    )?
+    |
+    (?P<revision_other>
+        [^-]+
+    )
+)
+$
+"""
+    _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(u"Invalid debian linux version")
+        d = match.groupdict()
+        self.linux_modifier = d['modifier']
+        self.linux_version = d['version']
+        if d['modifier'] is not None:
+            assert not d['update']
+            self.linux_upstream = '-'.join((d['version'], d['modifier']))
+        else:
+            self.linux_upstream = d['version']
+        self.linux_upstream_full = self.linux_upstream + d['update']
+        self.linux_dfsg = d['dfsg']
+        self.linux_revision_experimental = match.group('revision_experimental') and True
+        self.linux_revision_security = match.group('revision_security') and True
+        self.linux_revision_backports = match.group('revision_backports') and True
+        self.linux_revision_other = match.group('revision_other') and True
+
+
+class PackageArchitecture(collections.MutableSet):
+    __slots__ = '_data'
+
+    def __init__(self, value=None):
+        self._data = set()
+        if value:
+            self.extend(value)
+
+    def __contains__(self, value):
+        return self._data.__contains__(value)
+
+    def __iter__(self):
+        return self._data.__iter__()
+
+    def __len__(self):
+        return self._data.__len__()
+
+    def __str__(self):
+        return ' '.join(sorted(self))
+
+    def add(self, value):
+        self._data.add(value)
+
+    def discard(self, value):
+        self._data.discard(value)
+
+    def extend(self, value):
+        if isinstance(value, str):
+            for i in re.split('\s', value.strip()):
+                self.add(i)
+        else:
+            raise RuntimeError
+
+
+class PackageDescription(object):
+    __slots__ = "short", "long"
+
+    def __init__(self, value=None):
+        self.short = []
+        self.long = []
+        if value is not None:
+            desc_split = value.split("\n", 1)
+            self.append_short(desc_split[0])
+            if len(desc_split) == 2:
+                self.append(desc_split[1])
+
+    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 if long else short
+
+    def append(self, str):
+        str = str.strip()
+        if str:
+            self.long.extend(str.split(u"\n.\n"))
+
+    def append_short(self, str):
+        for i in [i.strip() for i in str.split(u",")]:
+            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, str):
+            value = PackageRelationGroup(value, override_arches)
+        elif not isinstance(value, PackageRelationGroup):
+            raise ValueError(u"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, str):
+            value = (j.strip() for j in re.split(',', value.strip()))
+        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 zip(self, value):
+            if i.name != j.name or i.operator != j.operator or \
+               i.version != j.version or i.restrictions != j.restrictions:
+                return None
+        return self
+
+    def _update_arches(self, value):
+        for i, j in zip(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, str):
+            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, str):
+            value = (j.strip() for j in re.split('\|', value.strip()))
+        for i in value:
+            self.append(i, override_arches)
+
+
+class PackageRelationEntry(object):
+    __slots__ = "name", "operator", "version", "arches", "restrictions"
+
+    _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.items())
+
+        __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 __eq__(self, other):
+            return type(other) == type(self) and self._op == other._op
+
+    def __init__(self, value=None, override_arches=None):
+        if not isinstance(value, str):
+            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), ']'))
+        if self.restrictions:
+            ret.extend((' <', ' '.join(self.restrictions), '>'))
+        return ''.join(ret)
+
+    def parse(self, value):
+        match = self._re.match(value)
+        if match is None:
+            raise RuntimeError(u"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 = []
+        if match[4] is not None:
+            self.restrictions = re.split('\s+', match[4])
+        else:
+            self.restrictions = []
+
+
+class _ControlFileDict(dict):
+    def __setitem__(self, key, value):
+        try:
+            cls = self._fields[key]
+            if not isinstance(value, cls):
+                value = cls(value)
+        except KeyError:
+            pass
+        super(_ControlFileDict, self).__setitem__(key, value)
+
+    def keys(self):
+        keys = set(super(_ControlFileDict, self).keys())
+        for i in self._fields.keys():
+            if i in self:
+                keys.remove(i)
+                yield i
+        for i in sorted(list(keys)):
+            yield i
+
+    def items(self):
+        for i in self.keys():
+            yield (i, self[i])
+
+    def values(self):
+        for i in self.keys():
+            yield self[i]
+
+
+class Package(_ControlFileDict):
+    _fields = collections.OrderedDict((
+        ('Package', str),
+        ('Source', str),
+        ('Architecture', PackageArchitecture),
+        ('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),
+    ))
+
+
+class TestsControl(_ControlFileDict):
+    _fields = collections.OrderedDict((
+        ('Tests', str),
+        ('Test-Command', str),
+        ('Restrictions', str),
+        ('Features', str),
+        ('Depends', PackageRelation),
+        ('Tests-Directory', str),
+        ('Classes', str),
+    ))
diff --git a/lib/python/debian_linux/firmware.py b/lib/python/debian_linux/firmware.py
new file mode 100644 (file)
index 0000000..ece3743
--- /dev/null
@@ -0,0 +1,89 @@
+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 = []
+        desc = None
+        source = []
+        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
+                for b in binary:
+                    # XXX The WHENCE file isn't yet consistent in its
+                    # association of binaries and their sources and
+                    # metadata.  This associates all sources and
+                    # metadata in a group with each binary.
+                    files[b] = FirmwareFile(b, desc, source, version)
+                binary = []
+                desc = None
+                source = []
+                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)
+                    binary.append(match.group(1))
+                    desc = match.group(2)
+                elif keyword in ['Info', 'Version']:
+                    version = value
+                elif keyword == 'Source':
+                    source.append(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
+        for b in binary:
+            files[b] = FirmwareFile(b, desc, source, version)
+        if driver:
+            self.append(FirmwareSection(driver, files, licence))
diff --git a/lib/python/debian_linux/gencontrol.py b/lib/python/debian_linux/gencontrol.py
new file mode 100644 (file)
index 0000000..370dccb
--- /dev/null
@@ -0,0 +1,355 @@
+import codecs
+from collections import OrderedDict
+
+from .debian import *
+
+
+class PackagesList(OrderedDict):
+    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):
+        for i in sorted(self.rules.keys()):
+            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.items()))
+
+    def copy(self):
+        return self.__class__(super(MakeFlags, self).copy())
+
+
+class Gencontrol(object):
+    makefile_targets = ('binary-arch', 'build-arch', 'setup')
+    makefile_targets_indep = ('binary-indep', 'build-indep', 'setup')
+
+    def __init__(self, config, templates, version=Version):
+        self.config, self.templates = config, templates
+        self.changelog = Changelog(version=version)
+        self.vars = {}
+
+    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, self.vars)
+
+    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('build-indep', cmds=["$(MAKE) -f debian/rules.real build-indep %s" % makeflags])
+        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 featureset in self.config['base', ]['featuresets']:
+            if self.config.merge('base', None, featureset).get('enabled', True):
+                self.do_indep_featureset(packages, makefile, featureset,
+                                         vars.copy(), makeflags.copy(), 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_extra = self.process_packages(templates_extra, self.vars)
+        packages.extend(packages_extra)
+        extra_arches = {}
+        for package in packages_extra:
+            arches = package['Architecture']
+            for arch in arches:
+                i = extra_arches.get(arch, [])
+                i.append(package)
+                extra_arches[arch] = i
+        for arch in sorted(extra_arches.keys()):
+            cmds = []
+            for i in extra_arches[arch]:
+                cmds.append("$(MAKE) -f debian/rules.real install-dummy ARCH='%s' DH_OPTIONS='-p%s'" % (arch, i['Package']))
+            makefile.add('binary-arch_%s' % arch, ['binary-arch_%s_extra' % arch])
+            makefile.add("binary-arch_%s_extra" % arch, cmds = cmds)
+
+    def do_indep_featureset(self, packages, makefile, featureset, vars,
+                             makeflags, extra):
+        vars['localversion'] = ''
+        if featureset != 'none':
+            vars['localversion'] = '-' + featureset
+
+        self.do_indep_featureset_setup(vars, makeflags, featureset, extra)
+        self.do_indep_featureset_makefile(makefile, featureset, makeflags,
+                                          extra)
+        self.do_indep_featureset_packages(packages, makefile, featureset,
+                                          vars, makeflags, extra)
+
+    def do_indep_featureset_setup(self, vars, makeflags, featureset, extra):
+        pass
+
+    def do_indep_featureset_makefile(self, makefile, featureset, makeflags,
+                                     extra):
+        makeflags['FEATURESET'] = featureset
+
+        for i in self.makefile_targets_indep:
+            target1 = i
+            target2 = '_'.join((target1, featureset))
+            target3 = '_'.join((target2, 'real'))
+            makefile.add(target1, [target2])
+            makefile.add(target2, [target3])
+
+    def do_indep_featureset_packages(self, packages, makefile, featureset,
+                                     vars, makeflags, extra):
+        pass
+
+    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 i[0] in vars:
+                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.items():
+            if isinstance(value, PackageRelation):
+                value = self.process_relation(value, vars)
+            elif isinstance(value, PackageDescription):
+                value = self.process_description(value, vars)
+            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-z0-9]+)@', subst, str(s))
+
+    def write(self, packages, makefile):
+        self.write_control(packages.values())
+        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(codecs.open("debian/control", 'w', 'utf-8'), list)
+
+    def write_makefile(self, makefile):
+        f = open("debian/rules.gen", 'w')
+        makefile.write(f)
+        f.close()
+
+    def write_rfc822(self, f, list):
+        for entry in list:
+            for key, value in entry.items():
+                f.write(u"%s: %s\n" % (key, value))
+            f.write('\n')
+
+def merge_packages(packages, new, arch):
+    for new_package in new:
+        name = new_package['Package']
+        if name in packages:
+            package = packages.get(name)
+            package['Architecture'].add(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)
diff --git a/lib/python/debian_linux/kconfig.py b/lib/python/debian_linux/kconfig.py
new file mode 100644 (file)
index 0000000..67309e3
--- /dev/null
@@ -0,0 +1,91 @@
+from collections import OrderedDict
+
+__all__ = (
+    "KconfigFile",
+)
+
+
+class KConfigEntry(object):
+    __slots__ = 'name', 'value', 'comments'
+
+    def __init__(self, name, value, comments=None):
+        self.name, self.value = name, value
+        self.comments = comments or []
+
+    def __eq__(self, other):
+        return self.name == other.name and self.value == other.value
+
+    def __hash__(self):
+        return hash(self.name) | hash(self.value)
+
+    def __repr__(self):
+        return '<{}({!r}, {!r}, {!r})>'.format(self.__class__.__name__, self.name, self.value, self.comments)
+
+    def __str__(self):
+        return 'CONFIG_{}={}'.format(self.name, self.value)
+
+    def write(self):
+        for comment in self.comments:
+            yield '#. ' + comment
+        yield str(self)
+
+
+class KConfigEntryTristate(KConfigEntry):
+    __slots__ = ()
+
+    VALUE_NO = False
+    VALUE_YES = True
+    VALUE_MOD = object()
+
+    def __init__(self, name, value, comments=None):
+        if value == 'n' or value is None:
+            value = self.VALUE_NO
+        elif value == 'y':
+            value = self.VALUE_YES
+        elif value == 'm':
+            value = self.VALUE_MOD
+        else:
+            raise NotImplementedError
+        super(KConfigEntryTristate, self).__init__(name, value, comments)
+
+    def __str__(self):
+        if self.value is self.VALUE_MOD:
+            return 'CONFIG_{}=m'.format(self.name)
+        if self.value:
+            return 'CONFIG_{}=y'.format(self.name)
+        return '# CONFIG_{} is not set'.format(self.name)
+
+
+class KconfigFile(OrderedDict):
+    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 = KConfigEntryTristate(key, value)
+        else:
+            entry = KConfigEntry(key, value)
+        self[key] = entry
+
+    def str_iter(self):
+        for key, value in self.items():
+            yield str(value)
diff --git a/lib/python/debian_linux/patches.py b/lib/python/debian_linux/patches.py
new file mode 100644 (file)
index 0000000..984e48f
--- /dev/null
@@ -0,0 +1,180 @@
+from __future__ import print_function
+
+import glob
+import os
+import shutil
+import subprocess
+
+
+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, filename, data):
+        super(OperationPatch, self).__init__(name, data)
+        self.filename = filename
+
+    def _call(self, dir, *extraargs):
+        with open(self.filename) as f:
+            subprocess.check_call(
+                    ("patch", "-p1", "-f", "-s", "-t", "--no-backup-if-mismatch") + extraargs,
+                    cwd=dir,
+                    stdin=f,
+            )
+
+    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)
+        ret = subprocess.call(("unifdef", "-o", filename, filename) + tuple(self.data))
+        if ret == 0:
+            raise RuntimeError("unifdef of %s removed nothing" % self.name)
+        elif ret != 1:
+            raise RuntimeError("unifdef failed")
+
+
+class OperationFiles(Operation):
+    operation = 'X'
+
+    suboperations = {
+        'remove': SubOperationFilesRemove,
+        'rm': SubOperationFilesRemove,
+        'unifdef': SubOperationFilesUnifdef,
+    }
+
+    def __init__(self, name, filename, data):
+        super(OperationFiles, self).__init__(name, data)
+
+        ops = []
+
+        with open(filename) as f:
+            for line in f:
+                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
+
+        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)
+                if os.path.exists(f):
+                    self.append(self.operations[operation](filename, f, data))
+                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))
+
+    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)
diff --git a/lib/python/debian_linux/utils.py b/lib/python/debian_linux/utils.py
new file mode 100644 (file)
index 0000000..5d6a7d4
--- /dev/null
@@ -0,0 +1,93 @@
+import codecs
+import os
+import re
+import textwrap
+
+
+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 suffix in ['.in', '']:
+            for dir in self.dirs:
+                filename = "%s/%s%s" % (dir, name, suffix)
+                if os.path.exists(filename):
+                    f = codecs.open(filename, 'r', 'utf-8')
+                    if prefix == 'control':
+                        return read_control(f)
+                    if prefix == 'tests-control':
+                        return read_tests_control(f)
+                    return f.read()
+
+    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
+
+
+def read_control(f):
+    from .debian import Package
+    return _read_rfc822(f, Package)
+
+def read_tests_control(f):
+    from .debian import TestsControl
+    return _read_rfc822(f, TestsControl)
+
+def _read_rfc822(f, cls):
+    entries = []
+    eof = False
+
+    while not eof:
+        e = cls()
+        last = None
+        lines = []
+        while True:
+            line = f.readline()
+            if not line:
+                eof = True
+                break
+            # Strip comments rather than trying to preserve them
+            if line[0] == '#':
+                continue
+            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(u"Not a header, not a continuation: ``%s''" % line)
+            last = line[:i]
+            lines = [line[i + 1:].lstrip()]
+        if last:
+            e[last] = '\n'.join(lines)
+        if e:
+            entries.append(e)
+
+    return entries
+
+
+class TextWrapper(textwrap.TextWrapper):
+    wordsep_re = re.compile(
+        r'(\s+|'                                  # any whitespace
+        r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))')   # em-dash
diff --git a/libcpupower-dev.install b/libcpupower-dev.install
new file mode 100644 (file)
index 0000000..b341905
--- /dev/null
@@ -0,0 +1,2 @@
+usr/include/*
+usr/lib/lib*.so
diff --git a/libcpupower1.install b/libcpupower1.install
new file mode 100644 (file)
index 0000000..d0dbfd1
--- /dev/null
@@ -0,0 +1 @@
+usr/lib/lib*.so.*
diff --git a/libcpupower1.symbols b/libcpupower1.symbols
new file mode 100644 (file)
index 0000000..1e691c2
--- /dev/null
@@ -0,0 +1,39 @@
+libcpupower.so.1 libcpupower1 #MINVER#
+ cpu_topology_release@Base 4.7~rc2-1~exp1
+ cpufreq_get_affected_cpus@Base 4.7~rc2-1~exp1
+ cpufreq_get_available_frequencies@Base 4.7~rc2-1~exp1
+ cpufreq_get_available_governors@Base 4.7~rc2-1~exp1
+ cpufreq_get_driver@Base 4.7~rc2-1~exp1
+ cpufreq_get_freq_hardware@Base 4.7~rc2-1~exp1
+ cpufreq_get_freq_kernel@Base 4.7~rc2-1~exp1
+ cpufreq_get_hardware_limits@Base 4.7~rc2-1~exp1
+ cpufreq_get_policy@Base 4.7~rc2-1~exp1
+ cpufreq_get_related_cpus@Base 4.7~rc2-1~exp1
+ cpufreq_get_stats@Base 4.7~rc2-1~exp1
+ cpufreq_get_transition_latency@Base 4.7~rc2-1~exp1
+ cpufreq_get_transitions@Base 4.7~rc2-1~exp1
+ cpufreq_modify_policy_governor@Base 4.7~rc2-1~exp1
+ cpufreq_modify_policy_max@Base 4.7~rc2-1~exp1
+ cpufreq_modify_policy_min@Base 4.7~rc2-1~exp1
+ cpufreq_put_affected_cpus@Base 4.7~rc2-1~exp1
+ cpufreq_put_available_frequencies@Base 4.7~rc2-1~exp1
+ cpufreq_put_available_governors@Base 4.7~rc2-1~exp1
+ cpufreq_put_driver@Base 4.7~rc2-1~exp1
+ cpufreq_put_policy@Base 4.7~rc2-1~exp1
+ cpufreq_put_related_cpus@Base 4.7~rc2-1~exp1
+ cpufreq_put_stats@Base 4.7~rc2-1~exp1
+ cpufreq_set_frequency@Base 4.7~rc2-1~exp1
+ cpufreq_set_policy@Base 4.7~rc2-1~exp1
+ cpuidle_get_driver@Base 4.7~rc2-1~exp1
+ cpuidle_get_governor@Base 4.7~rc2-1~exp1
+ cpuidle_is_state_disabled@Base 4.7~rc2-1~exp1
+ cpuidle_state_count@Base 4.7~rc2-1~exp1
+ cpuidle_state_desc@Base 4.7~rc2-1~exp1
+ cpuidle_state_disable@Base 4.7~rc2-1~exp1
+ cpuidle_state_latency@Base 4.7~rc2-1~exp1
+ cpuidle_state_name@Base 4.7~rc2-1~exp1
+ cpuidle_state_time@Base 4.7~rc2-1~exp1
+ cpuidle_state_usage@Base 4.7~rc2-1~exp1
+ cpupower_is_cpu_online@Base 4.7~rc2-1~exp1
+ get_cpu_topology@Base 4.7~rc2-1~exp1
+ sysfs_read_file@Base 4.7~rc2-1~exp1
diff --git a/liblockdep-dev.README.Debian b/liblockdep-dev.README.Debian
new file mode 100644 (file)
index 0000000..a0673a1
--- /dev/null
@@ -0,0 +1,13 @@
+liblockdep for Debian
+---------------------
+
+liblockdep does not have proper documentation, but these articles
+provide an introduction:
+
+    https://lwn.net/Articles/536363/
+    http://www.vctlabs.com/posts/2014/Jul/09/liblockdep/
+
+'lockdep-design.txt' explains some more detail about what lockdep
+does, both in the kernel and as liblockdep.
+
+ -- Ben Hutchings <ben@decadent.org.uk>, Fri, 14 Aug 2015 14:22:55 +0200
diff --git a/liblockdep-dev.docs b/liblockdep-dev.docs
new file mode 100644 (file)
index 0000000..15b2bbe
--- /dev/null
@@ -0,0 +1 @@
+Documentation/locking/lockdep-design.txt
diff --git a/liblockdep-dev.install b/liblockdep-dev.install
new file mode 100644 (file)
index 0000000..bd85724
--- /dev/null
@@ -0,0 +1,3 @@
+usr/include/liblockdep
+usr/lib/*/liblockdep.a
+usr/lib/*/liblockdep.so
diff --git a/libusbip-dev.install b/libusbip-dev.install
new file mode 100644 (file)
index 0000000..7b2d9eb
--- /dev/null
@@ -0,0 +1,3 @@
+usr/lib/libusbip.la
+usr/lib/libusbip.a
+usr/include/usbip/*
diff --git a/linux-cpupower.install b/linux-cpupower.install
new file mode 100755 (executable)
index 0000000..cbed747
--- /dev/null
@@ -0,0 +1,4 @@
+#!/usr/bin/dh-exec
+usr/bin
+[i386 amd64 x32] usr/sbin
+usr/share/
diff --git a/linux-cpupower.manpages b/linux-cpupower.manpages
new file mode 100755 (executable)
index 0000000..96f9593
--- /dev/null
@@ -0,0 +1,3 @@
+#!/usr/bin/dh-exec
+[i386 amd64 x32] tools/power/x86/turbostat/turbostat.8
+[i386 amd64 x32] tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.8
diff --git a/linux-headers-4.9.0-3-4kc-malta.postinst b/linux-headers-4.9.0-3-4kc-malta.postinst
new file mode 100644 (file)
index 0000000..f58272c
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-4kc-malta";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-5kc-malta.postinst b/linux-headers-4.9.0-3-5kc-malta.postinst
new file mode 100644 (file)
index 0000000..4c1b896
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-5kc-malta";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-686-pae.postinst b/linux-headers-4.9.0-3-686-pae.postinst
new file mode 100644 (file)
index 0000000..7f42f9a
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-686-pae";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-686.postinst b/linux-headers-4.9.0-3-686.postinst
new file mode 100644 (file)
index 0000000..ca43a3a
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-686";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-alpha-generic.postinst b/linux-headers-4.9.0-3-alpha-generic.postinst
new file mode 100644 (file)
index 0000000..4c940b8
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-alpha-generic";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-alpha-smp.postinst b/linux-headers-4.9.0-3-alpha-smp.postinst
new file mode 100644 (file)
index 0000000..510e3ab
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-alpha-smp";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-amd64.postinst b/linux-headers-4.9.0-3-amd64.postinst
new file mode 100644 (file)
index 0000000..833b64e
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-amd64";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-arm64.postinst b/linux-headers-4.9.0-3-arm64.postinst
new file mode 100644 (file)
index 0000000..77cef79
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-arm64";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-armmp-lpae.postinst b/linux-headers-4.9.0-3-armmp-lpae.postinst
new file mode 100644 (file)
index 0000000..c43c73b
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-armmp-lpae";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-armmp.postinst b/linux-headers-4.9.0-3-armmp.postinst
new file mode 100644 (file)
index 0000000..1aef716
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-armmp";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-loongson-3.postinst b/linux-headers-4.9.0-3-loongson-3.postinst
new file mode 100644 (file)
index 0000000..49b6937
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-loongson-3";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-m68k.postinst b/linux-headers-4.9.0-3-m68k.postinst
new file mode 100644 (file)
index 0000000..b99caa3
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-m68k";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-marvell.postinst b/linux-headers-4.9.0-3-marvell.postinst
new file mode 100644 (file)
index 0000000..be50e5b
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-marvell";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-octeon.postinst b/linux-headers-4.9.0-3-octeon.postinst
new file mode 100644 (file)
index 0000000..28a2ef5
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-octeon";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-parisc.postinst b/linux-headers-4.9.0-3-parisc.postinst
new file mode 100644 (file)
index 0000000..0612850
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-parisc";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-parisc64-smp.postinst b/linux-headers-4.9.0-3-parisc64-smp.postinst
new file mode 100644 (file)
index 0000000..d981f41
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-parisc64-smp";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-powerpc-smp.postinst b/linux-headers-4.9.0-3-powerpc-smp.postinst
new file mode 100644 (file)
index 0000000..665ff30
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-powerpc-smp";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-powerpc.postinst b/linux-headers-4.9.0-3-powerpc.postinst
new file mode 100644 (file)
index 0000000..418197f
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-powerpc";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-powerpc64.postinst b/linux-headers-4.9.0-3-powerpc64.postinst
new file mode 100644 (file)
index 0000000..adfb9b3
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-powerpc64";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-powerpc64le.postinst b/linux-headers-4.9.0-3-powerpc64le.postinst
new file mode 100644 (file)
index 0000000..ad978ad
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-powerpc64le";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-powerpcspe.postinst b/linux-headers-4.9.0-3-powerpcspe.postinst
new file mode 100644 (file)
index 0000000..f9b220b
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-powerpcspe";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-rt-686-pae.postinst b/linux-headers-4.9.0-3-rt-686-pae.postinst
new file mode 100644 (file)
index 0000000..667731a
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-rt-686-pae";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-rt-amd64.postinst b/linux-headers-4.9.0-3-rt-amd64.postinst
new file mode 100644 (file)
index 0000000..706db20
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-rt-amd64";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-s390x.postinst b/linux-headers-4.9.0-3-s390x.postinst
new file mode 100644 (file)
index 0000000..d0c7c7c
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-s390x";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-sh7751r.postinst b/linux-headers-4.9.0-3-sh7751r.postinst
new file mode 100644 (file)
index 0000000..bf23d85
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-sh7751r";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-sh7785lcr.postinst b/linux-headers-4.9.0-3-sh7785lcr.postinst
new file mode 100644 (file)
index 0000000..16705da
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-sh7785lcr";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-sparc64-smp.postinst b/linux-headers-4.9.0-3-sparc64-smp.postinst
new file mode 100644 (file)
index 0000000..b05b218
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-sparc64-smp";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-headers-4.9.0-3-sparc64.postinst b/linux-headers-4.9.0-3-sparc64.postinst
new file mode 100644 (file)
index 0000000..4edbbbd
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "4.9.0-3-sparc64";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/linux-image-4.9.0-3-4kc-malta-dbg.lintian-overrides b/linux-image-4.9.0-3-4kc-malta-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..bb63ea1
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-4kc-malta-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-4kc-malta.postinst b/linux-image-4.9.0-3-4kc-malta.postinst
new file mode 100644 (file)
index 0000000..883a35b
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-4kc-malta
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-4kc-malta.postrm b/linux-image-4.9.0-3-4kc-malta.postrm
new file mode 100644 (file)
index 0000000..13250e3
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-4kc-malta
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-4kc-malta.preinst b/linux-image-4.9.0-3-4kc-malta.preinst
new file mode 100644 (file)
index 0000000..f070082
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-4kc-malta
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-4kc-malta.prerm b/linux-image-4.9.0-3-4kc-malta.prerm
new file mode 100644 (file)
index 0000000..2e1b2f1
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-4kc-malta
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-5kc-malta-dbg.lintian-overrides b/linux-image-4.9.0-3-5kc-malta-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..20bf53c
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-5kc-malta-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-5kc-malta.postinst b/linux-image-4.9.0-3-5kc-malta.postinst
new file mode 100644 (file)
index 0000000..b6a1692
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-5kc-malta
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-5kc-malta.postrm b/linux-image-4.9.0-3-5kc-malta.postrm
new file mode 100644 (file)
index 0000000..b91fb66
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-5kc-malta
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-5kc-malta.preinst b/linux-image-4.9.0-3-5kc-malta.preinst
new file mode 100644 (file)
index 0000000..7cb5e44
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-5kc-malta
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-5kc-malta.prerm b/linux-image-4.9.0-3-5kc-malta.prerm
new file mode 100644 (file)
index 0000000..7ca7e9e
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-5kc-malta
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-686-dbg.lintian-overrides b/linux-image-4.9.0-3-686-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..6c47cb2
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-686-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-686-pae-dbg.lintian-overrides b/linux-image-4.9.0-3-686-pae-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..3d5860a
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-686-pae-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-686-pae.postinst b/linux-image-4.9.0-3-686-pae.postinst
new file mode 100644 (file)
index 0000000..4815378
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-686-pae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-686-pae.postrm b/linux-image-4.9.0-3-686-pae.postrm
new file mode 100644 (file)
index 0000000..9227033
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-686-pae
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-686-pae.preinst b/linux-image-4.9.0-3-686-pae.preinst
new file mode 100644 (file)
index 0000000..9e4f518
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-686-pae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-686-pae.prerm b/linux-image-4.9.0-3-686-pae.prerm
new file mode 100644 (file)
index 0000000..8e8d0f7
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-686-pae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-686.postinst b/linux-image-4.9.0-3-686.postinst
new file mode 100644 (file)
index 0000000..80692f4
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-686
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-686.postrm b/linux-image-4.9.0-3-686.postrm
new file mode 100644 (file)
index 0000000..e3981f1
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-686
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-686.preinst b/linux-image-4.9.0-3-686.preinst
new file mode 100644 (file)
index 0000000..02bf0d0
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-686
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-686.prerm b/linux-image-4.9.0-3-686.prerm
new file mode 100644 (file)
index 0000000..1898430
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-686
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-alpha-generic-dbg.lintian-overrides b/linux-image-4.9.0-3-alpha-generic-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..9e1f6a4
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-alpha-generic-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-alpha-generic.postinst b/linux-image-4.9.0-3-alpha-generic.postinst
new file mode 100644 (file)
index 0000000..226364c
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-alpha-generic
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-alpha-generic.postrm b/linux-image-4.9.0-3-alpha-generic.postrm
new file mode 100644 (file)
index 0000000..9e594aa
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-alpha-generic
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-alpha-generic.preinst b/linux-image-4.9.0-3-alpha-generic.preinst
new file mode 100644 (file)
index 0000000..8bf85b6
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-alpha-generic
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-alpha-generic.prerm b/linux-image-4.9.0-3-alpha-generic.prerm
new file mode 100644 (file)
index 0000000..c69e6cc
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-alpha-generic
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-alpha-smp-dbg.lintian-overrides b/linux-image-4.9.0-3-alpha-smp-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..bd8b77f
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-alpha-smp-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-alpha-smp.postinst b/linux-image-4.9.0-3-alpha-smp.postinst
new file mode 100644 (file)
index 0000000..b246bbd
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-alpha-smp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-alpha-smp.postrm b/linux-image-4.9.0-3-alpha-smp.postrm
new file mode 100644 (file)
index 0000000..b7d7765
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-alpha-smp
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-alpha-smp.preinst b/linux-image-4.9.0-3-alpha-smp.preinst
new file mode 100644 (file)
index 0000000..44fdcb8
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-alpha-smp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-alpha-smp.prerm b/linux-image-4.9.0-3-alpha-smp.prerm
new file mode 100644 (file)
index 0000000..f0fd0bd
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-alpha-smp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-amd64-dbg.lintian-overrides b/linux-image-4.9.0-3-amd64-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..3615583
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-amd64-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-amd64.postinst b/linux-image-4.9.0-3-amd64.postinst
new file mode 100644 (file)
index 0000000..abc72bb
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-amd64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-amd64.postrm b/linux-image-4.9.0-3-amd64.postrm
new file mode 100644 (file)
index 0000000..1e35da2
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-amd64
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-amd64.preinst b/linux-image-4.9.0-3-amd64.preinst
new file mode 100644 (file)
index 0000000..e999ece
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-amd64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-amd64.prerm b/linux-image-4.9.0-3-amd64.prerm
new file mode 100644 (file)
index 0000000..3ed435c
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-amd64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-arm64-dbg.lintian-overrides b/linux-image-4.9.0-3-arm64-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..06b5367
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-arm64-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-arm64.postinst b/linux-image-4.9.0-3-arm64.postinst
new file mode 100644 (file)
index 0000000..00dcb79
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-arm64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-arm64.postrm b/linux-image-4.9.0-3-arm64.postrm
new file mode 100644 (file)
index 0000000..4d23df3
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-arm64
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-arm64.preinst b/linux-image-4.9.0-3-arm64.preinst
new file mode 100644 (file)
index 0000000..7637563
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-arm64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-arm64.prerm b/linux-image-4.9.0-3-arm64.prerm
new file mode 100644 (file)
index 0000000..f23fe91
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-arm64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-armmp-dbg.lintian-overrides b/linux-image-4.9.0-3-armmp-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..c482933
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-armmp-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-armmp-lpae-dbg.lintian-overrides b/linux-image-4.9.0-3-armmp-lpae-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..af7d30e
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-armmp-lpae-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-armmp-lpae.postinst b/linux-image-4.9.0-3-armmp-lpae.postinst
new file mode 100644 (file)
index 0000000..e058670
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-armmp-lpae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-armmp-lpae.postrm b/linux-image-4.9.0-3-armmp-lpae.postrm
new file mode 100644 (file)
index 0000000..36cf672
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-armmp-lpae
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-armmp-lpae.preinst b/linux-image-4.9.0-3-armmp-lpae.preinst
new file mode 100644 (file)
index 0000000..43149a7
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-armmp-lpae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-armmp-lpae.prerm b/linux-image-4.9.0-3-armmp-lpae.prerm
new file mode 100644 (file)
index 0000000..a506eaa
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-armmp-lpae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-armmp.postinst b/linux-image-4.9.0-3-armmp.postinst
new file mode 100644 (file)
index 0000000..950abe0
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-armmp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-armmp.postrm b/linux-image-4.9.0-3-armmp.postrm
new file mode 100644 (file)
index 0000000..4d0aa11
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-armmp
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-armmp.preinst b/linux-image-4.9.0-3-armmp.preinst
new file mode 100644 (file)
index 0000000..3840d61
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-armmp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-armmp.prerm b/linux-image-4.9.0-3-armmp.prerm
new file mode 100644 (file)
index 0000000..937627e
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-armmp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-loongson-3-dbg.lintian-overrides b/linux-image-4.9.0-3-loongson-3-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..69d4740
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-loongson-3-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-loongson-3.postinst b/linux-image-4.9.0-3-loongson-3.postinst
new file mode 100644 (file)
index 0000000..e89c6cb
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-loongson-3
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-loongson-3.postrm b/linux-image-4.9.0-3-loongson-3.postrm
new file mode 100644 (file)
index 0000000..fd86e18
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-loongson-3
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-loongson-3.preinst b/linux-image-4.9.0-3-loongson-3.preinst
new file mode 100644 (file)
index 0000000..9280db1
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-loongson-3
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-loongson-3.prerm b/linux-image-4.9.0-3-loongson-3.prerm
new file mode 100644 (file)
index 0000000..6a90db4
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-loongson-3
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-m68k-dbg.lintian-overrides b/linux-image-4.9.0-3-m68k-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..879f195
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-m68k-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-m68k.postinst b/linux-image-4.9.0-3-m68k.postinst
new file mode 100644 (file)
index 0000000..b35dab4
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-m68k
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-m68k.postrm b/linux-image-4.9.0-3-m68k.postrm
new file mode 100644 (file)
index 0000000..599126c
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-m68k
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-m68k.preinst b/linux-image-4.9.0-3-m68k.preinst
new file mode 100644 (file)
index 0000000..f1a2476
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-m68k
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-m68k.prerm b/linux-image-4.9.0-3-m68k.prerm
new file mode 100644 (file)
index 0000000..3b8c069
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-m68k
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-marvell-dbg.lintian-overrides b/linux-image-4.9.0-3-marvell-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..fa6959b
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-marvell-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-marvell.postinst b/linux-image-4.9.0-3-marvell.postinst
new file mode 100644 (file)
index 0000000..042023b
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-marvell
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-marvell.postrm b/linux-image-4.9.0-3-marvell.postrm
new file mode 100644 (file)
index 0000000..5fcdfbb
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-marvell
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-marvell.preinst b/linux-image-4.9.0-3-marvell.preinst
new file mode 100644 (file)
index 0000000..b4797e1
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-marvell
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-marvell.prerm b/linux-image-4.9.0-3-marvell.prerm
new file mode 100644 (file)
index 0000000..fa8a999
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-marvell
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-octeon-dbg.lintian-overrides b/linux-image-4.9.0-3-octeon-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..da1df16
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-octeon-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-octeon.postinst b/linux-image-4.9.0-3-octeon.postinst
new file mode 100644 (file)
index 0000000..c060617
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-octeon
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-octeon.postrm b/linux-image-4.9.0-3-octeon.postrm
new file mode 100644 (file)
index 0000000..818fef8
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-octeon
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-octeon.preinst b/linux-image-4.9.0-3-octeon.preinst
new file mode 100644 (file)
index 0000000..9a3b1ee
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-octeon
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-octeon.prerm b/linux-image-4.9.0-3-octeon.prerm
new file mode 100644 (file)
index 0000000..e0dce54
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-octeon
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-parisc-dbg.lintian-overrides b/linux-image-4.9.0-3-parisc-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..f23aec2
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-parisc-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-parisc.postinst b/linux-image-4.9.0-3-parisc.postinst
new file mode 100644 (file)
index 0000000..b051d8b
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-parisc
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-parisc.postrm b/linux-image-4.9.0-3-parisc.postrm
new file mode 100644 (file)
index 0000000..aeae886
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-parisc
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-parisc.preinst b/linux-image-4.9.0-3-parisc.preinst
new file mode 100644 (file)
index 0000000..026826b
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-parisc
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-parisc.prerm b/linux-image-4.9.0-3-parisc.prerm
new file mode 100644 (file)
index 0000000..0954b35
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-parisc
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-parisc64-smp-dbg.lintian-overrides b/linux-image-4.9.0-3-parisc64-smp-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..e390c2b
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-parisc64-smp-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-parisc64-smp.postinst b/linux-image-4.9.0-3-parisc64-smp.postinst
new file mode 100644 (file)
index 0000000..49c0527
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-parisc64-smp
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-parisc64-smp.postrm b/linux-image-4.9.0-3-parisc64-smp.postrm
new file mode 100644 (file)
index 0000000..31d18f9
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-parisc64-smp
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-parisc64-smp.preinst b/linux-image-4.9.0-3-parisc64-smp.preinst
new file mode 100644 (file)
index 0000000..f2c4d60
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-parisc64-smp
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-parisc64-smp.prerm b/linux-image-4.9.0-3-parisc64-smp.prerm
new file mode 100644 (file)
index 0000000..e600523
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-parisc64-smp
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc-dbg.lintian-overrides b/linux-image-4.9.0-3-powerpc-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..29b9d34
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-powerpc-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-powerpc-smp-dbg.lintian-overrides b/linux-image-4.9.0-3-powerpc-smp-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..e83016f
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-powerpc-smp-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-powerpc-smp.postinst b/linux-image-4.9.0-3-powerpc-smp.postinst
new file mode 100644 (file)
index 0000000..47875eb
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc-smp
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc-smp.postrm b/linux-image-4.9.0-3-powerpc-smp.postrm
new file mode 100644 (file)
index 0000000..1901a3b
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc-smp
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc-smp.preinst b/linux-image-4.9.0-3-powerpc-smp.preinst
new file mode 100644 (file)
index 0000000..679b9af
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc-smp
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc-smp.prerm b/linux-image-4.9.0-3-powerpc-smp.prerm
new file mode 100644 (file)
index 0000000..7823b25
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc-smp
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc.postinst b/linux-image-4.9.0-3-powerpc.postinst
new file mode 100644 (file)
index 0000000..4b57185
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc.postrm b/linux-image-4.9.0-3-powerpc.postrm
new file mode 100644 (file)
index 0000000..e430ec2
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc.preinst b/linux-image-4.9.0-3-powerpc.preinst
new file mode 100644 (file)
index 0000000..1fbebb7
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc.prerm b/linux-image-4.9.0-3-powerpc.prerm
new file mode 100644 (file)
index 0000000..0c8963f
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc64-dbg.lintian-overrides b/linux-image-4.9.0-3-powerpc64-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..08159e1
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-powerpc64-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-powerpc64.postinst b/linux-image-4.9.0-3-powerpc64.postinst
new file mode 100644 (file)
index 0000000..127261e
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc64
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc64.postrm b/linux-image-4.9.0-3-powerpc64.postrm
new file mode 100644 (file)
index 0000000..4dd74cf
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc64
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc64.preinst b/linux-image-4.9.0-3-powerpc64.preinst
new file mode 100644 (file)
index 0000000..0e36c44
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc64
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc64.prerm b/linux-image-4.9.0-3-powerpc64.prerm
new file mode 100644 (file)
index 0000000..a271c7b
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc64
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc64le-dbg.lintian-overrides b/linux-image-4.9.0-3-powerpc64le-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..a944cf1
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-powerpc64le-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-powerpc64le.postinst b/linux-image-4.9.0-3-powerpc64le.postinst
new file mode 100644 (file)
index 0000000..b95580a
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc64le
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc64le.postrm b/linux-image-4.9.0-3-powerpc64le.postrm
new file mode 100644 (file)
index 0000000..510b8b6
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc64le
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc64le.preinst b/linux-image-4.9.0-3-powerpc64le.preinst
new file mode 100644 (file)
index 0000000..0b6a545
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc64le
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpc64le.prerm b/linux-image-4.9.0-3-powerpc64le.prerm
new file mode 100644 (file)
index 0000000..171181f
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpc64le
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpcspe-dbg.lintian-overrides b/linux-image-4.9.0-3-powerpcspe-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..cbaf172
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-powerpcspe-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-powerpcspe.postinst b/linux-image-4.9.0-3-powerpcspe.postinst
new file mode 100644 (file)
index 0000000..ca1e559
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpcspe
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpcspe.postrm b/linux-image-4.9.0-3-powerpcspe.postrm
new file mode 100644 (file)
index 0000000..31c351d
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpcspe
+image_path=/boot/vmlinux-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpcspe.preinst b/linux-image-4.9.0-3-powerpcspe.preinst
new file mode 100644 (file)
index 0000000..9d9e3c4
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpcspe
+image_path=/boot/vmlinux-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-powerpcspe.prerm b/linux-image-4.9.0-3-powerpcspe.prerm
new file mode 100644 (file)
index 0000000..a346570
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-powerpcspe
+image_path=/boot/vmlinux-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-rt-686-pae-dbg.lintian-overrides b/linux-image-4.9.0-3-rt-686-pae-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..69b7cce
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-rt-686-pae-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-rt-686-pae.postinst b/linux-image-4.9.0-3-rt-686-pae.postinst
new file mode 100644 (file)
index 0000000..410707d
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-rt-686-pae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-rt-686-pae.postrm b/linux-image-4.9.0-3-rt-686-pae.postrm
new file mode 100644 (file)
index 0000000..3f1329b
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-rt-686-pae
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-rt-686-pae.preinst b/linux-image-4.9.0-3-rt-686-pae.preinst
new file mode 100644 (file)
index 0000000..26f0d3e
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-rt-686-pae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-rt-686-pae.prerm b/linux-image-4.9.0-3-rt-686-pae.prerm
new file mode 100644 (file)
index 0000000..ae5420e
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-rt-686-pae
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-rt-amd64-dbg.lintian-overrides b/linux-image-4.9.0-3-rt-amd64-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..ea8d80c
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-rt-amd64-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-rt-amd64.postinst b/linux-image-4.9.0-3-rt-amd64.postinst
new file mode 100644 (file)
index 0000000..be6cf56
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-rt-amd64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-rt-amd64.postrm b/linux-image-4.9.0-3-rt-amd64.postrm
new file mode 100644 (file)
index 0000000..857b358
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-rt-amd64
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-rt-amd64.preinst b/linux-image-4.9.0-3-rt-amd64.preinst
new file mode 100644 (file)
index 0000000..c9a9137
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-rt-amd64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-rt-amd64.prerm b/linux-image-4.9.0-3-rt-amd64.prerm
new file mode 100644 (file)
index 0000000..40eec48
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-rt-amd64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-s390x-dbg.lintian-overrides b/linux-image-4.9.0-3-s390x-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..9f9cc98
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-s390x-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-s390x.postinst b/linux-image-4.9.0-3-s390x.postinst
new file mode 100644 (file)
index 0000000..af8c682
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-s390x
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-s390x.postrm b/linux-image-4.9.0-3-s390x.postrm
new file mode 100644 (file)
index 0000000..2483d54
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-s390x
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-s390x.preinst b/linux-image-4.9.0-3-s390x.preinst
new file mode 100644 (file)
index 0000000..ee4b266
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-s390x
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-s390x.prerm b/linux-image-4.9.0-3-s390x.prerm
new file mode 100644 (file)
index 0000000..71d4a55
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-s390x
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sh7751r-dbg.lintian-overrides b/linux-image-4.9.0-3-sh7751r-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..5038ad1
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-sh7751r-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-sh7751r.postinst b/linux-image-4.9.0-3-sh7751r.postinst
new file mode 100644 (file)
index 0000000..c005e0a
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sh7751r
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sh7751r.postrm b/linux-image-4.9.0-3-sh7751r.postrm
new file mode 100644 (file)
index 0000000..6750667
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sh7751r
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sh7751r.preinst b/linux-image-4.9.0-3-sh7751r.preinst
new file mode 100644 (file)
index 0000000..c4037f2
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sh7751r
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sh7751r.prerm b/linux-image-4.9.0-3-sh7751r.prerm
new file mode 100644 (file)
index 0000000..3f2fca5
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sh7751r
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sh7785lcr-dbg.lintian-overrides b/linux-image-4.9.0-3-sh7785lcr-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..7b39c45
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-sh7785lcr-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-sh7785lcr.postinst b/linux-image-4.9.0-3-sh7785lcr.postinst
new file mode 100644 (file)
index 0000000..0f722d4
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sh7785lcr
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sh7785lcr.postrm b/linux-image-4.9.0-3-sh7785lcr.postrm
new file mode 100644 (file)
index 0000000..9ee882b
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sh7785lcr
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sh7785lcr.preinst b/linux-image-4.9.0-3-sh7785lcr.preinst
new file mode 100644 (file)
index 0000000..26b0ebf
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sh7785lcr
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sh7785lcr.prerm b/linux-image-4.9.0-3-sh7785lcr.prerm
new file mode 100644 (file)
index 0000000..2d48c4c
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sh7785lcr
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sparc64-dbg.lintian-overrides b/linux-image-4.9.0-3-sparc64-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..73989a6
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-sparc64-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-sparc64-smp-dbg.lintian-overrides b/linux-image-4.9.0-3-sparc64-smp-dbg.lintian-overrides
new file mode 100644 (file)
index 0000000..1bbfd37
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-4.9.0-3-sparc64-smp-dbg: dbg-package-missing-depends
diff --git a/linux-image-4.9.0-3-sparc64-smp.postinst b/linux-image-4.9.0-3-sparc64-smp.postinst
new file mode 100644 (file)
index 0000000..7afdacf
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sparc64-smp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sparc64-smp.postrm b/linux-image-4.9.0-3-sparc64-smp.postrm
new file mode 100644 (file)
index 0000000..b7c31d2
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sparc64-smp
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sparc64-smp.preinst b/linux-image-4.9.0-3-sparc64-smp.preinst
new file mode 100644 (file)
index 0000000..b04ac35
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sparc64-smp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sparc64-smp.prerm b/linux-image-4.9.0-3-sparc64-smp.prerm
new file mode 100644 (file)
index 0000000..60d04b4
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sparc64-smp
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sparc64.postinst b/linux-image-4.9.0-3-sparc64.postinst
new file mode 100644 (file)
index 0000000..48874e7
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sparc64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sparc64.postrm b/linux-image-4.9.0-3-sparc64.postrm
new file mode 100644 (file)
index 0000000..143fb76
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sparc64
+image_path=/boot/vmlinuz-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sparc64.preinst b/linux-image-4.9.0-3-sparc64.preinst
new file mode 100644 (file)
index 0000000..346059c
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sparc64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/linux-image-4.9.0-3-sparc64.prerm b/linux-image-4.9.0-3-sparc64.prerm
new file mode 100644 (file)
index 0000000..07b5441
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=4.9.0-3-sparc64
+image_path=/boot/vmlinuz-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/linux-perf-4.9.lintian-overrides b/linux-perf-4.9.lintian-overrides
new file mode 100644 (file)
index 0000000..a9f7891
--- /dev/null
@@ -0,0 +1,3 @@
+# These executables are needed to handle processes running in compat mode
+linux-perf-4.9: binary-from-other-architecture usr/lib/perf_4.9-core/perf-read-vdso32
+linux-perf-4.9: binary-from-other-architecture usr/lib/perf_4.9-core/perf-read-vdsox32
diff --git a/lockdep.dirs b/lockdep.dirs
new file mode 100644 (file)
index 0000000..e772481
--- /dev/null
@@ -0,0 +1 @@
+usr/bin
diff --git a/patches/bugfix/all/cpupower-bump-soname-version.patch b/patches/bugfix/all/cpupower-bump-soname-version.patch
new file mode 100644 (file)
index 0000000..eebb23b
--- /dev/null
@@ -0,0 +1,29 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 9 Jun 2016 23:35:08 +0100
+Subject: cpupower: Bump soname version
+Forwarded: http://mid.gmane.org/20160610005619.GQ7555@decadent.org.uk
+
+Several functions in the libcpupower API are renamed or removed in
+Linux 4.7.  This is an backward-incompatible ABI change, so the
+library soname should change from libcpupower.so.0 to
+libcpupower.so.1.
+
+Fixes: ac5a181d065d ("cpupower: Add cpuidle parts into library")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/power/cpupower/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/power/cpupower/Makefile b/tools/power/cpupower/Makefile
+index 8358863259c5..0b85f5915ce8 100644
+--- a/tools/power/cpupower/Makefile
++++ b/tools/power/cpupower/Makefile
+@@ -64,7 +64,7 @@ DESTDIR ?=
+ VERSION=                      $(shell ./utils/version-gen.sh)
+ LIB_MAJ=                      0.0.1
+-LIB_MIN=                      0
++LIB_MIN=                      1
+ PACKAGE =                     cpupower
+ PACKAGE_BUGREPORT =           linux-pm@vger.kernel.org
diff --git a/patches/bugfix/all/cpupower-fix-checks-for-cpu-existence.patch b/patches/bugfix/all/cpupower-fix-checks-for-cpu-existence.patch
new file mode 100644 (file)
index 0000000..be5f528
--- /dev/null
@@ -0,0 +1,45 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 03 Nov 2016 15:25:26 -0600
+Subject: cpupower: Fix checks for CPU existence
+Forwarded: https://marc.info/?l=linux-pm&m=149248268214265
+
+Calls to cpufreq_cpu_exists(cpu) were converted to
+cpupower_is_cpu_online(cpu) when libcpupower was introduced and the
+former function was deleted.  However, cpupower_is_cpu_online()
+returns 1 on success whereas cpufreq_cpu_exists() returned 0 on
+success.  It also does not distinguish physically absent and offline
+CPUs, and does not set errno.
+
+cpufreq-set has already been fixed (commit c25badc9ceb6).
+
+In cpufreq-bench, which prints an error message for offline CPUs,
+properly distinguish and report the zero and negative cases.
+
+Fixes: ac5a181d065d ("cpupower: Add cpuidle parts into library")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/power/cpupower/bench/system.c
++++ b/tools/power/cpupower/bench/system.c
+@@ -58,12 +58,19 @@ long long int get_time()
+ int set_cpufreq_governor(char *governor, unsigned int cpu)
+ {
++      int rc;
+       dprintf("set %s as cpufreq governor\n", governor);
+-      if (cpupower_is_cpu_online(cpu) != 0) {
+-              perror("cpufreq_cpu_exists");
+-              fprintf(stderr, "error: cpu %u does not exist\n", cpu);
++      rc = cpupower_is_cpu_online(cpu);
++      if (rc != 1) {
++              if (rc < 0)
++                      fprintf(stderr, "cpupower_is_cpu_online: %s\n",
++                              strerror(-rc));
++              else
++                      fprintf(stderr,
++                              "error: cpu %u is offline or does not exist\n",
++                              cpu);
+               return -1;
+       }
diff --git a/patches/bugfix/all/disable-some-marvell-phys.patch b/patches/bugfix/all/disable-some-marvell-phys.patch
new file mode 100644 (file)
index 0000000..697929b
--- /dev/null
@@ -0,0 +1,91 @@
+From: Ian Campbell <ijc@hellion.org.uk>
+Subject: phy/marvell: disable 4-port phys
+Date: Wed, 20 Nov 2013 08:30:14 +0000
+Bug-Debian: https://bugs.debian.org/723177
+Forwarded: http://thread.gmane.org/gmane.linux.debian.devel.bugs.general/1107774/
+
+The Marvell PHY was originally disabled because it can cause networking
+failures on some systems. According to Lennert Buytenhek this is because some
+of the variants added did not share the same register layout. Since the known
+cases are all 4-ports disable those variants (indicated by a 4 in the
+penultimate position of the model name) until they can be audited for
+correctness.
+
+[bwh: Also #if-out the init functions for these PHYs to avoid
+ compiler warnings]
+
+--- a/drivers/net/phy/marvell.c
++++ b/drivers/net/phy/marvell.c
+@@ -906,6 +906,7 @@ static int m88e1118_config_init(struct p
+       return phy_write(phydev, MII_BMCR, BMCR_RESET);
+ }
++#if 0
+ static int m88e1149_config_init(struct phy_device *phydev)
+ {
+       int err;
+@@ -931,7 +932,9 @@ static int m88e1149_config_init(struct p
+       return phy_write(phydev, MII_BMCR, BMCR_RESET);
+ }
++#endif
++#if 0
+ static int m88e1145_config_init(struct phy_device *phydev)
+ {
+       int err;
+@@ -1012,6 +1015,7 @@ static int m88e1145_config_init(struct p
+       return 0;
+ }
++#endif
+ /**
+  * fiber_lpa_to_ethtool_lpa_t
+@@ -1595,6 +1599,7 @@ static struct phy_driver marvell_drivers
+               .get_strings = marvell_get_strings,
+               .get_stats = marvell_get_stats,
+       },
++#if 0
+       {
+               .phy_id = MARVELL_PHY_ID_88E1145,
+               .phy_id_mask = MARVELL_PHY_ID_MASK,
+@@ -1613,6 +1618,8 @@ static struct phy_driver marvell_drivers
+               .get_strings = marvell_get_strings,
+               .get_stats = marvell_get_stats,
+       },
++#endif
++#if 0
+       {
+               .phy_id = MARVELL_PHY_ID_88E1149R,
+               .phy_id_mask = MARVELL_PHY_ID_MASK,
+@@ -1631,6 +1638,8 @@ static struct phy_driver marvell_drivers
+               .get_strings = marvell_get_strings,
+               .get_stats = marvell_get_stats,
+       },
++#endif
++#if 0
+       {
+               .phy_id = MARVELL_PHY_ID_88E1240,
+               .phy_id_mask = MARVELL_PHY_ID_MASK,
+@@ -1649,6 +1658,7 @@ static struct phy_driver marvell_drivers
+               .get_strings = marvell_get_strings,
+               .get_stats = marvell_get_stats,
+       },
++#endif
+       {
+               .phy_id = MARVELL_PHY_ID_88E1116R,
+               .phy_id_mask = MARVELL_PHY_ID_MASK,
+@@ -1735,9 +1745,9 @@ static struct mdio_device_id __maybe_unu
+       { MARVELL_PHY_ID_88E1111, MARVELL_PHY_ID_MASK },
+       { MARVELL_PHY_ID_88E1118, MARVELL_PHY_ID_MASK },
+       { MARVELL_PHY_ID_88E1121R, MARVELL_PHY_ID_MASK },
+-      { MARVELL_PHY_ID_88E1145, MARVELL_PHY_ID_MASK },
+-      { MARVELL_PHY_ID_88E1149R, MARVELL_PHY_ID_MASK },
+-      { MARVELL_PHY_ID_88E1240, MARVELL_PHY_ID_MASK },
++/*    { MARVELL_PHY_ID_88E1145, MARVELL_PHY_ID_MASK }, */
++/*    { MARVELL_PHY_ID_88E1149R, MARVELL_PHY_ID_MASK }, */
++/*    { MARVELL_PHY_ID_88E1240, MARVELL_PHY_ID_MASK }, */
+       { MARVELL_PHY_ID_88E1318S, MARVELL_PHY_ID_MASK },
+       { MARVELL_PHY_ID_88E1116R, MARVELL_PHY_ID_MASK },
+       { MARVELL_PHY_ID_88E1510, MARVELL_PHY_ID_MASK },
diff --git a/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch b/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
new file mode 100644 (file)
index 0000000..5ecdb4c
--- /dev/null
@@ -0,0 +1,2660 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: firmware: Remove redundant log messages from drivers
+Date: Sun, 09 Dec 2012 16:40:31 +0000
+Forwarded: no
+
+Now that firmware_class logs every success and failure consistently,
+many other log messages can be removed from drivers.
+
+This will probably need to be split up into multiple patches prior to
+upstream submission.
+
+--- a/arch/arm/mach-netx/xc.c
++++ b/arch/arm/mach-netx/xc.c
+@@ -127,10 +127,8 @@ int xc_request_firmware(struct xc *x)
+       ret = request_firmware(&fw, name, x->dev);
+-      if (ret < 0) {
+-              dev_err(x->dev, "request_firmware failed\n");
++      if (ret)
+               return ret;
+-      }
+       head = (struct fw_header *)fw->data;
+       if (head->magic != 0x4e657458) {
+--- a/arch/cris/arch-v32/drivers/iop_fw_load.c
++++ b/arch/cris/arch-v32/drivers/iop_fw_load.c
+@@ -74,12 +74,7 @@ int iop_fw_load_spu(const unsigned char
+                                 fw_name,
+                                 &iop_spu_device[spu_inst]);
+       if (retval != 0)
+-      {
+-              printk(KERN_ERR
+-                     "iop_load_spu: Failed to load firmware \"%s\"\n",
+-                     fw_name);
+               return retval;
+-      }
+       data = (u32 *) fw_entry->data;
+       /* acquire ownership of memory controller */
+@@ -137,12 +132,7 @@ int iop_fw_load_mpu(unsigned char *fw_na
+       /* get firmware */
+       retval = request_firmware(&fw_entry, fw_name, &iop_mpu_device);
+       if (retval != 0)
+-      {
+-              printk(KERN_ERR
+-                     "iop_load_spu: Failed to load firmware \"%s\"\n",
+-                     fw_name);
+               return retval;
+-      }
+       data = (u32 *) fw_entry->data;
+       /* disable MPU */
+--- a/arch/x86/kernel/cpu/microcode/amd.c
++++ b/arch/x86/kernel/cpu/microcode/amd.c
+@@ -917,10 +917,8 @@ static enum ucode_state request_microcod
+       if (c->x86 >= 0x15)
+               snprintf(fw_name, sizeof(fw_name), "amd-ucode/microcode_amd_fam%.2xh.bin", c->x86);
+-      if (request_firmware_direct(&fw, (const char *)fw_name, device)) {
+-              pr_debug("failed to load file %s\n", fw_name);
++      if (request_firmware_direct(&fw, (const char *)fw_name, device))
+               goto out;
+-      }
+       ret = UCODE_ERROR;
+       if (*(u32 *)fw->data != UCODE_MAGIC) {
+--- a/drivers/atm/ambassador.c
++++ b/drivers/atm/ambassador.c
+@@ -1929,10 +1929,8 @@ static int ucode_init(loader_block *lb,
+   int res;
+   res = request_ihex_firmware(&fw, "atmsar11.fw", &dev->pci_dev->dev);
+-  if (res) {
+-    PRINTK (KERN_ERR, "Cannot load microcode data");
++  if (res)
+     return res;
+-  }
+   /* First record contains just the start address */
+   rec = (const struct ihex_binrec *)fw->data;
+--- a/drivers/atm/fore200e.c
++++ b/drivers/atm/fore200e.c
+@@ -2506,10 +2506,9 @@ static int fore200e_load_and_start_fw(st
+       return err;
+     sprintf(buf, "%s%s", fore200e->bus->proc_name, FW_EXT);
+-    if ((err = request_firmware(&firmware, buf, device)) < 0) {
+-      printk(FORE200E "problem loading firmware image %s\n", fore200e->bus->model_name);
++    err = request_firmware(&firmware, buf, device);
++    if (err)
+       return err;
+-    }
+     fw_data = (const __le32 *)firmware->data;
+     fw_size = firmware->size / sizeof(u32);
+--- a/drivers/bluetooth/ath3k.c
++++ b/drivers/bluetooth/ath3k.c
+@@ -422,10 +422,8 @@ static int ath3k_load_patch(struct usb_d
+                le32_to_cpu(fw_version.rom_version));
+       ret = request_firmware(&firmware, filename, &udev->dev);
+-      if (ret < 0) {
+-              BT_ERR("Patch file not found %s", filename);
++      if (ret)
+               return ret;
+-      }
+       pt_rom_version = get_unaligned_le32(firmware->data +
+                                           firmware->size - 8);
+@@ -485,10 +483,8 @@ static int ath3k_load_syscfg(struct usb_
+               le32_to_cpu(fw_version.rom_version), clk_value, ".dfu");
+       ret = request_firmware(&firmware, filename, &udev->dev);
+-      if (ret < 0) {
+-              BT_ERR("Configuration file not found %s", filename);
++      if (ret)
+               return ret;
+-      }
+       ret = ath3k_load_fwfile(udev, firmware);
+       release_firmware(firmware);
+--- a/drivers/bluetooth/bcm203x.c
++++ b/drivers/bluetooth/bcm203x.c
+@@ -189,7 +189,6 @@ static int bcm203x_probe(struct usb_inte
+               return -ENOMEM;
+       if (request_firmware(&firmware, "BCM2033-MD.hex", &udev->dev) < 0) {
+-              BT_ERR("Mini driver request failed");
+               usb_free_urb(data->urb);
+               return -EIO;
+       }
+@@ -214,7 +213,6 @@ static int bcm203x_probe(struct usb_inte
+       release_firmware(firmware);
+       if (request_firmware(&firmware, "BCM2033-FW.bin", &udev->dev) < 0) {
+-              BT_ERR("Firmware request failed");
+               usb_free_urb(data->urb);
+               kfree(data->buffer);
+               return -EIO;
+--- a/drivers/bluetooth/bfusb.c
++++ b/drivers/bluetooth/bfusb.c
+@@ -652,10 +652,8 @@ static int bfusb_probe(struct usb_interf
+       skb_queue_head_init(&data->pending_q);
+       skb_queue_head_init(&data->completed_q);
+-      if (request_firmware(&firmware, "bfubase.frm", &udev->dev) < 0) {
+-              BT_ERR("Firmware request failed");
++      if (request_firmware(&firmware, "bfubase.frm", &udev->dev))
+               goto done;
+-      }
+       BT_DBG("firmware data %p size %zu", firmware->data, firmware->size);
+--- a/drivers/bluetooth/bt3c_cs.c
++++ b/drivers/bluetooth/bt3c_cs.c
+@@ -566,10 +566,8 @@ static int bt3c_open(struct bt3c_info *i
+       /* Load firmware */
+       err = request_firmware(&firmware, "BT3CPCC.bin", &info->p_dev->dev);
+-      if (err < 0) {
+-              BT_ERR("Firmware request failed");
++      if (err)
+               goto error;
+-      }
+       err = bt3c_load_firmware(info, firmware->data, firmware->size);
+--- a/drivers/bluetooth/btmrvl_sdio.c
++++ b/drivers/bluetooth/btmrvl_sdio.c
+@@ -452,8 +452,6 @@ static int btmrvl_sdio_download_helper(s
+       ret = request_firmware(&fw_helper, card->helper,
+                                               &card->func->dev);
+       if ((ret < 0) || !fw_helper) {
+-              BT_ERR("request_firmware(helper) failed, error code = %d",
+-                                                                      ret);
+               ret = -ENOENT;
+               goto done;
+       }
+@@ -552,8 +550,6 @@ static int btmrvl_sdio_download_fw_w_hel
+       ret = request_firmware(&fw_firmware, card->firmware,
+                                                       &card->func->dev);
+       if ((ret < 0) || !fw_firmware) {
+-              BT_ERR("request_firmware(firmware) failed, error code = %d",
+-                                                                      ret);
+               ret = -ENOENT;
+               goto done;
+       }
+--- a/drivers/char/dsp56k.c
++++ b/drivers/char/dsp56k.c
+@@ -140,11 +140,8 @@ static int dsp56k_upload(u_char __user *
+       }
+       err = request_firmware(&fw, fw_name, &pdev->dev);
+       platform_device_unregister(pdev);
+-      if (err) {
+-              printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
+-                     fw_name, err);
++      if (err)
+               return err;
+-      }
+       if (fw->size % 3) {
+               printk(KERN_ERR "Bogus length %d in image \"%s\"\n",
+                      fw->size, fw_name);
+--- a/drivers/dma/imx-sdma.c
++++ b/drivers/dma/imx-sdma.c
+@@ -1433,11 +1433,8 @@ static void sdma_load_firmware(const str
+       const struct sdma_script_start_addrs *addr;
+       unsigned short *ram_code;
+-      if (!fw) {
+-              dev_info(sdma->dev, "external firmware not found, using ROM firmware\n");
+-              /* In this case we just use the ROM firmware. */
++      if (!fw)
+               return;
+-      }
+       if (fw->size < sizeof(*header))
+               goto err_firmware;
+--- a/drivers/gpu/drm/mga/mga_warp.c
++++ b/drivers/gpu/drm/mga/mga_warp.c
+@@ -79,11 +79,8 @@ int mga_warp_install_microcode(drm_mga_p
+       }
+       rc = request_ihex_firmware(&fw, firmware_name, &pdev->dev);
+       platform_device_unregister(pdev);
+-      if (rc) {
+-              DRM_ERROR("mga: Failed to load microcode \"%s\"\n",
+-                        firmware_name);
++      if (rc)
+               return rc;
+-      }
+       size = 0;
+       where = 0;
+--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
++++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
+@@ -1787,10 +1787,8 @@ gf100_gr_ctor_fw_legacy(struct gf100_gr
+       if (ret) {
+               snprintf(f, sizeof(f), "nouveau/%s", fwname);
+               ret = request_firmware(&fw, f, device->dev);
+-              if (ret) {
+-                      nvkm_error(subdev, "failed to load %s\n", fwname);
++              if (ret)
+                       return ret;
+-              }
+       }
+       fuc->size = fw->size;
+--- a/drivers/gpu/drm/r128/r128_cce.c
++++ b/drivers/gpu/drm/r128/r128_cce.c
+@@ -154,11 +154,8 @@ static int r128_cce_load_microcode(drm_r
+       }
+       rc = request_firmware(&fw, FIRMWARE_NAME, &pdev->dev);
+       platform_device_unregister(pdev);
+-      if (rc) {
+-              printk(KERN_ERR "r128_cce: Failed to load firmware \"%s\"\n",
+-                     FIRMWARE_NAME);
++      if (rc)
+               return rc;
+-      }
+       if (fw->size != 256 * 8) {
+               printk(KERN_ERR
+--- a/drivers/gpu/drm/radeon/ni.c
++++ b/drivers/gpu/drm/radeon/ni.c
+@@ -837,10 +837,6 @@ int ni_init_microcode(struct radeon_devi
+ out:
+       if (err) {
+-              if (err != -EINVAL)
+-                      printk(KERN_ERR
+-                             "ni_cp: Failed to load firmware \"%s\"\n",
+-                             fw_name);
+               release_firmware(rdev->pfp_fw);
+               rdev->pfp_fw = NULL;
+               release_firmware(rdev->me_fw);
+--- a/drivers/gpu/drm/radeon/r100.c
++++ b/drivers/gpu/drm/radeon/r100.c
+@@ -1041,10 +1041,7 @@ static int r100_cp_init_microcode(struct
+       }
+       err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
+-      if (err) {
+-              printk(KERN_ERR "radeon_cp: Failed to load firmware \"%s\"\n",
+-                     fw_name);
+-      } else if (rdev->me_fw->size % 8) {
++      if (err == 0 && rdev->me_fw->size % 8) {
+               printk(KERN_ERR
+                      "radeon_cp: Bogus length %zu in firmware \"%s\"\n",
+                      rdev->me_fw->size, fw_name);
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -2599,10 +2599,6 @@ int r600_init_microcode(struct radeon_de
+ out:
+       if (err) {
+-              if (err != -EINVAL)
+-                      printk(KERN_ERR
+-                             "r600_cp: Failed to load firmware \"%s\"\n",
+-                             fw_name);
+               release_firmware(rdev->pfp_fw);
+               rdev->pfp_fw = NULL;
+               release_firmware(rdev->me_fw);
+--- a/drivers/infiniband/hw/qib/qib_sd7220.c
++++ b/drivers/infiniband/hw/qib/qib_sd7220.c
+@@ -406,10 +406,8 @@ int qib_sd7220_init(struct qib_devdata *
+       }
+       ret = request_firmware(&fw, SD7220_FW_NAME, &dd->pcidev->dev);
+-      if (ret) {
+-              qib_dev_err(dd, "Failed to load IB SERDES image\n");
++      if (ret)
+               goto done;
+-      }
+       /* Substitute our deduced value for was_reset */
+       ret = qib_ibsd_ucode_loaded(dd->pport, fw);
+--- a/drivers/input/touchscreen/atmel_mxt_ts.c
++++ b/drivers/input/touchscreen/atmel_mxt_ts.c
+@@ -2714,10 +2714,8 @@ static int mxt_load_fw(struct device *de
+       int ret;
+       ret = request_firmware(&fw, fn, dev);
+-      if (ret) {
+-              dev_err(dev, "Unable to open firmware %s\n", fn);
++      if (ret)
+               return ret;
+-      }
+       /* Check for incorrect enc file */
+       ret = mxt_check_firmware_format(dev, fw);
+--- a/drivers/isdn/hardware/mISDN/speedfax.c
++++ b/drivers/isdn/hardware/mISDN/speedfax.c
+@@ -392,11 +392,8 @@ setup_instance(struct sfax_hw *card)
+       card->isar.owner = THIS_MODULE;
+       err = request_firmware(&firmware, "isdn/ISAR.BIN", &card->pdev->dev);
+-      if (err < 0) {
+-              pr_info("%s: firmware request failed %d\n",
+-                      card->name, err);
++      if (err)
+               goto error_fw;
+-      }
+       if (debug & DEBUG_HW)
+               pr_notice("%s: got firmware %zu bytes\n",
+                         card->name, firmware->size);
+--- a/drivers/media/tuners/tuner-xc2028.c
++++ b/drivers/media/tuners/tuner-xc2028.c
+@@ -1374,7 +1374,6 @@ static void load_firmware_cb(const struc
+       tuner_dbg("request_firmware_nowait(): %s\n", fw ? "OK" : "error");
+       if (!fw) {
+-              tuner_err("Could not load firmware %s.\n", priv->fname);
+               priv->state = XC2028_NODEV;
+               return;
+       }
+--- a/drivers/media/usb/dvb-usb/dib0700_devices.c
++++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
+@@ -2411,12 +2411,9 @@ static int stk9090m_frontend_attach(stru
+       dib9000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x10, 0x80);
+-      if (request_firmware(&state->frontend_firmware, "dib9090.fw", &adap->dev->udev->dev)) {
+-              deb_info("%s: Upload failed. (file not found?)\n", __func__);
++      if (request_firmware(&state->frontend_firmware, "dib9090.fw", &adap->dev->udev->dev))
+               return -ENODEV;
+-      } else {
+-              deb_info("%s: firmware read %Zu bytes.\n", __func__, state->frontend_firmware->size);
+-      }
++      deb_info("%s: firmware read %Zu bytes.\n", __func__, state->frontend_firmware->size);
+       stk9090m_config.microcode_B_fe_size = state->frontend_firmware->size;
+       stk9090m_config.microcode_B_fe_buffer = state->frontend_firmware->data;
+@@ -2477,12 +2474,9 @@ static int nim9090md_frontend_attach(str
+       msleep(20);
+       dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1);
+-      if (request_firmware(&state->frontend_firmware, "dib9090.fw", &adap->dev->udev->dev)) {
+-              deb_info("%s: Upload failed. (file not found?)\n", __func__);
++      if (request_firmware(&state->frontend_firmware, "dib9090.fw", &adap->dev->udev->dev))
+               return -EIO;
+-      } else {
+-              deb_info("%s: firmware read %Zu bytes.\n", __func__, state->frontend_firmware->size);
+-      }
++      deb_info("%s: firmware read %Zu bytes.\n", __func__, state->frontend_firmware->size);
+       nim9090md_config[0].microcode_B_fe_size = state->frontend_firmware->size;
+       nim9090md_config[0].microcode_B_fe_buffer = state->frontend_firmware->data;
+       nim9090md_config[1].microcode_B_fe_size = state->frontend_firmware->size;
+--- a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c
++++ b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c
+@@ -80,14 +80,9 @@ int dvb_usb_download_firmware(struct usb
+       int ret;
+       const struct firmware *fw = NULL;
+-      if ((ret = request_firmware(&fw, props->firmware, &udev->dev)) != 0) {
+-              err("did not find the firmware file. (%s) "
+-                      "Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
+-                      props->firmware,ret);
++      ret = request_firmware(&fw, props->firmware, &udev->dev);
++      if (ret)
+               return ret;
+-      }
+-
+-      info("downloading firmware from file '%s'",props->firmware);
+       switch (props->usb_ctrl) {
+               case CYPRESS_AN2135:
+--- a/drivers/media/usb/dvb-usb/gp8psk.c
++++ b/drivers/media/usb/dvb-usb/gp8psk.c
+@@ -134,20 +134,14 @@ static int gp8psk_load_bcm4500fw(struct
+       const u8 *ptr;
+       u8 *buf;
+       if ((ret = request_firmware(&fw, bcm4500_firmware,
+-                                      &d->udev->dev)) != 0) {
+-              err("did not find the bcm4500 firmware file. (%s) "
+-                      "Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)",
+-                      bcm4500_firmware,ret);
++                                      &d->udev->dev)) != 0)
+               return ret;
+-      }
+       ret = -EINVAL;
+       if (gp8psk_usb_out_op(d, LOAD_BCM4500,1,0,NULL, 0))
+               goto out_rel_fw;
+-      info("downloading bcm4500 firmware from file '%s'",bcm4500_firmware);
+-
+       ptr = fw->data;
+       buf = kmalloc(64, GFP_KERNEL | GFP_DMA);
+       if (!buf) {
+--- a/drivers/media/usb/dvb-usb/opera1.c
++++ b/drivers/media/usb/dvb-usb/opera1.c
+@@ -453,9 +453,6 @@ static int opera1_xilinx_load_firmware(s
+       info("start downloading fpga firmware %s",filename);
+       if ((ret = request_firmware(&fw, filename, &dev->dev)) != 0) {
+-              err("did not find the firmware file. (%s) "
+-                      "Please see linux/Documentation/dvb/ for more details on firmware-problems.",
+-                      filename);
+               return ret;
+       } else {
+               p = kmalloc(fw->size, GFP_KERNEL);
+--- a/drivers/media/dvb-frontends/af9013.c
++++ b/drivers/media/dvb-frontends/af9013.c
+@@ -1380,16 +1380,8 @@ static int af9013_download_firmware(stru
+       /* request the firmware, this will block and timeout */
+       ret = request_firmware(&fw, fw_file, state->i2c->dev.parent);
+-      if (ret) {
+-              dev_info(&state->i2c->dev, "%s: did not find the firmware " \
+-                      "file. (%s) Please see linux/Documentation/dvb/ for " \
+-                      "more details on firmware-problems. (%d)\n",
+-                      KBUILD_MODNAME, fw_file, ret);
++      if (ret)
+               goto err;
+-      }
+-
+-      dev_info(&state->i2c->dev, "%s: downloading firmware from file '%s'\n",
+-                      KBUILD_MODNAME, fw_file);
+       /* calc checksum */
+       for (i = 0; i < fw->size; i++)
+--- a/drivers/media/dvb-frontends/bcm3510.c
++++ b/drivers/media/dvb-frontends/bcm3510.c
+@@ -635,10 +635,9 @@ static int bcm3510_download_firmware(str
+       int ret,i;
+       deb_info("requesting firmware\n");
+-      if ((ret = st->config->request_firmware(fe, &fw, BCM3510_DEFAULT_FIRMWARE)) < 0) {
+-              err("could not load firmware (%s): %d",BCM3510_DEFAULT_FIRMWARE,ret);
++      ret = st->config->request_firmware(fe, &fw, BCM3510_DEFAULT_FIRMWARE);
++      if (ret)
+               return ret;
+-      }
+       deb_info("got firmware: %zu\n", fw->size);
+       b = fw->data;
+--- a/drivers/media/dvb-frontends/cx24116.c
++++ b/drivers/media/dvb-frontends/cx24116.c
+@@ -495,13 +495,8 @@ static int cx24116_firmware_ondemand(str
+                       __func__, CX24116_DEFAULT_FIRMWARE);
+               ret = request_firmware(&fw, CX24116_DEFAULT_FIRMWARE,
+                       state->i2c->dev.parent);
+-              printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n",
+-                      __func__);
+-              if (ret) {
+-                      printk(KERN_ERR "%s: No firmware uploaded "
+-                              "(timeout or file not found?)\n", __func__);
++              if (ret)
+                       return ret;
+-              }
+               /* Make sure we don't recurse back through here
+                * during loading */
+--- a/drivers/media/dvb-frontends/drxd_hard.c
++++ b/drivers/media/dvb-frontends/drxd_hard.c
+@@ -905,10 +905,8 @@ static int load_firmware(struct drxd_sta
+ {
+       const struct firmware *fw;
+-      if (request_firmware(&fw, fw_name, state->dev) < 0) {
+-              printk(KERN_ERR "drxd: firmware load failure [%s]\n", fw_name);
++      if (request_firmware(&fw, fw_name, state->dev))
+               return -EIO;
+-      }
+       state->microcode = kmemdup(fw->data, fw->size, GFP_KERNEL);
+       if (state->microcode == NULL) {
+--- a/drivers/media/dvb-frontends/drxk_hard.c
++++ b/drivers/media/dvb-frontends/drxk_hard.c
+@@ -6284,10 +6284,6 @@ static void load_firmware_cb(const struc
+       dprintk(1, ": %s\n", fw ? "firmware loaded" : "firmware not loaded");
+       if (!fw) {
+-              pr_err("Could not load firmware file %s.\n",
+-                      state->microcode_name);
+-              pr_info("Copy %s to your hotplug directory!\n",
+-                      state->microcode_name);
+               state->microcode_name = NULL;
+               /*
+--- a/drivers/media/dvb-frontends/ds3000.c
++++ b/drivers/media/dvb-frontends/ds3000.c
+@@ -362,12 +362,8 @@ static int ds3000_firmware_ondemand(stru
+                               DS3000_DEFAULT_FIRMWARE);
+       ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE,
+                               state->i2c->dev.parent);
+-      printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
+-      if (ret) {
+-              printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
+-                              "found?)\n", __func__);
++      if (ret)
+               return ret;
+-      }
+       ret = ds3000_load_firmware(fe, fw);
+       if (ret)
+--- a/drivers/media/dvb-frontends/nxt200x.c
++++ b/drivers/media/dvb-frontends/nxt200x.c
+@@ -891,12 +891,8 @@ static int nxt2002_init(struct dvb_front
+                __func__, NXT2002_DEFAULT_FIRMWARE);
+       ret = request_firmware(&fw, NXT2002_DEFAULT_FIRMWARE,
+                              state->i2c->dev.parent);
+-      pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
+-      if (ret) {
+-              pr_err("%s: No firmware uploaded (timeout or file not found?)"
+-                     "\n", __func__);
++      if (ret)
+               return ret;
+-      }
+       ret = nxt2002_load_firmware(fe, fw);
+       release_firmware(fw);
+@@ -958,12 +954,8 @@ static int nxt2004_init(struct dvb_front
+                __func__, NXT2004_DEFAULT_FIRMWARE);
+       ret = request_firmware(&fw, NXT2004_DEFAULT_FIRMWARE,
+                              state->i2c->dev.parent);
+-      pr_debug("%s: Waiting for firmware upload(2)...\n", __func__);
+-      if (ret) {
+-              pr_err("%s: No firmware uploaded (timeout or file not found?)"
+-                     "\n", __func__);
++      if (ret)
+               return ret;
+-      }
+       ret = nxt2004_load_firmware(fe, fw);
+       release_firmware(fw);
+--- a/drivers/media/dvb-frontends/or51132.c
++++ b/drivers/media/dvb-frontends/or51132.c
+@@ -341,11 +341,8 @@ static int or51132_set_parameters(struct
+               printk("or51132: Waiting for firmware upload(%s)...\n",
+                      fwname);
+               ret = request_firmware(&fw, fwname, state->i2c->dev.parent);
+-              if (ret) {
+-                      printk(KERN_WARNING "or51132: No firmware up"
+-                             "loaded(timeout or file not found?)\n");
++              if (ret)
+                       return ret;
+-              }
+               ret = or51132_load_firmware(fe, fw);
+               release_firmware(fw);
+               if (ret) {
+--- a/drivers/media/dvb-frontends/or51211.c
++++ b/drivers/media/dvb-frontends/or51211.c
+@@ -375,12 +375,8 @@ static int or51211_init(struct dvb_front
+                       OR51211_DEFAULT_FIRMWARE);
+               ret = config->request_firmware(fe, &fw,
+                                              OR51211_DEFAULT_FIRMWARE);
+-              pr_info("Got Hotplug firmware\n");
+-              if (ret) {
+-                      pr_warn("No firmware uploaded "
+-                              "(timeout or file not found?)\n");
++              if (ret)
+                       return ret;
+-              }
+               ret = or51211_load_firmware(fe, fw);
+               release_firmware(fw);
+--- a/drivers/media/dvb-frontends/sp8870.c
++++ b/drivers/media/dvb-frontends/sp8870.c
+@@ -315,10 +315,8 @@ static int sp8870_init (struct dvb_front
+       /* request the firmware, this will block until someone uploads it */
+       printk("sp8870: waiting for firmware upload (%s)...\n", SP8870_DEFAULT_FIRMWARE);
+-      if (state->config->request_firmware(fe, &fw, SP8870_DEFAULT_FIRMWARE)) {
+-              printk("sp8870: no firmware upload (timeout or file not found?)\n");
++      if (state->config->request_firmware(fe, &fw, SP8870_DEFAULT_FIRMWARE))
+               return -EIO;
+-      }
+       if (sp8870_firmware_upload(state, fw)) {
+               printk("sp8870: writing firmware to device failed\n");
+--- a/drivers/media/dvb-frontends/sp887x.c
++++ b/drivers/media/dvb-frontends/sp887x.c
+@@ -527,10 +527,8 @@ static int sp887x_init(struct dvb_fronte
+               /* request the firmware, this will block until someone uploads it */
+               printk("sp887x: waiting for firmware upload (%s)...\n", SP887X_DEFAULT_FIRMWARE);
+               ret = state->config->request_firmware(fe, &fw, SP887X_DEFAULT_FIRMWARE);
+-              if (ret) {
+-                      printk("sp887x: no firmware upload (timeout or file not found?)\n");
++              if (ret)
+                       return ret;
+-              }
+               ret = sp887x_initial_setup(fe, fw);
+               release_firmware(fw);
+--- a/drivers/media/dvb-frontends/tda10048.c
++++ b/drivers/media/dvb-frontends/tda10048.c
+@@ -495,8 +495,6 @@ static int tda10048_firmware_upload(stru
+       ret = request_firmware(&fw, TDA10048_DEFAULT_FIRMWARE,
+               state->i2c->dev.parent);
+       if (ret) {
+-              printk(KERN_ERR "%s: Upload failed. (file not found?)\n",
+-                      __func__);
+               return -EIO;
+       } else {
+               printk(KERN_INFO "%s: firmware read %Zu bytes.\n",
+--- a/drivers/media/dvb-frontends/tda1004x.c
++++ b/drivers/media/dvb-frontends/tda1004x.c
+@@ -401,10 +401,8 @@ static int tda10045_fwupload(struct dvb_
+       /* request the firmware, this will block until someone uploads it */
+       printk(KERN_INFO "tda1004x: waiting for firmware upload (%s)...\n", TDA10045_DEFAULT_FIRMWARE);
+       ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
+-      if (ret) {
+-              printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");
++      if (ret)
+               return ret;
+-      }
+       /* reset chip */
+       tda1004x_write_mask(state, TDA1004X_CONFC4, 0x10, 0);
+@@ -545,7 +543,6 @@ static int tda10046_fwupload(struct dvb_
+                       /* remain compatible to old bug: try to load with tda10045 image name */
+                       ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
+                       if (ret) {
+-                              printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");
+                               return ret;
+                       } else {
+                               printk(KERN_INFO "tda1004x: please rename the firmware file to %s\n",
+--- a/drivers/media/dvb-frontends/tda10071.c
++++ b/drivers/media/dvb-frontends/tda10071.c
+@@ -850,12 +850,8 @@ static int tda10071_init(struct dvb_fron
+               /* request the firmware, this will block and timeout */
+               ret = request_firmware(&fw, fw_file, &client->dev);
+-              if (ret) {
+-                      dev_err(&client->dev,
+-                              "did not find the firmware file. (%s) Please see linux/Documentation/dvb/ for more details on firmware-problems. (%d)\n",
+-                              fw_file, ret);
++              if (ret)
+                       goto error;
+-              }
+               /* init */
+               for (i = 0; i < ARRAY_SIZE(tab2); i++) {
+--- a/drivers/media/pci/ngene/ngene-core.c
++++ b/drivers/media/pci/ngene/ngene-core.c
+@@ -1260,13 +1260,8 @@ static int ngene_load_firm(struct ngene
+               break;
+       }
+-      if (request_firmware(&fw, fw_name, &dev->pci_dev->dev) < 0) {
+-              printk(KERN_ERR DEVICE_NAME
+-                      ": Could not load firmware file %s.\n", fw_name);
+-              printk(KERN_INFO DEVICE_NAME
+-                      ": Copy %s to your hotplug directory!\n", fw_name);
++      if (request_firmware(&fw, fw_name, &dev->pci_dev->dev))
+               return -1;
+-      }
+       if (size == 0)
+               size = fw->size;
+       if (size != fw->size) {
+@@ -1274,8 +1269,6 @@ static int ngene_load_firm(struct ngene
+                       ": Firmware %s has invalid size!", fw_name);
+               err = -1;
+       } else {
+-              printk(KERN_INFO DEVICE_NAME
+-                      ": Loading firmware file %s.\n", fw_name);
+               ngene_fw = (u8 *) fw->data;
+               err = ngene_command_load_firmware(dev, ngene_fw, size);
+       }
+--- a/drivers/media/common/siano/smscoreapi.c
++++ b/drivers/media/common/siano/smscoreapi.c
+@@ -1162,10 +1162,8 @@ static int smscore_load_firmware_from_fi
+               return -EINVAL;
+       rc = request_firmware(&fw, fw_filename, coredev->device);
+-      if (rc < 0) {
+-              pr_err("failed to open firmware file '%s'\n", fw_filename);
++      if (rc < 0)
+               return rc;
+-      }
+       pr_debug("read fw %s, buffer size=0x%zx\n", fw_filename, fw->size);
+       fw_buf = kmalloc(ALIGN(fw->size + sizeof(struct sms_firmware),
+                        SMS_ALLOC_ALIGNMENT), GFP_KERNEL | GFP_DMA);
+--- a/drivers/media/pci/ttpci/av7110.c
++++ b/drivers/media/pci/ttpci/av7110.c
+@@ -1531,16 +1531,9 @@ static int get_firmware(struct av7110* a
+       /* request the av7110 firmware, this will block until someone uploads it */
+       ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
+       if (ret) {
+-              if (ret == -ENOENT) {
+-                      printk(KERN_ERR "dvb-ttpci: could not load firmware,"
+-                             " file not found: dvb-ttpci-01.fw\n");
+-                      printk(KERN_ERR "dvb-ttpci: usually this should be in "
+-                             "/usr/lib/hotplug/firmware or /lib/firmware\n");
+-                      printk(KERN_ERR "dvb-ttpci: and can be downloaded from"
++              if (ret == -ENOENT)
++                      printk(KERN_ERR "dvb-ttpci: firmware can be downloaded from"
+                              " https://linuxtv.org/download/dvb/firmware/\n");
+-              } else
+-                      printk(KERN_ERR "dvb-ttpci: cannot request firmware"
+-                             " (error %i)\n", ret);
+               return -EINVAL;
+       }
+--- a/drivers/media/pci/ttpci/av7110_hw.c
++++ b/drivers/media/pci/ttpci/av7110_hw.c
+@@ -251,11 +251,8 @@ int av7110_bootarm(struct av7110 *av7110
+       //saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT);
+       ret = request_firmware(&fw, fw_name, &dev->pci->dev);
+-      if (ret) {
+-              printk(KERN_ERR "dvb-ttpci: Failed to load firmware \"%s\"\n",
+-                      fw_name);
++      if (ret)
+               return ret;
+-      }
+       mwdebi(av7110, DEBISWAB, DPRAM_BASE, fw->data, fw->size);
+       release_firmware(fw);
+--- a/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
++++ b/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
+@@ -296,10 +296,8 @@ static int ttusb_boot_dsp(struct ttusb *
+       err = request_firmware(&fw, "ttusb-budget/dspbootcode.bin",
+                              &ttusb->dev->dev);
+-      if (err) {
+-              printk(KERN_ERR "ttusb-budget: failed to request firmware\n");
++      if (err)
+               return err;
+-      }
+       /* BootBlock */
+       b[0] = 0xaa;
+--- a/drivers/media/usb/ttusb-dec/ttusb_dec.c
++++ b/drivers/media/usb/ttusb-dec/ttusb_dec.c
+@@ -1296,11 +1296,8 @@ static int ttusb_dec_boot_dsp(struct ttu
+       dprintk("%s\n", __func__);
+       result = request_firmware(&fw_entry, dec->firmware_name, &dec->udev->dev);
+-      if (result) {
+-              printk(KERN_ERR "%s: Firmware (%s) unavailable.\n",
+-                     __func__, dec->firmware_name);
++      if (result)
+               return result;
+-      }
+       firmware = fw_entry->data;
+       firmware_size = fw_entry->size;
+--- a/drivers/media/radio/radio-wl1273.c
++++ b/drivers/media/radio/radio-wl1273.c
+@@ -514,11 +514,8 @@ static int wl1273_fm_upload_firmware_pat
+        * Uploading the firmware patch is not always necessary,
+        * so we only print an info message.
+        */
+-      if (request_firmware(&fw_p, fw_name, dev)) {
+-              dev_info(dev, "%s - %s not found\n", __func__, fw_name);
+-
++      if (request_firmware(&fw_p, fw_name, dev))
+               return 0;
+-      }
+       ptr = (__u8 *) fw_p->data;
+       packet_num = ptr[0];
+--- a/drivers/media/radio/wl128x/fmdrv_common.c
++++ b/drivers/media/radio/wl128x/fmdrv_common.c
+@@ -1249,10 +1249,8 @@ static int fm_download_firmware(struct f
+       ret = request_firmware(&fw_entry, fw_name,
+                               &fmdev->radio_dev->dev);
+-      if (ret < 0) {
+-              fmerr("Unable to read firmware(%s) content\n", fw_name);
++      if (ret)
+               return ret;
+-      }
+       fmdbg("Firmware(%s) length : %zu bytes\n", fw_name, fw_entry->size);
+       fw_data = (void *)fw_entry->data;
+--- a/drivers/media/pci/bt8xx/bttv-cards.c
++++ b/drivers/media/pci/bt8xx/bttv-cards.c
+@@ -3912,10 +3912,8 @@ static int pvr_boot(struct bttv *btv)
+       int rc;
+       rc = request_firmware(&fw_entry, "hcwamc.rbf", &btv->c.pci->dev);
+-      if (rc != 0) {
+-              pr_warn("%d: no altera firmware [via hotplug]\n", btv->c.nr);
++      if (rc != 0)
+               return rc;
+-      }
+       rc = pvr_altera_load(btv, fw_entry->data, fw_entry->size);
+       pr_info("%d: altera firmware upload %s\n",
+               btv->c.nr, (rc < 0) ? "failed" : "ok");
+--- a/drivers/media/usb/cpia2/cpia2_core.c
++++ b/drivers/media/usb/cpia2/cpia2_core.c
+@@ -907,11 +907,8 @@ static int apply_vp_patch(struct camera_
+       struct cpia2_command cmd;
+       ret = request_firmware(&fw, fw_name, &cam->dev->dev);
+-      if (ret) {
+-              printk(KERN_ERR "cpia2: failed to load VP patch \"%s\"\n",
+-                     fw_name);
++      if (ret)
+               return ret;
+-      }
+       cmd.req_mode = CAMERAACCESS_TYPE_REPEAT | CAMERAACCESS_VP;
+       cmd.direction = TRANSFER_WRITE;
+--- a/drivers/media/pci/cx18/cx18-av-firmware.c
++++ b/drivers/media/pci/cx18/cx18-av-firmware.c
+@@ -85,10 +85,8 @@ int cx18_av_loadfw(struct cx18 *cx)
+       int i;
+       int retries1 = 0;
+-      if (request_firmware(&fw, FWFILE, &cx->pci_dev->dev) != 0) {
+-              CX18_ERR_DEV(sd, "unable to open firmware %s\n", FWFILE);
++      if (request_firmware(&fw, FWFILE, &cx->pci_dev->dev) != 0)
+               return -EINVAL;
+-      }
+       /* The firmware load often has byte errors, so allow for several
+          retries, both at byte level and at the firmware load level. */
+--- a/drivers/media/pci/cx18/cx18-dvb.c
++++ b/drivers/media/pci/cx18/cx18-dvb.c
+@@ -141,9 +141,7 @@ static int yuan_mpc718_mt352_reqfw(struc
+       int ret;
+       ret = request_firmware(fw, fn, &cx->pci_dev->dev);
+-      if (ret)
+-              CX18_ERR("Unable to open firmware file %s\n", fn);
+-      else {
++      if (!ret) {
+               size_t sz = (*fw)->size;
+               if (sz < 2 || sz > 64 || (sz % 2) != 0) {
+                       CX18_ERR("Firmware %s has a bad size: %lu bytes\n",
+@@ -156,7 +154,7 @@ static int yuan_mpc718_mt352_reqfw(struc
+       if (ret) {
+               CX18_ERR("The MPC718 board variant with the MT352 DVB-T"
+-                        "demodualtor will not work without it\n");
++                        "demodulator will not work without firmware\n");
+               CX18_ERR("Run 'linux/Documentation/dvb/get_dvb_firmware "
+                         "mpc718' if you need the firmware\n");
+       }
+--- a/drivers/media/pci/cx18/cx18-firmware.c
++++ b/drivers/media/pci/cx18/cx18-firmware.c
+@@ -106,11 +106,8 @@ static int load_cpu_fw_direct(const char
+       u32 __iomem *dst = (u32 __iomem *)mem;
+       const u32 *src;
+-      if (request_firmware(&fw, fn, &cx->pci_dev->dev)) {
+-              CX18_ERR("Unable to open firmware %s\n", fn);
+-              CX18_ERR("Did you put the firmware in the hotplug firmware directory?\n");
++      if (request_firmware(&fw, fn, &cx->pci_dev->dev))
+               return -ENOMEM;
+-      }
+       src = (const u32 *)fw->data;
+@@ -151,8 +148,6 @@ static int load_apu_fw_direct(const char
+       int sz;
+       if (request_firmware(&fw, fn, &cx->pci_dev->dev)) {
+-              CX18_ERR("unable to open firmware %s\n", fn);
+-              CX18_ERR("did you put the firmware in the hotplug firmware directory?\n");
+               cx18_setup_page(cx, 0);
+               return -ENOMEM;
+       }
+--- a/drivers/media/usb/cx231xx/cx231xx-417.c
++++ b/drivers/media/usb/cx231xx/cx231xx-417.c
+@@ -999,11 +999,6 @@ static int cx231xx_load_firmware(struct
+                                 dev->dev);
+       if (retval != 0) {
+-              dev_err(dev->dev,
+-                      "ERROR: Hotplug firmware request failed (%s).\n",
+-                      CX231xx_FIRM_IMAGE_NAME);
+-              dev_err(dev->dev,
+-                      "Please fix your hotplug setup, the board will not work without firmware loaded!\n");
+               vfree(p_current_fw);
+               vfree(p_buffer);
+               return retval;
+--- a/drivers/media/pci/cx23885/cx23885-417.c
++++ b/drivers/media/pci/cx23885/cx23885-417.c
+@@ -931,14 +931,8 @@ static int cx23885_load_firmware(struct
+       retval = request_firmware(&firmware, CX23885_FIRM_IMAGE_NAME,
+                                 &dev->pci->dev);
+-      if (retval != 0) {
+-              printk(KERN_ERR
+-                      "ERROR: Hotplug firmware request failed (%s).\n",
+-                      CX23885_FIRM_IMAGE_NAME);
+-              printk(KERN_ERR "Please fix your hotplug setup, the board will "
+-                      "not work without firmware loaded!\n");
++      if (retval != 0)
+               return -1;
+-      }
+       if (firmware->size != CX23885_FIRM_IMAGE_SIZE) {
+               printk(KERN_ERR "ERROR: Firmware size mismatch "
+--- a/drivers/media/pci/cx23885/cx23885-cards.c
++++ b/drivers/media/pci/cx23885/cx23885-cards.c
+@@ -2341,11 +2341,7 @@ void cx23885_card_setup(struct cx23885_d
+                               cinfo.rev, filename);
+               ret = request_firmware(&fw, filename, &dev->pci->dev);
+-              if (ret != 0)
+-                      printk(KERN_ERR "did not find the firmware file. (%s) "
+-                      "Please see linux/Documentation/dvb/ for more details "
+-                      "on firmware-problems.", filename);
+-              else
++              if (ret == 0)
+                       altera_init(&netup_config, fw);
+               release_firmware(fw);
+--- a/drivers/media/i2c/cx25840/cx25840-firmware.c
++++ b/drivers/media/i2c/cx25840/cx25840-firmware.c
+@@ -126,10 +126,8 @@ int cx25840_loadfw(struct i2c_client *cl
+       if (is_cx231xx(state) && max_buf_size > 16)
+               max_buf_size = 16;
+-      if (request_firmware(&fw, fwname, FWDEV(client)) != 0) {
+-              v4l_err(client, "unable to open firmware %s\n", fwname);
++      if (request_firmware(&fw, fwname, FWDEV(client)) != 0)
+               return -EINVAL;
+-      }
+       start_fw_load(client);
+--- a/drivers/media/pci/cx88/cx88-blackbird.c
++++ b/drivers/media/pci/cx88/cx88-blackbird.c
+@@ -444,12 +444,8 @@ static int blackbird_load_firmware(struc
+                                 &dev->pci->dev);
+-      if (retval != 0) {
+-              pr_err("Hotplug firmware request failed (%s).\n",
+-                      CX2341X_FIRM_ENC_FILENAME);
+-              pr_err("Please fix your hotplug setup, the board will not work without firmware loaded!\n");
++      if (retval != 0)
+               return -EIO;
+-      }
+       if (firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) {
+               pr_err("Firmware size mismatch (have %zd, expected %d)\n",
+--- a/drivers/media/usb/gspca/vicam.c
++++ b/drivers/media/usb/gspca/vicam.c
+@@ -243,10 +243,8 @@ static int sd_init(struct gspca_dev *gsp
+       ret = request_ihex_firmware(&fw, VICAM_FIRMWARE,
+                                   &gspca_dev->dev->dev);
+-      if (ret) {
+-              pr_err("Failed to load \"vicam/firmware.fw\": %d\n", ret);
++      if (ret)
+               return ret;
+-      }
+       firmware_buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
+       if (!firmware_buf) {
+--- a/drivers/media/pci/ivtv/ivtv-firmware.c
++++ b/drivers/media/pci/ivtv/ivtv-firmware.c
+@@ -80,8 +80,6 @@ retry:
+               release_firmware(fw);
+               return size;
+       }
+-      IVTV_ERR("Unable to open firmware %s (must be %ld bytes)\n", fn, size);
+-      IVTV_ERR("Did you put the firmware in the hotplug firmware directory?\n");
+       return -ENOMEM;
+ }
+--- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
++++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
+@@ -1382,29 +1382,6 @@ static int pvr2_locate_firmware(struct p
+                          "request_firmware fatal error with code=%d",ret);
+               return ret;
+       }
+-      pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+-                 "***WARNING***"
+-                 " Device %s firmware"
+-                 " seems to be missing.",
+-                 fwtypename);
+-      pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+-                 "Did you install the pvrusb2 firmware files"
+-                 " in their proper location?");
+-      if (fwcount == 1) {
+-              pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+-                         "request_firmware unable to locate %s file %s",
+-                         fwtypename,fwnames[0]);
+-      } else {
+-              pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+-                         "request_firmware unable to locate"
+-                         " one of the following %s files:",
+-                         fwtypename);
+-              for (idx = 0; idx < fwcount; idx++) {
+-                      pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+-                                 "request_firmware: Failed to find %s",
+-                                 fwnames[idx]);
+-              }
+-      }
+       return ret;
+ }
+--- a/drivers/media/usb/s2255/s2255drv.c
++++ b/drivers/media/usb/s2255/s2255drv.c
+@@ -2308,10 +2308,8 @@ static int s2255_probe(struct usb_interf
+       }
+       /* load the first chunk */
+       if (request_firmware(&dev->fw_data->fw,
+-                           FIRMWARE_FILE_NAME, &dev->udev->dev)) {
+-              dev_err(&interface->dev, "sensoray 2255 failed to get firmware\n");
++                           FIRMWARE_FILE_NAME, &dev->udev->dev))
+               goto errorREQFW;
+-      }
+       /* check the firmware is valid */
+       fw_size = dev->fw_data->fw->size;
+       pdata = (__le32 *) &dev->fw_data->fw->data[fw_size - 8];
+--- a/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
++++ b/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
+@@ -95,10 +95,8 @@ int s5p_mfc_load_firmware(struct s5p_mfc
+               }
+       }
+-      if (err != 0) {
+-              mfc_err("Firmware is not present in the /lib/firmware directory nor compiled in kernel\n");
++      if (err != 0)
+               return -EINVAL;
+-      }
+       if (fw_blob->size > dev->fw_size) {
+               mfc_err("MFC firmware is too big to be loaded\n");
+               release_firmware(fw_blob);
+--- a/drivers/media/pci/saa7164/saa7164-fw.c
++++ b/drivers/media/pci/saa7164/saa7164-fw.c
+@@ -420,11 +420,8 @@ int saa7164_downloadfirmware(struct saa7
+                       __func__, fwname);
+               ret = request_firmware(&fw, fwname, &dev->pci->dev);
+-              if (ret) {
+-                      printk(KERN_ERR "%s() Upload failed. "
+-                              "(file not found?)\n", __func__);
++              if (ret)
+                       return -ENOMEM;
+-              }
+               printk(KERN_INFO "%s() firmware read %Zu bytes.\n",
+                       __func__, fw->size);
+--- a/drivers/misc/ti-st/st_kim.c
++++ b/drivers/misc/ti-st/st_kim.c
+@@ -302,11 +302,8 @@ static long download_firmware(struct kim
+           request_firmware(&kim_gdata->fw_entry, bts_scr_name,
+                            &kim_gdata->kim_pdev->dev);
+       if (unlikely((err != 0) || (kim_gdata->fw_entry->data == NULL) ||
+-                   (kim_gdata->fw_entry->size == 0))) {
+-              pr_err(" request_firmware failed(errno %ld) for %s", err,
+-                         bts_scr_name);
++                   (kim_gdata->fw_entry->size == 0)))
+               return -EINVAL;
+-      }
+       ptr = (void *)kim_gdata->fw_entry->data;
+       len = kim_gdata->fw_entry->size;
+       /* bts_header to remove out magic number and
+--- a/drivers/net/can/softing/softing_fw.c
++++ b/drivers/net/can/softing/softing_fw.c
+@@ -237,11 +237,8 @@ int softing_load_app_fw(const char *file
+       int8_t type_end = 0, type_entrypoint = 0;
+       ret = request_firmware(&fw, file, &card->pdev->dev);
+-      if (ret) {
+-              dev_alert(&card->pdev->dev, "request_firmware(%s) got %i\n",
+-                      file, ret);
++      if (ret)
+               return ret;
+-      }
+       dev_dbg(&card->pdev->dev, "firmware(%s) got %lu bytes\n",
+               file, (unsigned long)fw->size);
+       /* parse the firmware */
+--- a/drivers/net/ethernet/3com/typhoon.c
++++ b/drivers/net/ethernet/3com/typhoon.c
+@@ -1279,11 +1279,8 @@ typhoon_request_firmware(struct typhoon
+               return 0;
+       err = request_firmware(&typhoon_fw, FIRMWARE_NAME, &tp->pdev->dev);
+-      if (err) {
+-              netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
+-                         FIRMWARE_NAME);
++      if (err)
+               return err;
+-      }
+       image_data = typhoon_fw->data;
+       remaining = typhoon_fw->size;
+--- a/drivers/net/ethernet/adaptec/starfire.c
++++ b/drivers/net/ethernet/adaptec/starfire.c
+@@ -1016,11 +1016,8 @@ static int netdev_open(struct net_device
+ #endif /* VLAN_SUPPORT */
+       retval = request_firmware(&fw_rx, FIRMWARE_RX, &np->pci_dev->dev);
+-      if (retval) {
+-              printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n",
+-                     FIRMWARE_RX);
++      if (retval)
+               goto out_init;
+-      }
+       if (fw_rx->size % 4) {
+               printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n",
+                      fw_rx->size, FIRMWARE_RX);
+@@ -1028,11 +1025,8 @@ static int netdev_open(struct net_device
+               goto out_rx;
+       }
+       retval = request_firmware(&fw_tx, FIRMWARE_TX, &np->pci_dev->dev);
+-      if (retval) {
+-              printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n",
+-                     FIRMWARE_TX);
++      if (retval)
+               goto out_rx;
+-      }
+       if (fw_tx->size % 4) {
+               printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n",
+                      fw_tx->size, FIRMWARE_TX);
+--- a/drivers/net/ethernet/alteon/acenic.c
++++ b/drivers/net/ethernet/alteon/acenic.c
+@@ -2888,11 +2888,8 @@ static int ace_load_firmware(struct net_
+               fw_name = "acenic/tg1.bin";
+       ret = request_firmware(&fw, fw_name, &ap->pdev->dev);
+-      if (ret) {
+-              printk(KERN_ERR "%s: Failed to load firmware \"%s\"\n",
+-                     ap->name, fw_name);
++      if (ret)
+               return ret;
+-      }
+       fw_data = (void *)fw->data;
+--- a/drivers/net/ethernet/broadcom/bnx2.c
++++ b/drivers/net/ethernet/broadcom/bnx2.c
+@@ -3726,16 +3726,13 @@ static int bnx2_request_uncached_firmwar
+       }
+       rc = request_firmware(&bp->mips_firmware, mips_fw_file, &bp->pdev->dev);
+-      if (rc) {
+-              pr_err("Can't load firmware file \"%s\"\n", mips_fw_file);
++      if (rc)
+               goto out;
+-      }
+       rc = request_firmware(&bp->rv2p_firmware, rv2p_fw_file, &bp->pdev->dev);
+-      if (rc) {
+-              pr_err("Can't load firmware file \"%s\"\n", rv2p_fw_file);
++      if (rc)
+               goto err_release_mips_firmware;
+-      }
++
+       mips_fw = (const struct bnx2_mips_fw_file *) bp->mips_firmware->data;
+       rv2p_fw = (const struct bnx2_rv2p_fw_file *) bp->rv2p_firmware->data;
+       if (bp->mips_firmware->size < sizeof(*mips_fw) ||
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+@@ -13489,11 +13489,8 @@ static int bnx2x_init_firmware(struct bn
+       BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
+       rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
+-      if (rc) {
+-              BNX2X_ERR("Can't load firmware file %s\n",
+-                        fw_file_name);
++      if (rc)
+               goto request_firmware_exit;
+-      }
+       rc = bnx2x_check_firmware(bp);
+       if (rc) {
+--- a/drivers/net/ethernet/broadcom/tg3.c
++++ b/drivers/net/ethernet/broadcom/tg3.c
+@@ -11346,11 +11346,8 @@ static int tg3_request_firmware(struct t
+ {
+       const struct tg3_firmware_hdr *fw_hdr;
+-      if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
+-              netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
+-                         tp->fw_needed);
++      if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev))
+               return -ENOENT;
+-      }
+       fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
+--- a/drivers/net/ethernet/brocade/bna/cna_fwimg.c
++++ b/drivers/net/ethernet/brocade/bna/cna_fwimg.c
+@@ -32,10 +32,8 @@ cna_read_firmware(struct pci_dev *pdev,
+       const struct firmware *fw;
+       u32 n;
+-      if (request_firmware(&fw, fw_name, &pdev->dev)) {
+-              dev_alert(&pdev->dev, "can't load firmware %s\n", fw_name);
++      if (request_firmware(&fw, fw_name, &pdev->dev))
+               goto error;
+-      }
+       *bfi_image = (u32 *)fw->data;
+       *bfi_image_size = fw->size/sizeof(u32);
+--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
++++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+@@ -1037,12 +1037,8 @@ int t3_get_edc_fw(struct cphy *phy, int
+       fw_name = get_edc_fw_name(edc_idx);
+       if (fw_name)
+               ret = request_firmware(&fw, fw_name, &adapter->pdev->dev);
+-      if (ret < 0) {
+-              dev_err(&adapter->pdev->dev,
+-                      "could not upgrade firmware: unable to load %s\n",
+-                      fw_name);
++      if (ret)
+               return ret;
+-      }
+       /* check size, take checksum in account */
+       if (fw->size > size + 4) {
+@@ -1079,11 +1075,8 @@ static int upgrade_fw(struct adapter *ad
+       struct device *dev = &adap->pdev->dev;
+       ret = request_firmware(&fw, FW_FNAME, dev);
+-      if (ret < 0) {
+-              dev_err(dev, "could not upgrade firmware: unable to load %s\n",
+-                      FW_FNAME);
++      if (ret)
+               return ret;
+-      }
+       ret = t3_load_fw(adap, fw->data, fw->size);
+       release_firmware(fw);
+@@ -1128,11 +1121,8 @@ static int update_tpsram(struct adapter
+       snprintf(buf, sizeof(buf), TPSRAM_NAME, rev);
+       ret = request_firmware(&tpsram, buf, dev);
+-      if (ret < 0) {
+-              dev_err(dev, "could not load TP SRAM: unable to load %s\n",
+-                      buf);
++      if (ret)
+               return ret;
+-      }
+       ret = t3_check_tpsram(adap, tpsram->data, tpsram->size);
+       if (ret)
+--- a/drivers/net/ethernet/intel/e100.c
++++ b/drivers/net/ethernet/intel/e100.c
+@@ -1290,9 +1290,6 @@ static const struct firmware *e100_reque
+       if (err) {
+               if (required) {
+-                      netif_err(nic, probe, nic->netdev,
+-                                "Failed to load firmware \"%s\": %d\n",
+-                                fw_name, err);
+                       return ERR_PTR(err);
+               } else {
+                       netif_info(nic, probe, nic->netdev,
+--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
++++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+@@ -596,8 +596,6 @@ static int myri10ge_load_hotplug_firmwar
+       unsigned i;
+       if ((status = request_firmware(&fw, mgp->fw_name, dev)) < 0) {
+-              dev_err(dev, "Unable to load %s firmware image via hotplug\n",
+-                      mgp->fw_name);
+               status = -EINVAL;
+               goto abort_with_nothing;
+       }
+--- a/drivers/net/ethernet/smsc/smc91c92_cs.c
++++ b/drivers/net/ethernet/smsc/smc91c92_cs.c
+@@ -647,10 +647,8 @@ static int osi_load_firmware(struct pcmc
+       int i, err;
+       err = request_firmware(&fw, FIRMWARE_NAME, &link->dev);
+-      if (err) {
+-              pr_err("Failed to load firmware \"%s\"\n", FIRMWARE_NAME);
++      if (err)
+               return err;
+-      }
+       /* Download the Seven of Diamonds firmware */
+       for (i = 0; i < fw->size; i++) {
+--- a/drivers/net/ethernet/sun/cassini.c
++++ b/drivers/net/ethernet/sun/cassini.c
+@@ -816,11 +816,8 @@ static void cas_saturn_firmware_init(str
+               return;
+       err = request_firmware(&fw, fw_name, &cp->pdev->dev);
+-      if (err) {
+-              pr_err("Failed to load firmware \"%s\"\n",
+-                     fw_name);
++      if (err)
+               return;
+-      }
+       if (fw->size < 2) {
+               pr_err("bogus length %zu in \"%s\"\n",
+                      fw->size, fw_name);
+--- a/drivers/net/hamradio/yam.c
++++ b/drivers/net/hamradio/yam.c
+@@ -372,11 +372,8 @@ static unsigned char *add_mcs(unsigned c
+               }
+               err = request_firmware(&fw, fw_name[predef], &pdev->dev);
+               platform_device_unregister(pdev);
+-              if (err) {
+-                      printk(KERN_ERR "Failed to load firmware \"%s\"\n",
+-                             fw_name[predef]);
++              if (err)
+                       return NULL;
+-              }
+               if (fw->size != YAM_FPGA_SIZE) {
+                       printk(KERN_ERR "Bogus length %zu in firmware \"%s\"\n",
+                              fw->size, fw_name[predef]);
+--- a/drivers/net/usb/kaweth.c
++++ b/drivers/net/usb/kaweth.c
+@@ -392,10 +392,8 @@ static int kaweth_download_firmware(stru
+       int ret;
+       ret = request_firmware(&fw, fwname, &kaweth->dev->dev);
+-      if (ret) {
+-              dev_err(&kaweth->intf->dev, "Firmware request failed\n");
++      if (ret)
+               return ret;
+-      }
+       if (fw->size > KAWETH_FIRMWARE_BUF_SIZE) {
+               dev_err(&kaweth->intf->dev, "Firmware too big: %zu\n",
+--- a/drivers/net/wimax/i2400m/fw.c
++++ b/drivers/net/wimax/i2400m/fw.c
+@@ -1582,11 +1582,8 @@ int i2400m_dev_bootstrap(struct i2400m *
+               }
+               d_printf(1, dev, "trying firmware %s (%d)\n", fw_name, itr);
+               ret = request_firmware(&fw, fw_name, dev);
+-              if (ret < 0) {
+-                      dev_err(dev, "fw %s: cannot load file: %d\n",
+-                              fw_name, ret);
++              if (ret)
+                       continue;
+-              }
+               i2400m->fw_name = fw_name;
+               ret = i2400m_fw_bootstrap(i2400m, fw, flags);
+               release_firmware(fw);
+@@ -1629,8 +1626,6 @@ void i2400m_fw_cache(struct i2400m *i240
+       kref_init(&i2400m_fw->kref);
+       result = request_firmware(&i2400m_fw->fw, i2400m->fw_name, dev);
+       if (result < 0) {
+-              dev_err(dev, "firmware %s: failed to cache: %d\n",
+-                      i2400m->fw_name, result);
+               kfree(i2400m_fw);
+               i2400m_fw = (void *) ~0;
+       } else
+--- a/drivers/net/wireless/atmel/at76c50x-usb.c
++++ b/drivers/net/wireless/atmel/at76c50x-usb.c
+@@ -1622,13 +1622,8 @@ static struct fwentry *at76_load_firmwar
+       at76_dbg(DBG_FW, "downloading firmware %s", fwe->fwname);
+       ret = request_firmware(&fwe->fw, fwe->fwname, &udev->dev);
+-      if (ret < 0) {
+-              dev_err(&udev->dev, "firmware %s not found!\n",
+-                      fwe->fwname);
+-              dev_err(&udev->dev,
+-                      "you may need to download the firmware from http://developer.berlios.de/projects/at76c503a/\n");
++      if (ret)
+               goto exit;
+-      }
+       at76_dbg(DBG_FW, "got it.");
+       fwh = (struct at76_fw_header *)(fwe->fw->data);
+--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
++++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
+@@ -1160,9 +1160,6 @@ static void ath9k_hif_usb_firmware_cb(co
+               if (!ret)
+                       return;
+-              dev_err(&hif_dev->udev->dev,
+-                      "ath9k_htc: Failed to get firmware %s\n",
+-                      hif_dev->fw_name);
+               goto err_fw;
+       }
+--- a/drivers/net/wireless/ath/carl9170/usb.c
++++ b/drivers/net/wireless/ath/carl9170/usb.c
+@@ -1031,7 +1031,6 @@ static void carl9170_usb_firmware_step2(
+               return;
+       }
+-      dev_err(&ar->udev->dev, "firmware not found.\n");
+       carl9170_usb_firmware_failed(ar);
+ }
+--- a/drivers/net/wireless/atmel/atmel.c
++++ b/drivers/net/wireless/atmel/atmel.c
+@@ -3917,12 +3917,8 @@ static int reset_atmel_card(struct net_d
+                                       strcpy(priv->firmware_id, "atmel_at76c502.bin");
+                               }
+                               err = request_firmware(&fw_entry, priv->firmware_id, priv->sys_dev);
+-                              if (err != 0) {
+-                                      printk(KERN_ALERT
+-                                             "%s: firmware %s is missing, cannot continue.\n",
+-                                             dev->name, priv->firmware_id);
++                              if (err != 0)
+                                       return err;
+-                              }
+                       } else {
+                               int fw_index = 0;
+                               int success = 0;
+--- a/drivers/net/wireless/broadcom/b43/main.c
++++ b/drivers/net/wireless/broadcom/b43/main.c
+@@ -2253,19 +2253,8 @@ int b43_do_request_fw(struct b43_request
+       }
+       err = request_firmware(&ctx->blob, ctx->fwname,
+                              ctx->dev->dev->dev);
+-      if (err == -ENOENT) {
+-              snprintf(ctx->errors[ctx->req_type],
+-                       sizeof(ctx->errors[ctx->req_type]),
+-                       "Firmware file \"%s\" not found\n",
+-                       ctx->fwname);
++      if (err)
+               return err;
+-      } else if (err) {
+-              snprintf(ctx->errors[ctx->req_type],
+-                       sizeof(ctx->errors[ctx->req_type]),
+-                       "Firmware file \"%s\" request failed (err=%d)\n",
+-                       ctx->fwname, err);
+-              return err;
+-      }
+ fw_ready:
+       if (ctx->blob->size < sizeof(struct b43_fw_header))
+               goto err_format;
+--- a/drivers/net/wireless/broadcom/b43legacy/main.c
++++ b/drivers/net/wireless/broadcom/b43legacy/main.c
+@@ -1554,11 +1554,8 @@ static int do_request_fw(struct b43legac
+       } else {
+               err = request_firmware(fw, path, dev->dev->dev);
+       }
+-      if (err) {
+-              b43legacyerr(dev->wl, "Firmware file \"%s\" not found "
+-                     "or load failed.\n", path);
++      if (err)
+               return err;
+-      }
+       if ((*fw)->size < sizeof(struct b43legacy_fw_header))
+               goto err_format;
+       hdr = (struct b43legacy_fw_header *)((*fw)->data);
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
+@@ -378,19 +378,13 @@ static int brcms_request_fw(struct brcms
+               sprintf(fw_name, "%s-%d.fw", brcms_firmwares[i],
+                       UCODE_LOADER_API_VER);
+               status = request_firmware(&wl->fw.fw_bin[i], fw_name, device);
+-              if (status) {
+-                      wiphy_err(wl->wiphy, "%s: fail to load firmware %s\n",
+-                                KBUILD_MODNAME, fw_name);
++              if (status)
+                       return status;
+-              }
+               sprintf(fw_name, "%s_hdr-%d.fw", brcms_firmwares[i],
+                       UCODE_LOADER_API_VER);
+               status = request_firmware(&wl->fw.fw_hdr[i], fw_name, device);
+-              if (status) {
+-                      wiphy_err(wl->wiphy, "%s: fail to load firmware %s\n",
+-                                KBUILD_MODNAME, fw_name);
++              if (status)
+                       return status;
+-              }
+               wl->fw.hdr_num_entries[i] =
+                   wl->fw.fw_hdr[i]->size / (sizeof(struct firmware_hdr));
+       }
+--- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
++++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
+@@ -8418,12 +8418,8 @@ static int ipw2100_get_firmware(struct i
+       rc = request_firmware(&fw->fw_entry, fw_name, &priv->pci_dev->dev);
+-      if (rc < 0) {
+-              printk(KERN_ERR DRV_NAME ": "
+-                     "%s: Firmware '%s' not available or load failed.\n",
+-                     priv->net_dev->name, fw_name);
++      if (rc)
+               return rc;
+-      }
+       IPW_DEBUG_INFO("firmware data %p size %zd\n", fw->fw_entry->data,
+                      fw->fw_entry->size);
+--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
++++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+@@ -3418,10 +3418,8 @@ static int ipw_get_fw(struct ipw_priv *p
+       /* ask firmware_class module to get the boot firmware off disk */
+       rc = request_firmware(raw, name, &priv->pci_dev->dev);
+-      if (rc < 0) {
+-              IPW_ERROR("%s request_firmware failed: Reason %d\n", name, rc);
++      if (rc)
+               return rc;
+-      }
+       if ((*raw)->size < sizeof(*fw)) {
+               IPW_ERROR("%s is too small (%zd)\n", name, (*raw)->size);
+--- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c
++++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
+@@ -1861,7 +1861,6 @@ il3945_read_ucode(struct il_priv *il)
+               sprintf(buf, "%s%u%s", name_pre, idx, ".ucode");
+               ret = request_firmware(&ucode_raw, buf, &il->pci_dev->dev);
+               if (ret < 0) {
+-                      IL_ERR("%s firmware file req failed: %d\n", buf, ret);
+                       if (ret == -ENOENT)
+                               continue;
+                       else
+--- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
++++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
+@@ -224,10 +224,8 @@ static int iwl_request_firmware(struct i
+               sprintf(tag, "%d", drv->fw_index);
+       }
+-      if (drv->fw_index < drv->cfg->ucode_api_min) {
+-              IWL_ERR(drv, "no suitable firmware found!\n");
++      if (drv->fw_index < drv->cfg->ucode_api_min)
+               return -ENOENT;
+-      }
+       snprintf(drv->firmware_name, sizeof(drv->firmware_name), "%s%s.ucode",
+                name_pre, tag);
+--- a/drivers/net/wireless/marvell/libertas_tf/if_usb.c
++++ b/drivers/net/wireless/marvell/libertas_tf/if_usb.c
+@@ -818,8 +818,6 @@ static int if_usb_prog_firmware(struct i
+       kernel_param_lock(THIS_MODULE);
+       ret = request_firmware(&cardp->fw, lbtf_fw_name, &cardp->udev->dev);
+       if (ret < 0) {
+-              pr_err("request_firmware() failed with %#x\n", ret);
+-              pr_err("firmware %s not found\n", lbtf_fw_name);
+               kernel_param_unlock(THIS_MODULE);
+               goto done;
+       }
+--- a/drivers/net/wireless/marvell/mwifiex/main.c
++++ b/drivers/net/wireless/marvell/mwifiex/main.c
+@@ -524,11 +524,8 @@ static void mwifiex_fw_dpc(const struct
+       bool init_failed = false;
+       struct wireless_dev *wdev;
+-      if (!firmware) {
+-              mwifiex_dbg(adapter, ERROR,
+-                          "Failed to get firmware %s\n", adapter->fw_name);
++      if (!firmware)
+               goto err_dnld_fw;
+-      }
+       memset(&fw, 0, sizeof(struct mwifiex_fw_image));
+       adapter->firmware = firmware;
+--- a/drivers/net/wireless/marvell/mwl8k.c
++++ b/drivers/net/wireless/marvell/mwl8k.c
+@@ -5714,16 +5714,12 @@ static int mwl8k_firmware_load_success(s
+ static void mwl8k_fw_state_machine(const struct firmware *fw, void *context)
+ {
+       struct mwl8k_priv *priv = context;
+-      struct mwl8k_device_info *di = priv->device_info;
+       int rc;
+       switch (priv->fw_state) {
+       case FW_STATE_INIT:
+-              if (!fw) {
+-                      printk(KERN_ERR "%s: Error requesting helper fw %s\n",
+-                             pci_name(priv->pdev), di->helper_image);
++              if (!fw)
+                       goto fail;
+-              }
+               priv->fw_helper = fw;
+               rc = mwl8k_request_fw(priv, priv->fw_pref, &priv->fw_ucode,
+                                     true);
+@@ -5758,11 +5754,8 @@ static void mwl8k_fw_state_machine(const
+               break;
+       case FW_STATE_LOADING_ALT:
+-              if (!fw) {
+-                      printk(KERN_ERR "%s: Error requesting alt fw %s\n",
+-                             pci_name(priv->pdev), di->helper_image);
++              if (!fw)
+                       goto fail;
+-              }
+               priv->fw_ucode = fw;
+               rc = mwl8k_firmware_load_success(priv);
+               if (rc)
+@@ -5800,10 +5793,8 @@ retry:
+       /* Ask userland hotplug daemon for the device firmware */
+       rc = mwl8k_request_firmware(priv, fw_image, nowait);
+-      if (rc) {
+-              wiphy_err(hw->wiphy, "Firmware files not found\n");
++      if (rc)
+               return rc;
+-      }
+       if (nowait)
+               return rc;
+--- a/drivers/net/wireless/intersil/orinoco/fw.c
++++ b/drivers/net/wireless/intersil/orinoco/fw.c
+@@ -132,7 +132,6 @@ orinoco_dl_firmware(struct orinoco_priva
+               err = request_firmware(&fw_entry, firmware, priv->dev);
+               if (err) {
+-                      dev_err(dev, "Cannot find firmware %s\n", firmware);
+                       err = -ENOENT;
+                       goto free;
+               }
+@@ -292,10 +291,8 @@ symbol_dl_firmware(struct orinoco_privat
+       const struct firmware *fw_entry;
+       if (!orinoco_cached_fw_get(priv, true)) {
+-              if (request_firmware(&fw_entry, fw->pri_fw, priv->dev) != 0) {
+-                      dev_err(dev, "Cannot find firmware: %s\n", fw->pri_fw);
++              if (request_firmware(&fw_entry, fw->pri_fw, priv->dev) != 0)
+                       return -ENOENT;
+-              }
+       } else
+               fw_entry = orinoco_cached_fw_get(priv, true);
+@@ -311,10 +308,8 @@ symbol_dl_firmware(struct orinoco_privat
+       }
+       if (!orinoco_cached_fw_get(priv, false)) {
+-              if (request_firmware(&fw_entry, fw->sta_fw, priv->dev) != 0) {
+-                      dev_err(dev, "Cannot find firmware: %s\n", fw->sta_fw);
++              if (request_firmware(&fw_entry, fw->sta_fw, priv->dev) != 0)
+                       return -ENOENT;
+-              }
+       } else
+               fw_entry = orinoco_cached_fw_get(priv, false);
+--- a/drivers/net/wireless/intersil/orinoco/orinoco_usb.c
++++ b/drivers/net/wireless/intersil/orinoco/orinoco_usb.c
+@@ -1667,7 +1667,6 @@ static int ezusb_probe(struct usb_interf
+               if (ezusb_firmware_download(upriv, &firmware) < 0)
+                       goto error;
+       } else {
+-              err("No firmware to download");
+               goto error;
+       }
+--- a/drivers/net/wireless/intersil/p54/p54pci.c
++++ b/drivers/net/wireless/intersil/p54/p54pci.c
+@@ -499,7 +499,6 @@ static void p54p_firmware_step2(const st
+       int err;
+       if (!fw) {
+-              dev_err(&pdev->dev, "Cannot find firmware (isl3886pci)\n");
+               err = -ENOENT;
+               goto out;
+       }
+--- a/drivers/net/wireless/intersil/p54/p54spi.c
++++ b/drivers/net/wireless/intersil/p54/p54spi.c
+@@ -170,10 +170,8 @@ static int p54spi_request_firmware(struc
+       /* FIXME: should driver use it's own struct device? */
+       ret = request_firmware(&priv->firmware, "3826.arm", &priv->spi->dev);
+-      if (ret < 0) {
+-              dev_err(&priv->spi->dev, "request_firmware() failed: %d", ret);
++      if (ret)
+               return ret;
+-      }
+       ret = p54_parse_firmware(dev, priv->firmware);
+       if (ret) {
+--- a/drivers/net/wireless/intersil/p54/p54usb.c
++++ b/drivers/net/wireless/intersil/p54/p54usb.c
+@@ -929,7 +929,6 @@ static void p54u_load_firmware_cb(const
+               err = p54u_start_ops(priv);
+       } else {
+               err = -ENOENT;
+-              dev_err(&udev->dev, "Firmware not found.\n");
+       }
+       if (err) {
+--- a/drivers/net/wireless/intersil/prism54/islpci_dev.c
++++ b/drivers/net/wireless/intersil/prism54/islpci_dev.c
+@@ -92,12 +92,9 @@ isl_upload_firmware(islpci_private *priv
+               const u32 *fw_ptr;
+               rc = request_firmware(&fw_entry, priv->firmware, PRISM_FW_PDEV);
+-              if (rc) {
+-                      printk(KERN_ERR
+-                             "%s: request_firmware() failed for '%s'\n",
+-                             "prism54", priv->firmware);
++              if (rc)
+                       return rc;
+-              }
++
+               /* prepare the Direct Memory Base register */
+               reg = ISL38XX_DEV_FIRMWARE_ADDRES;
+--- a/drivers/net/wireless/ralink/rt2x00/rt2x00firmware.c
++++ b/drivers/net/wireless/ralink/rt2x00/rt2x00firmware.c
+@@ -49,10 +49,8 @@ static int rt2x00lib_request_firmware(st
+       rt2x00_info(rt2x00dev, "Loading firmware file '%s'\n", fw_name);
+       retval = request_firmware(&fw, fw_name, device);
+-      if (retval) {
+-              rt2x00_err(rt2x00dev, "Failed to request Firmware\n");
++      if (retval)
+               return retval;
+-      }
+       if (!fw || !fw->size || !fw->data) {
+               rt2x00_err(rt2x00dev, "Failed to read Firmware\n");
+--- a/drivers/net/wireless/realtek/rtlwifi/core.c
++++ b/drivers/net/wireless/realtek/rtlwifi/core.c
+@@ -111,7 +111,6 @@ static void rtl_fw_do_work(const struct
+                       if (!err)
+                               goto found_alt;
+               }
+-              pr_err("Selected firmware is not available\n");
+               rtlpriv->max_fw_size = 0;
+               return;
+       }
+--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
+@@ -95,7 +95,6 @@ static void rtl92se_fw_cb(const struct f
+                        "Firmware callback routine entered!\n");
+       complete(&rtlpriv->firmware_loading_complete);
+       if (!firmware) {
+-              pr_err("Firmware %s not available\n", fw_name);
+               rtlpriv->max_fw_size = 0;
+               return;
+       }
+--- a/drivers/net/wireless/ti/wl1251/main.c
++++ b/drivers/net/wireless/ti/wl1251/main.c
+@@ -71,10 +71,8 @@ static int wl1251_fetch_firmware(struct
+       ret = request_firmware(&fw, WL1251_FW_NAME, dev);
+-      if (ret < 0) {
+-              wl1251_error("could not get firmware: %d", ret);
++      if (ret)
+               return ret;
+-      }
+       if (fw->size % 4) {
+               wl1251_error("firmware size is not multiple of 32 bits: %zu",
+@@ -110,10 +108,8 @@ static int wl1251_fetch_nvs(struct wl125
+       ret = request_firmware(&fw, WL1251_NVS_NAME, dev);
+-      if (ret < 0) {
+-              wl1251_error("could not get nvs file: %d", ret);
++      if (ret)
+               return ret;
+-      }
+       if (fw->size % 4) {
+               wl1251_error("nvs size is not multiple of 32 bits: %zu",
+--- a/drivers/net/wireless/ti/wlcore/main.c
++++ b/drivers/net/wireless/ti/wlcore/main.c
+@@ -756,10 +756,8 @@ static int wl12xx_fetch_firmware(struct
+       ret = request_firmware(&fw, fw_name, wl->dev);
+-      if (ret < 0) {
+-              wl1271_error("could not get firmware %s: %d", fw_name, ret);
++      if (ret)
+               return ret;
+-      }
+       if (fw->size % 4) {
+               wl1271_error("firmware size is not multiple of 32 bits: %zu",
+--- a/drivers/net/wireless/zydas/zd1201.c
++++ b/drivers/net/wireless/zydas/zd1201.c
+@@ -65,8 +65,6 @@ static int zd1201_fw_upload(struct usb_d
+       err = request_firmware(&fw_entry, fwfile, &dev->dev);
+       if (err) {
+-              dev_err(&dev->dev, "Failed to load %s firmware file!\n", fwfile);
+-              dev_err(&dev->dev, "Make sure the hotplug firmware loader is installed.\n");
+               dev_err(&dev->dev, "Goto http://linux-lc100020.sourceforge.net for more info.\n");
+               return err;
+       }
+--- a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
++++ b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
+@@ -120,16 +120,9 @@ static void int_urb_complete(struct urb
+ static int request_fw_file(
+       const struct firmware **fw, const char *name, struct device *device)
+ {
+-      int r;
+-
+       dev_dbg_f(device, "fw name %s\n", name);
+-      r = request_firmware(fw, name, device);
+-      if (r)
+-              dev_err(device,
+-                     "Could not load firmware file %s. Error number %d\n",
+-                     name, r);
+-      return r;
++      return request_firmware(fw, name, device);
+ }
+ static inline u16 get_bcdDevice(const struct usb_device *udev)
+--- a/drivers/scsi/advansys.c
++++ b/drivers/scsi/advansys.c
+@@ -4107,8 +4107,6 @@ static int AscInitAsc1000Driver(ASC_DVC_
+       err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
+       if (err) {
+-              printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
+-                     fwname, err);
+               asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM;
+               return err;
+       }
+@@ -4473,8 +4471,6 @@ static int AdvInitAsc3550Driver(ADV_DVC_
+       err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
+       if (err) {
+-              printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
+-                     fwname, err);
+               asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM;
+               return err;
+       }
+@@ -4973,8 +4969,6 @@ static int AdvInitAsc38C0800Driver(ADV_D
+       err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
+       if (err) {
+-              printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
+-                     fwname, err);
+               asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM;
+               return err;
+       }
+@@ -5461,8 +5455,6 @@ static int AdvInitAsc38C1600Driver(ADV_D
+       err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
+       if (err) {
+-              printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
+-                     fwname, err);
+               asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM;
+               return err;
+       }
+--- a/drivers/scsi/aic94xx/aic94xx_init.c
++++ b/drivers/scsi/aic94xx/aic94xx_init.c
+@@ -384,8 +384,6 @@ static ssize_t asd_store_update_bios(str
+                                  filename_ptr,
+                                  &asd_ha->pcidev->dev);
+       if (err) {
+-              asd_printk("Failed to load bios image file %s, error %d\n",
+-                         filename_ptr, err);
+               err = FAIL_OPEN_BIOS_FILE;
+               goto out1;
+       }
+--- a/drivers/scsi/aic94xx/aic94xx_seq.c
++++ b/drivers/scsi/aic94xx/aic94xx_seq.c
+@@ -1317,11 +1317,8 @@ int asd_init_seqs(struct asd_ha_struct *
+       err = asd_request_firmware(asd_ha);
+-      if (err) {
+-              asd_printk("Failed to load sequencer firmware file %s, error %d\n",
+-                         SAS_RAZOR_SEQUENCER_FW_FILE, err);
++      if (err)
+               return err;
+-      }
+       err = asd_seq_download_seqs(asd_ha);
+       if (err) {
+--- a/drivers/scsi/bfa/bfad.c
++++ b/drivers/scsi/bfa/bfad.c
+@@ -1758,7 +1758,6 @@ bfad_read_firmware(struct pci_dev *pdev,
+       const struct firmware *fw;
+       if (request_firmware(&fw, fw_name, &pdev->dev)) {
+-              printk(KERN_ALERT "Can't locate firmware %s\n", fw_name);
+               *bfi_image = NULL;
+               goto out;
+       }
+--- a/drivers/scsi/ipr.c
++++ b/drivers/scsi/ipr.c
+@@ -4041,10 +4041,8 @@ static ssize_t ipr_store_update_fw(struc
+       if (endline)
+               *endline = '\0';
+-      if (request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev)) {
+-              dev_err(&ioa_cfg->pdev->dev, "Firmware file %s not found\n", fname);
++      if (request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev))
+               return -EIO;
+-      }
+       image_hdr = (struct ipr_ucode_image_header *)fw_entry->data;
+--- a/drivers/scsi/pm8001/pm8001_ctl.c
++++ b/drivers/scsi/pm8001/pm8001_ctl.c
+@@ -685,10 +685,6 @@ static ssize_t pm8001_store_update_fw(st
+                              pm8001_ha->dev);
+       if (ret) {
+-              PM8001_FAIL_DBG(pm8001_ha,
+-                      pm8001_printk(
+-                      "Failed to load firmware image file %s, error %d\n",
+-                      filename_ptr, ret));
+               pm8001_ha->fw_status = FAIL_OPEN_BIOS_FILE;
+               goto out;
+       }
+--- a/drivers/scsi/qla1280.c
++++ b/drivers/scsi/qla1280.c
+@@ -1552,8 +1552,6 @@ qla1280_request_firmware(struct scsi_qla
+       err = request_firmware(&fw, fwname, &ha->pdev->dev);
+       if (err) {
+-              printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
+-                     fwname, err);
+               fw = ERR_PTR(err);
+               goto unlock;
+       }
+--- a/drivers/scsi/qla2xxx/qla_init.c
++++ b/drivers/scsi/qla2xxx/qla_init.c
+@@ -5656,8 +5656,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
+       /* Load firmware blob. */
+       blob = qla2x00_request_firmware(vha);
+       if (!blob) {
+-              ql_log(ql_log_info, vha, 0x0083,
+-                  "Firmware image unavailable.\n");
+               ql_log(ql_log_info, vha, 0x0084,
+                   "Firmware images can be retrieved from: "QLA_FW_URL ".\n");
+               return QLA_FUNCTION_FAILED;
+@@ -5759,8 +5757,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
+       /* Load firmware blob. */
+       blob = qla2x00_request_firmware(vha);
+       if (!blob) {
+-              ql_log(ql_log_warn, vha, 0x0090,
+-                  "Firmware image unavailable.\n");
+               ql_log(ql_log_warn, vha, 0x0091,
+                   "Firmware images can be retrieved from: "
+                   QLA_FW_URL ".\n");
+--- a/drivers/scsi/qla2xxx/qla_nx.c
++++ b/drivers/scsi/qla2xxx/qla_nx.c
+@@ -2460,11 +2460,8 @@ try_blob_fw:
+       /* Load firmware blob. */
+       blob = ha->hablob = qla2x00_request_firmware(vha);
+-      if (!blob) {
+-              ql_log(ql_log_fatal, vha, 0x00a3,
+-                  "Firmware image not present.\n");
++      if (!blob)
+               goto fw_load_failed;
+-      }
+       /* Validating firmware blob */
+       if (qla82xx_validate_firmware_blob(vha,
+--- a/drivers/scsi/qla2xxx/qla_os.c
++++ b/drivers/scsi/qla2xxx/qla_os.c
+@@ -5641,8 +5641,6 @@ qla2x00_request_firmware(scsi_qla_host_t
+               goto out;
+       if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
+-              ql_log(ql_log_warn, vha, 0x0063,
+-                  "Failed to load firmware image (%s).\n", blob->name);
+               blob->fw = NULL;
+               blob = NULL;
+               goto out;
+--- a/drivers/scsi/qlogicpti.c
++++ b/drivers/scsi/qlogicpti.c
+@@ -475,11 +475,8 @@ static int qlogicpti_load_firmware(struc
+       int i, timeout;
+       err = request_firmware(&fw, fwname, &qpti->op->dev);
+-      if (err) {
+-              printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
+-                     fwname, err);
++      if (err)
+               return err;
+-      }
+       if (fw->size % 2) {
+               printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
+                      fw->size, fwname);
+--- a/drivers/media/usb/go7007/go7007-driver.c
++++ b/drivers/media/usb/go7007/go7007-driver.c
+@@ -92,10 +92,8 @@ static int go7007_load_encoder(struct go
+       u16 intr_val, intr_data;
+       if (go->boot_fw == NULL) {
+-              if (request_firmware(&fw_entry, fw_name, go->dev)) {
+-                      v4l2_err(go, "unable to load firmware from file \"%s\"\n", fw_name);
++              if (request_firmware(&fw_entry, fw_name, go->dev))
+                       return -1;
+-              }
+               if (fw_entry->size < 16 || memcmp(fw_entry->data, "WISGO7007FW", 11)) {
+                       v4l2_err(go, "file \"%s\" does not appear to be go7007 firmware\n", fw_name);
+                       release_firmware(fw_entry);
+--- a/drivers/media/usb/go7007/go7007-fw.c
++++ b/drivers/media/usb/go7007/go7007-fw.c
+@@ -1570,12 +1570,8 @@ int go7007_construct_fw_image(struct go7
+       default:
+               return -1;
+       }
+-      if (request_firmware(&fw_entry, GO7007_FW_NAME, go->dev)) {
+-              dev_err(go->dev,
+-                      "unable to load firmware from file \"%s\"\n",
+-                      GO7007_FW_NAME);
++      if (request_firmware(&fw_entry, GO7007_FW_NAME, go->dev))
+               return -1;
+-      }
+       code = kzalloc(codespace * 2, GFP_KERNEL);
+       if (code == NULL)
+               goto fw_failed;
+--- a/drivers/media/usb/go7007/go7007-loader.c
++++ b/drivers/media/usb/go7007/go7007-loader.c
+@@ -75,11 +75,8 @@ static int go7007_loader_probe(struct us
+       dev_info(&interface->dev, "loading firmware %s\n", fw1);
+-      if (request_firmware(&fw, fw1, &usbdev->dev)) {
+-              dev_err(&interface->dev,
+-                      "unable to load firmware from file \"%s\"\n", fw1);
++      if (request_firmware(&fw, fw1, &usbdev->dev))
+               goto failed2;
+-      }
+       ret = cypress_load_firmware(usbdev, fw, CYPRESS_FX2);
+       release_firmware(fw);
+       if (0 != ret) {
+@@ -90,11 +87,8 @@ static int go7007_loader_probe(struct us
+       if (fw2 == NULL)
+               return 0;
+-      if (request_firmware(&fw, fw2, &usbdev->dev)) {
+-              dev_err(&interface->dev,
+-                      "unable to load firmware from file \"%s\"\n", fw2);
++      if (request_firmware(&fw, fw2, &usbdev->dev))
+               goto failed2;
+-      }
+       ret = cypress_load_firmware(usbdev, fw, CYPRESS_FX2);
+       release_firmware(fw);
+       if (0 != ret) {
+--- a/drivers/staging/media/lirc/lirc_zilog.c
++++ b/drivers/staging/media/lirc/lirc_zilog.c
+@@ -762,9 +762,6 @@ static int fw_load(struct IR_tx *tx)
+       /* Request codeset data file */
+       ret = request_firmware(&fw_entry, "haup-ir-blaster.bin", tx->ir->l.dev);
+       if (ret != 0) {
+-              dev_err(tx->ir->l.dev,
+-                      "firmware haup-ir-blaster.bin not available (%d)\n",
+-                      ret);
+               ret = ret < 0 ? ret : -EFAULT;
+               goto out;
+       }
+--- a/drivers/staging/rtl8192u/r819xU_firmware.c
++++ b/drivers/staging/rtl8192u/r819xU_firmware.c
+@@ -244,10 +244,8 @@ bool init_firmware(struct net_device *de
+                */
+               if (rst_opt == OPT_SYSTEM_RESET) {
+                       rc = request_firmware(&fw_entry, fw_name[init_step], &priv->udev->dev);
+-                      if (rc < 0) {
+-                              RT_TRACE(COMP_ERR, "request firmware fail!\n");
++                      if (rc)
+                               goto download_firmware_fail;
+-                      }
+                       if (fw_entry->size > sizeof(pfirmware->firmware_buf)) {
+                               RT_TRACE(COMP_ERR, "img file size exceed the container buffer fail!\n");
+--- a/drivers/staging/rtl8712/hal_init.c
++++ b/drivers/staging/rtl8712/hal_init.c
+@@ -67,8 +67,6 @@ int rtl871x_load_fw(struct _adapter *pad
+       dev_info(dev, "r8712u: Loading firmware from \"%s\"\n", firmware_file);
+       rc = request_firmware_nowait(THIS_MODULE, 1, firmware_file, dev,
+                                    GFP_KERNEL, padapter, rtl871x_load_fw_cb);
+-      if (rc)
+-              dev_err(dev, "r8712u: Firmware request error %d\n", rc);
+       return rc;
+ }
+ MODULE_FIRMWARE("rtlwifi/rtl8712u.bin");
+--- a/drivers/staging/slicoss/slicoss.c
++++ b/drivers/staging/slicoss/slicoss.c
+@@ -376,11 +376,8 @@ static int slic_card_download_gbrcv(stru
+       }
+       ret = request_firmware(&fw, file, &adapter->pcidev->dev);
+-      if (ret) {
+-              dev_err(&adapter->pcidev->dev,
+-                      "Failed to load firmware %s\n", file);
++      if (ret)
+               return ret;
+-      }
+       rcvucodelen = *(u32 *)(fw->data + index);
+       index += 4;
+@@ -454,11 +451,8 @@ static int slic_card_download(struct ada
+               return -ENOENT;
+       }
+       ret = request_firmware(&fw, file, &adapter->pcidev->dev);
+-      if (ret) {
+-              dev_err(&adapter->pcidev->dev,
+-                      "Failed to load firmware %s\n", file);
++      if (ret)
+               return ret;
+-      }
+       numsects = *(u32 *)(fw->data + index);
+       index += 4;
+       for (i = 0; i < numsects; i++) {
+--- a/drivers/staging/vt6656/firmware.c
++++ b/drivers/staging/vt6656/firmware.c
+@@ -49,11 +49,8 @@ int vnt_download_firmware(struct vnt_pri
+       dev_dbg(dev, "---->Download firmware\n");
+       rc = request_firmware(&fw, FIRMWARE_NAME, dev);
+-      if (rc) {
+-              dev_err(dev, "firmware file %s request failed (%d)\n",
+-                      FIRMWARE_NAME, rc);
+-                      goto out;
+-      }
++      if (rc)
++              goto out;
+       buffer = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
+       if (!buffer)
+--- a/drivers/tty/cyclades.c
++++ b/drivers/tty/cyclades.c
+@@ -3495,10 +3495,8 @@ static int cyz_load_fw(struct pci_dev *p
+       int retval;
+       retval = request_firmware(&fw, "cyzfirm.bin", &pdev->dev);
+-      if (retval) {
+-              dev_err(&pdev->dev, "can't get firmware\n");
++      if (retval)
+               goto err;
+-      }
+       /* Check whether the firmware is already loaded and running. If
+          positive, skip this board */
+--- a/drivers/tty/moxa.c
++++ b/drivers/tty/moxa.c
+@@ -866,13 +866,8 @@ static int moxa_init_board(struct moxa_b
+       }
+       ret = request_firmware(&fw, file, dev);
+-      if (ret) {
+-              printk(KERN_ERR "MOXA: request_firmware failed. Make sure "
+-                              "you've placed '%s' file into your firmware "
+-                              "loader directory (e.g. /lib/firmware)\n",
+-                              file);
++      if (ret)
+               goto err_free;
+-      }
+       ret = moxa_load_fw(brd, fw);
+--- a/drivers/tty/serial/icom.c
++++ b/drivers/tty/serial/icom.c
+@@ -374,7 +374,6 @@ static void load_code(struct icom_port *
+       /* Load Call Setup into Adapter */
+       if (request_firmware(&fw, "icom_call_setup.bin", &dev->dev) < 0) {
+-              dev_err(&dev->dev,"Unable to load icom_call_setup.bin firmware image\n");
+               status = -1;
+               goto load_code_exit;
+       }
+@@ -394,7 +393,6 @@ static void load_code(struct icom_port *
+       /* Load Resident DCE portion of Adapter */
+       if (request_firmware(&fw, "icom_res_dce.bin", &dev->dev) < 0) {
+-              dev_err(&dev->dev,"Unable to load icom_res_dce.bin firmware image\n");
+               status = -1;
+               goto load_code_exit;
+       }
+@@ -439,7 +437,6 @@ static void load_code(struct icom_port *
+       }
+       if (request_firmware(&fw, "icom_asc.bin", &dev->dev) < 0) {
+-              dev_err(&dev->dev,"Unable to load icom_asc.bin firmware image\n");
+               status = -1;
+               goto load_code_exit;
+       }
+--- a/drivers/tty/serial/ucc_uart.c
++++ b/drivers/tty/serial/ucc_uart.c
+@@ -1167,10 +1167,8 @@ static void uart_firmware_cont(const str
+       struct device *dev = context;
+       int ret;
+-      if (!fw) {
+-              dev_err(dev, "firmware not found\n");
++      if (!fw)
+               return;
+-      }
+       firmware = (struct qe_firmware *) fw->data;
+--- a/drivers/usb/atm/cxacru.c
++++ b/drivers/usb/atm/cxacru.c
+@@ -1088,8 +1088,6 @@ static int cxacru_find_firmware(struct c
+               return -ENOENT;
+       }
+-      usb_info(usbatm, "found firmware %s\n", buf);
+-
+       return 0;
+ }
+--- a/drivers/usb/atm/ueagle-atm.c
++++ b/drivers/usb/atm/ueagle-atm.c
+@@ -649,10 +649,8 @@ static void uea_upload_pre_firmware(cons
+       int ret, size;
+       uea_enters(usb);
+-      if (!fw_entry) {
+-              uea_err(usb, "firmware is not available\n");
++      if (!fw_entry)
+               goto err;
+-      }
+       pfw = fw_entry->data;
+       size = fw_entry->size;
+@@ -747,10 +745,6 @@ static int uea_load_firmware(struct usb_
+       ret = request_firmware_nowait(THIS_MODULE, 1, fw_name, &usb->dev,
+                                       GFP_KERNEL, usb,
+                                       uea_upload_pre_firmware);
+-      if (ret)
+-              uea_err(usb, "firmware %s is not available\n", fw_name);
+-      else
+-              uea_info(usb, "loading firmware %s\n", fw_name);
+       uea_leaves(usb);
+       return ret;
+@@ -912,12 +906,8 @@ static int request_dsp(struct uea_softc
+       }
+       ret = request_firmware(&sc->dsp_firm, dsp_name, &sc->usb_dev->dev);
+-      if (ret < 0) {
+-              uea_err(INS_TO_USBDEV(sc),
+-                     "requesting firmware %s failed with error %d\n",
+-                      dsp_name, ret);
++      if (ret)
+               return ret;
+-      }
+       if (UEA_CHIP_VERSION(sc) == EAGLE_IV)
+               ret = check_dsp_e4(sc->dsp_firm->data, sc->dsp_firm->size);
+@@ -1630,12 +1620,8 @@ static int request_cmvs_old(struct uea_s
+       cmvs_file_name(sc, cmv_name, 1);
+       ret = request_firmware(fw, cmv_name, &sc->usb_dev->dev);
+-      if (ret < 0) {
+-              uea_err(INS_TO_USBDEV(sc),
+-                     "requesting firmware %s failed with error %d\n",
+-                     cmv_name, ret);
++      if (ret)
+               return ret;
+-      }
+       data = (u8 *) (*fw)->data;
+       size = (*fw)->size;
+@@ -1672,9 +1658,6 @@ static int request_cmvs(struct uea_softc
+                               "try to get older cmvs\n", cmv_name);
+                       return request_cmvs_old(sc, cmvs, fw);
+               }
+-              uea_err(INS_TO_USBDEV(sc),
+-                     "requesting firmware %s failed with error %d\n",
+-                     cmv_name, ret);
+               return ret;
+       }
+@@ -1957,11 +1940,8 @@ static int load_XILINX_firmware(struct u
+       uea_enters(INS_TO_USBDEV(sc));
+       ret = request_firmware(&fw_entry, fw_name, &sc->usb_dev->dev);
+-      if (ret) {
+-              uea_err(INS_TO_USBDEV(sc), "firmware %s is not available\n",
+-                     fw_name);
++      if (ret)
+               goto err0;
+-      }
+       pfw = fw_entry->data;
+       size = fw_entry->size;
+--- a/drivers/usb/misc/emi26.c
++++ b/drivers/usb/misc/emi26.c
+@@ -88,21 +88,17 @@ static int emi26_load_firmware (struct u
+       err = request_ihex_firmware(&loader_fw, "emi26/loader.fw", &dev->dev);
+       if (err)
+-              goto nofw;
++              goto wraperr;
+       err = request_ihex_firmware(&bitstream_fw, "emi26/bitstream.fw",
+                                   &dev->dev);
+       if (err)
+-              goto nofw;
++              goto wraperr;
+       err = request_ihex_firmware(&firmware_fw, "emi26/firmware.fw",
+                                   &dev->dev);
+-      if (err) {
+-      nofw:
+-              dev_err(&dev->dev, "%s - request_firmware() failed\n",
+-                      __func__);
++      if (err)
+               goto wraperr;
+-      }
+       /* Assert reset (stop the CPU in the EMI) */
+       err = emi26_set_reset(dev,1);
+--- a/drivers/usb/misc/ezusb.c
++++ b/drivers/usb/misc/ezusb.c
+@@ -79,12 +79,8 @@ static int ezusb_ihex_firmware_download(
+       const struct ihex_binrec *record;
+       if (request_ihex_firmware(&firmware, firmware_path,
+-                                &dev->dev)) {
+-              dev_err(&dev->dev,
+-                      "%s - request \"%s\" failed\n",
+-                      __func__, firmware_path);
++                                &dev->dev))
+               goto out;
+-      }
+       ret = ezusb_set_reset(dev, fx.cpucs_reg, 0);
+       if (ret < 0)
+--- a/drivers/usb/misc/isight_firmware.c
++++ b/drivers/usb/misc/isight_firmware.c
+@@ -48,7 +48,6 @@ static int isight_firmware_load(struct u
+               return -ENOMEM;
+       if (request_firmware(&firmware, "isight.fw", &dev->dev) != 0) {
+-              printk(KERN_ERR "Unable to load isight firmware\n");
+               ret = -ENODEV;
+               goto out;
+       }
+--- a/drivers/usb/serial/io_edgeport.c
++++ b/drivers/usb/serial/io_edgeport.c
+@@ -299,11 +299,8 @@ static void update_edgeport_E2PROM(struc
+       response = request_ihex_firmware(&fw, fw_name,
+                                        &edge_serial->serial->dev->dev);
+-      if (response) {
+-              dev_err(dev, "Failed to load image \"%s\" err %d\n",
+-                     fw_name, response);
++      if (response)
+               return;
+-      }
+       rec = (const struct ihex_binrec *)fw->data;
+       BootMajorVersion = rec->data[0];
+--- a/drivers/usb/serial/io_ti.c
++++ b/drivers/usb/serial/io_ti.c
+@@ -1014,8 +1014,6 @@ static int download_fw(struct edgeport_s
+       status = request_firmware(&fw, fw_name, dev);
+       if (status) {
+-              dev_err(dev, "Failed to load image \"%s\" err %d\n",
+-                              fw_name, status);
+               return status;
+       }
+--- a/drivers/usb/serial/ti_usb_3410_5052.c
++++ b/drivers/usb/serial/ti_usb_3410_5052.c
+@@ -1702,10 +1702,8 @@ static int ti_download_firmware(struct t
+       }
+ check_firmware:
+-      if (status) {
+-              dev_err(&dev->dev, "%s - firmware not found\n", __func__);
++      if (status)
+               return -ENOENT;
+-      }
+       if (fw_p->size > TI_FIRMWARE_BUF_SIZE) {
+               dev_err(&dev->dev, "%s - firmware too large %zu\n", __func__, fw_p->size);
+               release_firmware(fw_p);
+--- a/drivers/video/fbdev/broadsheetfb.c
++++ b/drivers/video/fbdev/broadsheetfb.c
+@@ -743,10 +743,8 @@ static ssize_t broadsheet_loadstore_wave
+               return -EINVAL;
+       err = request_firmware(&fw_entry, "broadsheet.wbf", dev);
+-      if (err < 0) {
+-              dev_err(dev, "Failed to get broadsheet waveform\n");
++      if (err)
+               goto err_failed;
+-      }
+       /* try to enforce reasonable min max on waveform */
+       if ((fw_entry->size < 8*1024) || (fw_entry->size > 64*1024)) {
+--- a/drivers/video/fbdev/metronomefb.c
++++ b/drivers/video/fbdev/metronomefb.c
+@@ -679,10 +679,8 @@ static int metronomefb_probe(struct plat
+               a) request the waveform file from userspace
+               b) process waveform and decode into metromem */
+       retval = request_firmware(&fw_entry, "metronome.wbf", &dev->dev);
+-      if (retval < 0) {
+-              dev_err(&dev->dev, "Failed to get waveform\n");
++      if (retval)
+               goto err_csum_table;
+-      }
+       retval = load_waveform((u8 *) fw_entry->data, fw_entry->size, 3, 31,
+                               par);
+--- a/sound/drivers/vx/vx_hwdep.c
++++ b/sound/drivers/vx/vx_hwdep.c
+@@ -71,10 +71,8 @@ int snd_vx_setup_firmware(struct vx_core
+               if (! fw_files[chip->type][i])
+                       continue;
+               sprintf(path, "vx/%s", fw_files[chip->type][i]);
+-              if (request_firmware(&fw, path, chip->dev)) {
+-                      snd_printk(KERN_ERR "vx: can't load firmware %s\n", path);
++              if (request_firmware(&fw, path, chip->dev))
+                       return -ENOENT;
+-              }
+               err = chip->ops->load_dsp(chip, i, fw);
+               if (err < 0) {
+                       release_firmware(fw);
+--- a/sound/isa/msnd/msnd_pinnacle.c
++++ b/sound/isa/msnd/msnd_pinnacle.c
+@@ -389,15 +389,11 @@ static int upload_dsp_code(struct snd_ca
+       outb(HPBLKSEL_0, chip->io + HP_BLKS);
+       err = request_firmware(&init_fw, INITCODEFILE, card->dev);
+-      if (err < 0) {
+-              printk(KERN_ERR LOGNAME ": Error loading " INITCODEFILE);
++      if (err)
+               goto cleanup1;
+-      }
+       err = request_firmware(&perm_fw, PERMCODEFILE, card->dev);
+-      if (err < 0) {
+-              printk(KERN_ERR LOGNAME ": Error loading " PERMCODEFILE);
++      if (err)
+               goto cleanup;
+-      }
+       memcpy_toio(chip->mappedbase, perm_fw->data, perm_fw->size);
+       if (snd_msnd_upload_host(chip, init_fw->data, init_fw->size) < 0) {
+--- a/sound/isa/sscape.c
++++ b/sound/isa/sscape.c
+@@ -544,10 +544,8 @@ static int sscape_upload_bootblock(struc
+       int ret;
+       ret = request_firmware(&init_fw, "scope.cod", card->dev);
+-      if (ret < 0) {
+-              snd_printk(KERN_ERR "sscape: Error loading scope.cod");
++      if (ret)
+               return ret;
+-      }
+       ret = upload_dma_data(sscape, init_fw->data, init_fw->size);
+       release_firmware(init_fw);
+@@ -584,11 +582,8 @@ static int sscape_upload_microcode(struc
+       snprintf(name, sizeof(name), "sndscape.co%d", version);
+       err = request_firmware(&init_fw, name, card->dev);
+-      if (err < 0) {
+-              snd_printk(KERN_ERR "sscape: Error loading sndscape.co%d",
+-                              version);
++      if (err)
+               return err;
+-      }
+       err = upload_dma_data(sscape, init_fw->data, init_fw->size);
+       if (err == 0)
+               snd_printk(KERN_INFO "sscape: MIDI firmware loaded %zu KBs\n",
+--- a/sound/isa/wavefront/wavefront_synth.c
++++ b/sound/isa/wavefront/wavefront_synth.c
+@@ -1956,10 +1956,8 @@ wavefront_download_firmware (snd_wavefro
+       const struct firmware *firmware;
+       err = request_firmware(&firmware, path, dev->card->dev);
+-      if (err < 0) {
+-              snd_printk(KERN_ERR "firmware (%s) download failed!!!\n", path);
++      if (err)
+               return 1;
+-      }
+       len = 0;
+       buf = firmware->data;
+--- a/sound/pci/asihpi/hpidspcd.c
++++ b/sound/pci/asihpi/hpidspcd.c
+@@ -46,8 +46,6 @@ short hpi_dsp_code_open(u32 adapter, voi
+       err = request_firmware(&firmware, fw_name, &dev->dev);
+       if (err || !firmware) {
+-              dev_err(&dev->dev, "%d, request_firmware failed for %s\n",
+-                      err, fw_name);
+               goto error1;
+       }
+       if (firmware->size < sizeof(header)) {
+--- a/sound/pci/echoaudio/echoaudio.c
++++ b/sound/pci/echoaudio/echoaudio.c
+@@ -60,11 +60,8 @@ static int get_firmware(const struct fir
+               "firmware requested: %s\n", card_fw[fw_index].data);
+       snprintf(name, sizeof(name), "ea/%s", card_fw[fw_index].data);
+       err = request_firmware(fw_entry, name, pci_device(chip));
+-      if (err < 0)
+-              dev_err(chip->card->dev,
+-                      "get_firmware(): Firmware not available (%d)\n", err);
+ #ifdef CONFIG_PM_SLEEP
+-      else
++      if (!err)
+               chip->fw_cache[fw_index] = *fw_entry;
+ #endif
+       return err;
+--- a/sound/pci/emu10k1/emu10k1_main.c
++++ b/sound/pci/emu10k1/emu10k1_main.c
+@@ -901,12 +901,8 @@ static int snd_emu10k1_emu1010_init(stru
+               }
+               err = request_firmware(&emu->firmware, filename, &emu->pci->dev);
+-              if (err != 0) {
+-                      dev_info(emu->card->dev,
+-                               "emu1010: firmware: %s not found. Err = %d\n",
+-                               filename, err);
++              if (err != 0)
+                       return err;
+-              }
+               dev_info(emu->card->dev,
+                        "emu1010: firmware file = %s, size = 0x%zx\n",
+                          filename, emu->firmware->size);
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -1815,10 +1815,8 @@ static void azx_firmware_cb(const struct
+       struct azx *chip = card->private_data;
+       struct pci_dev *pci = chip->pci;
+-      if (!fw) {
+-              dev_err(card->dev, "Cannot load firmware, aborting\n");
++      if (!fw)
+               goto error;
+-      }
+       chip->fw = fw;
+       if (!chip->disabled) {
+--- a/sound/pci/korg1212/korg1212.c
++++ b/sound/pci/korg1212/korg1212.c
+@@ -2332,7 +2332,6 @@ static int snd_korg1212_create(struct sn
+       err = request_firmware(&dsp_code, "korg/k1212.dsp", &pci->dev);
+       if (err < 0) {
+               release_firmware(dsp_code);
+-              snd_printk(KERN_ERR "firmware not available\n");
+               snd_korg1212_free(korg1212);
+               return err;
+       }
+--- a/sound/pci/mixart/mixart_hwdep.c
++++ b/sound/pci/mixart/mixart_hwdep.c
+@@ -571,11 +571,8 @@ int snd_mixart_setup_firmware(struct mix
+       for (i = 0; i < 3; i++) {
+               sprintf(path, "mixart/%s", fw_files[i]);
+-              if (request_firmware(&fw_entry, path, &mgr->pci->dev)) {
+-                      dev_err(&mgr->pci->dev,
+-                              "miXart: can't load firmware %s\n", path);
++              if (request_firmware(&fw_entry, path, &mgr->pci->dev))
+                       return -ENOENT;
+-              }
+               /* fake hwdep dsp record */
+               err = mixart_dsp_load(mgr, i, fw_entry);
+               release_firmware(fw_entry);
+--- a/sound/pci/pcxhr/pcxhr_hwdep.c
++++ b/sound/pci/pcxhr/pcxhr_hwdep.c
+@@ -385,12 +385,8 @@ int pcxhr_setup_firmware(struct pcxhr_mg
+               if (!fw_files[fw_set][i])
+                       continue;
+               sprintf(path, "pcxhr/%s", fw_files[fw_set][i]);
+-              if (request_firmware(&fw_entry, path, &mgr->pci->dev)) {
+-                      dev_err(&mgr->pci->dev,
+-                              "pcxhr: can't load firmware %s\n",
+-                                 path);
++              if (request_firmware(&fw_entry, path, &mgr->pci->dev))
+                       return -ENOENT;
+-              }
+               /* fake hwdep dsp record */
+               err = pcxhr_dsp_load(mgr, i, fw_entry);
+               release_firmware(fw_entry);
+--- a/sound/pci/riptide/riptide.c
++++ b/sound/pci/riptide/riptide.c
+@@ -1231,11 +1231,8 @@ static int try_to_load_firmware(struct c
+       if (!chip->fw_entry) {
+               err = request_firmware(&chip->fw_entry, "riptide.hex",
+                                      &chip->pci->dev);
+-              if (err) {
+-                      snd_printk(KERN_ERR
+-                                 "Riptide: Firmware not available %d\n", err);
++              if (err)
+                       return -EIO;
+-              }
+       }
+       err = loadfirmware(cif, chip->fw_entry->data, chip->fw_entry->size);
+       if (err) {
+--- a/sound/pci/rme9652/hdsp.c
++++ b/sound/pci/rme9652/hdsp.c
+@@ -5103,11 +5103,8 @@ static int hdsp_request_fw_loader(struct
+               return -EINVAL;
+       }
+-      if (request_firmware(&fw, fwfile, &hdsp->pci->dev)) {
+-              dev_err(hdsp->card->dev,
+-                      "cannot load firmware %s\n", fwfile);
++      if (request_firmware(&fw, fwfile, &hdsp->pci->dev))
+               return -ENOENT;
+-      }
+       if (fw->size < HDSP_FIRMWARE_SIZE) {
+               dev_err(hdsp->card->dev,
+                       "too short firmware size %d (expected %d)\n",
+--- a/sound/soc/codecs/wm2000.c
++++ b/sound/soc/codecs/wm2000.c
+@@ -891,10 +891,8 @@ static int wm2000_i2c_probe(struct i2c_c
+       }
+       ret = request_firmware(&fw, filename, &i2c->dev);
+-      if (ret != 0) {
+-              dev_err(&i2c->dev, "Failed to acquire ANC data: %d\n", ret);
++      if (ret != 0)
+               goto err_supplies;
+-      }
+       /* Pre-cook the concatenation of the register address onto the image */
+       wm2000->anc_download_size = fw->size + 2;
+--- a/sound/usb/6fire/firmware.c
++++ b/sound/usb/6fire/firmware.c
+@@ -219,8 +219,6 @@ static int usb6fire_fw_ezusb_upload(
+       ret = request_firmware(&fw, fwname, &device->dev);
+       if (ret < 0) {
+               kfree(rec);
+-              dev_err(&intf->dev,
+-                      "error requesting ezusb firmware %s.\n", fwname);
+               return ret;
+       }
+       ret = usb6fire_fw_ihex_init(fw, rec);
+@@ -296,8 +294,6 @@ static int usb6fire_fw_fpga_upload(
+       ret = request_firmware(&fw, fwname, &device->dev);
+       if (ret < 0) {
+-              dev_err(&intf->dev, "unable to get fpga firmware %s.\n",
+-                              fwname);
+               kfree(buffer);
+               return -EIO;
+       }
+--- a/sound/pci/cs46xx/cs46xx_lib.c
++++ b/sound/pci/cs46xx/cs46xx_lib.c
+@@ -3253,11 +3253,8 @@ int snd_cs46xx_start_dsp(struct snd_cs46
+ #ifdef CONFIG_SND_CS46XX_NEW_DSP
+       for (i = 0; i < CS46XX_DSP_MODULES; i++) {
+               err = load_firmware(chip, &chip->modules[i], module_names[i]);
+-              if (err < 0) {
+-                      dev_err(chip->card->dev, "firmware load error [%s]\n",
+-                                 module_names[i]);
++              if (err < 0)
+                       return err;
+-              }
+               err = cs46xx_dsp_load_module(chip, chip->modules[i]);
+               if (err < 0) {
+                       dev_err(chip->card->dev, "image download error [%s]\n",
diff --git a/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch b/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
new file mode 100644 (file)
index 0000000..ab8c172
--- /dev/null
@@ -0,0 +1,64 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: firmware_class: Log every success and failure against given device
+Date: Sun, 09 Dec 2012 16:02:00 +0000
+Forwarded: no
+
+The hundreds of users of request_firmware() have nearly as many
+different log formats for reporting failures.  They also have only the
+vaguest hint as to what went wrong; only firmware_class really knows
+that.  Therefore, add specific log messages for the failure modes that
+aren't currently logged.
+
+In case of a driver that tries multiple names, this may result in the
+impression that it failed to initialise.  Therefore, also log successes.
+
+This makes many error messages in drivers redundant, which will be
+removed in later patches.
+
+This does not cover the case where we fall back to a user-mode helper
+(which is no longer enabled in Debian).
+
+NOTE: hw-detect will depend on the "firmware: failed to load %s (%d)\n"
+format to detect missing firmware.
+---
+--- a/drivers/base/firmware_class.c
++++ b/drivers/base/firmware_class.c
+@@ -350,21 +350,22 @@ fw_get_filesystem_firmware(struct device
+               rc = kernel_read_file_from_path(path, &buf->data, &size, msize,
+                                               id);
+               if (rc) {
+-                      if (rc == -ENOENT)
+-                              dev_dbg(device, "loading %s failed with error %d\n",
+-                                       path, rc);
+-                      else
+-                              dev_warn(device, "loading %s failed with error %d\n",
+-                                       path, rc);
++                      dev_dbg(device, "loading %s failed with error %d\n",
++                              path, rc);
+                       continue;
+               }
+-              dev_dbg(device, "direct-loading %s\n", buf->fw_id);
++              dev_info(device, "firmware: direct-loading firmware %s\n",
++                       buf->fw_id);
+               buf->size = size;
+               fw_finish_direct_load(device, buf);
+               break;
+       }
+       __putname(path);
++      if (rc)
++              dev_err(device, "firmware: failed to load %s (%d)\n",
++                      buf->fw_id, rc);
++
+       return rc;
+ }
+@@ -1155,7 +1156,7 @@ _request_firmware(const struct firmware
+       if (opt_flags & FW_OPT_NOWAIT) {
+               timeout = usermodehelper_read_lock_wait(timeout);
+               if (!timeout) {
+-                      dev_dbg(device, "firmware: %s loading timed out\n",
++                      dev_err(device, "firmware: %s loading timed out\n",
+                               name);
+                       ret = -EBUSY;
+                       goto out;
diff --git a/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch b/patches/bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch
new file mode 100644 (file)
index 0000000..bde2c1f
--- /dev/null
@@ -0,0 +1,85 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Wed, 13 Apr 2016 21:48:06 +0100
+Subject: fs: Add MODULE_SOFTDEP declarations for hard-coded crypto drivers
+Bug-Debian: https://bugs.debian.org/819725
+Forwarded: http://mid.gmane.org/20160517133631.GF7555@decadent.org.uk
+
+This helps initramfs builders and other tools to find the full
+dependencies of a module.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/fs/btrfs/super.c
++++ b/fs/btrfs/super.c
+@@ -2456,3 +2456,4 @@ late_initcall(init_btrfs_fs);
+ module_exit(exit_btrfs_fs)
+ MODULE_LICENSE("GPL");
++MODULE_SOFTDEP("pre: crypto-crc32c");
+--- a/fs/cifs/cifsfs.c
++++ b/fs/cifs/cifsfs.c
+@@ -1373,5 +1373,13 @@ MODULE_DESCRIPTION
+     ("VFS to access servers complying with the SNIA CIFS Specification "
+      "e.g. Samba and Windows");
+ MODULE_VERSION(CIFS_VERSION);
++
++#ifdef CONFIG_CIFS_SMB2
++#define CIFS_SMB2_EXTRA_SOFTDEPS " crypto-aes crypto-cmac crypto-sha256"
++#else
++#define CIFS_SMB2_EXTRA_SOFTDEPS ""
++#endif
++MODULE_SOFTDEP("pre: crypto-arc4 crypto-des crypto-ecb crypto-hmac crypto-md4 crypto-md5" CIFS_SMB2_EXTRA_SOFTDEPS);
++
+ module_init(init_cifs)
+ module_exit(exit_cifs)
+--- a/fs/crypto/crypto.c
++++ b/fs/crypto/crypto.c
+@@ -566,3 +566,4 @@ static void __exit fscrypt_exit(void)
+ module_exit(fscrypt_exit);
+ MODULE_LICENSE("GPL");
++MODULE_SOFTDEP("pre: crypto-aes crypto-ecb");
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -5441,5 +5441,13 @@ static void __exit ext4_exit_fs(void)
+ MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
+ MODULE_DESCRIPTION("Fourth Extended Filesystem");
+ MODULE_LICENSE("GPL");
++
++#ifdef CONFIG_EXT4_FS_ENCRYPTION
++#define EXT4_ENC_EXTRA_SOFTDEPS " crypto-aes crypto-ecb"
++#else
++#define EXT4_ENC_EXTRA_SOFTDEPS ""
++#endif
++MODULE_SOFTDEP("pre: crypto-crc32c" EXT4_ENC_EXTRA_SOFTDEPS);
++
+ module_init(ext4_init_fs)
+ module_exit(ext4_exit_fs)
+--- a/fs/f2fs/super.c
++++ b/fs/f2fs/super.c
+@@ -1742,3 +1742,4 @@ module_exit(exit_f2fs_fs)
+ MODULE_AUTHOR("Samsung Electronics's Praesto Team");
+ MODULE_DESCRIPTION("Flash Friendly File System");
+ MODULE_LICENSE("GPL");
++MODULE_SOFTDEP("pre: crypto-crc32c");
+--- a/fs/jbd2/journal.c
++++ b/fs/jbd2/journal.c
+@@ -2716,6 +2716,7 @@ static void __exit journal_exit(void)
+ }
+ MODULE_LICENSE("GPL");
++MODULE_SOFTDEP("pre: crypto-crc32c");
+ module_init(journal_init);
+ module_exit(journal_exit);
+--- a/fs/nfsd/nfsctl.c
++++ b/fs/nfsd/nfsctl.c
+@@ -1314,5 +1314,8 @@ static void __exit exit_nfsd(void)
+ MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
+ MODULE_LICENSE("GPL");
++#ifdef CONFIG_NFSD_V4
++MODULE_SOFTDEP("pre: crypto-md5");
++#endif
+ module_init(init_nfsd)
+ module_exit(exit_nfsd)
diff --git a/patches/bugfix/all/kbuild-do-not-use-hyphen-in-exported-variable-name.patch b/patches/bugfix/all/kbuild-do-not-use-hyphen-in-exported-variable-name.patch
new file mode 100644 (file)
index 0000000..8082687
--- /dev/null
@@ -0,0 +1,50 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 26 Aug 2016 01:31:28 +0100
+Subject: kbuild: Do not use hyphen in exported variable name
+Bug-Debian: https://bugs.debian.org/833561
+Forwarded: https://marc.info/?l=linux-kbuild&m=141523555023625
+
+This definition in Makefile.dtbinst:
+
+    export dtbinst-root ?= $(obj)
+
+should define and export dtbinst-root when handling the root dts
+directory, and do nothing in the subdirectories.  However, the
+variable does not reliably get exported to the environment, perhaps
+because its name contains a hyphen.
+
+Rename the variable to dtbinst_root.
+
+References: https://bugs.debian.org/833561
+Fixes: 323a028d39cdi ("dts, kbuild: Implement support for dtb vendor subdirs")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/scripts/Makefile.dtbinst
++++ b/scripts/Makefile.dtbinst
+@@ -14,7 +14,7 @@ src := $(obj)
+ PHONY := __dtbs_install
+ __dtbs_install:
+-export dtbinst-root ?= $(obj)
++export dtbinst_root ?= $(obj)
+ include include/config/auto.conf
+ include scripts/Kbuild.include
+@@ -22,7 +22,7 @@ include $(src)/Makefile
+ PHONY += __dtbs_install_prep
+ __dtbs_install_prep:
+-ifeq ("$(dtbinst-root)", "$(obj)")
++ifeq ("$(dtbinst_root)", "$(obj)")
+       $(Q)mkdir -p $(INSTALL_DTBS_PATH)
+ endif
+@@ -33,7 +33,7 @@ dtbinst-dirs := $(dts-dirs)
+ quiet_cmd_dtb_install =       INSTALL $<
+       cmd_dtb_install =       mkdir -p $(2); cp $< $(2)
+-install-dir = $(patsubst $(dtbinst-root)%,$(INSTALL_DTBS_PATH)%,$(obj))
++install-dir = $(patsubst $(dtbinst_root)%,$(INSTALL_DTBS_PATH)%,$(obj))
+ $(dtbinst-files) $(dtbinst-dirs): | __dtbs_install_prep
diff --git a/patches/bugfix/all/kbuild-fix-recordmcount-dependency.patch b/patches/bugfix/all/kbuild-fix-recordmcount-dependency.patch
new file mode 100644 (file)
index 0000000..da98870
--- /dev/null
@@ -0,0 +1,23 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: kbuild: Fix recordmcount dependency for OOT modules
+Date: Mon, 08 Sep 2014 18:31:24 +0100
+Forwarded: no
+
+We never rebuild anything in-tree when building an out-of-tree
+modules, so external modules should not depend on the recordmcount
+sources.
+
+--- a/scripts/Makefile.build
++++ b/scripts/Makefile.build
+@@ -241,6 +241,11 @@ cmd_record_mcount =                                               \
+       fi;
+ endif
++# Don't require recordmcount source for an OOT build.
++ifdef KBUILD_EXTMOD
++recordmcount_source :=
++endif
++
+ ifdef CONFIG_STACK_VALIDATION
+ ifneq ($(SKIP_STACK_VALIDATION),1)
diff --git a/patches/bugfix/all/kbuild-include-addtree-remove-quotes-before-matching-path.patch b/patches/bugfix/all/kbuild-include-addtree-remove-quotes-before-matching-path.patch
new file mode 100644 (file)
index 0000000..df7a860
--- /dev/null
@@ -0,0 +1,40 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 04 Mar 2017 01:44:15 +0000
+Subject: Kbuild.include: addtree: Remove quotes before matching path
+Bug-Debian: https://bugs.debian.org/856474
+Forwarded: https://marc.info/?l=linux-kbuild&m=148987677205629
+
+systemtap currently fails to build modules when the kernel source and
+object trees are separate.
+
+systemtap adds something like -I"/usr/share/systemtap/runtime" to
+EXTRA_CFLAGS, and addtree should not adjust this as it's specifying an
+absolute directory.  But since make has no understanding of shell
+quoting, it does anyway.
+
+For a long time this didn't matter, because addtree would still emit
+the original -I option after the adjusted one.  However, commit
+db547ef19064 ("Kbuild: don't add obj tree in additional includes")
+changed it to remove the original -I option.
+
+Remove quotes (both double and single) before matching against the
+excluded patterns.
+
+References: https://bugs.debian.org/856474
+Reported-by: Jack Henschel <jackdev@mailbox.org>
+Reported-by: Ritesh Raj Sarraf <rrs@debian.org>
+Fixes: db547ef19064 ("Kbuild: don't add obj tree in additional includes")
+Cc: stable@vger.kernel.org # 4.8+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/scripts/Kbuild.include
++++ b/scripts/Kbuild.include
+@@ -207,7 +207,7 @@ hdr-inst := -f $(srctree)/scripts/Makefi
+ # Prefix -I with $(srctree) if it is not an absolute path.
+ # skip if -I has no parameter
+ addtree = $(if $(patsubst -I%,%,$(1)), \
+-$(if $(filter-out -I/% -I./% -I../%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1)),$(1)))
++$(if $(filter-out -I/% -I./% -I../%,$(subst $(quote),,$(subst $(squote),,$(1)))),$(patsubst -I%,-I$(srctree)/%,$(1)),$(1)))
+ # Find all -I options and call addtree
+ flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o)))
diff --git a/patches/bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch b/patches/bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch
new file mode 100644 (file)
index 0000000..2b136e6
--- /dev/null
@@ -0,0 +1,91 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 19 Oct 2013 19:43:35 +0100
+Subject: kbuild: Use -nostdinc in compile tests
+Bug-Debian: https://bugs.debian.org/726861
+Bug-Debian: https://bugs.debian.org/717557
+Forwarded: https://marc.info/?l=linux-kbuild&m=141523555023625
+
+gcc 4.8 and later include <stdc-predef.h> by default.  In some
+versions of eglibc that includes <bits/predefs.h>, but that may be
+missing when building with a biarch compiler.  Also <stdc-predef.h>
+itself could be missing as we are only trying to build a kernel, not
+userland.
+
+The -nostdinc option disables this, though it isn't explicitly
+documented.  This option is already used when actually building
+the kernel, but not by cc-option and other tests.  This can result
+in silently miscompiling the kernel.
+
+References: https://bugs.debian.org/717557
+References: https://bugs.debian.org/726861
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/scripts/Kbuild.include
++++ b/scripts/Kbuild.include
+@@ -116,12 +116,12 @@ CC_OPTION_CFLAGS = $(filter-out $(GCC_PL
+ # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
+ cc-option = $(call try-run,\
+-      $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
++      $(CC) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
+ # cc-option-yn
+ # Usage: flag := $(call cc-option-yn,-march=winchip-c6)
+ cc-option-yn = $(call try-run,\
+-      $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n)
++      $(CC) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n)
+ # cc-option-align
+ # Prefix align with either -falign or -malign
+@@ -131,18 +131,19 @@ cc-option-align = $(subst -functions=0,,
+ # cc-disable-warning
+ # Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
+ cc-disable-warning = $(call try-run,\
+-      $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
++      $(CC) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
+ # cc-name
+ # Expands to either gcc or clang
+ cc-name = $(shell $(CC) -v 2>&1 | grep -q "clang version" && echo clang || echo gcc)
+ # cc-version
+-cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
++cc-version = $(shell $(CONFIG_SHELL) \
++      $(srctree)/scripts/gcc-version.sh $(CC) $(NOSTDINC_FLAGS))
+ # cc-fullversion
+ cc-fullversion = $(shell $(CONFIG_SHELL) \
+-      $(srctree)/scripts/gcc-version.sh -p $(CC))
++      $(srctree)/scripts/gcc-version.sh -p $(CC) $(NOSTDINC_FLAGS))
+ # cc-ifversion
+ # Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
+@@ -156,7 +157,7 @@ cc-ldoption = $(call try-run,\
+ # ld-option
+ # Usage: LDFLAGS += $(call ld-option, -X)
+ ld-option = $(call try-run,\
+-      $(CC) -x c /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2))
++      $(CC) $(NOSTDINC_FLAGS) -x c /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2))
+ # ar-option
+ # Usage: KBUILD_ARFLAGS := $(call ar-option,D)
+--- a/Makefile
++++ b/Makefile
+@@ -642,6 +642,8 @@ endif
+ KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \
+                       $(call cc-disable-warning,maybe-uninitialized,))
++NOSTDINC_FLAGS += -nostdinc
++
+ # Tell gcc to never replace conditional load with a non-conditional one
+ KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
+@@ -760,7 +762,7 @@ KBUILD_CFLAGS += $(call cc-option, -fno-
+ endif
+ # arch Makefile may override CC so keep this after arch Makefile is included
+-NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
++NOSTDINC_FLAGS += -isystem $(shell $(CC) -print-file-name=include)
+ CHECKFLAGS     += $(NOSTDINC_FLAGS)
+ # warn about C99 declaration after statement
diff --git a/patches/bugfix/all/liblockdep-define-the-array_size-macro.patch b/patches/bugfix/all/liblockdep-define-the-array_size-macro.patch
new file mode 100644 (file)
index 0000000..ed639ec
--- /dev/null
@@ -0,0 +1,26 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 14 Jun 2016 21:14:14 +0100
+Subject: [PATCH 3/7] liblockdep: Define the ARRAY_SIZE() macro
+Forwarded: http://mid.gmane.org/20160614204803.GV7555@decadent.org.uk
+
+lockdep.c now uses ARRAY_SIZE().
+
+Fixes: 75dd602a5198 ("lockdep: Fix lock_chain::base size")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/lib/lockdep/uinclude/linux/kernel.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tools/lib/lockdep/uinclude/linux/kernel.h b/tools/lib/lockdep/uinclude/linux/kernel.h
+index 276c7a8b2ed1..da87bd9ad2c1 100644
+--- a/tools/lib/lockdep/uinclude/linux/kernel.h
++++ b/tools/lib/lockdep/uinclude/linux/kernel.h
+@@ -7,6 +7,8 @@
+ #include <linux/hardirq.h>
+ #include <linux/kern_levels.h>
++#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
++
+ #ifndef container_of
+ #define container_of(ptr, type, member) ({                    \
+       const typeof(((type *)0)->member) * __mptr = (ptr);     \
diff --git a/patches/bugfix/all/liblockdep-enable-wall-by-default.patch b/patches/bugfix/all/liblockdep-enable-wall-by-default.patch
new file mode 100644 (file)
index 0000000..74db9c8
--- /dev/null
@@ -0,0 +1,28 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 14 Jun 2016 21:26:01 +0100
+Subject: [PATCH 4/7] liblockdep: Enable -Wall by default
+Forwarded: http://mid.gmane.org/20160614204841.GW7555@decadent.org.uk
+
+Regressions in liblockdep may be missed because it doesn't enable
+warnings.
+
+Adding -Wall immediately introduces a lot of warnings, but those will
+be fixed by the following commits.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/lib/lockdep/Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/lib/lockdep/Makefile b/tools/lib/lockdep/Makefile
+index 1d57af56814b..710a0edfe1b1 100644
+--- a/tools/lib/lockdep/Makefile
++++ b/tools/lib/lockdep/Makefile
+@@ -79,6 +79,7 @@ INCLUDES = -I. -I./uinclude -I./include -I../../include $(CONFIG_INCLUDES)
+ # Set compile option CFLAGS if not set elsewhere
+ CFLAGS ?= -g -DCONFIG_LOCKDEP -DCONFIG_STACKTRACE -DCONFIG_PROVE_LOCKING -DBITS_PER_LONG=__WORDSIZE -DLIBLOCKDEP_VERSION='"$(LIBLOCKDEP_VERSION)"' -rdynamic -O0 -g
+ CFLAGS += -fPIC
++CFLAGS += -Wall
+ override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ)
diff --git a/patches/bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch b/patches/bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch
new file mode 100644 (file)
index 0000000..3852c96
--- /dev/null
@@ -0,0 +1,54 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 14 Jun 2016 21:32:11 +0100
+Subject: [PATCH 7/7] liblockdep: Fix 'defined but not used' warning for
+ init_utsname()
+Forwarded: http://mid.gmane.org/20160614204909.GZ7555@decadent.org.uk
+
+We define init_utsname() as static but not inline, resulting
+in a warning for every source file that includes lockdep.h but
+doesn't call it.
+
+Since it is only used by lockdep.c, define it in there.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/lib/lockdep/lockdep.c                | 10 ++++++++++
+ tools/lib/lockdep/uinclude/linux/lockdep.h | 10 ----------
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+--- a/tools/lib/lockdep/lockdep.c
++++ b/tools/lib/lockdep/lockdep.c
+@@ -12,4 +12,14 @@ u32 prandom_u32(void)
+       abort();
+ }
++static struct new_utsname *init_utsname(void)
++{
++      static struct new_utsname n = (struct new_utsname) {
++              .release = "liblockdep",
++              .version = LIBLOCKDEP_VERSION,
++      };
++
++      return &n;
++}
++
+ #include "../../../kernel/locking/lockdep.c"
+--- a/tools/lib/lockdep/uinclude/linux/lockdep.h
++++ b/tools/lib/lockdep/uinclude/linux/lockdep.h
+@@ -44,16 +44,6 @@ static inline int debug_locks_off(void)
+ #define atomic_t unsigned long
+ #define atomic_inc(x) ((*(x))++)
+-static struct new_utsname *init_utsname(void)
+-{
+-      static struct new_utsname n = (struct new_utsname) {
+-              .release = "liblockdep",
+-              .version = LIBLOCKDEP_VERSION,
+-      };
+-
+-      return &n;
+-}
+-
+ #define print_tainted() ""
+ #define static_obj(x) 1
diff --git a/patches/bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch b/patches/bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch
new file mode 100644 (file)
index 0000000..1a84dad
--- /dev/null
@@ -0,0 +1,44 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 14 Jun 2016 20:13:24 +0100
+Subject: [PATCH 6/7] liblockdep: Fix 'set but not used' warnings
+Forwarded: http://mid.gmane.org/20160614204900.GY7555@decadent.org.uk
+
+liblockdep defines trivial macros for working with interrupt flags, as
+interrupts are never disabled in userland.  This results in warnings
+from gcc when -Wunused-but-set-variable is enabled, and it is enabled
+by -Wall.  Fix this by evaluating the flags parameter and casting it to
+void.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/lib/lockdep/uinclude/linux/irqflags.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/tools/lib/lockdep/uinclude/linux/irqflags.h b/tools/lib/lockdep/uinclude/linux/irqflags.h
+index 6cc296f0fad0..df77669cfe1c 100644
+--- a/tools/lib/lockdep/uinclude/linux/irqflags.h
++++ b/tools/lib/lockdep/uinclude/linux/irqflags.h
+@@ -17,19 +17,19 @@
+ #define raw_local_irq_disable() do { } while (0)
+ #define raw_local_irq_enable() do { } while (0)
+ #define raw_local_irq_save(flags) ((flags) = 0)
+-#define raw_local_irq_restore(flags) do { } while (0)
++#define raw_local_irq_restore(flags) ((void)(flags))
+ #define raw_local_save_flags(flags) ((flags) = 0)
+-#define raw_irqs_disabled_flags(flags) do { } while (0)
++#define raw_irqs_disabled_flags(flags) ((void)(flags))
+ #define raw_irqs_disabled() 0
+ #define raw_safe_halt()
+ #define local_irq_enable() do { } while (0)
+ #define local_irq_disable() do { } while (0)
+ #define local_irq_save(flags) ((flags) = 0)
+-#define local_irq_restore(flags) do { } while (0)
++#define local_irq_restore(flags) ((void)(flags))
+ #define local_save_flags(flags)       ((flags) = 0)
+ #define irqs_disabled() (1)
+-#define irqs_disabled_flags(flags) (0)
++#define irqs_disabled_flags(flags) ((void)(flags), 0)
+ #define safe_halt() do { } while (0)
+ #define trace_lock_release(x, y)
diff --git a/patches/bugfix/all/liblockdep-fix-undefined-symbol-prandom_u32.patch b/patches/bugfix/all/liblockdep-fix-undefined-symbol-prandom_u32.patch
new file mode 100644 (file)
index 0000000..2244bcc
--- /dev/null
@@ -0,0 +1,34 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 14 Jun 2016 21:09:19 +0100
+Subject: [PATCH 1/7] liblockdep: Fix undefined symbol prandom_u32
+Forwarded: http://mid.gmane.org/20160614204713.GT7555@decadent.org.uk
+
+__lock_pin_lock() now calls prandom_u32() which is not defined in
+liblockdep.  __lock_pin_lock() and its caller lock_pin_lock() are dead
+code in liblockdep, but we still need to provide a definition of
+prandom_u32() in case lazy binding is disabled.
+
+Fixes: e7904a28f533 ("locking/lockdep, sched/core: Implement a better ...")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/lib/lockdep/common.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/tools/lib/lockdep/lockdep.c
++++ b/tools/lib/lockdep/lockdep.c
+@@ -1,8 +1,15 @@
+ #include <linux/lockdep.h>
++#include <stdlib.h>
+ /* Trivial API wrappers, we don't (yet) have RCU in user-space: */
+ #define hlist_for_each_entry_rcu      hlist_for_each_entry
+ #define hlist_add_head_rcu            hlist_add_head
+ #define hlist_del_rcu                 hlist_del
++u32 prandom_u32(void)
++{
++      /* Used only by lock_pin_lock() which is dead code */
++      abort();
++}
++
+ #include "../../../kernel/locking/lockdep.c"
diff --git a/patches/bugfix/all/liblockdep-fix-unused-value-warnings.patch b/patches/bugfix/all/liblockdep-fix-unused-value-warnings.patch
new file mode 100644 (file)
index 0000000..4612489
--- /dev/null
@@ -0,0 +1,72 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 14 Jun 2016 20:13:23 +0100
+Subject: [PATCH 5/7] liblockdep: Fix 'unused value' warnings
+Forwarded: http://mid.gmane.org/20160614204853.GX7555@decadent.org.uk
+
+liblockdep defines various macros that may expand to an expression
+with no effect, while the in-kernel definition does have an effect.
+This results in warnings from gcc when -Wunused-value is enabled, and
+is is enabled by -Wall.  Fix this by introducing trivial functions,
+as function return values are generally allowed to be ignored.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/lib/lockdep/uinclude/linux/debug_locks.h |  2 +-
+ tools/lib/lockdep/uinclude/linux/kernel.h      | 12 +++++++++---
+ tools/lib/lockdep/uinclude/linux/lockdep.h     |  6 +++++-
+ 3 files changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/tools/lib/lockdep/uinclude/linux/debug_locks.h b/tools/lib/lockdep/uinclude/linux/debug_locks.h
+index f38eb64df794..1d4fbec5c649 100644
+--- a/tools/lib/lockdep/uinclude/linux/debug_locks.h
++++ b/tools/lib/lockdep/uinclude/linux/debug_locks.h
+@@ -4,7 +4,7 @@
+ #include <stddef.h>
+ #include <linux/compiler.h>
+-#define DEBUG_LOCKS_WARN_ON(x) (x)
++#define DEBUG_LOCKS_WARN_ON(x) WARN_ON(x)
+ extern bool debug_locks;
+ extern bool debug_locks_silent;
+diff --git a/tools/lib/lockdep/uinclude/linux/kernel.h b/tools/lib/lockdep/uinclude/linux/kernel.h
+index da87bd9ad2c1..021cff4f4e3d 100644
+--- a/tools/lib/lockdep/uinclude/linux/kernel.h
++++ b/tools/lib/lockdep/uinclude/linux/kernel.h
+@@ -22,10 +22,16 @@
+       _max1 > _max2 ? _max1 : _max2; })
+ #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
+-#define WARN_ON(x) (x)
+-#define WARN_ON_ONCE(x) (x)
++
++static inline int lockdep_warn(int condition)
++{
++      return condition;
++}
++#define WARN_ON(x) lockdep_warn(x)
++#define WARN_ON_ONCE(x) WARN_ON(x)
++#define WARN(x, y...) WARN_ON(x)
++
+ #define likely(x) (x)
+-#define WARN(x, y...) (x)
+ #define uninitialized_var(x) x
+ #define __init
+ #define noinline
+diff --git a/tools/lib/lockdep/uinclude/linux/lockdep.h b/tools/lib/lockdep/uinclude/linux/lockdep.h
+index d30214221920..d1079034a14d 100644
+--- a/tools/lib/lockdep/uinclude/linux/lockdep.h
++++ b/tools/lib/lockdep/uinclude/linux/lockdep.h
+@@ -29,7 +29,11 @@ extern struct task_struct *__curr(void);
+ #define current (__curr())
+-#define debug_locks_off() 1
++static inline int debug_locks_off(void)
++{
++      return 1;
++}
++
+ #define task_pid_nr(tsk) ((tsk)->pid)
+ #define KSYM_NAME_LEN 128
diff --git a/patches/bugfix/all/liblockdep-reduce-max_lock_depth-to-avoid-overflowin.patch b/patches/bugfix/all/liblockdep-reduce-max_lock_depth-to-avoid-overflowin.patch
new file mode 100644 (file)
index 0000000..f15e6d3
--- /dev/null
@@ -0,0 +1,44 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 14 Jun 2016 20:44:14 +0100
+Subject: [PATCH 2/7] liblockdep: Reduce MAX_LOCK_DEPTH to avoid overflowing
+ lock_chain::depth
+Forwarded: http://mid.gmane.org/20160614204752.GU7555@decadent.org.uk
+
+liblockdep has been broken since commit 75dd602a5198 ("lockdep: Fix
+lock_chain::base size"), as that adds a check that MAX_LOCK_DEPTH is
+within the range of lock_chain::depth and in liblockdep it is much
+too large.
+
+That should have resulted in a compiler error, but didn't because:
+
+- the check uses ARRAY_SIZE(), which isn't yet defined in liblockdep
+  so is assumed to be an (undeclared) function
+- putting a function call inside a BUILD_BUG_ON() expression quietly
+  turns it into some nonsense involving a variable-length array
+
+It did produce a compiler warning, but I didn't notice because
+liblockdep already produces too many warnings if -Wall is enabled
+(which I'll fix shortly).
+
+Even before that commit, which reduced lock_chain::depth from 8 bits
+to 6, MAX_LOCK_DEPTH was too large.
+
+Cc: <stable@vger.kernel.org> # for versions before 4.6, use a value of 255
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/lib/lockdep/uinclude/linux/lockdep.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/lib/lockdep/uinclude/linux/lockdep.h b/tools/lib/lockdep/uinclude/linux/lockdep.h
+index c808c7d02d21..d30214221920 100644
+--- a/tools/lib/lockdep/uinclude/linux/lockdep.h
++++ b/tools/lib/lockdep/uinclude/linux/lockdep.h
+@@ -8,7 +8,7 @@
+ #include <linux/utsname.h>
+ #include <linux/compiler.h>
+-#define MAX_LOCK_DEPTH 2000UL
++#define MAX_LOCK_DEPTH 63UL
+ #define asmlinkage
+ #define __visible
diff --git a/patches/bugfix/all/lockdep-fix-oot-build.patch b/patches/bugfix/all/lockdep-fix-oot-build.patch
new file mode 100644 (file)
index 0000000..b22569a
--- /dev/null
@@ -0,0 +1,40 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 13 Aug 2015 20:48:12 +0200
+Subject: liblockdep: Fix object file paths used in an out-of-tree build
+Forwarded: no
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/lib/lockdep/Makefile
++++ b/tools/lib/lockdep/Makefile
+@@ -100,7 +100,7 @@ include $(srctree)/tools/build/Makefile.
+ do_compile_shared_library =                   \
+       ($(print_shared_lib_compile)            \
+-      $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='"$@"';$(shell ln -sf $@ liblockdep.so))
++      $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='"$(@F)"';$(shell ln -sf $(@F) $(@D)/liblockdep.so))
+ do_build_static_lib =                         \
+       ($(print_static_lib_build)              \
+@@ -118,10 +118,10 @@ all_cmd: $(CMD_TARGETS)
+ $(LIB_IN): force
+       $(Q)$(MAKE) $(build)=liblockdep
+-liblockdep.so.$(LIBLOCKDEP_VERSION): $(LIB_IN)
++$(OUTPUT)liblockdep.so.$(LIBLOCKDEP_VERSION): $(LIB_IN)
+       $(Q)$(do_compile_shared_library)
+-liblockdep.a: $(LIB_IN)
++$(OUTPUT)liblockdep.a: $(LIB_IN)
+       $(Q)$(do_build_static_lib)
+ tags: force
+@@ -149,7 +149,7 @@ install_lib: all_cmd
+ install: install_lib
+ clean:
+-      $(RM) *.o *~ $(TARGETS) *.a *liblockdep*.so* $(VERSION_FILES) .*.d .*.cmd
++      $(RM) $(OUTPUT)*.o *~ $(TARGETS) $(OUTPUT)*.a $(OUTPUT)*liblockdep*.so* $(VERSION_FILES) $(OUTPUT).*.d $(OUTPUT).*.cmd
+       $(RM) tags TAGS
+ PHONY += force
diff --git a/patches/bugfix/all/lockdep-fix-soname.patch b/patches/bugfix/all/lockdep-fix-soname.patch
new file mode 100644 (file)
index 0000000..ed60781
--- /dev/null
@@ -0,0 +1,18 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 13 Aug 2015 20:48:12 +0200
+Subject: liblockdep: Remove double-quotes from soname
+Forwarded: no
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/lib/lockdep/Makefile
++++ b/tools/lib/lockdep/Makefile
+@@ -100,7 +100,7 @@ include $(srctree)/tools/build/Makefile.
+ do_compile_shared_library =                   \
+       ($(print_shared_lib_compile)            \
+-      $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='"$(@F)"';$(shell ln -sf $(@F) $(@D)/liblockdep.so))
++      $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='$(@F)';$(shell ln -sf $(@F) $(@D)/liblockdep.so))
+ do_build_static_lib =                         \
+       ($(print_static_lib_build)              \
diff --git a/patches/bugfix/all/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch b/patches/bugfix/all/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch
new file mode 100644 (file)
index 0000000..63508e6
--- /dev/null
@@ -0,0 +1,74 @@
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Fri, 21 Apr 2017 23:14:48 +0200
+Subject: macsec: avoid heap overflow in skb_to_sgvec
+Origin: https://git.kernel.org/linus/4d6fa57b4dab0d77f4d8e9d9c73d1e63f6fe8fee
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-7477
+
+While this may appear as a humdrum one line change, it's actually quite
+important. An sk_buff stores data in three places:
+
+1. A linear chunk of allocated memory in skb->data. This is the easiest
+   one to work with, but it precludes using scatterdata since the memory
+   must be linear.
+2. The array skb_shinfo(skb)->frags, which is of maximum length
+   MAX_SKB_FRAGS. This is nice for scattergather, since these fragments
+   can point to different pages.
+3. skb_shinfo(skb)->frag_list, which is a pointer to another sk_buff,
+   which in turn can have data in either (1) or (2).
+
+The first two are rather easy to deal with, since they're of a fixed
+maximum length, while the third one is not, since there can be
+potentially limitless chains of fragments. Fortunately dealing with
+frag_list is opt-in for drivers, so drivers don't actually have to deal
+with this mess. For whatever reason, macsec decided it wanted pain, and
+so it explicitly specified NETIF_F_FRAGLIST.
+
+Because dealing with (1), (2), and (3) is insane, most users of sk_buff
+doing any sort of crypto or paging operation calls a convenient function
+called skb_to_sgvec (which happens to be recursive if (3) is in use!).
+This takes a sk_buff as input, and writes into its output pointer an
+array of scattergather list items. Sometimes people like to declare a
+fixed size scattergather list on the stack; othertimes people like to
+allocate a fixed size scattergather list on the heap. However, if you're
+doing it in a fixed-size fashion, you really shouldn't be using
+NETIF_F_FRAGLIST too (unless you're also ensuring the sk_buff and its
+frag_list children arent't shared and then you check the number of
+fragments in total required.)
+
+Macsec specifically does this:
+
+        size += sizeof(struct scatterlist) * (MAX_SKB_FRAGS + 1);
+        tmp = kmalloc(size, GFP_ATOMIC);
+        *sg = (struct scatterlist *)(tmp + sg_offset);
+       ...
+        sg_init_table(sg, MAX_SKB_FRAGS + 1);
+        skb_to_sgvec(skb, sg, 0, skb->len);
+
+Specifying MAX_SKB_FRAGS + 1 is the right answer usually, but not if you're
+using NETIF_F_FRAGLIST, in which case the call to skb_to_sgvec will
+overflow the heap, and disaster ensues.
+
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Cc: stable@vger.kernel.org
+Cc: security@kernel.org
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/macsec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
+index ff0a5ed..dbab05a 100644
+--- a/drivers/net/macsec.c
++++ b/drivers/net/macsec.c
+@@ -2716,7 +2716,7 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
+ }
+ #define MACSEC_FEATURES \
+-      (NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
++      (NETIF_F_SG | NETIF_F_HIGHDMA)
+ static struct lock_class_key macsec_netdev_addr_lock_key;
+ static int macsec_dev_init(struct net_device *dev)
+-- 
+2.1.4
+
diff --git a/patches/bugfix/all/macsec-dynamically-allocate-space-for-sglist.patch b/patches/bugfix/all/macsec-dynamically-allocate-space-for-sglist.patch
new file mode 100644 (file)
index 0000000..da947b7
--- /dev/null
@@ -0,0 +1,117 @@
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Tue, 25 Apr 2017 19:08:18 +0200
+Subject: macsec: dynamically allocate space for sglist
+Origin: https://git.kernel.org/linus/5294b83086cc1c35b4efeca03644cf9d12282e5b
+
+We call skb_cow_data, which is good anyway to ensure we can actually
+modify the skb as such (another error from prior). Now that we have the
+number of fragments required, we can safely allocate exactly that amount
+of memory.
+
+Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver")
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Acked-by: Sabrina Dubroca <sd@queasysnail.net>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/macsec.c | 29 ++++++++++++++++++++++-------
+ 1 file changed, 22 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
+index dbab05a..49ce4e9 100644
+--- a/drivers/net/macsec.c
++++ b/drivers/net/macsec.c
+@@ -617,7 +617,8 @@ static void macsec_encrypt_done(struct crypto_async_request *base, int err)
+ static struct aead_request *macsec_alloc_req(struct crypto_aead *tfm,
+                                            unsigned char **iv,
+-                                           struct scatterlist **sg)
++                                           struct scatterlist **sg,
++                                           int num_frags)
+ {
+       size_t size, iv_offset, sg_offset;
+       struct aead_request *req;
+@@ -629,7 +630,7 @@ static struct aead_request *macsec_alloc_req(struct crypto_aead *tfm,
+       size = ALIGN(size, __alignof__(struct scatterlist));
+       sg_offset = size;
+-      size += sizeof(struct scatterlist) * (MAX_SKB_FRAGS + 1);
++      size += sizeof(struct scatterlist) * num_frags;
+       tmp = kmalloc(size, GFP_ATOMIC);
+       if (!tmp)
+@@ -649,6 +650,7 @@ static struct sk_buff *macsec_encrypt(struct sk_buff *skb,
+ {
+       int ret;
+       struct scatterlist *sg;
++      struct sk_buff *trailer;
+       unsigned char *iv;
+       struct ethhdr *eth;
+       struct macsec_eth_header *hh;
+@@ -723,7 +725,14 @@ static struct sk_buff *macsec_encrypt(struct sk_buff *skb,
+               return ERR_PTR(-EINVAL);
+       }
+-      req = macsec_alloc_req(tx_sa->key.tfm, &iv, &sg);
++      ret = skb_cow_data(skb, 0, &trailer);
++      if (unlikely(ret < 0)) {
++              macsec_txsa_put(tx_sa);
++              kfree_skb(skb);
++              return ERR_PTR(ret);
++      }
++
++      req = macsec_alloc_req(tx_sa->key.tfm, &iv, &sg, ret);
+       if (!req) {
+               macsec_txsa_put(tx_sa);
+               kfree_skb(skb);
+@@ -732,7 +741,7 @@ static struct sk_buff *macsec_encrypt(struct sk_buff *skb,
+       macsec_fill_iv(iv, secy->sci, pn);
+-      sg_init_table(sg, MAX_SKB_FRAGS + 1);
++      sg_init_table(sg, ret);
+       skb_to_sgvec(skb, sg, 0, skb->len);
+       if (tx_sc->encrypt) {
+@@ -917,6 +926,7 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb,
+ {
+       int ret;
+       struct scatterlist *sg;
++      struct sk_buff *trailer;
+       unsigned char *iv;
+       struct aead_request *req;
+       struct macsec_eth_header *hdr;
+@@ -927,7 +937,12 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb,
+       if (!skb)
+               return ERR_PTR(-ENOMEM);
+-      req = macsec_alloc_req(rx_sa->key.tfm, &iv, &sg);
++      ret = skb_cow_data(skb, 0, &trailer);
++      if (unlikely(ret < 0)) {
++              kfree_skb(skb);
++              return ERR_PTR(ret);
++      }
++      req = macsec_alloc_req(rx_sa->key.tfm, &iv, &sg, ret);
+       if (!req) {
+               kfree_skb(skb);
+               return ERR_PTR(-ENOMEM);
+@@ -936,7 +951,7 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb,
+       hdr = (struct macsec_eth_header *)skb->data;
+       macsec_fill_iv(iv, sci, ntohl(hdr->packet_number));
+-      sg_init_table(sg, MAX_SKB_FRAGS + 1);
++      sg_init_table(sg, ret);
+       skb_to_sgvec(skb, sg, 0, skb->len);
+       if (hdr->tci_an & MACSEC_TCI_E) {
+@@ -2716,7 +2731,7 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
+ }
+ #define MACSEC_FEATURES \
+-      (NETIF_F_SG | NETIF_F_HIGHDMA)
++      (NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
+ static struct lock_class_key macsec_netdev_addr_lock_key;
+ static int macsec_dev_init(struct net_device *dev)
+-- 
+2.1.4
+
diff --git a/patches/bugfix/all/media-dvb-usb-dibusb-mc-common-add-module_license.patch b/patches/bugfix/all/media-dvb-usb-dibusb-mc-common-add-module_license.patch
new file mode 100644 (file)
index 0000000..befac5d
--- /dev/null
@@ -0,0 +1,29 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 17 Feb 2017 02:51:21 +0000
+Subject: [media] dvb-usb-dibusb-mc-common: Add MODULE_LICENSE
+Bug-Debian: https://bugs.debian.org/853110
+Forwarded: https://patchwork.kernel.org/patch/9580907/
+
+dvb-usb-dibusb-mc-common is licensed under GPLv2, and if we don't say
+so then it won't even load since it needs a GPL-only symbol.
+
+Reported-by: Dominique Dumont <dod@debian.org>
+References: https://bugs.debian.org/853110
+Cc: stable@vger.kernel.org # 4.9+
+Fixes: e91455a1495a ("[media] dvb-usb: split out common parts of dibusb")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/media/usb/dvb-usb/dibusb-mc-common.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/media/usb/dvb-usb/dibusb-mc-common.c
++++ b/drivers/media/usb/dvb-usb/dibusb-mc-common.c
+@@ -12,6 +12,8 @@
+ #include <linux/kconfig.h>
+ #include "dibusb.h"
++MODULE_LICENSE("GPL");
++
+ /* 3000MC/P stuff */
+ // Config Adjacent channels  Perf -cal22
+ static struct dibx000_agc_config dib3000p_mt2060_agc_config = {
diff --git a/patches/bugfix/all/module-disable-matching-missing-version-crc.patch b/patches/bugfix/all/module-disable-matching-missing-version-crc.patch
new file mode 100644 (file)
index 0000000..5657898
--- /dev/null
@@ -0,0 +1,23 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 02 Dec 2016 23:06:18 +0000
+Subject: module: Disable matching missing version CRC
+Forwarded: not-needed
+
+This partly reverts commit cd3caefb4663e3811d37cc2afad3cce642d60061.
+We want to fail closed if a symbol version CRC is missing, as the
+alternative may allow subverting module signing.
+---
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -1301,9 +1301,8 @@ static int check_version(Elf_Shdr *sechd
+               goto bad_version;
+       }
+-      /* Broken toolchain. Warn once, then let it go.. */
+-      pr_warn_once("%s: no symbol version for %s\n", mod->name, symname);
+-      return 1;
++      pr_warn("%s: no symbol version for %s\n", mod->name, symname);
++      return 0;
+ bad_version:
+       pr_warn("%s: disagrees about version of symbol %s\n",
diff --git a/patches/bugfix/all/net-packet-fix-overflow-in-check-for-tp_frame_nr.patch b/patches/bugfix/all/net-packet-fix-overflow-in-check-for-tp_frame_nr.patch
new file mode 100644 (file)
index 0000000..1ca2d19
--- /dev/null
@@ -0,0 +1,32 @@
+From: Andrey Konovalov <andreyknvl@google.com>
+Date: Wed, 29 Mar 2017 16:11:21 +0200
+Subject: net/packet: fix overflow in check for tp_frame_nr
+Origin: https://git.kernel.org/linus/8f8d28e4d6d815a391285e121c3a53a0b6cb9e7b
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-7308
+
+When calculating rb->frames_per_block * req->tp_block_nr the result
+can overflow.
+
+Add a check that tp_block_size * tp_block_nr <= UINT_MAX.
+
+Since frames_per_block <= tp_block_size, the expression would
+never overflow.
+
+Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
+Acked-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ net/packet/af_packet.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -4247,6 +4247,8 @@ static int packet_set_ring(struct sock *
+               rb->frames_per_block = req->tp_block_size / req->tp_frame_size;
+               if (unlikely(rb->frames_per_block == 0))
+                       goto out;
++              if (unlikely(req->tp_block_size > UINT_MAX / req->tp_block_nr))
++                      goto out;
+               if (unlikely((rb->frames_per_block * req->tp_block_nr) !=
+                                       req->tp_frame_nr))
+                       goto out;
diff --git a/patches/bugfix/all/net-packet-fix-overflow-in-check-for-tp_reserve.patch b/patches/bugfix/all/net-packet-fix-overflow-in-check-for-tp_reserve.patch
new file mode 100644 (file)
index 0000000..267e16c
--- /dev/null
@@ -0,0 +1,28 @@
+From: Andrey Konovalov <andreyknvl@google.com>
+Date: Wed, 29 Mar 2017 16:11:22 +0200
+Subject: net/packet: fix overflow in check for tp_reserve
+Origin: https://git.kernel.org/linus/bcc5364bdcfe131e6379363f089e7b4108d35b70
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-7308
+
+When calculating po->tp_hdrlen + po->tp_reserve the result can overflow.
+
+Fix by checking that tp_reserve <= INT_MAX on assign.
+
+Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
+Acked-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ net/packet/af_packet.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -3702,6 +3702,8 @@ packet_setsockopt(struct socket *sock, i
+                       return -EBUSY;
+               if (copy_from_user(&val, optval, sizeof(val)))
+                       return -EFAULT;
++              if (val > INT_MAX)
++                      return -EINVAL;
+               po->tp_reserve = val;
+               return 0;
+       }
diff --git a/patches/bugfix/all/nfsd-check-for-oversized-NFSv2-v3-arguments.patch b/patches/bugfix/all/nfsd-check-for-oversized-NFSv2-v3-arguments.patch
new file mode 100644 (file)
index 0000000..1c12edf
--- /dev/null
@@ -0,0 +1,104 @@
+From: "J. Bruce Fields" <bfields@redhat.com>
+Date: Fri, 21 Apr 2017 16:10:18 -0400
+Subject: nfsd: check for oversized NFSv2/v3 arguments
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Origin: https://git.kernel.org/linus/e6838a29ecb484c97e4efef9429643b9851fba6e
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-7645
+
+A client can append random data to the end of an NFSv2 or NFSv3 RPC call
+without our complaining; we'll just stop parsing at the end of the
+expected data and ignore the rest.
+
+Encoded arguments and replies are stored together in an array of pages,
+and if a call is too large it could leave inadequate space for the
+reply.  This is normally OK because NFS RPC's typically have either
+short arguments and long replies (like READ) or long arguments and short
+replies (like WRITE).  But a client that sends an incorrectly long reply
+can violate those assumptions.  This was observed to cause crashes.
+
+Also, several operations increment rq_next_page in the decode routine
+before checking the argument size, which can leave rq_next_page pointing
+well past the end of the page array, causing trouble later in
+svc_free_pages.
+
+So, following a suggestion from Neil Brown, add a central check to
+enforce our expectation that no NFSv2/v3 call has both a large call and
+a large reply.
+
+As followup we may also want to rewrite the encoding routines to check
+more carefully that they aren't running off the end of the page array.
+
+We may also consider rejecting calls that have any extra garbage
+appended.  That would be safer, and within our rights by spec, but given
+the age of our server and the NFS protocol, and the fact that we've
+never enforced this before, we may need to balance that against the
+possibility of breaking some oddball client.
+
+Reported-by: Tuomas Haanpää <thaan@synopsys.com>
+Reported-by: Ari Kauppi <ari@synopsys.com>
+Cc: stable@vger.kernel.org
+Reviewed-by: NeilBrown <neilb@suse.com>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+---
+ fs/nfsd/nfssvc.c | 36 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 36 insertions(+)
+
+diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
+index 31e1f95..59979f0 100644
+--- a/fs/nfsd/nfssvc.c
++++ b/fs/nfsd/nfssvc.c
+@@ -747,6 +747,37 @@ static __be32 map_new_errors(u32 vers, __be32 nfserr)
+       return nfserr;
+ }
++/*
++ * A write procedure can have a large argument, and a read procedure can
++ * have a large reply, but no NFSv2 or NFSv3 procedure has argument and
++ * reply that can both be larger than a page.  The xdr code has taken
++ * advantage of this assumption to be a sloppy about bounds checking in
++ * some cases.  Pending a rewrite of the NFSv2/v3 xdr code to fix that
++ * problem, we enforce these assumptions here:
++ */
++static bool nfs_request_too_big(struct svc_rqst *rqstp,
++                              struct svc_procedure *proc)
++{
++      /*
++       * The ACL code has more careful bounds-checking and is not
++       * susceptible to this problem:
++       */
++      if (rqstp->rq_prog != NFS_PROGRAM)
++              return false;
++      /*
++       * Ditto NFSv4 (which can in theory have argument and reply both
++       * more than a page):
++       */
++      if (rqstp->rq_vers >= 4)
++              return false;
++      /* The reply will be small, we're OK: */
++      if (proc->pc_xdrressize > 0 &&
++          proc->pc_xdrressize < XDR_QUADLEN(PAGE_SIZE))
++              return false;
++
++      return rqstp->rq_arg.len > PAGE_SIZE;
++}
++
+ int
+ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
+ {
+@@ -759,6 +790,11 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
+                               rqstp->rq_vers, rqstp->rq_proc);
+       proc = rqstp->rq_procinfo;
++      if (nfs_request_too_big(rqstp, proc)) {
++              dprintk("nfsd: NFSv%d argument too large\n", rqstp->rq_vers);
++              *statp = rpc_garbage_args;
++              return 1;
++      }
+       /*
+        * Give the xdr decoder a chance to change this if it wants
+        * (necessary in the NFSv4.0 compound case)
+-- 
+2.1.4
+
diff --git a/patches/bugfix/all/nfsd-stricter-decoding-of-write-like-NFSv2-v3-ops.patch b/patches/bugfix/all/nfsd-stricter-decoding-of-write-like-NFSv2-v3-ops.patch
new file mode 100644 (file)
index 0000000..33415b6
--- /dev/null
@@ -0,0 +1,63 @@
+From: "J. Bruce Fields" <bfields@redhat.com>
+Date: Fri, 21 Apr 2017 15:26:30 -0400
+Subject: nfsd: stricter decoding of write-like NFSv2/v3 ops
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Origin: https://git.kernel.org/linus/13bf9fbff0e5e099e2b6f003a0ab8ae145436309
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-7895
+
+The NFSv2/v3 code does not systematically check whether we decode past
+the end of the buffer.  This generally appears to be harmless, but there
+are a few places where we do arithmetic on the pointers involved and
+don't account for the possibility that a length could be negative.  Add
+checks to catch these.
+
+Reported-by: Tuomas Haanpää <thaan@synopsys.com>
+Reported-by: Ari Kauppi <ari@synopsys.com>
+Reviewed-by: NeilBrown <neilb@suse.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+---
+ fs/nfsd/nfs3xdr.c | 4 ++++
+ fs/nfsd/nfsxdr.c  | 2 ++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
+index d18cfdd..4523346 100644
+--- a/fs/nfsd/nfs3xdr.c
++++ b/fs/nfsd/nfs3xdr.c
+@@ -369,6 +369,8 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+       args->count = ntohl(*p++);
+       args->stable = ntohl(*p++);
+       len = args->len = ntohl(*p++);
++      if ((void *)p > head->iov_base + head->iov_len)
++              return 0;
+       /*
+        * The count must equal the amount of data passed.
+        */
+@@ -472,6 +474,8 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
+       /* first copy and check from the first page */
+       old = (char*)p;
+       vec = &rqstp->rq_arg.head[0];
++      if ((void *)old > vec->iov_base + vec->iov_len)
++              return 0;
+       avail = vec->iov_len - (old - (char*)vec->iov_base);
+       while (len && avail && *old) {
+               *new++ = *old++;
+diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c
+index 59bd88a..de07ff6 100644
+--- a/fs/nfsd/nfsxdr.c
++++ b/fs/nfsd/nfsxdr.c
+@@ -302,6 +302,8 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+        * bytes.
+        */
+       hdr = (void*)p - head->iov_base;
++      if (hdr > head->iov_len)
++              return 0;
+       dlen = head->iov_len + rqstp->rq_arg.page_len - hdr;
+       /*
+-- 
+2.1.4
+
diff --git a/patches/bugfix/all/nfsd4-minor-NFSv2-v3-write-decoding-cleanup.patch b/patches/bugfix/all/nfsd4-minor-NFSv2-v3-write-decoding-cleanup.patch
new file mode 100644 (file)
index 0000000..7b7d9f5
--- /dev/null
@@ -0,0 +1,84 @@
+From: "J. Bruce Fields" <bfields@redhat.com>
+Date: Tue, 25 Apr 2017 16:21:34 -0400
+Subject: nfsd4: minor NFSv2/v3 write decoding cleanup
+Origin: https://git.kernel.org/linus/db44bac41bbfc0c0d9dd943092d8bded3c9db19b
+
+Use a couple shortcuts that will simplify a following bugfix.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+---
+ fs/nfsd/nfs3xdr.c | 9 +++++----
+ fs/nfsd/nfsxdr.c  | 8 ++++----
+ 2 files changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
+index dba2ff8..d18cfdd 100644
+--- a/fs/nfsd/nfs3xdr.c
++++ b/fs/nfsd/nfs3xdr.c
+@@ -358,6 +358,8 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+ {
+       unsigned int len, v, hdr, dlen;
+       u32 max_blocksize = svc_max_payload(rqstp);
++      struct kvec *head = rqstp->rq_arg.head;
++      struct kvec *tail = rqstp->rq_arg.tail;
+       p = decode_fh(p, &args->fh);
+       if (!p)
+@@ -377,9 +379,8 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+        * Check to make sure that we got the right number of
+        * bytes.
+        */
+-      hdr = (void*)p - rqstp->rq_arg.head[0].iov_base;
+-      dlen = rqstp->rq_arg.head[0].iov_len + rqstp->rq_arg.page_len
+-              + rqstp->rq_arg.tail[0].iov_len - hdr;
++      hdr = (void*)p - head->iov_base;
++      dlen = head->iov_len + rqstp->rq_arg.page_len + tail->iov_len - hdr;
+       /*
+        * Round the length of the data which was specified up to
+        * the next multiple of XDR units and then compare that
+@@ -396,7 +397,7 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+               len = args->len = max_blocksize;
+       }
+       rqstp->rq_vec[0].iov_base = (void*)p;
+-      rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - hdr;
++      rqstp->rq_vec[0].iov_len = head->iov_len - hdr;
+       v = 0;
+       while (len > rqstp->rq_vec[v].iov_len) {
+               len -= rqstp->rq_vec[v].iov_len;
+diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c
+index 41b468a..59bd88a 100644
+--- a/fs/nfsd/nfsxdr.c
++++ b/fs/nfsd/nfsxdr.c
+@@ -280,6 +280,7 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+                                       struct nfsd_writeargs *args)
+ {
+       unsigned int len, hdr, dlen;
++      struct kvec *head = rqstp->rq_arg.head;
+       int v;
+       p = decode_fh(p, &args->fh);
+@@ -300,9 +301,8 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+        * Check to make sure that we got the right number of
+        * bytes.
+        */
+-      hdr = (void*)p - rqstp->rq_arg.head[0].iov_base;
+-      dlen = rqstp->rq_arg.head[0].iov_len + rqstp->rq_arg.page_len
+-              - hdr;
++      hdr = (void*)p - head->iov_base;
++      dlen = head->iov_len + rqstp->rq_arg.page_len - hdr;
+       /*
+        * Round the length of the data which was specified up to
+@@ -316,7 +316,7 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+               return 0;
+       rqstp->rq_vec[0].iov_base = (void*)p;
+-      rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - hdr;
++      rqstp->rq_vec[0].iov_len = head->iov_len - hdr;
+       v = 0;
+       while (len > rqstp->rq_vec[v].iov_len) {
+               len -= rqstp->rq_vec[v].iov_len;
+-- 
+2.1.4
+
diff --git a/patches/bugfix/all/partially-revert-usb-kconfig-using-select-for-usb_co.patch b/patches/bugfix/all/partially-revert-usb-kconfig-using-select-for-usb_co.patch
new file mode 100644 (file)
index 0000000..b126826
--- /dev/null
@@ -0,0 +1,30 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Wed, 11 Jan 2017 04:30:40 +0000
+Subject: Partially revert "usb: Kconfig: using select for USB_COMMON  dependency"
+Forwarded: https://marc.info/?l=linux-usb&m=149248300414300
+
+This reverts commit cb9c1cfc86926d0e86d19c8e34f6c23458cd3478 for
+USB_LED_TRIG.  This config symbol has bool type and enables extra code
+in usb_common itself, not a separate driver.  Enabling it should not
+force usb_common to be built-in!
+
+Fixes: cb9c1cfc8692 ("usb: Kconfig: using select for USB_COMMON dependency")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/Kconfig | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
+index 644e978cbd3e..989c6208678f 100644
+--- a/drivers/usb/Kconfig
++++ b/drivers/usb/Kconfig
+@@ -152,8 +152,7 @@ source "drivers/usb/gadget/Kconfig"
+ config USB_LED_TRIG
+       bool "USB LED Triggers"
+-      depends on LEDS_CLASS && LEDS_TRIGGERS
+-      select USB_COMMON
++      depends on LEDS_CLASS && USB_COMMON && LEDS_TRIGGERS
+       help
+         This option adds LED triggers for USB host and/or gadget activity.
diff --git a/patches/bugfix/all/ping-implement-proper-locking.patch b/patches/bugfix/all/ping-implement-proper-locking.patch
new file mode 100644 (file)
index 0000000..d7b4b83
--- /dev/null
@@ -0,0 +1,54 @@
+From: Eric Dumazet <edumazet@google.com>
+Date: Fri, 24 Mar 2017 19:36:13 -0700
+Subject: ping: implement proper locking
+Origin: https://git.kernel.org/linus/43a6684519ab0a6c52024b5e25322476cabad893
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-2671
+
+We got a report of yet another bug in ping
+
+http://www.openwall.com/lists/oss-security/2017/03/24/6
+
+->disconnect() is not called with socket lock held.
+
+Fix this by acquiring ping rwlock earlier.
+
+Thanks to Daniel, Alexander and Andrey for letting us know this problem.
+
+Fixes: c319b4d76b9e ("net: ipv4: add IPPROTO_ICMP socket kind")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Reported-by: Daniel Jiang <danieljiang0415@gmail.com>
+Reported-by: Solar Designer <solar@openwall.com>
+Reported-by: Andrey Konovalov <andreyknvl@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ net/ipv4/ping.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
+index 2af6244b83e2..ccfbce13a633 100644
+--- a/net/ipv4/ping.c
++++ b/net/ipv4/ping.c
+@@ -156,17 +156,18 @@ int ping_hash(struct sock *sk)
+ void ping_unhash(struct sock *sk)
+ {
+       struct inet_sock *isk = inet_sk(sk);
++
+       pr_debug("ping_unhash(isk=%p,isk->num=%u)\n", isk, isk->inet_num);
++      write_lock_bh(&ping_table.lock);
+       if (sk_hashed(sk)) {
+-              write_lock_bh(&ping_table.lock);
+               hlist_nulls_del(&sk->sk_nulls_node);
+               sk_nulls_node_init(&sk->sk_nulls_node);
+               sock_put(sk);
+               isk->inet_num = 0;
+               isk->inet_sport = 0;
+               sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
+-              write_unlock_bh(&ping_table.lock);
+       }
++      write_unlock_bh(&ping_table.lock);
+ }
+ EXPORT_SYMBOL_GPL(ping_unhash);
+-- 
+2.11.0
+
diff --git a/patches/bugfix/all/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch b/patches/bugfix/all/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch
new file mode 100644 (file)
index 0000000..225a2e3
--- /dev/null
@@ -0,0 +1,80 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: radeon: Firmware is required for DRM and KMS on R600 onward
+Date: Tue, 08 Jan 2013 03:25:52 +0000
+Bug-Debian: https://bugs.debian.org/607194
+Bug-Debian: https://bugs.debian.org/607471
+Bug-Debian: https://bugs.debian.org/610851
+Bug-Debian: https://bugs.debian.org/627497
+Bug-Debian: https://bugs.debian.org/632212
+Bug-Debian: https://bugs.debian.org/637943
+Bug-Debian: https://bugs.debian.org/649448
+Bug-Debian: https://bugs.debian.org/697229
+Forwarded: no
+
+radeon requires firmware/microcode for the GPU in all chips, but for
+newer chips (apparently R600 'Evergreen' onward) it also expects
+firmware for the memory controller and other sub-blocks.
+
+radeon attempts to gracefully fall back and disable some features if
+the firmware is not available, but becomes unstable - the framebuffer
+and/or system memory may be corrupted, or the display may stay black.
+
+Therefore, perform a basic check for the existence of
+/lib/firmware/radeon when a device is probed, and abort if it is
+missing, except for the pre-R600 case.
+
+---
+--- a/drivers/gpu/drm/radeon/radeon_drv.c
++++ b/drivers/gpu/drm/radeon/radeon_drv.c
+@@ -43,6 +43,8 @@
+ #include "drm_crtc_helper.h"
+ #include "radeon_kfd.h"
++#include <linux/namei.h>
++#include <linux/path.h>
+ /*
+  * KMS wrapper.
+@@ -309,6 +311,29 @@ static struct drm_driver kms_driver;
+ bool radeon_device_is_virtual(void);
++/* Test that /lib/firmware/radeon is a directory (or symlink to a
++ * directory).  We could try to match the udev search path, but let's
++ * assume people take the easy route and install
++ * firmware-linux-nonfree.
++ */
++static bool radeon_firmware_installed(void)
++{
++#if IS_BUILTIN(CONFIG_DRM_RADEON)
++      /* It may be too early to tell.  Assume it's there. */
++      return true;
++#else
++      struct path path;
++
++      if (kern_path("/lib/firmware/radeon", LOOKUP_DIRECTORY | LOOKUP_FOLLOW,
++                    &path) == 0) {
++              path_put(&path);
++              return true;
++      }
++
++      return false;
++#endif
++}
++
+ static int radeon_kick_out_firmware_fb(struct pci_dev *pdev)
+ {
+       struct apertures_struct *ap;
+@@ -346,6 +371,12 @@ static int radeon_pci_probe(struct pci_d
+       if (vga_switcheroo_client_probe_defer(pdev))
+               return -EPROBE_DEFER;
++      if ((ent->driver_data & RADEON_FAMILY_MASK) >= CHIP_R600 &&
++          !radeon_firmware_installed()) {
++              DRM_ERROR("radeon kernel modesetting for R600 or later requires firmware-amd-graphics.\n");
++              return -ENODEV;
++      }
++
+       /* Get rid of things like offb */
+       ret = radeon_kick_out_firmware_fb(pdev);
+       if (ret)
diff --git a/patches/bugfix/all/tools-build-remove-bpf-run-time-check-at-build-time.patch b/patches/bugfix/all/tools-build-remove-bpf-run-time-check-at-build-time.patch
new file mode 100644 (file)
index 0000000..9d07fbc
--- /dev/null
@@ -0,0 +1,34 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 21 Feb 2016 15:33:15 +0000
+Subject: tools/build: Remove bpf() run-time check at build time
+Forwarded: no
+
+It is not correct to test that a syscall works on the build system's
+kernel.  We might be building on an earlier kernel version or with
+security restrictions that block bpf().
+
+Also fix the test for whether __NR_bpf is defined.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/build/feature/test-bpf.c
++++ b/tools/build/feature/test-bpf.c
+@@ -9,6 +9,7 @@
+ #  define __NR_bpf 321
+ # elif defined(__aarch64__)
+ #  define __NR_bpf 280
++# else
+ #  error __NR_bpf not defined. libbpf does not support your arch.
+ # endif
+ #endif
+@@ -27,9 +28,5 @@ int main(void)
+       attr.log_level = 0;
+       attr.kern_version = 0;
+-      /*
+-       * Test existence of __NR_bpf and BPF_PROG_LOAD.
+-       * This call should fail if we run the testcase.
+-       */
+-      return syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr));
++      return 0;
+ }
diff --git a/patches/bugfix/all/tools-lib-lockdep-use-ldflags.patch b/patches/bugfix/all/tools-lib-lockdep-use-ldflags.patch
new file mode 100644 (file)
index 0000000..dc3dd7f
--- /dev/null
@@ -0,0 +1,18 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 25 Sep 2015 21:36:29 +0100
+Subject: tools/lib/lockdep: Use LDFLAGS
+Forwarded: no
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/lib/lockdep/Makefile
++++ b/tools/lib/lockdep/Makefile
+@@ -100,7 +100,7 @@ include $(srctree)/tools/build/Makefile.
+ do_compile_shared_library =                   \
+       ($(print_shared_lib_compile)            \
+-      $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='$(@F)';$(shell ln -sf $(@F) $(@D)/liblockdep.so))
++      $(CC) $(LDFLAGS) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='$(@F)';$(shell ln -sf $(@F) $(@D)/liblockdep.so))
+ do_build_static_lib =                         \
+       ($(print_static_lib_build)              \
diff --git a/patches/bugfix/all/tools-lib-traceevent-fix-use-of-uninitialized-variables.patch b/patches/bugfix/all/tools-lib-traceevent-fix-use-of-uninitialized-variables.patch
new file mode 100644 (file)
index 0000000..a3564d7
--- /dev/null
@@ -0,0 +1,70 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 20 Mar 2016 21:09:02 +0000
+Subject: tools lib traceevent: Fix use of uninitialized variables
+Forwarded: no
+
+Fix a number of correct warnings from gcc:
+
+> plugin_function.c:133:6: warning: 'index' may be used uninitialized in this function [-Wmaybe-uninitialized]
+>   int index;
+>       ^
+
+'index' is initialized only if indentation is wanted.  Move the
+printing of indentation using 'index' into the same if-statement.
+
+> kbuffer-parse.c:339:27: warning: 'length' may be used uninitialized in this function [-Wmaybe-uninitialized]
+>   kbuf->next = kbuf->index + length;
+>                            ^
+> kbuffer-parse.c:297:15: note: 'length' was declared here
+>   unsigned int length;
+>                ^
+
+'length' is not initialized when handling an OLD_RINGBUF_TYPE_TIME_EXTEND
+record.  Based on what trace-cmd does, set length = 0 in this case.
+
+> kbuffer-parse.c: In function 'kbuffer_read_at_offset':
+> kbuffer-parse.c:632:9: warning: 'data' may be used uninitialized in this function [-Wmaybe-uninitialized]
+>   return data;
+>          ^
+
+'data' is not initialized if the offset is too small.  Initialize it
+to NULL so that the behaviour is the same as when the offset is too
+large.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/lib/traceevent/kbuffer-parse.c
++++ b/tools/lib/traceevent/kbuffer-parse.c
+@@ -314,6 +314,7 @@ static unsigned int old_update_pointers(
+               extend <<= TS_SHIFT;
+               extend += delta;
+               delta = extend;
++              length = 0;
+               ptr += 4;
+               break;
+@@ -613,7 +614,7 @@ unsigned long long kbuffer_timestamp(str
+ void *kbuffer_read_at_offset(struct kbuffer *kbuf, int offset,
+                            unsigned long long *ts)
+ {
+-      void *data;
++      void *data = NULL;
+       if (offset < kbuf->start)
+               offset = 0;
+--- a/tools/lib/traceevent/plugin_function.c
++++ b/tools/lib/traceevent/plugin_function.c
+@@ -142,10 +142,10 @@ static int function_handler(struct trace
+       parent = pevent_find_function(pevent, pfunction);
+-      if (parent && ftrace_indent->set)
++      if (parent && ftrace_indent->set) {
+               index = add_and_get_index(parent, func, record->cpu);
+-
+-      trace_seq_printf(s, "%*s", index*3, "");
++              trace_seq_printf(s, "%*s", index*3, "");
++      }
+       if (func)
+               trace_seq_printf(s, "%s", func);
diff --git a/patches/bugfix/all/tools-lib-traceevent-use-ldflags.patch b/patches/bugfix/all/tools-lib-traceevent-use-ldflags.patch
new file mode 100644 (file)
index 0000000..fe0248c
--- /dev/null
@@ -0,0 +1,27 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 25 Sep 2015 21:26:48 +0100
+Subject: tools/lib/traceevent: Use LDFLAGS
+Forwarded: no
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/lib/traceevent/Makefile
++++ b/tools/lib/traceevent/Makefile
+@@ -172,7 +172,7 @@ $(TE_IN): force
+       $(Q)$(MAKE) $(build)=libtraceevent
+ $(OUTPUT)libtraceevent.so: $(TE_IN)
+-      $(QUIET_LINK)$(CC) --shared $^ -o $@
++      $(QUIET_LINK)$(CC) $(LDFLAGS) --shared $^ -o $@
+ $(OUTPUT)libtraceevent.a: $(TE_IN)
+       $(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
+@@ -189,7 +189,7 @@ $(PLUGINS_IN): force
+       $(Q)$(MAKE) $(build)=$(plugin_obj)
+ $(OUTPUT)%.so: $(OUTPUT)%-in.o
+-      $(QUIET_LINK)$(CC) $(CFLAGS) -shared -nostartfiles -o $@ $^
++      $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -shared -nostartfiles -o $@ $^
+ define make_version.h
+   (echo '/* This file is automatically generated. Do not modify. */';         \
diff --git a/patches/bugfix/all/tools-perf-man-date.patch b/patches/bugfix/all/tools-perf-man-date.patch
new file mode 100644 (file)
index 0000000..00eb466
--- /dev/null
@@ -0,0 +1,33 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Mon, 13 Jul 2015 20:29:20 +0100
+Subject: perf tools: Use $KBUILD_BUILD_TIMESTAMP as man page date
+Forwarded: http://mid.gmane.org/20160517132809.GE7555@decadent.org.uk
+    
+This allows man pages to be built reproducibly.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/perf/Documentation/Makefile
++++ b/tools/perf/Documentation/Makefile
+@@ -120,6 +120,9 @@ endif
+ ifdef DOCBOOK_SUPPRESS_SP
+ XMLTO_EXTRA += -m manpage-suppress-sp.xsl
+ endif
++ifdef KBUILD_BUILD_TIMESTAMP
++ASCIIDOC_EXTRA += -a revdate=$(shell date -u -d '$(KBUILD_BUILD_TIMESTAMP)' +%Y-%m-%d)
++endif
+ SHELL_PATH ?= $(SHELL)
+ # Shell quote;
+--- a/tools/perf/Documentation/asciidoc.conf
++++ b/tools/perf/Documentation/asciidoc.conf
+@@ -71,6 +71,9 @@ ifdef::backend-docbook[]
+ [header]
+ template::[header-declarations]
+ <refentry>
++<refentryinfo>
++template::[docinfo]
++</refentryinfo>
+ <refmeta>
+ <refentrytitle>{mantitle}</refentrytitle>
+ <manvolnum>{manvolnum}</manvolnum>
diff --git a/patches/bugfix/all/tools-perf-remove-shebangs.patch b/patches/bugfix/all/tools-perf-remove-shebangs.patch
new file mode 100644 (file)
index 0000000..07953ca
--- /dev/null
@@ -0,0 +1,39 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 25 Sep 2015 20:09:23 +0100
+Subject: tools/perf: Remove shebang lines from perf scripts
+Forwarded: no
+
+perf scripts need to be invoked through perf, not directly through
+perl (or other language interpreter).  So including shebang lines in
+them is useless and possibly misleading.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/perf/scripts/perl/rw-by-file.pl
++++ b/tools/perf/scripts/perl/rw-by-file.pl
+@@ -1,4 +1,3 @@
+-#!/usr/bin/perl -w
+ # (c) 2009, Tom Zanussi <tzanussi@gmail.com>
+ # Licensed under the terms of the GNU GPL License version 2
+--- a/tools/perf/scripts/perl/rw-by-pid.pl
++++ b/tools/perf/scripts/perl/rw-by-pid.pl
+@@ -1,4 +1,3 @@
+-#!/usr/bin/perl -w
+ # (c) 2009, Tom Zanussi <tzanussi@gmail.com>
+ # Licensed under the terms of the GNU GPL License version 2
+--- a/tools/perf/scripts/perl/rwtop.pl
++++ b/tools/perf/scripts/perl/rwtop.pl
+@@ -1,4 +1,3 @@
+-#!/usr/bin/perl -w
+ # (c) 2010, Tom Zanussi <tzanussi@gmail.com>
+ # Licensed under the terms of the GNU GPL License version 2
+--- a/tools/perf/scripts/perl/wakeup-latency.pl
++++ b/tools/perf/scripts/perl/wakeup-latency.pl
+@@ -1,4 +1,3 @@
+-#!/usr/bin/perl -w
+ # (c) 2009, Tom Zanussi <tzanussi@gmail.com>
+ # Licensed under the terms of the GNU GPL License version 2
diff --git a/patches/bugfix/all/usbip-document-tcp-wrappers.patch b/patches/bugfix/all/usbip-document-tcp-wrappers.patch
new file mode 100644 (file)
index 0000000..d9d7b30
--- /dev/null
@@ -0,0 +1,29 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 24 Jun 2012 02:51:39 +0100
+Subject: usbip: Document TCP wrappers
+Forwarded: no
+
+Add references to TCP wrappers configuration in the manual page.
+
+--- a/tools/usb/usbip/doc/usbipd.8
++++ b/tools/usb/usbip/doc/usbipd.8
+@@ -14,7 +14,8 @@ Devices have to explicitly be exported u
+ before usbipd makes them available to other hosts.
+ The daemon accepts connections from USB/IP clients
+-on TCP port 3240 by default.
++on TCP port 3240 by default.  The clients authorised to connect may be
++configured as documented in hosts_access(5).
+ .SH OPTIONS
+ .HP
+@@ -69,7 +70,8 @@ Show version.
+ .B usbipd
+ offers no authentication or authorization for USB/IP. Any
+-USB/IP client can connect and use exported devices.
++USB/IP client running on an authorised host can connect and
++use exported devices.
+ .SH EXAMPLES
diff --git a/patches/bugfix/alpha/alpha-uapi-add-support-for-__sane_userspace_types__.patch b/patches/bugfix/alpha/alpha-uapi-add-support-for-__sane_userspace_types__.patch
new file mode 100644 (file)
index 0000000..3d6a877
--- /dev/null
@@ -0,0 +1,56 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 29 Sep 2015 02:55:06 +0100
+Subject: [PATCH] alpha: uapi: Add support for __SANE_USERSPACE_TYPES__
+Forwarded: http://mid.gmane.org/1443659755.2730.14.camel@decadent.org.uk
+
+This fixes compiler errors in perf such as:
+
+tests/attr.c: In function 'store_event':
+tests/attr.c:66:27: error: format '%llu' expects argument of type 'long long unsigned int', but argument 6 has type '__u64 {aka long unsigned int}' [-Werror=format=]
+  snprintf(path, PATH_MAX, "%s/event-%d-%llu-%d", dir,
+                           ^
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Tested-by: Michael Cree <mcree@orcon.net.nz>
+Cc: stable@vger.kernel.org
+---
+ arch/alpha/include/asm/types.h      |  2 +-
+ arch/alpha/include/uapi/asm/types.h | 12 +++++++++++-
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+# diff --git a/arch/alpha/include/asm/types.h b/arch/alpha/include/asm/types.h
+# index 4cb4b6d..0bc66e1 100644
+# --- a/arch/alpha/include/asm/types.h
+# +++ b/arch/alpha/include/asm/types.h
+# @@ -1,6 +1,6 @@
+#  #ifndef _ALPHA_TYPES_H
+#  #define _ALPHA_TYPES_H
+#  
+# -#include <asm-generic/int-ll64.h>
+# +#include <uapi/asm/types.h>
+#  
+#  #endif /* _ALPHA_TYPES_H */
+diff --git a/arch/alpha/include/uapi/asm/types.h b/arch/alpha/include/uapi/asm/types.h
+index 9fd3cd4..8d1024d 100644
+--- a/arch/alpha/include/uapi/asm/types.h
++++ b/arch/alpha/include/uapi/asm/types.h
+@@ -9,8 +9,18 @@
+  * need to be careful to avoid a name clashes.
+  */
+-#ifndef __KERNEL__
++/*
++ * This is here because we used to use l64 for alpha
++ * and we don't want to impact user mode with our change to ll64
++ * in the kernel.
++ *
++ * However, some user programs are fine with this.  They can
++ * flag __SANE_USERSPACE_TYPES__ to get int-ll64.h here.
++ */
++#if !defined(__SANE_USERSPACE_TYPES__) && !defined(__KERNEL__)
+ #include <asm-generic/int-l64.h>
++#else
++#include <asm-generic/int-ll64.h>
+ #endif
+ #endif /* _UAPI_ALPHA_TYPES_H */
diff --git a/patches/bugfix/alpha/revert-alpha-move-exports-to-actual-definitions.patch b/patches/bugfix/alpha/revert-alpha-move-exports-to-actual-definitions.patch
new file mode 100644 (file)
index 0000000..aec9cb5
--- /dev/null
@@ -0,0 +1,949 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 1 Dec 2016 23:14:46 +0000
+Subject: Revert "alpha: move exports to actual definitions"
+Forwarded: not-needed
+
+This reverts commit 00fc0e0dda6286407f3854cd71a125f519a5689c because
+symbols exported from assembly don't automatically get modversions (ABI
+hashes).
+---
+ arch/alpha/include/asm/Kbuild        |   1 -
+ arch/alpha/kernel/Makefile           |   2 +-
+ arch/alpha/kernel/alpha_ksyms.c      | 102 +++++++++++++++++++++++++++++++++++
+ arch/alpha/kernel/machvec_impl.h     |   6 +--
+ arch/alpha/kernel/setup.c            |   1 -
+ arch/alpha/lib/callback_srm.S        |   5 --
+ arch/alpha/lib/checksum.c            |   3 --
+ arch/alpha/lib/clear_page.S          |   3 +-
+ arch/alpha/lib/clear_user.S          |   2 -
+ arch/alpha/lib/copy_page.S           |   3 +-
+ arch/alpha/lib/copy_user.S           |   3 --
+ arch/alpha/lib/csum_ipv6_magic.S     |   2 -
+ arch/alpha/lib/csum_partial_copy.c   |   2 -
+ arch/alpha/lib/dec_and_lock.c        |   2 -
+ arch/alpha/lib/divide.S              |   3 --
+ arch/alpha/lib/ev6-clear_page.S      |   3 +-
+ arch/alpha/lib/ev6-clear_user.S      |   3 +-
+ arch/alpha/lib/ev6-copy_page.S       |   3 +-
+ arch/alpha/lib/ev6-copy_user.S       |   3 +-
+ arch/alpha/lib/ev6-csum_ipv6_magic.S |   2 -
+ arch/alpha/lib/ev6-divide.S          |   3 --
+ arch/alpha/lib/ev6-memchr.S          |   3 +-
+ arch/alpha/lib/ev6-memcpy.S          |   3 +-
+ arch/alpha/lib/ev6-memset.S          |   7 +--
+ arch/alpha/lib/ev67-strcat.S         |   3 +-
+ arch/alpha/lib/ev67-strchr.S         |   3 +-
+ arch/alpha/lib/ev67-strlen.S         |   3 +-
+ arch/alpha/lib/ev67-strncat.S        |   3 +-
+ arch/alpha/lib/ev67-strrchr.S        |   3 +-
+ arch/alpha/lib/fpreg.c               |   7 ---
+ arch/alpha/lib/memchr.S              |   3 +-
+ arch/alpha/lib/memcpy.c              |   5 +-
+ arch/alpha/lib/memmove.S             |   3 +-
+ arch/alpha/lib/memset.S              |   7 +--
+ arch/alpha/lib/strcat.S              |   2 -
+ arch/alpha/lib/strchr.S              |   3 +-
+ arch/alpha/lib/strcpy.S              |   3 +-
+ arch/alpha/lib/strlen.S              |   3 +-
+ arch/alpha/lib/strncat.S             |   3 +-
+ arch/alpha/lib/strncpy.S             |   3 +-
+ arch/alpha/lib/strrchr.S             |   3 +-
+ 41 files changed, 131 insertions(+), 99 deletions(-)
+ create mode 100644 arch/alpha/kernel/alpha_ksyms.c
+
+diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild
+index bf8475ce85ee..ffd9cf5ec8c4 100644
+--- a/arch/alpha/include/asm/Kbuild
++++ b/arch/alpha/include/asm/Kbuild
+@@ -3,7 +3,6 @@
+ generic-y += clkdev.h
+ generic-y += cputime.h
+ generic-y += exec.h
+-generic-y += export.h
+ generic-y += irq_work.h
+ generic-y += mcs_spinlock.h
+ generic-y += mm-arch-hooks.h
+diff --git a/arch/alpha/kernel/Makefile b/arch/alpha/kernel/Makefile
+index 8ce13d7a2ad3..3ecac0106c8a 100644
+--- a/arch/alpha/kernel/Makefile
++++ b/arch/alpha/kernel/Makefile
+@@ -8,7 +8,7 @@ ccflags-y      := -Wno-sign-compare
+ obj-y    := entry.o traps.o process.o osf_sys.o irq.o \
+           irq_alpha.o signal.o setup.o ptrace.o time.o \
+-          systbls.o err_common.o io.o
++          alpha_ksyms.o systbls.o err_common.o io.o
+ obj-$(CONFIG_VGA_HOSE)        += console.o
+ obj-$(CONFIG_SMP)     += smp.o
+diff --git a/arch/alpha/kernel/alpha_ksyms.c b/arch/alpha/kernel/alpha_ksyms.c
+new file mode 100644
+index 000000000000..f4c7ab6f43b0
+--- /dev/null
++++ b/arch/alpha/kernel/alpha_ksyms.c
+@@ -0,0 +1,102 @@
++/*
++ * linux/arch/alpha/kernel/alpha_ksyms.c
++ *
++ * Export the alpha-specific functions that are needed for loadable
++ * modules.
++ */
++
++#include <linux/module.h>
++#include <asm/console.h>
++#include <asm/uaccess.h>
++#include <asm/checksum.h>
++#include <asm/fpu.h>
++#include <asm/machvec.h>
++
++#include <linux/syscalls.h>
++
++/* these are C runtime functions with special calling conventions: */
++extern void __divl (void);
++extern void __reml (void);
++extern void __divq (void);
++extern void __remq (void);
++extern void __divlu (void);
++extern void __remlu (void);
++extern void __divqu (void);
++extern void __remqu (void);
++
++EXPORT_SYMBOL(alpha_mv);
++EXPORT_SYMBOL(callback_getenv);
++EXPORT_SYMBOL(callback_setenv);
++EXPORT_SYMBOL(callback_save_env);
++
++/* platform dependent support */
++EXPORT_SYMBOL(strcat);
++EXPORT_SYMBOL(strcpy);
++EXPORT_SYMBOL(strlen);
++EXPORT_SYMBOL(strncpy);
++EXPORT_SYMBOL(strncat);
++EXPORT_SYMBOL(strchr);
++EXPORT_SYMBOL(strrchr);
++EXPORT_SYMBOL(memmove);
++EXPORT_SYMBOL(__memcpy);
++EXPORT_SYMBOL(__memset);
++EXPORT_SYMBOL(___memset);
++EXPORT_SYMBOL(__memsetw);
++EXPORT_SYMBOL(__constant_c_memset);
++EXPORT_SYMBOL(copy_page);
++EXPORT_SYMBOL(clear_page);
++
++EXPORT_SYMBOL(alpha_read_fp_reg);
++EXPORT_SYMBOL(alpha_read_fp_reg_s);
++EXPORT_SYMBOL(alpha_write_fp_reg);
++EXPORT_SYMBOL(alpha_write_fp_reg_s);
++
++/* Networking helper routines. */
++EXPORT_SYMBOL(csum_tcpudp_magic);
++EXPORT_SYMBOL(ip_compute_csum);
++EXPORT_SYMBOL(ip_fast_csum);
++EXPORT_SYMBOL(csum_partial_copy_nocheck);
++EXPORT_SYMBOL(csum_partial_copy_from_user);
++EXPORT_SYMBOL(csum_ipv6_magic);
++
++#ifdef CONFIG_MATHEMU_MODULE
++extern long (*alpha_fp_emul_imprecise)(struct pt_regs *, unsigned long);
++extern long (*alpha_fp_emul) (unsigned long pc);
++EXPORT_SYMBOL(alpha_fp_emul_imprecise);
++EXPORT_SYMBOL(alpha_fp_emul);
++#endif
++
++/*
++ * The following are specially called from the uaccess assembly stubs.
++ */
++EXPORT_SYMBOL(__copy_user);
++EXPORT_SYMBOL(__do_clear_user);
++
++/* 
++ * SMP-specific symbols.
++ */
++
++#ifdef CONFIG_SMP
++EXPORT_SYMBOL(_atomic_dec_and_lock);
++#endif /* CONFIG_SMP */
++
++/*
++ * The following are special because they're not called
++ * explicitly (the C compiler or assembler generates them in
++ * response to division operations).  Fortunately, their
++ * interface isn't gonna change any time soon now, so it's OK
++ * to leave it out of version control.
++ */
++# undef memcpy
++# undef memset
++EXPORT_SYMBOL(__divl);
++EXPORT_SYMBOL(__divlu);
++EXPORT_SYMBOL(__divq);
++EXPORT_SYMBOL(__divqu);
++EXPORT_SYMBOL(__reml);
++EXPORT_SYMBOL(__remlu);
++EXPORT_SYMBOL(__remq);
++EXPORT_SYMBOL(__remqu);
++EXPORT_SYMBOL(memcpy);
++EXPORT_SYMBOL(memset);
++EXPORT_SYMBOL(memchr);
+diff --git a/arch/alpha/kernel/machvec_impl.h b/arch/alpha/kernel/machvec_impl.h
+index b7d69604b6d2..d3398f6ab74c 100644
+--- a/arch/alpha/kernel/machvec_impl.h
++++ b/arch/alpha/kernel/machvec_impl.h
+@@ -144,11 +144,9 @@
+    else beforehand.  Fine.  We'll do it ourselves.  */
+ #if 0
+ #define ALIAS_MV(system) \
+-  struct alpha_machine_vector alpha_mv __attribute__((alias(#system "_mv"))); \
+-  EXPORT_SYMBOL(alpha_mv);
++  struct alpha_machine_vector alpha_mv __attribute__((alias(#system "_mv")));
+ #else
+ #define ALIAS_MV(system) \
+-  asm(".global alpha_mv\nalpha_mv = " #system "_mv"); \
+-  EXPORT_SYMBOL(alpha_mv);
++  asm(".global alpha_mv\nalpha_mv = " #system "_mv");
+ #endif
+ #endif /* GENERIC */
+diff --git a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c
+index 4811e54069fc..b20af76f12c1 100644
+--- a/arch/alpha/kernel/setup.c
++++ b/arch/alpha/kernel/setup.c
+@@ -115,7 +115,6 @@ unsigned long alpha_agpgart_size = DEFAULT_AGP_APER_SIZE;
+ #ifdef CONFIG_ALPHA_GENERIC
+ struct alpha_machine_vector alpha_mv;
+-EXPORT_SYMBOL(alpha_mv);
+ #endif
+ #ifndef alpha_using_srm
+diff --git a/arch/alpha/lib/callback_srm.S b/arch/alpha/lib/callback_srm.S
+index 6093addc931a..8804bec2c644 100644
+--- a/arch/alpha/lib/callback_srm.S
++++ b/arch/alpha/lib/callback_srm.S
+@@ -3,7 +3,6 @@
+  */
+ #include <asm/console.h>
+-#include <asm/export.h>
+ .text
+ #define HWRPB_CRB_OFFSET 0xc0
+@@ -93,10 +92,6 @@ CALLBACK(reset_env, CCB_RESET_ENV, 4)
+ CALLBACK(save_env, CCB_SAVE_ENV, 1)
+ CALLBACK(pswitch, CCB_PSWITCH, 3)
+ CALLBACK(bios_emul, CCB_BIOS_EMUL, 5)
+-
+-EXPORT_SYMBOL(callback_getenv)
+-EXPORT_SYMBOL(callback_setenv)
+-EXPORT_SYMBOL(callback_save_env)
+       
+ .data
+ __alpha_using_srm:            # For use by bootpheader
+diff --git a/arch/alpha/lib/checksum.c b/arch/alpha/lib/checksum.c
+index b57f8007db14..377f9e34eb97 100644
+--- a/arch/alpha/lib/checksum.c
++++ b/arch/alpha/lib/checksum.c
+@@ -48,7 +48,6 @@ __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
+               (__force u64)saddr + (__force u64)daddr +
+               (__force u64)sum + ((len + proto) << 8));
+ }
+-EXPORT_SYMBOL(csum_tcpudp_magic);
+ __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
+                         __u32 len, __u8 proto, __wsum sum)
+@@ -145,7 +144,6 @@ __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
+ {
+       return (__force __sum16)~do_csum(iph,ihl*4);
+ }
+-EXPORT_SYMBOL(ip_fast_csum);
+ /*
+  * computes the checksum of a memory block at buff, length len,
+@@ -180,4 +178,3 @@ __sum16 ip_compute_csum(const void *buff, int len)
+ {
+       return (__force __sum16)~from64to16(do_csum(buff,len));
+ }
+-EXPORT_SYMBOL(ip_compute_csum);
+diff --git a/arch/alpha/lib/clear_page.S b/arch/alpha/lib/clear_page.S
+index 263d7393c0e7..a221ae266e29 100644
+--- a/arch/alpha/lib/clear_page.S
++++ b/arch/alpha/lib/clear_page.S
+@@ -3,7 +3,7 @@
+  *
+  * Zero an entire page.
+  */
+-#include <asm/export.h>
++
+       .text
+       .align 4
+       .global clear_page
+@@ -37,4 +37,3 @@ clear_page:
+       nop
+       .end clear_page
+-      EXPORT_SYMBOL(clear_page)
+diff --git a/arch/alpha/lib/clear_user.S b/arch/alpha/lib/clear_user.S
+index bf5b931866ba..8860316c1957 100644
+--- a/arch/alpha/lib/clear_user.S
++++ b/arch/alpha/lib/clear_user.S
+@@ -24,7 +24,6 @@
+  * Clobbers:
+  *    $1,$2,$3,$4,$5,$6
+  */
+-#include <asm/export.h>
+ /* Allow an exception for an insn; exit if we get one.  */
+ #define EX(x,y...)                    \
+@@ -112,4 +111,3 @@ $exception:
+       ret     $31, ($28), 1   # .. e1 :
+       .end __do_clear_user
+-      EXPORT_SYMBOL(__do_clear_user)
+diff --git a/arch/alpha/lib/copy_page.S b/arch/alpha/lib/copy_page.S
+index 2ee0bd0508c5..9f3b97459cc6 100644
+--- a/arch/alpha/lib/copy_page.S
++++ b/arch/alpha/lib/copy_page.S
+@@ -3,7 +3,7 @@
+  *
+  * Copy an entire page.
+  */
+-#include <asm/export.h>
++
+       .text
+       .align 4
+       .global copy_page
+@@ -47,4 +47,3 @@ copy_page:
+       nop
+       .end copy_page
+-      EXPORT_SYMBOL(copy_page)
+diff --git a/arch/alpha/lib/copy_user.S b/arch/alpha/lib/copy_user.S
+index 509f62b65311..ac9c3766ba8c 100644
+--- a/arch/alpha/lib/copy_user.S
++++ b/arch/alpha/lib/copy_user.S
+@@ -26,8 +26,6 @@
+  *    $1,$2,$3,$4,$5,$6,$7
+  */
+-#include <asm/export.h>
+-
+ /* Allow an exception for an insn; exit if we get one.  */
+ #define EXI(x,y...)                   \
+       99: x,##y;                      \
+@@ -131,4 +129,3 @@ $exitout:
+       ret $31,($28),1
+       .end __copy_user
+-EXPORT_SYMBOL(__copy_user)
+diff --git a/arch/alpha/lib/csum_ipv6_magic.S b/arch/alpha/lib/csum_ipv6_magic.S
+index e74b4544b0cc..2c2acb96deb6 100644
+--- a/arch/alpha/lib/csum_ipv6_magic.S
++++ b/arch/alpha/lib/csum_ipv6_magic.S
+@@ -12,7 +12,6 @@
+  * added by Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+  */
+-#include <asm/export.h>
+       .globl csum_ipv6_magic
+       .align 4
+       .ent csum_ipv6_magic
+@@ -114,4 +113,3 @@ csum_ipv6_magic:
+       ret                     # .. e1 :
+       .end csum_ipv6_magic
+-      EXPORT_SYMBOL(csum_ipv6_magic)
+diff --git a/arch/alpha/lib/csum_partial_copy.c b/arch/alpha/lib/csum_partial_copy.c
+index b4ff3b683bcd..5675dca8dbb1 100644
+--- a/arch/alpha/lib/csum_partial_copy.c
++++ b/arch/alpha/lib/csum_partial_copy.c
+@@ -374,7 +374,6 @@ csum_partial_copy_from_user(const void __user *src, void *dst, int len,
+       }
+       return (__force __wsum)checksum;
+ }
+-EXPORT_SYMBOL(csum_partial_copy_from_user);
+ __wsum
+ csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
+@@ -387,4 +386,3 @@ csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
+       set_fs(oldfs);
+       return checksum;
+ }
+-EXPORT_SYMBOL(csum_partial_copy_nocheck);
+diff --git a/arch/alpha/lib/dec_and_lock.c b/arch/alpha/lib/dec_and_lock.c
+index 4221b40167ee..f9f5fe830e9f 100644
+--- a/arch/alpha/lib/dec_and_lock.c
++++ b/arch/alpha/lib/dec_and_lock.c
+@@ -7,7 +7,6 @@
+ #include <linux/spinlock.h>
+ #include <linux/atomic.h>
+-#include <linux/export.h>
+   asm (".text                                 \n\
+       .global _atomic_dec_and_lock            \n\
+@@ -40,4 +39,3 @@ static int __used atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock)
+       spin_unlock(lock);
+       return 0;
+ }
+-EXPORT_SYMBOL(_atomic_dec_and_lock);
+diff --git a/arch/alpha/lib/divide.S b/arch/alpha/lib/divide.S
+index 1e33bd127621..2d1a0484a99e 100644
+--- a/arch/alpha/lib/divide.S
++++ b/arch/alpha/lib/divide.S
+@@ -45,7 +45,6 @@
+  *    $28 - compare status
+  */
+-#include <asm/export.h>
+ #define halt .long 0
+ /*
+@@ -152,7 +151,6 @@ ufunction:
+       addq    $30,STACK,$30
+       ret     $31,($23),1
+       .end    ufunction
+-EXPORT_SYMBOL(ufunction)
+ /*
+  * Uhh.. Ugly signed division. I'd rather not have it at all, but
+@@ -195,4 +193,3 @@ sfunction:
+       addq    $30,STACK,$30
+       ret     $31,($23),1
+       .end    sfunction
+-EXPORT_SYMBOL(sfunction)
+diff --git a/arch/alpha/lib/ev6-clear_page.S b/arch/alpha/lib/ev6-clear_page.S
+index abe99e69a194..adf4f7be0e2b 100644
+--- a/arch/alpha/lib/ev6-clear_page.S
++++ b/arch/alpha/lib/ev6-clear_page.S
+@@ -3,7 +3,7 @@
+  *
+  * Zero an entire page.
+  */
+-#include <asm/export.h>
++
+         .text
+         .align 4
+         .global clear_page
+@@ -52,4 +52,3 @@ clear_page:
+       nop
+       .end clear_page
+-      EXPORT_SYMBOL(clear_page)
+diff --git a/arch/alpha/lib/ev6-clear_user.S b/arch/alpha/lib/ev6-clear_user.S
+index 05bef6b50598..4f42a16b7f53 100644
+--- a/arch/alpha/lib/ev6-clear_user.S
++++ b/arch/alpha/lib/ev6-clear_user.S
+@@ -43,7 +43,6 @@
+  *    want to leave a hole (and we also want to avoid repeating lots of work)
+  */
+-#include <asm/export.h>
+ /* Allow an exception for an insn; exit if we get one.  */
+ #define EX(x,y...)                    \
+       99: x,##y;                      \
+@@ -223,4 +222,4 @@ $exception:                        # Destination for exception recovery(?)
+       nop                     # .. E  .. ..   :
+       ret     $31, ($28), 1   # L0 .. .. ..   : L U L U
+       .end __do_clear_user
+-      EXPORT_SYMBOL(__do_clear_user)
++
+diff --git a/arch/alpha/lib/ev6-copy_page.S b/arch/alpha/lib/ev6-copy_page.S
+index 77935061bddb..b789db192754 100644
+--- a/arch/alpha/lib/ev6-copy_page.S
++++ b/arch/alpha/lib/ev6-copy_page.S
+@@ -56,7 +56,7 @@
+    destination pages are in the dcache, but it is my guess that this is
+    less important than the dcache miss case.  */
+-#include <asm/export.h>
++
+       .text
+       .align 4
+       .global copy_page
+@@ -201,4 +201,3 @@ copy_page:
+       nop
+       .end copy_page
+-      EXPORT_SYMBOL(copy_page)
+diff --git a/arch/alpha/lib/ev6-copy_user.S b/arch/alpha/lib/ev6-copy_user.S
+index be720b518af9..c4d0689c3d26 100644
+--- a/arch/alpha/lib/ev6-copy_user.S
++++ b/arch/alpha/lib/ev6-copy_user.S
+@@ -37,7 +37,6 @@
+  *    L       - lower subcluster; L0 - subcluster L0; L1 - subcluster L1
+  */
+-#include <asm/export.h>
+ /* Allow an exception for an insn; exit if we get one.  */
+ #define EXI(x,y...)                   \
+       99: x,##y;                      \
+@@ -236,4 +235,4 @@ $exitout:                  # Destination for exception recovery(?)
+       ret $31,($28),1         # L0 .. .. ..   : L U L U
+       .end __copy_user
+-      EXPORT_SYMBOL(__copy_user)
++
+diff --git a/arch/alpha/lib/ev6-csum_ipv6_magic.S b/arch/alpha/lib/ev6-csum_ipv6_magic.S
+index de62627ac4fe..fc0bc399f872 100644
+--- a/arch/alpha/lib/ev6-csum_ipv6_magic.S
++++ b/arch/alpha/lib/ev6-csum_ipv6_magic.S
+@@ -52,7 +52,6 @@
+  * may cause additional delay in rare cases (load-load replay traps).
+  */
+-#include <asm/export.h>
+       .globl csum_ipv6_magic
+       .align 4
+       .ent csum_ipv6_magic
+@@ -149,4 +148,3 @@ csum_ipv6_magic:
+       ret                     # L0 : L U L U
+       .end csum_ipv6_magic
+-      EXPORT_SYMBOL(csum_ipv6_magic)
+diff --git a/arch/alpha/lib/ev6-divide.S b/arch/alpha/lib/ev6-divide.S
+index d18dc0e96e3d..2a82b9be93fa 100644
+--- a/arch/alpha/lib/ev6-divide.S
++++ b/arch/alpha/lib/ev6-divide.S
+@@ -55,7 +55,6 @@
+  * Try not to change the actual algorithm if possible for consistency.
+  */
+-#include <asm/export.h>
+ #define halt .long 0
+ /*
+@@ -206,7 +205,6 @@ ufunction:
+       addq    $30,STACK,$30           # E :
+       ret     $31,($23),1             # L0 : L U U L
+       .end    ufunction
+-EXPORT_SYMBOL(ufunction)
+ /*
+  * Uhh.. Ugly signed division. I'd rather not have it at all, but
+@@ -259,4 +257,3 @@ sfunction:
+       addq    $30,STACK,$30           # E :
+       ret     $31,($23),1             # L0 : L U U L
+       .end    sfunction
+-EXPORT_SYMBOL(sfunction)
+diff --git a/arch/alpha/lib/ev6-memchr.S b/arch/alpha/lib/ev6-memchr.S
+index 419adc53ccb4..1a5f71b9d8b1 100644
+--- a/arch/alpha/lib/ev6-memchr.S
++++ b/arch/alpha/lib/ev6-memchr.S
+@@ -27,7 +27,7 @@
+  *    L       - lower subcluster; L0 - subcluster L0; L1 - subcluster L1
+  * Try not to change the actual algorithm if possible for consistency.
+  */
+-#include <asm/export.h>
++
+         .set noreorder
+         .set noat
+@@ -189,4 +189,3 @@ $not_found:
+       ret                     # L0 :
+         .end memchr
+-      EXPORT_SYMBOL(memchr)
+diff --git a/arch/alpha/lib/ev6-memcpy.S b/arch/alpha/lib/ev6-memcpy.S
+index b19798b2efc0..52b37b0f2af5 100644
+--- a/arch/alpha/lib/ev6-memcpy.S
++++ b/arch/alpha/lib/ev6-memcpy.S
+@@ -19,7 +19,7 @@
+  * Temp usage notes:
+  *    $1,$2,          - scratch
+  */
+-#include <asm/export.h>
++
+       .set noreorder
+       .set noat
+@@ -242,7 +242,6 @@ $nomoredata:
+       nop                             # E :
+       .end memcpy
+-      EXPORT_SYMBOL(memcpy)
+ /* For backwards module compatibility.  */
+ __memcpy = memcpy
+diff --git a/arch/alpha/lib/ev6-memset.S b/arch/alpha/lib/ev6-memset.S
+index fed21c6893e8..356bb2fdd705 100644
+--- a/arch/alpha/lib/ev6-memset.S
++++ b/arch/alpha/lib/ev6-memset.S
+@@ -26,7 +26,7 @@
+  * as fixes will need to be made in multiple places.  The performance gain
+  * is worth it.
+  */
+-#include <asm/export.h>
++
+       .set noat
+       .set noreorder
+ .text
+@@ -229,7 +229,6 @@ end_b:
+       nop
+       ret $31,($26),1         # L0 :
+       .end ___memset
+-      EXPORT_SYMBOL(___memset)
+       /*
+        * This is the original body of code, prior to replication and
+@@ -407,7 +406,6 @@ end:
+       nop
+       ret $31,($26),1         # L0 :
+       .end __constant_c_memset
+-      EXPORT_SYMBOL(__constant_c_memset)
+       /*
+        * This is a replicant of the __constant_c_memset code, rescheduled
+@@ -596,9 +594,6 @@ end_w:
+       ret $31,($26),1         # L0 :
+       .end __memsetw
+-      EXPORT_SYMBOL(__memsetw)
+ memset = ___memset
+ __memset = ___memset
+-      EXPORT_SYMBOL(memset)
+-      EXPORT_SYMBOL(__memset)
+diff --git a/arch/alpha/lib/ev67-strcat.S b/arch/alpha/lib/ev67-strcat.S
+index b69f60419be1..c426fe3ed72f 100644
+--- a/arch/alpha/lib/ev67-strcat.S
++++ b/arch/alpha/lib/ev67-strcat.S
+@@ -19,7 +19,7 @@
+  * string once.
+  */
+-#include <asm/export.h>
++
+       .text
+       .align 4
+@@ -52,4 +52,3 @@ $found:      cttz    $2, $3          # U0 :
+       br      __stxcpy        # L0 :
+       .end strcat
+-      EXPORT_SYMBOL(strcat)
+diff --git a/arch/alpha/lib/ev67-strchr.S b/arch/alpha/lib/ev67-strchr.S
+index ea8f2f35db9c..fbb7b4ffade9 100644
+--- a/arch/alpha/lib/ev67-strchr.S
++++ b/arch/alpha/lib/ev67-strchr.S
+@@ -15,7 +15,7 @@
+  *    L       - lower subcluster; L0 - subcluster L0; L1 - subcluster L1
+  * Try not to change the actual algorithm if possible for consistency.
+  */
+-#include <asm/export.h>
++
+ #include <asm/regdef.h>
+       .set noreorder
+@@ -86,4 +86,3 @@ $found:      negq    t0, t1          # E : clear all but least set bit
+       ret                     # L0 :
+       .end strchr
+-      EXPORT_SYMBOL(strchr)
+diff --git a/arch/alpha/lib/ev67-strlen.S b/arch/alpha/lib/ev67-strlen.S
+index 736fd41884a8..503928072523 100644
+--- a/arch/alpha/lib/ev67-strlen.S
++++ b/arch/alpha/lib/ev67-strlen.S
+@@ -17,7 +17,7 @@
+  *    U       - upper subcluster; U0 - subcluster U0; U1 - subcluster U1
+  *    L       - lower subcluster; L0 - subcluster L0; L1 - subcluster L1
+  */
+-#include <asm/export.h>
++
+       .set noreorder
+       .set noat
+@@ -47,4 +47,3 @@ $found:
+       ret     $31, ($26)      # L0 :
+       .end    strlen
+-      EXPORT_SYMBOL(strlen)
+diff --git a/arch/alpha/lib/ev67-strncat.S b/arch/alpha/lib/ev67-strncat.S
+index cd35cbade73a..4ae716cd2bfb 100644
+--- a/arch/alpha/lib/ev67-strncat.S
++++ b/arch/alpha/lib/ev67-strncat.S
+@@ -20,7 +20,7 @@
+  * Try not to change the actual algorithm if possible for consistency.
+  */
+-#include <asm/export.h>
++
+       .text
+       .align 4
+@@ -92,4 +92,3 @@ $zerocount:
+       ret                     # L0 :
+       .end strncat
+-      EXPORT_SYMBOL(strncat)
+diff --git a/arch/alpha/lib/ev67-strrchr.S b/arch/alpha/lib/ev67-strrchr.S
+index 747455f0328c..dd0d8c6b9f59 100644
+--- a/arch/alpha/lib/ev67-strrchr.S
++++ b/arch/alpha/lib/ev67-strrchr.S
+@@ -18,7 +18,7 @@
+  *    L       - lower subcluster; L0 - subcluster L0; L1 - subcluster L1
+  */
+-#include <asm/export.h>
++
+ #include <asm/regdef.h>
+       .set noreorder
+@@ -107,4 +107,3 @@ $eos:
+       nop
+       .end strrchr
+-      EXPORT_SYMBOL(strrchr)
+diff --git a/arch/alpha/lib/fpreg.c b/arch/alpha/lib/fpreg.c
+index 4aa6dbfa14ee..05017ba34c3c 100644
+--- a/arch/alpha/lib/fpreg.c
++++ b/arch/alpha/lib/fpreg.c
+@@ -4,9 +4,6 @@
+  * (C) Copyright 1998 Linus Torvalds
+  */
+-#include <linux/compiler.h>
+-#include <linux/export.h>
+-
+ #if defined(CONFIG_ALPHA_EV6) || defined(CONFIG_ALPHA_EV67)
+ #define STT(reg,val)  asm volatile ("ftoit $f"#reg",%0" : "=r"(val));
+ #else
+@@ -55,7 +52,6 @@ alpha_read_fp_reg (unsigned long reg)
+       }
+       return val;
+ }
+-EXPORT_SYMBOL(alpha_read_fp_reg);
+ #if defined(CONFIG_ALPHA_EV6) || defined(CONFIG_ALPHA_EV67)
+ #define LDT(reg,val)  asm volatile ("itoft %0,$f"#reg : : "r"(val));
+@@ -101,7 +97,6 @@ alpha_write_fp_reg (unsigned long reg, unsigned long val)
+             case 31: LDT(31, val); break;
+       }
+ }
+-EXPORT_SYMBOL(alpha_write_fp_reg);
+ #if defined(CONFIG_ALPHA_EV6) || defined(CONFIG_ALPHA_EV67)
+ #define STS(reg,val)  asm volatile ("ftois $f"#reg",%0" : "=r"(val));
+@@ -151,7 +146,6 @@ alpha_read_fp_reg_s (unsigned long reg)
+       }
+       return val;
+ }
+-EXPORT_SYMBOL(alpha_read_fp_reg_s);
+ #if defined(CONFIG_ALPHA_EV6) || defined(CONFIG_ALPHA_EV67)
+ #define LDS(reg,val)  asm volatile ("itofs %0,$f"#reg : : "r"(val));
+@@ -197,4 +191,3 @@ alpha_write_fp_reg_s (unsigned long reg, unsigned long val)
+             case 31: LDS(31, val); break;
+       }
+ }
+-EXPORT_SYMBOL(alpha_write_fp_reg_s);
+diff --git a/arch/alpha/lib/memchr.S b/arch/alpha/lib/memchr.S
+index c13d3eca2e05..14427eeb555e 100644
+--- a/arch/alpha/lib/memchr.S
++++ b/arch/alpha/lib/memchr.S
+@@ -31,7 +31,7 @@ For correctness consider that:
+       - only minimum number of quadwords may be accessed
+       - the third argument is an unsigned long
+ */
+-#include <asm/export.h>
++
+         .set noreorder
+         .set noat
+@@ -162,4 +162,3 @@ $not_found:
+       ret                     # .. e1 :
+         .end memchr
+-      EXPORT_SYMBOL(memchr)
+diff --git a/arch/alpha/lib/memcpy.c b/arch/alpha/lib/memcpy.c
+index 57d9291ad172..64083fc73238 100644
+--- a/arch/alpha/lib/memcpy.c
++++ b/arch/alpha/lib/memcpy.c
+@@ -16,7 +16,6 @@
+  */
+ #include <linux/types.h>
+-#include <linux/export.h>
+ /*
+  * This should be done in one go with ldq_u*2/mask/stq_u. Do it
+@@ -159,4 +158,6 @@ void * memcpy(void * dest, const void *src, size_t n)
+       __memcpy_unaligned_up ((unsigned long) dest, (unsigned long) src, n);
+       return dest;
+ }
+-EXPORT_SYMBOL(memcpy);
++
++/* For backward modules compatibility, define __memcpy.  */
++asm("__memcpy = memcpy; .globl __memcpy");
+diff --git a/arch/alpha/lib/memmove.S b/arch/alpha/lib/memmove.S
+index 6872c85cb5e5..eb3b6e02242f 100644
+--- a/arch/alpha/lib/memmove.S
++++ b/arch/alpha/lib/memmove.S
+@@ -6,7 +6,7 @@
+  * This is hand-massaged output from the original memcpy.c.  We defer to
+  * memcpy whenever possible; the backwards copy loops are not unrolled.
+  */
+-#include <asm/export.h>        
++        
+       .set noat
+       .set noreorder
+       .text
+@@ -179,4 +179,3 @@ $egress:
+       nop
+       .end memmove
+-      EXPORT_SYMBOL(memmove)
+diff --git a/arch/alpha/lib/memset.S b/arch/alpha/lib/memset.S
+index 89a26f5e89de..76ccc6d1f364 100644
+--- a/arch/alpha/lib/memset.S
++++ b/arch/alpha/lib/memset.S
+@@ -13,7 +13,7 @@
+  * The scheduling comments are according to the EV5 documentation (and done by 
+  * hand, so they might well be incorrect, please do tell me about it..)
+  */
+-#include <asm/export.h>
++
+       .set noat
+       .set noreorder
+ .text
+@@ -106,8 +106,6 @@ within_one_quad:
+ end:
+       ret $31,($26),1         /* E1 */
+       .end ___memset
+-EXPORT_SYMBOL(___memset)
+-EXPORT_SYMBOL(__constant_c_memset)
+       .align 5
+       .ent __memsetw
+@@ -124,9 +122,6 @@ __memsetw:
+       br __constant_c_memset  /* .. E1 */
+       .end __memsetw
+-EXPORT_SYMBOL(__memsetw)
+ memset = ___memset
+ __memset = ___memset
+-      EXPORT_SYMBOL(memset)
+-      EXPORT_SYMBOL(__memset)
+diff --git a/arch/alpha/lib/strcat.S b/arch/alpha/lib/strcat.S
+index 249837b03d4b..393f50384878 100644
+--- a/arch/alpha/lib/strcat.S
++++ b/arch/alpha/lib/strcat.S
+@@ -4,7 +4,6 @@
+  *
+  * Append a null-terminated string from SRC to DST.
+  */
+-#include <asm/export.h>
+       .text
+@@ -51,4 +50,3 @@ $found:      negq    $2, $3          # clear all but least set bit
+       br      __stxcpy
+       .end strcat
+-EXPORT_SYMBOL(strcat);
+diff --git a/arch/alpha/lib/strchr.S b/arch/alpha/lib/strchr.S
+index 7412a173ea39..011a175e8329 100644
+--- a/arch/alpha/lib/strchr.S
++++ b/arch/alpha/lib/strchr.S
+@@ -5,7 +5,7 @@
+  * Return the address of a given character within a null-terminated
+  * string, or null if it is not found.
+  */
+-#include <asm/export.h>
++
+ #include <asm/regdef.h>
+       .set noreorder
+@@ -68,4 +68,3 @@ $retnull:
+       ret                     # .. e1 :
+       .end strchr
+-      EXPORT_SYMBOL(strchr)
+diff --git a/arch/alpha/lib/strcpy.S b/arch/alpha/lib/strcpy.S
+index 98deae1e4d08..e0728e4ad21f 100644
+--- a/arch/alpha/lib/strcpy.S
++++ b/arch/alpha/lib/strcpy.S
+@@ -5,7 +5,7 @@
+  * Copy a null-terminated string from SRC to DST.  Return a pointer
+  * to the null-terminator in the source.
+  */
+-#include <asm/export.h>
++
+       .text
+       .align 3
+@@ -21,4 +21,3 @@ strcpy:
+       br      __stxcpy        # do the copy
+       .end strcpy
+-      EXPORT_SYMBOL(strcpy)
+diff --git a/arch/alpha/lib/strlen.S b/arch/alpha/lib/strlen.S
+index 79c416f71bac..fe63353de152 100644
+--- a/arch/alpha/lib/strlen.S
++++ b/arch/alpha/lib/strlen.S
+@@ -11,7 +11,7 @@
+  *      do this instead of the 9 instructions that
+  *      binary search needs).
+  */
+-#include <asm/export.h>
++
+       .set noreorder
+       .set noat
+@@ -55,4 +55,3 @@ done:        subq    $0, $16, $0
+       ret     $31, ($26)
+       .end    strlen
+-      EXPORT_SYMBOL(strlen)
+diff --git a/arch/alpha/lib/strncat.S b/arch/alpha/lib/strncat.S
+index 6c29ea60869a..a8278163c972 100644
+--- a/arch/alpha/lib/strncat.S
++++ b/arch/alpha/lib/strncat.S
+@@ -9,7 +9,7 @@
+  * past count, whereas libc may write to count+1.  This follows the generic
+  * implementation in lib/string.c and is, IMHO, more sensible.
+  */
+-#include <asm/export.h>
++
+       .text
+       .align 3
+@@ -82,4 +82,3 @@ $zerocount:
+       ret
+       .end strncat
+-      EXPORT_SYMBOL(strncat)
+diff --git a/arch/alpha/lib/strncpy.S b/arch/alpha/lib/strncpy.S
+index e102cf1567dd..a46f7f3ad8c7 100644
+--- a/arch/alpha/lib/strncpy.S
++++ b/arch/alpha/lib/strncpy.S
+@@ -10,7 +10,7 @@
+  * version has cropped that bit o' nastiness as well as assuming that
+  * __stxncpy is in range of a branch.
+  */
+-#include <asm/export.h>
++
+       .set noat
+       .set noreorder
+@@ -79,4 +79,3 @@ $zerolen:
+       ret
+       .end    strncpy
+-      EXPORT_SYMBOL(strncpy)
+diff --git a/arch/alpha/lib/strrchr.S b/arch/alpha/lib/strrchr.S
+index 4bc6cb4b9812..1970dc07cfd1 100644
+--- a/arch/alpha/lib/strrchr.S
++++ b/arch/alpha/lib/strrchr.S
+@@ -5,7 +5,7 @@
+  * Return the address of the last occurrence of a given character
+  * within a null-terminated string, or null if it is not found.
+  */
+-#include <asm/export.h>
++
+ #include <asm/regdef.h>
+       .set noreorder
+@@ -85,4 +85,3 @@ $retnull:
+       ret                     # .. e1 :
+       .end strrchr
+-      EXPORT_SYMBOL(strrchr)
diff --git a/patches/bugfix/arm/arm-dts-kirkwood-fix-sata-pinmux-ing-for-ts419.patch b/patches/bugfix/arm/arm-dts-kirkwood-fix-sata-pinmux-ing-for-ts419.patch
new file mode 100644 (file)
index 0000000..9e6622f
--- /dev/null
@@ -0,0 +1,37 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 17 Feb 2017 01:30:30 +0000
+Subject: ARM: dts: kirkwood: Fix SATA pinmux-ing for TS419
+Forwarded: https://www.spinics.net/lists/arm-kernel/msg563610.html
+Bug-Debian: https://bugs.debian.org/855017
+
+The old board code for the TS419 assigns MPP pins 15 and 16 as SATA
+activity signals (and none as SATA presence signals).  Currently the
+device tree assigns the SoC's default pinmux groups for SATA, which
+conflict with the second Ethernet port.
+
+Reported-by: gmbh@gazeta.pl
+Tested-by: gmbh@gazeta.pl
+References: https://bugs.debian.org/855017
+Cc: stable@vger.kernel.org # 3.15+
+Fixes: 934b524b3f49 ("ARM: Kirkwood: Add DT description of QNAP 419")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/boot/dts/kirkwood-ts419.dtsi | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/arch/arm/boot/dts/kirkwood-ts419.dtsi b/arch/arm/boot/dts/kirkwood-ts419.dtsi
+index 02bd53762705..532506cb0f4a 100644
+--- a/arch/arm/boot/dts/kirkwood-ts419.dtsi
++++ b/arch/arm/boot/dts/kirkwood-ts419.dtsi
+@@ -73,3 +73,11 @@
+               phy-handle = <&ethphy1>;
+       };
+ };
++
++&pmx_sata0 {
++      marvell,pins = "mpp15";
++};
++
++&pmx_sata1 {
++      marvell,pins = "mpp16";
++};
diff --git a/patches/bugfix/ia64/revert-ia64-move-exports-to-definitions.patch b/patches/bugfix/ia64/revert-ia64-move-exports-to-definitions.patch
new file mode 100644 (file)
index 0000000..dadf2c6
--- /dev/null
@@ -0,0 +1,643 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 1 Dec 2016 23:20:31 +0000
+Subject: Revert "ia64: move exports to definitions"
+Forwarded: not-needed
+
+This reverts commit e007c53397acb5554e226693e3bff54a312ccd96 because
+symbols exported from assembly don't automatically get modversions (ABI
+hashes).
+---
+ arch/ia64/include/asm/export.h    |  3 --
+ arch/ia64/kernel/entry.S          |  3 --
+ arch/ia64/kernel/esi_stub.S       |  2 -
+ arch/ia64/kernel/head.S           |  2 -
+ arch/ia64/kernel/ia64_ksyms.c     | 94 ++++++++++++++++++++++++++++++++++++++-
+ arch/ia64/kernel/ivt.S            |  2 -
+ arch/ia64/kernel/pal.S            |  7 ---
+ arch/ia64/kernel/setup.c          |  4 --
+ arch/ia64/lib/clear_page.S        |  2 -
+ arch/ia64/lib/clear_user.S        |  2 -
+ arch/ia64/lib/copy_page.S         |  2 -
+ arch/ia64/lib/copy_page_mck.S     |  2 -
+ arch/ia64/lib/copy_user.S         |  2 -
+ arch/ia64/lib/flush.S             |  2 -
+ arch/ia64/lib/idiv32.S            |  2 -
+ arch/ia64/lib/idiv64.S            |  2 -
+ arch/ia64/lib/ip_fast_csum.S      |  3 --
+ arch/ia64/lib/memcpy.S            |  2 -
+ arch/ia64/lib/memcpy_mck.S        |  3 --
+ arch/ia64/lib/memset.S            |  2 -
+ arch/ia64/lib/strlen.S            |  2 -
+ arch/ia64/lib/strlen_user.S       |  2 -
+ arch/ia64/lib/strncpy_from_user.S |  2 -
+ arch/ia64/lib/strnlen_user.S      |  2 -
+ arch/ia64/lib/xor.S               |  5 ---
+ 25 files changed, 92 insertions(+), 64 deletions(-)
+ delete mode 100644 arch/ia64/include/asm/export.h
+
+diff --git a/arch/ia64/include/asm/export.h b/arch/ia64/include/asm/export.h
+deleted file mode 100644
+index ad18c6583252..000000000000
+--- a/arch/ia64/include/asm/export.h
++++ /dev/null
+@@ -1,3 +0,0 @@
+-/* EXPORT_DATA_SYMBOL != EXPORT_SYMBOL here */
+-#define KSYM_FUNC(name) @fptr(name)
+-#include <asm-generic/export.h>
+diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S
+index 6f27a663177c..cfaa7b25084c 100644
+--- a/arch/ia64/kernel/entry.S
++++ b/arch/ia64/kernel/entry.S
+@@ -48,7 +48,6 @@
+ #include <asm/thread_info.h>
+ #include <asm/unistd.h>
+ #include <asm/ftrace.h>
+-#include <asm/export.h>
+ #include "minstate.h"
+@@ -1346,14 +1345,12 @@ GLOBAL_ENTRY(unw_init_running)
+       mov rp=loc0
+       br.ret.sptk.many rp
+ END(unw_init_running)
+-EXPORT_SYMBOL(unw_init_running)
+ #ifdef CONFIG_FUNCTION_TRACER
+ #ifdef CONFIG_DYNAMIC_FTRACE
+ GLOBAL_ENTRY(_mcount)
+       br ftrace_stub
+ END(_mcount)
+-EXPORT_SYMBOL(_mcount)
+ .here:
+       br.ret.sptk.many b0
+diff --git a/arch/ia64/kernel/esi_stub.S b/arch/ia64/kernel/esi_stub.S
+index 2c369bf77c4b..6b3d6c1f99b6 100644
+--- a/arch/ia64/kernel/esi_stub.S
++++ b/arch/ia64/kernel/esi_stub.S
+@@ -35,7 +35,6 @@
+ #include <asm/processor.h>
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ /*
+  * Inputs:
+@@ -95,4 +94,3 @@ GLOBAL_ENTRY(esi_call_phys)
+       mov gp=loc2
+       br.ret.sptk.many rp
+ END(esi_call_phys)
+-EXPORT_SYMBOL_GPL(esi_call_phys)
+diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S
+index c9b5e942f671..bb748c596443 100644
+--- a/arch/ia64/kernel/head.S
++++ b/arch/ia64/kernel/head.S
+@@ -32,7 +32,6 @@
+ #include <asm/mca_asm.h>
+ #include <linux/init.h>
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+ #ifdef CONFIG_HOTPLUG_CPU
+ #define SAL_PSR_BITS_TO_SET                           \
+@@ -169,7 +168,6 @@ RestRR:                                                                                    \
+       __PAGE_ALIGNED_DATA
+       .global empty_zero_page
+-EXPORT_DATA_SYMBOL_GPL(empty_zero_page)
+ empty_zero_page:
+       .skip PAGE_SIZE
+diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c
+index d111248af719..096731049538 100644
+--- a/arch/ia64/kernel/ia64_ksyms.c
++++ b/arch/ia64/kernel/ia64_ksyms.c
+@@ -1,11 +1,101 @@
+ /*
+  * Architecture-specific kernel symbols
++ *
++ * Don't put any exports here unless it's defined in an assembler file.
++ * All other exports should be put directly after the definition.
+  */
++#include <linux/module.h>
++
++#include <linux/string.h>
++EXPORT_SYMBOL(memset);
++EXPORT_SYMBOL(memcpy);
++EXPORT_SYMBOL(strlen);
++
++#include <asm/pgtable.h>
++EXPORT_SYMBOL_GPL(empty_zero_page);
++
++#include <asm/checksum.h>
++EXPORT_SYMBOL(ip_fast_csum);          /* hand-coded assembly */
++EXPORT_SYMBOL(csum_ipv6_magic);
++
++#include <asm/page.h>
++EXPORT_SYMBOL(clear_page);
++EXPORT_SYMBOL(copy_page);
++
+ #ifdef CONFIG_VIRTUAL_MEM_MAP
+-#include <linux/compiler.h>
+-#include <linux/export.h>
+ #include <linux/bootmem.h>
+ EXPORT_SYMBOL(min_low_pfn);   /* defined by bootmem.c, but not exported by generic code */
+ EXPORT_SYMBOL(max_low_pfn);   /* defined by bootmem.c, but not exported by generic code */
+ #endif
++
++#include <asm/processor.h>
++EXPORT_SYMBOL(ia64_cpu_info);
++#ifdef CONFIG_SMP
++EXPORT_SYMBOL(local_per_cpu_offset);
++#endif
++
++#include <asm/uaccess.h>
++EXPORT_SYMBOL(__copy_user);
++EXPORT_SYMBOL(__do_clear_user);
++EXPORT_SYMBOL(__strlen_user);
++EXPORT_SYMBOL(__strncpy_from_user);
++EXPORT_SYMBOL(__strnlen_user);
++
++/* from arch/ia64/lib */
++extern void __divsi3(void);
++extern void __udivsi3(void);
++extern void __modsi3(void);
++extern void __umodsi3(void);
++extern void __divdi3(void);
++extern void __udivdi3(void);
++extern void __moddi3(void);
++extern void __umoddi3(void);
++
++EXPORT_SYMBOL(__divsi3);
++EXPORT_SYMBOL(__udivsi3);
++EXPORT_SYMBOL(__modsi3);
++EXPORT_SYMBOL(__umodsi3);
++EXPORT_SYMBOL(__divdi3);
++EXPORT_SYMBOL(__udivdi3);
++EXPORT_SYMBOL(__moddi3);
++EXPORT_SYMBOL(__umoddi3);
++
++#if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE)
++extern void xor_ia64_2(void);
++extern void xor_ia64_3(void);
++extern void xor_ia64_4(void);
++extern void xor_ia64_5(void);
++
++EXPORT_SYMBOL(xor_ia64_2);
++EXPORT_SYMBOL(xor_ia64_3);
++EXPORT_SYMBOL(xor_ia64_4);
++EXPORT_SYMBOL(xor_ia64_5);
++#endif
++
++#include <asm/pal.h>
++EXPORT_SYMBOL(ia64_pal_call_phys_stacked);
++EXPORT_SYMBOL(ia64_pal_call_phys_static);
++EXPORT_SYMBOL(ia64_pal_call_stacked);
++EXPORT_SYMBOL(ia64_pal_call_static);
++EXPORT_SYMBOL(ia64_load_scratch_fpregs);
++EXPORT_SYMBOL(ia64_save_scratch_fpregs);
++
++#include <asm/unwind.h>
++EXPORT_SYMBOL(unw_init_running);
++
++#if defined(CONFIG_IA64_ESI) || defined(CONFIG_IA64_ESI_MODULE)
++extern void esi_call_phys (void);
++EXPORT_SYMBOL_GPL(esi_call_phys);
++#endif
++extern char ia64_ivt[];
++EXPORT_SYMBOL(ia64_ivt);
++
++#include <asm/ftrace.h>
++#ifdef CONFIG_FUNCTION_TRACER
++/* mcount is defined in assembly */
++EXPORT_SYMBOL(_mcount);
++#endif
++
++#include <asm/cacheflush.h>
++EXPORT_SYMBOL_GPL(flush_icache_range);
+diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S
+index 44a103a5de2b..b1c3cfc93e71 100644
+--- a/arch/ia64/kernel/ivt.S
++++ b/arch/ia64/kernel/ivt.S
+@@ -57,7 +57,6 @@
+ #include <asm/thread_info.h>
+ #include <asm/unistd.h>
+ #include <asm/errno.h>
+-#include <asm/export.h>
+ #if 0
+ # define PSR_DEFAULT_BITS     psr.ac
+@@ -86,7 +85,6 @@
+       .align 32768    // align on 32KB boundary
+       .global ia64_ivt
+-      EXPORT_DATA_SYMBOL(ia64_ivt)
+ ia64_ivt:
+ /////////////////////////////////////////////////////////////////////////////////////////
+ // 0x0000 Entry 0 (size 64 bundles) VHPT Translation (8,20,47)
+diff --git a/arch/ia64/kernel/pal.S b/arch/ia64/kernel/pal.S
+index 94fb2e395498..0b533441c3c9 100644
+--- a/arch/ia64/kernel/pal.S
++++ b/arch/ia64/kernel/pal.S
+@@ -14,7 +14,6 @@
+ #include <asm/asmmacro.h>
+ #include <asm/processor.h>
+-#include <asm/export.h>
+       .data
+ pal_entry_point:
+@@ -88,7 +87,6 @@ GLOBAL_ENTRY(ia64_pal_call_static)
+       srlz.d                          // seralize restoration of psr.l
+       br.ret.sptk.many b0
+ END(ia64_pal_call_static)
+-EXPORT_SYMBOL(ia64_pal_call_static)
+ /*
+  * Make a PAL call using the stacked registers calling convention.
+@@ -124,7 +122,6 @@ GLOBAL_ENTRY(ia64_pal_call_stacked)
+       srlz.d                          // serialize restoration of psr.l
+       br.ret.sptk.many b0
+ END(ia64_pal_call_stacked)
+-EXPORT_SYMBOL(ia64_pal_call_stacked)
+ /*
+  * Make a physical mode PAL call using the static registers calling convention.
+@@ -196,7 +193,6 @@ GLOBAL_ENTRY(ia64_pal_call_phys_static)
+       srlz.d                          // seralize restoration of psr.l
+       br.ret.sptk.many b0
+ END(ia64_pal_call_phys_static)
+-EXPORT_SYMBOL(ia64_pal_call_phys_static)
+ /*
+  * Make a PAL call using the stacked registers in physical mode.
+@@ -254,7 +250,6 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked)
+       srlz.d                          // seralize restoration of psr.l
+       br.ret.sptk.many b0
+ END(ia64_pal_call_phys_stacked)
+-EXPORT_SYMBOL(ia64_pal_call_phys_stacked)
+ /*
+  * Save scratch fp scratch regs which aren't saved in pt_regs already
+@@ -280,7 +275,6 @@ GLOBAL_ENTRY(ia64_save_scratch_fpregs)
+       stf.spill [r2]  = f15,32
+       br.ret.sptk.many rp
+ END(ia64_save_scratch_fpregs)
+-EXPORT_SYMBOL(ia64_save_scratch_fpregs)
+ /*
+  * Load scratch fp scratch regs (fp10-fp15)
+@@ -302,4 +296,3 @@ GLOBAL_ENTRY(ia64_load_scratch_fpregs)
+       ldf.fill  f15 = [r2],32
+       br.ret.sptk.many rp
+ END(ia64_load_scratch_fpregs)
+-EXPORT_SYMBOL(ia64_load_scratch_fpregs)
+diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
+index 7ec7acc844c2..afddb3e80a29 100644
+--- a/arch/ia64/kernel/setup.c
++++ b/arch/ia64/kernel/setup.c
+@@ -71,11 +71,7 @@ EXPORT_SYMBOL(__per_cpu_offset);
+ #endif
+ DEFINE_PER_CPU(struct cpuinfo_ia64, ia64_cpu_info);
+-EXPORT_SYMBOL(ia64_cpu_info);
+ DEFINE_PER_CPU(unsigned long, local_per_cpu_offset);
+-#ifdef CONFIG_SMP
+-EXPORT_SYMBOL(local_per_cpu_offset);
+-#endif
+ unsigned long ia64_cycles_per_usec;
+ struct ia64_boot_param *ia64_boot_param;
+ struct screen_info screen_info;
+diff --git a/arch/ia64/lib/clear_page.S b/arch/ia64/lib/clear_page.S
+index 3cf5b76e587f..2d814e7ed191 100644
+--- a/arch/ia64/lib/clear_page.S
++++ b/arch/ia64/lib/clear_page.S
+@@ -11,7 +11,6 @@
+ #include <asm/asmmacro.h>
+ #include <asm/page.h>
+-#include <asm/export.h>
+ #ifdef CONFIG_ITANIUM
+ # define L3_LINE_SIZE 64      // Itanium L3 line size
+@@ -75,4 +74,3 @@ GLOBAL_ENTRY(clear_page)
+       mov ar.lc = saved_lc            // restore lc
+       br.ret.sptk.many rp
+ END(clear_page)
+-EXPORT_SYMBOL(clear_page)
+diff --git a/arch/ia64/lib/clear_user.S b/arch/ia64/lib/clear_user.S
+index 7b40731ee5d8..eecd8577b209 100644
+--- a/arch/ia64/lib/clear_user.S
++++ b/arch/ia64/lib/clear_user.S
+@@ -12,7 +12,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ //
+ // arguments
+@@ -208,4 +207,3 @@ GLOBAL_ENTRY(__do_clear_user)
+       mov ar.lc=saved_lc
+       br.ret.sptk.many rp
+ END(__do_clear_user)
+-EXPORT_SYMBOL(__do_clear_user)
+diff --git a/arch/ia64/lib/copy_page.S b/arch/ia64/lib/copy_page.S
+index cbdb9e323ffb..127d1d050d78 100644
+--- a/arch/ia64/lib/copy_page.S
++++ b/arch/ia64/lib/copy_page.S
+@@ -16,7 +16,6 @@
+  */
+ #include <asm/asmmacro.h>
+ #include <asm/page.h>
+-#include <asm/export.h>
+ #define PIPE_DEPTH    3
+ #define EPI           p[PIPE_DEPTH-1]
+@@ -97,4 +96,3 @@ GLOBAL_ENTRY(copy_page)
+       mov ar.lc=saved_lc
+       br.ret.sptk.many rp
+ END(copy_page)
+-EXPORT_SYMBOL(copy_page)
+diff --git a/arch/ia64/lib/copy_page_mck.S b/arch/ia64/lib/copy_page_mck.S
+index c13f69036876..3c45d60a81b4 100644
+--- a/arch/ia64/lib/copy_page_mck.S
++++ b/arch/ia64/lib/copy_page_mck.S
+@@ -61,7 +61,6 @@
+  */
+ #include <asm/asmmacro.h>
+ #include <asm/page.h>
+-#include <asm/export.h>
+ #define PREFETCH_DIST 8               // McKinley sustains 16 outstanding L2 misses (8 ld, 8 st)
+@@ -184,4 +183,3 @@ GLOBAL_ENTRY(copy_page)
+       mov pr = saved_pr, -1
+       br.ret.sptk.many rp
+ END(copy_page)
+-EXPORT_SYMBOL(copy_page)
+diff --git a/arch/ia64/lib/copy_user.S b/arch/ia64/lib/copy_user.S
+index 66facd52e8d0..c952bdc6a093 100644
+--- a/arch/ia64/lib/copy_user.S
++++ b/arch/ia64/lib/copy_user.S
+@@ -30,7 +30,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ //
+ // Tuneable parameters
+@@ -609,4 +608,3 @@ GLOBAL_ENTRY(__copy_user)
+       mov ar.pfs=saved_pfs
+       br.ret.sptk.many rp
+ END(__copy_user)
+-EXPORT_SYMBOL(__copy_user)
+diff --git a/arch/ia64/lib/flush.S b/arch/ia64/lib/flush.S
+index 9a5a2f9fad13..1d8c88860063 100644
+--- a/arch/ia64/lib/flush.S
++++ b/arch/ia64/lib/flush.S
+@@ -8,7 +8,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+       /*
+@@ -61,7 +60,6 @@ GLOBAL_ENTRY(flush_icache_range)
+       mov     ar.lc=r3                // restore ar.lc
+       br.ret.sptk.many rp
+ END(flush_icache_range)
+-EXPORT_SYMBOL_GPL(flush_icache_range)
+       /*
+        * clflush_cache_range(start,size)
+diff --git a/arch/ia64/lib/idiv32.S b/arch/ia64/lib/idiv32.S
+index 715aed79a9ce..c91b5b0129ff 100644
+--- a/arch/ia64/lib/idiv32.S
++++ b/arch/ia64/lib/idiv32.S
+@@ -15,7 +15,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ #ifdef MODULO
+ # define OP   mod
+@@ -82,4 +81,3 @@ GLOBAL_ENTRY(NAME)
+       getf.sig r8 = f6                // transfer result to result register
+       br.ret.sptk.many rp
+ END(NAME)
+-EXPORT_SYMBOL(NAME)
+diff --git a/arch/ia64/lib/idiv64.S b/arch/ia64/lib/idiv64.S
+index 25840f697753..627573c4ceb1 100644
+--- a/arch/ia64/lib/idiv64.S
++++ b/arch/ia64/lib/idiv64.S
+@@ -15,7 +15,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ #ifdef MODULO
+ # define OP   mod
+@@ -79,4 +78,3 @@ GLOBAL_ENTRY(NAME)
+       getf.sig r8 = f11               // transfer result to result register
+       br.ret.sptk.many rp
+ END(NAME)
+-EXPORT_SYMBOL(NAME)
+diff --git a/arch/ia64/lib/ip_fast_csum.S b/arch/ia64/lib/ip_fast_csum.S
+index 648e0d4a4839..620d9dc5220f 100644
+--- a/arch/ia64/lib/ip_fast_csum.S
++++ b/arch/ia64/lib/ip_fast_csum.S
+@@ -13,7 +13,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ /*
+  * Since we know that most likely this function is called with buf aligned
+@@ -93,7 +92,6 @@ GLOBAL_ENTRY(ip_fast_csum)
+       mov     b0=r34
+       br.ret.sptk.many b0
+ END(ip_fast_csum)
+-EXPORT_SYMBOL(ip_fast_csum)
+ GLOBAL_ENTRY(csum_ipv6_magic)
+       ld4     r20=[in0],4
+@@ -144,4 +142,3 @@ GLOBAL_ENTRY(csum_ipv6_magic)
+       andcm   r8=r9,r8
+       br.ret.sptk.many b0
+ END(csum_ipv6_magic)
+-EXPORT_SYMBOL(csum_ipv6_magic)
+diff --git a/arch/ia64/lib/memcpy.S b/arch/ia64/lib/memcpy.S
+index ba172fd6acf4..448908d80b69 100644
+--- a/arch/ia64/lib/memcpy.S
++++ b/arch/ia64/lib/memcpy.S
+@@ -14,7 +14,6 @@
+  *    David Mosberger-Tang <davidm@hpl.hp.com>
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ GLOBAL_ENTRY(memcpy)
+@@ -300,4 +299,3 @@ GLOBAL_ENTRY(memcpy)
+       COPY(56, 0)
+ END(memcpy)
+-EXPORT_SYMBOL(memcpy)
+diff --git a/arch/ia64/lib/memcpy_mck.S b/arch/ia64/lib/memcpy_mck.S
+index b264b6a7967b..ab0f87639729 100644
+--- a/arch/ia64/lib/memcpy_mck.S
++++ b/arch/ia64/lib/memcpy_mck.S
+@@ -15,7 +15,6 @@
+  */
+ #include <asm/asmmacro.h>
+ #include <asm/page.h>
+-#include <asm/export.h>
+ #define EK(y...) EX(y)
+@@ -79,7 +78,6 @@ GLOBAL_ENTRY(memcpy)
+       br.cond.sptk .common_code
+       ;;
+ END(memcpy)
+-EXPORT_SYMBOL(memcpy)
+ GLOBAL_ENTRY(__copy_user)
+       .prologue
+ // check dest alignment
+@@ -666,4 +664,3 @@ EK(.ex_handler,  (p17)     st8     [dst1]=r39,8);                                          \
+ /* end of McKinley specific optimization */
+ END(__copy_user)
+-EXPORT_SYMBOL(__copy_user)
+diff --git a/arch/ia64/lib/memset.S b/arch/ia64/lib/memset.S
+index 87b974704075..f26c16aefb1c 100644
+--- a/arch/ia64/lib/memset.S
++++ b/arch/ia64/lib/memset.S
+@@ -18,7 +18,6 @@
+    to get peak speed when value = 0.  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ #undef ret
+ #define dest          in0
+@@ -361,4 +360,3 @@ GLOBAL_ENTRY(memset)
+       br.ret.sptk.many rp
+ }
+ END(memset)
+-EXPORT_SYMBOL(memset)
+diff --git a/arch/ia64/lib/strlen.S b/arch/ia64/lib/strlen.S
+index 1a6e17c657b4..e0cdac0a85b8 100644
+--- a/arch/ia64/lib/strlen.S
++++ b/arch/ia64/lib/strlen.S
+@@ -17,7 +17,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ //
+ //
+@@ -191,4 +190,3 @@ GLOBAL_ENTRY(strlen)
+       mov ar.pfs=saved_pfs    // because of ar.ec, restore no matter what
+       br.ret.sptk.many rp     // end of successful recovery code
+ END(strlen)
+-EXPORT_SYMBOL(strlen)
+diff --git a/arch/ia64/lib/strlen_user.S b/arch/ia64/lib/strlen_user.S
+index 9d257684e733..c71eded4285e 100644
+--- a/arch/ia64/lib/strlen_user.S
++++ b/arch/ia64/lib/strlen_user.S
+@@ -16,7 +16,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ //
+ // int strlen_user(char *)
+@@ -197,4 +196,3 @@ GLOBAL_ENTRY(__strlen_user)
+       mov ar.pfs=saved_pfs    // because of ar.ec, restore no matter what
+       br.ret.sptk.many rp
+ END(__strlen_user)
+-EXPORT_SYMBOL(__strlen_user)
+diff --git a/arch/ia64/lib/strncpy_from_user.S b/arch/ia64/lib/strncpy_from_user.S
+index ca9ccf280e2e..a504381f31eb 100644
+--- a/arch/ia64/lib/strncpy_from_user.S
++++ b/arch/ia64/lib/strncpy_from_user.S
+@@ -17,7 +17,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ GLOBAL_ENTRY(__strncpy_from_user)
+       alloc r2=ar.pfs,3,0,0,0
+@@ -43,4 +42,3 @@ GLOBAL_ENTRY(__strncpy_from_user)
+ [.Lexit:]
+       br.ret.sptk.many rp
+ END(__strncpy_from_user)
+-EXPORT_SYMBOL(__strncpy_from_user)
+diff --git a/arch/ia64/lib/strnlen_user.S b/arch/ia64/lib/strnlen_user.S
+index 80a5dfd1d402..d09066b1e49d 100644
+--- a/arch/ia64/lib/strnlen_user.S
++++ b/arch/ia64/lib/strnlen_user.S
+@@ -13,7 +13,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ GLOBAL_ENTRY(__strnlen_user)
+       .prologue
+@@ -44,4 +43,3 @@ GLOBAL_ENTRY(__strnlen_user)
+       mov ar.lc=r16                   // restore ar.lc
+       br.ret.sptk.many rp
+ END(__strnlen_user)
+-EXPORT_SYMBOL(__strnlen_user)
+diff --git a/arch/ia64/lib/xor.S b/arch/ia64/lib/xor.S
+index c83f1c410691..54e3f7eab8e9 100644
+--- a/arch/ia64/lib/xor.S
++++ b/arch/ia64/lib/xor.S
+@@ -14,7 +14,6 @@
+  */
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ GLOBAL_ENTRY(xor_ia64_2)
+       .prologue
+@@ -52,7 +51,6 @@ GLOBAL_ENTRY(xor_ia64_2)
+       mov pr = r29, -1
+       br.ret.sptk.few rp
+ END(xor_ia64_2)
+-EXPORT_SYMBOL(xor_ia64_2)
+ GLOBAL_ENTRY(xor_ia64_3)
+       .prologue
+@@ -93,7 +91,6 @@ GLOBAL_ENTRY(xor_ia64_3)
+       mov pr = r29, -1
+       br.ret.sptk.few rp
+ END(xor_ia64_3)
+-EXPORT_SYMBOL(xor_ia64_3)
+ GLOBAL_ENTRY(xor_ia64_4)
+       .prologue
+@@ -137,7 +134,6 @@ GLOBAL_ENTRY(xor_ia64_4)
+       mov pr = r29, -1
+       br.ret.sptk.few rp
+ END(xor_ia64_4)
+-EXPORT_SYMBOL(xor_ia64_4)
+ GLOBAL_ENTRY(xor_ia64_5)
+       .prologue
+@@ -186,4 +182,3 @@ GLOBAL_ENTRY(xor_ia64_5)
+       mov pr = r29, -1
+       br.ret.sptk.few rp
+ END(xor_ia64_5)
+-EXPORT_SYMBOL(xor_ia64_5)
diff --git a/patches/bugfix/m68k/revert-m68k-move-exports-to-definitions.patch b/patches/bugfix/m68k/revert-m68k-move-exports-to-definitions.patch
new file mode 100644 (file)
index 0000000..844375b
--- /dev/null
@@ -0,0 +1,254 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 1 Dec 2016 23:14:09 +0000
+Subject: Revert "m68k: move exports to definitions"
+Forwarded: not-needed
+
+This reverts commit d13ffb5630443e6112df0263969cbdfc8ab9ab57 because
+symbols exported from assembly don't automatically get modversions (ABI
+hashes).
+---
+ arch/m68k/include/asm/export.h |  3 ---
+ arch/m68k/kernel/Makefile      |  2 +-
+ arch/m68k/kernel/m68k_ksyms.c  | 32 ++++++++++++++++++++++++++++++++
+ arch/m68k/lib/ashldi3.c        |  4 ----
+ arch/m68k/lib/ashrdi3.c        |  4 ----
+ arch/m68k/lib/divsi3.S         |  3 ---
+ arch/m68k/lib/lshrdi3.c        |  4 ----
+ arch/m68k/lib/modsi3.S         |  3 ---
+ arch/m68k/lib/muldi3.c         |  4 ----
+ arch/m68k/lib/mulsi3.S         |  4 ++--
+ arch/m68k/lib/udivsi3.S        |  4 ++--
+ arch/m68k/lib/umodsi3.S        |  4 ++--
+ 12 files changed, 39 insertions(+), 32 deletions(-)
+ delete mode 100644 arch/m68k/include/asm/export.h
+ create mode 100644 arch/m68k/kernel/m68k_ksyms.c
+
+diff --git a/arch/m68k/include/asm/export.h b/arch/m68k/include/asm/export.h
+deleted file mode 100644
+index 0af20f48bd07..000000000000
+--- a/arch/m68k/include/asm/export.h
++++ /dev/null
+@@ -1,3 +0,0 @@
+-#define KSYM_ALIGN 2
+-#define KCRC_ALIGN 2
+-#include <asm-generic/export.h>
+diff --git a/arch/m68k/kernel/Makefile b/arch/m68k/kernel/Makefile
+index 74c898ced8cc..8a1c4d3f91c8 100644
+--- a/arch/m68k/kernel/Makefile
++++ b/arch/m68k/kernel/Makefile
+@@ -13,7 +13,7 @@ extra-$(CONFIG_SUN3X)        := head.o
+ extra-$(CONFIG_SUN3)  := sun3-head.o
+ extra-y                       += vmlinux.lds
+-obj-y := entry.o irq.o module.o process.o ptrace.o
++obj-y := entry.o irq.o m68k_ksyms.o module.o process.o ptrace.o
+ obj-y += setup.o signal.o sys_m68k.o syscalltable.o time.o traps.o
+ obj-$(CONFIG_MMU_MOTOROLA) += ints.o vectors.o
+diff --git a/arch/m68k/kernel/m68k_ksyms.c b/arch/m68k/kernel/m68k_ksyms.c
+new file mode 100644
+index 000000000000..774c1bd59c36
+--- /dev/null
++++ b/arch/m68k/kernel/m68k_ksyms.c
+@@ -0,0 +1,32 @@
++#include <linux/module.h>
++
++asmlinkage long long __ashldi3 (long long, int);
++asmlinkage long long __ashrdi3 (long long, int);
++asmlinkage long long __lshrdi3 (long long, int);
++asmlinkage long long __muldi3 (long long, long long);
++
++/* The following are special because they're not called
++   explicitly (the C compiler generates them).  Fortunately,
++   their interface isn't gonna change any time soon now, so
++   it's OK to leave it out of version control.  */
++EXPORT_SYMBOL(__ashldi3);
++EXPORT_SYMBOL(__ashrdi3);
++EXPORT_SYMBOL(__lshrdi3);
++EXPORT_SYMBOL(__muldi3);
++
++#if defined(CONFIG_CPU_HAS_NO_MULDIV64)
++/*
++ * Simpler 68k and ColdFire parts also need a few other gcc functions.
++ */
++extern long long __divsi3(long long, long long);
++extern long long __modsi3(long long, long long);
++extern long long __mulsi3(long long, long long);
++extern long long __udivsi3(long long, long long);
++extern long long __umodsi3(long long, long long);
++
++EXPORT_SYMBOL(__divsi3);
++EXPORT_SYMBOL(__modsi3);
++EXPORT_SYMBOL(__mulsi3);
++EXPORT_SYMBOL(__udivsi3);
++EXPORT_SYMBOL(__umodsi3);
++#endif
+diff --git a/arch/m68k/lib/ashldi3.c b/arch/m68k/lib/ashldi3.c
+index 8dffd36ec4f2..37234c2df47f 100644
+--- a/arch/m68k/lib/ashldi3.c
++++ b/arch/m68k/lib/ashldi3.c
+@@ -13,9 +13,6 @@ 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. */
+-#include <linux/compiler.h>
+-#include <linux/export.h>
+-
+ #define BITS_PER_UNIT 8
+ typedef                int SItype     __attribute__ ((mode (SI)));
+@@ -58,4 +55,3 @@ __ashldi3 (DItype u, word_type b)
+   return w.ll;
+ }
+-EXPORT_SYMBOL(__ashldi3);
+diff --git a/arch/m68k/lib/ashrdi3.c b/arch/m68k/lib/ashrdi3.c
+index e6565a3ee2c3..1d59345f36c6 100644
+--- a/arch/m68k/lib/ashrdi3.c
++++ b/arch/m68k/lib/ashrdi3.c
+@@ -13,9 +13,6 @@ 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. */
+-#include <linux/compiler.h>
+-#include <linux/export.h>
+-
+ #define BITS_PER_UNIT 8
+ typedef                int SItype     __attribute__ ((mode (SI)));
+@@ -59,4 +56,3 @@ __ashrdi3 (DItype u, word_type b)
+   return w.ll;
+ }
+-EXPORT_SYMBOL(__ashrdi3);
+diff --git a/arch/m68k/lib/divsi3.S b/arch/m68k/lib/divsi3.S
+index 3a2143f51631..2c0ec85ac661 100644
+--- a/arch/m68k/lib/divsi3.S
++++ b/arch/m68k/lib/divsi3.S
+@@ -33,8 +33,6 @@ General Public License for more details. */
+    D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
+ */
+-#include <asm/export.h>
+-
+ /* These are predefined by new versions of GNU cpp.  */
+ #ifndef __USER_LABEL_PREFIX__
+@@ -120,4 +118,3 @@ L2:        movel   d1, sp@-
+ L3:   movel   sp@+, d2
+       rts
+-      EXPORT_SYMBOL(__divsi3)
+diff --git a/arch/m68k/lib/lshrdi3.c b/arch/m68k/lib/lshrdi3.c
+index 039779737c7d..49e1ec8f2cc2 100644
+--- a/arch/m68k/lib/lshrdi3.c
++++ b/arch/m68k/lib/lshrdi3.c
+@@ -13,9 +13,6 @@ 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. */
+-#include <linux/compiler.h>
+-#include <linux/export.h>
+-
+ #define BITS_PER_UNIT 8
+ typedef                int SItype     __attribute__ ((mode (SI)));
+@@ -58,4 +55,3 @@ __lshrdi3 (DItype u, word_type b)
+   return w.ll;
+ }
+-EXPORT_SYMBOL(__lshrdi3);
+diff --git a/arch/m68k/lib/modsi3.S b/arch/m68k/lib/modsi3.S
+index 1c967649a4e0..1d9e0efdf31d 100644
+--- a/arch/m68k/lib/modsi3.S
++++ b/arch/m68k/lib/modsi3.S
+@@ -33,8 +33,6 @@ General Public License for more details. */
+    D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
+ */
+-#include <asm/export.h>
+-
+ /* These are predefined by new versions of GNU cpp.  */
+ #ifndef __USER_LABEL_PREFIX__
+@@ -108,4 +106,3 @@ SYM (__modsi3):
+       movel   d1, d0
+       rts
+-      EXPORT_SYMBOL(__modsi3)
+diff --git a/arch/m68k/lib/muldi3.c b/arch/m68k/lib/muldi3.c
+index 6459af5b2af0..9006d15b8721 100644
+--- a/arch/m68k/lib/muldi3.c
++++ b/arch/m68k/lib/muldi3.c
+@@ -14,9 +14,6 @@ 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. */
+-#include <linux/compiler.h>
+-#include <linux/export.h>
+-
+ #ifdef CONFIG_CPU_HAS_NO_MULDIV64
+ #define SI_TYPE_SIZE 32
+@@ -93,4 +90,3 @@ __muldi3 (DItype u, DItype v)
+   return w.ll;
+ }
+-EXPORT_SYMBOL(__muldi3);
+diff --git a/arch/m68k/lib/mulsi3.S b/arch/m68k/lib/mulsi3.S
+index 855675e69a8a..c39ad4e738e9 100644
+--- a/arch/m68k/lib/mulsi3.S
++++ b/arch/m68k/lib/mulsi3.S
+@@ -32,7 +32,7 @@ General Public License for more details. */
+    Some of this code comes from MINIX, via the folks at ericsson.
+    D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
+ */
+-#include <asm/export.h>
++
+ /* These are predefined by new versions of GNU cpp.  */
+ #ifndef __USER_LABEL_PREFIX__
+@@ -102,4 +102,4 @@ SYM (__mulsi3):
+       addl    d1, d0
+       rts
+-      EXPORT_SYMBOL(__mulsi3)
++
+diff --git a/arch/m68k/lib/udivsi3.S b/arch/m68k/lib/udivsi3.S
+index 78440ae513bf..35a5446572a5 100644
+--- a/arch/m68k/lib/udivsi3.S
++++ b/arch/m68k/lib/udivsi3.S
+@@ -32,7 +32,7 @@ General Public License for more details. */
+    Some of this code comes from MINIX, via the folks at ericsson.
+    D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
+ */
+-#include <asm/export.h>
++
+ /* These are predefined by new versions of GNU cpp.  */
+ #ifndef __USER_LABEL_PREFIX__
+@@ -154,4 +154,4 @@ L2:        subql   IMM (1),d4
+       unlk    a6              | and return
+       rts
+ #endif /* __mcf5200__ || __mcoldfire__ */
+-      EXPORT_SYMBOL(__udivsi3)
++
+diff --git a/arch/m68k/lib/umodsi3.S b/arch/m68k/lib/umodsi3.S
+index b6fd11f58948..099da514a8fd 100644
+--- a/arch/m68k/lib/umodsi3.S
++++ b/arch/m68k/lib/umodsi3.S
+@@ -32,7 +32,7 @@ General Public License for more details. */
+    Some of this code comes from MINIX, via the folks at ericsson.
+    D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
+ */
+-#include <asm/export.h>
++
+ /* These are predefined by new versions of GNU cpp.  */
+ #ifndef __USER_LABEL_PREFIX__
+@@ -105,4 +105,4 @@ SYM (__umodsi3):
+       subl    d0, d1          /* d1 = a - (a/b)*b */
+       movel   d1, d0
+       rts
+-      EXPORT_SYMBOL(__umodsi3)
++
diff --git a/patches/bugfix/powerpc/powerpc-fix-missing-crcs-add-yet-more-asm-prototypes.patch b/patches/bugfix/powerpc/powerpc-fix-missing-crcs-add-yet-more-asm-prototypes.patch
new file mode 100644 (file)
index 0000000..be736e5
--- /dev/null
@@ -0,0 +1,27 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 2 Dec 2016 01:26:54 +0000
+Subject: powerpc: Fix missing CRCs, add yet more asm-prototypes.h declarations
+Forwarded: https://lkml.kernel.org/r/20161202023837.GK2697@decadent.org.uk
+
+Add declarations for:
+- __mfdcr, __mtdcr (if CONFIG_PPC_DCR_NATIVE=y; through <asm/dcr.h>)
+- switch_mmu_context (if CONFIG_PPC_BOOK3S_64=n; through <asm/mmu_context.h>)
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/powerpc/include/asm/asm-prototypes.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/powerpc/include/asm/asm-prototypes.h b/arch/powerpc/include/asm/asm-prototypes.h
+index e0baba1535e6..ba0225ff38f8 100644
+--- a/arch/powerpc/include/asm/asm-prototypes.h
++++ b/arch/powerpc/include/asm/asm-prototypes.h
+@@ -18,6 +18,8 @@
+ #include <asm/checksum.h>
+ #include <asm/uaccess.h>
+ #include <asm/epapr_hcalls.h>
++#include <asm/dcr.h>
++#include <asm/mmu_context.h>
+ #include <uapi/asm/ucontext.h>
diff --git a/patches/bugfix/powerpc/powerpc-remove-mac-on-linux-hooks.patch b/patches/bugfix/powerpc/powerpc-remove-mac-on-linux-hooks.patch
new file mode 100644 (file)
index 0000000..7b23343
--- /dev/null
@@ -0,0 +1,53 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 2 Dec 2016 02:27:50 +0000
+Subject: powerpc: Remove Mac-on-Linux hooks
+Forwarded: https://lkml.kernel.org/r/20161202023552.GJ2697@decadent.org.uk
+
+The symbols exported for use by MOL aren't getting CRCs and I was
+about to fix that.  But MOL is dead upstream, and the latest work on
+it was to make it use KVM instead of its own kernel module.  So remove
+them instead.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/powerpc/kernel/head_32.S | 7 +------
+ arch/powerpc/mm/hash_low_32.S | 1 -
+ 2 files changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
+index 9d963547d243..87998430cd9b 100644
+--- a/arch/powerpc/kernel/head_32.S
++++ b/arch/powerpc/kernel/head_32.S
+@@ -735,11 +735,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_NEED_DTLB_SW_LRU)
+       EXCEPTION(0x2c00, Trap_2c, unknown_exception, EXC_XFER_EE)
+       EXCEPTION(0x2d00, Trap_2d, unknown_exception, EXC_XFER_EE)
+       EXCEPTION(0x2e00, Trap_2e, unknown_exception, EXC_XFER_EE)
+-      EXCEPTION(0x2f00, MOLTrampoline, unknown_exception, EXC_XFER_EE_LITE)
+-
+-      .globl mol_trampoline
+-      .set mol_trampoline, i0x2f00
+-      EXPORT_SYMBOL(mol_trampoline)
++      EXCEPTION(0x2f00, Trap_2f, unknown_exception, EXC_XFER_EE)
+       . = 0x3000
+@@ -1289,7 +1285,6 @@ intercept_table:
+       .long 0, 0, 0, 0, 0, 0, 0, 0
+       .long 0, 0, 0, 0, 0, 0, 0, 0
+       .long 0, 0, 0, 0, 0, 0, 0, 0
+-EXPORT_SYMBOL(intercept_table)
+ /* Room for two PTE pointers, usually the kernel and current user pointers
+  * to their respective root page table.
+diff --git a/arch/powerpc/mm/hash_low_32.S b/arch/powerpc/mm/hash_low_32.S
+index 09cc50c8dace..cddf14f60bf3 100644
+--- a/arch/powerpc/mm/hash_low_32.S
++++ b/arch/powerpc/mm/hash_low_32.S
+@@ -34,7 +34,6 @@
+       .globl mmu_hash_lock
+ mmu_hash_lock:
+       .space  4
+-EXPORT_SYMBOL(mmu_hash_lock)
+ #endif /* CONFIG_SMP */
+ /*
diff --git a/patches/bugfix/s390/revert-s390-move-exports-to-definitions.patch b/patches/bugfix/s390/revert-s390-move-exports-to-definitions.patch
new file mode 100644 (file)
index 0000000..75cf4be
--- /dev/null
@@ -0,0 +1,141 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 1 Dec 2016 23:13:38 +0000
+Subject: Revert "s390: move exports to definitions"
+Forwarded: not-needed
+
+This reverts commit 711f5df7bf3ae7657e15edf76d671042c051ce95 because
+symbols exported from assembly don't automatically get modversions (ABI
+hashes).
+---
+ arch/s390/include/asm/Kbuild  |  1 -
+ arch/s390/kernel/Makefile     |  2 +-
+ arch/s390/kernel/entry.S      |  6 ------
+ arch/s390/kernel/mcount.S     |  3 ---
+ arch/s390/kernel/s390_ksyms.c | 15 +++++++++++++++
+ arch/s390/lib/mem.S           |  3 ---
+ 6 files changed, 16 insertions(+), 14 deletions(-)
+ create mode 100644 arch/s390/kernel/s390_ksyms.c
+
+diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild
+index 20f196b82a6e..9043d2e1e2ae 100644
+--- a/arch/s390/include/asm/Kbuild
++++ b/arch/s390/include/asm/Kbuild
+@@ -1,7 +1,6 @@
+ generic-y += clkdev.h
+-generic-y += export.h
+ generic-y += irq_work.h
+ generic-y += mcs_spinlock.h
+ generic-y += mm-arch-hooks.h
+diff --git a/arch/s390/kernel/Makefile b/arch/s390/kernel/Makefile
+index 1f0fe98f6db9..72ccc41444dc 100644
+--- a/arch/s390/kernel/Makefile
++++ b/arch/s390/kernel/Makefile
+@@ -61,7 +61,7 @@ obj-y        += entry.o reipl.o relocate_kernel.o
+ extra-y                               += head.o head64.o vmlinux.lds
+-obj-$(CONFIG_MODULES)         += module.o
++obj-$(CONFIG_MODULES)         += s390_ksyms.o module.o
+ obj-$(CONFIG_SMP)             += smp.o
+ obj-$(CONFIG_SCHED_TOPOLOGY)  += topology.o
+ obj-$(CONFIG_HIBERNATION)     += suspend.o swsusp.o
+diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
+index 49a30737adde..c51650a1ed16 100644
+--- a/arch/s390/kernel/entry.S
++++ b/arch/s390/kernel/entry.S
+@@ -23,7 +23,6 @@
+ #include <asm/vx-insn.h>
+ #include <asm/setup.h>
+ #include <asm/nmi.h>
+-#include <asm/export.h>
+ __PT_R0      =        __PT_GPRS
+ __PT_R1      =        __PT_GPRS + 8
+@@ -260,8 +259,6 @@ sie_exit:
+       EX_TABLE(.Lrewind_pad,.Lsie_fault)
+       EX_TABLE(sie_exit,.Lsie_fault)
+-EXPORT_SYMBOL(sie64a)
+-EXPORT_SYMBOL(sie_exit)
+ #endif
+ /*
+@@ -828,9 +825,6 @@ ENTRY(save_fpu_regs)
+       oi      __LC_CPU_FLAGS+7,_CIF_FPU
+       br      %r14
+ .Lsave_fpu_regs_end:
+-#if IS_ENABLED(CONFIG_KVM)
+-EXPORT_SYMBOL(save_fpu_regs)
+-#endif
+ /*
+  * Load floating-point controls and floating-point or vector registers.
+diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S
+index 9a17e4475d27..e499370fbccb 100644
+--- a/arch/s390/kernel/mcount.S
++++ b/arch/s390/kernel/mcount.S
+@@ -9,7 +9,6 @@
+ #include <asm/asm-offsets.h>
+ #include <asm/ftrace.h>
+ #include <asm/ptrace.h>
+-#include <asm/export.h>
+       .section .kprobes.text, "ax"
+@@ -24,8 +23,6 @@ ENTRY(ftrace_stub)
+ ENTRY(_mcount)
+       br      %r14
+-EXPORT_SYMBOL(_mcount)
+-
+ ENTRY(ftrace_caller)
+       .globl  ftrace_regs_caller
+       .set    ftrace_regs_caller,ftrace_caller
+diff --git a/arch/s390/kernel/s390_ksyms.c b/arch/s390/kernel/s390_ksyms.c
+new file mode 100644
+index 000000000000..e67453b73c3c
+--- /dev/null
++++ b/arch/s390/kernel/s390_ksyms.c
+@@ -0,0 +1,15 @@
++#include <linux/module.h>
++#include <linux/kvm_host.h>
++#include <asm/fpu/api.h>
++#include <asm/ftrace.h>
++
++#ifdef CONFIG_FUNCTION_TRACER
++EXPORT_SYMBOL(_mcount);
++#endif
++#if IS_ENABLED(CONFIG_KVM)
++EXPORT_SYMBOL(sie64a);
++EXPORT_SYMBOL(sie_exit);
++EXPORT_SYMBOL(save_fpu_regs);
++#endif
++EXPORT_SYMBOL(memcpy);
++EXPORT_SYMBOL(memset);
+diff --git a/arch/s390/lib/mem.S b/arch/s390/lib/mem.S
+index be9fa65bfac4..c6d553e85ab1 100644
+--- a/arch/s390/lib/mem.S
++++ b/arch/s390/lib/mem.S
+@@ -5,7 +5,6 @@
+  */
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+ /*
+  * memset implementation
+@@ -61,7 +60,6 @@ ENTRY(memset)
+       xc      0(1,%r1),0(%r1)
+ .Lmemset_mvc:
+       mvc     1(1,%r1),0(%r1)
+-EXPORT_SYMBOL(memset)
+ /*
+  * memcpy implementation
+@@ -88,4 +86,3 @@ ENTRY(memcpy)
+       j       .Lmemcpy_rest
+ .Lmemcpy_mvc:
+       mvc     0(1,%r1),0(%r3)
+-EXPORT_SYMBOL(memcpy)
diff --git a/patches/bugfix/sparc/revert-sparc-move-exports-to-definitions.patch b/patches/bugfix/sparc/revert-sparc-move-exports-to-definitions.patch
new file mode 100644 (file)
index 0000000..59f634c
--- /dev/null
@@ -0,0 +1,1291 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 12 Jan 2017 00:08:36 +0000
+Subject: Revert "sparc: move exports to definitions"
+Forwarded: not-needed
+
+This reverts commit d3867f0483103b8ff7edfdea3ef1981c03d96891 because
+symbols exported from assembly don't automatically get modversions (ABI
+hashes).
+
+Commit 70a6fcf3283a "[sparc] unify 32bit and 64bit string.h" removed
+the export of __memmove; don't try to export it again.  It also
+completely disabled declaration of prototypes of memscan, memcpy and
+memset, which are defined as macros.  gcc will still generate implicit
+calls to memcpy and memset, so restore both exports and prototypes for
+them.  Don't restore the export of memscan.
+
+Commit aa95ce361ed9 "sparc64: Delete __ret_efault." did what it says;
+don't try to export that symbol.
+---
+ arch/sparc/include/asm/Kbuild      |   1 -
+ arch/sparc/kernel/Makefile         |   2 +-
+ arch/sparc/kernel/entry.S          |   3 -
+ arch/sparc/kernel/head_32.S        |   3 -
+ arch/sparc/kernel/head_64.S        |   6 +-
+ arch/sparc/kernel/helpers.S        |   2 -
+ arch/sparc/kernel/hvcalls.S        |   5 --
+ arch/sparc/kernel/sparc_ksyms.c    |  12 ---
+ arch/sparc/kernel/sparc_ksyms_32.c |  31 +++++++
+ arch/sparc/kernel/sparc_ksyms_64.c |  52 +++++++++++
+ arch/sparc/lib/Makefile            |   1 +
+ arch/sparc/lib/U1memcpy.S          |   2 -
+ arch/sparc/lib/VISsave.S           |   2 -
+ arch/sparc/lib/ashldi3.S           |   2 -
+ arch/sparc/lib/ashrdi3.S           |   2 -
+ arch/sparc/lib/atomic_64.S         |  16 +---
+ arch/sparc/lib/bitops.S            |   7 --
+ arch/sparc/lib/blockops.S          |   3 -
+ arch/sparc/lib/bzero.S             |   4 -
+ arch/sparc/lib/checksum_32.S       |   3 -
+ arch/sparc/lib/checksum_64.S       |   2 -
+ arch/sparc/lib/clear_page.S        |   3 -
+ arch/sparc/lib/copy_in_user.S      |   2 -
+ arch/sparc/lib/copy_page.S         |   2 -
+ arch/sparc/lib/copy_user.S         |   2 -
+ arch/sparc/lib/csum_copy.S         |   3 -
+ arch/sparc/lib/divdi3.S            |   2 -
+ arch/sparc/lib/ffs.S               |   3 -
+ arch/sparc/lib/hweight.S           |   5 --
+ arch/sparc/lib/ipcsum.S            |   2 -
+ arch/sparc/lib/ksyms.c             | 173 +++++++++++++++++++++++++++++++++++++
+ arch/sparc/lib/locks.S             |   5 --
+ arch/sparc/lib/lshrdi3.S           |   2 -
+ arch/sparc/lib/mcount.S            |   2 -
+ arch/sparc/lib/memcmp.S            |   2 -
+ arch/sparc/lib/memcpy.S            |   3 -
+ arch/sparc/lib/memmove.S           |   2 -
+ arch/sparc/lib/memscan_32.S        |   4 -
+ arch/sparc/lib/memscan_64.S        |   4 -
+ arch/sparc/lib/memset.S            |   3 -
+ arch/sparc/lib/muldi3.S            |   2 -
+ arch/sparc/lib/strlen.S            |   2 -
+ arch/sparc/lib/strncmp_32.S        |   2 -
+ arch/sparc/lib/strncmp_64.S        |   2 -
+ arch/sparc/lib/xor.S               |   9 --
+ 45 files changed, 263 insertions(+), 139 deletions(-)
+ delete mode 100644 arch/sparc/kernel/sparc_ksyms.c
+ create mode 100644 arch/sparc/kernel/sparc_ksyms_32.c
+ create mode 100644 arch/sparc/kernel/sparc_ksyms_64.c
+ create mode 100644 arch/sparc/lib/ksyms.c
+
+--- a/arch/sparc/include/asm/Kbuild
++++ b/arch/sparc/include/asm/Kbuild
+@@ -6,7 +6,6 @@ generic-y += cputime.h
+ generic-y += div64.h
+ generic-y += emergency-restart.h
+ generic-y += exec.h
+-generic-y += export.h
+ generic-y += irq_regs.h
+ generic-y += irq_work.h
+ generic-y += linkage.h
+--- a/arch/sparc/kernel/Makefile
++++ b/arch/sparc/kernel/Makefile
+@@ -86,7 +86,7 @@ obj-y                     += auxio_$(BIT
+ obj-$(CONFIG_SUN_PM)      += apc.o pmc.o
+ obj-$(CONFIG_MODULES)     += module.o
+-obj-$(CONFIG_MODULES)     += sparc_ksyms.o
++obj-$(CONFIG_MODULES)     += sparc_ksyms_$(BITS).o
+ obj-$(CONFIG_SPARC_LED)   += led.o
+ obj-$(CONFIG_KGDB)        += kgdb_$(BITS).o
+--- a/arch/sparc/kernel/entry.S
++++ b/arch/sparc/kernel/entry.S
+@@ -29,7 +29,6 @@
+ #include <asm/unistd.h>
+ #include <asm/asmmacro.h>
+-#include <asm/export.h>
+ #define curptr      g6
+@@ -1208,8 +1207,6 @@ delay_continue:
+       
+       ret
+       restore
+-EXPORT_SYMBOL(__udelay)
+-EXPORT_SYMBOL(__ndelay)
+       /* Handle a software breakpoint */
+       /* We have to inform parent that child has stopped */
+--- a/arch/sparc/kernel/head_32.S
++++ b/arch/sparc/kernel/head_32.S
+@@ -24,7 +24,6 @@
+ #include <asm/thread_info.h>  /* TI_UWINMASK */
+ #include <asm/errno.h>
+ #include <asm/pgtsrmmu.h>     /* SRMMU_PGDIR_SHIFT */
+-#include <asm/export.h>
+       .data
+ /* The following are used with the prom_vector node-ops to figure out
+@@ -61,7 +60,6 @@ sun4e_notsup:
+  */
+       .globl empty_zero_page
+ empty_zero_page:      .skip PAGE_SIZE
+-EXPORT_SYMBOL(empty_zero_page)
+       .global root_flags
+       .global ram_flags
+@@ -815,4 +813,3 @@ lvl14_save:
+ __ret_efault:
+         ret
+          restore %g0, -EFAULT, %o0
+-EXPORT_SYMBOL(__ret_efault)
+--- a/arch/sparc/kernel/head_64.S
++++ b/arch/sparc/kernel/head_64.S
+@@ -32,8 +32,7 @@
+ #include <asm/estate.h>
+ #include <asm/sfafsr.h>
+ #include <asm/unistd.h>
+-#include <asm/export.h>
+-
++      
+ /* This section from from _start to sparc64_boot_end should fit into
+  * 0x0000000000404000 to 0x0000000000408000.
+  */
+@@ -144,7 +143,6 @@ prom_cpu_compatible:
+       .skip   64
+ prom_root_node:
+       .word   0
+-EXPORT_SYMBOL(prom_root_node)
+ prom_mmu_ihandle_cache:
+       .word   0
+ prom_boot_mapped_pc:
+@@ -160,7 +158,6 @@ is_sun4v:
+       .word   0
+ sun4v_chip_type:
+       .word   SUN4V_CHIP_INVALID
+-EXPORT_SYMBOL(sun4v_chip_type)
+ 1:
+       rd      %pc, %l0
+@@ -923,7 +920,6 @@ swapper_4m_tsb:
+       .globl  prom_tba, tlb_type
+ prom_tba:     .xword  0
+ tlb_type:     .word   0       /* Must NOT end up in BSS */
+-EXPORT_SYMBOL(tlb_type)
+       .section        ".fixup",#alloc,#execinstr
+ ENTRY(__retl_efault)
+--- a/arch/sparc/kernel/helpers.S
++++ b/arch/sparc/kernel/helpers.S
+@@ -15,7 +15,6 @@ __flushw_user:
+ 2:    retl
+        nop
+       .size   __flushw_user,.-__flushw_user
+-EXPORT_SYMBOL(__flushw_user)
+       /* Flush %fp and %i7 to the stack for all register
+        * windows active inside of the cpu.  This allows
+@@ -62,4 +61,3 @@ real_hard_smp_processor_id:
+       .size           hard_smp_processor_id,.-hard_smp_processor_id
+ #endif
+       .size           real_hard_smp_processor_id,.-real_hard_smp_processor_id
+-EXPORT_SYMBOL_GPL(real_hard_smp_processor_id)
+--- a/arch/sparc/kernel/hvcalls.S
++++ b/arch/sparc/kernel/hvcalls.S
+@@ -343,7 +343,6 @@ ENTRY(sun4v_mach_set_watchdog)
+ 0:    retl
+        nop
+ ENDPROC(sun4v_mach_set_watchdog)
+-EXPORT_SYMBOL(sun4v_mach_set_watchdog)
+       /* No inputs and does not return.  */
+ ENTRY(sun4v_mach_sir)
+@@ -777,7 +776,6 @@ ENTRY(sun4v_niagara_getperf)
+       retl
+        nop
+ ENDPROC(sun4v_niagara_getperf)
+-EXPORT_SYMBOL(sun4v_niagara_getperf)
+ ENTRY(sun4v_niagara_setperf)
+       mov     HV_FAST_SET_PERFREG, %o5
+@@ -785,7 +783,6 @@ ENTRY(sun4v_niagara_setperf)
+       retl
+        nop
+ ENDPROC(sun4v_niagara_setperf)
+-EXPORT_SYMBOL(sun4v_niagara_setperf)
+ ENTRY(sun4v_niagara2_getperf)
+       mov     %o0, %o4
+@@ -795,7 +792,6 @@ ENTRY(sun4v_niagara2_getperf)
+       retl
+        nop
+ ENDPROC(sun4v_niagara2_getperf)
+-EXPORT_SYMBOL(sun4v_niagara2_getperf)
+ ENTRY(sun4v_niagara2_setperf)
+       mov     HV_FAST_N2_SET_PERFREG, %o5
+@@ -803,7 +799,6 @@ ENTRY(sun4v_niagara2_setperf)
+       retl
+        nop
+ ENDPROC(sun4v_niagara2_setperf)
+-EXPORT_SYMBOL(sun4v_niagara2_setperf)
+ ENTRY(sun4v_reboot_data_set)
+       mov     HV_FAST_REBOOT_DATA_SET, %o5
+--- a/arch/sparc/kernel/sparc_ksyms.c
++++ /dev/null
+@@ -1,12 +0,0 @@
+-/*
+- * arch/sparc/kernel/ksyms.c: Sparc specific ksyms support.
+- *
+- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
+- * Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be)
+- */
+-
+-#include <linux/init.h>
+-#include <linux/export.h>
+-
+-/* This is needed only for drivers/sbus/char/openprom.c */
+-EXPORT_SYMBOL(saved_command_line);
+--- /dev/null
++++ b/arch/sparc/kernel/sparc_ksyms_32.c
+@@ -0,0 +1,31 @@
++/*
++ * arch/sparc/kernel/ksyms.c: Sparc specific ksyms support.
++ *
++ * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
++ * Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be)
++ */
++
++#include <linux/module.h>
++
++#include <asm/pgtable.h>
++#include <asm/uaccess.h>
++#include <asm/delay.h>
++#include <asm/head.h>
++#include <asm/dma.h>
++
++struct poll {
++      int fd;
++      short events;
++      short revents;
++};
++
++/* from entry.S */
++EXPORT_SYMBOL(__udelay);
++EXPORT_SYMBOL(__ndelay);
++
++/* from head_32.S */
++EXPORT_SYMBOL(__ret_efault);
++EXPORT_SYMBOL(empty_zero_page);
++
++/* Exporting a symbol from /init/main.c */
++EXPORT_SYMBOL(saved_command_line);
+--- /dev/null
++++ b/arch/sparc/kernel/sparc_ksyms_64.c
+@@ -0,0 +1,52 @@
++/* arch/sparc64/kernel/sparc64_ksyms.c: Sparc64 specific ksyms support.
++ *
++ * Copyright (C) 1996, 2007 David S. Miller (davem@davemloft.net)
++ * Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be)
++ * Copyright (C) 1999 Jakub Jelinek (jj@ultra.linux.cz)
++ */
++
++#include <linux/export.h>
++#include <linux/pci.h>
++#include <linux/bitops.h>
++
++#include <asm/cpudata.h>
++#include <asm/uaccess.h>
++#include <asm/spitfire.h>
++#include <asm/oplib.h>
++#include <asm/hypervisor.h>
++#include <asm/cacheflush.h>
++
++struct poll {
++      int fd;
++      short events;
++      short revents;
++};
++
++/* from helpers.S */
++EXPORT_SYMBOL(__flushw_user);
++EXPORT_SYMBOL_GPL(real_hard_smp_processor_id);
++
++/* from head_64.S */
++EXPORT_SYMBOL(tlb_type);
++EXPORT_SYMBOL(sun4v_chip_type);
++EXPORT_SYMBOL(prom_root_node);
++
++/* from hvcalls.S */
++EXPORT_SYMBOL(sun4v_niagara_getperf);
++EXPORT_SYMBOL(sun4v_niagara_setperf);
++EXPORT_SYMBOL(sun4v_niagara2_getperf);
++EXPORT_SYMBOL(sun4v_niagara2_setperf);
++EXPORT_SYMBOL(sun4v_mach_set_watchdog);
++
++/* from hweight.S */
++EXPORT_SYMBOL(__arch_hweight8);
++EXPORT_SYMBOL(__arch_hweight16);
++EXPORT_SYMBOL(__arch_hweight32);
++EXPORT_SYMBOL(__arch_hweight64);
++
++/* from ffs_ffz.S */
++EXPORT_SYMBOL(ffs);
++EXPORT_SYMBOL(__ffs);
++
++/* Exporting a symbol from /init/main.c */
++EXPORT_SYMBOL(saved_command_line);
+--- a/arch/sparc/lib/Makefile
++++ b/arch/sparc/lib/Makefile
+@@ -43,4 +43,5 @@ lib-$(CONFIG_SPARC64) += mcount.o ipcsum
+ obj-$(CONFIG_SPARC64) += iomap.o
+ obj-$(CONFIG_SPARC32) += atomic32.o ucmpdi2.o
++obj-y                 += ksyms.o
+ obj-$(CONFIG_SPARC64) += PeeCeeI.o
+--- a/arch/sparc/lib/U1memcpy.S
++++ b/arch/sparc/lib/U1memcpy.S
+@@ -8,7 +8,6 @@
+ #include <linux/linkage.h>
+ #include <asm/visasm.h>
+ #include <asm/asi.h>
+-#include <asm/export.h>
+ #define GLOBAL_SPARE  g7
+ #else
+ #define GLOBAL_SPARE  g5
+@@ -681,4 +680,3 @@ FUNC_NAME:         /* %o0=dst, %o1=src, %o2=len
+        mov            EX_RETVAL(%o4), %o0
+       .size           FUNC_NAME, .-FUNC_NAME
+-EXPORT_SYMBOL(FUNC_NAME)
+--- a/arch/sparc/lib/VISsave.S
++++ b/arch/sparc/lib/VISsave.S
+@@ -13,7 +13,6 @@
+ #include <asm/ptrace.h>
+ #include <asm/visasm.h>
+ #include <asm/thread_info.h>
+-#include <asm/export.h>
+       /* On entry: %o5=current FPRS value, %g7 is callers address */
+       /* May clobber %o5, %g1, %g2, %g3, %g7, %icc, %xcc */
+@@ -80,4 +79,3 @@ vis1:        ldub            [%g6 + TI_FPSAVED], %g3
+ 80:   jmpl            %g7 + %g0, %g0
+        nop
+ ENDPROC(VISenter)
+-EXPORT_SYMBOL(VISenter)
+--- a/arch/sparc/lib/ashldi3.S
++++ b/arch/sparc/lib/ashldi3.S
+@@ -6,7 +6,6 @@
+  */
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+       .text
+ ENTRY(__ashldi3)
+@@ -34,4 +33,3 @@ ENTRY(__ashldi3)
+       retl
+        nop
+ ENDPROC(__ashldi3)
+-EXPORT_SYMBOL(__ashldi3)
+--- a/arch/sparc/lib/ashrdi3.S
++++ b/arch/sparc/lib/ashrdi3.S
+@@ -6,7 +6,6 @@
+  */
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+       .text
+ ENTRY(__ashrdi3)
+@@ -36,4 +35,3 @@ ENTRY(__ashrdi3)
+       jmpl    %o7 + 8, %g0
+        nop
+ ENDPROC(__ashrdi3)
+-EXPORT_SYMBOL(__ashrdi3)
+--- a/arch/sparc/lib/atomic_64.S
++++ b/arch/sparc/lib/atomic_64.S
+@@ -6,7 +6,6 @@
+ #include <linux/linkage.h>
+ #include <asm/asi.h>
+ #include <asm/backoff.h>
+-#include <asm/export.h>
+       .text
+@@ -30,7 +29,6 @@ ENTRY(atomic_##op) /* %o0 = increment, %
+        nop;                                                           \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+ ENDPROC(atomic_##op);                                                 \
+-EXPORT_SYMBOL(atomic_##op);
+ #define ATOMIC_OP_RETURN(op)                                          \
+ ENTRY(atomic_##op##_return) /* %o0 = increment, %o1 = atomic_ptr */   \
+@@ -44,8 +42,7 @@ ENTRY(atomic_##op##_return) /* %o0 = inc
+       retl;                                                           \
+        sra    %g1, 0, %o0;                                            \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+-ENDPROC(atomic_##op##_return);                                                \
+-EXPORT_SYMBOL(atomic_##op##_return);
++ENDPROC(atomic_##op##_return);
+ #define ATOMIC_FETCH_OP(op)                                           \
+ ENTRY(atomic_fetch_##op) /* %o0 = increment, %o1 = atomic_ptr */      \
+@@ -59,8 +56,7 @@ ENTRY(atomic_fetch_##op) /* %o0 = increm
+       retl;                                                           \
+        sra    %g1, 0, %o0;                                            \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+-ENDPROC(atomic_fetch_##op);                                           \
+-EXPORT_SYMBOL(atomic_fetch_##op);
++ENDPROC(atomic_fetch_##op);
+ #define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op) ATOMIC_FETCH_OP(op)
+@@ -92,7 +88,6 @@ ENTRY(atomic64_##op) /* %o0 = increment,
+        nop;                                                           \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+ ENDPROC(atomic64_##op);                                                       \
+-EXPORT_SYMBOL(atomic64_##op);
+ #define ATOMIC64_OP_RETURN(op)                                                \
+ ENTRY(atomic64_##op##_return) /* %o0 = increment, %o1 = atomic_ptr */ \
+@@ -106,8 +101,7 @@ ENTRY(atomic64_##op##_return) /* %o0 = i
+       retl;                                                           \
+        op     %g1, %o0, %o0;                                          \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+-ENDPROC(atomic64_##op##_return);                                      \
+-EXPORT_SYMBOL(atomic64_##op##_return);
++ENDPROC(atomic64_##op##_return);
+ #define ATOMIC64_FETCH_OP(op)                                         \
+ ENTRY(atomic64_fetch_##op) /* %o0 = increment, %o1 = atomic_ptr */    \
+@@ -121,8 +115,7 @@ ENTRY(atomic64_fetch_##op) /* %o0 = incr
+       retl;                                                           \
+        mov    %g1, %o0;                                               \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+-ENDPROC(atomic64_fetch_##op);                                         \
+-EXPORT_SYMBOL(atomic64_fetch_##op);
++ENDPROC(atomic64_fetch_##op);
+ #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op) ATOMIC64_FETCH_OP(op)
+@@ -154,4 +147,3 @@ ENTRY(atomic64_dec_if_positive) /* %o0 =
+        sub    %g1, 1, %o0
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b)
+ ENDPROC(atomic64_dec_if_positive)
+-EXPORT_SYMBOL(atomic64_dec_if_positive)
+--- a/arch/sparc/lib/bitops.S
++++ b/arch/sparc/lib/bitops.S
+@@ -6,7 +6,6 @@
+ #include <linux/linkage.h>
+ #include <asm/asi.h>
+ #include <asm/backoff.h>
+-#include <asm/export.h>
+       .text
+@@ -30,7 +29,6 @@ ENTRY(test_and_set_bit)      /* %o0=nr, %o1=a
+        nop
+ 2:    BACKOFF_SPIN(%o3, %o4, 1b)
+ ENDPROC(test_and_set_bit)
+-EXPORT_SYMBOL(test_and_set_bit)
+ ENTRY(test_and_clear_bit) /* %o0=nr, %o1=addr */
+       BACKOFF_SETUP(%o3)
+@@ -52,7 +50,6 @@ ENTRY(test_and_clear_bit) /* %o0=nr, %o1
+        nop
+ 2:    BACKOFF_SPIN(%o3, %o4, 1b)
+ ENDPROC(test_and_clear_bit)
+-EXPORT_SYMBOL(test_and_clear_bit)
+ ENTRY(test_and_change_bit) /* %o0=nr, %o1=addr */
+       BACKOFF_SETUP(%o3)
+@@ -74,7 +71,6 @@ ENTRY(test_and_change_bit) /* %o0=nr, %o
+        nop
+ 2:    BACKOFF_SPIN(%o3, %o4, 1b)
+ ENDPROC(test_and_change_bit)
+-EXPORT_SYMBOL(test_and_change_bit)
+ ENTRY(set_bit) /* %o0=nr, %o1=addr */
+       BACKOFF_SETUP(%o3)
+@@ -94,7 +90,6 @@ ENTRY(set_bit) /* %o0=nr, %o1=addr */
+        nop
+ 2:    BACKOFF_SPIN(%o3, %o4, 1b)
+ ENDPROC(set_bit)
+-EXPORT_SYMBOL(set_bit)
+ ENTRY(clear_bit) /* %o0=nr, %o1=addr */
+       BACKOFF_SETUP(%o3)
+@@ -114,7 +109,6 @@ ENTRY(clear_bit) /* %o0=nr, %o1=addr */
+        nop
+ 2:    BACKOFF_SPIN(%o3, %o4, 1b)
+ ENDPROC(clear_bit)
+-EXPORT_SYMBOL(clear_bit)
+ ENTRY(change_bit) /* %o0=nr, %o1=addr */
+       BACKOFF_SETUP(%o3)
+@@ -134,4 +128,3 @@ ENTRY(change_bit) /* %o0=nr, %o1=addr */
+        nop
+ 2:    BACKOFF_SPIN(%o3, %o4, 1b)
+ ENDPROC(change_bit)
+-EXPORT_SYMBOL(change_bit)
+--- a/arch/sparc/lib/blockops.S
++++ b/arch/sparc/lib/blockops.S
+@@ -6,7 +6,6 @@
+ #include <linux/linkage.h>
+ #include <asm/page.h>
+-#include <asm/export.h>
+       /* Zero out 64 bytes of memory at (buf + offset).
+        * Assumes %g1 contains zero.
+@@ -65,7 +64,6 @@ ENTRY(bzero_1page)
+       retl
+        nop
+ ENDPROC(bzero_1page)
+-EXPORT_SYMBOL(bzero_1page)
+ ENTRY(__copy_1page)
+ /* NOTE: If you change the number of insns of this routine, please check
+@@ -89,4 +87,3 @@ ENTRY(__copy_1page)
+       retl
+        nop
+ ENDPROC(__copy_1page)
+-EXPORT_SYMBOL(__copy_1page)
+--- a/arch/sparc/lib/bzero.S
++++ b/arch/sparc/lib/bzero.S
+@@ -5,7 +5,6 @@
+  */
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+       .text
+@@ -79,8 +78,6 @@ __bzero_done:
+        mov            %o3, %o0
+ ENDPROC(__bzero)
+ ENDPROC(memset)
+-EXPORT_SYMBOL(__bzero)
+-EXPORT_SYMBOL(memset)
+ #define EX_ST(x,y)            \
+ 98:   x,y;                    \
+@@ -146,4 +143,3 @@ __clear_user_done:
+       retl
+        clr            %o0
+ ENDPROC(__clear_user)
+-EXPORT_SYMBOL(__clear_user)
+--- a/arch/sparc/lib/checksum_32.S
++++ b/arch/sparc/lib/checksum_32.S
+@@ -14,7 +14,6 @@
+  */
+ #include <asm/errno.h>
+-#include <asm/export.h>
+ #define CSUM_BIGCHUNK(buf, offset, sum, t0, t1, t2, t3, t4, t5)       \
+       ldd     [buf + offset + 0x00], t0;                      \
+@@ -105,7 +104,6 @@ csum_partial_fix_alignment:
+        * buffer of size 0x20.  Follow the code path for that case.
+        */
+       .globl  csum_partial
+-      EXPORT_SYMBOL(csum_partial)
+ csum_partial:                 /* %o0=buf, %o1=len, %o2=sum */
+       andcc   %o0, 0x7, %g0                           ! alignment problems?
+       bne     csum_partial_fix_alignment              ! yep, handle it
+@@ -337,7 +335,6 @@ cc_dword_align:
+        */
+       .align  8
+       .globl  __csum_partial_copy_sparc_generic
+-      EXPORT_SYMBOL(__csum_partial_copy_sparc_generic)
+ __csum_partial_copy_sparc_generic:
+                                       /* %o0=src, %o1=dest, %g1=len, %g7=sum */
+       xor     %o0, %o1, %o4           ! get changing bits
+--- a/arch/sparc/lib/checksum_64.S
++++ b/arch/sparc/lib/checksum_64.S
+@@ -13,7 +13,6 @@
+  *    BSD4.4 portable checksum routine
+  */
+-#include <asm/export.h>
+       .text
+ csum_partial_fix_alignment:
+@@ -38,7 +37,6 @@ csum_partial_fix_alignment:
+       .align          32
+       .globl          csum_partial
+-      EXPORT_SYMBOL(csum_partial)
+ csum_partial:         /* %o0=buff, %o1=len, %o2=sum */
+       prefetch        [%o0 + 0x000], #n_reads
+       clr             %o4
+--- a/arch/sparc/lib/clear_page.S
++++ b/arch/sparc/lib/clear_page.S
+@@ -10,7 +10,6 @@
+ #include <asm/pgtable.h>
+ #include <asm/spitfire.h>
+ #include <asm/head.h>
+-#include <asm/export.h>
+       /* What we used to do was lock a TLB entry into a specific
+        * TLB slot, clear the page with interrupts disabled, then
+@@ -27,7 +26,6 @@
+       .text
+       .globl          _clear_page
+-      EXPORT_SYMBOL(_clear_page)
+ _clear_page:          /* %o0=dest */
+       ba,pt           %xcc, clear_page_common
+        clr            %o4
+@@ -37,7 +35,6 @@ _clear_page:         /* %o0=dest */
+        */
+       .align          32
+       .globl          clear_user_page
+-      EXPORT_SYMBOL(clear_user_page)
+ clear_user_page:      /* %o0=dest, %o1=vaddr */
+       lduw            [%g6 + TI_PRE_COUNT], %o2
+       sethi           %hi(PAGE_OFFSET), %g2
+--- a/arch/sparc/lib/copy_in_user.S
++++ b/arch/sparc/lib/copy_in_user.S
+@@ -5,7 +5,6 @@
+ #include <linux/linkage.h>
+ #include <asm/asi.h>
+-#include <asm/export.h>
+ #define XCC xcc
+@@ -106,4 +105,3 @@ ENTRY(___copy_in_user)     /* %o0=dst, %o1=s
+       retl
+        clr            %o0
+ ENDPROC(___copy_in_user)
+-EXPORT_SYMBOL(___copy_in_user)
+--- a/arch/sparc/lib/copy_page.S
++++ b/arch/sparc/lib/copy_page.S
+@@ -10,7 +10,6 @@
+ #include <asm/pgtable.h>
+ #include <asm/spitfire.h>
+ #include <asm/head.h>
+-#include <asm/export.h>
+       /* What we used to do was lock a TLB entry into a specific
+        * TLB slot, clear the page with interrupts disabled, then
+@@ -45,7 +44,6 @@
+       .align          32
+       .globl          copy_user_page
+       .type           copy_user_page,#function
+-      EXPORT_SYMBOL(copy_user_page)
+ copy_user_page:               /* %o0=dest, %o1=src, %o2=vaddr */
+       lduw            [%g6 + TI_PRE_COUNT], %o4
+       sethi           %hi(PAGE_OFFSET), %g2
+--- a/arch/sparc/lib/copy_user.S
++++ b/arch/sparc/lib/copy_user.S
+@@ -15,7 +15,6 @@
+ #include <asm/asmmacro.h>
+ #include <asm/page.h>
+ #include <asm/thread_info.h>
+-#include <asm/export.h>
+ /* Work around cpp -rob */
+ #define ALLOC #alloc
+@@ -120,7 +119,6 @@
+ __copy_user_begin:
+       .globl  __copy_user
+-      EXPORT_SYMBOL(__copy_user)
+ dword_align:
+       andcc   %o1, 1, %g0
+       be      4f
+--- a/arch/sparc/lib/csum_copy.S
++++ b/arch/sparc/lib/csum_copy.S
+@@ -3,8 +3,6 @@
+  * Copyright (C) 2005 David S. Miller <davem@davemloft.net>
+  */
+-#include <asm/export.h>
+-
+ #ifdef __KERNEL__
+ #define GLOBAL_SPARE  %g7
+ #else
+@@ -65,7 +63,6 @@
+        add            %o5, %o4, %o4
+       .globl          FUNC_NAME
+-      EXPORT_SYMBOL(FUNC_NAME)
+ FUNC_NAME:            /* %o0=src, %o1=dst, %o2=len, %o3=sum */
+       LOAD(prefetch, %o0 + 0x000, #n_reads)
+       xor             %o0, %o1, %g1
+--- a/arch/sparc/lib/divdi3.S
++++ b/arch/sparc/lib/divdi3.S
+@@ -17,7 +17,6 @@ along with GNU CC; see the file COPYING.
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+-#include <asm/export.h>
+       .text
+       .align 4
+       .globl __divdi3
+@@ -280,4 +279,3 @@ __divdi3:
+ .LL81:
+       ret
+       restore
+-EXPORT_SYMBOL(__divdi3)
+--- a/arch/sparc/lib/ffs.S
++++ b/arch/sparc/lib/ffs.S
+@@ -1,5 +1,4 @@
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+       .register       %g2,#scratch
+@@ -66,8 +65,6 @@ ENTRY(__ffs)
+        add    %o2, %g1, %o0
+ ENDPROC(ffs)
+ ENDPROC(__ffs)
+-EXPORT_SYMBOL(__ffs)
+-EXPORT_SYMBOL(ffs)
+       .section        .popc_6insn_patch, "ax"
+       .word           ffs
+--- a/arch/sparc/lib/hweight.S
++++ b/arch/sparc/lib/hweight.S
+@@ -1,5 +1,4 @@
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+       .text
+       .align  32
+@@ -8,7 +7,6 @@ ENTRY(__arch_hweight8)
+        nop
+       nop
+ ENDPROC(__arch_hweight8)
+-EXPORT_SYMBOL(__arch_hweight8)
+       .section        .popc_3insn_patch, "ax"
+       .word           __arch_hweight8
+       sllx            %o0, 64-8, %g1
+@@ -21,7 +19,6 @@ ENTRY(__arch_hweight16)
+        nop
+       nop
+ ENDPROC(__arch_hweight16)
+-EXPORT_SYMBOL(__arch_hweight16)
+       .section        .popc_3insn_patch, "ax"
+       .word           __arch_hweight16
+       sllx            %o0, 64-16, %g1
+@@ -34,7 +31,6 @@ ENTRY(__arch_hweight32)
+        nop
+       nop
+ ENDPROC(__arch_hweight32)
+-EXPORT_SYMBOL(__arch_hweight32)
+       .section        .popc_3insn_patch, "ax"
+       .word           __arch_hweight32
+       sllx            %o0, 64-32, %g1
+@@ -47,7 +43,6 @@ ENTRY(__arch_hweight64)
+        nop
+       nop
+ ENDPROC(__arch_hweight64)
+-EXPORT_SYMBOL(__arch_hweight64)
+       .section        .popc_3insn_patch, "ax"
+       .word           __arch_hweight64
+       retl
+--- a/arch/sparc/lib/ipcsum.S
++++ b/arch/sparc/lib/ipcsum.S
+@@ -1,5 +1,4 @@
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+       .text
+ ENTRY(ip_fast_csum) /* %o0 = iph, %o1 = ihl */
+@@ -32,4 +31,3 @@ ENTRY(ip_fast_csum) /* %o0 = iph, %o1 =
+       retl
+        and    %o2, %o1, %o0
+ ENDPROC(ip_fast_csum)
+-EXPORT_SYMBOL(ip_fast_csum)
+--- /dev/null
++++ b/arch/sparc/lib/ksyms.c
+@@ -0,0 +1,173 @@
++/*
++ * Export of symbols defined in assembler
++ */
++
++#include <linux/module.h>
++#include <linux/string.h>
++#include <linux/types.h>
++
++#include <asm/checksum.h>
++#include <asm/uaccess.h>
++#include <asm/ftrace.h>
++
++/* string functions */
++EXPORT_SYMBOL(strlen);
++EXPORT_SYMBOL(strncmp);
++
++/* mem* functions */
++extern void *__memscan_zero(void *, size_t);
++extern void *__memscan_generic(void *, int, size_t);
++#undef memcpy
++extern void *memcpy(void *, const void *, size_t);
++#undef memset
++extern void *memset(void *, int, size_t);
++extern void *__bzero(void *, size_t);
++
++EXPORT_SYMBOL(__memscan_zero);
++EXPORT_SYMBOL(__memscan_generic);
++EXPORT_SYMBOL(memcmp);
++EXPORT_SYMBOL(memcpy);
++EXPORT_SYMBOL(memset);
++EXPORT_SYMBOL(memmove);
++EXPORT_SYMBOL(__bzero);
++
++/* Networking helper routines. */
++EXPORT_SYMBOL(csum_partial);
++
++#ifdef CONFIG_MCOUNT
++EXPORT_SYMBOL(_mcount);
++#endif
++
++/*
++ * sparc
++ */
++#ifdef CONFIG_SPARC32
++extern int __ashrdi3(int, int);
++extern int __ashldi3(int, int);
++extern int __lshrdi3(int, int);
++extern int __muldi3(int, int);
++extern int __divdi3(int, int);
++
++extern void (*__copy_1page)(void *, const void *);
++extern void (*bzero_1page)(void *);
++
++extern void ___rw_read_enter(void);
++extern void ___rw_read_try(void);
++extern void ___rw_read_exit(void);
++extern void ___rw_write_enter(void);
++
++/* Networking helper routines. */
++EXPORT_SYMBOL(__csum_partial_copy_sparc_generic);
++
++/* Special internal versions of library functions. */
++EXPORT_SYMBOL(__copy_1page);
++EXPORT_SYMBOL(bzero_1page);
++
++/* Moving data to/from/in userspace. */
++EXPORT_SYMBOL(__copy_user);
++
++/* Used by asm/spinlock.h */
++#ifdef CONFIG_SMP
++EXPORT_SYMBOL(___rw_read_enter);
++EXPORT_SYMBOL(___rw_read_try);
++EXPORT_SYMBOL(___rw_read_exit);
++EXPORT_SYMBOL(___rw_write_enter);
++#endif
++
++EXPORT_SYMBOL(__ashrdi3);
++EXPORT_SYMBOL(__ashldi3);
++EXPORT_SYMBOL(__lshrdi3);
++EXPORT_SYMBOL(__muldi3);
++EXPORT_SYMBOL(__divdi3);
++#endif
++
++/*
++ * sparc64
++ */
++#ifdef CONFIG_SPARC64
++/* Networking helper routines. */
++EXPORT_SYMBOL(csum_partial_copy_nocheck);
++EXPORT_SYMBOL(__csum_partial_copy_from_user);
++EXPORT_SYMBOL(__csum_partial_copy_to_user);
++EXPORT_SYMBOL(ip_fast_csum);
++
++/* Moving data to/from/in userspace. */
++EXPORT_SYMBOL(___copy_to_user);
++EXPORT_SYMBOL(___copy_from_user);
++EXPORT_SYMBOL(___copy_in_user);
++EXPORT_SYMBOL(__clear_user);
++
++/* Atomic counter implementation. */
++#define ATOMIC_OP(op)                                                 \
++EXPORT_SYMBOL(atomic_##op);                                           \
++EXPORT_SYMBOL(atomic64_##op);
++
++#define ATOMIC_OP_RETURN(op)                                          \
++EXPORT_SYMBOL(atomic_##op##_return);                                  \
++EXPORT_SYMBOL(atomic64_##op##_return);
++
++#define ATOMIC_FETCH_OP(op)                                           \
++EXPORT_SYMBOL(atomic_fetch_##op);                                     \
++EXPORT_SYMBOL(atomic64_fetch_##op);
++
++#define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op) ATOMIC_FETCH_OP(op)
++
++ATOMIC_OPS(add)
++ATOMIC_OPS(sub)
++
++#undef ATOMIC_OPS
++#define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_FETCH_OP(op)
++
++ATOMIC_OPS(and)
++ATOMIC_OPS(or)
++ATOMIC_OPS(xor)
++
++#undef ATOMIC_OPS
++#undef ATOMIC_FETCH_OP
++#undef ATOMIC_OP_RETURN
++#undef ATOMIC_OP
++
++EXPORT_SYMBOL(atomic64_dec_if_positive);
++
++/* Atomic bit operations. */
++EXPORT_SYMBOL(test_and_set_bit);
++EXPORT_SYMBOL(test_and_clear_bit);
++EXPORT_SYMBOL(test_and_change_bit);
++EXPORT_SYMBOL(set_bit);
++EXPORT_SYMBOL(clear_bit);
++EXPORT_SYMBOL(change_bit);
++
++/* Special internal versions of library functions. */
++EXPORT_SYMBOL(_clear_page);
++EXPORT_SYMBOL(clear_user_page);
++EXPORT_SYMBOL(copy_user_page);
++
++/* RAID code needs this */
++void VISenter(void);
++EXPORT_SYMBOL(VISenter);
++
++extern void xor_vis_2(unsigned long, unsigned long *, unsigned long *);
++extern void xor_vis_3(unsigned long, unsigned long *, unsigned long *,
++              unsigned long *);
++extern void xor_vis_4(unsigned long, unsigned long *, unsigned long *,
++              unsigned long *, unsigned long *);
++extern void xor_vis_5(unsigned long, unsigned long *, unsigned long *,
++              unsigned long *, unsigned long *, unsigned long *);
++EXPORT_SYMBOL(xor_vis_2);
++EXPORT_SYMBOL(xor_vis_3);
++EXPORT_SYMBOL(xor_vis_4);
++EXPORT_SYMBOL(xor_vis_5);
++
++extern void xor_niagara_2(unsigned long, unsigned long *, unsigned long *);
++extern void xor_niagara_3(unsigned long, unsigned long *, unsigned long *,
++              unsigned long *);
++extern void xor_niagara_4(unsigned long, unsigned long *, unsigned long *,
++              unsigned long *, unsigned long *);
++extern void xor_niagara_5(unsigned long, unsigned long *, unsigned long *,
++              unsigned long *, unsigned long *, unsigned long *);
++
++EXPORT_SYMBOL(xor_niagara_2);
++EXPORT_SYMBOL(xor_niagara_3);
++EXPORT_SYMBOL(xor_niagara_4);
++EXPORT_SYMBOL(xor_niagara_5);
++#endif
+--- a/arch/sparc/lib/locks.S
++++ b/arch/sparc/lib/locks.S
+@@ -10,7 +10,6 @@
+ #include <asm/psr.h>
+ #include <asm/smp.h>
+ #include <asm/spinlock.h>
+-#include <asm/export.h>
+       .text
+       .align  4
+@@ -49,7 +48,6 @@ ___rw_write_enter_spin_on_wlock:
+        ld     [%g1], %g2
+       .globl  ___rw_read_enter
+-EXPORT_SYMBOL(___rw_read_enter)
+ ___rw_read_enter:
+       orcc    %g2, 0x0, %g0
+       bne,a   ___rw_read_enter_spin_on_wlock
+@@ -61,7 +59,6 @@ ___rw_read_enter:
+        mov    %g4, %o7
+       .globl  ___rw_read_exit
+-EXPORT_SYMBOL(___rw_read_exit)
+ ___rw_read_exit:
+       orcc    %g2, 0x0, %g0
+       bne,a   ___rw_read_exit_spin_on_wlock
+@@ -73,7 +70,6 @@ ___rw_read_exit:
+        mov    %g4, %o7
+       .globl  ___rw_read_try
+-EXPORT_SYMBOL(___rw_read_try)
+ ___rw_read_try:
+       orcc    %g2, 0x0, %g0
+       bne     ___rw_read_try_spin_on_wlock
+@@ -85,7 +81,6 @@ ___rw_read_try:
+        mov    %g4, %o7
+       .globl  ___rw_write_enter
+-EXPORT_SYMBOL(___rw_write_enter)
+ ___rw_write_enter:
+       orcc    %g2, 0x0, %g0
+       bne     ___rw_write_enter_spin_on_wlock
+--- a/arch/sparc/lib/lshrdi3.S
++++ b/arch/sparc/lib/lshrdi3.S
+@@ -1,5 +1,4 @@
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+ ENTRY(__lshrdi3)
+       cmp     %o2, 0
+@@ -26,4 +25,3 @@ ENTRY(__lshrdi3)
+       retl 
+        nop 
+ ENDPROC(__lshrdi3)
+-EXPORT_SYMBOL(__lshrdi3)
+--- a/arch/sparc/lib/mcount.S
++++ b/arch/sparc/lib/mcount.S
+@@ -6,7 +6,6 @@
+  */
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+ /*
+  * This is the main variant and is called by C code.  GCC's -pg option
+@@ -17,7 +16,6 @@
+       .align          32
+       .globl          _mcount
+       .type           _mcount,#function
+-      EXPORT_SYMBOL(_mcount)
+       .globl          mcount
+       .type           mcount,#function
+ _mcount:
+--- a/arch/sparc/lib/memcmp.S
++++ b/arch/sparc/lib/memcmp.S
+@@ -6,7 +6,6 @@
+ #include <linux/linkage.h>
+ #include <asm/asm.h>
+-#include <asm/export.h>
+       .text
+ ENTRY(memcmp)
+@@ -26,4 +25,3 @@ ENTRY(memcmp)
+ 2:    retl
+        mov    0, %o0
+ ENDPROC(memcmp)
+-EXPORT_SYMBOL(memcmp)
+--- a/arch/sparc/lib/memcpy.S
++++ b/arch/sparc/lib/memcpy.S
+@@ -7,7 +7,6 @@
+  * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+  */
+-#include <asm/export.h>
+ #define FUNC(x)               \
+       .globl  x;              \
+       .type   x,@function;    \
+@@ -63,7 +62,6 @@ x:
+       .align  4
+ FUNC(memmove)
+-EXPORT_SYMBOL(memmove)
+       cmp             %o0, %o1
+       mov             %o0, %g7
+       bleu            9f
+@@ -121,7 +119,6 @@ EXPORT_SYMBOL(memmove)
+        add            %o0, 2, %o0
+ FUNC(memcpy)  /* %o0=dst %o1=src %o2=len */
+-EXPORT_SYMBOL(memcpy)
+       sub             %o0, %o1, %o4
+       mov             %o0, %g7
+--- a/arch/sparc/lib/memmove.S
++++ b/arch/sparc/lib/memmove.S
+@@ -5,7 +5,6 @@
+  */
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+       .text
+ ENTRY(memmove) /* o0=dst o1=src o2=len */
+@@ -58,4 +57,3 @@ ENTRY(memmove) /* o0=dst o1=src o2=len *
+        stb            %g7, [%o0 - 0x1]
+       ba,a,pt         %xcc, 99b
+ ENDPROC(memmove)
+-EXPORT_SYMBOL(memmove)
+--- a/arch/sparc/lib/memscan_32.S
++++ b/arch/sparc/lib/memscan_32.S
+@@ -4,8 +4,6 @@
+  * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
+  */
+-#include <asm/export.h>
+-
+ /* In essence, this is just a fancy strlen. */
+ #define LO_MAGIC 0x01010101
+@@ -15,8 +13,6 @@
+       .align  4
+       .globl  __memscan_zero, __memscan_generic
+       .globl  memscan
+-EXPORT_SYMBOL(__memscan_zero)
+-EXPORT_SYMBOL(__memscan_generic)
+ __memscan_zero:
+       /* %o0 = addr, %o1 = size */
+       cmp     %o1, 0
+--- a/arch/sparc/lib/memscan_64.S
++++ b/arch/sparc/lib/memscan_64.S
+@@ -5,8 +5,6 @@
+  * Copyright (C) 1998 David S. Miller (davem@redhat.com)
+  */
+-      #include <asm/export.h>
+-
+ #define HI_MAGIC      0x8080808080808080
+ #define LO_MAGIC      0x0101010101010101
+ #define ASI_PL                0x88
+@@ -15,8 +13,6 @@
+       .align  32
+       .globl          __memscan_zero, __memscan_generic
+       .globl          memscan
+-      EXPORT_SYMBOL(__memscan_zero)
+-      EXPORT_SYMBOL(__memscan_generic)
+ __memscan_zero:
+       /* %o0 = bufp, %o1 = size */
+--- a/arch/sparc/lib/memset.S
++++ b/arch/sparc/lib/memset.S
+@@ -9,7 +9,6 @@
+  */
+ #include <asm/ptrace.h>
+-#include <asm/export.h>
+ /* Work around cpp -rob */
+ #define ALLOC #alloc
+@@ -64,8 +63,6 @@ __bzero_begin:
+       .globl  __bzero
+       .globl  memset
+-      EXPORT_SYMBOL(__bzero)
+-      EXPORT_SYMBOL(memset)
+       .globl  __memset_start, __memset_end
+ __memset_start:
+ memset:
+--- a/arch/sparc/lib/muldi3.S
++++ b/arch/sparc/lib/muldi3.S
+@@ -17,7 +17,6 @@ along with GNU CC; see the file COPYING.
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.  */
+-#include <asm/export.h>
+       .text
+       .align 4
+       .globl __muldi3
+@@ -75,4 +74,3 @@ __muldi3:
+       add  %l2, %l0, %i0
+       ret 
+       restore  %g0, %l3, %o1
+-EXPORT_SYMBOL(__muldi3)
+--- a/arch/sparc/lib/strlen.S
++++ b/arch/sparc/lib/strlen.S
+@@ -7,7 +7,6 @@
+ #include <linux/linkage.h>
+ #include <asm/asm.h>
+-#include <asm/export.h>
+ #define LO_MAGIC 0x01010101
+ #define HI_MAGIC 0x80808080
+@@ -79,4 +78,3 @@ ENTRY(strlen)
+       retl
+        mov    2, %o0
+ ENDPROC(strlen)
+-EXPORT_SYMBOL(strlen)
+--- a/arch/sparc/lib/strncmp_32.S
++++ b/arch/sparc/lib/strncmp_32.S
+@@ -4,7 +4,6 @@
+  */
+ #include <linux/linkage.h>
+-#include <asm/export.h>
+       .text
+ ENTRY(strncmp)
+@@ -117,4 +116,3 @@ ENTRY(strncmp)
+       retl
+        sub    %o3, %o0, %o0
+ ENDPROC(strncmp)
+-EXPORT_SYMBOL(strncmp)
+--- a/arch/sparc/lib/strncmp_64.S
++++ b/arch/sparc/lib/strncmp_64.S
+@@ -6,7 +6,6 @@
+ #include <linux/linkage.h>
+ #include <asm/asi.h>
+-#include <asm/export.h>
+       .text
+ ENTRY(strncmp)
+@@ -29,4 +28,3 @@ ENTRY(strncmp)
+       retl
+        clr    %o0
+ ENDPROC(strncmp)
+-EXPORT_SYMBOL(strncmp)
+--- a/arch/sparc/lib/xor.S
++++ b/arch/sparc/lib/xor.S
+@@ -13,7 +13,6 @@
+ #include <asm/asi.h>
+ #include <asm/dcu.h>
+ #include <asm/spitfire.h>
+-#include <asm/export.h>
+ /*
+  *    Requirements:
+@@ -91,7 +90,6 @@ ENTRY(xor_vis_2)
+       retl
+         wr    %g0, 0, %fprs
+ ENDPROC(xor_vis_2)
+-EXPORT_SYMBOL(xor_vis_2)
+ ENTRY(xor_vis_3)
+       rd      %fprs, %o5
+@@ -158,7 +156,6 @@ ENTRY(xor_vis_3)
+       retl
+        wr     %g0, 0, %fprs
+ ENDPROC(xor_vis_3)
+-EXPORT_SYMBOL(xor_vis_3)
+ ENTRY(xor_vis_4)
+       rd      %fprs, %o5
+@@ -244,7 +241,6 @@ ENTRY(xor_vis_4)
+       retl
+        wr     %g0, 0, %fprs
+ ENDPROC(xor_vis_4)
+-EXPORT_SYMBOL(xor_vis_4)
+ ENTRY(xor_vis_5)
+       save    %sp, -192, %sp
+@@ -351,7 +347,6 @@ ENTRY(xor_vis_5)
+       ret
+        restore
+ ENDPROC(xor_vis_5)
+-EXPORT_SYMBOL(xor_vis_5)
+       /* Niagara versions. */
+ ENTRY(xor_niagara_2) /* %o0=bytes, %o1=dest, %o2=src */
+@@ -398,7 +393,6 @@ ENTRY(xor_niagara_2) /* %o0=bytes, %o1=d
+       ret
+        restore
+ ENDPROC(xor_niagara_2)
+-EXPORT_SYMBOL(xor_niagara_2)
+ ENTRY(xor_niagara_3) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2 */
+       save            %sp, -192, %sp
+@@ -460,7 +454,6 @@ ENTRY(xor_niagara_3) /* %o0=bytes, %o1=d
+       ret
+        restore
+ ENDPROC(xor_niagara_3)
+-EXPORT_SYMBOL(xor_niagara_3)
+ ENTRY(xor_niagara_4) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */
+       save            %sp, -192, %sp
+@@ -543,7 +536,6 @@ ENTRY(xor_niagara_4) /* %o0=bytes, %o1=d
+       ret
+        restore
+ ENDPROC(xor_niagara_4)
+-EXPORT_SYMBOL(xor_niagara_4)
+ ENTRY(xor_niagara_5) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3, %o5=src4 */
+       save            %sp, -192, %sp
+@@ -642,4 +634,3 @@ ENTRY(xor_niagara_5) /* %o0=bytes, %o1=d
+       ret
+        restore
+ ENDPROC(xor_niagara_5)
+-EXPORT_SYMBOL(xor_niagara_5)
diff --git a/patches/bugfix/x86/cpupower-fix-turbo-frequency-reporting-for-pre-sandy.patch b/patches/bugfix/x86/cpupower-fix-turbo-frequency-reporting-for-pre-sandy.patch
new file mode 100644 (file)
index 0000000..d130de4
--- /dev/null
@@ -0,0 +1,31 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Mon, 10 Apr 2017 17:44:13 +0100
+Subject: cpupower: Fix turbo frequency reporting for pre-Sandy Bridge cores
+Bug-Debian: https://bugs.debian.org/859978
+Forwarded: https://marc.info/?l=linux-pm&m=149186698809229&w=2
+
+The switch that conditionally sets CPUPOWER_CAP_HAS_TURBO_RATIO and
+CPUPOWER_CAP_IS_SNB flags is missing a break, so all cores get both
+flags set and an assumed base clock of 100 MHz for turbo values.
+
+Reported-by: GSR <gsr.bugs@infernal-iceberg.com>
+Tested-by: GSR <gsr.bugs@infernal-iceberg.com>
+References: https://bugs.debian.org/859978
+Fixes: 8fb2e440b223 ("cpupower: Show Intel turbo ratio support via ...")
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/power/cpupower/utils/helpers/cpuid.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/power/cpupower/utils/helpers/cpuid.c b/tools/power/cpupower/utils/helpers/cpuid.c
+index 93b0aa74ca03..39c2c7d067bb 100644
+--- a/tools/power/cpupower/utils/helpers/cpuid.c
++++ b/tools/power/cpupower/utils/helpers/cpuid.c
+@@ -156,6 +156,7 @@ int get_cpu_info(unsigned int cpu, struct cpupower_cpu_info *cpu_info)
+                                        */
+                       case 0x2C:      /* Westmere EP - Gulftown */
+                               cpu_info->caps |= CPUPOWER_CAP_HAS_TURBO_RATIO;
++                              break;
+                       case 0x2A:      /* SNB */
+                       case 0x2D:      /* SNB Xeon */
+                       case 0x3A:      /* IVB */
diff --git a/patches/bugfix/x86/revert-perf-build-fix-libunwind-feature-detection-on.patch b/patches/bugfix/x86/revert-perf-build-fix-libunwind-feature-detection-on.patch
new file mode 100644 (file)
index 0000000..3d511fe
--- /dev/null
@@ -0,0 +1,22 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 25 Sep 2015 22:50:50 +0100
+Subject: Revert "perf build: Fix libunwind feature detection on 32-bit x86"
+Forwarded: no
+
+This reverts commit 05b41775e2edd69a83f592e3534930c934d4038e.
+It broke feature detection that was working just fine for us.
+---
+ tools/perf/Makefile.config | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/tools/perf/Makefile.config
++++ b/tools/perf/Makefile.config
+@@ -38,7 +38,7 @@ ifeq ($(ARCH),x86)
+     LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
+     $(call detected,CONFIG_X86_64)
+   else
+-    LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
++    LIBUNWIND_LIBS = -lunwind -lunwind-x86
+   endif
+   NO_PERF_REGS := 0
+ endif
diff --git a/patches/bugfix/x86/tools-hv-fix-fortify-format-warning.patch b/patches/bugfix/x86/tools-hv-fix-fortify-format-warning.patch
new file mode 100644 (file)
index 0000000..dd8b903
--- /dev/null
@@ -0,0 +1,55 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 25 Sep 2015 20:28:10 +0100
+Subject: tools/hv: Fix fortify format warning
+Forwarded: no
+
+With fortify enabled, gcc warns:
+
+tools/hv/hv_kvp_daemon.c:705:2: error: format not a string literal and no format arguments [-Werror=format-security]
+  snprintf(dev_id, sizeof(dev_id), kvp_net_dir);
+  ^
+
+kvp_net_dir is a pointer to a string literal, but lacks const
+qualification.  As it is never modified, it should be a const
+array rather than a pointer.
+
+Also, while snprintf() has a bounds check, the following strcat()s
+do not.  Combine them into a single snprintf().
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -691,10 +691,10 @@ static char *kvp_mac_to_if_name(char *ma
+       DIR *dir;
+       struct dirent *entry;
+       FILE    *file;
+-      char    *p, *q, *x;
++      char    *p, *x;
+       char    *if_name = NULL;
+       char    buf[256];
+-      char *kvp_net_dir = "/sys/class/net/";
++      const char kvp_net_dir[] = "/sys/class/net/";
+       char dev_id[256];
+       unsigned int i;
+@@ -702,17 +702,9 @@ static char *kvp_mac_to_if_name(char *ma
+       if (dir == NULL)
+               return NULL;
+-      snprintf(dev_id, sizeof(dev_id), kvp_net_dir);
+-      q = dev_id + strlen(kvp_net_dir);
+-
+       while ((entry = readdir(dir)) != NULL) {
+-              /*
+-               * Set the state for the next pass.
+-               */
+-              *q = '\0';
+-
+-              strcat(dev_id, entry->d_name);
+-              strcat(dev_id, "/address");
++              snprintf(dev_id, sizeof(dev_id), "%s%s/address",
++                       kvp_net_dir, entry->d_name);
+               file = fopen(dev_id, "r");
+               if (file == NULL)
diff --git a/patches/bugfix/x86/viafb-autoload-on-olpc-xo1.5-only.patch b/patches/bugfix/x86/viafb-autoload-on-olpc-xo1.5-only.patch
new file mode 100644 (file)
index 0000000..d395733
--- /dev/null
@@ -0,0 +1,34 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 20 Apr 2013 15:52:02 +0100
+Subject: viafb: Autoload on OLPC XO 1.5 only
+Bug-Debian: https://bugs.debian.org/705788
+Forwarded: no
+
+It appears that viafb won't work automatically on all the boards for
+which it has a PCI device ID match.  Currently, it is blacklisted by
+udev along with most other framebuffer drivers, so this doesn't matter
+much.
+
+However, this driver is required for console support on the XO 1.5.
+We need to allow it to be autoloaded on this model only, and then
+un-blacklist it in udev.
+
+---
+--- a/drivers/video/fbdev/via/via-core.c
++++ b/drivers/video/fbdev/via/via-core.c
+@@ -753,7 +753,14 @@ static struct pci_device_id via_pci_tabl
+         .driver_data = UNICHROME_VX900 },
+       { }
+ };
+-MODULE_DEVICE_TABLE(pci, via_pci_table);
++
++static const struct pci_device_id via_pci_autoload_table[] __initconst = {
++      /* OLPC XO 1.5 */
++      { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX855_DID),
++        .subvendor = 0x152d, .subdevice = 0x0833 },
++      { }
++};
++MODULE_DEVICE_TABLE(pci, via_pci_autoload_table);
+ static struct pci_driver via_driver = {
+       .name           = "viafb",
diff --git a/patches/debian/add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by-default.patch b/patches/debian/add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by-default.patch
new file mode 100644 (file)
index 0000000..f3cec3f
--- /dev/null
@@ -0,0 +1,93 @@
+From: Serge Hallyn <serge.hallyn@canonical.com>
+Date: Fri, 31 May 2013 19:12:12 +0000 (+0100)
+Subject: add sysctl to disallow unprivileged CLONE_NEWUSER by default
+Origin: http://kernel.ubuntu.com/git?p=serge%2Fubuntu-saucy.git;a=commit;h=5c847404dcb2e3195ad0057877e1422ae90892b8
+
+add sysctl to disallow unprivileged CLONE_NEWUSER by default
+
+This is a short-term patch.  Unprivileged use of CLONE_NEWUSER
+is certainly an intended feature of user namespaces.  However
+for at least saucy we want to make sure that, if any security
+issues are found, we have a fail-safe.
+
+Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
+[bwh: Remove unneeded binary sysctl bits]
+---
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -87,6 +87,11 @@
+ #define CREATE_TRACE_POINTS
+ #include <trace/events/task.h>
++#ifdef CONFIG_USER_NS
++extern int unprivileged_userns_clone;
++#else
++#define unprivileged_userns_clone 0
++#endif
+ /*
+  * Minimum number of threads to boot the kernel
+@@ -1252,6 +1257,10 @@ static struct task_struct *copy_process(
+       if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
+               return ERR_PTR(-EINVAL);
++      if ((clone_flags & CLONE_NEWUSER) && !unprivileged_userns_clone)
++              if (!capable(CAP_SYS_ADMIN))
++                      return ERR_PTR(-EPERM);
++
+       /*
+        * Thread groups must share signals as well, and detached threads
+        * can only be started up within the thread group.
+@@ -1944,6 +1953,12 @@ SYSCALL_DEFINE1(unshare, unsigned long,
+       if (unshare_flags & CLONE_NEWNS)
+               unshare_flags |= CLONE_FS;
++      if ((unshare_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) {
++              err = -EPERM;
++              if (!capable(CAP_SYS_ADMIN))
++                      goto bad_unshare_out;
++      }
++
+       err = check_unshare_flags(unshare_flags);
+       if (err)
+               goto bad_unshare_out;
+--- a/kernel/sysctl.c
++++ b/kernel/sysctl.c
+@@ -102,6 +102,9 @@ extern int core_uses_pid;
+ extern char core_pattern[];
+ extern unsigned int core_pipe_limit;
+ #endif
++#ifdef CONFIG_USER_NS
++extern int unprivileged_userns_clone;
++#endif
+ extern int pid_max;
+ extern int pid_max_min, pid_max_max;
+ extern int percpu_pagelist_fraction;
+@@ -489,6 +492,15 @@ static struct ctl_table kern_table[] = {
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
++#endif
++#ifdef CONFIG_USER_NS
++      {
++              .procname       = "unprivileged_userns_clone",
++              .data           = &unprivileged_userns_clone,
++              .maxlen         = sizeof(int),
++              .mode           = 0644,
++              .proc_handler   = proc_dointvec,
++      },
+ #endif
+ #ifdef CONFIG_PROC_SYSCTL
+       {
+--- a/kernel/user_namespace.c
++++ b/kernel/user_namespace.c
+@@ -23,6 +23,9 @@
+ #include <linux/projid.h>
+ #include <linux/fs_struct.h>
++/* sysctl */
++int unprivileged_userns_clone;
++
+ static struct kmem_cache *user_ns_cachep __read_mostly;
+ static DEFINE_MUTEX(userns_state_mutex);
diff --git a/patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch b/patches/debian/af_802154-Disable-auto-loading-as-mitigation-against.patch
new file mode 100644 (file)
index 0000000..3b33f84
--- /dev/null
@@ -0,0 +1,29 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 19 Nov 2010 02:12:48 +0000
+Subject: [PATCH 2/3] af_802154: Disable auto-loading as mitigation against local exploits
+Forwarded: not-needed
+
+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 <ben@decadent.org.uk>
+---
+ net/ieee802154/socket.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- a/net/ieee802154/socket.c
++++ b/net/ieee802154/socket.c
+@@ -1122,4 +1122,4 @@ module_init(af_ieee802154_init);
+ module_exit(af_ieee802154_remove);
+ MODULE_LICENSE("GPL");
+-MODULE_ALIAS_NETPROTO(PF_IEEE802154);
++/* MODULE_ALIAS_NETPROTO(PF_IEEE802154); */
diff --git a/patches/debian/amd64-don-t-warn-about-expected-w+x-pages-on-xen.patch b/patches/debian/amd64-don-t-warn-about-expected-w+x-pages-on-xen.patch
new file mode 100644 (file)
index 0000000..e6225da
--- /dev/null
@@ -0,0 +1,32 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 16 Mar 2017 03:05:43 +0000
+Subject: [amd64] Don't WARN about expected W+X pages on Xen
+Bug-Debian: https://bugs.debian.org/852324
+Forwarded: not-needed
+
+Currently Xen PV domains (or at least dom0) on amd64 tend to have a
+large number of low kernel pages with W+X permissions.  It's not
+obvious how to fix this, and we're not going to get any new
+information by WARNing about this, but we do still want to hear about
+other W+X cases.  So add a condition to the WARN_ON.
+
+---
+--- a/arch/x86/mm/dump_pagetables.c
++++ b/arch/x86/mm/dump_pagetables.c
+@@ -17,6 +17,7 @@
+ #include <linux/init.h>
+ #include <linux/sched.h>
+ #include <linux/seq_file.h>
++#include <xen/xen.h>
+ #include <asm/pgtable.h>
+@@ -220,7 +221,7 @@ static void note_page(struct seq_file *m
+               pgprotval_t pr = pgprot_val(st->current_prot);
+               if (st->check_wx && (pr & _PAGE_RW) && !(pr & _PAGE_NX)) {
+-                      WARN_ONCE(1,
++                      WARN_ONCE(!(IS_ENABLED(CONFIG_X86_64) && xen_pv_domain()),
+                                 "x86/mm: Found insecure W+X mapping at address %p/%pS\n",
+                                 (void *)st->start_address,
+                                 (void *)st->start_address);
diff --git a/patches/debian/arch-sh4-fix-uimage-build.patch b/patches/debian/arch-sh4-fix-uimage-build.patch
new file mode 100644 (file)
index 0000000..6fc5a08
--- /dev/null
@@ -0,0 +1,18 @@
+From: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Subject: [sh4] Fix uImage build
+Bug-Debian: https://bugs.debian.org/569034
+Forwarded: not-needed
+
+[bwh: This was added without a description, but I think it is dealing
+with a similar issue to powerpcspe-omit-uimage.patch]
+
+--- a/arch/sh/Makefile
++++ b/arch/sh/Makefile
+@@ -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_MIGOR)                       := uImage
diff --git a/patches/debian/cdc_ncm-cdc_mbim-use-ncm-by-default.patch b/patches/debian/cdc_ncm-cdc_mbim-use-ncm-by-default.patch
new file mode 100644 (file)
index 0000000..e169cf5
--- /dev/null
@@ -0,0 +1,27 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: cdc_ncm,cdc_mbim: Use NCM by default
+Date: Sun, 31 Mar 2013 03:58:04 +0100
+Forwarded: not-needed
+
+Devices that support both NCM and MBIM modes should be kept in NCM
+mode unless there is userland support for MBIM.
+
+Set the default value of cdc_ncm.prefer_mbim to false and leave it to
+userland (modem-manager) to override this with a modprobe.conf file
+once it's ready to speak MBIM.
+
+---
+--- a/drivers/net/usb/cdc_ncm.c
++++ b/drivers/net/usb/cdc_ncm.c
+@@ -53,11 +53,7 @@
+ #include <linux/usb/cdc.h>
+ #include <linux/usb/cdc_ncm.h>
+-#if IS_ENABLED(CONFIG_USB_NET_CDC_MBIM)
+-static bool prefer_mbim = true;
+-#else
+ static bool prefer_mbim;
+-#endif
+ module_param(prefer_mbim, bool, S_IRUGO | S_IWUSR);
+ MODULE_PARM_DESC(prefer_mbim, "Prefer MBIM setting on dual NCM/MBIM functions");
diff --git a/patches/debian/dccp-disable-auto-loading-as-mitigation-against-local-exploits.patch b/patches/debian/dccp-disable-auto-loading-as-mitigation-against-local-exploits.patch
new file mode 100644 (file)
index 0000000..8358318
--- /dev/null
@@ -0,0 +1,41 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 16 Feb 2017 19:09:17 +0000
+Subject: dccp: Disable auto-loading as mitigation against local exploits
+Forwarded: not-needed
+
+We can mitigate the effect of vulnerabilities in obscure 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 'dccp' protocol is not actively maintained or widely used.
+Therefore disable auto-loading.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/net/dccp/ipv4.c
++++ b/net/dccp/ipv4.c
+@@ -1071,8 +1071,8 @@ module_exit(dccp_v4_exit);
+  * values directly, Also cover the case where the protocol is not specified,
+  * i.e. net-pf-PF_INET-proto-0-type-SOCK_DCCP
+  */
+-MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 33, 6);
+-MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 0, 6);
++/* MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 33, 6); */
++/* MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 0, 6); */
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR("Arnaldo Carvalho de Melo <acme@mandriva.com>");
+ MODULE_DESCRIPTION("DCCP - Datagram Congestion Controlled Protocol");
+--- a/net/dccp/ipv6.c
++++ b/net/dccp/ipv6.c
+@@ -1125,8 +1125,8 @@ module_exit(dccp_v6_exit);
+  * values directly, Also cover the case where the protocol is not specified,
+  * i.e. net-pf-PF_INET6-proto-0-type-SOCK_DCCP
+  */
+-MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET6, 33, 6);
+-MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET6, 0, 6);
++/* MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET6, 33, 6); */
++/* MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET6, 0, 6); */
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR("Arnaldo Carvalho de Melo <acme@mandriva.com>");
+ MODULE_DESCRIPTION("DCCPv6 - Datagram Congestion Controlled Protocol");
diff --git a/patches/debian/decnet-Disable-auto-loading-as-mitigation-against-lo.patch b/patches/debian/decnet-Disable-auto-loading-as-mitigation-against-lo.patch
new file mode 100644 (file)
index 0000000..84f15c1
--- /dev/null
@@ -0,0 +1,37 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 20 Nov 2010 02:24:55 +0000
+Subject: [PATCH] decnet: Disable auto-loading as mitigation against local exploits
+Forwarded: not-needed
+
+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 <ben@decadent.org.uk>
+---
+ 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
+
diff --git a/patches/debian/dfsg/arch-powerpc-platforms-8xx-ucode-disable.patch b/patches/debian/dfsg/arch-powerpc-platforms-8xx-ucode-disable.patch
new file mode 100644 (file)
index 0000000..0e51769
--- /dev/null
@@ -0,0 +1,29 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Mon, 13 Apr 2009 17:34:00 +0100
+Subject: Remove microcode patches for mgsuvd (not enabled in Debian configs)
+Forwarded: not-needed
+
+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.
diff --git a/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch b/patches/debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch
new file mode 100644 (file)
index 0000000..4e42da9
--- /dev/null
@@ -0,0 +1,15 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Mon, 17 Aug 2009 02:45:41 +0100
+Subject: dvb-usb-af9005: mark as broken
+Forwarded: not-needed
+
+--- a/drivers/media/usb/dvb-usb/Kconfig
++++ b/drivers/media/usb/dvb-usb/Kconfig
+@@ -227,6 +227,7 @@ config DVB_USB_OPERA1
+ config DVB_USB_AF9005
+       tristate "Afatech AF9005 DVB-T USB1.1 support"
++      depends on BROKEN
+       depends on DVB_USB
+       select MEDIA_TUNER_MT2060 if MEDIA_SUBDRV_AUTOSELECT
+       select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
diff --git a/patches/debian/dfsg/drivers-net-appletalk-cops.patch b/patches/debian/dfsg/drivers-net-appletalk-cops.patch
new file mode 100644 (file)
index 0000000..2b195ec
--- /dev/null
@@ -0,0 +1,50 @@
+From: Frederik Schüler <fs@debian.org>
+Date: Fri, 05 Jan 2007 15:55:24 +0000
+Subject: Add removal patches for: 3c359, smctr, keyspan, cops
+Forwarded: not-needed
+
+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 <file:Documentation/networking/ltpc.txt>.
+-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 <file:Documentation/networking/cops.txt>.
+-
+-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
diff --git a/patches/debian/dfsg/files-1 b/patches/debian/dfsg/files-1
new file mode 100644 (file)
index 0000000..d200306
--- /dev/null
@@ -0,0 +1,20 @@
+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 as well.
+rm firmware
+
+rm arch/powerpc/sysdev/micropatch.c
+
+rm drivers/media/usb/dvb-usb/af9005-script.h
+
+rm drivers/media/i2c/vs6624.c
+
+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
+
+# These include apparently obfuscated code
+rm drivers/video/fbdev/nvidia/
+rm drivers/video/fbdev/riva/
diff --git a/patches/debian/dfsg/firmware-cleanup.patch b/patches/debian/dfsg/firmware-cleanup.patch
new file mode 100644 (file)
index 0000000..760918c
--- /dev/null
@@ -0,0 +1,34 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 15 Mar 2011 04:48:15 +0000
+Subject: Remove the entire firmware directory
+Forwarded: no
+
+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.
+
+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 $(src)/Makefile
++-include $(src)/Makefile
+ include scripts/Makefile.host
diff --git a/patches/debian/dfsg/video-remove-nvidiafb-and-rivafb.patch b/patches/debian/dfsg/video-remove-nvidiafb-and-rivafb.patch
new file mode 100644 (file)
index 0000000..9e25135
--- /dev/null
@@ -0,0 +1,130 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 2 Jun 2012 19:53:38 +0100
+Subject: video: Remove nvidiafb and rivafb
+Bug-Debian: https://bugs.debian.org/383481
+Forwarded: no
+
+These drivers contain register programming code provided by the
+hardware vendor that appears to have been deliberately obfuscated.
+This is arguably not the preferred form for modification.
+
+These drivers are also largely redundant with nouveau.  The RIVA 128
+(NV3) is not supported by nouveau but is about 15 years old and
+probably discontinued 10 years ago.
+
+---
+--- a/drivers/video/fbdev/Kconfig
++++ b/drivers/video/fbdev/Kconfig
+@@ -991,101 +991,6 @@ config FB_ATMEL_STN
+       help
+         This enables support for the AT91/AT32 LCD Controller.
+-config FB_NVIDIA
+-      tristate "nVidia Framebuffer Support"
+-      depends on FB && PCI
+-      select FB_BACKLIGHT if FB_NVIDIA_BACKLIGHT
+-      select FB_MODE_HELPERS
+-      select FB_CFB_FILLRECT
+-      select FB_CFB_COPYAREA
+-      select FB_CFB_IMAGEBLIT
+-      select BITREVERSE
+-      select VGASTATE
+-      help
+-        This driver supports graphics boards with the nVidia chips, TNT
+-        and newer. For very old chipsets, such as the RIVA128, then use
+-        the rivafb.
+-        Say Y if you have such a graphics board.
+-
+-        To compile this driver as a module, choose M here: the
+-        module will be called nvidiafb.
+-
+-config FB_NVIDIA_I2C
+-       bool "Enable DDC Support"
+-       depends on FB_NVIDIA
+-       select FB_DDC
+-       help
+-        This enables I2C support for nVidia Chipsets.  This is used
+-        only for getting EDID information from the attached display
+-        allowing for robust video mode handling and switching.
+-
+-        Because fbdev-2.6 requires that drivers must be able to
+-        independently validate video mode parameters, you should say Y
+-        here.
+-
+-config FB_NVIDIA_DEBUG
+-      bool "Lots of debug output"
+-      depends on FB_NVIDIA
+-      default n
+-      help
+-        Say Y here if you want the nVidia driver to output all sorts
+-        of debugging information to provide to the maintainer when
+-        something goes wrong.
+-
+-config FB_NVIDIA_BACKLIGHT
+-      bool "Support for backlight control"
+-      depends on FB_NVIDIA
+-      default y
+-      help
+-        Say Y here if you want to control the backlight of your display.
+-
+-config FB_RIVA
+-      tristate "nVidia Riva support"
+-      depends on FB && PCI
+-      select FB_BACKLIGHT if FB_RIVA_BACKLIGHT
+-      select FB_MODE_HELPERS
+-      select FB_CFB_FILLRECT
+-      select FB_CFB_COPYAREA
+-      select FB_CFB_IMAGEBLIT
+-      select BITREVERSE
+-      select VGASTATE
+-      help
+-        This driver supports graphics boards with the nVidia Riva/Geforce
+-        chips.
+-        Say Y if you have such a graphics board.
+-
+-        To compile this driver as a module, choose M here: the
+-        module will be called rivafb.
+-
+-config FB_RIVA_I2C
+-       bool "Enable DDC Support"
+-       depends on FB_RIVA
+-       select FB_DDC
+-       help
+-        This enables I2C support for nVidia Chipsets.  This is used
+-        only for getting EDID information from the attached display
+-        allowing for robust video mode handling and switching.
+-
+-        Because fbdev-2.6 requires that drivers must be able to
+-        independently validate video mode parameters, you should say Y
+-        here.
+-
+-config FB_RIVA_DEBUG
+-      bool "Lots of debug output"
+-      depends on FB_RIVA
+-      default n
+-      help
+-        Say Y here if you want the Riva driver to output all sorts
+-        of debugging information to provide to the maintainer when
+-        something goes wrong.
+-
+-config FB_RIVA_BACKLIGHT
+-      bool "Support for backlight control"
+-      depends on FB_RIVA
+-      default y
+-      help
+-        Say Y here if you want to control the backlight of your display.
+-
+ config FB_I740
+       tristate "Intel740 support"
+       depends on FB && PCI
+--- a/drivers/video/fbdev/Makefile
++++ b/drivers/video/fbdev/Makefile
+@@ -22,8 +22,6 @@ obj-$(CONFIG_FB_PM3)           += pm3fb.o
+ obj-$(CONFIG_FB_I740)           += i740fb.o
+ obj-$(CONFIG_FB_MATROX)                 += matrox/
+-obj-$(CONFIG_FB_RIVA)           += riva/
+-obj-$(CONFIG_FB_NVIDIA)                 += nvidia/
+ obj-$(CONFIG_FB_ATY)            += aty/ macmodes.o
+ obj-$(CONFIG_FB_ATY128)                 += aty/ macmodes.o
+ obj-$(CONFIG_FB_RADEON)                 += aty/
diff --git a/patches/debian/dfsg/vs6624-disable.patch b/patches/debian/dfsg/vs6624-disable.patch
new file mode 100644 (file)
index 0000000..7a62d6b
--- /dev/null
@@ -0,0 +1,15 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 27 May 2012 01:56:58 +0100
+Subject: vs6624: mark as broken
+Forwarded: not-needed
+
+--- a/drivers/media/i2c/Kconfig
++++ b/drivers/media/i2c/Kconfig
+@@ -422,6 +422,7 @@ config VIDEO_OV7670
+         controller.
+ config VIDEO_VS6624
++      depends on BROKEN
+       tristate "ST VS6624 sensor support"
+       depends on VIDEO_V4L2 && I2C
+       depends on MEDIA_CAMERA_SUPPORT
diff --git a/patches/debian/fanotify-taint-on-use-of-fanotify_access_permissions.patch b/patches/debian/fanotify-taint-on-use-of-fanotify_access_permissions.patch
new file mode 100644 (file)
index 0000000..77d44b4
--- /dev/null
@@ -0,0 +1,29 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: fanotify: Taint on use of FANOTIFY_ACCESS_PERMISSIONS
+Date: Wed, 13 Jul 2016 01:37:22 +0100
+Forwarded: not-needed
+
+Various free and proprietary AV products use this feature and users
+apparently want it.  But punting access checks to userland seems like
+an easy way to deadlock the system, and there will be nothing we can
+do about that.  So warn and taint the kernel if this feature is
+actually used.
+
+---
+--- a/fs/notify/fanotify/fanotify_user.c
++++ b/fs/notify/fanotify/fanotify_user.c
+@@ -847,6 +847,14 @@ SYSCALL_DEFINE5(fanotify_mark, int, fano
+ #endif
+               return -EINVAL;
++#ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
++      if (mask & FAN_ALL_PERM_EVENTS) {
++              pr_warn_once("%s (%d): Using fanotify permission checks may lead to deadlock; tainting kernel\n",
++                           current->comm, current->pid);
++              add_taint(TAINT_USER, LOCKDEP_STILL_OK);
++      }
++#endif
++
+       f = fdget(fanotify_fd);
+       if (unlikely(!f.file))
+               return -EBADF;
diff --git a/patches/debian/fjes-disable-autoload.patch b/patches/debian/fjes-disable-autoload.patch
new file mode 100644 (file)
index 0000000..049dfb5
--- /dev/null
@@ -0,0 +1,24 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 18 Mar 2017 20:47:58 +0000
+Subject: fjes: Disable auto-loading
+Bug-Debian: https://bugs.debian.org/853976
+Forwarded: no
+
+fjes matches a generic ACPI device ID, and relies on its probe
+function to distinguish whether that really corresponds to a supported
+device.  Very few system will need the driver and it wastes memory on
+all the other systems where the same device ID appears, so disable
+auto-loading.
+
+---
+--- a/drivers/net/fjes/fjes_main.c
++++ b/drivers/net/fjes/fjes_main.c
+@@ -81,7 +81,7 @@ static const struct acpi_device_id fjes_
+       {"PNP0C02", 0},
+       {"", 0},
+ };
+-MODULE_DEVICE_TABLE(acpi, fjes_acpi_ids);
++/* MODULE_DEVICE_TABLE(acpi, fjes_acpi_ids); */
+ static struct acpi_driver fjes_acpi_driver = {
+       .name = DRV_NAME,
diff --git a/patches/debian/fs-enable-link-security-restrictions-by-default.patch b/patches/debian/fs-enable-link-security-restrictions-by-default.patch
new file mode 100644 (file)
index 0000000..d487c87
--- /dev/null
@@ -0,0 +1,22 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: fs: Enable link security restrictions by default
+Date: Fri, 02 Nov 2012 05:32:06 +0000
+Bug-Debian: https://bugs.debian.org/609455
+Forwarded: not-needed
+
+This reverts commit 561ec64ae67ef25cac8d72bb9c4bfc955edfd415
+('VFS: don't do protected {sym,hard}links by default').
+
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -847,8 +847,8 @@ static inline void put_link(struct namei
+               path_put(&last->link);
+ }
+-int sysctl_protected_symlinks __read_mostly = 0;
+-int sysctl_protected_hardlinks __read_mostly = 0;
++int sysctl_protected_symlinks __read_mostly = 1;
++int sysctl_protected_hardlinks __read_mostly = 1;
+ /**
+  * may_follow_link - Check symlink following for unsafe situations
diff --git a/patches/debian/gitignore.patch b/patches/debian/gitignore.patch
new file mode 100644 (file)
index 0000000..e9edd72
--- /dev/null
@@ -0,0 +1,44 @@
+From: Ian Campbell <ijc@hellion.org.uk>
+Date: Thu, 17 Jan 2013 08:55:21 +0000
+Subject: Tweak gitignore for Debian pkg-kernel using git svn.
+Forwarded: not-needed
+
+[bwh: Tweak further for pure git]
+
+--- a/.gitignore
++++ b/.gitignore
+@@ -53,23 +53,11 @@ Module.symvers
+ /Module.markers
+ #
+-# Debian directory (make deb-pkg)
+-#
+-/debian/
+-
+-#
+ # tar directory (make tar*-pkg)
+ #
+ /tar-install/
+ #
+-# git files that we don't want to ignore even if they are dot-files
+-#
+-!.gitignore
+-!.mailmap
+-!.cocciconfig
+-
+-#
+ # Generated include files
+ #
+ include/config
+@@ -114,3 +102,10 @@ all.config
+ # Kdevelop4
+ *.kdev4
++
++#
++# Debian packaging: ignore everything at the top level, since it isn't
++# included in our repository
++#
++/*
++!/debian/
diff --git a/patches/debian/i386-686-pae-pci-set-pci-nobios-by-default.patch b/patches/debian/i386-686-pae-pci-set-pci-nobios-by-default.patch
new file mode 100644 (file)
index 0000000..2787c25
--- /dev/null
@@ -0,0 +1,27 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 16 Feb 2016 02:45:42 +0000
+Subject: [i386/686-pae] PCI: Set pci=nobios by default
+Forwarded: not-needed
+
+CONFIG_PCI_GOBIOS results in physical addresses 640KB-1MB being mapped
+W+X, which is undesirable for security reasons and will result in a
+warning at boot now that we enable CONFIG_DEBUG_WX.
+
+This can be overridden using the kernel parameter "pci=nobios", but we
+want to disable W+X by default.  Disable PCI BIOS probing by default;
+it can still be enabled using "pci=bios".
+
+---
+--- a/arch/x86/pci/common.c
++++ b/arch/x86/pci/common.c
+@@ -20,8 +20,8 @@
+ #include <asm/pci_x86.h>
+ #include <asm/setup.h>
+-unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
+-                              PCI_PROBE_MMCONF;
++unsigned int pci_probe = PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | PCI_PROBE_MMCONF |
++      (IS_ENABLED(CONFIG_X86_64) || IS_ENABLED(CONFIG_X86_PAE) ? 0 : PCI_PROBE_BIOS);
+ unsigned int pci_early_dump_regs;
+ static int pci_bf_sort;
diff --git a/patches/debian/iwlwifi-do-not-request-unreleased-firmware.patch b/patches/debian/iwlwifi-do-not-request-unreleased-firmware.patch
new file mode 100644 (file)
index 0000000..171e90a
--- /dev/null
@@ -0,0 +1,26 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: iwlwifi: Do not request unreleased firmware for IWL6000
+Bug-Debian: https://bugs.debian.org/689416
+Forwarded: not-needed
+
+The iwlwifi driver currently supports firmware API versions 4-6 for
+these devices.  It will request the file for the latest supported
+version and then fall back to earlier versions.  However, the latest
+version that has actually been released is 4, so we expect the
+requests for versions 6 and then 5 to fail.
+
+The installer appears to report any failed request, and it is probably
+not easy to detect that this particular failure is harmless.  So stop
+requesting the unreleased firmware.
+
+--- a/drivers/net/wireless/intel/iwlwifi/iwl-6000.c
++++ b/drivers/net/wireless/intel/iwlwifi/iwl-6000.c
+@@ -31,7 +31,7 @@
+ #include "dvm/commands.h" /* needed for BT for now */
+ /* Highest firmware API version supported */
+-#define IWL6000_UCODE_API_MAX 6
++#define IWL6000_UCODE_API_MAX 4 /* v5-6 are supported but not released */
+ #define IWL6050_UCODE_API_MAX 5
+ #define IWL6000G2_UCODE_API_MAX 6
+ #define IWL6035_UCODE_API_MAX 6
diff --git a/patches/debian/kernelvariables.patch b/patches/debian/kernelvariables.patch
new file mode 100644 (file)
index 0000000..d2bdec0
--- /dev/null
@@ -0,0 +1,104 @@
+From: Bastian Blank <waldi@debian.org>
+Subject: kbuild: Make the toolchain variables easily overwritable
+Date: Sun, 22 Feb 2009 15:39:35 +0100
+Forwarded: not-needed
+
+Allow make variables to be overridden for each flavour by a file in
+the build tree, .kernelvariables.
+
+We currently use this for ARCH, KERNELRELEASE, CC, and in some cases
+also CROSS_COMPILE, CFLAGS_KERNEL and CFLAGS_MODULE.
+
+This file can only be read after we establish the build tree, and all
+use of $(ARCH) needs to be moved after this.
+
+--- a/Makefile
++++ b/Makefile
+@@ -255,42 +255,6 @@ SUBARCH := $(shell uname -m | sed -e s/i
+ ARCH          ?= $(SUBARCH)
+ 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)
+-
+ KCONFIG_CONFIG        ?= .config
+ export KCONFIG_CONFIG
+@@ -373,6 +337,44 @@ LDFLAGS_vmlinux =
+ CFLAGS_GCOV   := -fprofile-arcs -ftest-coverage -fno-tree-loop-im $(call cc-disable-warning,maybe-uninitialized,)
+ CFLAGS_KCOV   := $(call cc-option,-fsanitize-coverage=trace-pc,)
++-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 USERINCLUDE when you must reference the UAPI directories only.
+ USERINCLUDE    := \
diff --git a/patches/debian/mips-disable-werror.patch b/patches/debian/mips-disable-werror.patch
new file mode 100644 (file)
index 0000000..9e895bf
--- /dev/null
@@ -0,0 +1,28 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Mon, 13 Sep 2010 02:16:18 +0100
+Subject: [PATCH] Partially revert "MIPS: Add -Werror to arch/mips/Kbuild"
+Forwarded: not-needed
+
+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_<file.o> := -Wno-error
+-subdir-ccflags-y := -Werror
+-
+ # platform specific definitions
+ include arch/mips/Kbuild.platforms
+ obj-y := $(platform-y)
+-- 
+1.7.1
+
diff --git a/patches/debian/modpost-symbol-prefix.patch b/patches/debian/modpost-symbol-prefix.patch
new file mode 100644 (file)
index 0000000..0bda5f2
--- /dev/null
@@ -0,0 +1,22 @@
+From: Chris Boot <debian@bootc.net>
+Date: Mon, 01 Jul 2013 23:10:02 +0100
+Subject: modpost symbol prefix setting
+Forwarded: not-needed
+
+[bwh: The original version of this was added by Bastian Blank.  The
+upstream code includes <generated/autoconf.h> so that <linux/export.h>
+can tell whether C symbols have an underscore prefix.  Since we build
+modpost separately from the kernel, <generated/autoconf.h> won't exist.
+However, no Debian Linux architecture uses the symbol prefix, so we
+can simply omit it.]
+
+--- a/scripts/mod/modpost.c
++++ b/scripts/mod/modpost.c
+@@ -19,7 +19,6 @@
+ #include <stdbool.h>
+ #include <errno.h>
+ #include "modpost.h"
+-#include "../../include/generated/autoconf.h"
+ #include "../../include/linux/license.h"
+ #include "../../include/linux/export.h"
diff --git a/patches/debian/powerpcspe-omit-uimage.patch b/patches/debian/powerpcspe-omit-uimage.patch
new file mode 100644 (file)
index 0000000..cb80858
--- /dev/null
@@ -0,0 +1,43 @@
+Description: Prevent building uImage with missing mkimage
+ On some powerpc platforms, CONFIG_DEFAULT_UIMAGE is selected automatically,
+ which leads to uImage being built automatically with mkimage. This tool is not
+ available in linux's build-dependencies, and the file is not strictly
+ necessary, so we are omitting this step in the build process, Debian-specific.
+Author: Roland Stigge <stigge@antcom.de>
+Bug-Debian: https://bugs.debian.org/708094
+Forwarded: not-needed
+
+--- a/arch/powerpc/boot/Makefile
++++ b/arch/powerpc/boot/Makefile
+@@ -221,7 +221,6 @@ image-$(CONFIG_PPC_CHRP)           += zImage.chrp
+ image-$(CONFIG_PPC_EFIKA)             += zImage.chrp
+ image-$(CONFIG_PPC_PMAC)              += zImage.pmac
+ image-$(CONFIG_PPC_HOLLY)             += dtbImage.holly
+-image-$(CONFIG_DEFAULT_UIMAGE)                += uImage
+ image-$(CONFIG_EPAPR_BOOT)            += zImage.epapr
+ #
+@@ -280,23 +279,6 @@ image-$(CONFIG_MPC834x_MDS)               += cuImage.
+ image-$(CONFIG_MPC836x_MDS)           += cuImage.mpc836x_mds
+ image-$(CONFIG_ASP834x)                       += dtbImage.asp834x-redboot
+-# Board ports in arch/powerpc/platform/85xx/Kconfig
+-image-$(CONFIG_MPC8540_ADS)           += cuImage.mpc8540ads
+-image-$(CONFIG_MPC8560_ADS)           += cuImage.mpc8560ads
+-image-$(CONFIG_MPC85xx_CDS)           += cuImage.mpc8541cds \
+-                                         cuImage.mpc8548cds_32b \
+-                                         cuImage.mpc8555cds
+-image-$(CONFIG_MPC85xx_MDS)           += cuImage.mpc8568mds
+-image-$(CONFIG_MPC85xx_DS)            += cuImage.mpc8544ds \
+-                                         cuImage.mpc8572ds
+-image-$(CONFIG_TQM8540)                       += cuImage.tqm8540
+-image-$(CONFIG_TQM8541)                       += cuImage.tqm8541
+-image-$(CONFIG_TQM8548)                       += cuImage.tqm8548
+-image-$(CONFIG_TQM8555)                       += cuImage.tqm8555
+-image-$(CONFIG_TQM8560)                       += cuImage.tqm8560
+-image-$(CONFIG_SBC8548)                       += cuImage.sbc8548
+-image-$(CONFIG_KSI8560)                       += cuImage.ksi8560
+-
+ # Board ports in arch/powerpc/platform/86xx/Kconfig
+ image-$(CONFIG_MVME7100)                += dtbImage.mvme7100
diff --git a/patches/debian/rds-Disable-auto-loading-as-mitigation-against-local.patch b/patches/debian/rds-Disable-auto-loading-as-mitigation-against-local.patch
new file mode 100644 (file)
index 0000000..3343aec
--- /dev/null
@@ -0,0 +1,34 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 19 Nov 2010 02:12:48 +0000
+Subject: [PATCH 1/3] rds: Disable auto-loading as mitigation against local exploits
+Forwarded: not-needed
+
+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 <ben@decadent.org.uk>
+---
+ 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
+
diff --git a/patches/debian/sched-autogroup-disabled.patch b/patches/debian/sched-autogroup-disabled.patch
new file mode 100644 (file)
index 0000000..f95389d
--- /dev/null
@@ -0,0 +1,19 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: sched: Do not enable autogrouping by default
+Date: Wed, 16 Mar 2011 03:17:06 +0000
+Forwarded: not-needed
+
+We want to provide the option of autogrouping but without enabling
+it by default yet.
+
+--- a/kernel/sched/auto_group.c
++++ b/kernel/sched/auto_group.c
+@@ -9,7 +9,7 @@
+ #include <linux/security.h>
+ #include <linux/export.h>
+-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;
diff --git a/patches/debian/snd-pcsp-disable-autoload.patch b/patches/debian/snd-pcsp-disable-autoload.patch
new file mode 100644 (file)
index 0000000..5871dc6
--- /dev/null
@@ -0,0 +1,30 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Wed, 05 Feb 2014 23:01:30 +0000
+Subject: snd-pcsp: Disable autoload
+Forwarded: not-needed
+Bug-Debian: https://bugs.debian.org/697709
+
+There are two drivers claiming the platform:pcspkr device:
+- pcspkr creates an input(!) device that can only beep
+- snd-pcsp creates an equivalent input device plus a PCM device that can
+  play barely recognisable renditions of sampled sound
+
+snd-pcsp is blacklisted by the alsa-base package, but not everyone
+installs that.  On PCs where no sound is wanted at all, both drivers
+will still be loaded and one or other will complain that it couldn't
+claim the relevant I/O range.
+
+In case anyone finds snd-pcsp useful, we continue to build it.  But
+remove the alias, to ensure it's not loaded where it's not wanted.
+
+--- a/sound/drivers/pcsp/pcsp.c
++++ b/sound/drivers/pcsp/pcsp.c
+@@ -21,7 +21,7 @@ MODULE_AUTHOR("Stas Sergeev <stsp@users.
+ MODULE_DESCRIPTION("PC-Speaker driver");
+ MODULE_LICENSE("GPL");
+ MODULE_SUPPORTED_DEVICE("{{PC-Speaker, pcsp}}");
+-MODULE_ALIAS("platform:pcspkr");
++/*MODULE_ALIAS("platform:pcspkr");*/
+ static int index = SNDRV_DEFAULT_IDX1;        /* Index 0-MAX */
+ static char *id = SNDRV_DEFAULT_STR1; /* ID for this card */
diff --git a/patches/debian/time-mark-timer_stats-as-broken.patch b/patches/debian/time-mark-timer_stats-as-broken.patch
new file mode 100644 (file)
index 0000000..4c35d73
--- /dev/null
@@ -0,0 +1,21 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 26 Feb 2017 21:01:50 +0000
+Subject: time: Mark TIMER_STATS as broken
+Forwarded: not-needed
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-5967
+
+This is a substitute for upstream commit dfb4357da6dd "time: Remove
+CONFIG_TIMER_STATS", which avoids the need to resolve conflicts with
+the PREEMPT_RT patch series.
+
+---
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
+@@ -964,6 +964,7 @@ config DEBUG_TIMEKEEPING
+ config TIMER_STATS
+       bool "Collect kernel timers statistics"
+       depends on DEBUG_KERNEL && PROC_FS
++      depends on BROKEN
+       help
+         If you say Y here, additional code will be inserted into the
+         timer routines to collect statistics about kernel timers being
diff --git a/patches/debian/tools-perf-install.patch b/patches/debian/tools-perf-install.patch
new file mode 100644 (file)
index 0000000..8d3ede9
--- /dev/null
@@ -0,0 +1,50 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Fri, 07 Oct 2011 21:37:52 +0100
+Subject: Install perf scripts non-executable
+Forwarded: no
+
+[bwh: Forward-ported to 3.12]
+
+--- a/tools/perf/Makefile.perf
++++ b/tools/perf/Makefile.perf
+@@ -563,8 +563,8 @@ endif
+ ifndef NO_LIBPERL
+       $(call QUIET_INSTALL, perl-scripts) \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
+-              $(INSTALL) scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
+-              $(INSTALL) scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
++              $(INSTALL) -m 644 scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
++              $(INSTALL) -m 644 scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
+               $(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
+ endif
+@@ -572,23 +572,23 @@ ifndef NO_LIBPYTHON
+       $(call QUIET_INSTALL, python-scripts) \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'; \
+-              $(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
+-              $(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
++              $(INSTALL) -m 644 scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
++              $(INSTALL) -m 644 scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
+               $(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
+ endif
+       $(call QUIET_INSTALL, perf_completion-script) \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
+-              $(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
++              $(INSTALL) -m 644 perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
+       $(call QUIET_INSTALL, perf-tip) \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
+-              $(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
++              $(INSTALL) -m 644 Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
+ install-tests: all install-gtk
+       $(call QUIET_INSTALL, tests) \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+-              $(INSTALL) tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
++              $(INSTALL) -m 644 tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
+-              $(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'
++              $(INSTALL) -m 644 tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'
+ install-bin: install-tools install-tests
diff --git a/patches/debian/tools-perf-version.patch b/patches/debian/tools-perf-version.patch
new file mode 100644 (file)
index 0000000..f9fa2ca
--- /dev/null
@@ -0,0 +1,106 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Mon, 26 Sep 2011 13:53:12 +0100
+Subject: Create manpages and binaries including the version
+Forwarded: no
+
+[bwh: Fix version insertion in perf man page cross-references and perf
+man page title.  Install bash_completion script for perf with a
+version-dependent name.  And do the same for trace.]
+
+--- a/tools/perf/Makefile.perf
++++ b/tools/perf/Makefile.perf
+@@ -539,18 +539,18 @@ install-gtk:
+ install-tools: all install-gtk
+       $(call QUIET_INSTALL, binaries) \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'; \
+-              $(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'; \
+-              $(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf' '$(DESTDIR_SQ)$(bindir_SQ)/trace'
++              $(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)/perf_$(VERSION)'; \
++              $(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf_$(VERSION)' '$(DESTDIR_SQ)$(bindir_SQ)/trace_$(VERSION)'
++      $(call QUIET_INSTALL, libexec) \
++              $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+ ifndef NO_PERF_READ_VDSO32
+       $(call QUIET_INSTALL, perf-read-vdso32) \
+-              $(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(bindir_SQ)';
++              $(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
+ endif
+ ifndef NO_PERF_READ_VDSOX32
+       $(call QUIET_INSTALL, perf-read-vdsox32) \
+-              $(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)';
++              $(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
+ endif
+-      $(call QUIET_INSTALL, libexec) \
+-              $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+       $(call QUIET_INSTALL, perf-archive) \
+               $(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+       $(call QUIET_INSTALL, perf-with-kcore) \
+@@ -578,7 +578,7 @@ ifndef NO_LIBPYTHON
+ endif
+       $(call QUIET_INSTALL, perf_completion-script) \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
+-              $(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
++              $(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
+       $(call QUIET_INSTALL, perf-tip) \
+               $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
+               $(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
+@@ -599,7 +599,7 @@ install-python_ext:
+ # 'make install-doc' should call 'make -C Documentation install'
+ $(INSTALL_DOC_TARGETS):
+-      $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=)
++      $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=) VERSION=$(VERSION)
+ ### Cleaning rules
+--- a/tools/perf/Documentation/Makefile
++++ b/tools/perf/Documentation/Makefile
+@@ -183,14 +183,16 @@ ifdef missing_tools
+       $(error "You need to install $(missing_tools) for man pages")
+ endif
+-do-install-man: man
++do-install-man: $(addprefix install-man-,$(_DOC_MAN1))
++
++install-man-perf.1: $(OUTPUT)perf.1
++      $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir)
++      sed -e 's/"PERF"/"PERF_$(VERSION)"/' -e 's/fBperf-/fBperf_$(VERSION)-/g' $^ > $(DESTDIR)$(man1dir)/perf_$(VERSION).1
++
++install-man-perf%.1: $(OUTPUT)perf%.1
+       $(call QUIET_INSTALL, Documentation-man) \
+               $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir); \
+-#             $(INSTALL) -d -m 755 $(DESTDIR)$(man5dir); \
+-#             $(INSTALL) -d -m 755 $(DESTDIR)$(man7dir); \
+-              $(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir); \
+-#             $(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir); \
+-#             $(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir)
++              sed -e 's/"PERF\\-/"PERF_$(VERSION)\\-/' -e 's/fBperf-/fBperf_$(VERSION)-/g' $^ > $(DESTDIR)$(man1dir)/perf_$(VERSION)$*.1
+ install-man: check-man-tools man
+--- a/tools/perf/util/Build
++++ b/tools/perf/util/Build
+@@ -138,6 +138,7 @@ CFLAGS_rbtree.o        += -Wno-unused-pa
+ CFLAGS_libstring.o     += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
+ CFLAGS_hweight.o       += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
+ CFLAGS_parse-events.o  += -Wno-redundant-decls
++CFLAGS_vdso.o         += -DPERFEXECDIR='"$(perfexec_instdir_SQ)"'
+ $(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c FORCE
+       $(call rule_mkdir)
+--- a/tools/perf/util/vdso.c
++++ b/tools/perf/util/vdso.c
+@@ -51,12 +51,12 @@ static struct vdso_info *vdso_info__new(
+               .vdso32  = {
+                       .temp_file_name = VDSO__TEMP_FILE_NAME,
+                       .dso_name = DSO__NAME_VDSO32,
+-                      .read_prog = "perf-read-vdso32",
++                      .read_prog = PERFEXECDIR "/perf-read-vdso32",
+               },
+               .vdsox32  = {
+                       .temp_file_name = VDSO__TEMP_FILE_NAME,
+                       .dso_name = DSO__NAME_VDSOX32,
+-                      .read_prog = "perf-read-vdsox32",
++                      .read_prog = PERFEXECDIR "/perf-read-vdsox32",
+               },
+ #endif
+       };
diff --git a/patches/debian/uname-version-timestamp.patch b/patches/debian/uname-version-timestamp.patch
new file mode 100644 (file)
index 0000000..5cd565c
--- /dev/null
@@ -0,0 +1,33 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: Make mkcompile_h accept an alternate timestamp string
+Date: Tue, 12 May 2015 19:29:22 +0100
+Forwarded: not-needed
+
+We want to include the Debian version in the utsname::version string
+instead of a full timestamp string.  However, we still need to provide
+a standard timestamp string for gen_initramfs_list.sh to make the
+kernel image reproducible.
+
+Make mkcompile_h use $KBUILD_BUILD_VERSION_TIMESTAMP in preference to
+$KBUILD_BUILD_TIMESTAMP.
+
+--- a/scripts/mkcompile_h
++++ b/scripts/mkcompile_h
+@@ -37,10 +37,14 @@ else
+       VERSION=$KBUILD_BUILD_VERSION
+ fi
+-if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then
+-      TIMESTAMP=`date`
++if [ -z "$KBUILD_BUILD_VERSION_TIMESTAMP" ]; then
++      if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then
++              TIMESTAMP=`date`
++      else
++              TIMESTAMP=$KBUILD_BUILD_TIMESTAMP
++      fi
+ else
+-      TIMESTAMP=$KBUILD_BUILD_TIMESTAMP
++      TIMESTAMP=$KBUILD_BUILD_VERSION_TIMESTAMP
+ fi
+ if test -z "$KBUILD_BUILD_USER"; then
+       LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/')
diff --git a/patches/debian/version.patch b/patches/debian/version.patch
new file mode 100644 (file)
index 0000000..505f0b7
--- /dev/null
@@ -0,0 +1,138 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: Include package version along with kernel release in stack traces
+Date: Tue, 24 Jul 2012 03:13:10 +0100
+Forwarded: not-needed
+
+For distribution binary packages we assume
+$DISTRIBUTION_OFFICIAL_BUILD, $DISTRIBUTOR and $DISTRIBUTION_VERSION
+are set.
+
+--- a/Makefile
++++ b/Makefile
+@@ -1024,7 +1024,7 @@ endif
+ prepare2: prepare3 prepare-compiler-check outputmakefile asm-generic
+ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
+-                   include/config/auto.conf
++                   include/config/auto.conf include/generated/package.h
+       $(cmd_crmodverdir)
+ archprepare: archheaders archscripts prepare1 scripts_basic
+@@ -1097,6 +1097,16 @@ define filechk_version.h
+       echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
+ endef
++ifneq ($(DISTRIBUTION_OFFICIAL_BUILD),)
++define filechk_package.h
++      echo \#define LINUX_PACKAGE_ID \" $(DISTRIBUTOR) $(DISTRIBUTION_VERSION)\"
++endef
++else
++define filechk_package.h
++      echo \#define LINUX_PACKAGE_ID \"\"
++endef
++endif
++
+ $(version_h): $(srctree)/Makefile FORCE
+       $(call filechk,version.h)
+       $(Q)rm -f $(old_version_h)
+@@ -1104,6 +1114,9 @@ $(version_h): $(srctree)/Makefile FORCE
+ include/generated/utsrelease.h: include/config/kernel.release FORCE
+       $(call filechk,utsrelease.h)
++include/generated/package.h: $(srctree)/Makefile FORCE
++      $(call filechk,package.h)
++
+ PHONY += headerdep
+ headerdep:
+       $(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
+--- a/arch/x86/um/sysrq_64.c
++++ b/arch/x86/um/sysrq_64.c
+@@ -8,6 +8,7 @@
+ #include <linux/module.h>
+ #include <linux/sched.h>
+ #include <linux/utsname.h>
++#include <generated/package.h>
+ #include <asm/current.h>
+ #include <asm/ptrace.h>
+ #include <asm/sysrq.h>
+@@ -16,8 +17,9 @@ void show_regs(struct pt_regs *regs)
+ {
+       printk("\n");
+       print_modules();
+-      printk(KERN_INFO "Pid: %d, comm: %.20s %s %s\n", task_pid_nr(current),
+-              current->comm, print_tainted(), init_utsname()->release);
++      printk(KERN_INFO "Pid: %d, comm: %.20s %s %s%s\n", task_pid_nr(current),
++              current->comm, print_tainted(), init_utsname()->release,
++              LINUX_PACKAGE_ID);
+       printk(KERN_INFO "RIP: %04lx:[<%016lx>]\n", PT_REGS_CS(regs) & 0xffff,
+              PT_REGS_IP(regs));
+       printk(KERN_INFO "RSP: %016lx  EFLAGS: %08lx\n", PT_REGS_SP(regs),
+--- a/arch/ia64/kernel/process.c
++++ b/arch/ia64/kernel/process.c
+@@ -30,6 +30,7 @@
+ #include <linux/utsname.h>
+ #include <linux/tracehook.h>
+ #include <linux/rcupdate.h>
++#include <generated/package.h>
+ #include <asm/cpu.h>
+ #include <asm/delay.h>
+@@ -103,9 +104,9 @@ show_regs (struct pt_regs *regs)
+       print_modules();
+       printk("\n");
+       show_regs_print_info(KERN_DEFAULT);
+-      printk("psr : %016lx ifs : %016lx ip  : [<%016lx>]    %s (%s)\n",
++      printk("psr : %016lx ifs : %016lx ip  : [<%016lx>]    %s (%s%s)\n",
+              regs->cr_ipsr, regs->cr_ifs, ip, print_tainted(),
+-             init_utsname()->release);
++             init_utsname()->release, LINUX_PACKAGE_ID);
+       print_symbol("ip is at %s\n", ip);
+       printk("unat: %016lx pfs : %016lx rsc : %016lx\n",
+              regs->ar_unat, regs->ar_pfs, regs->ar_rsc);
+--- a/arch/powerpc/kernel/process.c
++++ b/arch/powerpc/kernel/process.c
+@@ -39,6 +39,7 @@
+ #include <linux/hw_breakpoint.h>
+ #include <linux/uaccess.h>
+ #include <linux/elf-randomize.h>
++#include <generated/package.h>
+ #include <asm/pgtable.h>
+ #include <asm/io.h>
+@@ -1340,8 +1341,9 @@ void show_regs(struct pt_regs * regs)
+       printk("NIP: "REG" LR: "REG" CTR: "REG"\n",
+              regs->nip, regs->link, regs->ctr);
+-      printk("REGS: %p TRAP: %04lx   %s  (%s)\n",
+-             regs, regs->trap, print_tainted(), init_utsname()->release);
++      printk("REGS: %p TRAP: %04lx   %s  (%s%s)\n",
++             regs, regs->trap, print_tainted(), init_utsname()->release,
++             LINUX_PACKAGE_ID);
+       printk("MSR: "REG" ", regs->msr);
+       print_msr_bits(regs->msr);
+       printk("  CR: %08lx  XER: %08lx\n", regs->ccr, regs->xer);
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -45,6 +45,7 @@
+ #include <linux/utsname.h>
+ #include <linux/ctype.h>
+ #include <linux/uio.h>
++#include <generated/package.h>
+ #include <asm/uaccess.h>
+ #include <asm/sections.h>
+@@ -3282,11 +3283,12 @@ void __init dump_stack_set_arch_desc(con
+  */
+ void dump_stack_print_info(const char *log_lvl)
+ {
+-      printk("%sCPU: %d PID: %d Comm: %.20s %s %s %.*s\n",
++      printk("%sCPU: %d PID: %d Comm: %.20s %s %s %.*s%s\n",
+              log_lvl, raw_smp_processor_id(), current->pid, current->comm,
+              print_tainted(), init_utsname()->release,
+              (int)strcspn(init_utsname()->version, " "),
+-             init_utsname()->version);
++             init_utsname()->version,
++             LINUX_PACKAGE_ID);
+       if (dump_stack_arch_desc_str[0] != '\0')
+               printk("%sHardware name: %s\n",
diff --git a/patches/debian/yama-disable-by-default.patch b/patches/debian/yama-disable-by-default.patch
new file mode 100644 (file)
index 0000000..bbf8f21
--- /dev/null
@@ -0,0 +1,26 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Subject: yama: Disable by default
+Date: Wed, 19 Jun 2013 04:35:28 +0100
+Bug-Debian: https://bugs.debian.org/712740
+Forwarded: not-needed
+
+--- a/security/yama/yama_lsm.c
++++ b/security/yama/yama_lsm.c
+@@ -24,7 +24,7 @@
+ #define YAMA_SCOPE_CAPABILITY 2
+ #define YAMA_SCOPE_NO_ATTACH  3
+-static int ptrace_scope = YAMA_SCOPE_RELATIONAL;
++static int ptrace_scope = YAMA_SCOPE_DISABLED;
+ /* describe a ptrace relationship for potential exception */
+ struct ptrace_relation {
+@@ -402,7 +402,7 @@ static inline void yama_init_sysctl(void
+ void __init yama_add_hooks(void)
+ {
+-      pr_info("Yama: becoming mindful.\n");
++      pr_info("Yama: disabled by default; enable with sysctl kernel.yama.*\n");
+       security_add_hooks(yama_hooks, ARRAY_SIZE(yama_hooks));
+       yama_init_sysctl();
+ }
diff --git a/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch b/patches/features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch
new file mode 100644 (file)
index 0000000..efabde1
--- /dev/null
@@ -0,0 +1,155 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 14 Sep 2010 04:33:34 +0100
+Subject: Kbuild: kconfig: Verbose version of --listnewconfig
+Forwarded: http://thread.gmane.org/gmane.linux.kbuild.devel/5774
+
+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 <waldi@debian.org> and
+maximilian attems <max@stro.at>.  Simplified by Michal Marek
+<mmarek@suse.cz>.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ scripts/kconfig/conf.c      |   42 ++++++++++++++++++++++++++++++++----------
+ scripts/kconfig/confdata.c  |    9 +++++++++
+ scripts/kconfig/expr.h      |    2 ++
+ scripts/kconfig/lkc_proto.h |    1 +
+ 4 files changed, 44 insertions(+), 10 deletions(-)
+
+--- a/scripts/kconfig/conf.c
++++ b/scripts/kconfig/conf.c
+@@ -369,7 +369,6 @@ static void conf(struct menu *menu)
+               switch (prop->type) {
+               case P_MENU:
+                       if ((input_mode == silentoldconfig ||
+-                           input_mode == listnewconfig ||
+                            input_mode == olddefconfig) &&
+                           rootEntry != menu) {
+                               check_conf(menu);
+@@ -430,11 +429,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 != olddefconfig) {
++                      if (input_mode != olddefconfig) {
+                               if (!conf_cnt++)
+                                       printf(_("*\n* Restart config...\n*\n"));
+                               rootEntry = menu_get_parent_menu(menu);
+@@ -447,6 +442,30 @@ 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)) {
++              conf_write_new_symbol(stdout, sym, verbose);
++      }
++
++      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},
+@@ -494,6 +513,7 @@ int main(int ac, char **av)
+       const char *progname = av[0];
+       int opt;
+       const char *name, *defconfig_file = NULL /* gcc uninit */;
++      const char *value;
+       struct stat tmpstat;
+       setlocale(LC_ALL, "");
+@@ -673,16 +693,18 @@ int main(int ac, char **av)
+               input_mode = silentoldconfig;
+               /* fall through */
+       case oldconfig:
+-      case listnewconfig:
+       case olddefconfig:
+       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 != olddefconfig));
++              } while (conf_cnt && input_mode != olddefconfig);
++              break;
++      case listnewconfig:
++              conf_set_all_new_symbols(def_default);
++              value = getenv("KBUILD_VERBOSE");
++              report_conf(&rootmenu, value && atoi(value));
+               break;
+       }
+--- a/scripts/kconfig/confdata.c
++++ b/scripts/kconfig/confdata.c
+@@ -738,6 +738,14 @@ next_menu:
+       return 0;
+ }
++void conf_write_new_symbol(FILE *fp, struct symbol *sym, bool verbose)
++{
++      if (verbose)
++              conf_write_symbol(fp, sym, &kconfig_printer_cb, NULL);
++      else
++              fprintf(fp, "%s%s\n", CONFIG_, sym->name);
++}
++
+ int conf_write(const char *name)
+ {
+       FILE *out;
+@@ -1171,7 +1179,10 @@ bool conf_set_all_new_symbols(enum conf_
+       bool has_changed = false;
+       for_all_symbols(i, sym) {
+-              if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID))
++              if (sym_has_value(sym))
++                      continue;
++              sym->flags |= SYMBOL_NEW;
++              if (sym->flags & SYMBOL_VALID)
+                       continue;
+               switch (sym_get_type(sym)) {
+               case S_BOOLEAN:
+--- a/scripts/kconfig/expr.h
++++ b/scripts/kconfig/expr.h
+@@ -114,6 +114,8 @@ struct symbol {
+ /* Set symbol to y if allnoconfig; used for symbols that hide others */
+ #define SYMBOL_ALLNOCONFIG_Y 0x200000
++#define SYMBOL_NEW        0x400000 /* symbol is new (loaded config did not provide a value) */
++
+ #define SYMBOL_MAXLENGTH      256
+ #define SYMBOL_HASHSIZE               9973
+--- a/scripts/kconfig/lkc_proto.h
++++ b/scripts/kconfig/lkc_proto.h
+@@ -7,6 +7,7 @@ int conf_read_simple(const char *name, i
+ int conf_write_defconfig(const char *name);
+ int conf_write(const char *name);
+ int conf_write_autoconf(void);
++void conf_write_new_symbol(FILE*, struct symbol*, bool);
+ bool conf_get_changed(void);
+ void conf_set_changed_callback(void (*fn)(void));
+ void conf_set_message_callback(void (*fn)(const char *fmt, va_list ap));
diff --git a/patches/features/all/aufs4/aufs4-base.patch b/patches/features/all/aufs4/aufs4-base.patch
new file mode 100644 (file)
index 0000000..969f0ee
--- /dev/null
@@ -0,0 +1,261 @@
+From: J. R. Okajima <hooanon05@yahoo.co.jp>
+Date: Sat Feb 4 13:13:07 2017 +0900
+Subject: aufs4.9 base patch
+Origin: https://github.com/sfjro/aufs4-standalone/tree/ecd2bfe6f46f36658c9aef74fc43ac40e47f8438
+Bug-Debian: https://bugs.debian.org/541828
+
+Patch headers added by debian/patches/features/all/aufs4/gen-patch
+
+aufs4.9 base patch
+
+diff --git a/MAINTAINERS b/MAINTAINERS
+index 63cefa6..d78b954 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -2293,6 +2293,19 @@ F:      include/linux/audit.h
+ F:    include/uapi/linux/audit.h
+ F:    kernel/audit*
++AUFS (advanced multi layered unification filesystem) FILESYSTEM
++M:    "J. R. Okajima" <hooanon05g@gmail.com>
++L:    linux-unionfs@vger.kernel.org
++L:    aufs-users@lists.sourceforge.net (members only)
++W:    http://aufs.sourceforge.net
++T:    git://github.com/sfjro/aufs4-linux.git
++S:    Supported
++F:    Documentation/filesystems/aufs/
++F:    Documentation/ABI/testing/debugfs-aufs
++F:    Documentation/ABI/testing/sysfs-aufs
++F:    fs/aufs/
++F:    include/uapi/linux/aufs_type.h
++
+ AUXILIARY DISPLAY DRIVERS
+ M:    Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
+ W:    http://miguelojeda.es/auxdisplay.htm
+diff --git a/drivers/block/loop.c b/drivers/block/loop.c
+index fa1b7a9..6ee9235 100644
+--- a/drivers/block/loop.c
++++ b/drivers/block/loop.c
+@@ -701,6 +701,24 @@ static inline int is_loop_device(struct file *file)
+       return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
+ }
++/*
++ * for AUFS
++ * no get/put for file.
++ */
++struct file *loop_backing_file(struct super_block *sb)
++{
++      struct file *ret;
++      struct loop_device *l;
++
++      ret = NULL;
++      if (MAJOR(sb->s_dev) == LOOP_MAJOR) {
++              l = sb->s_bdev->bd_disk->private_data;
++              ret = l->lo_backing_file;
++      }
++      return ret;
++}
++EXPORT_SYMBOL_GPL(loop_backing_file);
++
+ /* loop sysfs attributes */
+ static ssize_t loop_attr_show(struct device *dev, char *page,
+diff --git a/fs/dcache.c b/fs/dcache.c
+index 5c7cc95..df0268c 100644
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -1164,7 +1164,7 @@ enum d_walk_ret {
+  *
+  * The @enter() and @finish() callbacks are called with d_lock held.
+  */
+-static void d_walk(struct dentry *parent, void *data,
++void d_walk(struct dentry *parent, void *data,
+                  enum d_walk_ret (*enter)(void *, struct dentry *),
+                  void (*finish)(void *))
+ {
+diff --git a/fs/fcntl.c b/fs/fcntl.c
+index 350a2c8..6f42279 100644
+--- a/fs/fcntl.c
++++ b/fs/fcntl.c
+@@ -29,7 +29,7 @@
+ #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
+-static int setfl(int fd, struct file * filp, unsigned long arg)
++int setfl(int fd, struct file * filp, unsigned long arg)
+ {
+       struct inode * inode = file_inode(filp);
+       int error = 0;
+@@ -60,6 +60,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
+       if (filp->f_op->check_flags)
+               error = filp->f_op->check_flags(arg);
++      if (!error && filp->f_op->setfl)
++              error = filp->f_op->setfl(filp, arg);
+       if (error)
+               return error;
+diff --git a/fs/inode.c b/fs/inode.c
+index 88110fd..9a9ba3a 100644
+--- a/fs/inode.c
++++ b/fs/inode.c
+@@ -1642,7 +1642,7 @@ EXPORT_SYMBOL(generic_update_time);
+  * This does the actual work of updating an inodes time or version.  Must have
+  * had called mnt_want_write() before calling this.
+  */
+-static int update_time(struct inode *inode, struct timespec *time, int flags)
++int update_time(struct inode *inode, struct timespec *time, int flags)
+ {
+       int (*update_time)(struct inode *, struct timespec *, int);
+diff --git a/fs/read_write.c b/fs/read_write.c
+index 190e0d36..4052813 100644
+--- a/fs/read_write.c
++++ b/fs/read_write.c
+@@ -515,6 +515,28 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
+ }
+ EXPORT_SYMBOL(__vfs_write);
++vfs_readf_t vfs_readf(struct file *file)
++{
++      const struct file_operations *fop = file->f_op;
++
++      if (fop->read)
++              return fop->read;
++      if (fop->read_iter)
++              return new_sync_read;
++      return ERR_PTR(-ENOSYS);
++}
++
++vfs_writef_t vfs_writef(struct file *file)
++{
++      const struct file_operations *fop = file->f_op;
++
++      if (fop->write)
++              return fop->write;
++      if (fop->write_iter)
++              return new_sync_write;
++      return ERR_PTR(-ENOSYS);
++}
++
+ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
+ {
+       mm_segment_t old_fs;
+diff --git a/fs/splice.c b/fs/splice.c
+index 5a7750b..28160a7 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -855,8 +855,8 @@ EXPORT_SYMBOL(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);
+@@ -872,9 +872,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/fs/sync.c b/fs/sync.c
+index 2a54c1f..7a5fa3f 100644
+--- a/fs/sync.c
++++ b/fs/sync.c
+@@ -27,7 +27,7 @@
+  * wait == 1 case since in that case write_inode() functions do
+  * sync_dirty_buffer() and thus effectively write one block at a time.
+  */
+-static int __sync_filesystem(struct super_block *sb, int wait)
++int __sync_filesystem(struct super_block *sb, int wait)
+ {
+       if (wait)
+               sync_inodes_sb(sb);
+diff --git a/include/linux/file.h b/include/linux/file.h
+index 7444f5f..bdac0be 100644
+--- a/include/linux/file.h
++++ b/include/linux/file.h
+@@ -19,6 +19,7 @@ struct dentry;
+ struct path;
+ extern struct file *alloc_file(struct path *, fmode_t mode,
+       const struct file_operations *fop);
++extern struct file *get_empty_filp(void);
+ static inline void fput_light(struct file *file, int fput_needed)
+ {
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index dc0478c..a02be40d 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -1291,6 +1291,7 @@ extern void fasync_free(struct fasync_struct *);
+ /* can be called from interrupts */
+ extern void kill_fasync(struct fasync_struct **, int, int);
++extern int setfl(int fd, struct file * filp, unsigned long arg);
+ extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
+ extern void f_setown(struct file *filp, unsigned long arg, int force);
+ extern void f_delown(struct file *filp);
+@@ -1715,6 +1716,7 @@ struct file_operations {
+       ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
+       unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+       int (*check_flags)(int);
++      int (*setfl)(struct file *, unsigned long);
+       int (*flock) (struct file *, int, struct file_lock *);
+       ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
+       ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+@@ -1768,6 +1770,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
+                             struct iovec *fast_pointer,
+                             struct iovec **ret_pointer);
++typedef ssize_t (*vfs_readf_t)(struct file *, char __user *, size_t, loff_t *);
++typedef ssize_t (*vfs_writef_t)(struct file *, const char __user *, size_t,
++                              loff_t *);
++vfs_readf_t vfs_readf(struct file *file);
++vfs_writef_t vfs_writef(struct file *file);
++
+ extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
+ extern ssize_t __vfs_write(struct file *, const char __user *, size_t, loff_t *);
+ extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
+@@ -2140,6 +2148,7 @@ extern int current_umask(void);
+ extern void ihold(struct inode * inode);
+ extern void iput(struct inode *);
+ extern int generic_update_time(struct inode *, struct timespec *, int);
++extern int update_time(struct inode *, struct timespec *, int);
+ /* /sys/fs */
+ extern struct kobject *fs_kobj;
+@@ -2419,6 +2428,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
+       return false;
+ }
+ #endif
++extern int __sync_filesystem(struct super_block *, int);
+ extern int sync_filesystem(struct super_block *);
+ extern const struct file_operations def_blk_fops;
+ extern const struct file_operations def_chr_fops;
+diff --git a/include/linux/splice.h b/include/linux/splice.h
+index 00a2116..1f0a4a2 100644
+--- a/include/linux/splice.h
++++ b/include/linux/splice.h
+@@ -86,4 +86,10 @@ extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
+ extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
+ extern const struct pipe_buf_operations default_pipe_buf_ops;
++
++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
diff --git a/patches/features/all/aufs4/aufs4-mmap.patch b/patches/features/all/aufs4/aufs4-mmap.patch
new file mode 100644 (file)
index 0000000..a8c38c9
--- /dev/null
@@ -0,0 +1,418 @@
+From: J. R. Okajima <hooanon05@yahoo.co.jp>
+Date: Sat Jan 28 00:46:14 2017 +0900
+Subject: aufs4.9 mmap patch
+Origin: https://github.com/sfjro/aufs4-standalone/tree/ecd2bfe6f46f36658c9aef74fc43ac40e47f8438
+Bug-Debian: https://bugs.debian.org/541828
+
+Patch headers added by debian/patches/features/all/aufs4/gen-patch
+
+aufs4.9 mmap patch
+
+diff --git a/fs/proc/base.c b/fs/proc/base.c
+index ca651ac..0e8551a 100644
+--- a/fs/proc/base.c
++++ b/fs/proc/base.c
+@@ -1953,7 +1953,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path)
+       down_read(&mm->mmap_sem);
+       vma = find_exact_vma(mm, vm_start, vm_end);
+       if (vma && vma->vm_file) {
+-              *path = vma->vm_file->f_path;
++              *path = vma_pr_or_file(vma)->f_path;
+               path_get(path);
+               rc = 0;
+       }
+diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
+index f8595e8..cb8eda0 100644
+--- a/fs/proc/nommu.c
++++ b/fs/proc/nommu.c
+@@ -45,7 +45,10 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
+       file = region->vm_file;
+       if (file) {
+-              struct inode *inode = file_inode(region->vm_file);
++              struct inode *inode;
++
++              file = vmr_pr_or_file(region);
++              inode = file_inode(file);
+               dev = inode->i_sb->s_dev;
+               ino = inode->i_ino;
+       }
+diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
+index 35b92d8..5b981db 100644
+--- a/fs/proc/task_mmu.c
++++ b/fs/proc/task_mmu.c
+@@ -291,7 +291,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+       const char *name = NULL;
+       if (file) {
+-              struct inode *inode = file_inode(vma->vm_file);
++              struct inode *inode;
++
++              file = vma_pr_or_file(vma);
++              inode = file_inode(file);
+               dev = inode->i_sb->s_dev;
+               ino = inode->i_ino;
+               pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
+@@ -1627,7 +1630,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+       struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
+       struct vm_area_struct *vma = v;
+       struct numa_maps *md = &numa_priv->md;
+-      struct file *file = vma->vm_file;
++      struct file *file = vma_pr_or_file(vma);
+       struct mm_struct *mm = vma->vm_mm;
+       struct mm_walk walk = {
+               .hugetlb_entry = gather_hugetlb_stats,
+diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
+index 3717562..6a328f1 100644
+--- a/fs/proc/task_nommu.c
++++ b/fs/proc/task_nommu.c
+@@ -155,7 +155,10 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
+       file = vma->vm_file;
+       if (file) {
+-              struct inode *inode = file_inode(vma->vm_file);
++              struct inode *inode;
++
++              file = vma_pr_or_file(vma);
++              inode = file_inode(file);
+               dev = inode->i_sb->s_dev;
+               ino = inode->i_ino;
+               pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
+diff --git a/include/linux/mm.h b/include/linux/mm.h
+index a92c8d7..1d83a2a 100644
+--- a/include/linux/mm.h
++++ b/include/linux/mm.h
+@@ -1266,6 +1266,28 @@ static inline int fixup_user_fault(struct task_struct *tsk,
+ }
+ #endif
++extern void vma_do_file_update_time(struct vm_area_struct *, const char[], int);
++extern struct file *vma_do_pr_or_file(struct vm_area_struct *, const char[],
++                                    int);
++extern void vma_do_get_file(struct vm_area_struct *, const char[], int);
++extern void vma_do_fput(struct vm_area_struct *, const char[], int);
++
++#define vma_file_update_time(vma)     vma_do_file_update_time(vma, __func__, \
++                                                              __LINE__)
++#define vma_pr_or_file(vma)           vma_do_pr_or_file(vma, __func__, \
++                                                        __LINE__)
++#define vma_get_file(vma)             vma_do_get_file(vma, __func__, __LINE__)
++#define vma_fput(vma)                 vma_do_fput(vma, __func__, __LINE__)
++
++#ifndef CONFIG_MMU
++extern struct file *vmr_do_pr_or_file(struct vm_region *, const char[], int);
++extern void vmr_do_fput(struct vm_region *, const char[], int);
++
++#define vmr_pr_or_file(region)                vmr_do_pr_or_file(region, __func__, \
++                                                        __LINE__)
++#define vmr_fput(region)              vmr_do_fput(region, __func__, __LINE__)
++#endif /* !CONFIG_MMU */
++
+ extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len,
+               unsigned int gup_flags);
+ extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
+diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
+index 4a8aced..badd16b 100644
+--- a/include/linux/mm_types.h
++++ b/include/linux/mm_types.h
+@@ -275,6 +275,7 @@ struct vm_region {
+       unsigned long   vm_top;         /* region allocated to here */
+       unsigned long   vm_pgoff;       /* the offset in vm_file corresponding to vm_start */
+       struct file     *vm_file;       /* the backing file or NULL */
++      struct file     *vm_prfile;     /* the virtual backing file or NULL */
+       int             vm_usage;       /* region usage count (access under nommu_region_sem) */
+       bool            vm_icache_flushed : 1; /* true if the icache has been flushed for
+@@ -349,6 +350,7 @@ struct vm_area_struct {
+       unsigned long vm_pgoff;         /* Offset (within vm_file) in PAGE_SIZE
+                                          units */
+       struct file * vm_file;          /* File we map to (can be NULL). */
++      struct file *vm_prfile;         /* shadow of vm_file */
+       void * vm_private_data;         /* was vm_pte (shared mem) */
+ #ifndef CONFIG_MMU
+diff --git a/kernel/fork.c b/kernel/fork.c
+index 997ac1d..4d0131b 100644
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -624,7 +624,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
+                       struct inode *inode = file_inode(file);
+                       struct address_space *mapping = file->f_mapping;
+-                      get_file(file);
++                      vma_get_file(tmp);
+                       if (tmp->vm_flags & VM_DENYWRITE)
+                               atomic_dec(&inode->i_writecount);
+                       i_mmap_lock_write(mapping);
+diff --git a/mm/Makefile b/mm/Makefile
+index 295bd7a..14fa1c8 100644
+--- a/mm/Makefile
++++ b/mm/Makefile
+@@ -37,7 +37,7 @@ obj-y                        := filemap.o mempool.o oom_kill.o \
+                          mm_init.o mmu_context.o percpu.o slab_common.o \
+                          compaction.o vmacache.o \
+                          interval_tree.o list_lru.o workingset.o \
+-                         debug.o $(mmu-y)
++                         prfile.o debug.o $(mmu-y)
+ obj-y += init-mm.o
+diff --git a/mm/filemap.c b/mm/filemap.c
+index 50b52fe..9e607f9 100644
+--- a/mm/filemap.c
++++ b/mm/filemap.c
+@@ -2304,7 +2304,7 @@ int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
+       int ret = VM_FAULT_LOCKED;
+       sb_start_pagefault(inode->i_sb);
+-      file_update_time(vma->vm_file);
++      vma_file_update_time(vma);
+       lock_page(page);
+       if (page->mapping != inode->i_mapping) {
+               unlock_page(page);
+diff --git a/mm/memory.c b/mm/memory.c
+index e18c57b..7be4a39 100644
+--- a/mm/memory.c
++++ b/mm/memory.c
+@@ -2117,7 +2117,7 @@ static inline int wp_page_reuse(struct fault_env *fe, pte_t orig_pte,
+               }
+               if (!page_mkwrite)
+-                      file_update_time(vma->vm_file);
++                      vma_file_update_time(vma);
+       }
+       return VM_FAULT_WRITE;
+diff --git a/mm/mmap.c b/mm/mmap.c
+index 1af87c1..95b0ff4 100644
+--- a/mm/mmap.c
++++ b/mm/mmap.c
+@@ -170,7 +170,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
+       if (vma->vm_ops && vma->vm_ops->close)
+               vma->vm_ops->close(vma);
+       if (vma->vm_file)
+-              fput(vma->vm_file);
++              vma_fput(vma);
+       mpol_put(vma_policy(vma));
+       kmem_cache_free(vm_area_cachep, vma);
+       return next;
+@@ -879,7 +879,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
+       if (remove_next) {
+               if (file) {
+                       uprobe_munmap(next, next->vm_start, next->vm_end);
+-                      fput(file);
++                      vma_fput(vma);
+               }
+               if (next->anon_vma)
+                       anon_vma_merge(vma, next);
+@@ -1727,8 +1727,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+       return addr;
+ unmap_and_free_vma:
++      vma_fput(vma);
+       vma->vm_file = NULL;
+-      fput(file);
+       /* Undo any partial mapping done by a device driver. */
+       unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end);
+@@ -2533,7 +2533,7 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+               goto out_free_mpol;
+       if (new->vm_file)
+-              get_file(new->vm_file);
++              vma_get_file(new);
+       if (new->vm_ops && new->vm_ops->open)
+               new->vm_ops->open(new);
+@@ -2552,7 +2552,7 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+       if (new->vm_ops && new->vm_ops->close)
+               new->vm_ops->close(new);
+       if (new->vm_file)
+-              fput(new->vm_file);
++              vma_fput(new);
+       unlink_anon_vmas(new);
+  out_free_mpol:
+       mpol_put(vma_policy(new));
+@@ -2703,7 +2703,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+       struct vm_area_struct *vma;
+       unsigned long populate = 0;
+       unsigned long ret = -EINVAL;
+-      struct file *file;
++      struct file *file, *prfile;
+       pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.txt.\n",
+                    current->comm, current->pid);
+@@ -2778,10 +2778,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+               }
+       }
+-      file = get_file(vma->vm_file);
++      vma_get_file(vma);
++      file = vma->vm_file;
++      prfile = vma->vm_prfile;
+       ret = do_mmap_pgoff(vma->vm_file, start, size,
+                       prot, flags, pgoff, &populate);
++      if (!IS_ERR_VALUE(ret) && file && prfile) {
++              struct vm_area_struct *new_vma;
++
++              new_vma = find_vma(mm, ret);
++              if (!new_vma->vm_prfile)
++                      new_vma->vm_prfile = prfile;
++              if (new_vma != vma)
++                      get_file(prfile);
++      }
++      /*
++       * two fput()s instead of vma_fput(vma),
++       * coz vma may not be available anymore.
++       */
+       fput(file);
++      if (prfile)
++              fput(prfile);
+ out:
+       up_write(&mm->mmap_sem);
+       if (populate)
+@@ -3056,7 +3073,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+               if (anon_vma_clone(new_vma, vma))
+                       goto out_free_mempol;
+               if (new_vma->vm_file)
+-                      get_file(new_vma->vm_file);
++                      vma_get_file(new_vma);
+               if (new_vma->vm_ops && new_vma->vm_ops->open)
+                       new_vma->vm_ops->open(new_vma);
+               vma_link(mm, new_vma, prev, rb_link, rb_parent);
+diff --git a/mm/nommu.c b/mm/nommu.c
+index 8b8faaf..5d26ed94 100644
+--- a/mm/nommu.c
++++ b/mm/nommu.c
+@@ -636,7 +636,7 @@ static void __put_nommu_region(struct vm_region *region)
+               up_write(&nommu_region_sem);
+               if (region->vm_file)
+-                      fput(region->vm_file);
++                      vmr_fput(region);
+               /* IO memory and memory shared directly out of the pagecache
+                * from ramfs/tmpfs mustn't be released here */
+@@ -794,7 +794,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
+       if (vma->vm_ops && vma->vm_ops->close)
+               vma->vm_ops->close(vma);
+       if (vma->vm_file)
+-              fput(vma->vm_file);
++              vma_fput(vma);
+       put_nommu_region(vma->vm_region);
+       kmem_cache_free(vm_area_cachep, vma);
+ }
+@@ -1320,7 +1320,7 @@ unsigned long do_mmap(struct file *file,
+                                       goto error_just_free;
+                               }
+                       }
+-                      fput(region->vm_file);
++                      vmr_fput(region);
+                       kmem_cache_free(vm_region_jar, region);
+                       region = pregion;
+                       result = start;
+@@ -1395,10 +1395,10 @@ unsigned long do_mmap(struct file *file,
+       up_write(&nommu_region_sem);
+ error:
+       if (region->vm_file)
+-              fput(region->vm_file);
++              vmr_fput(region);
+       kmem_cache_free(vm_region_jar, region);
+       if (vma->vm_file)
+-              fput(vma->vm_file);
++              vma_fput(vma);
+       kmem_cache_free(vm_area_cachep, vma);
+       return ret;
+diff --git a/mm/prfile.c b/mm/prfile.c
+new file mode 100644
+index 0000000..b323b8a
+--- /dev/null
++++ b/mm/prfile.c
+@@ -0,0 +1,86 @@
++/*
++ * Mainly for aufs which mmap(2) diffrent file and wants to print different path
++ * in /proc/PID/maps.
++ * Call these functions via macros defined in linux/mm.h.
++ *
++ * See Documentation/filesystems/aufs/design/06mmap.txt
++ *
++ * Copyright (c) 2014 Junjro R. Okajima
++ * Copyright (c) 2014 Ian Campbell
++ */
++
++#include <linux/mm.h>
++#include <linux/file.h>
++#include <linux/fs.h>
++
++/* #define PRFILE_TRACE */
++static inline void prfile_trace(struct file *f, struct file *pr,
++                            const char func[], int line, const char func2[])
++{
++#ifdef PRFILE_TRACE
++      if (pr)
++              pr_info("%s:%d: %s, %s\n", func, line, func2,
++                      f ? (char *)f->f_path.dentry->d_name.name : "(null)");
++#endif
++}
++
++void vma_do_file_update_time(struct vm_area_struct *vma, const char func[],
++                           int line)
++{
++      struct file *f = vma->vm_file, *pr = vma->vm_prfile;
++
++      prfile_trace(f, pr, func, line, __func__);
++      file_update_time(f);
++      if (f && pr)
++              file_update_time(pr);
++}
++
++struct file *vma_do_pr_or_file(struct vm_area_struct *vma, const char func[],
++                             int line)
++{
++      struct file *f = vma->vm_file, *pr = vma->vm_prfile;
++
++      prfile_trace(f, pr, func, line, __func__);
++      return (f && pr) ? pr : f;
++}
++
++void vma_do_get_file(struct vm_area_struct *vma, const char func[], int line)
++{
++      struct file *f = vma->vm_file, *pr = vma->vm_prfile;
++
++      prfile_trace(f, pr, func, line, __func__);
++      get_file(f);
++      if (f && pr)
++              get_file(pr);
++}
++
++void vma_do_fput(struct vm_area_struct *vma, const char func[], int line)
++{
++      struct file *f = vma->vm_file, *pr = vma->vm_prfile;
++
++      prfile_trace(f, pr, func, line, __func__);
++      fput(f);
++      if (f && pr)
++              fput(pr);
++}
++
++#ifndef CONFIG_MMU
++struct file *vmr_do_pr_or_file(struct vm_region *region, const char func[],
++                             int line)
++{
++      struct file *f = region->vm_file, *pr = region->vm_prfile;
++
++      prfile_trace(f, pr, func, line, __func__);
++      return (f && pr) ? pr : f;
++}
++
++void vmr_do_fput(struct vm_region *region, const char func[], int line)
++{
++      struct file *f = region->vm_file, *pr = region->vm_prfile;
++
++      prfile_trace(f, pr, func, line, __func__);
++      fput(f);
++      if (f && pr)
++              fput(pr);
++}
++#endif /* !CONFIG_MMU */
diff --git a/patches/features/all/aufs4/aufs4-standalone.patch b/patches/features/all/aufs4/aufs4-standalone.patch
new file mode 100644 (file)
index 0000000..4533f4f
--- /dev/null
@@ -0,0 +1,410 @@
+From: J. R. Okajima <hooanon05@yahoo.co.jp>
+Date: Sat Feb 4 13:13:07 2017 +0900
+Subject: aufs4.9 standalone patch
+Origin: https://github.com/sfjro/aufs4-standalone/tree/ecd2bfe6f46f36658c9aef74fc43ac40e47f8438
+Bug-Debian: https://bugs.debian.org/541828
+
+Patch headers added by debian/patches/features/all/aufs4/gen-patch
+
+aufs4.9 standalone patch
+
+diff --git a/fs/dcache.c b/fs/dcache.c
+index df0268c..755fea1 100644
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -1272,6 +1272,7 @@ void d_walk(struct dentry *parent, void *data,
+       seq = 1;
+       goto again;
+ }
++EXPORT_SYMBOL_GPL(d_walk);
+ /*
+  * Search for at least 1 mount point in the dentry's subdirs.
+@@ -2855,6 +2856,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
+       write_sequnlock(&rename_lock);
+ }
++EXPORT_SYMBOL_GPL(d_exchange);
+ /**
+  * d_ancestor - search for an ancestor
+diff --git a/fs/exec.c b/fs/exec.c
+index 4e497b9..e27d323 100644
+--- a/fs/exec.c
++++ b/fs/exec.c
+@@ -104,6 +104,7 @@ bool path_noexec(const struct path *path)
+       return (path->mnt->mnt_flags & MNT_NOEXEC) ||
+              (path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
+ }
++EXPORT_SYMBOL_GPL(path_noexec);
+ #ifdef CONFIG_USELIB
+ /*
+diff --git a/fs/fcntl.c b/fs/fcntl.c
+index 6f42279..04fd33c 100644
+--- a/fs/fcntl.c
++++ b/fs/fcntl.c
+@@ -82,6 +82,7 @@ int setfl(int fd, struct file * filp, unsigned long arg)
+  out:
+       return error;
+ }
++EXPORT_SYMBOL_GPL(setfl);
+ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
+                      int force)
+diff --git a/fs/file_table.c b/fs/file_table.c
+index ad17e05..ae9f267 100644
+--- a/fs/file_table.c
++++ b/fs/file_table.c
+@@ -147,6 +147,7 @@ struct file *get_empty_filp(void)
+       }
+       return ERR_PTR(-ENFILE);
+ }
++EXPORT_SYMBOL_GPL(get_empty_filp);
+ /**
+  * alloc_file - allocate and initialize a 'struct file'
+@@ -258,6 +259,7 @@ void flush_delayed_fput(void)
+ {
+       delayed_fput(NULL);
+ }
++EXPORT_SYMBOL_GPL(flush_delayed_fput);
+ static DECLARE_DELAYED_WORK(delayed_fput_work, delayed_fput);
+@@ -300,6 +302,7 @@ void __fput_sync(struct file *file)
+ }
+ EXPORT_SYMBOL(fput);
++EXPORT_SYMBOL_GPL(__fput_sync);
+ void put_filp(struct file *file)
+ {
+@@ -308,6 +311,7 @@ void put_filp(struct file *file)
+               file_free(file);
+       }
+ }
++EXPORT_SYMBOL_GPL(put_filp);
+ void __init files_init(void)
+ { 
+diff --git a/fs/inode.c b/fs/inode.c
+index 9a9ba3a..a3a18d8 100644
+--- a/fs/inode.c
++++ b/fs/inode.c
+@@ -1651,6 +1651,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags)
+       return update_time(inode, time, flags);
+ }
++EXPORT_SYMBOL_GPL(update_time);
+ /**
+  *    touch_atime     -       update the access time
+diff --git a/fs/namespace.c b/fs/namespace.c
+index e6c234b..8d13f7b 100644
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -466,6 +466,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
+       mnt_dec_writers(real_mount(mnt));
+       preempt_enable();
+ }
++EXPORT_SYMBOL_GPL(__mnt_drop_write);
+ /**
+  * mnt_drop_write - give up write access to a mount
+@@ -1823,6 +1824,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+       }
+       return 0;
+ }
++EXPORT_SYMBOL_GPL(iterate_mounts);
+ static void cleanup_group_ids(struct mount *mnt, struct mount *end)
+ {
+diff --git a/fs/notify/group.c b/fs/notify/group.c
+index fbe3cbe..bdfc61e 100644
+--- a/fs/notify/group.c
++++ b/fs/notify/group.c
+@@ -22,6 +22,7 @@
+ #include <linux/srcu.h>
+ #include <linux/rculist.h>
+ #include <linux/wait.h>
++#include <linux/module.h>
+ #include <linux/fsnotify_backend.h>
+ #include "fsnotify.h"
+@@ -100,6 +101,7 @@ void fsnotify_get_group(struct fsnotify_group *group)
+ {
+       atomic_inc(&group->refcnt);
+ }
++EXPORT_SYMBOL_GPL(fsnotify_get_group);
+ /*
+  * Drop a reference to a group.  Free it if it's through.
+@@ -109,6 +111,7 @@ void fsnotify_put_group(struct fsnotify_group *group)
+       if (atomic_dec_and_test(&group->refcnt))
+               fsnotify_final_destroy_group(group);
+ }
++EXPORT_SYMBOL_GPL(fsnotify_put_group);
+ /*
+  * Create a new fsnotify_group and hold a reference for the group returned.
+@@ -137,6 +140,7 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
+       return group;
+ }
++EXPORT_SYMBOL_GPL(fsnotify_alloc_group);
+ int fsnotify_fasync(int fd, struct file *file, int on)
+ {
+diff --git a/fs/notify/mark.c b/fs/notify/mark.c
+index d3fea0b..5fc06ad 100644
+--- a/fs/notify/mark.c
++++ b/fs/notify/mark.c
+@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark)
+               mark->free_mark(mark);
+       }
+ }
++EXPORT_SYMBOL_GPL(fsnotify_put_mark);
+ /* Calculate mask of events for a list of marks */
+ u32 fsnotify_recalc_mask(struct hlist_head *head)
+@@ -230,6 +231,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark,
+       mutex_unlock(&group->mark_mutex);
+       fsnotify_free_mark(mark);
+ }
++EXPORT_SYMBOL_GPL(fsnotify_destroy_mark);
+ void fsnotify_destroy_marks(struct hlist_head *head, spinlock_t *lock)
+ {
+@@ -415,6 +417,7 @@ int fsnotify_add_mark_locked(struct fsnotify_mark *mark,
+       return ret;
+ }
++EXPORT_SYMBOL_GPL(fsnotify_add_mark);
+ int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group,
+                     struct inode *inode, struct vfsmount *mnt, int allow_dups)
+@@ -533,6 +536,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);
+ /*
+  * Destroy all marks in destroy_list, waits for SRCU period to finish before
+diff --git a/fs/open.c b/fs/open.c
+index d3ed817..20d2494 100644
+--- a/fs/open.c
++++ b/fs/open.c
+@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
+       inode_unlock(dentry->d_inode);
+       return ret;
+ }
++EXPORT_SYMBOL_GPL(do_truncate);
+ long vfs_truncate(const struct path *path, loff_t length)
+ {
+@@ -695,6 +696,7 @@ int open_check_o_direct(struct file *f)
+       }
+       return 0;
+ }
++EXPORT_SYMBOL_GPL(open_check_o_direct);
+ static int do_dentry_open(struct file *f,
+                         struct inode *inode,
+diff --git a/fs/read_write.c b/fs/read_write.c
+index 4052813..7dfd732 100644
+--- a/fs/read_write.c
++++ b/fs/read_write.c
+@@ -525,6 +525,7 @@ vfs_readf_t vfs_readf(struct file *file)
+               return new_sync_read;
+       return ERR_PTR(-ENOSYS);
+ }
++EXPORT_SYMBOL_GPL(vfs_readf);
+ vfs_writef_t vfs_writef(struct file *file)
+ {
+@@ -536,6 +537,7 @@ vfs_writef_t vfs_writef(struct file *file)
+               return new_sync_write;
+       return ERR_PTR(-ENOSYS);
+ }
++EXPORT_SYMBOL_GPL(vfs_writef);
+ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
+ {
+diff --git a/fs/splice.c b/fs/splice.c
+index 28160a7..98c1902 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -868,6 +868,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.
+@@ -897,6 +898,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/fs/sync.c b/fs/sync.c
+index 7a5fa3f..c9b9d46 100644
+--- a/fs/sync.c
++++ b/fs/sync.c
+@@ -38,6 +38,7 @@ int __sync_filesystem(struct super_block *sb, int wait)
+               sb->s_op->sync_fs(sb, wait);
+       return __sync_blockdev(sb->s_bdev, wait);
+ }
++EXPORT_SYMBOL_GPL(__sync_filesystem);
+ /*
+  * Write out and wait upon all dirty data associated with this
+diff --git a/fs/xattr.c b/fs/xattr.c
+index 2d13b4e..41c2bcd 100644
+--- a/fs/xattr.c
++++ b/fs/xattr.c
+@@ -296,6 +296,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
+       *xattr_value = value;
+       return error;
+ }
++EXPORT_SYMBOL_GPL(vfs_getxattr_alloc);
+ ssize_t
+ __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
+diff --git a/kernel/task_work.c b/kernel/task_work.c
+index d513051..e056d54 100644
+--- a/kernel/task_work.c
++++ b/kernel/task_work.c
+@@ -119,3 +119,4 @@ void task_work_run(void)
+               } while (work);
+       }
+ }
++EXPORT_SYMBOL_GPL(task_work_run);
+diff --git a/security/commoncap.c b/security/commoncap.c
+index 8df676f..6b5cc07 100644
+--- a/security/commoncap.c
++++ b/security/commoncap.c
+@@ -1061,12 +1061,14 @@ int cap_mmap_addr(unsigned long addr)
+       }
+       return ret;
+ }
++EXPORT_SYMBOL_GPL(cap_mmap_addr);
+ int cap_mmap_file(struct file *file, unsigned long reqprot,
+                 unsigned long prot, unsigned long flags)
+ {
+       return 0;
+ }
++EXPORT_SYMBOL_GPL(cap_mmap_file);
+ #ifdef CONFIG_SECURITY
+diff --git a/security/device_cgroup.c b/security/device_cgroup.c
+index 03c1652..f88c84b 100644
+--- a/security/device_cgroup.c
++++ b/security/device_cgroup.c
+@@ -7,6 +7,7 @@
+ #include <linux/device_cgroup.h>
+ #include <linux/cgroup.h>
+ #include <linux/ctype.h>
++#include <linux/export.h>
+ #include <linux/list.h>
+ #include <linux/uaccess.h>
+ #include <linux/seq_file.h>
+@@ -849,6 +850,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask)
+       return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
+                       access);
+ }
++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 f825304..8dd441d 100644
+--- a/security/security.c
++++ b/security/security.c
+@@ -443,6 +443,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
+               return 0;
+       return call_int_hook(path_rmdir, 0, dir, dentry);
+ }
++EXPORT_SYMBOL_GPL(security_path_rmdir);
+ int security_path_unlink(const struct path *dir, struct dentry *dentry)
+ {
+@@ -459,6 +460,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
+               return 0;
+       return call_int_hook(path_symlink, 0, dir, dentry, old_name);
+ }
++EXPORT_SYMBOL_GPL(security_path_symlink);
+ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
+                      struct dentry *new_dentry)
+@@ -467,6 +469,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
+               return 0;
+       return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
+ }
++EXPORT_SYMBOL_GPL(security_path_link);
+ int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
+                        const struct path *new_dir, struct dentry *new_dentry,
+@@ -494,6 +497,7 @@ int security_path_truncate(const struct path *path)
+               return 0;
+       return call_int_hook(path_truncate, 0, path);
+ }
++EXPORT_SYMBOL_GPL(security_path_truncate);
+ int security_path_chmod(const struct path *path, umode_t mode)
+ {
+@@ -501,6 +505,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
+               return 0;
+       return call_int_hook(path_chmod, 0, path, mode);
+ }
++EXPORT_SYMBOL_GPL(security_path_chmod);
+ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
+ {
+@@ -508,6 +513,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
+               return 0;
+       return call_int_hook(path_chown, 0, path, uid, gid);
+ }
++EXPORT_SYMBOL_GPL(security_path_chown);
+ int security_path_chroot(const struct path *path)
+ {
+@@ -593,6 +599,7 @@ int security_inode_readlink(struct dentry *dentry)
+               return 0;
+       return call_int_hook(inode_readlink, 0, dentry);
+ }
++EXPORT_SYMBOL_GPL(security_inode_readlink);
+ int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
+                              bool rcu)
+@@ -608,6 +615,7 @@ int security_inode_permission(struct inode *inode, int mask)
+               return 0;
+       return call_int_hook(inode_permission, 0, inode, mask);
+ }
++EXPORT_SYMBOL_GPL(security_inode_permission);
+ int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
+ {
+@@ -779,6 +787,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)
+ {
+@@ -838,6 +847,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
+               return ret;
+       return ima_file_mmap(file, prot);
+ }
++EXPORT_SYMBOL_GPL(security_mmap_file);
+ int security_mmap_addr(unsigned long addr)
+ {
diff --git a/patches/features/all/aufs4/gen-patch b/patches/features/all/aufs4/gen-patch
new file mode 100755 (executable)
index 0000000..d1d96fd
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/bash -e
+
+aufs_dir="$1"
+
+export GIT_DIR="$aufs_dir/.git"
+
+from_line='From: J. R. Okajima <hooanon05@yahoo.co.jp>'
+if [ -d "$GIT_DIR" ]; then
+    origin_line="Origin: https://github.com/sfjro/aufs4-standalone/tree/$(git rev-list HEAD -1)"
+else
+    echo >&2 "W: Cannot include a specific origin URL without an aufs git repo"
+    origin_line='Origin: https://github.com/sfjro/aufs4-standalone/branches'
+fi
+bug_line='Bug-Debian: https://bugs.debian.org/541828'
+
+for patch in aufs4-{base,mmap,standalone}.patch; do
+    {
+       echo "$from_line"
+       if [ -d "$GIT_DIR" ]; then
+           git log --pretty='Date: %ad' HEAD -1 -- "$patch"
+       fi
+       echo -n 'Subject: '
+       head -1 "$aufs_dir/$patch"
+       echo "$origin_line"
+       echo "$bug_line"
+       echo
+       echo 'Patch headers added by debian/patches/features/all/aufs4/gen-patch'
+       echo
+       sed 's/^+.*EXPORT_SYMBOL\b/&_GPL/' < "$aufs_dir"/"$patch"
+    } > debian/patches/features/all/aufs4/"$patch"
+done
diff --git a/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch b/patches/features/all/drivers-media-dvb-usb-af9005-request_firmware.patch
new file mode 100644 (file)
index 0000000..7ab3e6b
--- /dev/null
@@ -0,0 +1,145 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Mon, 24 Aug 2009 23:19:58 +0100
+Subject: af9005: Use request_firmware() to load register init script
+Forwarded: no
+
+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(-)
+
+--- a/drivers/media/usb/dvb-usb/Kconfig
++++ b/drivers/media/usb/dvb-usb/Kconfig
+@@ -227,10 +227,10 @@ config DVB_USB_OPERA1
+ config DVB_USB_AF9005
+       tristate "Afatech AF9005 DVB-T USB1.1 support"
+-      depends on BROKEN
+       depends on DVB_USB
+       select MEDIA_TUNER_MT2060 if MEDIA_SUBDRV_AUTOSELECT
+       select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
++      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)
+--- a/drivers/media/usb/dvb-usb/af9005-fe.c
++++ b/drivers/media/usb/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 <asm/div64.h>
++#include <linux/firmware.h>
++
++/* 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;
+@@ -816,6 +832,8 @@ static int af9005_fe_init(struct dvb_fro
+ {
+       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];
+@@ -968,37 +986,55 @@ static int af9005_fe_init(struct dvb_fro
+       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");
+@@ -1078,6 +1114,10 @@ static int af9005_fe_init(struct dvb_fro
+       deb_info("profit!\n");
+       return 0;
++
++fail_release:
++      release_firmware(fw);
++      return ret;
+ }
+ static int af9005_fe_sleep(struct dvb_frontend *fe)
diff --git a/patches/features/all/netfilter-nft_ct-add-notrack-support.patch b/patches/features/all/netfilter-nft_ct-add-notrack-support.patch
new file mode 100644 (file)
index 0000000..fc8e922
--- /dev/null
@@ -0,0 +1,100 @@
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+Date: Thu, 20 Oct 2016 18:07:14 +0200
+Subject: netfilter: nft_ct: add notrack support
+Origin: https://git.kernel.org/linus/254432613c588640f8b8b5c3641a3c27bbe14688
+Bug-Debian: https://bugs.debian.org/845500
+
+This patch adds notrack support.
+
+I decided to add a new expression, given that this doesn't fit into the
+existing set operation. Notrack doesn't need a source register, and an
+hypothetical NFT_CT_NOTRACK key makes no sense since matching the
+untracked state is done through NFT_CT_STATE.
+
+I'm placing this new notrack expression into nft_ct.c, I think a single
+module is too much.
+
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ net/netfilter/nft_ct.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 49 insertions(+), 1 deletion(-)
+
+diff --git a/net/netfilter/nft_ct.c b/net/netfilter/nft_ct.c
+index d7b0d171172a..6837348c8993 100644
+--- a/net/netfilter/nft_ct.c
++++ b/net/netfilter/nft_ct.c
+@@ -1,5 +1,6 @@
+ /*
+  * Copyright (c) 2008-2009 Patrick McHardy <kaber@trash.net>
++ * Copyright (c) 2016 Pablo Neira Ayuso <pablo@netfilter.org>
+  *
+  * This program is free software; you can redistribute it and/or modify
+  * it under the terms of the GNU General Public License version 2 as
+@@ -518,15 +519,61 @@ static struct nft_expr_type nft_ct_type __read_mostly = {
+       .owner          = THIS_MODULE,
+ };
++static void nft_notrack_eval(const struct nft_expr *expr,
++                           struct nft_regs *regs,
++                           const struct nft_pktinfo *pkt)
++{
++      struct sk_buff *skb = pkt->skb;
++      enum ip_conntrack_info ctinfo;
++      struct nf_conn *ct;
++
++      ct = nf_ct_get(pkt->skb, &ctinfo);
++      /* Previously seen (loopback or untracked)?  Ignore. */
++      if (ct)
++              return;
++
++      ct = nf_ct_untracked_get();
++      atomic_inc(&ct->ct_general.use);
++      skb->nfct = &ct->ct_general;
++      skb->nfctinfo = IP_CT_NEW;
++}
++
++static struct nft_expr_type nft_notrack_type;
++static const struct nft_expr_ops nft_notrack_ops = {
++      .type           = &nft_notrack_type,
++      .size           = NFT_EXPR_SIZE(0),
++      .eval           = nft_notrack_eval,
++};
++
++static struct nft_expr_type nft_notrack_type __read_mostly = {
++      .name           = "notrack",
++      .ops            = &nft_notrack_ops,
++      .owner          = THIS_MODULE,
++};
++
+ static int __init nft_ct_module_init(void)
+ {
++      int err;
++
+       BUILD_BUG_ON(NF_CT_LABELS_MAX_SIZE > NFT_REG_SIZE);
+-      return nft_register_expr(&nft_ct_type);
++      err = nft_register_expr(&nft_ct_type);
++      if (err < 0)
++              return err;
++
++      err = nft_register_expr(&nft_notrack_type);
++      if (err < 0)
++              goto err1;
++
++      return 0;
++err1:
++      nft_unregister_expr(&nft_ct_type);
++      return err;
+ }
+ static void __exit nft_ct_module_exit(void)
+ {
++      nft_unregister_expr(&nft_notrack_type);
+       nft_unregister_expr(&nft_ct_type);
+ }
+@@ -536,3 +583,4 @@ module_exit(nft_ct_module_exit);
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
+ MODULE_ALIAS_NFT_EXPR("ct");
++MODULE_ALIAS_NFT_EXPR("notrack");
diff --git a/patches/features/all/rt/0001-futex-Cleanup-variable-names-for-futex_top_waiter.patch b/patches/features/all/rt/0001-futex-Cleanup-variable-names-for-futex_top_waiter.patch
new file mode 100644 (file)
index 0000000..438cc52
--- /dev/null
@@ -0,0 +1,118 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:48 +0100
+Subject: [PATCH] futex: Cleanup variable names for futex_top_waiter()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit 499f5aca2cdd5e958b27e2655e7e7f82524f46b1
+
+futex_top_waiter() returns the top-waiter on the pi_mutex. Assinging
+this to a variable 'match' totally obscures the code.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.554710645@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |   30 +++++++++++++++---------------
+ 1 file changed, 15 insertions(+), 15 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1120,14 +1120,14 @@ static int attach_to_pi_owner(u32 uval,
+ static int lookup_pi_state(u32 uval, struct futex_hash_bucket *hb,
+                          union futex_key *key, struct futex_pi_state **ps)
+ {
+-      struct futex_q *match = futex_top_waiter(hb, key);
++      struct futex_q *top_waiter = futex_top_waiter(hb, key);
+       /*
+        * If there is a waiter on that futex, validate it and
+        * attach to the pi_state when the validation succeeds.
+        */
+-      if (match)
+-              return attach_to_pi_state(uval, match->pi_state, ps);
++      if (top_waiter)
++              return attach_to_pi_state(uval, top_waiter->pi_state, ps);
+       /*
+        * We are the first waiter - try to look up the owner based on
+@@ -1174,7 +1174,7 @@ static int futex_lock_pi_atomic(u32 __us
+                               struct task_struct *task, int set_waiters)
+ {
+       u32 uval, newval, vpid = task_pid_vnr(task);
+-      struct futex_q *match;
++      struct futex_q *top_waiter;
+       int ret;
+       /*
+@@ -1200,9 +1200,9 @@ static int futex_lock_pi_atomic(u32 __us
+        * Lookup existing state first. If it exists, try to attach to
+        * its pi_state.
+        */
+-      match = futex_top_waiter(hb, key);
+-      if (match)
+-              return attach_to_pi_state(uval, match->pi_state, ps);
++      top_waiter = futex_top_waiter(hb, key);
++      if (top_waiter)
++              return attach_to_pi_state(uval, top_waiter->pi_state, ps);
+       /*
+        * No waiter and user TID is 0. We are here because the
+@@ -1292,11 +1292,11 @@ static void mark_wake_futex(struct wake_
+       q->lock_ptr = NULL;
+ }
+-static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *this,
++static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *top_waiter,
+                        struct futex_hash_bucket *hb)
+ {
+       struct task_struct *new_owner;
+-      struct futex_pi_state *pi_state = this->pi_state;
++      struct futex_pi_state *pi_state = top_waiter->pi_state;
+       u32 uninitialized_var(curval), newval;
+       WAKE_Q(wake_q);
+       bool deboost;
+@@ -1317,11 +1317,11 @@ static int wake_futex_pi(u32 __user *uad
+       /*
+        * It is possible that the next waiter (the one that brought
+-       * this owner to the kernel) timed out and is no longer
++       * top_waiter owner to the kernel) timed out and is no longer
+        * waiting on the lock.
+        */
+       if (!new_owner)
+-              new_owner = this->task;
++              new_owner = top_waiter->task;
+       /*
+        * We pass it to the next owner. The WAITERS bit is always
+@@ -2631,7 +2631,7 @@ static int futex_unlock_pi(u32 __user *u
+       u32 uninitialized_var(curval), uval, vpid = task_pid_vnr(current);
+       union futex_key key = FUTEX_KEY_INIT;
+       struct futex_hash_bucket *hb;
+-      struct futex_q *match;
++      struct futex_q *top_waiter;
+       int ret;
+ retry:
+@@ -2655,9 +2655,9 @@ static int futex_unlock_pi(u32 __user *u
+        * all and we at least want to know if user space fiddled
+        * with the futex value instead of blindly unlocking.
+        */
+-      match = futex_top_waiter(hb, &key);
+-      if (match) {
+-              ret = wake_futex_pi(uaddr, uval, match, hb);
++      top_waiter = futex_top_waiter(hb, &key);
++      if (top_waiter) {
++              ret = wake_futex_pi(uaddr, uval, top_waiter, hb);
+               /*
+                * In case of success wake_futex_pi dropped the hash
+                * bucket lock.
diff --git a/patches/features/all/rt/0002-futex-Use-smp_store_release-in-mark_wake_futex.patch b/patches/features/all/rt/0002-futex-Use-smp_store_release-in-mark_wake_futex.patch
new file mode 100644 (file)
index 0000000..da68128
--- /dev/null
@@ -0,0 +1,39 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:49 +0100
+Subject: [PATCH] futex: Use smp_store_release() in mark_wake_futex()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit  1b367ece0d7e696cab1c8501bab282cc6a538b3f
+
+Since the futex_q can dissapear the instruction after assigning NULL,
+this really should be a RELEASE barrier. That stops loads from hitting
+dead memory too.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.604296452@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1288,8 +1288,7 @@ static void mark_wake_futex(struct wake_
+        * memory barrier is required here to prevent the following
+        * store to lock_ptr from getting ahead of the plist_del.
+        */
+-      smp_wmb();
+-      q->lock_ptr = NULL;
++      smp_store_release(&q->lock_ptr, NULL);
+ }
+ static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *top_waiter,
diff --git a/patches/features/all/rt/0003-futex-Remove-rt_mutex_deadlock_account_.patch b/patches/features/all/rt/0003-futex-Remove-rt_mutex_deadlock_account_.patch
new file mode 100644 (file)
index 0000000..f54e56e
--- /dev/null
@@ -0,0 +1,185 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:50 +0100
+Subject: [PATCH] futex: Remove rt_mutex_deadlock_account_*()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit fffa954fb528963c2fb7b0c0084eb77e2be7ab52
+
+These are unused and clutter up the code.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.652692478@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/locking/rtmutex-debug.c |    9 -------
+ kernel/locking/rtmutex-debug.h |    3 --
+ kernel/locking/rtmutex.c       |   47 +++++++++++++++--------------------------
+ kernel/locking/rtmutex.h       |    2 -
+ 4 files changed, 18 insertions(+), 43 deletions(-)
+
+--- a/kernel/locking/rtmutex-debug.c
++++ b/kernel/locking/rtmutex-debug.c
+@@ -173,12 +173,3 @@ void debug_rt_mutex_init(struct rt_mutex
+       lock->name = name;
+ }
+-void
+-rt_mutex_deadlock_account_lock(struct rt_mutex *lock, struct task_struct *task)
+-{
+-}
+-
+-void rt_mutex_deadlock_account_unlock(struct task_struct *task)
+-{
+-}
+-
+--- a/kernel/locking/rtmutex-debug.h
++++ b/kernel/locking/rtmutex-debug.h
+@@ -9,9 +9,6 @@
+  * This file contains macros used solely by rtmutex.c. Debug version.
+  */
+-extern void
+-rt_mutex_deadlock_account_lock(struct rt_mutex *lock, struct task_struct *task);
+-extern void rt_mutex_deadlock_account_unlock(struct task_struct *task);
+ extern void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter);
+ extern void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter);
+ extern void debug_rt_mutex_init(struct rt_mutex *lock, const char *name);
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -936,8 +936,6 @@ static int try_to_take_rt_mutex(struct r
+        */
+       rt_mutex_set_owner(lock, task);
+-      rt_mutex_deadlock_account_lock(lock, task);
+-
+       return 1;
+ }
+@@ -1340,8 +1338,6 @@ static bool __sched rt_mutex_slowunlock(
+       debug_rt_mutex_unlock(lock);
+-      rt_mutex_deadlock_account_unlock(current);
+-
+       /*
+        * We must be careful here if the fast path is enabled. If we
+        * have no waiters queued we cannot set owner to NULL here
+@@ -1407,11 +1403,10 @@ rt_mutex_fastlock(struct rt_mutex *lock,
+                               struct hrtimer_sleeper *timeout,
+                               enum rtmutex_chainwalk chwalk))
+ {
+-      if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current))) {
+-              rt_mutex_deadlock_account_lock(lock, current);
++      if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
+               return 0;
+-      } else
+-              return slowfn(lock, state, NULL, RT_MUTEX_MIN_CHAINWALK);
++
++      return slowfn(lock, state, NULL, RT_MUTEX_MIN_CHAINWALK);
+ }
+ static inline int
+@@ -1423,21 +1418,19 @@ rt_mutex_timed_fastlock(struct rt_mutex
+                                     enum rtmutex_chainwalk chwalk))
+ {
+       if (chwalk == RT_MUTEX_MIN_CHAINWALK &&
+-          likely(rt_mutex_cmpxchg_acquire(lock, NULL, current))) {
+-              rt_mutex_deadlock_account_lock(lock, current);
++          likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
+               return 0;
+-      } else
+-              return slowfn(lock, state, timeout, chwalk);
++
++      return slowfn(lock, state, timeout, chwalk);
+ }
+ static inline int
+ rt_mutex_fasttrylock(struct rt_mutex *lock,
+                    int (*slowfn)(struct rt_mutex *lock))
+ {
+-      if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current))) {
+-              rt_mutex_deadlock_account_lock(lock, current);
++      if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
+               return 1;
+-      }
++
+       return slowfn(lock);
+ }
+@@ -1447,19 +1440,18 @@ rt_mutex_fastunlock(struct rt_mutex *loc
+                                  struct wake_q_head *wqh))
+ {
+       WAKE_Q(wake_q);
++      bool deboost;
+-      if (likely(rt_mutex_cmpxchg_release(lock, current, NULL))) {
+-              rt_mutex_deadlock_account_unlock(current);
++      if (likely(rt_mutex_cmpxchg_release(lock, current, NULL)))
++              return;
+-      } else {
+-              bool deboost = slowfn(lock, &wake_q);
++      deboost = slowfn(lock, &wake_q);
+-              wake_up_q(&wake_q);
++      wake_up_q(&wake_q);
+-              /* Undo pi boosting if necessary: */
+-              if (deboost)
+-                      rt_mutex_adjust_prio(current);
+-      }
++      /* Undo pi boosting if necessary: */
++      if (deboost)
++              rt_mutex_adjust_prio(current);
+ }
+ /**
+@@ -1570,10 +1562,9 @@ EXPORT_SYMBOL_GPL(rt_mutex_unlock);
+ bool __sched rt_mutex_futex_unlock(struct rt_mutex *lock,
+                                  struct wake_q_head *wqh)
+ {
+-      if (likely(rt_mutex_cmpxchg_release(lock, current, NULL))) {
+-              rt_mutex_deadlock_account_unlock(current);
++      if (likely(rt_mutex_cmpxchg_release(lock, current, NULL)))
+               return false;
+-      }
++
+       return rt_mutex_slowunlock(lock, wqh);
+ }
+@@ -1631,7 +1622,6 @@ void rt_mutex_init_proxy_locked(struct r
+       __rt_mutex_init(lock, NULL);
+       debug_rt_mutex_proxy_lock(lock, proxy_owner);
+       rt_mutex_set_owner(lock, proxy_owner);
+-      rt_mutex_deadlock_account_lock(lock, proxy_owner);
+ }
+ /**
+@@ -1647,7 +1637,6 @@ void rt_mutex_proxy_unlock(struct rt_mut
+ {
+       debug_rt_mutex_proxy_unlock(lock);
+       rt_mutex_set_owner(lock, NULL);
+-      rt_mutex_deadlock_account_unlock(proxy_owner);
+ }
+ /**
+--- a/kernel/locking/rtmutex.h
++++ b/kernel/locking/rtmutex.h
+@@ -11,8 +11,6 @@
+  */
+ #define rt_mutex_deadlock_check(l)                    (0)
+-#define rt_mutex_deadlock_account_lock(m, t)          do { } while (0)
+-#define rt_mutex_deadlock_account_unlock(l)           do { } while (0)
+ #define debug_rt_mutex_init_waiter(w)                 do { } while (0)
+ #define debug_rt_mutex_free_waiter(w)                 do { } while (0)
+ #define debug_rt_mutex_lock(l)                                do { } while (0)
diff --git a/patches/features/all/rt/0004-futex-rt_mutex-Provide-futex-specific-rt_mutex-API.patch b/patches/features/all/rt/0004-futex-rt_mutex-Provide-futex-specific-rt_mutex-API.patch
new file mode 100644 (file)
index 0000000..994c21e
--- /dev/null
@@ -0,0 +1,221 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:51 +0100
+Subject: [PATCH] futex,rt_mutex: Provide futex specific rt_mutex API
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit 5293c2efda37775346885c7e924d4ef7018ea60b
+
+Part of what makes futex_unlock_pi() intricate is that
+rt_mutex_futex_unlock() -> rt_mutex_slowunlock() can drop
+rt_mutex::wait_lock.
+
+This means it cannot rely on the atomicy of wait_lock, which would be
+preferred in order to not rely on hb->lock so much.
+
+The reason rt_mutex_slowunlock() needs to drop wait_lock is because it can
+race with the rt_mutex fastpath, however futexes have their own fast path.
+
+Since futexes already have a bunch of separate rt_mutex accessors, complete
+that set and implement a rt_mutex variant without fastpath for them.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.702962446@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c                  |   30 ++++++++++-----------
+ kernel/locking/rtmutex.c        |   55 +++++++++++++++++++++++++++++-----------
+ kernel/locking/rtmutex_common.h |    9 +++++-
+ 3 files changed, 62 insertions(+), 32 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -914,7 +914,7 @@ void exit_pi_state_list(struct task_stru
+               pi_state->owner = NULL;
+               raw_spin_unlock_irq(&curr->pi_lock);
+-              rt_mutex_unlock(&pi_state->pi_mutex);
++              rt_mutex_futex_unlock(&pi_state->pi_mutex);
+               spin_unlock(&hb->lock);
+@@ -1362,20 +1362,18 @@ static int wake_futex_pi(u32 __user *uad
+       pi_state->owner = new_owner;
+       raw_spin_unlock(&new_owner->pi_lock);
+-      raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+-
+-      deboost = rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q);
+-
+       /*
+-       * First unlock HB so the waiter does not spin on it once he got woken
+-       * up. Second wake up the waiter before the priority is adjusted. If we
+-       * deboost first (and lose our higher priority), then the task might get
+-       * scheduled away before the wake up can take place.
++       * We've updated the uservalue, this unlock cannot fail.
+        */
++      deboost = __rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q);
++
++      raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+       spin_unlock(&hb->lock);
+-      wake_up_q(&wake_q);
+-      if (deboost)
++
++      if (deboost) {
++              wake_up_q(&wake_q);
+               rt_mutex_adjust_prio(current);
++      }
+       return 0;
+ }
+@@ -2251,7 +2249,7 @@ static int fixup_owner(u32 __user *uaddr
+                * task acquired the rt_mutex after we removed ourself from the
+                * rt_mutex waiters list.
+                */
+-              if (rt_mutex_trylock(&q->pi_state->pi_mutex)) {
++              if (rt_mutex_futex_trylock(&q->pi_state->pi_mutex)) {
+                       locked = 1;
+                       goto out;
+               }
+@@ -2566,7 +2564,7 @@ static int futex_lock_pi(u32 __user *uad
+       if (!trylock) {
+               ret = rt_mutex_timed_futex_lock(&q.pi_state->pi_mutex, to);
+       } else {
+-              ret = rt_mutex_trylock(&q.pi_state->pi_mutex);
++              ret = rt_mutex_futex_trylock(&q.pi_state->pi_mutex);
+               /* Fixup the trylock return value: */
+               ret = ret ? 0 : -EWOULDBLOCK;
+       }
+@@ -2589,7 +2587,7 @@ static int futex_lock_pi(u32 __user *uad
+        * it and return the fault to userspace.
+        */
+       if (ret && (rt_mutex_owner(&q.pi_state->pi_mutex) == current))
+-              rt_mutex_unlock(&q.pi_state->pi_mutex);
++              rt_mutex_futex_unlock(&q.pi_state->pi_mutex);
+       /* Unqueue and drop the lock */
+       unqueue_me_pi(&q);
+@@ -2896,7 +2894,7 @@ static int futex_wait_requeue_pi(u32 __u
+                       spin_lock(q.lock_ptr);
+                       ret = fixup_pi_state_owner(uaddr2, &q, current);
+                       if (ret && rt_mutex_owner(&q.pi_state->pi_mutex) == current)
+-                              rt_mutex_unlock(&q.pi_state->pi_mutex);
++                              rt_mutex_futex_unlock(&q.pi_state->pi_mutex);
+                       /*
+                        * Drop the reference to the pi state which
+                        * the requeue_pi() code acquired for us.
+@@ -2936,7 +2934,7 @@ static int futex_wait_requeue_pi(u32 __u
+                * userspace.
+                */
+               if (ret && rt_mutex_owner(pi_mutex) == current)
+-                      rt_mutex_unlock(pi_mutex);
++                      rt_mutex_futex_unlock(pi_mutex);
+               /* Unqueue and drop the lock. */
+               unqueue_me_pi(&q);
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1486,15 +1486,23 @@ EXPORT_SYMBOL_GPL(rt_mutex_lock_interrup
+ /*
+  * Futex variant with full deadlock detection.
++ * Futex variants must not use the fast-path, see __rt_mutex_futex_unlock().
+  */
+-int rt_mutex_timed_futex_lock(struct rt_mutex *lock,
++int __sched rt_mutex_timed_futex_lock(struct rt_mutex *lock,
+                             struct hrtimer_sleeper *timeout)
+ {
+       might_sleep();
+-      return rt_mutex_timed_fastlock(lock, TASK_INTERRUPTIBLE, timeout,
+-                                     RT_MUTEX_FULL_CHAINWALK,
+-                                     rt_mutex_slowlock);
++      return rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE,
++                               timeout, RT_MUTEX_FULL_CHAINWALK);
++}
++
++/*
++ * Futex variant, must not use fastpath.
++ */
++int __sched rt_mutex_futex_trylock(struct rt_mutex *lock)
++{
++      return rt_mutex_slowtrylock(lock);
+ }
+ /**
+@@ -1553,19 +1561,38 @@ void __sched rt_mutex_unlock(struct rt_m
+ EXPORT_SYMBOL_GPL(rt_mutex_unlock);
+ /**
+- * rt_mutex_futex_unlock - Futex variant of rt_mutex_unlock
+- * @lock: the rt_mutex to be unlocked
+- *
+- * Returns: true/false indicating whether priority adjustment is
+- * required or not.
++ * Futex variant, that since futex variants do not use the fast-path, can be
++ * simple and will not need to retry.
+  */
+-bool __sched rt_mutex_futex_unlock(struct rt_mutex *lock,
+-                                 struct wake_q_head *wqh)
++bool __sched __rt_mutex_futex_unlock(struct rt_mutex *lock,
++                                  struct wake_q_head *wake_q)
++{
++      lockdep_assert_held(&lock->wait_lock);
++
++      debug_rt_mutex_unlock(lock);
++
++      if (!rt_mutex_has_waiters(lock)) {
++              lock->owner = NULL;
++              return false; /* done */
++      }
++
++      mark_wakeup_next_waiter(wake_q, lock);
++      return true; /* deboost and wakeups */
++}
++
++void __sched rt_mutex_futex_unlock(struct rt_mutex *lock)
+ {
+-      if (likely(rt_mutex_cmpxchg_release(lock, current, NULL)))
+-              return false;
++      WAKE_Q(wake_q);
++      bool deboost;
+-      return rt_mutex_slowunlock(lock, wqh);
++      raw_spin_lock_irq(&lock->wait_lock);
++      deboost = __rt_mutex_futex_unlock(lock, &wake_q);
++      raw_spin_unlock_irq(&lock->wait_lock);
++
++      if (deboost) {
++              wake_up_q(&wake_q);
++              rt_mutex_adjust_prio(current);
++      }
+ }
+ /**
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -109,9 +109,14 @@ extern int rt_mutex_start_proxy_lock(str
+ extern int rt_mutex_finish_proxy_lock(struct rt_mutex *lock,
+                                     struct hrtimer_sleeper *to,
+                                     struct rt_mutex_waiter *waiter);
++
+ extern int rt_mutex_timed_futex_lock(struct rt_mutex *l, struct hrtimer_sleeper *to);
+-extern bool rt_mutex_futex_unlock(struct rt_mutex *lock,
+-                                struct wake_q_head *wqh);
++extern int rt_mutex_futex_trylock(struct rt_mutex *l);
++
++extern void rt_mutex_futex_unlock(struct rt_mutex *lock);
++extern bool __rt_mutex_futex_unlock(struct rt_mutex *lock,
++                               struct wake_q_head *wqh);
++
+ extern void rt_mutex_adjust_prio(struct task_struct *task);
+ #ifdef CONFIG_DEBUG_RT_MUTEXES
diff --git a/patches/features/all/rt/0005-futex-Change-locking-rules.patch b/patches/features/all/rt/0005-futex-Change-locking-rules.patch
new file mode 100644 (file)
index 0000000..30e4d6b
--- /dev/null
@@ -0,0 +1,371 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:52 +0100
+Subject: [PATCH] futex: Change locking rules
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit 734009e96d1983ad739e5b656e03430b3660c913
+
+Currently futex-pi relies on hb->lock to serialize everything. But hb->lock
+creates another set of problems, especially priority inversions on RT where
+hb->lock becomes a rt_mutex itself.
+
+The rt_mutex::wait_lock is the most obvious protection for keeping the
+futex user space value and the kernel internal pi_state in sync.
+
+Rework and document the locking so rt_mutex::wait_lock is held accross all
+operations which modify the user space value and the pi state.
+
+This allows to invoke rt_mutex_unlock() (including deboost) without holding
+hb->lock as a next step.
+
+Nothing yet relies on the new locking rules.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.751993333@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |  165 +++++++++++++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 132 insertions(+), 33 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -971,6 +971,39 @@ void exit_pi_state_list(struct task_stru
+  *
+  * [10] There is no transient state which leaves owner and user space
+  *    TID out of sync.
++ *
++ *
++ * Serialization and lifetime rules:
++ *
++ * hb->lock:
++ *
++ *    hb -> futex_q, relation
++ *    futex_q -> pi_state, relation
++ *
++ *    (cannot be raw because hb can contain arbitrary amount
++ *     of futex_q's)
++ *
++ * pi_mutex->wait_lock:
++ *
++ *    {uval, pi_state}
++ *
++ *    (and pi_mutex 'obviously')
++ *
++ * p->pi_lock:
++ *
++ *    p->pi_state_list -> pi_state->list, relation
++ *
++ * pi_state->refcount:
++ *
++ *    pi_state lifetime
++ *
++ *
++ * Lock order:
++ *
++ *   hb->lock
++ *     pi_mutex->wait_lock
++ *       p->pi_lock
++ *
+  */
+ /*
+@@ -978,10 +1011,12 @@ void exit_pi_state_list(struct task_stru
+  * the pi_state against the user space value. If correct, attach to
+  * it.
+  */
+-static int attach_to_pi_state(u32 uval, struct futex_pi_state *pi_state,
++static int attach_to_pi_state(u32 __user *uaddr, u32 uval,
++                            struct futex_pi_state *pi_state,
+                             struct futex_pi_state **ps)
+ {
+       pid_t pid = uval & FUTEX_TID_MASK;
++      int ret, uval2;
+       /*
+        * Userspace might have messed up non-PI and PI futexes [3]
+@@ -989,9 +1024,34 @@ static int attach_to_pi_state(u32 uval,
+       if (unlikely(!pi_state))
+               return -EINVAL;
++      /*
++       * We get here with hb->lock held, and having found a
++       * futex_top_waiter(). This means that futex_lock_pi() of said futex_q
++       * has dropped the hb->lock in between queue_me() and unqueue_me_pi(),
++       * which in turn means that futex_lock_pi() still has a reference on
++       * our pi_state.
++       */
+       WARN_ON(!atomic_read(&pi_state->refcount));
+       /*
++       * Now that we have a pi_state, we can acquire wait_lock
++       * and do the state validation.
++       */
++      raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
++
++      /*
++       * Since {uval, pi_state} is serialized by wait_lock, and our current
++       * uval was read without holding it, it can have changed. Verify it
++       * still is what we expect it to be, otherwise retry the entire
++       * operation.
++       */
++      if (get_futex_value_locked(&uval2, uaddr))
++              goto out_efault;
++
++      if (uval != uval2)
++              goto out_eagain;
++
++      /*
+        * Handle the owner died case:
+        */
+       if (uval & FUTEX_OWNER_DIED) {
+@@ -1006,11 +1066,11 @@ static int attach_to_pi_state(u32 uval,
+                        * is not 0. Inconsistent state. [5]
+                        */
+                       if (pid)
+-                              return -EINVAL;
++                              goto out_einval;
+                       /*
+                        * Take a ref on the state and return success. [4]
+                        */
+-                      goto out_state;
++                      goto out_attach;
+               }
+               /*
+@@ -1022,14 +1082,14 @@ static int attach_to_pi_state(u32 uval,
+                * Take a ref on the state and return success. [6]
+                */
+               if (!pid)
+-                      goto out_state;
++                      goto out_attach;
+       } else {
+               /*
+                * If the owner died bit is not set, then the pi_state
+                * must have an owner. [7]
+                */
+               if (!pi_state->owner)
+-                      return -EINVAL;
++                      goto out_einval;
+       }
+       /*
+@@ -1038,11 +1098,29 @@ static int attach_to_pi_state(u32 uval,
+        * user space TID. [9/10]
+        */
+       if (pid != task_pid_vnr(pi_state->owner))
+-              return -EINVAL;
+-out_state:
++              goto out_einval;
++
++out_attach:
+       atomic_inc(&pi_state->refcount);
++      raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+       *ps = pi_state;
+       return 0;
++
++out_einval:
++      ret = -EINVAL;
++      goto out_error;
++
++out_eagain:
++      ret = -EAGAIN;
++      goto out_error;
++
++out_efault:
++      ret = -EFAULT;
++      goto out_error;
++
++out_error:
++      raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
++      return ret;
+ }
+ /*
+@@ -1093,6 +1171,9 @@ static int attach_to_pi_owner(u32 uval,
+       /*
+        * No existing pi state. First waiter. [2]
++       *
++       * This creates pi_state, we have hb->lock held, this means nothing can
++       * observe this state, wait_lock is irrelevant.
+        */
+       pi_state = alloc_pi_state();
+@@ -1117,7 +1198,8 @@ static int attach_to_pi_owner(u32 uval,
+       return 0;
+ }
+-static int lookup_pi_state(u32 uval, struct futex_hash_bucket *hb,
++static int lookup_pi_state(u32 __user *uaddr, u32 uval,
++                         struct futex_hash_bucket *hb,
+                          union futex_key *key, struct futex_pi_state **ps)
+ {
+       struct futex_q *top_waiter = futex_top_waiter(hb, key);
+@@ -1127,7 +1209,7 @@ static int lookup_pi_state(u32 uval, str
+        * attach to the pi_state when the validation succeeds.
+        */
+       if (top_waiter)
+-              return attach_to_pi_state(uval, top_waiter->pi_state, ps);
++              return attach_to_pi_state(uaddr, uval, top_waiter->pi_state, ps);
+       /*
+        * We are the first waiter - try to look up the owner based on
+@@ -1146,7 +1228,7 @@ static int lock_pi_update_atomic(u32 __u
+       if (unlikely(cmpxchg_futex_value_locked(&curval, uaddr, uval, newval)))
+               return -EFAULT;
+-      /*If user space value changed, let the caller retry */
++      /* If user space value changed, let the caller retry */
+       return curval != uval ? -EAGAIN : 0;
+ }
+@@ -1202,7 +1284,7 @@ static int futex_lock_pi_atomic(u32 __us
+        */
+       top_waiter = futex_top_waiter(hb, key);
+       if (top_waiter)
+-              return attach_to_pi_state(uval, top_waiter->pi_state, ps);
++              return attach_to_pi_state(uaddr, uval, top_waiter->pi_state, ps);
+       /*
+        * No waiter and user TID is 0. We are here because the
+@@ -1334,6 +1416,7 @@ static int wake_futex_pi(u32 __user *uad
+       if (cmpxchg_futex_value_locked(&curval, uaddr, uval, newval)) {
+               ret = -EFAULT;
++
+       } else if (curval != uval) {
+               /*
+                * If a unconditional UNLOCK_PI operation (user space did not
+@@ -1346,6 +1429,7 @@ static int wake_futex_pi(u32 __user *uad
+               else
+                       ret = -EINVAL;
+       }
++
+       if (ret) {
+               raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+               return ret;
+@@ -1821,7 +1905,7 @@ static int futex_requeue(u32 __user *uad
+                        * If that call succeeds then we have pi_state and an
+                        * initial refcount on it.
+                        */
+-                      ret = lookup_pi_state(ret, hb2, &key2, &pi_state);
++                      ret = lookup_pi_state(uaddr2, ret, hb2, &key2, &pi_state);
+               }
+               switch (ret) {
+@@ -2120,10 +2204,13 @@ static int fixup_pi_state_owner(u32 __us
+ {
+       u32 newtid = task_pid_vnr(newowner) | FUTEX_WAITERS;
+       struct futex_pi_state *pi_state = q->pi_state;
+-      struct task_struct *oldowner = pi_state->owner;
+       u32 uval, uninitialized_var(curval), newval;
++      struct task_struct *oldowner;
+       int ret;
++      raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
++
++      oldowner = pi_state->owner;
+       /* Owner died? */
+       if (!pi_state->owner)
+               newtid |= FUTEX_OWNER_DIED;
+@@ -2139,11 +2226,10 @@ static int fixup_pi_state_owner(u32 __us
+        * because we can fault here. Imagine swapped out pages or a fork
+        * that marked all the anonymous memory readonly for cow.
+        *
+-       * Modifying pi_state _before_ the user space value would
+-       * leave the pi_state in an inconsistent state when we fault
+-       * here, because we need to drop the hash bucket lock to
+-       * handle the fault. This might be observed in the PID check
+-       * in lookup_pi_state.
++       * Modifying pi_state _before_ the user space value would leave the
++       * pi_state in an inconsistent state when we fault here, because we
++       * need to drop the locks to handle the fault. This might be observed
++       * in the PID check in lookup_pi_state.
+        */
+ retry:
+       if (get_futex_value_locked(&uval, uaddr))
+@@ -2164,47 +2250,60 @@ static int fixup_pi_state_owner(u32 __us
+        * itself.
+        */
+       if (pi_state->owner != NULL) {
+-              raw_spin_lock_irq(&pi_state->owner->pi_lock);
++              raw_spin_lock(&pi_state->owner->pi_lock);
+               WARN_ON(list_empty(&pi_state->list));
+               list_del_init(&pi_state->list);
+-              raw_spin_unlock_irq(&pi_state->owner->pi_lock);
++              raw_spin_unlock(&pi_state->owner->pi_lock);
+       }
+       pi_state->owner = newowner;
+-      raw_spin_lock_irq(&newowner->pi_lock);
++      raw_spin_lock(&newowner->pi_lock);
+       WARN_ON(!list_empty(&pi_state->list));
+       list_add(&pi_state->list, &newowner->pi_state_list);
+-      raw_spin_unlock_irq(&newowner->pi_lock);
++      raw_spin_unlock(&newowner->pi_lock);
++      raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
++
+       return 0;
+       /*
+-       * To handle the page fault we need to drop the hash bucket
+-       * lock here. That gives the other task (either the highest priority
+-       * waiter itself or the task which stole the rtmutex) the
+-       * chance to try the fixup of the pi_state. So once we are
+-       * back from handling the fault we need to check the pi_state
+-       * after reacquiring the hash bucket lock and before trying to
+-       * do another fixup. When the fixup has been done already we
+-       * simply return.
++       * To handle the page fault we need to drop the locks here. That gives
++       * the other task (either the highest priority waiter itself or the
++       * task which stole the rtmutex) the chance to try the fixup of the
++       * pi_state. So once we are back from handling the fault we need to
++       * check the pi_state after reacquiring the locks and before trying to
++       * do another fixup. When the fixup has been done already we simply
++       * return.
++       *
++       * Note: we hold both hb->lock and pi_mutex->wait_lock. We can safely
++       * drop hb->lock since the caller owns the hb -> futex_q relation.
++       * Dropping the pi_mutex->wait_lock requires the state revalidate.
+        */
+ handle_fault:
++      raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+       spin_unlock(q->lock_ptr);
+       ret = fault_in_user_writeable(uaddr);
+       spin_lock(q->lock_ptr);
++      raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
+       /*
+        * Check if someone else fixed it for us:
+        */
+-      if (pi_state->owner != oldowner)
+-              return 0;
++      if (pi_state->owner != oldowner) {
++              ret = 0;
++              goto out_unlock;
++      }
+       if (ret)
+-              return ret;
++              goto out_unlock;
+       goto retry;
++
++out_unlock:
++      raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
++      return ret;
+ }
+ static long futex_wait_restart(struct restart_block *restart);
diff --git a/patches/features/all/rt/0006-futex-Cleanup-refcounting.patch b/patches/features/all/rt/0006-futex-Cleanup-refcounting.patch
new file mode 100644 (file)
index 0000000..7a17d7d
--- /dev/null
@@ -0,0 +1,76 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:53 +0100
+Subject: [PATCH] futex: Cleanup refcounting
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit bf92cf3a5100f5a0d5f9834787b130159397cb22
+
+Add a put_pit_state() as counterpart for get_pi_state() so the refcounting
+becomes consistent.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.801778516@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |   13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -800,7 +800,7 @@ static int refill_pi_state_cache(void)
+       return 0;
+ }
+-static struct futex_pi_state * alloc_pi_state(void)
++static struct futex_pi_state *alloc_pi_state(void)
+ {
+       struct futex_pi_state *pi_state = current->pi_state_cache;
+@@ -810,6 +810,11 @@ static struct futex_pi_state * alloc_pi_
+       return pi_state;
+ }
++static void get_pi_state(struct futex_pi_state *pi_state)
++{
++      WARN_ON_ONCE(!atomic_inc_not_zero(&pi_state->refcount));
++}
++
+ /*
+  * Drops a reference to the pi_state object and frees or caches it
+  * when the last reference is gone.
+@@ -854,7 +859,7 @@ static void put_pi_state(struct futex_pi
+  * Look up the task based on what TID userspace gave us.
+  * We dont trust it.
+  */
+-static struct task_struct * futex_find_get_task(pid_t pid)
++static struct task_struct *futex_find_get_task(pid_t pid)
+ {
+       struct task_struct *p;
+@@ -1101,7 +1106,7 @@ static int attach_to_pi_state(u32 __user
+               goto out_einval;
+ out_attach:
+-      atomic_inc(&pi_state->refcount);
++      get_pi_state(pi_state);
+       raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+       *ps = pi_state;
+       return 0;
+@@ -1988,7 +1993,7 @@ static int futex_requeue(u32 __user *uad
+                        * refcount on the pi_state and store the pointer in
+                        * the futex_q object of the waiter.
+                        */
+-                      atomic_inc(&pi_state->refcount);
++                      get_pi_state(pi_state);
+                       this->pi_state = pi_state;
+                       ret = rt_mutex_start_proxy_lock(&pi_state->pi_mutex,
+                                                       this->rt_waiter,
diff --git a/patches/features/all/rt/0007-futex-Rework-inconsistent-rt_mutex-futex_q-state.patch b/patches/features/all/rt/0007-futex-Rework-inconsistent-rt_mutex-futex_q-state.patch
new file mode 100644 (file)
index 0000000..a9ad928
--- /dev/null
@@ -0,0 +1,140 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:54 +0100
+Subject: [PATCH] futex: Rework inconsistent rt_mutex/futex_q state
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit 73d786bd043ebc855f349c81ea805f6b11cbf2aa
+
+There is a weird state in the futex_unlock_pi() path when it interleaves
+with a concurrent futex_lock_pi() at the point where it drops hb->lock.
+
+In this case, it can happen that the rt_mutex wait_list and the futex_q
+disagree on pending waiters, in particular rt_mutex will find no pending
+waiters where futex_q thinks there are. In this case the rt_mutex unlock
+code cannot assign an owner.
+
+The futex side fixup code has to cleanup the inconsistencies with quite a
+bunch of interesting corner cases.
+
+Simplify all this by changing wake_futex_pi() to return -EAGAIN when this
+situation occurs. This then gives the futex_lock_pi() code the opportunity
+to continue and the retried futex_unlock_pi() will now observe a coherent
+state.
+
+The only problem is that this breaks RT timeliness guarantees. That
+is, consider the following scenario:
+
+  T1 and T2 are both pinned to CPU0. prio(T2) > prio(T1)
+
+    CPU0
+
+    T1
+      lock_pi()
+      queue_me()  <- Waiter is visible
+
+    preemption
+
+    T2
+      unlock_pi()
+       loops with -EAGAIN forever
+
+Which is undesirable for PI primitives. Future patches will rectify
+this.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.850383690@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |   50 ++++++++++++++------------------------------------
+ 1 file changed, 14 insertions(+), 36 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1402,12 +1402,19 @@ static int wake_futex_pi(u32 __user *uad
+       new_owner = rt_mutex_next_owner(&pi_state->pi_mutex);
+       /*
+-       * It is possible that the next waiter (the one that brought
+-       * top_waiter owner to the kernel) timed out and is no longer
+-       * waiting on the lock.
++       * When we interleave with futex_lock_pi() where it does
++       * rt_mutex_timed_futex_lock(), we might observe @this futex_q waiter,
++       * but the rt_mutex's wait_list can be empty (either still, or again,
++       * depending on which side we land).
++       *
++       * When this happens, give up our locks and try again, giving the
++       * futex_lock_pi() instance time to complete, either by waiting on the
++       * rtmutex or removing itself from the futex queue.
+        */
+-      if (!new_owner)
+-              new_owner = top_waiter->task;
++      if (!new_owner) {
++              raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
++              return -EAGAIN;
++      }
+       /*
+        * We pass it to the next owner. The WAITERS bit is always
+@@ -2330,7 +2337,6 @@ static long futex_wait_restart(struct re
+  */
+ static int fixup_owner(u32 __user *uaddr, struct futex_q *q, int locked)
+ {
+-      struct task_struct *owner;
+       int ret = 0;
+       if (locked) {
+@@ -2344,43 +2350,15 @@ static int fixup_owner(u32 __user *uaddr
+       }
+       /*
+-       * Catch the rare case, where the lock was released when we were on the
+-       * way back before we locked the hash bucket.
+-       */
+-      if (q->pi_state->owner == current) {
+-              /*
+-               * Try to get the rt_mutex now. This might fail as some other
+-               * task acquired the rt_mutex after we removed ourself from the
+-               * rt_mutex waiters list.
+-               */
+-              if (rt_mutex_futex_trylock(&q->pi_state->pi_mutex)) {
+-                      locked = 1;
+-                      goto out;
+-              }
+-
+-              /*
+-               * pi_state is incorrect, some other task did a lock steal and
+-               * we returned due to timeout or signal without taking the
+-               * rt_mutex. Too late.
+-               */
+-              raw_spin_lock_irq(&q->pi_state->pi_mutex.wait_lock);
+-              owner = rt_mutex_owner(&q->pi_state->pi_mutex);
+-              if (!owner)
+-                      owner = rt_mutex_next_owner(&q->pi_state->pi_mutex);
+-              raw_spin_unlock_irq(&q->pi_state->pi_mutex.wait_lock);
+-              ret = fixup_pi_state_owner(uaddr, q, owner);
+-              goto out;
+-      }
+-
+-      /*
+        * Paranoia check. If we did not take the lock, then we should not be
+        * the owner of the rt_mutex.
+        */
+-      if (rt_mutex_owner(&q->pi_state->pi_mutex) == current)
++      if (rt_mutex_owner(&q->pi_state->pi_mutex) == current) {
+               printk(KERN_ERR "fixup_owner: ret = %d pi-mutex: %p "
+                               "pi-state %p\n", ret,
+                               q->pi_state->pi_mutex.owner,
+                               q->pi_state->owner);
++      }
+ out:
+       return ret ? ret : locked;
diff --git a/patches/features/all/rt/0008-futex-Pull-rt_mutex_futex_unlock-out-from-under-hb-l.patch b/patches/features/all/rt/0008-futex-Pull-rt_mutex_futex_unlock-out-from-under-hb-l.patch
new file mode 100644 (file)
index 0000000..7c89ea2
--- /dev/null
@@ -0,0 +1,358 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:55 +0100
+Subject: [PATCH] futex: Pull rt_mutex_futex_unlock() out from under hb->lock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit 16ffa12d742534d4ff73e8b3a4e81c1de39196f0
+
+There's a number of 'interesting' problems, all caused by holding
+hb->lock while doing the rt_mutex_unlock() equivalient.
+
+Notably:
+
+ - a PI inversion on hb->lock; and,
+
+ - a SCHED_DEADLINE crash because of pointer instability.
+
+The previous changes:
+
+ - changed the locking rules to cover {uval,pi_state} with wait_lock.
+
+ - allow to do rt_mutex_futex_unlock() without dropping wait_lock; which in
+   turn allows to rely on wait_lock atomicity completely.
+
+ - simplified the waiter conundrum.
+
+It's now sufficient to hold rtmutex::wait_lock and a reference on the
+pi_state to protect the state consistency, so hb->lock can be dropped
+before calling rt_mutex_futex_unlock().
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.900002056@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |  154 +++++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 100 insertions(+), 54 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -919,10 +919,12 @@ void exit_pi_state_list(struct task_stru
+               pi_state->owner = NULL;
+               raw_spin_unlock_irq(&curr->pi_lock);
+-              rt_mutex_futex_unlock(&pi_state->pi_mutex);
+-
++              get_pi_state(pi_state);
+               spin_unlock(&hb->lock);
++              rt_mutex_futex_unlock(&pi_state->pi_mutex);
++              put_pi_state(pi_state);
++
+               raw_spin_lock_irq(&curr->pi_lock);
+       }
+       raw_spin_unlock_irq(&curr->pi_lock);
+@@ -1035,6 +1037,11 @@ static int attach_to_pi_state(u32 __user
+        * has dropped the hb->lock in between queue_me() and unqueue_me_pi(),
+        * which in turn means that futex_lock_pi() still has a reference on
+        * our pi_state.
++       *
++       * The waiter holding a reference on @pi_state also protects against
++       * the unlocked put_pi_state() in futex_unlock_pi(), futex_lock_pi()
++       * and futex_wait_requeue_pi() as it cannot go to 0 and consequently
++       * free pi_state before we can take a reference ourselves.
+        */
+       WARN_ON(!atomic_read(&pi_state->refcount));
+@@ -1378,48 +1385,40 @@ static void mark_wake_futex(struct wake_
+       smp_store_release(&q->lock_ptr, NULL);
+ }
+-static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *top_waiter,
+-                       struct futex_hash_bucket *hb)
++/*
++ * Caller must hold a reference on @pi_state.
++ */
++static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_pi_state *pi_state)
+ {
+-      struct task_struct *new_owner;
+-      struct futex_pi_state *pi_state = top_waiter->pi_state;
+       u32 uninitialized_var(curval), newval;
++      struct task_struct *new_owner;
++      bool deboost = false;
+       WAKE_Q(wake_q);
+-      bool deboost;
+       int ret = 0;
+-      if (!pi_state)
+-              return -EINVAL;
+-
+-      /*
+-       * If current does not own the pi_state then the futex is
+-       * inconsistent and user space fiddled with the futex value.
+-       */
+-      if (pi_state->owner != current)
+-              return -EINVAL;
+-
+       raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
+       new_owner = rt_mutex_next_owner(&pi_state->pi_mutex);
+-
+-      /*
+-       * When we interleave with futex_lock_pi() where it does
+-       * rt_mutex_timed_futex_lock(), we might observe @this futex_q waiter,
+-       * but the rt_mutex's wait_list can be empty (either still, or again,
+-       * depending on which side we land).
+-       *
+-       * When this happens, give up our locks and try again, giving the
+-       * futex_lock_pi() instance time to complete, either by waiting on the
+-       * rtmutex or removing itself from the futex queue.
+-       */
+       if (!new_owner) {
+-              raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+-              return -EAGAIN;
++              /*
++               * Since we held neither hb->lock nor wait_lock when coming
++               * into this function, we could have raced with futex_lock_pi()
++               * such that we might observe @this futex_q waiter, but the
++               * rt_mutex's wait_list can be empty (either still, or again,
++               * depending on which side we land).
++               *
++               * When this happens, give up our locks and try again, giving
++               * the futex_lock_pi() instance time to complete, either by
++               * waiting on the rtmutex or removing itself from the futex
++               * queue.
++               */
++              ret = -EAGAIN;
++              goto out_unlock;
+       }
+       /*
+-       * We pass it to the next owner. The WAITERS bit is always
+-       * kept enabled while there is PI state around. We cleanup the
+-       * owner died bit, because we are the owner.
++       * We pass it to the next owner. The WAITERS bit is always kept
++       * enabled while there is PI state around. We cleanup the owner
++       * died bit, because we are the owner.
+        */
+       newval = FUTEX_WAITERS | task_pid_vnr(new_owner);
+@@ -1442,10 +1441,8 @@ static int wake_futex_pi(u32 __user *uad
+                       ret = -EINVAL;
+       }
+-      if (ret) {
+-              raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+-              return ret;
+-      }
++      if (ret)
++              goto out_unlock;
+       raw_spin_lock(&pi_state->owner->pi_lock);
+       WARN_ON(list_empty(&pi_state->list));
+@@ -1463,15 +1460,15 @@ static int wake_futex_pi(u32 __user *uad
+        */
+       deboost = __rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q);
++out_unlock:
+       raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+-      spin_unlock(&hb->lock);
+       if (deboost) {
+               wake_up_q(&wake_q);
+               rt_mutex_adjust_prio(current);
+       }
+-      return 0;
++      return ret;
+ }
+ /*
+@@ -2230,7 +2227,8 @@ static int fixup_pi_state_owner(u32 __us
+       /*
+        * We are here either because we stole the rtmutex from the
+        * previous highest priority waiter or we are the highest priority
+-       * waiter but failed to get the rtmutex the first time.
++       * waiter but have failed to get the rtmutex the first time.
++       *
+        * We have to replace the newowner TID in the user space variable.
+        * This must be atomic as we have to preserve the owner died bit here.
+        *
+@@ -2247,7 +2245,7 @@ static int fixup_pi_state_owner(u32 __us
+       if (get_futex_value_locked(&uval, uaddr))
+               goto handle_fault;
+-      while (1) {
++      for (;;) {
+               newval = (uval & FUTEX_OWNER_DIED) | newtid;
+               if (cmpxchg_futex_value_locked(&curval, uaddr, uval, newval))
+@@ -2343,6 +2341,10 @@ static int fixup_owner(u32 __user *uaddr
+               /*
+                * Got the lock. We might not be the anticipated owner if we
+                * did a lock-steal - fix up the PI-state in that case:
++               *
++               * We can safely read pi_state->owner without holding wait_lock
++               * because we now own the rt_mutex, only the owner will attempt
++               * to change it.
+                */
+               if (q->pi_state->owner != current)
+                       ret = fixup_pi_state_owner(uaddr, q, current);
+@@ -2582,6 +2584,7 @@ static int futex_lock_pi(u32 __user *uad
+                        ktime_t *time, int trylock)
+ {
+       struct hrtimer_sleeper timeout, *to = NULL;
++      struct futex_pi_state *pi_state = NULL;
+       struct futex_hash_bucket *hb;
+       struct futex_q q = futex_q_init;
+       int res, ret;
+@@ -2668,12 +2671,19 @@ static int futex_lock_pi(u32 __user *uad
+        * If fixup_owner() faulted and was unable to handle the fault, unlock
+        * it and return the fault to userspace.
+        */
+-      if (ret && (rt_mutex_owner(&q.pi_state->pi_mutex) == current))
+-              rt_mutex_futex_unlock(&q.pi_state->pi_mutex);
++      if (ret && (rt_mutex_owner(&q.pi_state->pi_mutex) == current)) {
++              pi_state = q.pi_state;
++              get_pi_state(pi_state);
++      }
+       /* Unqueue and drop the lock */
+       unqueue_me_pi(&q);
++      if (pi_state) {
++              rt_mutex_futex_unlock(&pi_state->pi_mutex);
++              put_pi_state(pi_state);
++      }
++
+       goto out_put_key;
+ out_unlock_put_key:
+@@ -2736,10 +2746,36 @@ static int futex_unlock_pi(u32 __user *u
+        */
+       top_waiter = futex_top_waiter(hb, &key);
+       if (top_waiter) {
+-              ret = wake_futex_pi(uaddr, uval, top_waiter, hb);
++              struct futex_pi_state *pi_state = top_waiter->pi_state;
++
++              ret = -EINVAL;
++              if (!pi_state)
++                      goto out_unlock;
++
++              /*
++               * If current does not own the pi_state then the futex is
++               * inconsistent and user space fiddled with the futex value.
++               */
++              if (pi_state->owner != current)
++                      goto out_unlock;
++
++              /*
++               * Grab a reference on the pi_state and drop hb->lock.
++               *
++               * The reference ensures pi_state lives, dropping the hb->lock
++               * is tricky.. wake_futex_pi() will take rt_mutex::wait_lock to
++               * close the races against futex_lock_pi(), but in case of
++               * _any_ fail we'll abort and retry the whole deal.
++               */
++              get_pi_state(pi_state);
++              spin_unlock(&hb->lock);
++
++              ret = wake_futex_pi(uaddr, uval, pi_state);
++
++              put_pi_state(pi_state);
++
+               /*
+-               * In case of success wake_futex_pi dropped the hash
+-               * bucket lock.
++               * Success, we're done! No tricky corner cases.
+                */
+               if (!ret)
+                       goto out_putkey;
+@@ -2754,7 +2790,6 @@ static int futex_unlock_pi(u32 __user *u
+                * setting the FUTEX_WAITERS bit. Try again.
+                */
+               if (ret == -EAGAIN) {
+-                      spin_unlock(&hb->lock);
+                       put_futex_key(&key);
+                       goto retry;
+               }
+@@ -2762,7 +2797,7 @@ static int futex_unlock_pi(u32 __user *u
+                * wake_futex_pi has detected invalid state. Tell user
+                * space.
+                */
+-              goto out_unlock;
++              goto out_putkey;
+       }
+       /*
+@@ -2772,8 +2807,10 @@ static int futex_unlock_pi(u32 __user *u
+        * preserve the WAITERS bit not the OWNER_DIED one. We are the
+        * owner.
+        */
+-      if (cmpxchg_futex_value_locked(&curval, uaddr, uval, 0))
++      if (cmpxchg_futex_value_locked(&curval, uaddr, uval, 0)) {
++              spin_unlock(&hb->lock);
+               goto pi_faulted;
++      }
+       /*
+        * If uval has changed, let user space handle it.
+@@ -2787,7 +2824,6 @@ static int futex_unlock_pi(u32 __user *u
+       return ret;
+ pi_faulted:
+-      spin_unlock(&hb->lock);
+       put_futex_key(&key);
+       ret = fault_in_user_writeable(uaddr);
+@@ -2891,6 +2927,7 @@ static int futex_wait_requeue_pi(u32 __u
+                                u32 __user *uaddr2)
+ {
+       struct hrtimer_sleeper timeout, *to = NULL;
++      struct futex_pi_state *pi_state = NULL;
+       struct rt_mutex_waiter rt_waiter;
+       struct futex_hash_bucket *hb;
+       union futex_key key2 = FUTEX_KEY_INIT;
+@@ -2975,8 +3012,10 @@ static int futex_wait_requeue_pi(u32 __u
+               if (q.pi_state && (q.pi_state->owner != current)) {
+                       spin_lock(q.lock_ptr);
+                       ret = fixup_pi_state_owner(uaddr2, &q, current);
+-                      if (ret && rt_mutex_owner(&q.pi_state->pi_mutex) == current)
+-                              rt_mutex_futex_unlock(&q.pi_state->pi_mutex);
++                      if (ret && rt_mutex_owner(&q.pi_state->pi_mutex) == current) {
++                              pi_state = q.pi_state;
++                              get_pi_state(pi_state);
++                      }
+                       /*
+                        * Drop the reference to the pi state which
+                        * the requeue_pi() code acquired for us.
+@@ -3015,13 +3054,20 @@ static int futex_wait_requeue_pi(u32 __u
+                * the fault, unlock the rt_mutex and return the fault to
+                * userspace.
+                */
+-              if (ret && rt_mutex_owner(pi_mutex) == current)
+-                      rt_mutex_futex_unlock(pi_mutex);
++              if (ret && rt_mutex_owner(&q.pi_state->pi_mutex) == current) {
++                      pi_state = q.pi_state;
++                      get_pi_state(pi_state);
++              }
+               /* Unqueue and drop the lock. */
+               unqueue_me_pi(&q);
+       }
++      if (pi_state) {
++              rt_mutex_futex_unlock(&pi_state->pi_mutex);
++              put_pi_state(pi_state);
++      }
++
+       if (ret == -EINTR) {
+               /*
+                * We've already been requeued, but cannot restart by calling
diff --git a/patches/features/all/rt/0009-futex-rt_mutex-Introduce-rt_mutex_init_waiter.patch b/patches/features/all/rt/0009-futex-rt_mutex-Introduce-rt_mutex_init_waiter.patch
new file mode 100644 (file)
index 0000000..565f3c3
--- /dev/null
@@ -0,0 +1,80 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:56 +0100
+Subject: [PATCH] futex,rt_mutex: Introduce rt_mutex_init_waiter()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit 50809358dd7199aa7ce232f6877dd09ec30ef374
+
+Since there's already two copies of this code, introduce a helper now
+before adding a third one.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104151.950039479@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c                  |    5 +----
+ kernel/locking/rtmutex.c        |   12 +++++++++---
+ kernel/locking/rtmutex_common.h |    1 +
+ 3 files changed, 11 insertions(+), 7 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -2954,10 +2954,7 @@ static int futex_wait_requeue_pi(u32 __u
+        * The waiter is allocated on our stack, manipulated by the requeue
+        * code while we sleep on uaddr.
+        */
+-      debug_rt_mutex_init_waiter(&rt_waiter);
+-      RB_CLEAR_NODE(&rt_waiter.pi_tree_entry);
+-      RB_CLEAR_NODE(&rt_waiter.tree_entry);
+-      rt_waiter.task = NULL;
++      rt_mutex_init_waiter(&rt_waiter);
+       ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, VERIFY_WRITE);
+       if (unlikely(ret != 0))
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1151,6 +1151,14 @@ void rt_mutex_adjust_pi(struct task_stru
+                                  next_lock, NULL, task);
+ }
++void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter)
++{
++      debug_rt_mutex_init_waiter(waiter);
++      RB_CLEAR_NODE(&waiter->pi_tree_entry);
++      RB_CLEAR_NODE(&waiter->tree_entry);
++      waiter->task = NULL;
++}
++
+ /**
+  * __rt_mutex_slowlock() - Perform the wait-wake-try-to-take loop
+  * @lock:              the rt_mutex to take
+@@ -1233,9 +1241,7 @@ rt_mutex_slowlock(struct rt_mutex *lock,
+       unsigned long flags;
+       int ret = 0;
+-      debug_rt_mutex_init_waiter(&waiter);
+-      RB_CLEAR_NODE(&waiter.pi_tree_entry);
+-      RB_CLEAR_NODE(&waiter.tree_entry);
++      rt_mutex_init_waiter(&waiter);
+       /*
+        * Technically we could use raw_spin_[un]lock_irq() here, but this can
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -103,6 +103,7 @@ extern void rt_mutex_init_proxy_locked(s
+                                      struct task_struct *proxy_owner);
+ extern void rt_mutex_proxy_unlock(struct rt_mutex *lock,
+                                 struct task_struct *proxy_owner);
++extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter);
+ extern int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
+                                    struct rt_mutex_waiter *waiter,
+                                    struct task_struct *task);
diff --git a/patches/features/all/rt/0010-futex-rt_mutex-Restructure-rt_mutex_finish_proxy_loc.patch b/patches/features/all/rt/0010-futex-rt_mutex-Restructure-rt_mutex_finish_proxy_loc.patch
new file mode 100644 (file)
index 0000000..4c20d4f
--- /dev/null
@@ -0,0 +1,159 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:57 +0100
+Subject: [PATCH] futex,rt_mutex: Restructure rt_mutex_finish_proxy_lock()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit 38d589f2fd08f1296aea3ce62bebd185125c6d81
+
+With the ultimate goal of keeping rt_mutex wait_list and futex_q waiters
+consistent it's necessary to split 'rt_mutex_futex_lock()' into finer
+parts, such that only the actual blocking can be done without hb->lock
+held.
+
+Split split_mutex_finish_proxy_lock() into two parts, one that does the
+blocking and one that does remove_waiter() when the lock acquire failed.
+
+When the rtmutex was acquired successfully the waiter can be removed in the
+acquisiton path safely, since there is no concurrency on the lock owner.
+
+This means that, except for futex_lock_pi(), all wait_list modifications
+are done with both hb->lock and wait_lock held.
+
+[bigeasy@linutronix.de: fix for futex_requeue_pi_signal_restart]
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104152.001659630@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c                  |    7 +++--
+ kernel/locking/rtmutex.c        |   52 ++++++++++++++++++++++++++++++++++------
+ kernel/locking/rtmutex_common.h |    8 +++---
+ 3 files changed, 55 insertions(+), 12 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -3030,10 +3030,13 @@ static int futex_wait_requeue_pi(u32 __u
+                */
+               WARN_ON(!q.pi_state);
+               pi_mutex = &q.pi_state->pi_mutex;
+-              ret = rt_mutex_finish_proxy_lock(pi_mutex, to, &rt_waiter);
+-              debug_rt_mutex_free_waiter(&rt_waiter);
++              ret = rt_mutex_wait_proxy_lock(pi_mutex, to, &rt_waiter);
+               spin_lock(q.lock_ptr);
++              if (ret && !rt_mutex_cleanup_proxy_lock(pi_mutex, &rt_waiter))
++                      ret = 0;
++
++              debug_rt_mutex_free_waiter(&rt_waiter);
+               /*
+                * Fixup the pi_state owner and possibly acquire the lock if we
+                * haven't already.
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1743,21 +1743,23 @@ struct task_struct *rt_mutex_next_owner(
+ }
+ /**
+- * rt_mutex_finish_proxy_lock() - Complete lock acquisition
++ * rt_mutex_wait_proxy_lock() - Wait for lock acquisition
+  * @lock:             the rt_mutex we were woken on
+  * @to:                       the timeout, null if none. hrtimer should already have
+  *                    been started.
+  * @waiter:           the pre-initialized rt_mutex_waiter
+  *
+- * Complete the lock acquisition started our behalf by another thread.
++ * Wait for the the lock acquisition started on our behalf by
++ * rt_mutex_start_proxy_lock(). Upon failure, the caller must call
++ * rt_mutex_cleanup_proxy_lock().
+  *
+  * Returns:
+  *  0 - success
+  * <0 - error, one of -EINTR, -ETIMEDOUT
+  *
+- * Special API call for PI-futex requeue support
++ * Special API call for PI-futex support
+  */
+-int rt_mutex_finish_proxy_lock(struct rt_mutex *lock,
++int rt_mutex_wait_proxy_lock(struct rt_mutex *lock,
+                              struct hrtimer_sleeper *to,
+                              struct rt_mutex_waiter *waiter)
+ {
+@@ -1770,9 +1772,6 @@ int rt_mutex_finish_proxy_lock(struct rt
+       /* sleep on the mutex */
+       ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter);
+-      if (unlikely(ret))
+-              remove_waiter(lock, waiter);
+-
+       /*
+        * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might
+        * have to fix that up.
+@@ -1783,3 +1782,42 @@ int rt_mutex_finish_proxy_lock(struct rt
+       return ret;
+ }
++
++/**
++ * rt_mutex_cleanup_proxy_lock() - Cleanup failed lock acquisition
++ * @lock:             the rt_mutex we were woken on
++ * @waiter:           the pre-initialized rt_mutex_waiter
++ *
++ * Attempt to clean up after a failed rt_mutex_wait_proxy_lock().
++ *
++ * Unless we acquired the lock; we're still enqueued on the wait-list and can
++ * in fact still be granted ownership until we're removed. Therefore we can
++ * find we are in fact the owner and must disregard the
++ * rt_mutex_wait_proxy_lock() failure.
++ *
++ * Returns:
++ *  true  - did the cleanup, we done.
++ *  false - we acquired the lock after rt_mutex_wait_proxy_lock() returned,
++ *          caller should disregards its return value.
++ *
++ * Special API call for PI-futex support
++ */
++bool rt_mutex_cleanup_proxy_lock(struct rt_mutex *lock,
++                               struct rt_mutex_waiter *waiter)
++{
++      bool cleanup = false;
++
++      raw_spin_lock_irq(&lock->wait_lock);
++      /*
++       * Unless we're the owner; we're still enqueued on the wait_list.
++       * So check if we became owner, if not, take us off the wait_list.
++       */
++      if (rt_mutex_owner(lock) != current) {
++              remove_waiter(lock, waiter);
++              fixup_rt_mutex_waiters(lock);
++              cleanup = true;
++      }
++      raw_spin_unlock_irq(&lock->wait_lock);
++
++      return cleanup;
++}
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -107,9 +107,11 @@ extern void rt_mutex_init_waiter(struct
+ extern int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
+                                    struct rt_mutex_waiter *waiter,
+                                    struct task_struct *task);
+-extern int rt_mutex_finish_proxy_lock(struct rt_mutex *lock,
+-                                    struct hrtimer_sleeper *to,
+-                                    struct rt_mutex_waiter *waiter);
++extern int rt_mutex_wait_proxy_lock(struct rt_mutex *lock,
++                             struct hrtimer_sleeper *to,
++                             struct rt_mutex_waiter *waiter);
++extern bool rt_mutex_cleanup_proxy_lock(struct rt_mutex *lock,
++                               struct rt_mutex_waiter *waiter);
+ extern int rt_mutex_timed_futex_lock(struct rt_mutex *l, struct hrtimer_sleeper *to);
+ extern int rt_mutex_futex_trylock(struct rt_mutex *l);
diff --git a/patches/features/all/rt/0011-futex-Rework-futex_lock_pi-to-use-rt_mutex_-_proxy_l.patch b/patches/features/all/rt/0011-futex-Rework-futex_lock_pi-to-use-rt_mutex_-_proxy_l.patch
new file mode 100644 (file)
index 0000000..df88438
--- /dev/null
@@ -0,0 +1,267 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:58 +0100
+Subject: [PATCH] futex: Rework futex_lock_pi() to use rt_mutex_*_proxy_lock()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit cfafcd117da0216520568c195cb2f6cd1980c4bb
+
+By changing futex_lock_pi() to use rt_mutex_*_proxy_lock() all wait_list
+modifications are done under both hb->lock and wait_lock.
+
+This closes the obvious interleave pattern between futex_lock_pi() and
+futex_unlock_pi(), but not entirely so. See below:
+
+Before:
+
+futex_lock_pi()                        futex_unlock_pi()
+  unlock hb->lock
+
+                                 lock hb->lock
+                                 unlock hb->lock
+
+                                 lock rt_mutex->wait_lock
+                                 unlock rt_mutex_wait_lock
+                                   -EAGAIN
+
+  lock rt_mutex->wait_lock
+  list_add
+  unlock rt_mutex->wait_lock
+
+  schedule()
+
+  lock rt_mutex->wait_lock
+  list_del
+  unlock rt_mutex->wait_lock
+
+                                 <idem>
+                                   -EAGAIN
+
+  lock hb->lock
+
+
+After:
+
+futex_lock_pi()                        futex_unlock_pi()
+
+  lock hb->lock
+  lock rt_mutex->wait_lock
+  list_add
+  unlock rt_mutex->wait_lock
+  unlock hb->lock
+
+  schedule()
+                                 lock hb->lock
+                                 unlock hb->lock
+  lock hb->lock
+  lock rt_mutex->wait_lock
+  list_del
+  unlock rt_mutex->wait_lock
+
+                                 lock rt_mutex->wait_lock
+                                 unlock rt_mutex_wait_lock
+                                   -EAGAIN
+
+  unlock hb->lock
+
+
+It does however solve the earlier starvation/live-lock scenario which got
+introduced with the -EAGAIN since unlike the before scenario; where the
+-EAGAIN happens while futex_unlock_pi() doesn't hold any locks; in the
+after scenario it happens while futex_unlock_pi() actually holds a lock,
+and then it is serialized on that lock.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104152.062785528@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c                  |   77 ++++++++++++++++++++++++++++------------
+ kernel/locking/rtmutex.c        |   26 +++----------
+ kernel/locking/rtmutex_common.h |    1 
+ 3 files changed, 62 insertions(+), 42 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -2097,20 +2097,7 @@ queue_unlock(struct futex_hash_bucket *h
+       hb_waiters_dec(hb);
+ }
+-/**
+- * queue_me() - Enqueue the futex_q on the futex_hash_bucket
+- * @q:        The futex_q to enqueue
+- * @hb:       The destination hash bucket
+- *
+- * The hb->lock must be held by the caller, and is released here. A call to
+- * queue_me() is typically paired with exactly one call to unqueue_me().  The
+- * exceptions involve the PI related operations, which may use unqueue_me_pi()
+- * or nothing if the unqueue is done as part of the wake process and the unqueue
+- * state is implicit in the state of woken task (see futex_wait_requeue_pi() for
+- * an example).
+- */
+-static inline void queue_me(struct futex_q *q, struct futex_hash_bucket *hb)
+-      __releases(&hb->lock)
++static inline void __queue_me(struct futex_q *q, struct futex_hash_bucket *hb)
+ {
+       int prio;
+@@ -2127,6 +2114,24 @@ static inline void queue_me(struct futex
+       plist_node_init(&q->list, prio);
+       plist_add(&q->list, &hb->chain);
+       q->task = current;
++}
++
++/**
++ * queue_me() - Enqueue the futex_q on the futex_hash_bucket
++ * @q:        The futex_q to enqueue
++ * @hb:       The destination hash bucket
++ *
++ * The hb->lock must be held by the caller, and is released here. A call to
++ * queue_me() is typically paired with exactly one call to unqueue_me().  The
++ * exceptions involve the PI related operations, which may use unqueue_me_pi()
++ * or nothing if the unqueue is done as part of the wake process and the unqueue
++ * state is implicit in the state of woken task (see futex_wait_requeue_pi() for
++ * an example).
++ */
++static inline void queue_me(struct futex_q *q, struct futex_hash_bucket *hb)
++      __releases(&hb->lock)
++{
++      __queue_me(q, hb);
+       spin_unlock(&hb->lock);
+ }
+@@ -2585,6 +2590,7 @@ static int futex_lock_pi(u32 __user *uad
+ {
+       struct hrtimer_sleeper timeout, *to = NULL;
+       struct futex_pi_state *pi_state = NULL;
++      struct rt_mutex_waiter rt_waiter;
+       struct futex_hash_bucket *hb;
+       struct futex_q q = futex_q_init;
+       int res, ret;
+@@ -2637,25 +2643,52 @@ static int futex_lock_pi(u32 __user *uad
+               }
+       }
++      WARN_ON(!q.pi_state);
++
+       /*
+        * Only actually queue now that the atomic ops are done:
+        */
+-      queue_me(&q, hb);
++      __queue_me(&q, hb);
+-      WARN_ON(!q.pi_state);
+-      /*
+-       * Block on the PI mutex:
+-       */
+-      if (!trylock) {
+-              ret = rt_mutex_timed_futex_lock(&q.pi_state->pi_mutex, to);
+-      } else {
++      if (trylock) {
+               ret = rt_mutex_futex_trylock(&q.pi_state->pi_mutex);
+               /* Fixup the trylock return value: */
+               ret = ret ? 0 : -EWOULDBLOCK;
++              goto no_block;
+       }
++      /*
++       * We must add ourselves to the rt_mutex waitlist while holding hb->lock
++       * such that the hb and rt_mutex wait lists match.
++       */
++      rt_mutex_init_waiter(&rt_waiter);
++      ret = rt_mutex_start_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter, current);
++      if (ret) {
++              if (ret == 1)
++                      ret = 0;
++
++              goto no_block;
++      }
++
++      spin_unlock(q.lock_ptr);
++
++      if (unlikely(to))
++              hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
++
++      ret = rt_mutex_wait_proxy_lock(&q.pi_state->pi_mutex, to, &rt_waiter);
++
+       spin_lock(q.lock_ptr);
+       /*
++       * If we failed to acquire the lock (signal/timeout), we must
++       * first acquire the hb->lock before removing the lock from the
++       * rt_mutex waitqueue, such that we can keep the hb and rt_mutex
++       * wait lists consistent.
++       */
++      if (ret && !rt_mutex_cleanup_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter))
++              ret = 0;
++
++no_block:
++      /*
+        * Fixup the pi_state owner and possibly acquire the lock if we
+        * haven't already.
+        */
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1491,19 +1491,6 @@ int __sched rt_mutex_lock_interruptible(
+ EXPORT_SYMBOL_GPL(rt_mutex_lock_interruptible);
+ /*
+- * Futex variant with full deadlock detection.
+- * Futex variants must not use the fast-path, see __rt_mutex_futex_unlock().
+- */
+-int __sched rt_mutex_timed_futex_lock(struct rt_mutex *lock,
+-                            struct hrtimer_sleeper *timeout)
+-{
+-      might_sleep();
+-
+-      return rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE,
+-                               timeout, RT_MUTEX_FULL_CHAINWALK);
+-}
+-
+-/*
+  * Futex variant, must not use fastpath.
+  */
+ int __sched rt_mutex_futex_trylock(struct rt_mutex *lock)
+@@ -1772,12 +1759,6 @@ int rt_mutex_wait_proxy_lock(struct rt_m
+       /* sleep on the mutex */
+       ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter);
+-      /*
+-       * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might
+-       * have to fix that up.
+-       */
+-      fixup_rt_mutex_waiters(lock);
+-
+       raw_spin_unlock_irq(&lock->wait_lock);
+       return ret;
+@@ -1817,6 +1798,13 @@ bool rt_mutex_cleanup_proxy_lock(struct
+               fixup_rt_mutex_waiters(lock);
+               cleanup = true;
+       }
++
++      /*
++       * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might
++       * have to fix that up.
++       */
++      fixup_rt_mutex_waiters(lock);
++
+       raw_spin_unlock_irq(&lock->wait_lock);
+       return cleanup;
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -113,7 +113,6 @@ extern int rt_mutex_wait_proxy_lock(stru
+ extern bool rt_mutex_cleanup_proxy_lock(struct rt_mutex *lock,
+                                struct rt_mutex_waiter *waiter);
+-extern int rt_mutex_timed_futex_lock(struct rt_mutex *l, struct hrtimer_sleeper *to);
+ extern int rt_mutex_futex_trylock(struct rt_mutex *l);
+ extern void rt_mutex_futex_unlock(struct rt_mutex *lock);
diff --git a/patches/features/all/rt/0012-futex-Futex_unlock_pi-determinism.patch b/patches/features/all/rt/0012-futex-Futex_unlock_pi-determinism.patch
new file mode 100644 (file)
index 0000000..3012845
--- /dev/null
@@ -0,0 +1,81 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:35:59 +0100
+Subject: [PATCH] futex: Futex_unlock_pi() determinism
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit bebe5b514345f09be2c15e414d076b02ecb9cce8
+
+The problem with returning -EAGAIN when the waiter state mismatches is that
+it becomes very hard to proof a bounded execution time on the
+operation. And seeing that this is a RT operation, this is somewhat
+important.
+
+While in practise; given the previous patch; it will be very unlikely to
+ever really take more than one or two rounds, proving so becomes rather
+hard.
+
+However, now that modifying wait_list is done while holding both hb->lock
+and wait_lock, the scenario can be avoided entirely by acquiring wait_lock
+while still holding hb-lock. Doing a hand-over, without leaving a hole.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: bigeasy@linutronix.de
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104152.112378812@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |   24 +++++++++++-------------
+ 1 file changed, 11 insertions(+), 13 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1396,15 +1396,10 @@ static int wake_futex_pi(u32 __user *uad
+       WAKE_Q(wake_q);
+       int ret = 0;
+-      raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
+       new_owner = rt_mutex_next_owner(&pi_state->pi_mutex);
+-      if (!new_owner) {
++      if (WARN_ON_ONCE(!new_owner)) {
+               /*
+-               * Since we held neither hb->lock nor wait_lock when coming
+-               * into this function, we could have raced with futex_lock_pi()
+-               * such that we might observe @this futex_q waiter, but the
+-               * rt_mutex's wait_list can be empty (either still, or again,
+-               * depending on which side we land).
++               * As per the comment in futex_unlock_pi() this should not happen.
+                *
+                * When this happens, give up our locks and try again, giving
+                * the futex_lock_pi() instance time to complete, either by
+@@ -2792,15 +2787,18 @@ static int futex_unlock_pi(u32 __user *u
+               if (pi_state->owner != current)
+                       goto out_unlock;
++              get_pi_state(pi_state);
+               /*
+-               * Grab a reference on the pi_state and drop hb->lock.
++               * Since modifying the wait_list is done while holding both
++               * hb->lock and wait_lock, holding either is sufficient to
++               * observe it.
+                *
+-               * The reference ensures pi_state lives, dropping the hb->lock
+-               * is tricky.. wake_futex_pi() will take rt_mutex::wait_lock to
+-               * close the races against futex_lock_pi(), but in case of
+-               * _any_ fail we'll abort and retry the whole deal.
++               * By taking wait_lock while still holding hb->lock, we ensure
++               * there is no point where we hold neither; and therefore
++               * wake_futex_pi() must observe a state consistent with what we
++               * observed.
+                */
+-              get_pi_state(pi_state);
++              raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
+               spin_unlock(&hb->lock);
+               ret = wake_futex_pi(uaddr, uval, pi_state);
diff --git a/patches/features/all/rt/0013-futex-Drop-hb-lock-before-enqueueing-on-the-rtmutex.patch b/patches/features/all/rt/0013-futex-Drop-hb-lock-before-enqueueing-on-the-rtmutex.patch
new file mode 100644 (file)
index 0000000..018a737
--- /dev/null
@@ -0,0 +1,204 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 22 Mar 2017 11:36:00 +0100
+Subject: [PATCH] futex: Drop hb->lock before enqueueing on the rtmutex
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit 56222b212e8edb1cf51f5dd73ff645809b082b40
+
+When PREEMPT_RT_FULL does the spinlock -> rt_mutex substitution the PI
+chain code will (falsely) report a deadlock and BUG.
+
+The problem is that it hold hb->lock (now an rt_mutex) while doing
+task_blocks_on_rt_mutex on the futex's pi_state::rtmutex. This, when
+interleaved just right with futex_unlock_pi() leads it to believe to see an
+AB-BA deadlock.
+
+  Task1 (holds rt_mutex,       Task2 (does FUTEX_LOCK_PI)
+         does FUTEX_UNLOCK_PI)
+
+                               lock hb->lock
+                               lock rt_mutex (as per start_proxy)
+  lock hb->lock
+
+Which is a trivial AB-BA.
+
+It is not an actual deadlock, because it won't be holding hb->lock by the
+time it actually blocks on the rt_mutex, but the chainwalk code doesn't
+know that and it would be a nightmare to handle this gracefully.
+
+To avoid this problem, do the same as in futex_unlock_pi() and drop
+hb->lock after acquiring wait_lock. This still fully serializes against
+futex_unlock_pi(), since adding to the wait_list does the very same lock
+dance, and removing it holds both locks.
+
+Aside of solving the RT problem this makes the lock and unlock mechanism
+symetric and reduces the hb->lock held time.
+
+Reported-and-tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Suggested-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: juri.lelli@arm.com
+Cc: xlpang@redhat.com
+Cc: rostedt@goodmis.org
+Cc: mathieu.desnoyers@efficios.com
+Cc: jdesfossez@efficios.com
+Cc: dvhart@infradead.org
+Cc: bristot@redhat.com
+Link: http://lkml.kernel.org/r/20170322104152.161341537@infradead.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c                  |   30 +++++++++++++++++-------
+ kernel/locking/rtmutex.c        |   49 ++++++++++++++++++++++------------------
+ kernel/locking/rtmutex_common.h |    3 ++
+ 3 files changed, 52 insertions(+), 30 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -2652,20 +2652,33 @@ static int futex_lock_pi(u32 __user *uad
+               goto no_block;
+       }
++      rt_mutex_init_waiter(&rt_waiter);
++
+       /*
+-       * We must add ourselves to the rt_mutex waitlist while holding hb->lock
+-       * such that the hb and rt_mutex wait lists match.
++       * On PREEMPT_RT_FULL, when hb->lock becomes an rt_mutex, we must not
++       * hold it while doing rt_mutex_start_proxy(), because then it will
++       * include hb->lock in the blocking chain, even through we'll not in
++       * fact hold it while blocking. This will lead it to report -EDEADLK
++       * and BUG when futex_unlock_pi() interleaves with this.
++       *
++       * Therefore acquire wait_lock while holding hb->lock, but drop the
++       * latter before calling rt_mutex_start_proxy_lock(). This still fully
++       * serializes against futex_unlock_pi() as that does the exact same
++       * lock handoff sequence.
+        */
+-      rt_mutex_init_waiter(&rt_waiter);
+-      ret = rt_mutex_start_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter, current);
++      raw_spin_lock_irq(&q.pi_state->pi_mutex.wait_lock);
++      spin_unlock(q.lock_ptr);
++      ret = __rt_mutex_start_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter, current);
++      raw_spin_unlock_irq(&q.pi_state->pi_mutex.wait_lock);
++
+       if (ret) {
+               if (ret == 1)
+                       ret = 0;
++              spin_lock(q.lock_ptr);
+               goto no_block;
+       }
+-      spin_unlock(q.lock_ptr);
+       if (unlikely(to))
+               hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
+@@ -2678,6 +2691,9 @@ static int futex_lock_pi(u32 __user *uad
+        * first acquire the hb->lock before removing the lock from the
+        * rt_mutex waitqueue, such that we can keep the hb and rt_mutex
+        * wait lists consistent.
++       *
++       * In particular; it is important that futex_unlock_pi() can not
++       * observe this inconsistency.
+        */
+       if (ret && !rt_mutex_cleanup_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter))
+               ret = 0;
+@@ -2789,10 +2805,6 @@ static int futex_unlock_pi(u32 __user *u
+               get_pi_state(pi_state);
+               /*
+-               * Since modifying the wait_list is done while holding both
+-               * hb->lock and wait_lock, holding either is sufficient to
+-               * observe it.
+-               *
+                * By taking wait_lock while still holding hb->lock, we ensure
+                * there is no point where we hold neither; and therefore
+                * wake_futex_pi() must observe a state consistent with what we
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1659,31 +1659,14 @@ void rt_mutex_proxy_unlock(struct rt_mut
+       rt_mutex_set_owner(lock, NULL);
+ }
+-/**
+- * rt_mutex_start_proxy_lock() - Start lock acquisition for another task
+- * @lock:             the rt_mutex to take
+- * @waiter:           the pre-initialized rt_mutex_waiter
+- * @task:             the task to prepare
+- *
+- * Returns:
+- *  0 - task blocked on lock
+- *  1 - acquired the lock for task, caller should wake it up
+- * <0 - error
+- *
+- * Special API call for FUTEX_REQUEUE_PI support.
+- */
+-int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
++int __rt_mutex_start_proxy_lock(struct rt_mutex *lock,
+                             struct rt_mutex_waiter *waiter,
+                             struct task_struct *task)
+ {
+       int ret;
+-      raw_spin_lock_irq(&lock->wait_lock);
+-
+-      if (try_to_take_rt_mutex(lock, task, NULL)) {
+-              raw_spin_unlock_irq(&lock->wait_lock);
++      if (try_to_take_rt_mutex(lock, task, NULL))
+               return 1;
+-      }
+       /* We enforce deadlock detection for futexes */
+       ret = task_blocks_on_rt_mutex(lock, waiter, task,
+@@ -1702,12 +1685,36 @@ int rt_mutex_start_proxy_lock(struct rt_
+       if (unlikely(ret))
+               remove_waiter(lock, waiter);
+-      raw_spin_unlock_irq(&lock->wait_lock);
+-
+       debug_rt_mutex_print_deadlock(waiter);
+       return ret;
+ }
++
++/**
++ * rt_mutex_start_proxy_lock() - Start lock acquisition for another task
++ * @lock:             the rt_mutex to take
++ * @waiter:           the pre-initialized rt_mutex_waiter
++ * @task:             the task to prepare
++ *
++ * Returns:
++ *  0 - task blocked on lock
++ *  1 - acquired the lock for task, caller should wake it up
++ * <0 - error
++ *
++ * Special API call for FUTEX_REQUEUE_PI support.
++ */
++int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
++                            struct rt_mutex_waiter *waiter,
++                            struct task_struct *task)
++{
++      int ret;
++
++      raw_spin_lock_irq(&lock->wait_lock);
++      ret = __rt_mutex_start_proxy_lock(lock, waiter, task);
++      raw_spin_unlock_irq(&lock->wait_lock);
++
++      return ret;
++}
+ /**
+  * rt_mutex_next_owner - return the next owner of the lock
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -104,6 +104,9 @@ extern void rt_mutex_init_proxy_locked(s
+ extern void rt_mutex_proxy_unlock(struct rt_mutex *lock,
+                                 struct task_struct *proxy_owner);
+ extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter);
++extern int __rt_mutex_start_proxy_lock(struct rt_mutex *lock,
++                                   struct rt_mutex_waiter *waiter,
++                                   struct task_struct *task);
+ extern int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
+                                    struct rt_mutex_waiter *waiter,
+                                    struct task_struct *task);
diff --git a/patches/features/all/rt/ARM-enable-irq-in-translation-section-permission-fau.patch b/patches/features/all/rt/ARM-enable-irq-in-translation-section-permission-fau.patch
new file mode 100644 (file)
index 0000000..8731f1d
--- /dev/null
@@ -0,0 +1,86 @@
+From: "Yadi.hu" <yadi.hu@windriver.com>
+Date: Wed, 10 Dec 2014 10:32:09 +0800
+Subject: ARM: enable irq in translation/section permission fault handlers
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Probably happens on all ARM, with
+CONFIG_PREEMPT_RT_FULL
+CONFIG_DEBUG_ATOMIC_SLEEP
+
+This simple program....
+
+int main() {
+   *((char*)0xc0001000) = 0;
+};
+
+[ 512.742724] BUG: sleeping function called from invalid context at kernel/rtmutex.c:658
+[ 512.743000] in_atomic(): 0, irqs_disabled(): 128, pid: 994, name: a
+[ 512.743217] INFO: lockdep is turned off.
+[ 512.743360] irq event stamp: 0
+[ 512.743482] hardirqs last enabled at (0): [< (null)>] (null)
+[ 512.743714] hardirqs last disabled at (0): [<c0426370>] copy_process+0x3b0/0x11c0
+[ 512.744013] softirqs last enabled at (0): [<c0426370>] copy_process+0x3b0/0x11c0
+[ 512.744303] softirqs last disabled at (0): [< (null)>] (null)
+[ 512.744631] [<c041872c>] (unwind_backtrace+0x0/0x104)
+[ 512.745001] [<c09af0c4>] (dump_stack+0x20/0x24)
+[ 512.745355] [<c0462490>] (__might_sleep+0x1dc/0x1e0)
+[ 512.745717] [<c09b6770>] (rt_spin_lock+0x34/0x6c)
+[ 512.746073] [<c0441bf0>] (do_force_sig_info+0x34/0xf0)
+[ 512.746457] [<c0442668>] (force_sig_info+0x18/0x1c)
+[ 512.746829] [<c041d880>] (__do_user_fault+0x9c/0xd8)
+[ 512.747185] [<c041d938>] (do_bad_area+0x7c/0x94)
+[ 512.747536] [<c041d990>] (do_sect_fault+0x40/0x48)
+[ 512.747898] [<c040841c>] (do_DataAbort+0x40/0xa0)
+[ 512.748181] Exception stack(0xecaa1fb0 to 0xecaa1ff8)
+
+Oxc0000000 belongs to kernel address space, user task can not be
+allowed to access it. For above condition, correct result is that
+test case should receive a “segment fault” and exits but not stacks.
+
+the root cause is commit 02fe2845d6a8 ("avoid enabling interrupts in
+prefetch/data abort handlers"),it deletes irq enable block in Data
+abort assemble code and move them into page/breakpiont/alignment fault
+handlers instead. But author does not enable irq in translation/section
+permission fault handlers. ARM disables irq when it enters exception/
+interrupt mode, if kernel doesn't enable irq, it would be still disabled
+during translation/section permission fault.
+
+We see the above splat because do_force_sig_info is still called with
+IRQs off, and that code eventually does a:
+
+        spin_lock_irqsave(&t->sighand->siglock, flags);
+
+As this is architecture independent code, and we've not seen any other
+need for other arch to have the siglock converted to raw lock, we can
+conclude that we should enable irq for ARM translation/section
+permission exception.
+
+
+Signed-off-by: Yadi.hu <yadi.hu@windriver.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/arm/mm/fault.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/arch/arm/mm/fault.c
++++ b/arch/arm/mm/fault.c
+@@ -430,6 +430,9 @@ do_translation_fault(unsigned long addr,
+       if (addr < TASK_SIZE)
+               return do_page_fault(addr, fsr, regs);
++      if (interrupts_enabled(regs))
++              local_irq_enable();
++
+       if (user_mode(regs))
+               goto bad_area;
+@@ -497,6 +500,9 @@ do_translation_fault(unsigned long addr,
+ static int
+ do_sect_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
+ {
++      if (interrupts_enabled(regs))
++              local_irq_enable();
++
+       do_bad_area(addr, fsr, regs);
+       return 0;
+ }
diff --git a/patches/features/all/rt/HACK-printk-drop-the-logbuf_lock-more-often.patch b/patches/features/all/rt/HACK-printk-drop-the-logbuf_lock-more-often.patch
new file mode 100644 (file)
index 0000000..ac90ae3
--- /dev/null
@@ -0,0 +1,76 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 21 Mar 2013 19:01:05 +0100
+Subject: printk: Drop the logbuf_lock more often
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The lock is hold with irgs off. The latency drops 500us+ on my arm bugs
+with a "full" buffer after executing "dmesg" on the shell.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/printk/printk.c |   26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -1396,6 +1396,7 @@ static int syslog_print_all(char __user
+ {
+       char *text;
+       int len = 0;
++      int attempts = 0;
+       text = kmalloc(LOG_LINE_MAX + PREFIX_MAX, GFP_KERNEL);
+       if (!text)
+@@ -1407,6 +1408,14 @@ static int syslog_print_all(char __user
+               u64 seq;
+               u32 idx;
+               enum log_flags prev;
++              int num_msg;
++try_again:
++              attempts++;
++              if (attempts > 10) {
++                      len = -EBUSY;
++                      goto out;
++              }
++              num_msg = 0;
+               /*
+                * Find first record that fits, including all following records,
+@@ -1422,6 +1431,14 @@ static int syslog_print_all(char __user
+                       prev = msg->flags;
+                       idx = log_next(idx);
+                       seq++;
++                      num_msg++;
++                      if (num_msg > 5) {
++                              num_msg = 0;
++                              raw_spin_unlock_irq(&logbuf_lock);
++                              raw_spin_lock_irq(&logbuf_lock);
++                              if (clear_seq < log_first_seq)
++                                      goto try_again;
++                      }
+               }
+               /* move first record forward until length fits into the buffer */
+@@ -1435,6 +1452,14 @@ static int syslog_print_all(char __user
+                       prev = msg->flags;
+                       idx = log_next(idx);
+                       seq++;
++                      num_msg++;
++                      if (num_msg > 5) {
++                              num_msg = 0;
++                              raw_spin_unlock_irq(&logbuf_lock);
++                              raw_spin_lock_irq(&logbuf_lock);
++                              if (clear_seq < log_first_seq)
++                                      goto try_again;
++                      }
+               }
+               /* last message fitting into this dump */
+@@ -1475,6 +1500,7 @@ static int syslog_print_all(char __user
+               clear_seq = log_next_seq;
+               clear_idx = log_next_idx;
+       }
++out:
+       raw_spin_unlock_irq(&logbuf_lock);
+       kfree(text);
diff --git a/patches/features/all/rt/KVM-arm-arm64-downgrade-preempt_disable-d-region-to-.patch b/patches/features/all/rt/KVM-arm-arm64-downgrade-preempt_disable-d-region-to-.patch
new file mode 100644 (file)
index 0000000..8fff88f
--- /dev/null
@@ -0,0 +1,52 @@
+From: Josh Cartwright <joshc@ni.com>
+Date: Thu, 11 Feb 2016 11:54:01 -0600
+Subject: KVM: arm/arm64: downgrade preempt_disable()d region to migrate_disable()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+kvm_arch_vcpu_ioctl_run() disables the use of preemption when updating
+the vgic and timer states to prevent the calling task from migrating to
+another CPU.  It does so to prevent the task from writing to the
+incorrect per-CPU GIC distributor registers.
+
+On -rt kernels, it's possible to maintain the same guarantee with the
+use of migrate_{disable,enable}(), with the added benefit that the
+migrate-disabled region is preemptible.  Update
+kvm_arch_vcpu_ioctl_run() to do so.
+
+Cc: Christoffer Dall <christoffer.dall@linaro.org>
+Reported-by: Manish Jaggi <Manish.Jaggi@caviumnetworks.com>
+Signed-off-by: Josh Cartwright <joshc@ni.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/arm/kvm/arm.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/arch/arm/kvm/arm.c
++++ b/arch/arm/kvm/arm.c
+@@ -619,7 +619,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_v
+                * involves poking the GIC, which must be done in a
+                * non-preemptible context.
+                */
+-              preempt_disable();
++              migrate_disable();
+               kvm_pmu_flush_hwstate(vcpu);
+               kvm_timer_flush_hwstate(vcpu);
+               kvm_vgic_flush_hwstate(vcpu);
+@@ -640,7 +640,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_v
+                       kvm_pmu_sync_hwstate(vcpu);
+                       kvm_timer_sync_hwstate(vcpu);
+                       kvm_vgic_sync_hwstate(vcpu);
+-                      preempt_enable();
++                      migrate_enable();
+                       continue;
+               }
+@@ -696,7 +696,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_v
+               kvm_vgic_sync_hwstate(vcpu);
+-              preempt_enable();
++              migrate_enable();
+               ret = handle_exit(vcpu, run, ret);
+       }
diff --git a/patches/features/all/rt/KVM-lapic-mark-LAPIC-timer-handler-as-irqsafe.patch b/patches/features/all/rt/KVM-lapic-mark-LAPIC-timer-handler-as-irqsafe.patch
new file mode 100644 (file)
index 0000000..c350247
--- /dev/null
@@ -0,0 +1,26 @@
+From: Marcelo Tosatti <mtosatti@redhat.com>
+Date: Wed, 8 Apr 2015 20:33:25 -0300
+Subject: KVM: lapic: mark LAPIC timer handler as irqsafe
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Since lapic timer handler only wakes up a simple waitqueue,
+it can be executed from hardirq context.
+
+Reduces average cyclictest latency by 3us.
+
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/x86/kvm/lapic.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/x86/kvm/lapic.c
++++ b/arch/x86/kvm/lapic.c
+@@ -1939,6 +1939,7 @@ int kvm_create_lapic(struct kvm_vcpu *vc
+       hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC,
+                    HRTIMER_MODE_ABS_PINNED);
+       apic->lapic_timer.timer.function = apic_timer_fn;
++      apic->lapic_timer.timer.irqsafe = 1;
+       /*
+        * APIC is created enabled. This will prevent kvm_lapic_set_base from
diff --git a/patches/features/all/rt/NFSv4-replace-seqcount_t-with-a-seqlock_t.patch b/patches/features/all/rt/NFSv4-replace-seqcount_t-with-a-seqlock_t.patch
new file mode 100644 (file)
index 0000000..4fbc69e
--- /dev/null
@@ -0,0 +1,128 @@
+Date:   Fri, 28 Oct 2016 23:05:11 +0200
+From:   Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+To:     Trond Myklebust <trond.myklebust@primarydata.com>
+Cc:     Anna Schumaker <anna.schumaker@netapp.com>,
+        linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
+        tglx@linutronix.de
+Subject: NFSv4: replace seqcount_t with a seqlock_t
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The raw_write_seqcount_begin() in nfs4_reclaim_open_state() bugs me
+because it maps to preempt_disable() in -RT which I can't have at this
+point. So I took a look at the code.
+It the lockdep part was removed in commit abbec2da13f0 ("NFS: Use
+raw_write_seqcount_begin/end int nfs4_reclaim_open_state") because
+lockdep complained. The whole seqcount thing was introduced in commit
+c137afabe330 ("NFSv4: Allow the state manager to mark an open_owner as
+being recovered").
+The recovery threads runs only once.
+write_seqlock() does not work on !RT because it disables preemption and it the
+writer side is preemptible (has to remain so despite the fact that it will
+block readers).
+
+Reported-by: kernel test robot <xiaolong.ye@intel.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ fs/nfs/delegation.c |    4 ++--
+ fs/nfs/nfs4_fs.h    |    2 +-
+ fs/nfs/nfs4proc.c   |    4 ++--
+ fs/nfs/nfs4state.c  |   22 ++++++++++++++++------
+ 4 files changed, 21 insertions(+), 11 deletions(-)
+
+--- a/fs/nfs/delegation.c
++++ b/fs/nfs/delegation.c
+@@ -150,11 +150,11 @@ static int nfs_delegation_claim_opens(st
+               sp = state->owner;
+               /* Block nfs4_proc_unlck */
+               mutex_lock(&sp->so_delegreturn_mutex);
+-              seq = raw_seqcount_begin(&sp->so_reclaim_seqcount);
++              seq = read_seqbegin(&sp->so_reclaim_seqlock);
+               err = nfs4_open_delegation_recall(ctx, state, stateid, type);
+               if (!err)
+                       err = nfs_delegation_claim_locks(ctx, state, stateid);
+-              if (!err && read_seqcount_retry(&sp->so_reclaim_seqcount, seq))
++              if (!err && read_seqretry(&sp->so_reclaim_seqlock, seq))
+                       err = -EAGAIN;
+               mutex_unlock(&sp->so_delegreturn_mutex);
+               put_nfs_open_context(ctx);
+--- a/fs/nfs/nfs4_fs.h
++++ b/fs/nfs/nfs4_fs.h
+@@ -111,7 +111,7 @@ struct nfs4_state_owner {
+       unsigned long        so_flags;
+       struct list_head     so_states;
+       struct nfs_seqid_counter so_seqid;
+-      seqcount_t           so_reclaim_seqcount;
++      seqlock_t            so_reclaim_seqlock;
+       struct mutex         so_delegreturn_mutex;
+ };
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -2698,7 +2698,7 @@ static int _nfs4_open_and_get_state(stru
+       unsigned int seq;
+       int ret;
+-      seq = raw_seqcount_begin(&sp->so_reclaim_seqcount);
++      seq = raw_seqcount_begin(&sp->so_reclaim_seqlock.seqcount);
+       ret = _nfs4_proc_open(opendata);
+       if (ret != 0)
+@@ -2736,7 +2736,7 @@ static int _nfs4_open_and_get_state(stru
+       if (d_inode(dentry) == state->inode) {
+               nfs_inode_attach_open_context(ctx);
+-              if (read_seqcount_retry(&sp->so_reclaim_seqcount, seq))
++              if (read_seqretry(&sp->so_reclaim_seqlock, seq))
+                       nfs4_schedule_stateid_recovery(server, state);
+       }
+ out:
+--- a/fs/nfs/nfs4state.c
++++ b/fs/nfs/nfs4state.c
+@@ -488,7 +488,7 @@ nfs4_alloc_state_owner(struct nfs_server
+       nfs4_init_seqid_counter(&sp->so_seqid);
+       atomic_set(&sp->so_count, 1);
+       INIT_LIST_HEAD(&sp->so_lru);
+-      seqcount_init(&sp->so_reclaim_seqcount);
++      seqlock_init(&sp->so_reclaim_seqlock);
+       mutex_init(&sp->so_delegreturn_mutex);
+       return sp;
+ }
+@@ -1497,8 +1497,12 @@ static int nfs4_reclaim_open_state(struc
+        * recovering after a network partition or a reboot from a
+        * server that doesn't support a grace period.
+        */
++#ifdef CONFIG_PREEMPT_RT_FULL
++      write_seqlock(&sp->so_reclaim_seqlock);
++#else
++      write_seqcount_begin(&sp->so_reclaim_seqlock.seqcount);
++#endif
+       spin_lock(&sp->so_lock);
+-      raw_write_seqcount_begin(&sp->so_reclaim_seqcount);
+ restart:
+       list_for_each_entry(state, &sp->so_states, open_states) {
+               if (!test_and_clear_bit(ops->state_flag_bit, &state->flags))
+@@ -1567,14 +1571,20 @@ static int nfs4_reclaim_open_state(struc
+               spin_lock(&sp->so_lock);
+               goto restart;
+       }
+-      raw_write_seqcount_end(&sp->so_reclaim_seqcount);
+       spin_unlock(&sp->so_lock);
++#ifdef CONFIG_PREEMPT_RT_FULL
++      write_sequnlock(&sp->so_reclaim_seqlock);
++#else
++      write_seqcount_end(&sp->so_reclaim_seqlock.seqcount);
++#endif
+       return 0;
+ out_err:
+       nfs4_put_open_state(state);
+-      spin_lock(&sp->so_lock);
+-      raw_write_seqcount_end(&sp->so_reclaim_seqcount);
+-      spin_unlock(&sp->so_lock);
++#ifdef CONFIG_PREEMPT_RT_FULL
++      write_sequnlock(&sp->so_reclaim_seqlock);
++#else
++      write_seqcount_end(&sp->so_reclaim_seqlock.seqcount);
++#endif
+       return status;
+ }
diff --git a/patches/features/all/rt/acpi-rt-Convert-acpi_gbl_hardware-lock-back-to-a-raw.patch b/patches/features/all/rt/acpi-rt-Convert-acpi_gbl_hardware-lock-back-to-a-raw.patch
new file mode 100644 (file)
index 0000000..d2b5111
--- /dev/null
@@ -0,0 +1,174 @@
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Wed, 13 Feb 2013 09:26:05 -0500
+Subject: acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+We hit the following bug with 3.6-rt:
+
+[    5.898990] BUG: scheduling while atomic: swapper/3/0/0x00000002
+[    5.898991] no locks held by swapper/3/0.
+[    5.898993] Modules linked in:
+[    5.898996] Pid: 0, comm: swapper/3 Not tainted 3.6.11-rt28.19.el6rt.x86_64.debug #1
+[    5.898997] Call Trace:
+[    5.899011]  [<ffffffff810804e7>] __schedule_bug+0x67/0x90
+[    5.899028]  [<ffffffff81577923>] __schedule+0x793/0x7a0
+[    5.899032]  [<ffffffff810b4e40>] ? debug_rt_mutex_print_deadlock+0x50/0x200
+[    5.899034]  [<ffffffff81577b89>] schedule+0x29/0x70
+[    5.899036] BUG: scheduling while atomic: swapper/7/0/0x00000002
+[    5.899037] no locks held by swapper/7/0.
+[    5.899039]  [<ffffffff81578525>] rt_spin_lock_slowlock+0xe5/0x2f0
+[    5.899040] Modules linked in:
+[    5.899041]
+[    5.899045]  [<ffffffff81579a58>] ? _raw_spin_unlock_irqrestore+0x38/0x90
+[    5.899046] Pid: 0, comm: swapper/7 Not tainted 3.6.11-rt28.19.el6rt.x86_64.debug #1
+[    5.899047] Call Trace:
+[    5.899049]  [<ffffffff81578bc6>] rt_spin_lock+0x16/0x40
+[    5.899052]  [<ffffffff810804e7>] __schedule_bug+0x67/0x90
+[    5.899054]  [<ffffffff8157d3f0>] ? notifier_call_chain+0x80/0x80
+[    5.899056]  [<ffffffff81577923>] __schedule+0x793/0x7a0
+[    5.899059]  [<ffffffff812f2034>] acpi_os_acquire_lock+0x1f/0x23
+[    5.899062]  [<ffffffff810b4e40>] ? debug_rt_mutex_print_deadlock+0x50/0x200
+[    5.899068]  [<ffffffff8130be64>] acpi_write_bit_register+0x33/0xb0
+[    5.899071]  [<ffffffff81577b89>] schedule+0x29/0x70
+[    5.899072]  [<ffffffff8130be13>] ? acpi_read_bit_register+0x33/0x51
+[    5.899074]  [<ffffffff81578525>] rt_spin_lock_slowlock+0xe5/0x2f0
+[    5.899077]  [<ffffffff8131d1fc>] acpi_idle_enter_bm+0x8a/0x28e
+[    5.899079]  [<ffffffff81579a58>] ? _raw_spin_unlock_irqrestore+0x38/0x90
+[    5.899081]  [<ffffffff8107e5da>] ? this_cpu_load+0x1a/0x30
+[    5.899083]  [<ffffffff81578bc6>] rt_spin_lock+0x16/0x40
+[    5.899087]  [<ffffffff8144c759>] cpuidle_enter+0x19/0x20
+[    5.899088]  [<ffffffff8157d3f0>] ? notifier_call_chain+0x80/0x80
+[    5.899090]  [<ffffffff8144c777>] cpuidle_enter_state+0x17/0x50
+[    5.899092]  [<ffffffff812f2034>] acpi_os_acquire_lock+0x1f/0x23
+[    5.899094]  [<ffffffff8144d1a1>] cpuidle899101]  [<ffffffff8130be13>] ?
+
+As the acpi code disables interrupts in acpi_idle_enter_bm, and calls
+code that grabs the acpi lock, it causes issues as the lock is currently
+in RT a sleeping lock.
+
+The lock was converted from a raw to a sleeping lock due to some
+previous issues, and tests that showed it didn't seem to matter.
+Unfortunately, it did matter for one of our boxes.
+
+This patch converts the lock back to a raw lock. I've run this code on a
+few of my own machines, one being my laptop that uses the acpi quite
+extensively. I've been able to suspend and resume without issues.
+
+[ tglx: Made the change exclusive for acpi_gbl_hardware_lock ]
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Cc: John Kacur <jkacur@gmail.com>
+Cc: Clark Williams <clark@redhat.com>
+Link: http://lkml.kernel.org/r/1360765565.23152.5.camel@gandalf.local.home
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/acpi/acpica/acglobal.h  |    2 +-
+ drivers/acpi/acpica/hwregs.c    |    4 ++--
+ drivers/acpi/acpica/hwxface.c   |    4 ++--
+ drivers/acpi/acpica/utmutex.c   |    4 ++--
+ include/acpi/platform/aclinux.h |   15 +++++++++++++++
+ 5 files changed, 22 insertions(+), 7 deletions(-)
+
+--- a/drivers/acpi/acpica/acglobal.h
++++ b/drivers/acpi/acpica/acglobal.h
+@@ -116,7 +116,7 @@ ACPI_GLOBAL(u8, acpi_gbl_global_lock_pen
+  * interrupt level
+  */
+ ACPI_GLOBAL(acpi_spinlock, acpi_gbl_gpe_lock);        /* For GPE data structs and registers */
+-ACPI_GLOBAL(acpi_spinlock, acpi_gbl_hardware_lock);   /* For ACPI H/W except GPE registers */
++ACPI_GLOBAL(acpi_raw_spinlock, acpi_gbl_hardware_lock);       /* For ACPI H/W except GPE registers */
+ ACPI_GLOBAL(acpi_spinlock, acpi_gbl_reference_count_lock);
+ /* Mutex for _OSI support */
+--- a/drivers/acpi/acpica/hwregs.c
++++ b/drivers/acpi/acpica/hwregs.c
+@@ -363,14 +363,14 @@ acpi_status acpi_hw_clear_acpi_status(vo
+                         ACPI_BITMASK_ALL_FIXED_STATUS,
+                         ACPI_FORMAT_UINT64(acpi_gbl_xpm1a_status.address)));
+-      lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
++      raw_spin_lock_irqsave(acpi_gbl_hardware_lock, lock_flags);
+       /* Clear the fixed events in PM1 A/B */
+       status = acpi_hw_register_write(ACPI_REGISTER_PM1_STATUS,
+                                       ACPI_BITMASK_ALL_FIXED_STATUS);
+-      acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
++      raw_spin_unlock_irqrestore(acpi_gbl_hardware_lock, lock_flags);
+       if (ACPI_FAILURE(status)) {
+               goto exit;
+--- a/drivers/acpi/acpica/hwxface.c
++++ b/drivers/acpi/acpica/hwxface.c
+@@ -373,7 +373,7 @@ acpi_status acpi_write_bit_register(u32
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
+       }
+-      lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock);
++      raw_spin_lock_irqsave(acpi_gbl_hardware_lock, lock_flags);
+       /*
+        * At this point, we know that the parent register is one of the
+@@ -434,7 +434,7 @@ acpi_status acpi_write_bit_register(u32
+ unlock_and_exit:
+-      acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags);
++      raw_spin_unlock_irqrestore(acpi_gbl_hardware_lock, lock_flags);
+       return_ACPI_STATUS(status);
+ }
+--- a/drivers/acpi/acpica/utmutex.c
++++ b/drivers/acpi/acpica/utmutex.c
+@@ -88,7 +88,7 @@ acpi_status acpi_ut_mutex_initialize(voi
+               return_ACPI_STATUS (status);
+       }
+-      status = acpi_os_create_lock (&acpi_gbl_hardware_lock);
++      status = acpi_os_create_raw_lock (&acpi_gbl_hardware_lock);
+       if (ACPI_FAILURE (status)) {
+               return_ACPI_STATUS (status);
+       }
+@@ -145,7 +145,7 @@ void acpi_ut_mutex_terminate(void)
+       /* Delete the spinlocks */
+       acpi_os_delete_lock(acpi_gbl_gpe_lock);
+-      acpi_os_delete_lock(acpi_gbl_hardware_lock);
++      acpi_os_delete_raw_lock(acpi_gbl_hardware_lock);
+       acpi_os_delete_lock(acpi_gbl_reference_count_lock);
+       /* Delete the reader/writer lock */
+--- a/include/acpi/platform/aclinux.h
++++ b/include/acpi/platform/aclinux.h
+@@ -133,6 +133,7 @@
+ #define acpi_cache_t                        struct kmem_cache
+ #define acpi_spinlock                       spinlock_t *
++#define acpi_raw_spinlock             raw_spinlock_t *
+ #define acpi_cpu_flags                      unsigned long
+ /* Use native linux version of acpi_os_allocate_zeroed */
+@@ -151,6 +152,20 @@
+ #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id
+ #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock
++#define acpi_os_create_raw_lock(__handle)                     \
++({                                                            \
++       raw_spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock));   \
++                                                              \
++       if (lock) {                                            \
++              *(__handle) = lock;                             \
++              raw_spin_lock_init(*(__handle));                \
++       }                                                      \
++       lock ? AE_OK : AE_NO_MEMORY;                           \
++ })
++
++#define acpi_os_delete_raw_lock(__handle)     kfree(__handle)
++
++
+ /*
+  * OSL interfaces used by debugger/disassembler
+  */
diff --git a/patches/features/all/rt/arch-arm64-Add-lazy-preempt-support.patch b/patches/features/all/rt/arch-arm64-Add-lazy-preempt-support.patch
new file mode 100644 (file)
index 0000000..497b218
--- /dev/null
@@ -0,0 +1,119 @@
+From: Anders Roxell <anders.roxell@linaro.org>
+Date: Thu, 14 May 2015 17:52:17 +0200
+Subject: arch/arm64: Add lazy preempt support
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+arm64 is missing support for PREEMPT_RT. The main feature which is
+lacking is support for lazy preemption. The arch-specific entry code,
+thread information structure definitions, and associated data tables
+have to be extended to provide this support. Then the Kconfig file has
+to be extended to indicate the support is available, and also to
+indicate that support for full RT preemption is now available.
+
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+---
+ arch/arm64/Kconfig                   |    1 +
+ arch/arm64/include/asm/thread_info.h |    7 ++++++-
+ arch/arm64/kernel/asm-offsets.c      |    1 +
+ arch/arm64/kernel/entry.S            |   12 +++++++++---
+ arch/arm64/kernel/signal.c           |    2 +-
+ 5 files changed, 18 insertions(+), 5 deletions(-)
+
+--- a/arch/arm64/Kconfig
++++ b/arch/arm64/Kconfig
+@@ -91,6 +91,7 @@ config ARM64
+       select HAVE_PERF_EVENTS
+       select HAVE_PERF_REGS
+       select HAVE_PERF_USER_STACK_DUMP
++      select HAVE_PREEMPT_LAZY
+       select HAVE_REGS_AND_STACK_ACCESS_API
+       select HAVE_RCU_TABLE_FREE
+       select HAVE_SYSCALL_TRACEPOINTS
+--- a/arch/arm64/include/asm/thread_info.h
++++ b/arch/arm64/include/asm/thread_info.h
+@@ -49,6 +49,7 @@ struct thread_info {
+       mm_segment_t            addr_limit;     /* address limit */
+       struct task_struct      *task;          /* main task structure */
+       int                     preempt_count;  /* 0 => preemptable, <0 => bug */
++      int                     preempt_lazy_count; /* 0 => preemptable, <0 => bug */
+       int                     cpu;            /* cpu */
+ };
+@@ -112,6 +113,7 @@ static inline struct thread_info *curren
+ #define TIF_NEED_RESCHED      1
+ #define TIF_NOTIFY_RESUME     2       /* callback before returning to user */
+ #define TIF_FOREIGN_FPSTATE   3       /* CPU's FP state is not current's */
++#define TIF_NEED_RESCHED_LAZY 4
+ #define TIF_NOHZ              7
+ #define TIF_SYSCALL_TRACE     8
+ #define TIF_SYSCALL_AUDIT     9
+@@ -127,6 +129,7 @@ static inline struct thread_info *curren
+ #define _TIF_NEED_RESCHED     (1 << TIF_NEED_RESCHED)
+ #define _TIF_NOTIFY_RESUME    (1 << TIF_NOTIFY_RESUME)
+ #define _TIF_FOREIGN_FPSTATE  (1 << TIF_FOREIGN_FPSTATE)
++#define _TIF_NEED_RESCHED_LAZY        (1 << TIF_NEED_RESCHED_LAZY)
+ #define _TIF_NOHZ             (1 << TIF_NOHZ)
+ #define _TIF_SYSCALL_TRACE    (1 << TIF_SYSCALL_TRACE)
+ #define _TIF_SYSCALL_AUDIT    (1 << TIF_SYSCALL_AUDIT)
+@@ -135,7 +138,9 @@ static inline struct thread_info *curren
+ #define _TIF_32BIT            (1 << TIF_32BIT)
+ #define _TIF_WORK_MASK                (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
+-                               _TIF_NOTIFY_RESUME | _TIF_FOREIGN_FPSTATE)
++                               _TIF_NOTIFY_RESUME | _TIF_FOREIGN_FPSTATE | \
++                               _TIF_NEED_RESCHED_LAZY)
++#define _TIF_NEED_RESCHED_MASK        (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)
+ #define _TIF_SYSCALL_WORK     (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \
+                                _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP | \
+--- a/arch/arm64/kernel/asm-offsets.c
++++ b/arch/arm64/kernel/asm-offsets.c
+@@ -38,6 +38,7 @@ int main(void)
+   BLANK();
+   DEFINE(TI_FLAGS,            offsetof(struct thread_info, flags));
+   DEFINE(TI_PREEMPT,          offsetof(struct thread_info, preempt_count));
++  DEFINE(TI_PREEMPT_LAZY,     offsetof(struct thread_info, preempt_lazy_count));
+   DEFINE(TI_ADDR_LIMIT,               offsetof(struct thread_info, addr_limit));
+   DEFINE(TI_TASK,             offsetof(struct thread_info, task));
+   DEFINE(TI_CPU,              offsetof(struct thread_info, cpu));
+--- a/arch/arm64/kernel/entry.S
++++ b/arch/arm64/kernel/entry.S
+@@ -428,11 +428,16 @@ ENDPROC(el1_sync)
+ #ifdef CONFIG_PREEMPT
+       ldr     w24, [tsk, #TI_PREEMPT]         // get preempt count
+-      cbnz    w24, 1f                         // preempt count != 0
++      cbnz    w24, 2f                         // preempt count != 0
+       ldr     x0, [tsk, #TI_FLAGS]            // get flags
+-      tbz     x0, #TIF_NEED_RESCHED, 1f       // needs rescheduling?
+-      bl      el1_preempt
++      tbnz    x0, #TIF_NEED_RESCHED, 1f       // needs rescheduling?
++
++      ldr     w24, [tsk, #TI_PREEMPT_LAZY]    // get preempt lazy count
++      cbnz    w24, 2f                         // preempt lazy count != 0
++      tbz     x0, #TIF_NEED_RESCHED_LAZY, 2f  // needs rescheduling?
+ 1:
++      bl      el1_preempt
++2:
+ #endif
+ #ifdef CONFIG_TRACE_IRQFLAGS
+       bl      trace_hardirqs_on
+@@ -446,6 +451,7 @@ ENDPROC(el1_irq)
+ 1:    bl      preempt_schedule_irq            // irq en/disable is done inside
+       ldr     x0, [tsk, #TI_FLAGS]            // get new tasks TI_FLAGS
+       tbnz    x0, #TIF_NEED_RESCHED, 1b       // needs rescheduling?
++      tbnz    x0, #TIF_NEED_RESCHED_LAZY, 1b  // needs rescheduling?
+       ret     x24
+ #endif
+--- a/arch/arm64/kernel/signal.c
++++ b/arch/arm64/kernel/signal.c
+@@ -409,7 +409,7 @@ asmlinkage void do_notify_resume(struct
+        */
+       trace_hardirqs_off();
+       do {
+-              if (thread_flags & _TIF_NEED_RESCHED) {
++              if (thread_flags & _TIF_NEED_RESCHED_MASK) {
+                       schedule();
+               } else {
+                       local_irq_enable();
diff --git a/patches/features/all/rt/arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch b/patches/features/all/rt/arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch
new file mode 100644 (file)
index 0000000..33aecf1
--- /dev/null
@@ -0,0 +1,145 @@
+From: Benedikt Spranger <b.spranger@linutronix.de>
+Date: Sat, 6 Mar 2010 17:47:10 +0100
+Subject: ARM: AT91: PIT: Remove irq handler when clock event is unused
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Setup and remove the interrupt handler in clock event mode selection.
+This avoids calling the (shared) interrupt handler when the device is
+not used.
+
+Signed-off-by: Benedikt Spranger <b.spranger@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+[bigeasy: redo the patch with NR_IRQS_LEGACY which is probably required since
+commit 8fe82a55 ("ARM: at91: sparse irq support") which is included since v3.6.
+Patch based on what Sami Pietikäinen <Sami.Pietikainen@wapice.com> suggested].
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/clocksource/timer-atmel-pit.c |   18 +++++++++---------
+ drivers/clocksource/timer-atmel-st.c  |   34 ++++++++++++++++++++++------------
+ 2 files changed, 31 insertions(+), 21 deletions(-)
+
+--- a/drivers/clocksource/timer-atmel-pit.c
++++ b/drivers/clocksource/timer-atmel-pit.c
+@@ -96,15 +96,24 @@ static int pit_clkevt_shutdown(struct cl
+       /* disable irq, leaving the clocksource active */
+       pit_write(data->base, AT91_PIT_MR, (data->cycle - 1) | AT91_PIT_PITEN);
++      free_irq(data->irq, data);
+       return 0;
+ }
++static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id);
+ /*
+  * Clockevent device:  interrupts every 1/HZ (== pit_cycles * MCK/16)
+  */
+ static int pit_clkevt_set_periodic(struct clock_event_device *dev)
+ {
+       struct pit_data *data = clkevt_to_pit_data(dev);
++      int ret;
++
++      ret = request_irq(data->irq, at91sam926x_pit_interrupt,
++                        IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
++                        "at91_tick", data);
++      if (ret)
++              panic(pr_fmt("Unable to setup IRQ\n"));
+       /* update clocksource counter */
+       data->cnt += data->cycle * PIT_PICNT(pit_read(data->base, AT91_PIT_PIVR));
+@@ -230,15 +239,6 @@ static int __init at91sam926x_pit_dt_ini
+               return ret;
+       }
+-      /* Set up irq handler */
+-      ret = request_irq(data->irq, at91sam926x_pit_interrupt,
+-                        IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
+-                        "at91_tick", data);
+-      if (ret) {
+-              pr_err("Unable to setup IRQ\n");
+-              return ret;
+-      }
+-
+       /* Set up and register clockevents */
+       data->clkevt.name = "pit";
+       data->clkevt.features = CLOCK_EVT_FEAT_PERIODIC;
+--- a/drivers/clocksource/timer-atmel-st.c
++++ b/drivers/clocksource/timer-atmel-st.c
+@@ -115,18 +115,29 @@ static void clkdev32k_disable_and_flush_
+       last_crtr = read_CRTR();
+ }
++static int atmel_st_irq;
++
+ static int clkevt32k_shutdown(struct clock_event_device *evt)
+ {
+       clkdev32k_disable_and_flush_irq();
+       irqmask = 0;
+       regmap_write(regmap_st, AT91_ST_IER, irqmask);
++      free_irq(atmel_st_irq, regmap_st);
+       return 0;
+ }
+ static int clkevt32k_set_oneshot(struct clock_event_device *dev)
+ {
++      int ret;
++
+       clkdev32k_disable_and_flush_irq();
++      ret = request_irq(atmel_st_irq, at91rm9200_timer_interrupt,
++                        IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
++                        "at91_tick", regmap_st);
++      if (ret)
++              panic(pr_fmt("Unable to setup IRQ\n"));
++
+       /*
+        * ALM for oneshot irqs, set by next_event()
+        * before 32 seconds have passed.
+@@ -139,8 +150,16 @@ static int clkevt32k_set_oneshot(struct
+ static int clkevt32k_set_periodic(struct clock_event_device *dev)
+ {
++      int ret;
++
+       clkdev32k_disable_and_flush_irq();
++      ret = request_irq(atmel_st_irq, at91rm9200_timer_interrupt,
++                        IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
++                        "at91_tick", regmap_st);
++      if (ret)
++              panic(pr_fmt("Unable to setup IRQ\n"));
++
+       /* PIT for periodic irqs; fixed rate of 1/HZ */
+       irqmask = AT91_ST_PITS;
+       regmap_write(regmap_st, AT91_ST_PIMR, timer_latch);
+@@ -198,7 +217,7 @@ static int __init atmel_st_timer_init(st
+ {
+       struct clk *sclk;
+       unsigned int sclk_rate, val;
+-      int irq, ret;
++      int ret;
+       regmap_st = syscon_node_to_regmap(node);
+       if (IS_ERR(regmap_st)) {
+@@ -212,21 +231,12 @@ static int __init atmel_st_timer_init(st
+       regmap_read(regmap_st, AT91_ST_SR, &val);
+       /* Get the interrupts property */
+-      irq  = irq_of_parse_and_map(node, 0);
+-      if (!irq) {
++      atmel_st_irq  = irq_of_parse_and_map(node, 0);
++      if (!atmel_st_irq) {
+               pr_err("Unable to get IRQ from DT\n");
+               return -EINVAL;
+       }
+-      /* Make IRQs happen for the system timer */
+-      ret = request_irq(irq, at91rm9200_timer_interrupt,
+-                        IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
+-                        "at91_tick", regmap_st);
+-      if (ret) {
+-              pr_err("Unable to setup IRQ\n");
+-              return ret;
+-      }
+-
+       sclk = of_clk_get(node, 0);
+       if (IS_ERR(sclk)) {
+               pr_err("Unable to get slow clock\n");
diff --git a/patches/features/all/rt/arm-at91-tclib-default-to-tclib-timer-for-rt.patch b/patches/features/all/rt/arm-at91-tclib-default-to-tclib-timer-for-rt.patch
new file mode 100644 (file)
index 0000000..33fb342
--- /dev/null
@@ -0,0 +1,33 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 1 May 2010 18:29:35 +0200
+Subject: ARM: at91: tclib: Default to tclib timer for RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+RT is not too happy about the shared timer interrupt in AT91
+devices. Default to tclib timer for RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/misc/Kconfig |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -54,6 +54,7 @@ config AD525X_DPOT_SPI
+ config ATMEL_TCLIB
+       bool "Atmel AT32/AT91 Timer/Counter Library"
+       depends on (AVR32 || ARCH_AT91)
++      default y if PREEMPT_RT_FULL
+       help
+         Select this if you want a library to allocate the Timer/Counter
+         blocks found on many Atmel processors.  This facilitates using
+@@ -86,7 +87,7 @@ config ATMEL_TCB_CLKSRC_BLOCK
+ config ATMEL_TCB_CLKSRC_USE_SLOW_CLOCK
+       bool "TC Block use 32 KiHz clock"
+       depends on ATMEL_TCB_CLKSRC
+-      default y
++      default y if !PREEMPT_RT_FULL
+       help
+         Select this to use 32 KiHz base clock rate as TC block clock
+         source for clock events.
diff --git a/patches/features/all/rt/arm-convert-boot-lock-to-raw.patch b/patches/features/all/rt/arm-convert-boot-lock-to-raw.patch
new file mode 100644 (file)
index 0000000..5911e54
--- /dev/null
@@ -0,0 +1,408 @@
+From: Frank Rowand <frank.rowand@am.sony.com>
+Date: Mon, 19 Sep 2011 14:51:14 -0700
+Subject: arm: Convert arm boot_lock to raw
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The arm boot_lock is used by the secondary processor startup code.  The locking
+task is the idle thread, which has idle->sched_class == &idle_sched_class.
+idle_sched_class->enqueue_task == NULL, so if the idle task blocks on the
+lock, the attempt to wake it when the lock becomes available will fail:
+
+try_to_wake_up()
+   ...
+      activate_task()
+         enqueue_task()
+            p->sched_class->enqueue_task(rq, p, flags)
+
+Fix by converting boot_lock to a raw spin lock.
+
+Signed-off-by: Frank Rowand <frank.rowand@am.sony.com>
+Link: http://lkml.kernel.org/r/4E77B952.3010606@am.sony.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/arm/mach-exynos/platsmp.c    |   12 ++++++------
+ arch/arm/mach-hisi/platmcpm.c     |   22 +++++++++++-----------
+ arch/arm/mach-omap2/omap-smp.c    |   10 +++++-----
+ arch/arm/mach-prima2/platsmp.c    |   10 +++++-----
+ arch/arm/mach-qcom/platsmp.c      |   10 +++++-----
+ arch/arm/mach-spear/platsmp.c     |   10 +++++-----
+ arch/arm/mach-sti/platsmp.c       |   10 +++++-----
+ arch/arm/plat-versatile/platsmp.c |   10 +++++-----
+ 8 files changed, 47 insertions(+), 47 deletions(-)
+
+--- a/arch/arm/mach-exynos/platsmp.c
++++ b/arch/arm/mach-exynos/platsmp.c
+@@ -229,7 +229,7 @@ static void __iomem *scu_base_addr(void)
+       return (void __iomem *)(S5P_VA_SCU);
+ }
+-static DEFINE_SPINLOCK(boot_lock);
++static DEFINE_RAW_SPINLOCK(boot_lock);
+ static void exynos_secondary_init(unsigned int cpu)
+ {
+@@ -242,8 +242,8 @@ static void exynos_secondary_init(unsign
+       /*
+        * Synchronise with the boot thread.
+        */
+-      spin_lock(&boot_lock);
+-      spin_unlock(&boot_lock);
++      raw_spin_lock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+ }
+ int exynos_set_boot_addr(u32 core_id, unsigned long boot_addr)
+@@ -307,7 +307,7 @@ static int exynos_boot_secondary(unsigne
+        * Set synchronisation state between this boot processor
+        * and the secondary one
+        */
+-      spin_lock(&boot_lock);
++      raw_spin_lock(&boot_lock);
+       /*
+        * The secondary processor is waiting to be released from
+@@ -334,7 +334,7 @@ static int exynos_boot_secondary(unsigne
+               if (timeout == 0) {
+                       printk(KERN_ERR "cpu1 power enable failed");
+-                      spin_unlock(&boot_lock);
++                      raw_spin_unlock(&boot_lock);
+                       return -ETIMEDOUT;
+               }
+       }
+@@ -380,7 +380,7 @@ static int exynos_boot_secondary(unsigne
+        * calibrations, then wait for it to finish
+        */
+ fail:
+-      spin_unlock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+       return pen_release != -1 ? ret : 0;
+ }
+--- a/arch/arm/mach-hisi/platmcpm.c
++++ b/arch/arm/mach-hisi/platmcpm.c
+@@ -61,7 +61,7 @@
+ static void __iomem *sysctrl, *fabric;
+ static int hip04_cpu_table[HIP04_MAX_CLUSTERS][HIP04_MAX_CPUS_PER_CLUSTER];
+-static DEFINE_SPINLOCK(boot_lock);
++static DEFINE_RAW_SPINLOCK(boot_lock);
+ static u32 fabric_phys_addr;
+ /*
+  * [0]: bootwrapper physical address
+@@ -113,7 +113,7 @@ static int hip04_boot_secondary(unsigned
+       if (cluster >= HIP04_MAX_CLUSTERS || cpu >= HIP04_MAX_CPUS_PER_CLUSTER)
+               return -EINVAL;
+-      spin_lock_irq(&boot_lock);
++      raw_spin_lock_irq(&boot_lock);
+       if (hip04_cpu_table[cluster][cpu])
+               goto out;
+@@ -147,7 +147,7 @@ static int hip04_boot_secondary(unsigned
+ out:
+       hip04_cpu_table[cluster][cpu]++;
+-      spin_unlock_irq(&boot_lock);
++      raw_spin_unlock_irq(&boot_lock);
+       return 0;
+ }
+@@ -162,11 +162,11 @@ static void hip04_cpu_die(unsigned int l
+       cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
+       cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
+-      spin_lock(&boot_lock);
++      raw_spin_lock(&boot_lock);
+       hip04_cpu_table[cluster][cpu]--;
+       if (hip04_cpu_table[cluster][cpu] == 1) {
+               /* A power_up request went ahead of us. */
+-              spin_unlock(&boot_lock);
++              raw_spin_unlock(&boot_lock);
+               return;
+       } else if (hip04_cpu_table[cluster][cpu] > 1) {
+               pr_err("Cluster %d CPU%d boots multiple times\n", cluster, cpu);
+@@ -174,7 +174,7 @@ static void hip04_cpu_die(unsigned int l
+       }
+       last_man = hip04_cluster_is_down(cluster);
+-      spin_unlock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+       if (last_man) {
+               /* Since it's Cortex A15, disable L2 prefetching. */
+               asm volatile(
+@@ -203,7 +203,7 @@ static int hip04_cpu_kill(unsigned int l
+              cpu >= HIP04_MAX_CPUS_PER_CLUSTER);
+       count = TIMEOUT_MSEC / POLL_MSEC;
+-      spin_lock_irq(&boot_lock);
++      raw_spin_lock_irq(&boot_lock);
+       for (tries = 0; tries < count; tries++) {
+               if (hip04_cpu_table[cluster][cpu])
+                       goto err;
+@@ -211,10 +211,10 @@ static int hip04_cpu_kill(unsigned int l
+               data = readl_relaxed(sysctrl + SC_CPU_RESET_STATUS(cluster));
+               if (data & CORE_WFI_STATUS(cpu))
+                       break;
+-              spin_unlock_irq(&boot_lock);
++              raw_spin_unlock_irq(&boot_lock);
+               /* Wait for clean L2 when the whole cluster is down. */
+               msleep(POLL_MSEC);
+-              spin_lock_irq(&boot_lock);
++              raw_spin_lock_irq(&boot_lock);
+       }
+       if (tries >= count)
+               goto err;
+@@ -231,10 +231,10 @@ static int hip04_cpu_kill(unsigned int l
+               goto err;
+       if (hip04_cluster_is_down(cluster))
+               hip04_set_snoop_filter(cluster, 0);
+-      spin_unlock_irq(&boot_lock);
++      raw_spin_unlock_irq(&boot_lock);
+       return 1;
+ err:
+-      spin_unlock_irq(&boot_lock);
++      raw_spin_unlock_irq(&boot_lock);
+       return 0;
+ }
+ #endif
+--- a/arch/arm/mach-omap2/omap-smp.c
++++ b/arch/arm/mach-omap2/omap-smp.c
+@@ -64,7 +64,7 @@ static const struct omap_smp_config omap
+       .startup_addr = omap5_secondary_startup,
+ };
+-static DEFINE_SPINLOCK(boot_lock);
++static DEFINE_RAW_SPINLOCK(boot_lock);
+ void __iomem *omap4_get_scu_base(void)
+ {
+@@ -131,8 +131,8 @@ static void omap4_secondary_init(unsigne
+       /*
+        * Synchronise with the boot thread.
+        */
+-      spin_lock(&boot_lock);
+-      spin_unlock(&boot_lock);
++      raw_spin_lock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+ }
+ static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -146,7 +146,7 @@ static int omap4_boot_secondary(unsigned
+        * Set synchronisation state between this boot processor
+        * and the secondary one
+        */
+-      spin_lock(&boot_lock);
++      raw_spin_lock(&boot_lock);
+       /*
+        * Update the AuxCoreBoot0 with boot state for secondary core.
+@@ -223,7 +223,7 @@ static int omap4_boot_secondary(unsigned
+        * Now the secondary core is starting up let it run its
+        * calibrations, then wait for it to finish
+        */
+-      spin_unlock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+       return 0;
+ }
+--- a/arch/arm/mach-prima2/platsmp.c
++++ b/arch/arm/mach-prima2/platsmp.c
+@@ -22,7 +22,7 @@
+ static void __iomem *clk_base;
+-static DEFINE_SPINLOCK(boot_lock);
++static DEFINE_RAW_SPINLOCK(boot_lock);
+ static void sirfsoc_secondary_init(unsigned int cpu)
+ {
+@@ -36,8 +36,8 @@ static void sirfsoc_secondary_init(unsig
+       /*
+        * Synchronise with the boot thread.
+        */
+-      spin_lock(&boot_lock);
+-      spin_unlock(&boot_lock);
++      raw_spin_lock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+ }
+ static const struct of_device_id clk_ids[]  = {
+@@ -75,7 +75,7 @@ static int sirfsoc_boot_secondary(unsign
+       /* make sure write buffer is drained */
+       mb();
+-      spin_lock(&boot_lock);
++      raw_spin_lock(&boot_lock);
+       /*
+        * The secondary processor is waiting to be released from
+@@ -107,7 +107,7 @@ static int sirfsoc_boot_secondary(unsign
+        * now the secondary core is starting up let it run its
+        * calibrations, then wait for it to finish
+        */
+-      spin_unlock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+       return pen_release != -1 ? -ENOSYS : 0;
+ }
+--- a/arch/arm/mach-qcom/platsmp.c
++++ b/arch/arm/mach-qcom/platsmp.c
+@@ -46,7 +46,7 @@
+ extern void secondary_startup_arm(void);
+-static DEFINE_SPINLOCK(boot_lock);
++static DEFINE_RAW_SPINLOCK(boot_lock);
+ #ifdef CONFIG_HOTPLUG_CPU
+ static void qcom_cpu_die(unsigned int cpu)
+@@ -60,8 +60,8 @@ static void qcom_secondary_init(unsigned
+       /*
+        * Synchronise with the boot thread.
+        */
+-      spin_lock(&boot_lock);
+-      spin_unlock(&boot_lock);
++      raw_spin_lock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+ }
+ static int scss_release_secondary(unsigned int cpu)
+@@ -284,7 +284,7 @@ static int qcom_boot_secondary(unsigned
+        * set synchronisation state between this boot processor
+        * and the secondary one
+        */
+-      spin_lock(&boot_lock);
++      raw_spin_lock(&boot_lock);
+       /*
+        * Send the secondary CPU a soft interrupt, thereby causing
+@@ -297,7 +297,7 @@ static int qcom_boot_secondary(unsigned
+        * now the secondary core is starting up let it run its
+        * calibrations, then wait for it to finish
+        */
+-      spin_unlock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+       return ret;
+ }
+--- a/arch/arm/mach-spear/platsmp.c
++++ b/arch/arm/mach-spear/platsmp.c
+@@ -32,7 +32,7 @@ static void write_pen_release(int val)
+       sync_cache_w(&pen_release);
+ }
+-static DEFINE_SPINLOCK(boot_lock);
++static DEFINE_RAW_SPINLOCK(boot_lock);
+ static void __iomem *scu_base = IOMEM(VA_SCU_BASE);
+@@ -47,8 +47,8 @@ static void spear13xx_secondary_init(uns
+       /*
+        * Synchronise with the boot thread.
+        */
+-      spin_lock(&boot_lock);
+-      spin_unlock(&boot_lock);
++      raw_spin_lock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+ }
+ static int spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -59,7 +59,7 @@ static int spear13xx_boot_secondary(unsi
+        * set synchronisation state between this boot processor
+        * and the secondary one
+        */
+-      spin_lock(&boot_lock);
++      raw_spin_lock(&boot_lock);
+       /*
+        * The secondary processor is waiting to be released from
+@@ -84,7 +84,7 @@ static int spear13xx_boot_secondary(unsi
+        * now the secondary core is starting up let it run its
+        * calibrations, then wait for it to finish
+        */
+-      spin_unlock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+       return pen_release != -1 ? -ENOSYS : 0;
+ }
+--- a/arch/arm/mach-sti/platsmp.c
++++ b/arch/arm/mach-sti/platsmp.c
+@@ -35,7 +35,7 @@ static void write_pen_release(int val)
+       sync_cache_w(&pen_release);
+ }
+-static DEFINE_SPINLOCK(boot_lock);
++static DEFINE_RAW_SPINLOCK(boot_lock);
+ static void sti_secondary_init(unsigned int cpu)
+ {
+@@ -48,8 +48,8 @@ static void sti_secondary_init(unsigned
+       /*
+        * Synchronise with the boot thread.
+        */
+-      spin_lock(&boot_lock);
+-      spin_unlock(&boot_lock);
++      raw_spin_lock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+ }
+ static int sti_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -60,7 +60,7 @@ static int sti_boot_secondary(unsigned i
+        * set synchronisation state between this boot processor
+        * and the secondary one
+        */
+-      spin_lock(&boot_lock);
++      raw_spin_lock(&boot_lock);
+       /*
+        * The secondary processor is waiting to be released from
+@@ -91,7 +91,7 @@ static int sti_boot_secondary(unsigned i
+        * now the secondary core is starting up let it run its
+        * calibrations, then wait for it to finish
+        */
+-      spin_unlock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+       return pen_release != -1 ? -ENOSYS : 0;
+ }
+--- a/arch/arm/plat-versatile/platsmp.c
++++ b/arch/arm/plat-versatile/platsmp.c
+@@ -32,7 +32,7 @@ static void write_pen_release(int val)
+       sync_cache_w(&pen_release);
+ }
+-static DEFINE_SPINLOCK(boot_lock);
++static DEFINE_RAW_SPINLOCK(boot_lock);
+ void versatile_secondary_init(unsigned int cpu)
+ {
+@@ -45,8 +45,8 @@ void versatile_secondary_init(unsigned i
+       /*
+        * Synchronise with the boot thread.
+        */
+-      spin_lock(&boot_lock);
+-      spin_unlock(&boot_lock);
++      raw_spin_lock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+ }
+ int versatile_boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -57,7 +57,7 @@ int versatile_boot_secondary(unsigned in
+        * Set synchronisation state between this boot processor
+        * and the secondary one
+        */
+-      spin_lock(&boot_lock);
++      raw_spin_lock(&boot_lock);
+       /*
+        * This is really belt and braces; we hold unintended secondary
+@@ -87,7 +87,7 @@ int versatile_boot_secondary(unsigned in
+        * now the secondary core is starting up let it run its
+        * calibrations, then wait for it to finish
+        */
+-      spin_unlock(&boot_lock);
++      raw_spin_unlock(&boot_lock);
+       return pen_release != -1 ? -ENOSYS : 0;
+ }
diff --git a/patches/features/all/rt/arm-enable-highmem-for-rt.patch b/patches/features/all/rt/arm-enable-highmem-for-rt.patch
new file mode 100644 (file)
index 0000000..275f14a
--- /dev/null
@@ -0,0 +1,174 @@
+Subject: arm: Enable highmem for rt
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 13 Feb 2013 11:03:11 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+fixup highmem for ARM.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/arm/include/asm/switch_to.h |    8 +++++
+ arch/arm/mm/highmem.c            |   56 +++++++++++++++++++++++++++++++++------
+ include/linux/highmem.h          |    1 
+ 3 files changed, 57 insertions(+), 8 deletions(-)
+
+--- a/arch/arm/include/asm/switch_to.h
++++ b/arch/arm/include/asm/switch_to.h
+@@ -3,6 +3,13 @@
+ #include <linux/thread_info.h>
++#if defined CONFIG_PREEMPT_RT_FULL && defined CONFIG_HIGHMEM
++void switch_kmaps(struct task_struct *prev_p, struct task_struct *next_p);
++#else
++static inline void
++switch_kmaps(struct task_struct *prev_p, struct task_struct *next_p) { }
++#endif
++
+ /*
+  * For v7 SMP cores running a preemptible kernel we may be pre-empted
+  * during a TLB maintenance operation, so execute an inner-shareable dsb
+@@ -25,6 +32,7 @@ extern struct task_struct *__switch_to(s
+ #define switch_to(prev,next,last)                                     \
+ do {                                                                  \
+       __complete_pending_tlbi();                                      \
++      switch_kmaps(prev, next);                                       \
+       last = __switch_to(prev,task_thread_info(prev), task_thread_info(next));        \
+ } while (0)
+--- a/arch/arm/mm/highmem.c
++++ b/arch/arm/mm/highmem.c
+@@ -34,6 +34,11 @@ static inline pte_t get_fixmap_pte(unsig
+       return *ptep;
+ }
++static unsigned int fixmap_idx(int type)
++{
++      return FIX_KMAP_BEGIN + type + KM_TYPE_NR * smp_processor_id();
++}
++
+ void *kmap(struct page *page)
+ {
+       might_sleep();
+@@ -54,12 +59,13 @@ EXPORT_SYMBOL(kunmap);
+ void *kmap_atomic(struct page *page)
+ {
++      pte_t pte = mk_pte(page, kmap_prot);
+       unsigned int idx;
+       unsigned long vaddr;
+       void *kmap;
+       int type;
+-      preempt_disable();
++      preempt_disable_nort();
+       pagefault_disable();
+       if (!PageHighMem(page))
+               return page_address(page);
+@@ -79,7 +85,7 @@ void *kmap_atomic(struct page *page)
+       type = kmap_atomic_idx_push();
+-      idx = FIX_KMAP_BEGIN + type + KM_TYPE_NR * smp_processor_id();
++      idx = fixmap_idx(type);
+       vaddr = __fix_to_virt(idx);
+ #ifdef CONFIG_DEBUG_HIGHMEM
+       /*
+@@ -93,7 +99,10 @@ void *kmap_atomic(struct page *page)
+        * in place, so the contained TLB flush ensures the TLB is updated
+        * with the new mapping.
+        */
+-      set_fixmap_pte(idx, mk_pte(page, kmap_prot));
++#ifdef CONFIG_PREEMPT_RT_FULL
++      current->kmap_pte[type] = pte;
++#endif
++      set_fixmap_pte(idx, pte);
+       return (void *)vaddr;
+ }
+@@ -106,10 +115,13 @@ void __kunmap_atomic(void *kvaddr)
+       if (kvaddr >= (void *)FIXADDR_START) {
+               type = kmap_atomic_idx();
+-              idx = FIX_KMAP_BEGIN + type + KM_TYPE_NR * smp_processor_id();
++              idx = fixmap_idx(type);
+               if (cache_is_vivt())
+                       __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE);
++#ifdef CONFIG_PREEMPT_RT_FULL
++              current->kmap_pte[type] = __pte(0);
++#endif
+ #ifdef CONFIG_DEBUG_HIGHMEM
+               BUG_ON(vaddr != __fix_to_virt(idx));
+ #else
+@@ -122,28 +134,56 @@ void __kunmap_atomic(void *kvaddr)
+               kunmap_high(pte_page(pkmap_page_table[PKMAP_NR(vaddr)]));
+       }
+       pagefault_enable();
+-      preempt_enable();
++      preempt_enable_nort();
+ }
+ EXPORT_SYMBOL(__kunmap_atomic);
+ void *kmap_atomic_pfn(unsigned long pfn)
+ {
++      pte_t pte = pfn_pte(pfn, kmap_prot);
+       unsigned long vaddr;
+       int idx, type;
+       struct page *page = pfn_to_page(pfn);
+-      preempt_disable();
++      preempt_disable_nort();
+       pagefault_disable();
+       if (!PageHighMem(page))
+               return page_address(page);
+       type = kmap_atomic_idx_push();
+-      idx = FIX_KMAP_BEGIN + type + KM_TYPE_NR * smp_processor_id();
++      idx = fixmap_idx(type);
+       vaddr = __fix_to_virt(idx);
+ #ifdef CONFIG_DEBUG_HIGHMEM
+       BUG_ON(!pte_none(get_fixmap_pte(vaddr)));
+ #endif
+-      set_fixmap_pte(idx, pfn_pte(pfn, kmap_prot));
++#ifdef CONFIG_PREEMPT_RT_FULL
++      current->kmap_pte[type] = pte;
++#endif
++      set_fixmap_pte(idx, pte);
+       return (void *)vaddr;
+ }
++#if defined CONFIG_PREEMPT_RT_FULL
++void switch_kmaps(struct task_struct *prev_p, struct task_struct *next_p)
++{
++      int i;
++
++      /*
++       * Clear @prev's kmap_atomic mappings
++       */
++      for (i = 0; i < prev_p->kmap_idx; i++) {
++              int idx = fixmap_idx(i);
++
++              set_fixmap_pte(idx, __pte(0));
++      }
++      /*
++       * Restore @next_p's kmap_atomic mappings
++       */
++      for (i = 0; i < next_p->kmap_idx; i++) {
++              int idx = fixmap_idx(i);
++
++              if (!pte_none(next_p->kmap_pte[i]))
++                      set_fixmap_pte(idx, next_p->kmap_pte[i]);
++      }
++}
++#endif
+--- a/include/linux/highmem.h
++++ b/include/linux/highmem.h
+@@ -7,6 +7,7 @@
+ #include <linux/mm.h>
+ #include <linux/uaccess.h>
+ #include <linux/hardirq.h>
++#include <linux/sched.h>
+ #include <asm/cacheflush.h>
diff --git a/patches/features/all/rt/arm-highmem-flush-tlb-on-unmap.patch b/patches/features/all/rt/arm-highmem-flush-tlb-on-unmap.patch
new file mode 100644 (file)
index 0000000..dd3bb5b
--- /dev/null
@@ -0,0 +1,28 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 11 Mar 2013 21:37:27 +0100
+Subject: arm/highmem: Flush tlb on unmap
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The tlb should be flushed on unmap and thus make the mapping entry
+invalid. This is only done in the non-debug case which does not look
+right.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/arm/mm/highmem.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/arm/mm/highmem.c
++++ b/arch/arm/mm/highmem.c
+@@ -112,10 +112,10 @@ void __kunmap_atomic(void *kvaddr)
+                       __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE);
+ #ifdef CONFIG_DEBUG_HIGHMEM
+               BUG_ON(vaddr != __fix_to_virt(idx));
+-              set_fixmap_pte(idx, __pte(0));
+ #else
+               (void) idx;  /* to kill a warning */
+ #endif
++              set_fixmap_pte(idx, __pte(0));
+               kmap_atomic_idx_pop();
+       } else if (vaddr >= PKMAP_ADDR(0) && vaddr < PKMAP_ADDR(LAST_PKMAP)) {
+               /* this address was obtained through kmap_high_get() */
diff --git a/patches/features/all/rt/arm-include-definition-for-cpumask_t.patch b/patches/features/all/rt/arm-include-definition-for-cpumask_t.patch
new file mode 100644 (file)
index 0000000..8734cb9
--- /dev/null
@@ -0,0 +1,25 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 22 Dec 2016 17:28:33 +0100
+Subject: [PATCH] arm: include definition for cpumask_t
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+This definition gets pulled in by other files. With the (later) split of
+RCU and spinlock.h it won't compile anymore.
+The split is done in ("rbtree: don't include the rcu header").
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/arm/include/asm/irq.h |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/arm/include/asm/irq.h
++++ b/arch/arm/include/asm/irq.h
+@@ -22,6 +22,8 @@
+ #endif
+ #ifndef __ASSEMBLY__
++#include <linux/cpumask.h>
++
+ struct irqaction;
+ struct pt_regs;
+ extern void migrate_irqs(void);
diff --git a/patches/features/all/rt/arm-kprobe-replace-patch_lock-to-raw-lock.patch b/patches/features/all/rt/arm-kprobe-replace-patch_lock-to-raw-lock.patch
new file mode 100644 (file)
index 0000000..83af921
--- /dev/null
@@ -0,0 +1,70 @@
+From: Yang Shi <yang.shi@linaro.org>
+Date: Thu, 10 Nov 2016 16:17:55 -0800
+Subject: [PATCH] arm: kprobe: replace patch_lock to raw lock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When running kprobe on -rt kernel, the below bug is caught:
+
+BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:931
+in_atomic(): 1, irqs_disabled(): 128, pid: 14, name: migration/0
+INFO: lockdep is turned off.
+irq event stamp: 238
+hardirqs last enabled at (237): [<80b5aecc>] _raw_spin_unlock_irqrestore+0x88/0x90
+hardirqs last disabled at (238): [<80b56d88>] __schedule+0xec/0x94c
+softirqs last enabled at (0): [<80225584>] copy_process.part.5+0x30c/0x1994
+softirqs last disabled at (0): [< (null)>] (null)
+Preemption disabled at:[<802f2b98>] cpu_stopper_thread+0xc0/0x140
+
+CPU: 0 PID: 14 Comm: migration/0 Tainted: G O 4.8.3-rt2 #1
+Hardware name: Freescale LS1021A
+[<80212e7c>] (unwind_backtrace) from [<8020cd2c>] (show_stack+0x20/0x24)
+[<8020cd2c>] (show_stack) from [<80689e14>] (dump_stack+0xa0/0xcc)
+[<80689e14>] (dump_stack) from [<8025a43c>] (___might_sleep+0x1b8/0x2a4)
+[<8025a43c>] (___might_sleep) from [<80b5b324>] (rt_spin_lock+0x34/0x74)
+[<80b5b324>] (rt_spin_lock) from [<80b5c31c>] (__patch_text_real+0x70/0xe8)
+[<80b5c31c>] (__patch_text_real) from [<80b5c3ac>] (patch_text_stop_machine+0x18/0x20)
+[<80b5c3ac>] (patch_text_stop_machine) from [<802f2920>] (multi_cpu_stop+0xfc/0x134)
+[<802f2920>] (multi_cpu_stop) from [<802f2ba0>] (cpu_stopper_thread+0xc8/0x140)
+[<802f2ba0>] (cpu_stopper_thread) from [<802563a4>] (smpboot_thread_fn+0x1a4/0x354)
+[<802563a4>] (smpboot_thread_fn) from [<80251d38>] (kthread+0x104/0x11c)
+[<80251d38>] (kthread) from [<80207f70>] (ret_from_fork+0x14/0x24)
+
+Since patch_text_stop_machine() is called in stop_machine() which disables IRQ,
+sleepable lock should be not used in this atomic context, so replace patch_lock
+to raw lock.
+
+Signed-off-by: Yang Shi <yang.shi@linaro.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/arm/kernel/patch.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/arch/arm/kernel/patch.c
++++ b/arch/arm/kernel/patch.c
+@@ -15,7 +15,7 @@ struct patch {
+       unsigned int insn;
+ };
+-static DEFINE_SPINLOCK(patch_lock);
++static DEFINE_RAW_SPINLOCK(patch_lock);
+ static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags)
+       __acquires(&patch_lock)
+@@ -32,7 +32,7 @@ static void __kprobes *patch_map(void *a
+               return addr;
+       if (flags)
+-              spin_lock_irqsave(&patch_lock, *flags);
++              raw_spin_lock_irqsave(&patch_lock, *flags);
+       else
+               __acquire(&patch_lock);
+@@ -47,7 +47,7 @@ static void __kprobes patch_unmap(int fi
+       clear_fixmap(fixmap);
+       if (flags)
+-              spin_unlock_irqrestore(&patch_lock, *flags);
++              raw_spin_unlock_irqrestore(&patch_lock, *flags);
+       else
+               __release(&patch_lock);
+ }
diff --git a/patches/features/all/rt/arm-preempt-lazy-support.patch b/patches/features/all/rt/arm-preempt-lazy-support.patch
new file mode 100644 (file)
index 0000000..89c32ce
--- /dev/null
@@ -0,0 +1,152 @@
+Subject: arm: Add support for lazy preemption
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 31 Oct 2012 12:04:11 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Implement the arm pieces for lazy preempt.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/arm/Kconfig                   |    1 +
+ arch/arm/include/asm/thread_info.h |    8 ++++++--
+ arch/arm/kernel/asm-offsets.c      |    1 +
+ arch/arm/kernel/entry-armv.S       |   19 ++++++++++++++++---
+ arch/arm/kernel/entry-common.S     |    9 +++++++--
+ arch/arm/kernel/signal.c           |    3 ++-
+ 6 files changed, 33 insertions(+), 8 deletions(-)
+
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -75,6 +75,7 @@ config ARM
+       select HAVE_PERF_EVENTS
+       select HAVE_PERF_REGS
+       select HAVE_PERF_USER_STACK_DUMP
++      select HAVE_PREEMPT_LAZY
+       select HAVE_RCU_TABLE_FREE if (SMP && ARM_LPAE)
+       select HAVE_REGS_AND_STACK_ACCESS_API
+       select HAVE_SYSCALL_TRACEPOINTS
+--- a/arch/arm/include/asm/thread_info.h
++++ b/arch/arm/include/asm/thread_info.h
+@@ -49,6 +49,7 @@ struct cpu_context_save {
+ struct thread_info {
+       unsigned long           flags;          /* low level flags */
+       int                     preempt_count;  /* 0 => preemptable, <0 => bug */
++      int                     preempt_lazy_count; /* 0 => preemptable, <0 => bug */
+       mm_segment_t            addr_limit;     /* address limit */
+       struct task_struct      *task;          /* main task structure */
+       __u32                   cpu;            /* cpu */
+@@ -142,7 +143,8 @@ extern int vfp_restore_user_hwstate(stru
+ #define TIF_SYSCALL_TRACE     4       /* syscall trace active */
+ #define TIF_SYSCALL_AUDIT     5       /* syscall auditing active */
+ #define TIF_SYSCALL_TRACEPOINT        6       /* syscall tracepoint instrumentation */
+-#define TIF_SECCOMP           7       /* seccomp syscall filtering active */
++#define TIF_SECCOMP           8       /* seccomp syscall filtering active */
++#define TIF_NEED_RESCHED_LAZY 7
+ #define TIF_NOHZ              12      /* in adaptive nohz mode */
+ #define TIF_USING_IWMMXT      17
+@@ -152,6 +154,7 @@ extern int vfp_restore_user_hwstate(stru
+ #define _TIF_SIGPENDING               (1 << TIF_SIGPENDING)
+ #define _TIF_NEED_RESCHED     (1 << TIF_NEED_RESCHED)
+ #define _TIF_NOTIFY_RESUME    (1 << TIF_NOTIFY_RESUME)
++#define _TIF_NEED_RESCHED_LAZY        (1 << TIF_NEED_RESCHED_LAZY)
+ #define _TIF_UPROBE           (1 << TIF_UPROBE)
+ #define _TIF_SYSCALL_TRACE    (1 << TIF_SYSCALL_TRACE)
+ #define _TIF_SYSCALL_AUDIT    (1 << TIF_SYSCALL_AUDIT)
+@@ -167,7 +170,8 @@ extern int vfp_restore_user_hwstate(stru
+  * Change these and you break ASM code in entry-common.S
+  */
+ #define _TIF_WORK_MASK                (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
+-                               _TIF_NOTIFY_RESUME | _TIF_UPROBE)
++                               _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
++                               _TIF_NEED_RESCHED_LAZY)
+ #endif /* __KERNEL__ */
+ #endif /* __ASM_ARM_THREAD_INFO_H */
+--- a/arch/arm/kernel/asm-offsets.c
++++ b/arch/arm/kernel/asm-offsets.c
+@@ -65,6 +65,7 @@ int main(void)
+   BLANK();
+   DEFINE(TI_FLAGS,            offsetof(struct thread_info, flags));
+   DEFINE(TI_PREEMPT,          offsetof(struct thread_info, preempt_count));
++  DEFINE(TI_PREEMPT_LAZY,     offsetof(struct thread_info, preempt_lazy_count));
+   DEFINE(TI_ADDR_LIMIT,               offsetof(struct thread_info, addr_limit));
+   DEFINE(TI_TASK,             offsetof(struct thread_info, task));
+   DEFINE(TI_CPU,              offsetof(struct thread_info, cpu));
+--- a/arch/arm/kernel/entry-armv.S
++++ b/arch/arm/kernel/entry-armv.S
+@@ -220,11 +220,18 @@ ENDPROC(__dabt_svc)
+ #ifdef CONFIG_PREEMPT
+       ldr     r8, [tsk, #TI_PREEMPT]          @ get preempt count
+-      ldr     r0, [tsk, #TI_FLAGS]            @ get flags
+       teq     r8, #0                          @ if preempt count != 0
++      bne     1f                              @ return from exeption
++      ldr     r0, [tsk, #TI_FLAGS]            @ get flags
++      tst     r0, #_TIF_NEED_RESCHED          @ if NEED_RESCHED is set
++      blne    svc_preempt                     @ preempt!
++
++      ldr     r8, [tsk, #TI_PREEMPT_LAZY]     @ get preempt lazy count
++      teq     r8, #0                          @ if preempt lazy count != 0
+       movne   r0, #0                          @ force flags to 0
+-      tst     r0, #_TIF_NEED_RESCHED
++      tst     r0, #_TIF_NEED_RESCHED_LAZY
+       blne    svc_preempt
++1:
+ #endif
+       svc_exit r5, irq = 1                    @ return from exception
+@@ -239,8 +246,14 @@ ENDPROC(__irq_svc)
+ 1:    bl      preempt_schedule_irq            @ irq en/disable is done inside
+       ldr     r0, [tsk, #TI_FLAGS]            @ get new tasks TI_FLAGS
+       tst     r0, #_TIF_NEED_RESCHED
++      bne     1b
++      tst     r0, #_TIF_NEED_RESCHED_LAZY
+       reteq   r8                              @ go again
+-      b       1b
++      ldr     r0, [tsk, #TI_PREEMPT_LAZY]     @ get preempt lazy count
++      teq     r0, #0                          @ if preempt lazy count != 0
++      beq     1b
++      ret     r8                              @ go again
++
+ #endif
+ __und_fault:
+--- a/arch/arm/kernel/entry-common.S
++++ b/arch/arm/kernel/entry-common.S
+@@ -36,7 +36,9 @@
+  UNWIND(.cantunwind   )
+       disable_irq_notrace                     @ disable interrupts
+       ldr     r1, [tsk, #TI_FLAGS]            @ re-check for syscall tracing
+-      tst     r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
++      tst     r1, #((_TIF_SYSCALL_WORK | _TIF_WORK_MASK) & ~_TIF_SECCOMP)
++      bne     fast_work_pending
++      tst     r1, #_TIF_SECCOMP
+       bne     fast_work_pending
+       /* perform architecture specific actions before user return */
+@@ -62,8 +64,11 @@ ENDPROC(ret_fast_syscall)
+       str     r0, [sp, #S_R0 + S_OFF]!        @ save returned r0
+       disable_irq_notrace                     @ disable interrupts
+       ldr     r1, [tsk, #TI_FLAGS]            @ re-check for syscall tracing
+-      tst     r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
++      tst     r1, #((_TIF_SYSCALL_WORK | _TIF_WORK_MASK) & ~_TIF_SECCOMP)
++      bne     do_slower_path
++      tst     r1, #_TIF_SECCOMP
+       beq     no_work_pending
++do_slower_path:
+  UNWIND(.fnend                )
+ ENDPROC(ret_fast_syscall)
+--- a/arch/arm/kernel/signal.c
++++ b/arch/arm/kernel/signal.c
+@@ -572,7 +572,8 @@ do_work_pending(struct pt_regs *regs, un
+        */
+       trace_hardirqs_off();
+       do {
+-              if (likely(thread_flags & _TIF_NEED_RESCHED)) {
++              if (likely(thread_flags & (_TIF_NEED_RESCHED |
++                                         _TIF_NEED_RESCHED_LAZY))) {
+                       schedule();
+               } else {
+                       if (unlikely(!user_mode(regs)))
diff --git a/patches/features/all/rt/arm-unwind-use_raw_lock.patch b/patches/features/all/rt/arm-unwind-use_raw_lock.patch
new file mode 100644 (file)
index 0000000..72b6230
--- /dev/null
@@ -0,0 +1,84 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 20 Sep 2013 14:31:54 +0200
+Subject: arm/unwind: use a raw_spin_lock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Mostly unwind is done with irqs enabled however SLUB may call it with
+irqs disabled while creating a new SLUB cache.
+
+I had system freeze while loading a module which called
+kmem_cache_create() on init. That means SLUB's __slab_alloc() disabled
+interrupts and then
+
+->new_slab_objects()
+ ->new_slab()
+  ->setup_object()
+   ->setup_object_debug()
+    ->init_tracking()
+     ->set_track()
+      ->save_stack_trace()
+       ->save_stack_trace_tsk()
+        ->walk_stackframe()
+         ->unwind_frame()
+          ->unwind_find_idx()
+           =>spin_lock_irqsave(&unwind_lock);
+
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/arm/kernel/unwind.c |   14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+--- a/arch/arm/kernel/unwind.c
++++ b/arch/arm/kernel/unwind.c
+@@ -93,7 +93,7 @@ extern const struct unwind_idx __start_u
+ static const struct unwind_idx *__origin_unwind_idx;
+ extern const struct unwind_idx __stop_unwind_idx[];
+-static DEFINE_SPINLOCK(unwind_lock);
++static DEFINE_RAW_SPINLOCK(unwind_lock);
+ static LIST_HEAD(unwind_tables);
+ /* Convert a prel31 symbol to an absolute address */
+@@ -201,7 +201,7 @@ static const struct unwind_idx *unwind_f
+               /* module unwind tables */
+               struct unwind_table *table;
+-              spin_lock_irqsave(&unwind_lock, flags);
++              raw_spin_lock_irqsave(&unwind_lock, flags);
+               list_for_each_entry(table, &unwind_tables, list) {
+                       if (addr >= table->begin_addr &&
+                           addr < table->end_addr) {
+@@ -213,7 +213,7 @@ static const struct unwind_idx *unwind_f
+                               break;
+                       }
+               }
+-              spin_unlock_irqrestore(&unwind_lock, flags);
++              raw_spin_unlock_irqrestore(&unwind_lock, flags);
+       }
+       pr_debug("%s: idx = %p\n", __func__, idx);
+@@ -529,9 +529,9 @@ struct unwind_table *unwind_table_add(un
+       tab->begin_addr = text_addr;
+       tab->end_addr = text_addr + text_size;
+-      spin_lock_irqsave(&unwind_lock, flags);
++      raw_spin_lock_irqsave(&unwind_lock, flags);
+       list_add_tail(&tab->list, &unwind_tables);
+-      spin_unlock_irqrestore(&unwind_lock, flags);
++      raw_spin_unlock_irqrestore(&unwind_lock, flags);
+       return tab;
+ }
+@@ -543,9 +543,9 @@ void unwind_table_del(struct unwind_tabl
+       if (!tab)
+               return;
+-      spin_lock_irqsave(&unwind_lock, flags);
++      raw_spin_lock_irqsave(&unwind_lock, flags);
+       list_del(&tab->list);
+-      spin_unlock_irqrestore(&unwind_lock, flags);
++      raw_spin_unlock_irqrestore(&unwind_lock, flags);
+       kfree(tab);
+ }
diff --git a/patches/features/all/rt/arm64-xen--Make-XEN-depend-on-non-rt.patch b/patches/features/all/rt/arm64-xen--Make-XEN-depend-on-non-rt.patch
new file mode 100644 (file)
index 0000000..1586f23
--- /dev/null
@@ -0,0 +1,24 @@
+Subject: arm64/xen: Make XEN depend on !RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 12 Oct 2015 11:18:40 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+It's not ready and probably never will be, unless xen folks have a
+look at it.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/arm64/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/arm64/Kconfig
++++ b/arch/arm64/Kconfig
+@@ -704,7 +704,7 @@ config XEN_DOM0
+ config XEN
+       bool "Xen guest support on ARM64"
+-      depends on ARM64 && OF
++      depends on ARM64 && OF && !PREEMPT_RT_FULL
+       select SWIOTLB_XEN
+       select PARAVIRT
+       help
diff --git a/patches/features/all/rt/at91_dont_enable_disable_clock.patch b/patches/features/all/rt/at91_dont_enable_disable_clock.patch
new file mode 100644 (file)
index 0000000..090a164
--- /dev/null
@@ -0,0 +1,92 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 09 Mar 2016 10:51:06 +0100
+Subject: arm: at91: do not disable/enable clocks in a row
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Currently the driver will disable the clock and enable it one line later
+if it is switching from periodic mode into one shot.
+This can be avoided and causes a needless warning on -RT.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/clocksource/tcb_clksrc.c |   33 +++++++++++++++++++++++++++++----
+ 1 file changed, 29 insertions(+), 4 deletions(-)
+
+--- a/drivers/clocksource/tcb_clksrc.c
++++ b/drivers/clocksource/tcb_clksrc.c
+@@ -74,6 +74,7 @@ static struct clocksource clksrc = {
+ struct tc_clkevt_device {
+       struct clock_event_device       clkevt;
+       struct clk                      *clk;
++      bool                            clk_enabled;
+       void __iomem                    *regs;
+ };
+@@ -91,6 +92,24 @@ static struct tc_clkevt_device *to_tc_cl
+  */
+ static u32 timer_clock;
++static void tc_clk_disable(struct clock_event_device *d)
++{
++      struct tc_clkevt_device *tcd = to_tc_clkevt(d);
++
++      clk_disable(tcd->clk);
++      tcd->clk_enabled = false;
++}
++
++static void tc_clk_enable(struct clock_event_device *d)
++{
++      struct tc_clkevt_device *tcd = to_tc_clkevt(d);
++
++      if (tcd->clk_enabled)
++              return;
++      clk_enable(tcd->clk);
++      tcd->clk_enabled = true;
++}
++
+ static int tc_shutdown(struct clock_event_device *d)
+ {
+       struct tc_clkevt_device *tcd = to_tc_clkevt(d);
+@@ -98,8 +117,14 @@ static int tc_shutdown(struct clock_even
+       __raw_writel(0xff, regs + ATMEL_TC_REG(2, IDR));
+       __raw_writel(ATMEL_TC_CLKDIS, regs + ATMEL_TC_REG(2, CCR));
++      return 0;
++}
++
++static int tc_shutdown_clk_off(struct clock_event_device *d)
++{
++      tc_shutdown(d);
+       if (!clockevent_state_detached(d))
+-              clk_disable(tcd->clk);
++              tc_clk_disable(d);
+       return 0;
+ }
+@@ -112,7 +137,7 @@ static int tc_set_oneshot(struct clock_e
+       if (clockevent_state_oneshot(d) || clockevent_state_periodic(d))
+               tc_shutdown(d);
+-      clk_enable(tcd->clk);
++      tc_clk_enable(d);
+       /* slow clock, count up to RC, then irq and stop */
+       __raw_writel(timer_clock | ATMEL_TC_CPCSTOP | ATMEL_TC_WAVE |
+@@ -134,7 +159,7 @@ static int tc_set_periodic(struct clock_
+       /* By not making the gentime core emulate periodic mode on top
+        * of oneshot, we get lower overhead and improved accuracy.
+        */
+-      clk_enable(tcd->clk);
++      tc_clk_enable(d);
+       /* slow clock, count up to RC, then irq and restart */
+       __raw_writel(timer_clock | ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO,
+@@ -168,7 +193,7 @@ static struct tc_clkevt_device clkevt =
+               /* Should be lower than at91rm9200's system timer */
+               .rating                 = 125,
+               .set_next_event         = tc_next_event,
+-              .set_state_shutdown     = tc_shutdown,
++              .set_state_shutdown     = tc_shutdown_clk_off,
+               .set_state_periodic     = tc_set_periodic,
+               .set_state_oneshot      = tc_set_oneshot,
+       },
diff --git a/patches/features/all/rt/ata-disable-interrupts-if-non-rt.patch b/patches/features/all/rt/ata-disable-interrupts-if-non-rt.patch
new file mode 100644 (file)
index 0000000..1c54718
--- /dev/null
@@ -0,0 +1,65 @@
+From: Steven Rostedt <srostedt@redhat.com>
+Date: Fri, 3 Jul 2009 08:44:29 -0500
+Subject: ata: Do not disable interrupts in ide code for preempt-rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use the local_irq_*_nort variants.
+
+Signed-off-by: Steven Rostedt <srostedt@redhat.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/ata/libata-sff.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/ata/libata-sff.c
++++ b/drivers/ata/libata-sff.c
+@@ -678,9 +678,9 @@ unsigned int ata_sff_data_xfer_noirq(str
+       unsigned long flags;
+       unsigned int consumed;
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       consumed = ata_sff_data_xfer32(dev, buf, buflen, rw);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+       return consumed;
+ }
+@@ -719,7 +719,7 @@ static void ata_pio_sector(struct ata_qu
+               unsigned long flags;
+               /* FIXME: use a bounce buffer */
+-              local_irq_save(flags);
++              local_irq_save_nort(flags);
+               buf = kmap_atomic(page);
+               /* do the actual data transfer */
+@@ -727,7 +727,7 @@ static void ata_pio_sector(struct ata_qu
+                                      do_write);
+               kunmap_atomic(buf);
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+       } else {
+               buf = page_address(page);
+               ap->ops->sff_data_xfer(qc->dev, buf + offset, qc->sect_size,
+@@ -864,7 +864,7 @@ static int __atapi_pio_bytes(struct ata_
+               unsigned long flags;
+               /* FIXME: use bounce buffer */
+-              local_irq_save(flags);
++              local_irq_save_nort(flags);
+               buf = kmap_atomic(page);
+               /* do the actual data transfer */
+@@ -872,7 +872,7 @@ static int __atapi_pio_bytes(struct ata_
+                                                               count, rw);
+               kunmap_atomic(buf);
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+       } else {
+               buf = page_address(page);
+               consumed = ap->ops->sff_data_xfer(dev,  buf + offset,
diff --git a/patches/features/all/rt/block-blk-mq-use-swait.patch b/patches/features/all/rt/block-blk-mq-use-swait.patch
new file mode 100644 (file)
index 0000000..8b8ada2
--- /dev/null
@@ -0,0 +1,115 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 13 Feb 2015 11:01:26 +0100
+Subject: block: blk-mq: Use swait
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+| BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:914
+| in_atomic(): 1, irqs_disabled(): 0, pid: 255, name: kworker/u257:6
+| 5 locks held by kworker/u257:6/255:
+|  #0:  ("events_unbound"){.+.+.+}, at: [<ffffffff8108edf1>] process_one_work+0x171/0x5e0
+|  #1:  ((&entry->work)){+.+.+.}, at: [<ffffffff8108edf1>] process_one_work+0x171/0x5e0
+|  #2:  (&shost->scan_mutex){+.+.+.}, at: [<ffffffffa000faa3>] __scsi_add_device+0xa3/0x130 [scsi_mod]
+|  #3:  (&set->tag_list_lock){+.+...}, at: [<ffffffff812f09fa>] blk_mq_init_queue+0x96a/0xa50
+|  #4:  (rcu_read_lock_sched){......}, at: [<ffffffff8132887d>] percpu_ref_kill_and_confirm+0x1d/0x120
+| Preemption disabled at:[<ffffffff812eff76>] blk_mq_freeze_queue_start+0x56/0x70
+|
+| CPU: 2 PID: 255 Comm: kworker/u257:6 Not tainted 3.18.7-rt0+ #1
+| Workqueue: events_unbound async_run_entry_fn
+|  0000000000000003 ffff8800bc29f998 ffffffff815b3a12 0000000000000000
+|  0000000000000000 ffff8800bc29f9b8 ffffffff8109aa16 ffff8800bc29fa28
+|  ffff8800bc5d1bc8 ffff8800bc29f9e8 ffffffff815b8dd4 ffff880000000000
+| Call Trace:
+|  [<ffffffff815b3a12>] dump_stack+0x4f/0x7c
+|  [<ffffffff8109aa16>] __might_sleep+0x116/0x190
+|  [<ffffffff815b8dd4>] rt_spin_lock+0x24/0x60
+|  [<ffffffff810b6089>] __wake_up+0x29/0x60
+|  [<ffffffff812ee06e>] blk_mq_usage_counter_release+0x1e/0x20
+|  [<ffffffff81328966>] percpu_ref_kill_and_confirm+0x106/0x120
+|  [<ffffffff812eff76>] blk_mq_freeze_queue_start+0x56/0x70
+|  [<ffffffff812f0000>] blk_mq_update_tag_set_depth+0x40/0xd0
+|  [<ffffffff812f0a1c>] blk_mq_init_queue+0x98c/0xa50
+|  [<ffffffffa000dcf0>] scsi_mq_alloc_queue+0x20/0x60 [scsi_mod]
+|  [<ffffffffa000ea35>] scsi_alloc_sdev+0x2f5/0x370 [scsi_mod]
+|  [<ffffffffa000f494>] scsi_probe_and_add_lun+0x9e4/0xdd0 [scsi_mod]
+|  [<ffffffffa000fb26>] __scsi_add_device+0x126/0x130 [scsi_mod]
+|  [<ffffffffa013033f>] ata_scsi_scan_host+0xaf/0x200 [libata]
+|  [<ffffffffa012b5b6>] async_port_probe+0x46/0x60 [libata]
+|  [<ffffffff810978fb>] async_run_entry_fn+0x3b/0xf0
+|  [<ffffffff8108ee81>] process_one_work+0x201/0x5e0
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ block/blk-core.c       |    6 +++---
+ block/blk-mq.c         |    6 +++---
+ include/linux/blkdev.h |    2 +-
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -662,7 +662,7 @@ int blk_queue_enter(struct request_queue
+               if (nowait)
+                       return -EBUSY;
+-              ret = wait_event_interruptible(q->mq_freeze_wq,
++              ret = swait_event_interruptible(q->mq_freeze_wq,
+                               !atomic_read(&q->mq_freeze_depth) ||
+                               blk_queue_dying(q));
+               if (blk_queue_dying(q))
+@@ -682,7 +682,7 @@ static void blk_queue_usage_counter_rele
+       struct request_queue *q =
+               container_of(ref, struct request_queue, q_usage_counter);
+-      wake_up_all(&q->mq_freeze_wq);
++      swake_up_all(&q->mq_freeze_wq);
+ }
+ static void blk_rq_timed_out_timer(unsigned long data)
+@@ -751,7 +751,7 @@ struct request_queue *blk_alloc_queue_no
+       q->bypass_depth = 1;
+       __set_bit(QUEUE_FLAG_BYPASS, &q->queue_flags);
+-      init_waitqueue_head(&q->mq_freeze_wq);
++      init_swait_queue_head(&q->mq_freeze_wq);
+       /*
+        * Init percpu_ref in atomic mode so that it's faster to shutdown.
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -72,7 +72,7 @@ EXPORT_SYMBOL_GPL(blk_mq_freeze_queue_st
+ static void blk_mq_freeze_queue_wait(struct request_queue *q)
+ {
+-      wait_event(q->mq_freeze_wq, percpu_ref_is_zero(&q->q_usage_counter));
++      swait_event(q->mq_freeze_wq, percpu_ref_is_zero(&q->q_usage_counter));
+ }
+ /*
+@@ -110,7 +110,7 @@ void blk_mq_unfreeze_queue(struct reques
+       WARN_ON_ONCE(freeze_depth < 0);
+       if (!freeze_depth) {
+               percpu_ref_reinit(&q->q_usage_counter);
+-              wake_up_all(&q->mq_freeze_wq);
++              swake_up_all(&q->mq_freeze_wq);
+       }
+ }
+ EXPORT_SYMBOL_GPL(blk_mq_unfreeze_queue);
+@@ -129,7 +129,7 @@ void blk_mq_wake_waiters(struct request_
+        * dying, we need to ensure that processes currently waiting on
+        * the queue are notified as well.
+        */
+-      wake_up_all(&q->mq_freeze_wq);
++      swake_up_all(&q->mq_freeze_wq);
+ }
+ bool blk_mq_can_queue(struct blk_mq_hw_ctx *hctx)
+--- a/include/linux/blkdev.h
++++ b/include/linux/blkdev.h
+@@ -468,7 +468,7 @@ struct request_queue {
+       struct throtl_data *td;
+ #endif
+       struct rcu_head         rcu_head;
+-      wait_queue_head_t       mq_freeze_wq;
++      struct swait_queue_head mq_freeze_wq;
+       struct percpu_ref       q_usage_counter;
+       struct list_head        all_q_node;
diff --git a/patches/features/all/rt/block-mq-don-t-complete-requests-via-IPI.patch b/patches/features/all/rt/block-mq-don-t-complete-requests-via-IPI.patch
new file mode 100644 (file)
index 0000000..b4a53ca
--- /dev/null
@@ -0,0 +1,103 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 29 Jan 2015 15:10:08 +0100
+Subject: block/mq: don't complete requests via IPI
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The IPI runs in hardirq context and there are sleeping locks. This patch
+moves the completion into a workqueue.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ block/blk-core.c       |    3 +++
+ block/blk-mq.c         |   20 ++++++++++++++++++++
+ include/linux/blk-mq.h |    2 +-
+ include/linux/blkdev.h |    1 +
+ 4 files changed, 25 insertions(+), 1 deletion(-)
+
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -125,6 +125,9 @@ void blk_rq_init(struct request_queue *q
+       INIT_LIST_HEAD(&rq->queuelist);
+       INIT_LIST_HEAD(&rq->timeout_list);
++#ifdef CONFIG_PREEMPT_RT_FULL
++      INIT_WORK(&rq->work, __blk_mq_complete_request_remote_work);
++#endif
+       rq->cpu = -1;
+       rq->q = q;
+       rq->__sector = (sector_t) -1;
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -177,6 +177,9 @@ static void blk_mq_rq_ctx_init(struct re
+       rq->resid_len = 0;
+       rq->sense = NULL;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      INIT_WORK(&rq->work, __blk_mq_complete_request_remote_work);
++#endif
+       INIT_LIST_HEAD(&rq->timeout_list);
+       rq->timeout = 0;
+@@ -345,6 +348,17 @@ void blk_mq_end_request(struct request *
+ }
+ EXPORT_SYMBOL(blk_mq_end_request);
++#ifdef CONFIG_PREEMPT_RT_FULL
++
++void __blk_mq_complete_request_remote_work(struct work_struct *work)
++{
++      struct request *rq = container_of(work, struct request, work);
++
++      rq->q->softirq_done_fn(rq);
++}
++
++#else
++
+ static void __blk_mq_complete_request_remote(void *data)
+ {
+       struct request *rq = data;
+@@ -352,6 +366,8 @@ static void __blk_mq_complete_request_re
+       rq->q->softirq_done_fn(rq);
+ }
++#endif
++
+ static void blk_mq_ipi_complete_request(struct request *rq)
+ {
+       struct blk_mq_ctx *ctx = rq->mq_ctx;
+@@ -368,10 +384,14 @@ static void blk_mq_ipi_complete_request(
+               shared = cpus_share_cache(cpu, ctx->cpu);
+       if (cpu != ctx->cpu && !shared && cpu_online(ctx->cpu)) {
++#ifdef CONFIG_PREEMPT_RT_FULL
++              schedule_work_on(ctx->cpu, &rq->work);
++#else
+               rq->csd.func = __blk_mq_complete_request_remote;
+               rq->csd.info = rq;
+               rq->csd.flags = 0;
+               smp_call_function_single_async(ctx->cpu, &rq->csd);
++#endif
+       } else {
+               rq->q->softirq_done_fn(rq);
+       }
+--- a/include/linux/blk-mq.h
++++ b/include/linux/blk-mq.h
+@@ -209,7 +209,7 @@ static inline u16 blk_mq_unique_tag_to_t
+       return unique_tag & BLK_MQ_UNIQUE_TAG_MASK;
+ }
+-
++void __blk_mq_complete_request_remote_work(struct work_struct *work);
+ int blk_mq_request_started(struct request *rq);
+ void blk_mq_start_request(struct request *rq);
+ void blk_mq_end_request(struct request *rq, int error);
+--- a/include/linux/blkdev.h
++++ b/include/linux/blkdev.h
+@@ -89,6 +89,7 @@ struct request {
+       struct list_head queuelist;
+       union {
+               struct call_single_data csd;
++              struct work_struct work;
+               u64 fifo_time;
+       };
diff --git a/patches/features/all/rt/block-mq-drop-preempt-disable.patch b/patches/features/all/rt/block-mq-drop-preempt-disable.patch
new file mode 100644 (file)
index 0000000..78919a7
--- /dev/null
@@ -0,0 +1,52 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Tue, 14 Jul 2015 14:26:34 +0200
+Subject: block/mq: do not invoke preempt_disable()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+preempt_disable() and get_cpu() don't play well together with the sleeping
+locks it tries to allocate later.
+It seems to be enough to replace it with get_cpu_light() and migrate_disable().
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ block/blk-mq.c |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -363,7 +363,7 @@ static void blk_mq_ipi_complete_request(
+               return;
+       }
+-      cpu = get_cpu();
++      cpu = get_cpu_light();
+       if (!test_bit(QUEUE_FLAG_SAME_FORCE, &rq->q->queue_flags))
+               shared = cpus_share_cache(cpu, ctx->cpu);
+@@ -375,7 +375,7 @@ static void blk_mq_ipi_complete_request(
+       } else {
+               rq->q->softirq_done_fn(rq);
+       }
+-      put_cpu();
++      put_cpu_light();
+ }
+ static void __blk_mq_complete_request(struct request *rq)
+@@ -906,14 +906,14 @@ void blk_mq_run_hw_queue(struct blk_mq_h
+               return;
+       if (!async && !(hctx->flags & BLK_MQ_F_BLOCKING)) {
+-              int cpu = get_cpu();
++              int cpu = get_cpu_light();
+               if (cpumask_test_cpu(cpu, hctx->cpumask)) {
+                       __blk_mq_run_hw_queue(hctx);
+-                      put_cpu();
++                      put_cpu_light();
+                       return;
+               }
+-              put_cpu();
++              put_cpu_light();
+       }
+       kblockd_schedule_work_on(blk_mq_hctx_next_cpu(hctx), &hctx->run_work);
diff --git a/patches/features/all/rt/block-mq-use-cpu_light.patch b/patches/features/all/rt/block-mq-use-cpu_light.patch
new file mode 100644 (file)
index 0000000..e239fd5
--- /dev/null
@@ -0,0 +1,30 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 9 Apr 2014 10:37:23 +0200
+Subject: block: mq: use cpu_light()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+there is a might sleep splat because get_cpu() disables preemption and
+later we grab a lock. As a workaround for this we use get_cpu_light().
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ block/blk-mq.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/block/blk-mq.h
++++ b/block/blk-mq.h
+@@ -72,12 +72,12 @@ static inline struct blk_mq_ctx *__blk_m
+  */
+ static inline struct blk_mq_ctx *blk_mq_get_ctx(struct request_queue *q)
+ {
+-      return __blk_mq_get_ctx(q, get_cpu());
++      return __blk_mq_get_ctx(q, get_cpu_light());
+ }
+ static inline void blk_mq_put_ctx(struct blk_mq_ctx *ctx)
+ {
+-      put_cpu();
++      put_cpu_light();
+ }
+ struct blk_mq_alloc_data {
diff --git a/patches/features/all/rt/block-shorten-interrupt-disabled-regions.patch b/patches/features/all/rt/block-shorten-interrupt-disabled-regions.patch
new file mode 100644 (file)
index 0000000..2f4b575
--- /dev/null
@@ -0,0 +1,97 @@
+Subject: block: Shorten interrupt disabled regions
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 22 Jun 2011 19:47:02 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Moving the blk_sched_flush_plug() call out of the interrupt/preempt
+disabled region in the scheduler allows us to replace
+local_irq_save/restore(flags) by local_irq_disable/enable() in
+blk_flush_plug().
+
+Now instead of doing this we disable interrupts explicitely when we
+lock the request_queue and reenable them when we drop the lock. That
+allows interrupts to be handled when the plug list contains requests
+for more than one queue.
+
+Aside of that this change makes the scope of the irq disabled region
+more obvious. The current code confused the hell out of me when
+looking at:
+
+ local_irq_save(flags);
+   spin_lock(q->queue_lock);
+   ...
+   queue_unplugged(q...);
+     scsi_request_fn();
+       spin_unlock(q->queue_lock);
+       spin_lock(shost->host_lock);
+       spin_unlock_irq(shost->host_lock);
+
+-------------------^^^ ????
+
+       spin_lock_irq(q->queue_lock);
+       spin_unlock(q->lock);
+ local_irq_restore(flags);
+
+Also add a comment to __blk_run_queue() documenting that
+q->request_fn() can drop q->queue_lock and reenable interrupts, but
+must return with q->queue_lock held and interrupts disabled.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Jens Axboe <axboe@kernel.dk>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Link: http://lkml.kernel.org/r/20110622174919.025446432@linutronix.de
+---
+ block/blk-core.c |   12 ++----------
+ 1 file changed, 2 insertions(+), 10 deletions(-)
+
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -3177,7 +3177,7 @@ static void queue_unplugged(struct reque
+               blk_run_queue_async(q);
+       else
+               __blk_run_queue(q);
+-      spin_unlock(q->queue_lock);
++      spin_unlock_irq(q->queue_lock);
+ }
+ static void flush_plug_callbacks(struct blk_plug *plug, bool from_schedule)
+@@ -3225,7 +3225,6 @@ EXPORT_SYMBOL(blk_check_plugged);
+ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
+ {
+       struct request_queue *q;
+-      unsigned long flags;
+       struct request *rq;
+       LIST_HEAD(list);
+       unsigned int depth;
+@@ -3245,11 +3244,6 @@ void blk_flush_plug_list(struct blk_plug
+       q = NULL;
+       depth = 0;
+-      /*
+-       * Save and disable interrupts here, to avoid doing it for every
+-       * queue lock we have to take.
+-       */
+-      local_irq_save(flags);
+       while (!list_empty(&list)) {
+               rq = list_entry_rq(list.next);
+               list_del_init(&rq->queuelist);
+@@ -3262,7 +3256,7 @@ void blk_flush_plug_list(struct blk_plug
+                               queue_unplugged(q, depth, from_schedule);
+                       q = rq->q;
+                       depth = 0;
+-                      spin_lock(q->queue_lock);
++                      spin_lock_irq(q->queue_lock);
+               }
+               /*
+@@ -3289,8 +3283,6 @@ void blk_flush_plug_list(struct blk_plug
+        */
+       if (q)
+               queue_unplugged(q, depth, from_schedule);
+-
+-      local_irq_restore(flags);
+ }
+ void blk_finish_plug(struct blk_plug *plug)
diff --git a/patches/features/all/rt/block-use-cpu-chill.patch b/patches/features/all/rt/block-use-cpu-chill.patch
new file mode 100644 (file)
index 0000000..b8f0241
--- /dev/null
@@ -0,0 +1,46 @@
+Subject: block: Use cpu_chill() for retry loops
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 20 Dec 2012 18:28:26 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Retry loops on RT might loop forever when the modifying side was
+preempted. Steven also observed a live lock when there was a
+concurrent priority boosting going on.
+
+Use cpu_chill() instead of cpu_relax() to let the system
+make progress.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ block/blk-ioc.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/block/blk-ioc.c
++++ b/block/blk-ioc.c
+@@ -7,6 +7,7 @@
+ #include <linux/bio.h>
+ #include <linux/blkdev.h>
+ #include <linux/slab.h>
++#include <linux/delay.h>
+ #include "blk.h"
+@@ -109,7 +110,7 @@ static void ioc_release_fn(struct work_s
+                       spin_unlock(q->queue_lock);
+               } else {
+                       spin_unlock_irqrestore(&ioc->lock, flags);
+-                      cpu_relax();
++                      cpu_chill();
+                       spin_lock_irqsave_nested(&ioc->lock, flags, 1);
+               }
+       }
+@@ -187,7 +188,7 @@ void put_io_context_active(struct io_con
+                       spin_unlock(icq->q->queue_lock);
+               } else {
+                       spin_unlock_irqrestore(&ioc->lock, flags);
+-                      cpu_relax();
++                      cpu_chill();
+                       goto retry;
+               }
+       }
diff --git a/patches/features/all/rt/bug-rt-dependend-variants.patch b/patches/features/all/rt/bug-rt-dependend-variants.patch
new file mode 100644 (file)
index 0000000..3373e94
--- /dev/null
@@ -0,0 +1,37 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:58 -0500
+Subject: bug: BUG_ON/WARN_ON variants dependend on RT/!RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Introduce RT/NON-RT WARN/BUG statements to avoid ifdefs in the code.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/asm-generic/bug.h |   14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+--- a/include/asm-generic/bug.h
++++ b/include/asm-generic/bug.h
+@@ -215,6 +215,20 @@ void __warn(const char *file, int line,
+ # define WARN_ON_SMP(x)                       ({0;})
+ #endif
++#ifdef CONFIG_PREEMPT_RT_BASE
++# define BUG_ON_RT(c)                 BUG_ON(c)
++# define BUG_ON_NONRT(c)              do { } while (0)
++# define WARN_ON_RT(condition)                WARN_ON(condition)
++# define WARN_ON_NONRT(condition)     do { } while (0)
++# define WARN_ON_ONCE_NONRT(condition)        do { } while (0)
++#else
++# define BUG_ON_RT(c)                 do { } while (0)
++# define BUG_ON_NONRT(c)              BUG_ON(c)
++# define WARN_ON_RT(condition)                do { } while (0)
++# define WARN_ON_NONRT(condition)     WARN_ON(condition)
++# define WARN_ON_ONCE_NONRT(condition)        WARN_ON_ONCE(condition)
++#endif
++
+ #endif /* __ASSEMBLY__ */
+ #endif
diff --git a/patches/features/all/rt/cgroups-scheduling-while-atomic-in-cgroup-code.patch b/patches/features/all/rt/cgroups-scheduling-while-atomic-in-cgroup-code.patch
new file mode 100644 (file)
index 0000000..341a02c
--- /dev/null
@@ -0,0 +1,105 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sat, 21 Jun 2014 10:09:48 +0200
+Subject: memcontrol: Prevent scheduling while atomic in cgroup code
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+mm, memcg: make refill_stock() use get_cpu_light()
+
+Nikita reported the following memcg scheduling while atomic bug:
+
+Call Trace:
+[e22d5a90] [c0007ea8] show_stack+0x4c/0x168 (unreliable)
+[e22d5ad0] [c0618c04] __schedule_bug+0x94/0xb0
+[e22d5ae0] [c060b9ec] __schedule+0x530/0x550
+[e22d5bf0] [c060bacc] schedule+0x30/0xbc
+[e22d5c00] [c060ca24] rt_spin_lock_slowlock+0x180/0x27c
+[e22d5c70] [c00b39dc] res_counter_uncharge_until+0x40/0xc4
+[e22d5ca0] [c013ca88] drain_stock.isra.20+0x54/0x98
+[e22d5cc0] [c01402ac] __mem_cgroup_try_charge+0x2e8/0xbac
+[e22d5d70] [c01410d4] mem_cgroup_charge_common+0x3c/0x70
+[e22d5d90] [c0117284] __do_fault+0x38c/0x510
+[e22d5df0] [c011a5f4] handle_pte_fault+0x98/0x858
+[e22d5e50] [c060ed08] do_page_fault+0x42c/0x6fc
+[e22d5f40] [c000f5b4] handle_page_fault+0xc/0x80
+
+What happens:
+
+   refill_stock()
+      get_cpu_var()
+      drain_stock()
+         res_counter_uncharge()
+            res_counter_uncharge_until()
+               spin_lock() <== boom
+
+Fix it by replacing get/put_cpu_var() with get/put_cpu_light().
+
+Reported-by: Nikita Yushchenko <nyushchenko@dev.rtsoft.ru>
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+[bigeasy: use memcg_stock_ll as a locallock since it is now IRQ-off region]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ mm/memcontrol.c |   13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+--- a/mm/memcontrol.c
++++ b/mm/memcontrol.c
+@@ -1695,6 +1695,7 @@ struct memcg_stock_pcp {
+ #define FLUSHING_CACHED_CHARGE        0
+ };
+ static DEFINE_PER_CPU(struct memcg_stock_pcp, memcg_stock);
++static DEFINE_LOCAL_IRQ_LOCK(memcg_stock_ll);
+ static DEFINE_MUTEX(percpu_charge_mutex);
+ /**
+@@ -1717,7 +1718,7 @@ static bool consume_stock(struct mem_cgr
+       if (nr_pages > CHARGE_BATCH)
+               return ret;
+-      local_irq_save(flags);
++      local_lock_irqsave(memcg_stock_ll, flags);
+       stock = this_cpu_ptr(&memcg_stock);
+       if (memcg == stock->cached && stock->nr_pages >= nr_pages) {
+@@ -1725,7 +1726,7 @@ static bool consume_stock(struct mem_cgr
+               ret = true;
+       }
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(memcg_stock_ll, flags);
+       return ret;
+ }
+@@ -1752,13 +1753,13 @@ static void drain_local_stock(struct wor
+       struct memcg_stock_pcp *stock;
+       unsigned long flags;
+-      local_irq_save(flags);
++      local_lock_irqsave(memcg_stock_ll, flags);
+       stock = this_cpu_ptr(&memcg_stock);
+       drain_stock(stock);
+       clear_bit(FLUSHING_CACHED_CHARGE, &stock->flags);
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(memcg_stock_ll, flags);
+ }
+ /*
+@@ -1770,7 +1771,7 @@ static void refill_stock(struct mem_cgro
+       struct memcg_stock_pcp *stock;
+       unsigned long flags;
+-      local_irq_save(flags);
++      local_lock_irqsave(memcg_stock_ll, flags);
+       stock = this_cpu_ptr(&memcg_stock);
+       if (stock->cached != memcg) { /* reset if necessary */
+@@ -1779,7 +1780,7 @@ static void refill_stock(struct mem_cgro
+       }
+       stock->nr_pages += nr_pages;
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(memcg_stock_ll, flags);
+ }
+ /*
diff --git a/patches/features/all/rt/cgroups-use-simple-wait-in-css_release.patch b/patches/features/all/rt/cgroups-use-simple-wait-in-css_release.patch
new file mode 100644 (file)
index 0000000..015e3f0
--- /dev/null
@@ -0,0 +1,87 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 13 Feb 2015 15:52:24 +0100
+Subject: cgroups: use simple wait in css_release()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+To avoid:
+|BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:914
+|in_atomic(): 1, irqs_disabled(): 0, pid: 92, name: rcuc/11
+|2 locks held by rcuc/11/92:
+| #0:  (rcu_callback){......}, at: [<ffffffff810e037e>] rcu_cpu_kthread+0x3de/0x940
+| #1:  (rcu_read_lock_sched){......}, at: [<ffffffff81328390>] percpu_ref_call_confirm_rcu+0x0/0xd0
+|Preemption disabled at:[<ffffffff813284e2>] percpu_ref_switch_to_atomic_rcu+0x82/0xc0
+|CPU: 11 PID: 92 Comm: rcuc/11 Not tainted 3.18.7-rt0+ #1
+| ffff8802398cdf80 ffff880235f0bc28 ffffffff815b3a12 0000000000000000
+| 0000000000000000 ffff880235f0bc48 ffffffff8109aa16 0000000000000000
+| ffff8802398cdf80 ffff880235f0bc78 ffffffff815b8dd4 000000000000df80
+|Call Trace:
+| [<ffffffff815b3a12>] dump_stack+0x4f/0x7c
+| [<ffffffff8109aa16>] __might_sleep+0x116/0x190
+| [<ffffffff815b8dd4>] rt_spin_lock+0x24/0x60
+| [<ffffffff8108d2cd>] queue_work_on+0x6d/0x1d0
+| [<ffffffff8110c881>] css_release+0x81/0x90
+| [<ffffffff8132844e>] percpu_ref_call_confirm_rcu+0xbe/0xd0
+| [<ffffffff813284e2>] percpu_ref_switch_to_atomic_rcu+0x82/0xc0
+| [<ffffffff810e03e5>] rcu_cpu_kthread+0x445/0x940
+| [<ffffffff81098a2d>] smpboot_thread_fn+0x18d/0x2d0
+| [<ffffffff810948d8>] kthread+0xe8/0x100
+| [<ffffffff815b9c3c>] ret_from_fork+0x7c/0xb0
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/cgroup-defs.h |    2 ++
+ kernel/cgroup.c             |    9 +++++----
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+--- a/include/linux/cgroup-defs.h
++++ b/include/linux/cgroup-defs.h
+@@ -16,6 +16,7 @@
+ #include <linux/percpu-refcount.h>
+ #include <linux/percpu-rwsem.h>
+ #include <linux/workqueue.h>
++#include <linux/swork.h>
+ #ifdef CONFIG_CGROUPS
+@@ -137,6 +138,7 @@ struct cgroup_subsys_state {
+       /* percpu_ref killing and RCU release */
+       struct rcu_head rcu_head;
+       struct work_struct destroy_work;
++      struct swork_event destroy_swork;
+ };
+ /*
+--- a/kernel/cgroup.c
++++ b/kernel/cgroup.c
+@@ -5040,10 +5040,10 @@ static void css_free_rcu_fn(struct rcu_h
+       queue_work(cgroup_destroy_wq, &css->destroy_work);
+ }
+-static void css_release_work_fn(struct work_struct *work)
++static void css_release_work_fn(struct swork_event *sev)
+ {
+       struct cgroup_subsys_state *css =
+-              container_of(work, struct cgroup_subsys_state, destroy_work);
++              container_of(sev, struct cgroup_subsys_state, destroy_swork);
+       struct cgroup_subsys *ss = css->ss;
+       struct cgroup *cgrp = css->cgroup;
+@@ -5086,8 +5086,8 @@ static void css_release(struct percpu_re
+       struct cgroup_subsys_state *css =
+               container_of(ref, struct cgroup_subsys_state, refcnt);
+-      INIT_WORK(&css->destroy_work, css_release_work_fn);
+-      queue_work(cgroup_destroy_wq, &css->destroy_work);
++      INIT_SWORK(&css->destroy_swork, css_release_work_fn);
++      swork_queue(&css->destroy_swork);
+ }
+ static void init_and_link_css(struct cgroup_subsys_state *css,
+@@ -5739,6 +5739,7 @@ static int __init cgroup_wq_init(void)
+        */
+       cgroup_destroy_wq = alloc_workqueue("cgroup_destroy", 0, 1);
+       BUG_ON(!cgroup_destroy_wq);
++      BUG_ON(swork_get());
+       /*
+        * Used to destroy pidlists and separate to serve as flush domain.
diff --git a/patches/features/all/rt/clockevents-drivers-timer-atmel-pit-fix-double-free_.patch b/patches/features/all/rt/clockevents-drivers-timer-atmel-pit-fix-double-free_.patch
new file mode 100644 (file)
index 0000000..487e27f
--- /dev/null
@@ -0,0 +1,46 @@
+From: Alexandre Belloni <alexandre.belloni@free-electrons.com>
+Date: Thu, 17 Mar 2016 21:09:43 +0100
+Subject: [PATCH] clockevents/drivers/timer-atmel-pit: fix double free_irq
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+clockevents_exchange_device() changes the state from detached to shutdown
+and so at that point the IRQ has not yet been requested.
+
+Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/clocksource/timer-atmel-pit.c |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/drivers/clocksource/timer-atmel-pit.c
++++ b/drivers/clocksource/timer-atmel-pit.c
+@@ -46,6 +46,7 @@ struct pit_data {
+       u32             cycle;
+       u32             cnt;
+       unsigned int    irq;
++      bool            irq_requested;
+       struct clk      *mck;
+ };
+@@ -96,7 +97,10 @@ static int pit_clkevt_shutdown(struct cl
+       /* disable irq, leaving the clocksource active */
+       pit_write(data->base, AT91_PIT_MR, (data->cycle - 1) | AT91_PIT_PITEN);
+-      free_irq(data->irq, data);
++      if (data->irq_requested) {
++              free_irq(data->irq, data);
++              data->irq_requested = false;
++      }
+       return 0;
+ }
+@@ -115,6 +119,8 @@ static int pit_clkevt_set_periodic(struc
+       if (ret)
+               panic(pr_fmt("Unable to setup IRQ\n"));
++      data->irq_requested = true;
++
+       /* update clocksource counter */
+       data->cnt += data->cycle * PIT_PICNT(pit_read(data->base, AT91_PIT_PIVR));
+       pit_write(data->base, AT91_PIT_MR,
diff --git a/patches/features/all/rt/clocksource-tclib-allow-higher-clockrates.patch b/patches/features/all/rt/clocksource-tclib-allow-higher-clockrates.patch
new file mode 100644 (file)
index 0000000..a77517f
--- /dev/null
@@ -0,0 +1,158 @@
+From: Benedikt Spranger <b.spranger@linutronix.de>
+Date: Mon, 8 Mar 2010 18:57:04 +0100
+Subject: clocksource: TCLIB: Allow higher clock rates for clock events
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+As default the TCLIB uses the 32KiHz base clock rate for clock events.
+Add a compile time selection to allow higher clock resulution.
+
+(fixed up by Sami Pietikäinen <Sami.Pietikainen@wapice.com>)
+
+Signed-off-by: Benedikt Spranger <b.spranger@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/clocksource/tcb_clksrc.c |   36 +++++++++++++++++++++---------------
+ drivers/misc/Kconfig             |   12 ++++++++++--
+ 2 files changed, 31 insertions(+), 17 deletions(-)
+
+--- a/drivers/clocksource/tcb_clksrc.c
++++ b/drivers/clocksource/tcb_clksrc.c
+@@ -23,8 +23,7 @@
+  *     this 32 bit free-running counter. the second channel is not used.
+  *
+  *   - The third channel may be used to provide a 16-bit clockevent
+- *     source, used in either periodic or oneshot mode.  This runs
+- *     at 32 KiHZ, and can handle delays of up to two seconds.
++ *     source, used in either periodic or oneshot mode.
+  *
+  * A boot clocksource and clockevent source are also currently needed,
+  * unless the relevant platforms (ARM/AT91, AVR32/AT32) are changed so
+@@ -75,6 +74,7 @@ struct tc_clkevt_device {
+       struct clock_event_device       clkevt;
+       struct clk                      *clk;
+       bool                            clk_enabled;
++      u32                             freq;
+       void __iomem                    *regs;
+ };
+@@ -83,13 +83,6 @@ static struct tc_clkevt_device *to_tc_cl
+       return container_of(clkevt, struct tc_clkevt_device, clkevt);
+ }
+-/* For now, we always use the 32K clock ... this optimizes for NO_HZ,
+- * because using one of the divided clocks would usually mean the
+- * tick rate can never be less than several dozen Hz (vs 0.5 Hz).
+- *
+- * A divided clock could be good for high resolution timers, since
+- * 30.5 usec resolution can seem "low".
+- */
+ static u32 timer_clock;
+ static void tc_clk_disable(struct clock_event_device *d)
+@@ -139,7 +132,7 @@ static int tc_set_oneshot(struct clock_e
+       tc_clk_enable(d);
+-      /* slow clock, count up to RC, then irq and stop */
++      /* count up to RC, then irq and stop */
+       __raw_writel(timer_clock | ATMEL_TC_CPCSTOP | ATMEL_TC_WAVE |
+                    ATMEL_TC_WAVESEL_UP_AUTO, regs + ATMEL_TC_REG(2, CMR));
+       __raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
+@@ -161,10 +154,10 @@ static int tc_set_periodic(struct clock_
+        */
+       tc_clk_enable(d);
+-      /* slow clock, count up to RC, then irq and restart */
++      /* count up to RC, then irq and restart */
+       __raw_writel(timer_clock | ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO,
+                    regs + ATMEL_TC_REG(2, CMR));
+-      __raw_writel((32768 + HZ / 2) / HZ, tcaddr + ATMEL_TC_REG(2, RC));
++      __raw_writel((tcd->freq + HZ / 2) / HZ, tcaddr + ATMEL_TC_REG(2, RC));
+       /* Enable clock and interrupts on RC compare */
+       __raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
+@@ -191,7 +184,11 @@ static struct tc_clkevt_device clkevt =
+               .features               = CLOCK_EVT_FEAT_PERIODIC |
+                                         CLOCK_EVT_FEAT_ONESHOT,
+               /* Should be lower than at91rm9200's system timer */
++#ifdef CONFIG_ATMEL_TCB_CLKSRC_USE_SLOW_CLOCK
+               .rating                 = 125,
++#else
++              .rating                 = 200,
++#endif
+               .set_next_event         = tc_next_event,
+               .set_state_shutdown     = tc_shutdown_clk_off,
+               .set_state_periodic     = tc_set_periodic,
+@@ -213,8 +210,9 @@ static irqreturn_t ch2_irq(int irq, void
+       return IRQ_NONE;
+ }
+-static int __init setup_clkevents(struct atmel_tc *tc, int clk32k_divisor_idx)
++static int __init setup_clkevents(struct atmel_tc *tc, int divisor_idx)
+ {
++      unsigned divisor = atmel_tc_divisors[divisor_idx];
+       int ret;
+       struct clk *t2_clk = tc->clk[2];
+       int irq = tc->irq[2];
+@@ -235,7 +233,11 @@ static int __init setup_clkevents(struct
+       clkevt.regs = tc->regs;
+       clkevt.clk = t2_clk;
+-      timer_clock = clk32k_divisor_idx;
++      timer_clock = divisor_idx;
++      if (!divisor)
++              clkevt.freq = 32768;
++      else
++              clkevt.freq = clk_get_rate(t2_clk) / divisor;
+       clkevt.clkevt.cpumask = cpumask_of(0);
+@@ -246,7 +248,7 @@ static int __init setup_clkevents(struct
+               return ret;
+       }
+-      clockevents_config_and_register(&clkevt.clkevt, 32768, 1, 0xffff);
++      clockevents_config_and_register(&clkevt.clkevt, clkevt.freq, 1, 0xffff);
+       return ret;
+ }
+@@ -383,7 +385,11 @@ static int __init tcb_clksrc_init(void)
+               goto err_disable_t1;
+       /* channel 2:  periodic and oneshot timer support */
++#ifdef CONFIG_ATMEL_TCB_CLKSRC_USE_SLOW_CLOCK
+       ret = setup_clkevents(tc, clk32k_divisor_idx);
++#else
++      ret = setup_clkevents(tc, best_divisor_idx);
++#endif
+       if (ret)
+               goto err_unregister_clksrc;
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -69,8 +69,7 @@ config ATMEL_TCB_CLKSRC
+         are combined to make a single 32-bit timer.
+         When GENERIC_CLOCKEVENTS is defined, the third timer channel
+-        may be used as a clock event device supporting oneshot mode
+-        (delays of up to two seconds) based on the 32 KiHz clock.
++        may be used as a clock event device supporting oneshot mode.
+ config ATMEL_TCB_CLKSRC_BLOCK
+       int
+@@ -84,6 +83,15 @@ config ATMEL_TCB_CLKSRC_BLOCK
+         TC can be used for other purposes, such as PWM generation and
+         interval timing.
++config ATMEL_TCB_CLKSRC_USE_SLOW_CLOCK
++      bool "TC Block use 32 KiHz clock"
++      depends on ATMEL_TCB_CLKSRC
++      default y
++      help
++        Select this to use 32 KiHz base clock rate as TC block clock
++        source for clock events.
++
++
+ config DUMMY_IRQ
+       tristate "Dummy IRQ handler"
+       default n
diff --git a/patches/features/all/rt/completion-use-simple-wait-queues.patch b/patches/features/all/rt/completion-use-simple-wait-queues.patch
new file mode 100644 (file)
index 0000000..7bc038e
--- /dev/null
@@ -0,0 +1,348 @@
+Subject: completion: Use simple wait queues
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 11 Jan 2013 11:23:51 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Completions have no long lasting callbacks and therefor do not need
+the complex waitqueue variant. Use simple waitqueues which reduces the
+contention on the waitqueue lock.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/net/wireless/intersil/orinoco/orinoco_usb.c |    2 -
+ drivers/usb/gadget/function/f_fs.c                  |    2 -
+ drivers/usb/gadget/legacy/inode.c                   |    4 +-
+ include/linux/completion.h                          |    9 ++---
+ include/linux/suspend.h                             |    6 +++
+ include/linux/swait.h                               |    1 
+ include/linux/uprobes.h                             |    1 
+ kernel/power/hibernate.c                            |    7 ++++
+ kernel/power/suspend.c                              |    5 +++
+ kernel/sched/completion.c                           |   32 ++++++++++----------
+ kernel/sched/core.c                                 |   10 +++++-
+ kernel/sched/swait.c                                |   20 ++++++++++++
+ 12 files changed, 72 insertions(+), 27 deletions(-)
+
+--- a/drivers/net/wireless/intersil/orinoco/orinoco_usb.c
++++ b/drivers/net/wireless/intersil/orinoco/orinoco_usb.c
+@@ -697,7 +697,7 @@ static void ezusb_req_ctx_wait(struct ez
+                       while (!ctx->done.done && msecs--)
+                               udelay(1000);
+               } else {
+-                      wait_event_interruptible(ctx->done.wait,
++                      swait_event_interruptible(ctx->done.wait,
+                                                ctx->done.done);
+               }
+               break;
+--- a/drivers/usb/gadget/function/f_fs.c
++++ b/drivers/usb/gadget/function/f_fs.c
+@@ -1593,7 +1593,7 @@ static void ffs_data_put(struct ffs_data
+               pr_info("%s(): freeing\n", __func__);
+               ffs_data_clear(ffs);
+               BUG_ON(waitqueue_active(&ffs->ev.waitq) ||
+-                     waitqueue_active(&ffs->ep0req_completion.wait));
++                     swait_active(&ffs->ep0req_completion.wait));
+               kfree(ffs->dev_name);
+               kfree(ffs);
+       }
+--- a/drivers/usb/gadget/legacy/inode.c
++++ b/drivers/usb/gadget/legacy/inode.c
+@@ -346,7 +346,7 @@ ep_io (struct ep_data *epdata, void *buf
+       spin_unlock_irq (&epdata->dev->lock);
+       if (likely (value == 0)) {
+-              value = wait_event_interruptible (done.wait, done.done);
++              value = swait_event_interruptible (done.wait, done.done);
+               if (value != 0) {
+                       spin_lock_irq (&epdata->dev->lock);
+                       if (likely (epdata->ep != NULL)) {
+@@ -355,7 +355,7 @@ ep_io (struct ep_data *epdata, void *buf
+                               usb_ep_dequeue (epdata->ep, epdata->req);
+                               spin_unlock_irq (&epdata->dev->lock);
+-                              wait_event (done.wait, done.done);
++                              swait_event (done.wait, done.done);
+                               if (epdata->status == -ECONNRESET)
+                                       epdata->status = -EINTR;
+                       } else {
+--- a/include/linux/completion.h
++++ b/include/linux/completion.h
+@@ -7,8 +7,7 @@
+  * Atomic wait-for-completion handler data structures.
+  * See kernel/sched/completion.c for details.
+  */
+-
+-#include <linux/wait.h>
++#include <linux/swait.h>
+ /*
+  * struct completion - structure used to maintain state for a "completion"
+@@ -24,11 +23,11 @@
+  */
+ struct completion {
+       unsigned int done;
+-      wait_queue_head_t wait;
++      struct swait_queue_head wait;
+ };
+ #define COMPLETION_INITIALIZER(work) \
+-      { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) }
++      { 0, __SWAIT_QUEUE_HEAD_INITIALIZER((work).wait) }
+ #define COMPLETION_INITIALIZER_ONSTACK(work) \
+       ({ init_completion(&work); work; })
+@@ -73,7 +72,7 @@ struct completion {
+ static inline void init_completion(struct completion *x)
+ {
+       x->done = 0;
+-      init_waitqueue_head(&x->wait);
++      init_swait_queue_head(&x->wait);
+ }
+ /**
+--- a/include/linux/suspend.h
++++ b/include/linux/suspend.h
+@@ -193,6 +193,12 @@ struct platform_freeze_ops {
+       void (*end)(void);
+ };
++#if defined(CONFIG_SUSPEND) || defined(CONFIG_HIBERNATION)
++extern bool pm_in_action;
++#else
++# define pm_in_action false
++#endif
++
+ #ifdef CONFIG_SUSPEND
+ /**
+  * suspend_set_ops - set platform dependent suspend operations
+--- a/include/linux/swait.h
++++ b/include/linux/swait.h
+@@ -87,6 +87,7 @@ static inline int swait_active(struct sw
+ extern void swake_up(struct swait_queue_head *q);
+ extern void swake_up_all(struct swait_queue_head *q);
+ extern void swake_up_locked(struct swait_queue_head *q);
++extern void swake_up_all_locked(struct swait_queue_head *q);
+ extern void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait);
+ extern void prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait, int state);
+--- a/include/linux/uprobes.h
++++ b/include/linux/uprobes.h
+@@ -27,6 +27,7 @@
+ #include <linux/errno.h>
+ #include <linux/rbtree.h>
+ #include <linux/types.h>
++#include <linux/wait.h>
+ struct vm_area_struct;
+ struct mm_struct;
+--- a/kernel/power/hibernate.c
++++ b/kernel/power/hibernate.c
+@@ -683,6 +683,10 @@ static int load_image_and_restore(void)
+       return error;
+ }
++#ifndef CONFIG_SUSPEND
++bool pm_in_action;
++#endif
++
+ /**
+  * hibernate - Carry out system hibernation, including saving the image.
+  */
+@@ -696,6 +700,8 @@ int hibernate(void)
+               return -EPERM;
+       }
++      pm_in_action = true;
++
+       lock_system_sleep();
+       /* The snapshot device should not be opened while we're running */
+       if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
+@@ -773,6 +779,7 @@ int hibernate(void)
+       atomic_inc(&snapshot_device_available);
+  Unlock:
+       unlock_system_sleep();
++      pm_in_action = false;
+       return error;
+ }
+--- a/kernel/power/suspend.c
++++ b/kernel/power/suspend.c
+@@ -531,6 +531,8 @@ static int enter_state(suspend_state_t s
+       return error;
+ }
++bool pm_in_action;
++
+ /**
+  * pm_suspend - Externally visible function for suspending the system.
+  * @state: System sleep state to enter.
+@@ -545,6 +547,8 @@ int pm_suspend(suspend_state_t state)
+       if (state <= PM_SUSPEND_ON || state >= PM_SUSPEND_MAX)
+               return -EINVAL;
++      pm_in_action = true;
++
+       error = enter_state(state);
+       if (error) {
+               suspend_stats.fail++;
+@@ -552,6 +556,7 @@ int pm_suspend(suspend_state_t state)
+       } else {
+               suspend_stats.success++;
+       }
++      pm_in_action = false;
+       return error;
+ }
+ EXPORT_SYMBOL(pm_suspend);
+--- a/kernel/sched/completion.c
++++ b/kernel/sched/completion.c
+@@ -30,10 +30,10 @@ void complete(struct completion *x)
+ {
+       unsigned long flags;
+-      spin_lock_irqsave(&x->wait.lock, flags);
++      raw_spin_lock_irqsave(&x->wait.lock, flags);
+       x->done++;
+-      __wake_up_locked(&x->wait, TASK_NORMAL, 1);
+-      spin_unlock_irqrestore(&x->wait.lock, flags);
++      swake_up_locked(&x->wait);
++      raw_spin_unlock_irqrestore(&x->wait.lock, flags);
+ }
+ EXPORT_SYMBOL(complete);
+@@ -50,10 +50,10 @@ void complete_all(struct completion *x)
+ {
+       unsigned long flags;
+-      spin_lock_irqsave(&x->wait.lock, flags);
++      raw_spin_lock_irqsave(&x->wait.lock, flags);
+       x->done += UINT_MAX/2;
+-      __wake_up_locked(&x->wait, TASK_NORMAL, 0);
+-      spin_unlock_irqrestore(&x->wait.lock, flags);
++      swake_up_all_locked(&x->wait);
++      raw_spin_unlock_irqrestore(&x->wait.lock, flags);
+ }
+ EXPORT_SYMBOL(complete_all);
+@@ -62,20 +62,20 @@ do_wait_for_common(struct completion *x,
+                  long (*action)(long), long timeout, int state)
+ {
+       if (!x->done) {
+-              DECLARE_WAITQUEUE(wait, current);
++              DECLARE_SWAITQUEUE(wait);
+-              __add_wait_queue_tail_exclusive(&x->wait, &wait);
++              __prepare_to_swait(&x->wait, &wait);
+               do {
+                       if (signal_pending_state(state, current)) {
+                               timeout = -ERESTARTSYS;
+                               break;
+                       }
+                       __set_current_state(state);
+-                      spin_unlock_irq(&x->wait.lock);
++                      raw_spin_unlock_irq(&x->wait.lock);
+                       timeout = action(timeout);
+-                      spin_lock_irq(&x->wait.lock);
++                      raw_spin_lock_irq(&x->wait.lock);
+               } while (!x->done && timeout);
+-              __remove_wait_queue(&x->wait, &wait);
++              __finish_swait(&x->wait, &wait);
+               if (!x->done)
+                       return timeout;
+       }
+@@ -89,9 +89,9 @@ static inline long __sched
+ {
+       might_sleep();
+-      spin_lock_irq(&x->wait.lock);
++      raw_spin_lock_irq(&x->wait.lock);
+       timeout = do_wait_for_common(x, action, timeout, state);
+-      spin_unlock_irq(&x->wait.lock);
++      raw_spin_unlock_irq(&x->wait.lock);
+       return timeout;
+ }
+@@ -277,12 +277,12 @@ bool try_wait_for_completion(struct comp
+       if (!READ_ONCE(x->done))
+               return 0;
+-      spin_lock_irqsave(&x->wait.lock, flags);
++      raw_spin_lock_irqsave(&x->wait.lock, flags);
+       if (!x->done)
+               ret = 0;
+       else
+               x->done--;
+-      spin_unlock_irqrestore(&x->wait.lock, flags);
++      raw_spin_unlock_irqrestore(&x->wait.lock, flags);
+       return ret;
+ }
+ EXPORT_SYMBOL(try_wait_for_completion);
+@@ -311,7 +311,7 @@ bool completion_done(struct completion *
+        * after it's acquired the lock.
+        */
+       smp_rmb();
+-      spin_unlock_wait(&x->wait.lock);
++      raw_spin_unlock_wait(&x->wait.lock);
+       return true;
+ }
+ EXPORT_SYMBOL(completion_done);
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -3323,7 +3323,10 @@ void migrate_disable(void)
+       }
+ #ifdef CONFIG_SCHED_DEBUG
+-      WARN_ON_ONCE(p->migrate_disable_atomic);
++      if (unlikely(p->migrate_disable_atomic)) {
++              tracing_off();
++              WARN_ON_ONCE(1);
++      }
+ #endif
+       if (p->migrate_disable) {
+@@ -3350,7 +3353,10 @@ void migrate_enable(void)
+       }
+ #ifdef CONFIG_SCHED_DEBUG
+-      WARN_ON_ONCE(p->migrate_disable_atomic);
++      if (unlikely(p->migrate_disable_atomic)) {
++              tracing_off();
++              WARN_ON_ONCE(1);
++      }
+ #endif
+       WARN_ON_ONCE(p->migrate_disable <= 0);
+--- a/kernel/sched/swait.c
++++ b/kernel/sched/swait.c
+@@ -1,5 +1,6 @@
+ #include <linux/sched.h>
+ #include <linux/swait.h>
++#include <linux/suspend.h>
+ void __init_swait_queue_head(struct swait_queue_head *q, const char *name,
+                            struct lock_class_key *key)
+@@ -29,6 +30,25 @@ void swake_up_locked(struct swait_queue_
+ }
+ EXPORT_SYMBOL(swake_up_locked);
++void swake_up_all_locked(struct swait_queue_head *q)
++{
++      struct swait_queue *curr;
++      int wakes = 0;
++
++      while (!list_empty(&q->task_list)) {
++
++              curr = list_first_entry(&q->task_list, typeof(*curr),
++                                      task_list);
++              wake_up_process(curr->task);
++              list_del_init(&curr->task_list);
++              wakes++;
++      }
++      if (pm_in_action)
++              return;
++      WARN(wakes > 2, "complete_all() with %d waiters\n", wakes);
++}
++EXPORT_SYMBOL(swake_up_all_locked);
++
+ void swake_up(struct swait_queue_head *q)
+ {
+       unsigned long flags;
diff --git a/patches/features/all/rt/cond-resched-lock-rt-tweak.patch b/patches/features/all/rt/cond-resched-lock-rt-tweak.patch
new file mode 100644 (file)
index 0000000..137bd69
--- /dev/null
@@ -0,0 +1,27 @@
+Subject: sched: Use the proper LOCK_OFFSET for cond_resched()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 17 Jul 2011 22:51:33 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+RT does not increment preempt count when a 'sleeping' spinlock is
+locked. Update PREEMPT_LOCK_OFFSET for that case.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/preempt.h |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/include/linux/preempt.h
++++ b/include/linux/preempt.h
+@@ -91,7 +91,11 @@
+ /*
+  * The preempt_count offset after spin_lock()
+  */
++#if !defined(CONFIG_PREEMPT_RT_FULL)
+ #define PREEMPT_LOCK_OFFSET   PREEMPT_DISABLE_OFFSET
++#else
++#define PREEMPT_LOCK_OFFSET   0
++#endif
+ /*
+  * The preempt_count offset needed for things like:
diff --git a/patches/features/all/rt/cond-resched-softirq-rt.patch b/patches/features/all/rt/cond-resched-softirq-rt.patch
new file mode 100644 (file)
index 0000000..5b68522
--- /dev/null
@@ -0,0 +1,53 @@
+Subject: sched: Take RT softirq semantics into account in cond_resched()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 14 Jul 2011 09:56:44 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The softirq semantics work different on -RT. There is no SOFTIRQ_MASK in
+the preemption counter which leads to the BUG_ON() statement in
+__cond_resched_softirq(). As for -RT it is enough to perform a "normal"
+schedule.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/sched.h |    4 ++++
+ kernel/sched/core.c   |    2 ++
+ 2 files changed, 6 insertions(+)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -3367,12 +3367,16 @@ extern int __cond_resched_lock(spinlock_
+       __cond_resched_lock(lock);                              \
+ })
++#ifndef CONFIG_PREEMPT_RT_FULL
+ extern int __cond_resched_softirq(void);
+ #define cond_resched_softirq() ({                                     \
+       ___might_sleep(__FILE__, __LINE__, SOFTIRQ_DISABLE_OFFSET);     \
+       __cond_resched_softirq();                                       \
+ })
++#else
++# define cond_resched_softirq()               cond_resched()
++#endif
+ static inline void cond_resched_rcu(void)
+ {
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -5050,6 +5050,7 @@ int __cond_resched_lock(spinlock_t *lock
+ }
+ EXPORT_SYMBOL(__cond_resched_lock);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ int __sched __cond_resched_softirq(void)
+ {
+       BUG_ON(!in_softirq());
+@@ -5063,6 +5064,7 @@ int __sched __cond_resched_softirq(void)
+       return 0;
+ }
+ EXPORT_SYMBOL(__cond_resched_softirq);
++#endif
+ /**
+  * yield - yield the current processor to other threads.
diff --git a/patches/features/all/rt/connector-cn_proc-Protect-send_msg-with-a-local-lock.patch b/patches/features/all/rt/connector-cn_proc-Protect-send_msg-with-a-local-lock.patch
new file mode 100644 (file)
index 0000000..6eb7369
--- /dev/null
@@ -0,0 +1,68 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sun, 16 Oct 2016 05:11:54 +0200
+Subject: [PATCH] connector/cn_proc: Protect send_msg() with a local lock
+ on RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+|BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:931
+|in_atomic(): 1, irqs_disabled(): 0, pid: 31807, name: sleep
+|Preemption disabled at:[<ffffffff8148019b>] proc_exit_connector+0xbb/0x140
+|
+|CPU: 4 PID: 31807 Comm: sleep Tainted: G        W   E   4.8.0-rt11-rt #106
+|Call Trace:
+| [<ffffffff813436cd>] dump_stack+0x65/0x88
+| [<ffffffff8109c425>] ___might_sleep+0xf5/0x180
+| [<ffffffff816406b0>] __rt_spin_lock+0x20/0x50
+| [<ffffffff81640978>] rt_read_lock+0x28/0x30
+| [<ffffffff8156e209>] netlink_broadcast_filtered+0x49/0x3f0
+| [<ffffffff81522621>] ? __kmalloc_reserve.isra.33+0x31/0x90
+| [<ffffffff8156e5cd>] netlink_broadcast+0x1d/0x20
+| [<ffffffff8147f57a>] cn_netlink_send_mult+0x19a/0x1f0
+| [<ffffffff8147f5eb>] cn_netlink_send+0x1b/0x20
+| [<ffffffff814801d8>] proc_exit_connector+0xf8/0x140
+| [<ffffffff81077f71>] do_exit+0x5d1/0xba0
+| [<ffffffff810785cc>] do_group_exit+0x4c/0xc0
+| [<ffffffff81078654>] SyS_exit_group+0x14/0x20
+| [<ffffffff81640a72>] entry_SYSCALL_64_fastpath+0x1a/0xa4
+
+Since ab8ed951080e ("connector: fix out-of-order cn_proc netlink message
+delivery") which is v4.7-rc6.
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/connector/cn_proc.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/connector/cn_proc.c
++++ b/drivers/connector/cn_proc.c
+@@ -32,6 +32,7 @@
+ #include <linux/pid_namespace.h>
+ #include <linux/cn_proc.h>
++#include <linux/locallock.h>
+ /*
+  * Size of a cn_msg followed by a proc_event structure.  Since the
+@@ -54,10 +55,11 @@ static struct cb_id cn_proc_event_id = {
+ /* proc_event_counts is used as the sequence number of the netlink message */
+ static DEFINE_PER_CPU(__u32, proc_event_counts) = { 0 };
++static DEFINE_LOCAL_IRQ_LOCK(send_msg_lock);
+ static inline void send_msg(struct cn_msg *msg)
+ {
+-      preempt_disable();
++      local_lock(send_msg_lock);
+       msg->seq = __this_cpu_inc_return(proc_event_counts) - 1;
+       ((struct proc_event *)msg->data)->cpu = smp_processor_id();
+@@ -70,7 +72,7 @@ static inline void send_msg(struct cn_ms
+        */
+       cn_netlink_send(msg, 0, CN_IDX_PROC, GFP_NOWAIT);
+-      preempt_enable();
++      local_unlock(send_msg_lock);
+ }
+ void proc_fork_connector(struct task_struct *task)
diff --git a/patches/features/all/rt/cpu-hotplug-Document-why-PREEMPT_RT-uses-a-spinlock.patch b/patches/features/all/rt/cpu-hotplug-Document-why-PREEMPT_RT-uses-a-spinlock.patch
new file mode 100644 (file)
index 0000000..e3abc90
--- /dev/null
@@ -0,0 +1,56 @@
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Thu, 5 Dec 2013 09:16:52 -0500
+Subject: cpu hotplug: Document why PREEMPT_RT uses a spinlock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The patch:
+
+    cpu: Make hotplug.lock a "sleeping" spinlock on RT
+
+    Tasks can block on hotplug.lock in pin_current_cpu(), but their
+    state might be != RUNNING. So the mutex wakeup will set the state
+    unconditionally to RUNNING. That might cause spurious unexpected
+    wakeups. We could provide a state preserving mutex_lock() function,
+    but this is semantically backwards. So instead we convert the
+    hotplug.lock() to a spinlock for RT, which has the state preserving
+    semantics already.
+
+Fixed a bug where the hotplug lock on PREEMPT_RT can be called after a
+task set its state to TASK_UNINTERRUPTIBLE and before it called
+schedule. If the hotplug_lock used a mutex, and there was contention,
+the current task's state would be turned to TASK_RUNNABLE and the
+schedule call will not sleep. This caused unexpected results.
+
+Although the patch had a description of the change, the code had no
+comments about it. This causes confusion to those that review the code,
+and as PREEMPT_RT is held in a quilt queue and not git, it's not as easy
+to see why a change was made. Even if it was in git, the code should
+still have a comment for something as subtle as this.
+
+Document the rational for using a spinlock on PREEMPT_RT in the hotplug
+lock code.
+
+Reported-by: Nicholas Mc Guire <der.herr@hofr.at>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/cpu.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -260,6 +260,14 @@ struct hotplug_pcp {
+       int grab_lock;
+       struct completion synced;
+ #ifdef CONFIG_PREEMPT_RT_FULL
++      /*
++       * Note, on PREEMPT_RT, the hotplug lock must save the state of
++       * the task, otherwise the mutex will cause the task to fail
++       * to sleep when required. (Because it's called from migrate_disable())
++       *
++       * The spinlock_t on PREEMPT_RT is a mutex that saves the task's
++       * state.
++       */
+       spinlock_t lock;
+ #else
+       struct mutex mutex;
diff --git a/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch b/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch
new file mode 100644 (file)
index 0000000..fba50d2
--- /dev/null
@@ -0,0 +1,115 @@
+Subject: cpu: Make hotplug.lock a "sleeping" spinlock on RT
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Fri, 02 Mar 2012 10:36:57 -0500
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Tasks can block on hotplug.lock in pin_current_cpu(), but their state
+might be != RUNNING. So the mutex wakeup will set the state
+unconditionally to RUNNING. That might cause spurious unexpected
+wakeups. We could provide a state preserving mutex_lock() function,
+but this is semantically backwards. So instead we convert the
+hotplug.lock() to a spinlock for RT, which has the state preserving
+semantics already.
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Cc: Carsten Emde <C.Emde@osadl.org>
+Cc: John Kacur <jkacur@redhat.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Clark Williams <clark.williams@gmail.com>
+
+Link: http://lkml.kernel.org/r/1330702617.25686.265.camel@gandalf.stny.rr.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/cpu.c |   32 +++++++++++++++++++++++++-------
+ 1 file changed, 25 insertions(+), 7 deletions(-)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -210,10 +210,16 @@ static int cpu_hotplug_disabled;
+ static struct {
+       struct task_struct *active_writer;
++
+       /* wait queue to wake up the active_writer */
+       wait_queue_head_t wq;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      /* Makes the lock keep the task's state */
++      spinlock_t lock;
++#else
+       /* verifies that no writer will get active while readers are active */
+       struct mutex lock;
++#endif
+       /*
+        * Also blocks the new readers during
+        * an ongoing cpu hotplug operation.
+@@ -226,12 +232,24 @@ static struct {
+ } cpu_hotplug = {
+       .active_writer = NULL,
+       .wq = __WAIT_QUEUE_HEAD_INITIALIZER(cpu_hotplug.wq),
++#ifdef CONFIG_PREEMPT_RT_FULL
++      .lock = __SPIN_LOCK_UNLOCKED(cpu_hotplug.lock),
++#else
+       .lock = __MUTEX_INITIALIZER(cpu_hotplug.lock),
++#endif
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+       .dep_map = STATIC_LOCKDEP_MAP_INIT("cpu_hotplug.dep_map", &cpu_hotplug.dep_map),
+ #endif
+ };
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define hotplug_lock()               rt_spin_lock__no_mg(&cpu_hotplug.lock)
++# define hotplug_unlock()     rt_spin_unlock__no_mg(&cpu_hotplug.lock)
++#else
++# define hotplug_lock()               mutex_lock(&cpu_hotplug.lock)
++# define hotplug_unlock()     mutex_unlock(&cpu_hotplug.lock)
++#endif
++
+ /* Lockdep annotations for get/put_online_cpus() and cpu_hotplug_begin/end() */
+ #define cpuhp_lock_acquire_read() lock_map_acquire_read(&cpu_hotplug.dep_map)
+ #define cpuhp_lock_acquire_tryread() \
+@@ -268,8 +286,8 @@ void pin_current_cpu(void)
+               return;
+       }
+       preempt_enable();
+-      mutex_lock(&cpu_hotplug.lock);
+-      mutex_unlock(&cpu_hotplug.lock);
++      hotplug_lock();
++      hotplug_unlock();
+       preempt_disable();
+       goto retry;
+ }
+@@ -342,9 +360,9 @@ void get_online_cpus(void)
+       if (cpu_hotplug.active_writer == current)
+               return;
+       cpuhp_lock_acquire_read();
+-      mutex_lock(&cpu_hotplug.lock);
++      hotplug_lock();
+       atomic_inc(&cpu_hotplug.refcount);
+-      mutex_unlock(&cpu_hotplug.lock);
++      hotplug_unlock();
+ }
+ EXPORT_SYMBOL_GPL(get_online_cpus);
+@@ -397,11 +415,11 @@ void cpu_hotplug_begin(void)
+       cpuhp_lock_acquire();
+       for (;;) {
+-              mutex_lock(&cpu_hotplug.lock);
++              hotplug_lock();
+               prepare_to_wait(&cpu_hotplug.wq, &wait, TASK_UNINTERRUPTIBLE);
+               if (likely(!atomic_read(&cpu_hotplug.refcount)))
+                               break;
+-              mutex_unlock(&cpu_hotplug.lock);
++              hotplug_unlock();
+               schedule();
+       }
+       finish_wait(&cpu_hotplug.wq, &wait);
+@@ -410,7 +428,7 @@ void cpu_hotplug_begin(void)
+ void cpu_hotplug_done(void)
+ {
+       cpu_hotplug.active_writer = NULL;
+-      mutex_unlock(&cpu_hotplug.lock);
++      hotplug_unlock();
+       cpuhp_lock_release();
+ }
diff --git a/patches/features/all/rt/cpu-rt-rework-cpu-down.patch b/patches/features/all/rt/cpu-rt-rework-cpu-down.patch
new file mode 100644 (file)
index 0000000..01227e9
--- /dev/null
@@ -0,0 +1,526 @@
+From: Steven Rostedt <srostedt@redhat.com>
+Date: Mon, 16 Jul 2012 08:07:43 +0000
+Subject: cpu/rt: Rework cpu down for PREEMPT_RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Bringing a CPU down is a pain with the PREEMPT_RT kernel because
+tasks can be preempted in many more places than in non-RT. In
+order to handle per_cpu variables, tasks may be pinned to a CPU
+for a while, and even sleep. But these tasks need to be off the CPU
+if that CPU is going down.
+
+Several synchronization methods have been tried, but when stressed
+they failed. This is a new approach.
+
+A sync_tsk thread is still created and tasks may still block on a
+lock when the CPU is going down, but how that works is a bit different.
+When cpu_down() starts, it will create the sync_tsk and wait on it
+to inform that current tasks that are pinned on the CPU are no longer
+pinned. But new tasks that are about to be pinned will still be allowed
+to do so at this time.
+
+Then the notifiers are called. Several notifiers will bring down tasks
+that will enter these locations. Some of these tasks will take locks
+of other tasks that are on the CPU. If we don't let those other tasks
+continue, but make them block until CPU down is done, the tasks that
+the notifiers are waiting on will never complete as they are waiting
+for the locks held by the tasks that are blocked.
+
+Thus we still let the task pin the CPU until the notifiers are done.
+After the notifiers run, we then make new tasks entering the pinned
+CPU sections grab a mutex and wait. This mutex is now a per CPU mutex
+in the hotplug_pcp descriptor.
+
+To help things along, a new function in the scheduler code is created
+called migrate_me(). This function will try to migrate the current task
+off the CPU this is going down if possible. When the sync_tsk is created,
+all tasks will then try to migrate off the CPU going down. There are
+several cases that this wont work, but it helps in most cases.
+
+After the notifiers are called and if a task can't migrate off but enters
+the pin CPU sections, it will be forced to wait on the hotplug_pcp mutex
+until the CPU down is complete. Then the scheduler will force the migration
+anyway.
+
+Also, I found that THREAD_BOUND need to also be accounted for in the
+pinned CPU, and the migrate_disable no longer treats them special.
+This helps fix issues with ksoftirqd and workqueue that unbind on CPU down.
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/sched.h |    7 +
+ kernel/cpu.c          |  236 +++++++++++++++++++++++++++++++++++++++++---------
+ kernel/sched/core.c   |   78 ++++++++++++++++
+ 3 files changed, 280 insertions(+), 41 deletions(-)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -2474,6 +2474,10 @@ extern void do_set_cpus_allowed(struct t
+ extern int set_cpus_allowed_ptr(struct task_struct *p,
+                               const struct cpumask *new_mask);
++int migrate_me(void);
++void tell_sched_cpu_down_begin(int cpu);
++void tell_sched_cpu_down_done(int cpu);
++
+ #else
+ static inline void do_set_cpus_allowed(struct task_struct *p,
+                                     const struct cpumask *new_mask)
+@@ -2486,6 +2490,9 @@ static inline int set_cpus_allowed_ptr(s
+               return -EINVAL;
+       return 0;
+ }
++static inline int migrate_me(void) { return 0; }
++static inline void tell_sched_cpu_down_begin(int cpu) { }
++static inline void tell_sched_cpu_down_done(int cpu) { }
+ #endif
+ #ifdef CONFIG_NO_HZ_COMMON
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -210,16 +210,10 @@ static int cpu_hotplug_disabled;
+ static struct {
+       struct task_struct *active_writer;
+-
+       /* wait queue to wake up the active_writer */
+       wait_queue_head_t wq;
+-#ifdef CONFIG_PREEMPT_RT_FULL
+-      /* Makes the lock keep the task's state */
+-      spinlock_t lock;
+-#else
+       /* verifies that no writer will get active while readers are active */
+       struct mutex lock;
+-#endif
+       /*
+        * Also blocks the new readers during
+        * an ongoing cpu hotplug operation.
+@@ -232,24 +226,12 @@ static struct {
+ } cpu_hotplug = {
+       .active_writer = NULL,
+       .wq = __WAIT_QUEUE_HEAD_INITIALIZER(cpu_hotplug.wq),
+-#ifdef CONFIG_PREEMPT_RT_FULL
+-      .lock = __SPIN_LOCK_UNLOCKED(cpu_hotplug.lock),
+-#else
+       .lock = __MUTEX_INITIALIZER(cpu_hotplug.lock),
+-#endif
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+       .dep_map = STATIC_LOCKDEP_MAP_INIT("cpu_hotplug.dep_map", &cpu_hotplug.dep_map),
+ #endif
+ };
+-#ifdef CONFIG_PREEMPT_RT_FULL
+-# define hotplug_lock()               rt_spin_lock__no_mg(&cpu_hotplug.lock)
+-# define hotplug_unlock()     rt_spin_unlock__no_mg(&cpu_hotplug.lock)
+-#else
+-# define hotplug_lock()               mutex_lock(&cpu_hotplug.lock)
+-# define hotplug_unlock()     mutex_unlock(&cpu_hotplug.lock)
+-#endif
+-
+ /* Lockdep annotations for get/put_online_cpus() and cpu_hotplug_begin/end() */
+ #define cpuhp_lock_acquire_read() lock_map_acquire_read(&cpu_hotplug.dep_map)
+ #define cpuhp_lock_acquire_tryread() \
+@@ -257,12 +239,42 @@ static struct {
+ #define cpuhp_lock_acquire()      lock_map_acquire(&cpu_hotplug.dep_map)
+ #define cpuhp_lock_release()      lock_map_release(&cpu_hotplug.dep_map)
++/**
++ * hotplug_pcp        - per cpu hotplug descriptor
++ * @unplug:   set when pin_current_cpu() needs to sync tasks
++ * @sync_tsk: the task that waits for tasks to finish pinned sections
++ * @refcount: counter of tasks in pinned sections
++ * @grab_lock:        set when the tasks entering pinned sections should wait
++ * @synced:   notifier for @sync_tsk to tell cpu_down it's finished
++ * @mutex:    the mutex to make tasks wait (used when @grab_lock is true)
++ * @mutex_init:       zero if the mutex hasn't been initialized yet.
++ *
++ * Although @unplug and @sync_tsk may point to the same task, the @unplug
++ * is used as a flag and still exists after @sync_tsk has exited and
++ * @sync_tsk set to NULL.
++ */
+ struct hotplug_pcp {
+       struct task_struct *unplug;
++      struct task_struct *sync_tsk;
+       int refcount;
++      int grab_lock;
+       struct completion synced;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      spinlock_t lock;
++#else
++      struct mutex mutex;
++#endif
++      int mutex_init;
+ };
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define hotplug_lock(hp) rt_spin_lock__no_mg(&(hp)->lock)
++# define hotplug_unlock(hp) rt_spin_unlock__no_mg(&(hp)->lock)
++#else
++# define hotplug_lock(hp) mutex_lock(&(hp)->mutex)
++# define hotplug_unlock(hp) mutex_unlock(&(hp)->mutex)
++#endif
++
+ static DEFINE_PER_CPU(struct hotplug_pcp, hotplug_pcp);
+ /**
+@@ -276,18 +288,39 @@ static DEFINE_PER_CPU(struct hotplug_pcp
+ void pin_current_cpu(void)
+ {
+       struct hotplug_pcp *hp;
++      int force = 0;
+ retry:
+       hp = this_cpu_ptr(&hotplug_pcp);
+-      if (!hp->unplug || hp->refcount || preempt_count() > 1 ||
++      if (!hp->unplug || hp->refcount || force || preempt_count() > 1 ||
+           hp->unplug == current) {
+               hp->refcount++;
+               return;
+       }
+-      preempt_enable();
+-      hotplug_lock();
+-      hotplug_unlock();
++      if (hp->grab_lock) {
++              preempt_enable();
++              hotplug_lock(hp);
++              hotplug_unlock(hp);
++      } else {
++              preempt_enable();
++              /*
++               * Try to push this task off of this CPU.
++               */
++              if (!migrate_me()) {
++                      preempt_disable();
++                      hp = this_cpu_ptr(&hotplug_pcp);
++                      if (!hp->grab_lock) {
++                              /*
++                               * Just let it continue it's already pinned
++                               * or about to sleep.
++                               */
++                              force = 1;
++                              goto retry;
++                      }
++                      preempt_enable();
++              }
++      }
+       preempt_disable();
+       goto retry;
+ }
+@@ -308,26 +341,84 @@ void unpin_current_cpu(void)
+               wake_up_process(hp->unplug);
+ }
+-/*
+- * FIXME: Is this really correct under all circumstances ?
+- */
++static void wait_for_pinned_cpus(struct hotplug_pcp *hp)
++{
++      set_current_state(TASK_UNINTERRUPTIBLE);
++      while (hp->refcount) {
++              schedule_preempt_disabled();
++              set_current_state(TASK_UNINTERRUPTIBLE);
++      }
++}
++
+ static int sync_unplug_thread(void *data)
+ {
+       struct hotplug_pcp *hp = data;
+       preempt_disable();
+       hp->unplug = current;
++      wait_for_pinned_cpus(hp);
++
++      /*
++       * This thread will synchronize the cpu_down() with threads
++       * that have pinned the CPU. When the pinned CPU count reaches
++       * zero, we inform the cpu_down code to continue to the next step.
++       */
+       set_current_state(TASK_UNINTERRUPTIBLE);
+-      while (hp->refcount) {
+-              schedule_preempt_disabled();
++      preempt_enable();
++      complete(&hp->synced);
++
++      /*
++       * If all succeeds, the next step will need tasks to wait till
++       * the CPU is offline before continuing. To do this, the grab_lock
++       * is set and tasks going into pin_current_cpu() will block on the
++       * mutex. But we still need to wait for those that are already in
++       * pinned CPU sections. If the cpu_down() failed, the kthread_should_stop()
++       * will kick this thread out.
++       */
++      while (!hp->grab_lock && !kthread_should_stop()) {
++              schedule();
++              set_current_state(TASK_UNINTERRUPTIBLE);
++      }
++
++      /* Make sure grab_lock is seen before we see a stale completion */
++      smp_mb();
++
++      /*
++       * Now just before cpu_down() enters stop machine, we need to make
++       * sure all tasks that are in pinned CPU sections are out, and new
++       * tasks will now grab the lock, keeping them from entering pinned
++       * CPU sections.
++       */
++      if (!kthread_should_stop()) {
++              preempt_disable();
++              wait_for_pinned_cpus(hp);
++              preempt_enable();
++              complete(&hp->synced);
++      }
++
++      set_current_state(TASK_UNINTERRUPTIBLE);
++      while (!kthread_should_stop()) {
++              schedule();
+               set_current_state(TASK_UNINTERRUPTIBLE);
+       }
+       set_current_state(TASK_RUNNING);
+-      preempt_enable();
+-      complete(&hp->synced);
++
++      /*
++       * Force this thread off this CPU as it's going down and
++       * we don't want any more work on this CPU.
++       */
++      current->flags &= ~PF_NO_SETAFFINITY;
++      do_set_cpus_allowed(current, cpu_present_mask);
++      migrate_me();
+       return 0;
+ }
++static void __cpu_unplug_sync(struct hotplug_pcp *hp)
++{
++      wake_up_process(hp->sync_tsk);
++      wait_for_completion(&hp->synced);
++}
++
+ /*
+  * Start the sync_unplug_thread on the target cpu and wait for it to
+  * complete.
+@@ -335,23 +426,83 @@ static int sync_unplug_thread(void *data
+ static int cpu_unplug_begin(unsigned int cpu)
+ {
+       struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
+-      struct task_struct *tsk;
++      int err;
++
++      /* Protected by cpu_hotplug.lock */
++      if (!hp->mutex_init) {
++#ifdef CONFIG_PREEMPT_RT_FULL
++              spin_lock_init(&hp->lock);
++#else
++              mutex_init(&hp->mutex);
++#endif
++              hp->mutex_init = 1;
++      }
++
++      /* Inform the scheduler to migrate tasks off this CPU */
++      tell_sched_cpu_down_begin(cpu);
+       init_completion(&hp->synced);
+-      tsk = kthread_create(sync_unplug_thread, hp, "sync_unplug/%d", cpu);
+-      if (IS_ERR(tsk))
+-              return (PTR_ERR(tsk));
+-      kthread_bind(tsk, cpu);
+-      wake_up_process(tsk);
+-      wait_for_completion(&hp->synced);
++
++      hp->sync_tsk = kthread_create(sync_unplug_thread, hp, "sync_unplug/%d", cpu);
++      if (IS_ERR(hp->sync_tsk)) {
++              err = PTR_ERR(hp->sync_tsk);
++              hp->sync_tsk = NULL;
++              return err;
++      }
++      kthread_bind(hp->sync_tsk, cpu);
++
++      /*
++       * Wait for tasks to get out of the pinned sections,
++       * it's still OK if new tasks enter. Some CPU notifiers will
++       * wait for tasks that are going to enter these sections and
++       * we must not have them block.
++       */
++      __cpu_unplug_sync(hp);
++
+       return 0;
+ }
++static void cpu_unplug_sync(unsigned int cpu)
++{
++      struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
++
++      init_completion(&hp->synced);
++      /* The completion needs to be initialzied before setting grab_lock */
++      smp_wmb();
++
++      /* Grab the mutex before setting grab_lock */
++      hotplug_lock(hp);
++      hp->grab_lock = 1;
++
++      /*
++       * The CPU notifiers have been completed.
++       * Wait for tasks to get out of pinned CPU sections and have new
++       * tasks block until the CPU is completely down.
++       */
++      __cpu_unplug_sync(hp);
++
++      /* All done with the sync thread */
++      kthread_stop(hp->sync_tsk);
++      hp->sync_tsk = NULL;
++}
++
+ static void cpu_unplug_done(unsigned int cpu)
+ {
+       struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
+       hp->unplug = NULL;
++      /* Let all tasks know cpu unplug is finished before cleaning up */
++      smp_wmb();
++
++      if (hp->sync_tsk)
++              kthread_stop(hp->sync_tsk);
++
++      if (hp->grab_lock) {
++              hotplug_unlock(hp);
++              /* protected by cpu_hotplug.lock */
++              hp->grab_lock = 0;
++      }
++      tell_sched_cpu_down_done(cpu);
+ }
+ void get_online_cpus(void)
+@@ -360,9 +511,9 @@ void get_online_cpus(void)
+       if (cpu_hotplug.active_writer == current)
+               return;
+       cpuhp_lock_acquire_read();
+-      hotplug_lock();
++      mutex_lock(&cpu_hotplug.lock);
+       atomic_inc(&cpu_hotplug.refcount);
+-      hotplug_unlock();
++      mutex_unlock(&cpu_hotplug.lock);
+ }
+ EXPORT_SYMBOL_GPL(get_online_cpus);
+@@ -415,11 +566,11 @@ void cpu_hotplug_begin(void)
+       cpuhp_lock_acquire();
+       for (;;) {
+-              hotplug_lock();
++              mutex_lock(&cpu_hotplug.lock);
+               prepare_to_wait(&cpu_hotplug.wq, &wait, TASK_UNINTERRUPTIBLE);
+               if (likely(!atomic_read(&cpu_hotplug.refcount)))
+                               break;
+-              hotplug_unlock();
++              mutex_unlock(&cpu_hotplug.lock);
+               schedule();
+       }
+       finish_wait(&cpu_hotplug.wq, &wait);
+@@ -428,7 +579,7 @@ void cpu_hotplug_begin(void)
+ void cpu_hotplug_done(void)
+ {
+       cpu_hotplug.active_writer = NULL;
+-      hotplug_unlock();
++      mutex_unlock(&cpu_hotplug.lock);
+       cpuhp_lock_release();
+ }
+@@ -907,6 +1058,9 @@ static int takedown_cpu(unsigned int cpu
+       kthread_park(per_cpu_ptr(&cpuhp_state, cpu)->thread);
+       smpboot_park_threads(cpu);
++      /* Notifiers are done. Don't let any more tasks pin this CPU. */
++      cpu_unplug_sync(cpu);
++
+       /*
+        * Prevent irq alloc/free while the dying cpu reorganizes the
+        * interrupt affinities.
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -1140,6 +1140,84 @@ void do_set_cpus_allowed(struct task_str
+               set_curr_task(rq, p);
+ }
++static DEFINE_PER_CPU(struct cpumask, sched_cpumasks);
++static DEFINE_MUTEX(sched_down_mutex);
++static cpumask_t sched_down_cpumask;
++
++void tell_sched_cpu_down_begin(int cpu)
++{
++      mutex_lock(&sched_down_mutex);
++      cpumask_set_cpu(cpu, &sched_down_cpumask);
++      mutex_unlock(&sched_down_mutex);
++}
++
++void tell_sched_cpu_down_done(int cpu)
++{
++      mutex_lock(&sched_down_mutex);
++      cpumask_clear_cpu(cpu, &sched_down_cpumask);
++      mutex_unlock(&sched_down_mutex);
++}
++
++/**
++ * migrate_me - try to move the current task off this cpu
++ *
++ * Used by the pin_current_cpu() code to try to get tasks
++ * to move off the current CPU as it is going down.
++ * It will only move the task if the task isn't pinned to
++ * the CPU (with migrate_disable, affinity or NO_SETAFFINITY)
++ * and the task has to be in a RUNNING state. Otherwise the
++ * movement of the task will wake it up (change its state
++ * to running) when the task did not expect it.
++ *
++ * Returns 1 if it succeeded in moving the current task
++ *         0 otherwise.
++ */
++int migrate_me(void)
++{
++      struct task_struct *p = current;
++      struct migration_arg arg;
++      struct cpumask *cpumask;
++      struct cpumask *mask;
++      unsigned int dest_cpu;
++      struct rq_flags rf;
++      struct rq *rq;
++
++      /*
++       * We can not migrate tasks bounded to a CPU or tasks not
++       * running. The movement of the task will wake it up.
++       */
++      if (p->flags & PF_NO_SETAFFINITY || p->state)
++              return 0;
++
++      mutex_lock(&sched_down_mutex);
++      rq = task_rq_lock(p, &rf);
++
++      cpumask = this_cpu_ptr(&sched_cpumasks);
++      mask = &p->cpus_allowed;
++
++      cpumask_andnot(cpumask, mask, &sched_down_cpumask);
++
++      if (!cpumask_weight(cpumask)) {
++              /* It's only on this CPU? */
++              task_rq_unlock(rq, p, &rf);
++              mutex_unlock(&sched_down_mutex);
++              return 0;
++      }
++
++      dest_cpu = cpumask_any_and(cpu_active_mask, cpumask);
++
++      arg.task = p;
++      arg.dest_cpu = dest_cpu;
++
++      task_rq_unlock(rq, p, &rf);
++
++      stop_one_cpu(cpu_of(rq), migration_cpu_stop, &arg);
++      tlb_migrate_finish(p->mm);
++      mutex_unlock(&sched_down_mutex);
++
++      return 1;
++}
++
+ /*
+  * Change a given task's CPU affinity. Migrate the thread to a
+  * proper CPU and schedule it away if the CPU it's executing on
diff --git a/patches/features/all/rt/cpu_chill-Add-a-UNINTERRUPTIBLE-hrtimer_nanosleep.patch b/patches/features/all/rt/cpu_chill-Add-a-UNINTERRUPTIBLE-hrtimer_nanosleep.patch
new file mode 100644 (file)
index 0000000..9c36a65
--- /dev/null
@@ -0,0 +1,107 @@
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Tue, 4 Mar 2014 12:28:32 -0500
+Subject: cpu_chill: Add a UNINTERRUPTIBLE hrtimer_nanosleep
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+We hit another bug that was caused by switching cpu_chill() from
+msleep() to hrtimer_nanosleep().
+
+This time it is a livelock. The problem is that hrtimer_nanosleep()
+calls schedule with the state == TASK_INTERRUPTIBLE. But these means
+that if a signal is pending, the scheduler wont schedule, and will
+simply change the current task state back to TASK_RUNNING. This
+nullifies the whole point of cpu_chill() in the first place. That is,
+if a task is spinning on a try_lock() and it preempted the owner of the
+lock, if it has a signal pending, it will never give up the CPU to let
+the owner of the lock run.
+
+I made a static function __hrtimer_nanosleep() that takes a fifth
+parameter "state", which determines the task state of that the
+nanosleep() will be in. The normal hrtimer_nanosleep() will act the
+same, but cpu_chill() will call the __hrtimer_nanosleep() directly with
+the TASK_UNINTERRUPTIBLE state.
+
+cpu_chill() only cares that the first sleep happens, and does not care
+about the state of the restart schedule (in hrtimer_nanosleep_restart).
+
+
+Reported-by: Ulrich Obergfell <uobergfe@redhat.com>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/time/hrtimer.c |   25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
+
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -1649,12 +1649,13 @@ void hrtimer_init_sleeper(struct hrtimer
+ }
+ EXPORT_SYMBOL_GPL(hrtimer_init_sleeper);
+-static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode)
++static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode,
++                              unsigned long state)
+ {
+       hrtimer_init_sleeper(t, current);
+       do {
+-              set_current_state(TASK_INTERRUPTIBLE);
++              set_current_state(state);
+               hrtimer_start_expires(&t->timer, mode);
+               if (likely(t->task))
+@@ -1696,7 +1697,8 @@ long __sched hrtimer_nanosleep_restart(s
+                               HRTIMER_MODE_ABS);
+       hrtimer_set_expires_tv64(&t.timer, restart->nanosleep.expires);
+-      if (do_nanosleep(&t, HRTIMER_MODE_ABS))
++      /* cpu_chill() does not care about restart state. */
++      if (do_nanosleep(&t, HRTIMER_MODE_ABS, TASK_INTERRUPTIBLE))
+               goto out;
+       rmtp = restart->nanosleep.rmtp;
+@@ -1713,8 +1715,10 @@ long __sched hrtimer_nanosleep_restart(s
+       return ret;
+ }
+-long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp,
+-                     const enum hrtimer_mode mode, const clockid_t clockid)
++static long
++__hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp,
++                  const enum hrtimer_mode mode, const clockid_t clockid,
++                  unsigned long state)
+ {
+       struct restart_block *restart;
+       struct hrtimer_sleeper t;
+@@ -1727,7 +1731,7 @@ long hrtimer_nanosleep(struct timespec *
+       hrtimer_init_on_stack(&t.timer, clockid, mode);
+       hrtimer_set_expires_range_ns(&t.timer, timespec_to_ktime(*rqtp), slack);
+-      if (do_nanosleep(&t, mode))
++      if (do_nanosleep(&t, mode, state))
+               goto out;
+       /* Absolute timers do not update the rmtp value and restart: */
+@@ -1754,6 +1758,12 @@ long hrtimer_nanosleep(struct timespec *
+       return ret;
+ }
++long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp,
++                     const enum hrtimer_mode mode, const clockid_t clockid)
++{
++      return __hrtimer_nanosleep(rqtp, rmtp, mode, clockid, TASK_INTERRUPTIBLE);
++}
++
+ SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
+               struct timespec __user *, rmtp)
+ {
+@@ -1780,7 +1790,8 @@ void cpu_chill(void)
+       unsigned int freeze_flag = current->flags & PF_NOFREEZE;
+       current->flags |= PF_NOFREEZE;
+-      hrtimer_nanosleep(&tu, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
++      __hrtimer_nanosleep(&tu, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC,
++                          TASK_UNINTERRUPTIBLE);
+       if (!freeze_flag)
+               current->flags &= ~PF_NOFREEZE;
+ }
diff --git a/patches/features/all/rt/cpu_down_move_migrate_enable_back.patch b/patches/features/all/rt/cpu_down_move_migrate_enable_back.patch
new file mode 100644 (file)
index 0000000..8efdc1e
--- /dev/null
@@ -0,0 +1,53 @@
+From:  Tiejun Chen <tiejun.chen@windriver.com>
+Subject: cpu_down: move migrate_enable() back
+Date:  Thu, 7 Nov 2013 10:06:07 +0800
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Commit 08c1ab68, "hotplug-use-migrate-disable.patch", intends to
+use migrate_enable()/migrate_disable() to replace that combination
+of preempt_enable() and preempt_disable(), but actually in
+!CONFIG_PREEMPT_RT_FULL case, migrate_enable()/migrate_disable()
+are still equal to preempt_enable()/preempt_disable(). So that
+followed cpu_hotplug_begin()/cpu_unplug_begin(cpu) would go schedule()
+to trigger schedule_debug() like this:
+
+_cpu_down()
+       |
+       + migrate_disable() = preempt_disable()
+       |
+       + cpu_hotplug_begin() or cpu_unplug_begin()
+               |
+               + schedule()
+                       |
+                       + __schedule()
+                               |
+                               + preempt_disable();
+                               |
+                               + __schedule_bug() is true!
+
+So we should move migrate_enable() as the original scheme.
+
+
+Signed-off-by: Tiejun Chen <tiejun.chen@windriver.com>
+---
+ kernel/cpu.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -1195,6 +1195,7 @@ static int __ref _cpu_down(unsigned int
+               goto restore_cpus;
+       }
++      migrate_enable();
+       cpu_hotplug_begin();
+       ret = cpu_unplug_begin(cpu);
+       if (ret) {
+@@ -1242,7 +1243,6 @@ static int __ref _cpu_down(unsigned int
+       cpu_unplug_done(cpu);
+ out_cancel:
+       cpu_hotplug_done();
+-      migrate_enable();
+       /* This post dead nonsense must die */
+       if (!ret && hasdied)
+               cpu_notify_nofail(CPU_POST_DEAD, cpu);
diff --git a/patches/features/all/rt/cpufreq-drop-K8-s-driver-from-beeing-selected.patch b/patches/features/all/rt/cpufreq-drop-K8-s-driver-from-beeing-selected.patch
new file mode 100644 (file)
index 0000000..bd9a872
--- /dev/null
@@ -0,0 +1,33 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 9 Apr 2015 15:23:01 +0200
+Subject: cpufreq: drop K8's driver from beeing selected
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Ralf posted a picture of a backtrace from
+
+| powernowk8_target_fn() -> transition_frequency_fidvid() and then at the
+| end:
+| 932         policy = cpufreq_cpu_get(smp_processor_id());
+| 933         cpufreq_cpu_put(policy);
+
+crashing the system on -RT. I assumed that policy was a NULL pointer but
+was rulled out. Since Ralf can't do any more investigations on this and
+I have no machine with this, I simply switch it off.
+
+Reported-by:  Ralf Mardorf <ralf.mardorf@alice-dsl.net>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/cpufreq/Kconfig.x86 |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/cpufreq/Kconfig.x86
++++ b/drivers/cpufreq/Kconfig.x86
+@@ -124,7 +124,7 @@ config X86_POWERNOW_K7_ACPI
+ config X86_POWERNOW_K8
+       tristate "AMD Opteron/Athlon64 PowerNow!"
+-      depends on ACPI && ACPI_PROCESSOR && X86_ACPI_CPUFREQ
++      depends on ACPI && ACPI_PROCESSOR && X86_ACPI_CPUFREQ && !PREEMPT_RT_BASE
+       help
+         This adds the CPUFreq driver for K8/early Opteron/Athlon64 processors.
+         Support for K10 and newer processors is now in acpi-cpufreq.
diff --git a/patches/features/all/rt/cpumask-disable-offstack-on-rt.patch b/patches/features/all/rt/cpumask-disable-offstack-on-rt.patch
new file mode 100644 (file)
index 0000000..46d5d35
--- /dev/null
@@ -0,0 +1,68 @@
+Subject: cpumask: Disable CONFIG_CPUMASK_OFFSTACK for RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 14 Dec 2011 01:03:49 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+There are "valid" GFP_ATOMIC allocations such as
+
+|BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:931
+|in_atomic(): 1, irqs_disabled(): 0, pid: 2130, name: tar
+|1 lock held by tar/2130:
+| #0:  (&mm->mmap_sem){++++++}, at: [<ffffffff811d4e89>] SyS_brk+0x39/0x190
+|Preemption disabled at:[<ffffffff81063048>] flush_tlb_mm_range+0x28/0x350
+|
+|CPU: 1 PID: 2130 Comm: tar Tainted: G        W       4.8.2-rt2+ #747
+|Call Trace:
+| [<ffffffff814d52dc>] dump_stack+0x86/0xca
+| [<ffffffff810a26fb>] ___might_sleep+0x14b/0x240
+| [<ffffffff819bc1d4>] rt_spin_lock+0x24/0x60
+| [<ffffffff81194fba>] get_page_from_freelist+0x83a/0x11b0
+| [<ffffffff81195e8b>] __alloc_pages_nodemask+0x15b/0x1190
+| [<ffffffff811f0b81>] alloc_pages_current+0xa1/0x1f0
+| [<ffffffff811f7df5>] new_slab+0x3e5/0x690
+| [<ffffffff811fb0d5>] ___slab_alloc+0x495/0x660
+| [<ffffffff811fb311>] __slab_alloc.isra.79+0x71/0xc0
+| [<ffffffff811fb447>] __kmalloc_node+0xe7/0x240
+| [<ffffffff814d4ee0>] alloc_cpumask_var_node+0x20/0x50
+| [<ffffffff814d4f3e>] alloc_cpumask_var+0xe/0x10
+| [<ffffffff810430c1>] native_send_call_func_ipi+0x21/0x130
+| [<ffffffff8111c13f>] smp_call_function_many+0x22f/0x370
+| [<ffffffff81062b64>] native_flush_tlb_others+0x1a4/0x3a0
+| [<ffffffff8106309b>] flush_tlb_mm_range+0x7b/0x350
+| [<ffffffff811c88e2>] tlb_flush_mmu_tlbonly+0x62/0xd0
+| [<ffffffff811c9af4>] tlb_finish_mmu+0x14/0x50
+| [<ffffffff811d1c84>] unmap_region+0xe4/0x110
+| [<ffffffff811d3db3>] do_munmap+0x293/0x470
+| [<ffffffff811d4f8c>] SyS_brk+0x13c/0x190
+| [<ffffffff810032e2>] do_fast_syscall_32+0xb2/0x2f0
+| [<ffffffff819be181>] entry_SYSENTER_compat+0x51/0x60
+
+which forbid allocations at run-time.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/x86/Kconfig |    2 +-
+ lib/Kconfig      |    1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -900,7 +900,7 @@ config IOMMU_HELPER
+ config MAXSMP
+       bool "Enable Maximum number of SMP Processors and NUMA Nodes"
+       depends on X86_64 && SMP && DEBUG_KERNEL
+-      select CPUMASK_OFFSTACK
++      select CPUMASK_OFFSTACK if !PREEMPT_RT_FULL
+       ---help---
+         Enable maximum number of CPUS and NUMA Nodes for this architecture.
+         If unsure, say N.
+--- a/lib/Kconfig
++++ b/lib/Kconfig
+@@ -400,6 +400,7 @@ config CHECK_SIGNATURE
+ config CPUMASK_OFFSTACK
+       bool "Force CPU masks off stack" if DEBUG_PER_CPU_MAPS
++      depends on !PREEMPT_RT_FULL
+       help
+         Use dynamic allocation for cpumask_var_t, instead of putting
+         them on the stack.  This is a bit more expensive, but avoids
diff --git a/patches/features/all/rt/cpuset-Convert-callback_lock-to-raw_spinlock_t.patch b/patches/features/all/rt/cpuset-Convert-callback_lock-to-raw_spinlock_t.patch
new file mode 100644 (file)
index 0000000..0b93ec5
--- /dev/null
@@ -0,0 +1,287 @@
+From: Mike Galbraith <efault@gmx.de>
+Date: Sun, 8 Jan 2017 09:32:25 +0100
+Subject: [PATCH] cpuset: Convert callback_lock to raw_spinlock_t
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The two commits below add up to a cpuset might_sleep() splat for RT:
+
+8447a0fee974 cpuset: convert callback_mutex to a spinlock
+344736f29b35 cpuset: simplify cpuset_node_allowed API
+
+BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:995
+in_atomic(): 0, irqs_disabled(): 1, pid: 11718, name: cset
+CPU: 135 PID: 11718 Comm: cset Tainted: G            E   4.10.0-rt1-rt #4
+Hardware name: Intel Corporation BRICKLAND/BRICKLAND, BIOS BRHSXSD1.86B.0056.R01.1409242327 09/24/2014
+Call Trace:
+ ? dump_stack+0x5c/0x81
+ ? ___might_sleep+0xf4/0x170
+ ? rt_spin_lock+0x1c/0x50
+ ? __cpuset_node_allowed+0x66/0xc0
+ ? ___slab_alloc+0x390/0x570 <disables IRQs>
+ ? anon_vma_fork+0x8f/0x140
+ ? copy_page_range+0x6cf/0xb00
+ ? anon_vma_fork+0x8f/0x140
+ ? __slab_alloc.isra.74+0x5a/0x81
+ ? anon_vma_fork+0x8f/0x140
+ ? kmem_cache_alloc+0x1b5/0x1f0
+ ? anon_vma_fork+0x8f/0x140
+ ? copy_process.part.35+0x1670/0x1ee0
+ ? _do_fork+0xdd/0x3f0
+ ? _do_fork+0xdd/0x3f0
+ ? do_syscall_64+0x61/0x170
+ ? entry_SYSCALL64_slow_path+0x25/0x25
+
+The later ensured that a NUMA box WILL take callback_lock in atomic
+context by removing the allocator and reclaim path __GFP_HARDWALL
+usage which prevented such contexts from taking callback_mutex.
+
+One option would be to reinstate __GFP_HARDWALL protections for
+RT, however, as the 8447a0fee974 changelog states:
+
+The callback_mutex is only used to synchronize reads/updates of cpusets'
+flags and cpu/node masks. These operations should always proceed fast so
+there's no reason why we can't use a spinlock instead of the mutex.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Mike Galbraith <efault@gmx.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/cpuset.c |   66 ++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 33 insertions(+), 33 deletions(-)
+
+--- a/kernel/cpuset.c
++++ b/kernel/cpuset.c
+@@ -284,7 +284,7 @@ static struct cpuset top_cpuset = {
+  */
+ static DEFINE_MUTEX(cpuset_mutex);
+-static DEFINE_SPINLOCK(callback_lock);
++static DEFINE_RAW_SPINLOCK(callback_lock);
+ static struct workqueue_struct *cpuset_migrate_mm_wq;
+@@ -907,9 +907,9 @@ static void update_cpumasks_hier(struct
+                       continue;
+               rcu_read_unlock();
+-              spin_lock_irq(&callback_lock);
++              raw_spin_lock_irq(&callback_lock);
+               cpumask_copy(cp->effective_cpus, new_cpus);
+-              spin_unlock_irq(&callback_lock);
++              raw_spin_unlock_irq(&callback_lock);
+               WARN_ON(!cgroup_subsys_on_dfl(cpuset_cgrp_subsys) &&
+                       !cpumask_equal(cp->cpus_allowed, cp->effective_cpus));
+@@ -974,9 +974,9 @@ static int update_cpumask(struct cpuset
+       if (retval < 0)
+               return retval;
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       cpumask_copy(cs->cpus_allowed, trialcs->cpus_allowed);
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+       /* use trialcs->cpus_allowed as a temp variable */
+       update_cpumasks_hier(cs, trialcs->cpus_allowed);
+@@ -1176,9 +1176,9 @@ static void update_nodemasks_hier(struct
+                       continue;
+               rcu_read_unlock();
+-              spin_lock_irq(&callback_lock);
++              raw_spin_lock_irq(&callback_lock);
+               cp->effective_mems = *new_mems;
+-              spin_unlock_irq(&callback_lock);
++              raw_spin_unlock_irq(&callback_lock);
+               WARN_ON(!cgroup_subsys_on_dfl(cpuset_cgrp_subsys) &&
+                       !nodes_equal(cp->mems_allowed, cp->effective_mems));
+@@ -1246,9 +1246,9 @@ static int update_nodemask(struct cpuset
+       if (retval < 0)
+               goto done;
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       cs->mems_allowed = trialcs->mems_allowed;
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+       /* use trialcs->mems_allowed as a temp variable */
+       update_nodemasks_hier(cs, &trialcs->mems_allowed);
+@@ -1339,9 +1339,9 @@ static int update_flag(cpuset_flagbits_t
+       spread_flag_changed = ((is_spread_slab(cs) != is_spread_slab(trialcs))
+                       || (is_spread_page(cs) != is_spread_page(trialcs)));
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       cs->flags = trialcs->flags;
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+       if (!cpumask_empty(trialcs->cpus_allowed) && balance_flag_changed)
+               rebuild_sched_domains_locked();
+@@ -1756,7 +1756,7 @@ static int cpuset_common_seq_show(struct
+       cpuset_filetype_t type = seq_cft(sf)->private;
+       int ret = 0;
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       switch (type) {
+       case FILE_CPULIST:
+@@ -1775,7 +1775,7 @@ static int cpuset_common_seq_show(struct
+               ret = -EINVAL;
+       }
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+       return ret;
+ }
+@@ -1989,12 +1989,12 @@ static int cpuset_css_online(struct cgro
+       cpuset_inc();
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       if (cgroup_subsys_on_dfl(cpuset_cgrp_subsys)) {
+               cpumask_copy(cs->effective_cpus, parent->effective_cpus);
+               cs->effective_mems = parent->effective_mems;
+       }
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+       if (!test_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags))
+               goto out_unlock;
+@@ -2021,12 +2021,12 @@ static int cpuset_css_online(struct cgro
+       }
+       rcu_read_unlock();
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       cs->mems_allowed = parent->mems_allowed;
+       cs->effective_mems = parent->mems_allowed;
+       cpumask_copy(cs->cpus_allowed, parent->cpus_allowed);
+       cpumask_copy(cs->effective_cpus, parent->cpus_allowed);
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+ out_unlock:
+       mutex_unlock(&cpuset_mutex);
+       return 0;
+@@ -2065,7 +2065,7 @@ static void cpuset_css_free(struct cgrou
+ static void cpuset_bind(struct cgroup_subsys_state *root_css)
+ {
+       mutex_lock(&cpuset_mutex);
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       if (cgroup_subsys_on_dfl(cpuset_cgrp_subsys)) {
+               cpumask_copy(top_cpuset.cpus_allowed, cpu_possible_mask);
+@@ -2076,7 +2076,7 @@ static void cpuset_bind(struct cgroup_su
+               top_cpuset.mems_allowed = top_cpuset.effective_mems;
+       }
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+       mutex_unlock(&cpuset_mutex);
+ }
+@@ -2177,12 +2177,12 @@ hotplug_update_tasks_legacy(struct cpuse
+ {
+       bool is_empty;
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       cpumask_copy(cs->cpus_allowed, new_cpus);
+       cpumask_copy(cs->effective_cpus, new_cpus);
+       cs->mems_allowed = *new_mems;
+       cs->effective_mems = *new_mems;
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+       /*
+        * Don't call update_tasks_cpumask() if the cpuset becomes empty,
+@@ -2219,10 +2219,10 @@ hotplug_update_tasks(struct cpuset *cs,
+       if (nodes_empty(*new_mems))
+               *new_mems = parent_cs(cs)->effective_mems;
+-      spin_lock_irq(&callback_lock);
++      raw_spin_lock_irq(&callback_lock);
+       cpumask_copy(cs->effective_cpus, new_cpus);
+       cs->effective_mems = *new_mems;
+-      spin_unlock_irq(&callback_lock);
++      raw_spin_unlock_irq(&callback_lock);
+       if (cpus_updated)
+               update_tasks_cpumask(cs);
+@@ -2308,21 +2308,21 @@ static void cpuset_hotplug_workfn(struct
+       /* synchronize cpus_allowed to cpu_active_mask */
+       if (cpus_updated) {
+-              spin_lock_irq(&callback_lock);
++              raw_spin_lock_irq(&callback_lock);
+               if (!on_dfl)
+                       cpumask_copy(top_cpuset.cpus_allowed, &new_cpus);
+               cpumask_copy(top_cpuset.effective_cpus, &new_cpus);
+-              spin_unlock_irq(&callback_lock);
++              raw_spin_unlock_irq(&callback_lock);
+               /* we don't mess with cpumasks of tasks in top_cpuset */
+       }
+       /* synchronize mems_allowed to N_MEMORY */
+       if (mems_updated) {
+-              spin_lock_irq(&callback_lock);
++              raw_spin_lock_irq(&callback_lock);
+               if (!on_dfl)
+                       top_cpuset.mems_allowed = new_mems;
+               top_cpuset.effective_mems = new_mems;
+-              spin_unlock_irq(&callback_lock);
++              raw_spin_unlock_irq(&callback_lock);
+               update_tasks_nodemask(&top_cpuset);
+       }
+@@ -2420,11 +2420,11 @@ void cpuset_cpus_allowed(struct task_str
+ {
+       unsigned long flags;
+-      spin_lock_irqsave(&callback_lock, flags);
++      raw_spin_lock_irqsave(&callback_lock, flags);
+       rcu_read_lock();
+       guarantee_online_cpus(task_cs(tsk), pmask);
+       rcu_read_unlock();
+-      spin_unlock_irqrestore(&callback_lock, flags);
++      raw_spin_unlock_irqrestore(&callback_lock, flags);
+ }
+ void cpuset_cpus_allowed_fallback(struct task_struct *tsk)
+@@ -2472,11 +2472,11 @@ nodemask_t cpuset_mems_allowed(struct ta
+       nodemask_t mask;
+       unsigned long flags;
+-      spin_lock_irqsave(&callback_lock, flags);
++      raw_spin_lock_irqsave(&callback_lock, flags);
+       rcu_read_lock();
+       guarantee_online_mems(task_cs(tsk), &mask);
+       rcu_read_unlock();
+-      spin_unlock_irqrestore(&callback_lock, flags);
++      raw_spin_unlock_irqrestore(&callback_lock, flags);
+       return mask;
+ }
+@@ -2568,14 +2568,14 @@ bool __cpuset_node_allowed(int node, gfp
+               return true;
+       /* Not hardwall and node outside mems_allowed: scan up cpusets */
+-      spin_lock_irqsave(&callback_lock, flags);
++      raw_spin_lock_irqsave(&callback_lock, flags);
+       rcu_read_lock();
+       cs = nearest_hardwall_ancestor(task_cs(current));
+       allowed = node_isset(node, cs->mems_allowed);
+       rcu_read_unlock();
+-      spin_unlock_irqrestore(&callback_lock, flags);
++      raw_spin_unlock_irqrestore(&callback_lock, flags);
+       return allowed;
+ }
diff --git a/patches/features/all/rt/crypto-Reduce-preempt-disabled-regions-more-algos.patch b/patches/features/all/rt/crypto-Reduce-preempt-disabled-regions-more-algos.patch
new file mode 100644 (file)
index 0000000..0729422
--- /dev/null
@@ -0,0 +1,242 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 21 Feb 2014 17:24:04 +0100
+Subject: crypto: Reduce preempt disabled regions, more algos
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Don Estabrook reported
+| kernel: WARNING: CPU: 2 PID: 858 at kernel/sched/core.c:2428 migrate_disable+0xed/0x100()
+| kernel: WARNING: CPU: 2 PID: 858 at kernel/sched/core.c:2462 migrate_enable+0x17b/0x200()
+| kernel: WARNING: CPU: 3 PID: 865 at kernel/sched/core.c:2428 migrate_disable+0xed/0x100()
+
+and his backtrace showed some crypto functions which looked fine.
+
+The problem is the following sequence:
+
+glue_xts_crypt_128bit()
+{
+       blkcipher_walk_virt(); /* normal migrate_disable() */
+
+       glue_fpu_begin(); /* get atomic */
+
+       while (nbytes) {
+               __glue_xts_crypt_128bit();
+               blkcipher_walk_done(); /* with nbytes = 0, migrate_enable()
+                                       * while we are atomic */
+       };
+       glue_fpu_end() /* no longer atomic */
+}
+
+and this is why the counter get out of sync and the warning is printed.
+The other problem is that we are non-preemptible between
+glue_fpu_begin() and glue_fpu_end() and the latency grows. To fix this,
+I shorten the FPU off region and ensure blkcipher_walk_done() is called
+with preemption enabled. This might hurt the performance because we now
+enable/disable the FPU state more often but we gain lower latency and
+the bug is gone.
+
+
+Reported-by: Don Estabrook <don.estabrook@gmail.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/x86/crypto/cast5_avx_glue.c |   21 +++++++++------------
+ arch/x86/crypto/glue_helper.c    |   31 +++++++++++++++----------------
+ 2 files changed, 24 insertions(+), 28 deletions(-)
+
+--- a/arch/x86/crypto/cast5_avx_glue.c
++++ b/arch/x86/crypto/cast5_avx_glue.c
+@@ -59,7 +59,7 @@ static inline void cast5_fpu_end(bool fp
+ static int ecb_crypt(struct blkcipher_desc *desc, struct blkcipher_walk *walk,
+                    bool enc)
+ {
+-      bool fpu_enabled = false;
++      bool fpu_enabled;
+       struct cast5_ctx *ctx = crypto_blkcipher_ctx(desc->tfm);
+       const unsigned int bsize = CAST5_BLOCK_SIZE;
+       unsigned int nbytes;
+@@ -75,7 +75,7 @@ static int ecb_crypt(struct blkcipher_de
+               u8 *wsrc = walk->src.virt.addr;
+               u8 *wdst = walk->dst.virt.addr;
+-              fpu_enabled = cast5_fpu_begin(fpu_enabled, nbytes);
++              fpu_enabled = cast5_fpu_begin(false, nbytes);
+               /* Process multi-block batch */
+               if (nbytes >= bsize * CAST5_PARALLEL_BLOCKS) {
+@@ -103,10 +103,9 @@ static int ecb_crypt(struct blkcipher_de
+               } while (nbytes >= bsize);
+ done:
++              cast5_fpu_end(fpu_enabled);
+               err = blkcipher_walk_done(desc, walk, nbytes);
+       }
+-
+-      cast5_fpu_end(fpu_enabled);
+       return err;
+ }
+@@ -227,7 +226,7 @@ static unsigned int __cbc_decrypt(struct
+ static int cbc_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
+                      struct scatterlist *src, unsigned int nbytes)
+ {
+-      bool fpu_enabled = false;
++      bool fpu_enabled;
+       struct blkcipher_walk walk;
+       int err;
+@@ -236,12 +235,11 @@ static int cbc_decrypt(struct blkcipher_
+       desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+       while ((nbytes = walk.nbytes)) {
+-              fpu_enabled = cast5_fpu_begin(fpu_enabled, nbytes);
++              fpu_enabled = cast5_fpu_begin(false, nbytes);
+               nbytes = __cbc_decrypt(desc, &walk);
++              cast5_fpu_end(fpu_enabled);
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+-
+-      cast5_fpu_end(fpu_enabled);
+       return err;
+ }
+@@ -311,7 +309,7 @@ static unsigned int __ctr_crypt(struct b
+ static int ctr_crypt(struct blkcipher_desc *desc, struct scatterlist *dst,
+                    struct scatterlist *src, unsigned int nbytes)
+ {
+-      bool fpu_enabled = false;
++      bool fpu_enabled;
+       struct blkcipher_walk walk;
+       int err;
+@@ -320,13 +318,12 @@ static int ctr_crypt(struct blkcipher_de
+       desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+       while ((nbytes = walk.nbytes) >= CAST5_BLOCK_SIZE) {
+-              fpu_enabled = cast5_fpu_begin(fpu_enabled, nbytes);
++              fpu_enabled = cast5_fpu_begin(false, nbytes);
+               nbytes = __ctr_crypt(desc, &walk);
++              cast5_fpu_end(fpu_enabled);
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+-      cast5_fpu_end(fpu_enabled);
+-
+       if (walk.nbytes) {
+               ctr_crypt_final(desc, &walk);
+               err = blkcipher_walk_done(desc, &walk, 0);
+--- a/arch/x86/crypto/glue_helper.c
++++ b/arch/x86/crypto/glue_helper.c
+@@ -39,7 +39,7 @@ static int __glue_ecb_crypt_128bit(const
+       void *ctx = crypto_blkcipher_ctx(desc->tfm);
+       const unsigned int bsize = 128 / 8;
+       unsigned int nbytes, i, func_bytes;
+-      bool fpu_enabled = false;
++      bool fpu_enabled;
+       int err;
+       err = blkcipher_walk_virt(desc, walk);
+@@ -49,7 +49,7 @@ static int __glue_ecb_crypt_128bit(const
+               u8 *wdst = walk->dst.virt.addr;
+               fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit,
+-                                           desc, fpu_enabled, nbytes);
++                                           desc, false, nbytes);
+               for (i = 0; i < gctx->num_funcs; i++) {
+                       func_bytes = bsize * gctx->funcs[i].num_blocks;
+@@ -71,10 +71,10 @@ static int __glue_ecb_crypt_128bit(const
+               }
+ done:
++              glue_fpu_end(fpu_enabled);
+               err = blkcipher_walk_done(desc, walk, nbytes);
+       }
+-      glue_fpu_end(fpu_enabled);
+       return err;
+ }
+@@ -194,7 +194,7 @@ int glue_cbc_decrypt_128bit(const struct
+                           struct scatterlist *src, unsigned int nbytes)
+ {
+       const unsigned int bsize = 128 / 8;
+-      bool fpu_enabled = false;
++      bool fpu_enabled;
+       struct blkcipher_walk walk;
+       int err;
+@@ -203,12 +203,12 @@ int glue_cbc_decrypt_128bit(const struct
+       while ((nbytes = walk.nbytes)) {
+               fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit,
+-                                           desc, fpu_enabled, nbytes);
++                                           desc, false, nbytes);
+               nbytes = __glue_cbc_decrypt_128bit(gctx, desc, &walk);
++              glue_fpu_end(fpu_enabled);
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+-      glue_fpu_end(fpu_enabled);
+       return err;
+ }
+ EXPORT_SYMBOL_GPL(glue_cbc_decrypt_128bit);
+@@ -277,7 +277,7 @@ int glue_ctr_crypt_128bit(const struct c
+                         struct scatterlist *src, unsigned int nbytes)
+ {
+       const unsigned int bsize = 128 / 8;
+-      bool fpu_enabled = false;
++      bool fpu_enabled;
+       struct blkcipher_walk walk;
+       int err;
+@@ -286,13 +286,12 @@ int glue_ctr_crypt_128bit(const struct c
+       while ((nbytes = walk.nbytes) >= bsize) {
+               fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit,
+-                                           desc, fpu_enabled, nbytes);
++                                           desc, false, nbytes);
+               nbytes = __glue_ctr_crypt_128bit(gctx, desc, &walk);
++              glue_fpu_end(fpu_enabled);
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+-      glue_fpu_end(fpu_enabled);
+-
+       if (walk.nbytes) {
+               glue_ctr_crypt_final_128bit(
+                       gctx->funcs[gctx->num_funcs - 1].fn_u.ctr, desc, &walk);
+@@ -347,7 +346,7 @@ int glue_xts_crypt_128bit(const struct c
+                         void *tweak_ctx, void *crypt_ctx)
+ {
+       const unsigned int bsize = 128 / 8;
+-      bool fpu_enabled = false;
++      bool fpu_enabled;
+       struct blkcipher_walk walk;
+       int err;
+@@ -360,21 +359,21 @@ int glue_xts_crypt_128bit(const struct c
+       /* set minimum length to bsize, for tweak_fn */
+       fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit,
+-                                   desc, fpu_enabled,
++                                   desc, false,
+                                    nbytes < bsize ? bsize : nbytes);
+-
+       /* calculate first value of T */
+       tweak_fn(tweak_ctx, walk.iv, walk.iv);
++      glue_fpu_end(fpu_enabled);
+       while (nbytes) {
++              fpu_enabled = glue_fpu_begin(bsize, gctx->fpu_blocks_limit,
++                              desc, false, nbytes);
+               nbytes = __glue_xts_crypt_128bit(gctx, crypt_ctx, desc, &walk);
++              glue_fpu_end(fpu_enabled);
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+               nbytes = walk.nbytes;
+       }
+-
+-      glue_fpu_end(fpu_enabled);
+-
+       return err;
+ }
+ EXPORT_SYMBOL_GPL(glue_xts_crypt_128bit);
diff --git a/patches/features/all/rt/debugobjects-rt.patch b/patches/features/all/rt/debugobjects-rt.patch
new file mode 100644 (file)
index 0000000..c108ecf
--- /dev/null
@@ -0,0 +1,26 @@
+Subject: debugobjects: Make RT aware
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 17 Jul 2011 21:41:35 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Avoid filling the pool / allocating memory with irqs off().
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ lib/debugobjects.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/lib/debugobjects.c
++++ b/lib/debugobjects.c
+@@ -308,7 +308,10 @@ static void
+       struct debug_obj *obj;
+       unsigned long flags;
+-      fill_pool();
++#ifdef CONFIG_PREEMPT_RT_FULL
++      if (preempt_count() == 0 && !irqs_disabled())
++#endif
++              fill_pool();
+       db = get_bucket((unsigned long) addr);
diff --git a/patches/features/all/rt/dm-make-rt-aware.patch b/patches/features/all/rt/dm-make-rt-aware.patch
new file mode 100644 (file)
index 0000000..19c61ba
--- /dev/null
@@ -0,0 +1,27 @@
+Subject: dm: Make rt aware
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 14 Nov 2011 23:06:09 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use the BUG_ON_NORT variant for the irq_disabled() checks. RT has
+interrupts legitimately enabled here as we cant deadlock against the
+irq thread due to the "sleeping spinlocks" conversion.
+
+Reported-by: Luis Claudio R. Goncalves <lclaudio@uudg.org>
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/md/dm-rq.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/md/dm-rq.c
++++ b/drivers/md/dm-rq.c
+@@ -842,7 +842,7 @@ static void dm_old_request_fn(struct req
+               /* Establish tio->ti before queuing work (map_tio_request) */
+               tio->ti = ti;
+               kthread_queue_work(&md->kworker, &tio->work);
+-              BUG_ON(!irqs_disabled());
++              BUG_ON_NONRT(!irqs_disabled());
+       }
+ }
diff --git a/patches/features/all/rt/drivers-block-zram-Replace-bit-spinlocks-with-rtmute.patch b/patches/features/all/rt/drivers-block-zram-Replace-bit-spinlocks-with-rtmute.patch
new file mode 100644 (file)
index 0000000..738302f
--- /dev/null
@@ -0,0 +1,177 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Thu, 31 Mar 2016 04:08:28 +0200
+Subject: [PATCH] drivers/block/zram: Replace bit spinlocks with rtmutex
+ for -rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+They're nondeterministic, and lead to ___might_sleep() splats in -rt.
+OTOH, they're a lot less wasteful than an rtmutex per page.
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+[bwh: Adjust context for 4.9.24]
+---
+ drivers/block/zram/zram_drv.c |   30 ++++++++++++++++--------------
+ drivers/block/zram/zram_drv.h |   41 +++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 57 insertions(+), 14 deletions(-)
+
+--- a/drivers/block/zram/zram_drv.c
++++ b/drivers/block/zram/zram_drv.c
+@@ -528,6 +528,8 @@ static struct zram_meta *zram_meta_alloc
+               goto out_error;
+       }
++      zram_meta_init_table_locks(meta, disksize);
++
+       return meta;
+ out_error:
+@@ -576,12 +578,12 @@ static int zram_decompress_page(struct z
+       unsigned long handle;
+       unsigned int size;
+-      bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
++      zram_lock_table(&meta->table[index]);
+       handle = meta->table[index].handle;
+       size = zram_get_obj_size(meta, index);
+       if (!handle || zram_test_flag(meta, index, ZRAM_ZERO)) {
+-              bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
++              zram_unlock_table(&meta->table[index]);
+               memset(mem, 0, PAGE_SIZE);
+               return 0;
+       }
+@@ -596,7 +598,7 @@ static int zram_decompress_page(struct z
+               zcomp_stream_put(zram->comp);
+       }
+       zs_unmap_object(meta->mem_pool, handle);
+-      bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
++      zram_unlock_table(&meta->table[index]);
+       /* Should NEVER happen. Return bio error if it does. */
+       if (unlikely(ret)) {
+@@ -616,14 +618,14 @@ static int zram_bvec_read(struct zram *z
+       struct zram_meta *meta = zram->meta;
+       page = bvec->bv_page;
+-      bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
++      zram_lock_table(&meta->table[index]);
+       if (unlikely(!meta->table[index].handle) ||
+                       zram_test_flag(meta, index, ZRAM_ZERO)) {
+-              bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
++              zram_unlock_table(&meta->table[index]);
+               handle_zero_page(bvec);
+               return 0;
+       }
+-      bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
++      zram_unlock_table(&meta->table[index]);
+       if (is_partial_io(bvec))
+               /* Use  a temporary buffer to decompress the page */
+@@ -700,10 +702,10 @@ static int zram_bvec_write(struct zram *
+               if (user_mem)
+                       kunmap_atomic(user_mem);
+               /* Free memory associated with this sector now. */
+-              bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
++              zram_lock_table(&meta->table[index]);
+               zram_free_page(zram, index);
+               zram_set_flag(meta, index, ZRAM_ZERO);
+-              bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
++              zram_unlock_table(&meta->table[index]);
+               atomic64_inc(&zram->stats.zero_pages);
+               ret = 0;
+@@ -794,12 +796,12 @@ static int zram_bvec_write(struct zram *
+        * Free memory associated with this sector
+        * before overwriting unused sectors.
+        */
+-      bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
++      zram_lock_table(&meta->table[index]);
+       zram_free_page(zram, index);
+       meta->table[index].handle = handle;
+       zram_set_obj_size(meta, index, clen);
+-      bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
++      zram_unlock_table(&meta->table[index]);
+       /* Update stats */
+       atomic64_add(clen, &zram->stats.compr_data_size);
+@@ -842,9 +844,9 @@ static void zram_bio_discard(struct zram
+       }
+       while (n >= PAGE_SIZE) {
+-              bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
++              zram_lock_table(&meta->table[index]);
+               zram_free_page(zram, index);
+-              bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
++              zram_unlock_table(&meta->table[index]);
+               atomic64_inc(&zram->stats.notify_free);
+               index++;
+               n -= PAGE_SIZE;
+@@ -973,9 +975,9 @@ static void zram_slot_free_notify(struct
+       zram = bdev->bd_disk->private_data;
+       meta = zram->meta;
+-      bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
++      zram_lock_table(&meta->table[index]);
+       zram_free_page(zram, index);
+-      bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
++      zram_unlock_table(&meta->table[index]);
+       atomic64_inc(&zram->stats.notify_free);
+ }
+--- a/drivers/block/zram/zram_drv.h
++++ b/drivers/block/zram/zram_drv.h
+@@ -73,6 +73,9 @@ enum zram_pageflags {
+ struct zram_table_entry {
+       unsigned long handle;
+       unsigned long value;
++#ifdef CONFIG_PREEMPT_RT_BASE
++      spinlock_t lock;
++#endif
+ };
+ struct zram_stats {
+@@ -120,4 +123,42 @@ struct zram {
+        */
+       bool claim; /* Protected by bdev->bd_mutex */
+ };
++
++#ifndef CONFIG_PREEMPT_RT_BASE
++static inline void zram_lock_table(struct zram_table_entry *table)
++{
++      bit_spin_lock(ZRAM_ACCESS, &table->value);
++}
++
++static inline void zram_unlock_table(struct zram_table_entry *table)
++{
++      bit_spin_unlock(ZRAM_ACCESS, &table->value);
++}
++
++static inline void zram_meta_init_table_locks(struct zram_meta *meta, u64 disksize) { }
++#else /* CONFIG_PREEMPT_RT_BASE */
++static inline void zram_lock_table(struct zram_table_entry *table)
++{
++      spin_lock(&table->lock);
++      __set_bit(ZRAM_ACCESS, &table->value);
++}
++
++static inline void zram_unlock_table(struct zram_table_entry *table)
++{
++      __clear_bit(ZRAM_ACCESS, &table->value);
++      spin_unlock(&table->lock);
++}
++
++static inline void zram_meta_init_table_locks(struct zram_meta *meta, u64 disksize)
++{
++        size_t num_pages = disksize >> PAGE_SHIFT;
++        size_t index;
++
++        for (index = 0; index < num_pages; index++) {
++              spinlock_t *lock = &meta->table[index].lock;
++              spin_lock_init(lock);
++        }
++}
++#endif /* CONFIG_PREEMPT_RT_BASE */
++
+ #endif
diff --git a/patches/features/all/rt/drivers-net-8139-disable-irq-nosync.patch b/patches/features/all/rt/drivers-net-8139-disable-irq-nosync.patch
new file mode 100644 (file)
index 0000000..b9eb2b4
--- /dev/null
@@ -0,0 +1,26 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:24 -0500
+Subject: drivers/net: Use disable_irq_nosync() in 8139too
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use disable_irq_nosync() instead of disable_irq() as this might be
+called in atomic context with netpoll.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/net/ethernet/realtek/8139too.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/ethernet/realtek/8139too.c
++++ b/drivers/net/ethernet/realtek/8139too.c
+@@ -2233,7 +2233,7 @@ static void rtl8139_poll_controller(stru
+       struct rtl8139_private *tp = netdev_priv(dev);
+       const int irq = tp->pci_dev->irq;
+-      disable_irq(irq);
++      disable_irq_nosync(irq);
+       rtl8139_interrupt(irq, dev);
+       enable_irq(irq);
+ }
diff --git a/patches/features/all/rt/drivers-net-vortex-fix-locking-issues.patch b/patches/features/all/rt/drivers-net-vortex-fix-locking-issues.patch
new file mode 100644 (file)
index 0000000..241ca91
--- /dev/null
@@ -0,0 +1,49 @@
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Fri, 3 Jul 2009 08:30:00 -0500
+Subject: drivers/net: vortex fix locking issues
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Argh, cut and paste wasn't enough...
+
+Use this patch instead.  It needs an irq disable.  But, believe it or not,
+on SMP this is actually better.  If the irq is shared (as it is in Mark's
+case), we don't stop the irq of other devices from being handled on
+another CPU (unfortunately for Mark, he pinned all interrupts to one CPU).
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+ drivers/net/ethernet/3com/3c59x.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+
+--- a/drivers/net/ethernet/3com/3c59x.c
++++ b/drivers/net/ethernet/3com/3c59x.c
+@@ -842,9 +842,9 @@ static void poll_vortex(struct net_devic
+ {
+       struct vortex_private *vp = netdev_priv(dev);
+       unsigned long flags;
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       (vp->full_bus_master_rx ? boomerang_interrupt:vortex_interrupt)(dev->irq,dev);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+ }
+ #endif
+@@ -1910,12 +1910,12 @@ static void vortex_tx_timeout(struct net
+                        * Block interrupts because vortex_interrupt does a bare spin_lock()
+                        */
+                       unsigned long flags;
+-                      local_irq_save(flags);
++                      local_irq_save_nort(flags);
+                       if (vp->full_bus_master_tx)
+                               boomerang_interrupt(dev->irq, dev);
+                       else
+                               vortex_interrupt(dev->irq, dev);
+-                      local_irq_restore(flags);
++                      local_irq_restore_nort(flags);
+               }
+       }
diff --git a/patches/features/all/rt/drivers-random-reduce-preempt-disabled-region.patch b/patches/features/all/rt/drivers-random-reduce-preempt-disabled-region.patch
new file mode 100644 (file)
index 0000000..481a836
--- /dev/null
@@ -0,0 +1,33 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:30 -0500
+Subject: drivers: random: Reduce preempt disabled region
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+No need to keep preemption disabled across the whole function.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/char/random.c |    3 ---
+ 1 file changed, 3 deletions(-)
+
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -1028,8 +1028,6 @@ static void add_timer_randomness(struct
+       } sample;
+       long delta, delta2, delta3;
+-      preempt_disable();
+-
+       sample.jiffies = jiffies;
+       sample.cycles = random_get_entropy();
+       sample.num = num;
+@@ -1070,7 +1068,6 @@ static void add_timer_randomness(struct
+                */
+               credit_entropy_bits(r, min_t(int, fls(delta>>1), 11));
+       }
+-      preempt_enable();
+ }
+ void add_input_randomness(unsigned int type, unsigned int code,
diff --git a/patches/features/all/rt/drivers-tty-fix-omap-lock-crap.patch b/patches/features/all/rt/drivers-tty-fix-omap-lock-crap.patch
new file mode 100644 (file)
index 0000000..f30ac9b
--- /dev/null
@@ -0,0 +1,43 @@
+Subject: tty/serial/omap: Make the locking RT aware
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 28 Jul 2011 13:32:57 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The lock is a sleeping lock and local_irq_save() is not the
+optimsation we are looking for. Redo it to make it work on -RT and
+non-RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/tty/serial/omap-serial.c |   12 ++++--------
+ 1 file changed, 4 insertions(+), 8 deletions(-)
+
+--- a/drivers/tty/serial/omap-serial.c
++++ b/drivers/tty/serial/omap-serial.c
+@@ -1257,13 +1257,10 @@ serial_omap_console_write(struct console
+       pm_runtime_get_sync(up->dev);
+-      local_irq_save(flags);
+-      if (up->port.sysrq)
+-              locked = 0;
+-      else if (oops_in_progress)
+-              locked = spin_trylock(&up->port.lock);
++      if (up->port.sysrq || oops_in_progress)
++              locked = spin_trylock_irqsave(&up->port.lock, flags);
+       else
+-              spin_lock(&up->port.lock);
++              spin_lock_irqsave(&up->port.lock, flags);
+       /*
+        * First save the IER then disable the interrupts
+@@ -1292,8 +1289,7 @@ serial_omap_console_write(struct console
+       pm_runtime_mark_last_busy(up->dev);
+       pm_runtime_put_autosuspend(up->dev);
+       if (locked)
+-              spin_unlock(&up->port.lock);
+-      local_irq_restore(flags);
++              spin_unlock_irqrestore(&up->port.lock, flags);
+ }
+ static int __init
diff --git a/patches/features/all/rt/drivers-tty-pl011-irq-disable-madness.patch b/patches/features/all/rt/drivers-tty-pl011-irq-disable-madness.patch
new file mode 100644 (file)
index 0000000..77a3c6f
--- /dev/null
@@ -0,0 +1,48 @@
+Subject: tty/serial/pl011: Make the locking work on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 08 Jan 2013 21:36:51 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The lock is a sleeping lock and local_irq_save() is not the optimsation
+we are looking for. Redo it to make it work on -RT and non-RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/tty/serial/amba-pl011.c |   15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+--- a/drivers/tty/serial/amba-pl011.c
++++ b/drivers/tty/serial/amba-pl011.c
+@@ -2194,13 +2194,19 @@ pl011_console_write(struct console *co,
+       clk_enable(uap->clk);
+-      local_irq_save(flags);
++      /*
++       * local_irq_save(flags);
++       *
++       * This local_irq_save() is nonsense. If we come in via sysrq
++       * handling then interrupts are already disabled. Aside of
++       * that the port.sysrq check is racy on SMP regardless.
++      */
+       if (uap->port.sysrq)
+               locked = 0;
+       else if (oops_in_progress)
+-              locked = spin_trylock(&uap->port.lock);
++              locked = spin_trylock_irqsave(&uap->port.lock, flags);
+       else
+-              spin_lock(&uap->port.lock);
++              spin_lock_irqsave(&uap->port.lock, flags);
+       /*
+        *      First save the CR then disable the interrupts
+@@ -2224,8 +2230,7 @@ pl011_console_write(struct console *co,
+               pl011_write(old_cr, uap, REG_CR);
+       if (locked)
+-              spin_unlock(&uap->port.lock);
+-      local_irq_restore(flags);
++              spin_unlock_irqrestore(&uap->port.lock, flags);
+       clk_disable(uap->clk);
+ }
diff --git a/patches/features/all/rt/drivers-zram-Don-t-disable-preemption-in-zcomp_strea.patch b/patches/features/all/rt/drivers-zram-Don-t-disable-preemption-in-zcomp_strea.patch
new file mode 100644 (file)
index 0000000..d1dec6a
--- /dev/null
@@ -0,0 +1,93 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Thu, 20 Oct 2016 11:15:22 +0200
+Subject: [PATCH] drivers/zram: Don't disable preemption in
+ zcomp_stream_get/put()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+In v4.7, the driver switched to percpu compression streams, disabling
+preemption via get/put_cpu_ptr(). Use a per-zcomp_strm lock here. We
+also have to fix an lock order issue in zram_decompress_page() such
+that zs_map_object() nests inside of zcomp_stream_put() as it does in
+zram_bvec_write().
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+[bigeasy: get_locked_var() -> per zcomp_strm lock]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+[bwh: Adjust context for 4.9.24]
+---
+ drivers/block/zram/zcomp.c    |   12 ++++++++++--
+ drivers/block/zram/zcomp.h    |    1 +
+ drivers/block/zram/zram_drv.c |    6 +++---
+ 3 files changed, 14 insertions(+), 5 deletions(-)
+
+--- a/drivers/block/zram/zcomp.c
++++ b/drivers/block/zram/zcomp.c
+@@ -118,12 +118,19 @@ ssize_t zcomp_available_show(const char
+ struct zcomp_strm *zcomp_stream_get(struct zcomp *comp)
+ {
+-      return *get_cpu_ptr(comp->stream);
++      struct zcomp_strm *zstrm;
++
++      zstrm = *this_cpu_ptr(comp->stream);
++      spin_lock(&zstrm->zcomp_lock);
++      return zstrm;
+ }
+ void zcomp_stream_put(struct zcomp *comp)
+ {
+-      put_cpu_ptr(comp->stream);
++      struct zcomp_strm *zstrm;
++
++      zstrm = *this_cpu_ptr(comp->stream);
++      spin_unlock(&zstrm->zcomp_lock);
+ }
+ int zcomp_compress(struct zcomp_strm *zstrm,
+@@ -174,6 +181,7 @@ static int __zcomp_cpu_notifier(struct z
+                       pr_err("Can't allocate a compression stream\n");
+                       return NOTIFY_BAD;
+               }
++              spin_lock_init(&zstrm->zcomp_lock);
+               *per_cpu_ptr(comp->stream, cpu) = zstrm;
+               break;
+       case CPU_DEAD:
+--- a/drivers/block/zram/zcomp.h
++++ b/drivers/block/zram/zcomp.h
+@@ -14,6 +14,7 @@ struct zcomp_strm {
+       /* compression/decompression buffer */
+       void *buffer;
+       struct crypto_comp *tfm;
++      spinlock_t zcomp_lock;
+ };
+ /* dynamic per-device compression frontend */
+--- a/drivers/block/zram/zram_drv.c
++++ b/drivers/block/zram/zram_drv.c
+@@ -577,6 +577,7 @@ static int zram_decompress_page(struct z
+       struct zram_meta *meta = zram->meta;
+       unsigned long handle;
+       unsigned int size;
++      struct zcomp_strm *zstrm;
+       zram_lock_table(&meta->table[index]);
+       handle = meta->table[index].handle;
+@@ -588,16 +589,15 @@ static int zram_decompress_page(struct z
+               return 0;
+       }
++      zstrm = zcomp_stream_get(zram->comp);
+       cmem = zs_map_object(meta->mem_pool, handle, ZS_MM_RO);
+       if (size == PAGE_SIZE) {
+               memcpy(mem, cmem, PAGE_SIZE);
+       } else {
+-              struct zcomp_strm *zstrm = zcomp_stream_get(zram->comp);
+-
+               ret = zcomp_decompress(zstrm, cmem, size, mem);
+-              zcomp_stream_put(zram->comp);
+       }
+       zs_unmap_object(meta->mem_pool, handle);
++      zcomp_stream_put(zram->comp);
+       zram_unlock_table(&meta->table[index]);
+       /* Should NEVER happen. Return bio error if it does. */
diff --git a/patches/features/all/rt/drm-i915-drop-trace_i915_gem_ring_dispatch-onrt.patch b/patches/features/all/rt/drm-i915-drop-trace_i915_gem_ring_dispatch-onrt.patch
new file mode 100644 (file)
index 0000000..5085981
--- /dev/null
@@ -0,0 +1,59 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 25 Apr 2013 18:12:52 +0200
+Subject: drm/i915: drop trace_i915_gem_ring_dispatch on rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+This tracepoint is responsible for:
+
+|[<814cc358>] __schedule_bug+0x4d/0x59
+|[<814d24cc>] __schedule+0x88c/0x930
+|[<814d3b90>] ? _raw_spin_unlock_irqrestore+0x40/0x50
+|[<814d3b95>] ? _raw_spin_unlock_irqrestore+0x45/0x50
+|[<810b57b5>] ? task_blocks_on_rt_mutex+0x1f5/0x250
+|[<814d27d9>] schedule+0x29/0x70
+|[<814d3423>] rt_spin_lock_slowlock+0x15b/0x278
+|[<814d3786>] rt_spin_lock+0x26/0x30
+|[<a00dced9>] gen6_gt_force_wake_get+0x29/0x60 [i915]
+|[<a00e183f>] gen6_ring_get_irq+0x5f/0x100 [i915]
+|[<a00b2a33>] ftrace_raw_event_i915_gem_ring_dispatch+0xe3/0x100 [i915]
+|[<a00ac1b3>] i915_gem_do_execbuffer.isra.13+0xbd3/0x1430 [i915]
+|[<810f8943>] ? trace_buffer_unlock_commit+0x43/0x60
+|[<8113e8d2>] ? ftrace_raw_event_kmem_alloc+0xd2/0x180
+|[<8101d063>] ? native_sched_clock+0x13/0x80
+|[<a00acf29>] i915_gem_execbuffer2+0x99/0x280 [i915]
+|[<a00114a3>] drm_ioctl+0x4c3/0x570 [drm]
+|[<8101d0d9>] ? sched_clock+0x9/0x10
+|[<a00ace90>] ? i915_gem_execbuffer+0x480/0x480 [i915]
+|[<810f1c18>] ? rb_commit+0x68/0xa0
+|[<810f1c6c>] ? ring_buffer_unlock_commit+0x1c/0xa0
+|[<81197467>] do_vfs_ioctl+0x97/0x540
+|[<81021318>] ? ftrace_raw_event_sys_enter+0xd8/0x130
+|[<811979a1>] sys_ioctl+0x91/0xb0
+|[<814db931>] tracesys+0xe1/0xe6
+
+Chris Wilson does not like to move i915_trace_irq_get() out of the macro
+
+|No. This enables the IRQ, as well as making a number of
+|very expensively serialised read, unconditionally.
+
+so it is gone now on RT.
+
+
+Reported-by: Joakim Hernberg <jbh@alchemy.lu>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/gpu/drm/i915/i915_gem_execbuffer.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
++++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+@@ -1537,7 +1537,9 @@ execbuf_submit(struct i915_execbuffer_pa
+       if (ret)
+               return ret;
++#ifndef CONFIG_PREEMPT_RT_BASE
+       trace_i915_gem_ring_dispatch(params->request, params->dispatch_flags);
++#endif
+       i915_gem_execbuffer_move_to_active(vmas, params->request);
diff --git a/patches/features/all/rt/drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch b/patches/features/all/rt/drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch
new file mode 100644 (file)
index 0000000..8b8a16e
--- /dev/null
@@ -0,0 +1,113 @@
+Subject: drm,i915: Use local_lock/unlock_irq() in intel_pipe_update_start/end()
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sat, 27 Feb 2016 09:01:42 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+
+[    8.014039] BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:918
+[    8.014041] in_atomic(): 0, irqs_disabled(): 1, pid: 78, name: kworker/u4:4
+[    8.014045] CPU: 1 PID: 78 Comm: kworker/u4:4 Not tainted 4.1.7-rt7 #5
+[    8.014055] Workqueue: events_unbound async_run_entry_fn
+[    8.014059]  0000000000000000 ffff880037153748 ffffffff815f32c9 0000000000000002
+[    8.014063]  ffff88013a50e380 ffff880037153768 ffffffff815ef075 ffff8800372c06c8
+[    8.014066]  ffff8800372c06c8 ffff880037153778 ffffffff8107c0b3 ffff880037153798
+[    8.014067] Call Trace:
+[    8.014074]  [<ffffffff815f32c9>] dump_stack+0x4a/0x61
+[    8.014078]  [<ffffffff815ef075>] ___might_sleep.part.93+0xe9/0xee
+[    8.014082]  [<ffffffff8107c0b3>] ___might_sleep+0x53/0x80
+[    8.014086]  [<ffffffff815f9064>] rt_spin_lock+0x24/0x50
+[    8.014090]  [<ffffffff8109368b>] prepare_to_wait+0x2b/0xa0
+[    8.014152]  [<ffffffffa016c04c>] intel_pipe_update_start+0x17c/0x300 [i915]
+[    8.014156]  [<ffffffff81093b40>] ? prepare_to_wait_event+0x120/0x120
+[    8.014201]  [<ffffffffa0158f36>] intel_begin_crtc_commit+0x166/0x1e0 [i915]
+[    8.014215]  [<ffffffffa00c806d>] drm_atomic_helper_commit_planes+0x5d/0x1a0 [drm_kms_helper]
+[    8.014260]  [<ffffffffa0171e9b>] intel_atomic_commit+0xab/0xf0 [i915]
+[    8.014288]  [<ffffffffa00654c7>] drm_atomic_commit+0x37/0x60 [drm]
+[    8.014298]  [<ffffffffa00c6fcd>] drm_atomic_helper_plane_set_property+0x8d/0xd0 [drm_kms_helper]
+[    8.014301]  [<ffffffff815f77d9>] ? __ww_mutex_lock+0x39/0x40
+[    8.014319]  [<ffffffffa0053b3d>] drm_mode_plane_set_obj_prop+0x2d/0x90 [drm]
+[    8.014328]  [<ffffffffa00c8edb>] restore_fbdev_mode+0x6b/0xf0 [drm_kms_helper]
+[    8.014337]  [<ffffffffa00cae49>] drm_fb_helper_restore_fbdev_mode_unlocked+0x29/0x80 [drm_kms_helper]
+[    8.014346]  [<ffffffffa00caec2>] drm_fb_helper_set_par+0x22/0x50 [drm_kms_helper]
+[    8.014390]  [<ffffffffa016dfba>] intel_fbdev_set_par+0x1a/0x60 [i915]
+[    8.014394]  [<ffffffff81327dc4>] fbcon_init+0x4f4/0x580
+[    8.014398]  [<ffffffff8139ef4c>] visual_init+0xbc/0x120
+[    8.014401]  [<ffffffff813a1623>] do_bind_con_driver+0x163/0x330
+[    8.014405]  [<ffffffff813a1b2c>] do_take_over_console+0x11c/0x1c0
+[    8.014408]  [<ffffffff813236e3>] do_fbcon_takeover+0x63/0xd0
+[    8.014410]  [<ffffffff81328965>] fbcon_event_notify+0x785/0x8d0
+[    8.014413]  [<ffffffff8107c12d>] ? __might_sleep+0x4d/0x90
+[    8.014416]  [<ffffffff810775fe>] notifier_call_chain+0x4e/0x80
+[    8.014419]  [<ffffffff810779cd>] __blocking_notifier_call_chain+0x4d/0x70
+[    8.014422]  [<ffffffff81077a06>] blocking_notifier_call_chain+0x16/0x20
+[    8.014425]  [<ffffffff8132b48b>] fb_notifier_call_chain+0x1b/0x20
+[    8.014428]  [<ffffffff8132d8fa>] register_framebuffer+0x21a/0x350
+[    8.014439]  [<ffffffffa00cb164>] drm_fb_helper_initial_config+0x274/0x3e0 [drm_kms_helper]
+[    8.014483]  [<ffffffffa016f1cb>] intel_fbdev_initial_config+0x1b/0x20 [i915]
+[    8.014486]  [<ffffffff8107912c>] async_run_entry_fn+0x4c/0x160
+[    8.014490]  [<ffffffff81070ffa>] process_one_work+0x14a/0x470
+[    8.014493]  [<ffffffff81071489>] worker_thread+0x169/0x4c0
+[    8.014496]  [<ffffffff81071320>] ? process_one_work+0x470/0x470
+[    8.014499]  [<ffffffff81076606>] kthread+0xc6/0xe0
+[    8.014502]  [<ffffffff81070000>] ? queue_work_on+0x80/0x110
+[    8.014506]  [<ffffffff81076540>] ? kthread_worker_fn+0x1c0/0x1c0
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Cc: linux-rt-users <linux-rt-users@vger.kernel.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/gpu/drm/i915/intel_sprite.c |   11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_sprite.c
++++ b/drivers/gpu/drm/i915/intel_sprite.c
+@@ -35,6 +35,7 @@
+ #include <drm/drm_rect.h>
+ #include <drm/drm_atomic.h>
+ #include <drm/drm_plane_helper.h>
++#include <linux/locallock.h>
+ #include "intel_drv.h"
+ #include "intel_frontbuffer.h"
+ #include <drm/i915_drm.h>
+@@ -65,6 +66,8 @@ int intel_usecs_to_scanlines(const struc
+                           1000 * adjusted_mode->crtc_htotal);
+ }
++static DEFINE_LOCAL_IRQ_LOCK(pipe_update_lock);
++
+ /**
+  * intel_pipe_update_start() - start update of a set of display registers
+  * @crtc: the crtc of which the registers are going to be updated
+@@ -95,7 +98,7 @@ void intel_pipe_update_start(struct inte
+       min = vblank_start - intel_usecs_to_scanlines(adjusted_mode, 100);
+       max = vblank_start - 1;
+-      local_irq_disable();
++      local_lock_irq(pipe_update_lock);
+       if (min <= 0 || max <= 0)
+               return;
+@@ -125,11 +128,11 @@ void intel_pipe_update_start(struct inte
+                       break;
+               }
+-              local_irq_enable();
++              local_unlock_irq(pipe_update_lock);
+               timeout = schedule_timeout(timeout);
+-              local_irq_disable();
++              local_lock_irq(pipe_update_lock);
+       }
+       finish_wait(wq, &wait);
+@@ -181,7 +184,7 @@ void intel_pipe_update_end(struct intel_
+               crtc->base.state->event = NULL;
+       }
+-      local_irq_enable();
++      local_unlock_irq(pipe_update_lock);
+       if (crtc->debug.start_vbl_count &&
+           crtc->debug.start_vbl_count != end_vbl_count) {
diff --git a/patches/features/all/rt/drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch b/patches/features/all/rt/drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch
new file mode 100644 (file)
index 0000000..fff86c6
--- /dev/null
@@ -0,0 +1,52 @@
+Subject: drm,radeon,i915: Use preempt_disable/enable_rt() where recommended
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sat, 27 Feb 2016 08:09:11 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+DRM folks identified the spots, so use them.
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Cc: linux-rt-users <linux-rt-users@vger.kernel.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/gpu/drm/i915/i915_irq.c         |    2 ++
+ drivers/gpu/drm/radeon/radeon_display.c |    2 ++
+ 2 files changed, 4 insertions(+)
+
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -812,6 +812,7 @@ static int i915_get_crtc_scanoutpos(stru
+       spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
+       /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */
++      preempt_disable_rt();
+       /* Get optional system timestamp before query. */
+       if (stime)
+@@ -863,6 +864,7 @@ static int i915_get_crtc_scanoutpos(stru
+               *etime = ktime_get();
+       /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */
++      preempt_enable_rt();
+       spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
+--- a/drivers/gpu/drm/radeon/radeon_display.c
++++ b/drivers/gpu/drm/radeon/radeon_display.c
+@@ -1845,6 +1845,7 @@ int radeon_get_crtc_scanoutpos(struct dr
+       struct radeon_device *rdev = dev->dev_private;
+       /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */
++      preempt_disable_rt();
+       /* Get optional system timestamp before query. */
+       if (stime)
+@@ -1937,6 +1938,7 @@ int radeon_get_crtc_scanoutpos(struct dr
+               *etime = ktime_get();
+       /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */
++      preempt_enable_rt();
+       /* Decode into vertical and horizontal scanout position. */
+       *vpos = position & 0x1fff;
diff --git a/patches/features/all/rt/epoll-use-get-cpu-light.patch b/patches/features/all/rt/epoll-use-get-cpu-light.patch
new file mode 100644 (file)
index 0000000..56427bc
--- /dev/null
@@ -0,0 +1,31 @@
+Subject: fs/epoll: Do not disable preemption on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 08 Jul 2011 16:35:35 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+ep_call_nested() takes a sleeping lock so we can't disable preemption.
+The light version is enough since ep_call_nested() doesn't mind beeing
+invoked twice on the same CPU.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ fs/eventpoll.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/eventpoll.c
++++ b/fs/eventpoll.c
+@@ -510,12 +510,12 @@ static int ep_poll_wakeup_proc(void *pri
+  */
+ static void ep_poll_safewake(wait_queue_head_t *wq)
+ {
+-      int this_cpu = get_cpu();
++      int this_cpu = get_cpu_light();
+       ep_call_nested(&poll_safewake_ncalls, EP_MAX_NESTS,
+                      ep_poll_wakeup_proc, NULL, wq, (void *) (long) this_cpu);
+-      put_cpu();
++      put_cpu_light();
+ }
+ static void ep_remove_wait_queue(struct eppoll_entry *pwq)
diff --git a/patches/features/all/rt/fs-aio-simple-simple-work.patch b/patches/features/all/rt/fs-aio-simple-simple-work.patch
new file mode 100644 (file)
index 0000000..c8d2ba4
--- /dev/null
@@ -0,0 +1,107 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 16 Feb 2015 18:49:10 +0100
+Subject: fs/aio: simple simple work
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+|BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:768
+|in_atomic(): 1, irqs_disabled(): 0, pid: 26, name: rcuos/2
+|2 locks held by rcuos/2/26:
+| #0:  (rcu_callback){.+.+..}, at: [<ffffffff810b1a12>] rcu_nocb_kthread+0x1e2/0x380
+| #1:  (rcu_read_lock_sched){.+.+..}, at: [<ffffffff812acd26>] percpu_ref_kill_rcu+0xa6/0x1c0
+|Preemption disabled at:[<ffffffff810b1a93>] rcu_nocb_kthread+0x263/0x380
+|Call Trace:
+| [<ffffffff81582e9e>] dump_stack+0x4e/0x9c
+| [<ffffffff81077aeb>] __might_sleep+0xfb/0x170
+| [<ffffffff81589304>] rt_spin_lock+0x24/0x70
+| [<ffffffff811c5790>] free_ioctx_users+0x30/0x130
+| [<ffffffff812ace34>] percpu_ref_kill_rcu+0x1b4/0x1c0
+| [<ffffffff810b1a93>] rcu_nocb_kthread+0x263/0x380
+| [<ffffffff8106e046>] kthread+0xd6/0xf0
+| [<ffffffff81591eec>] ret_from_fork+0x7c/0xb0
+
+replace this preempt_disable() friendly swork.
+
+Reported-By: Mike Galbraith <umgwanakikbuti@gmail.com>
+Suggested-by: Benjamin LaHaise <bcrl@kvack.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ fs/aio.c |   24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+--- a/fs/aio.c
++++ b/fs/aio.c
+@@ -40,6 +40,7 @@
+ #include <linux/ramfs.h>
+ #include <linux/percpu-refcount.h>
+ #include <linux/mount.h>
++#include <linux/swork.h>
+ #include <asm/kmap_types.h>
+ #include <asm/uaccess.h>
+@@ -115,7 +116,7 @@ struct kioctx {
+       struct page             **ring_pages;
+       long                    nr_pages;
+-      struct work_struct      free_work;
++      struct swork_event      free_work;
+       /*
+        * signals when all in-flight requests are done
+@@ -258,6 +259,7 @@ static int __init aio_setup(void)
+               .mount          = aio_mount,
+               .kill_sb        = kill_anon_super,
+       };
++      BUG_ON(swork_get());
+       aio_mnt = kern_mount(&aio_fs);
+       if (IS_ERR(aio_mnt))
+               panic("Failed to create aio fs mount.");
+@@ -581,9 +583,9 @@ static int kiocb_cancel(struct aio_kiocb
+       return cancel(&kiocb->common);
+ }
+-static void free_ioctx(struct work_struct *work)
++static void free_ioctx(struct swork_event *sev)
+ {
+-      struct kioctx *ctx = container_of(work, struct kioctx, free_work);
++      struct kioctx *ctx = container_of(sev, struct kioctx, free_work);
+       pr_debug("freeing %p\n", ctx);
+@@ -602,8 +604,8 @@ static void free_ioctx_reqs(struct percp
+       if (ctx->rq_wait && atomic_dec_and_test(&ctx->rq_wait->count))
+               complete(&ctx->rq_wait->comp);
+-      INIT_WORK(&ctx->free_work, free_ioctx);
+-      schedule_work(&ctx->free_work);
++      INIT_SWORK(&ctx->free_work, free_ioctx);
++      swork_queue(&ctx->free_work);
+ }
+ /*
+@@ -611,9 +613,9 @@ static void free_ioctx_reqs(struct percp
+  * and ctx->users has dropped to 0, so we know no more kiocbs can be submitted -
+  * now it's safe to cancel any that need to be.
+  */
+-static void free_ioctx_users(struct percpu_ref *ref)
++static void free_ioctx_users_work(struct swork_event *sev)
+ {
+-      struct kioctx *ctx = container_of(ref, struct kioctx, users);
++      struct kioctx *ctx = container_of(sev, struct kioctx, free_work);
+       struct aio_kiocb *req;
+       spin_lock_irq(&ctx->ctx_lock);
+@@ -632,6 +634,14 @@ static void free_ioctx_users(struct perc
+       percpu_ref_put(&ctx->reqs);
+ }
++static void free_ioctx_users(struct percpu_ref *ref)
++{
++      struct kioctx *ctx = container_of(ref, struct kioctx, users);
++
++      INIT_SWORK(&ctx->free_work, free_ioctx_users_work);
++      swork_queue(&ctx->free_work);
++}
++
+ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
+ {
+       unsigned i, new_nr;
diff --git a/patches/features/all/rt/fs-block-rt-support.patch b/patches/features/all/rt/fs-block-rt-support.patch
new file mode 100644 (file)
index 0000000..ac5f854
--- /dev/null
@@ -0,0 +1,23 @@
+Subject: block: Turn off warning which is bogus on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 14 Jun 2011 17:05:09 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On -RT the context is always with IRQs enabled. Ignore this warning on -RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ block/blk-core.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -233,7 +233,7 @@ EXPORT_SYMBOL(blk_start_queue_async);
+  **/
+ void blk_start_queue(struct request_queue *q)
+ {
+-      WARN_ON(!irqs_disabled());
++      WARN_ON_NONRT(!irqs_disabled());
+       queue_flag_clear(QUEUE_FLAG_STOPPED, q);
+       __blk_run_queue(q);
diff --git a/patches/features/all/rt/fs-dcache-include-wait.h.patch b/patches/features/all/rt/fs-dcache-include-wait.h.patch
new file mode 100644 (file)
index 0000000..f17e444
--- /dev/null
@@ -0,0 +1,24 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 14 Sep 2016 11:55:23 +0200
+Subject: fs/dcache: include wait.h
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Since commit d9171b934526 ("parallel lookups machinery, part 4 (and
+last)") dcache.h is using but does not include wait.h. It works as long
+as it is included somehow earlier and fails otherwise.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/dcache.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/include/linux/dcache.h
++++ b/include/linux/dcache.h
+@@ -11,6 +11,7 @@
+ #include <linux/rcupdate.h>
+ #include <linux/lockref.h>
+ #include <linux/stringhash.h>
++#include <linux/wait.h>
+ struct path;
+ struct vfsmount;
diff --git a/patches/features/all/rt/fs-dcache-init-in_lookup_hashtable.patch b/patches/features/all/rt/fs-dcache-init-in_lookup_hashtable.patch
new file mode 100644 (file)
index 0000000..6431aa9
--- /dev/null
@@ -0,0 +1,28 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 14 Sep 2016 17:57:03 +0200
+Subject: [PATCH] fs/dcache: init in_lookup_hashtable
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+in_lookup_hashtable was introduced in commit 94bdd655caba ("parallel
+lookups machinery, part 3") and never initialized but since it is in
+the data it is all zeros. But we need this for -RT.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ fs/dcache.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -3604,6 +3604,11 @@ EXPORT_SYMBOL(d_genocide);
+ void __init vfs_caches_init_early(void)
+ {
++      int i;
++
++      for (i = 0; i < ARRAY_SIZE(in_lookup_hashtable); i++)
++              INIT_HLIST_BL_HEAD(&in_lookup_hashtable[i]);
++
+       dcache_init_early();
+       inode_init_early();
+ }
diff --git a/patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch b/patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch
new file mode 100644 (file)
index 0000000..b78351f
--- /dev/null
@@ -0,0 +1,108 @@
+Subject: fs: dcache: Use cpu_chill() in trylock loops
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 07 Mar 2012 21:00:34 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Retry loops on RT might loop forever when the modifying side was
+preempted. Use cpu_chill() instead of cpu_relax() to let the system
+make progress.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ fs/autofs4/autofs_i.h |    1 +
+ fs/autofs4/expire.c   |    2 +-
+ fs/dcache.c           |   20 ++++++++++++++++----
+ fs/namespace.c        |    3 ++-
+ 4 files changed, 20 insertions(+), 6 deletions(-)
+
+--- a/fs/autofs4/autofs_i.h
++++ b/fs/autofs4/autofs_i.h
+@@ -31,6 +31,7 @@
+ #include <linux/sched.h>
+ #include <linux/mount.h>
+ #include <linux/namei.h>
++#include <linux/delay.h>
+ #include <asm/current.h>
+ #include <linux/uaccess.h>
+--- a/fs/autofs4/expire.c
++++ b/fs/autofs4/expire.c
+@@ -148,7 +148,7 @@ static struct dentry *get_next_positive_
+                       parent = p->d_parent;
+                       if (!spin_trylock(&parent->d_lock)) {
+                               spin_unlock(&p->d_lock);
+-                              cpu_relax();
++                              cpu_chill();
+                               goto relock;
+                       }
+                       spin_unlock(&p->d_lock);
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -19,6 +19,7 @@
+ #include <linux/mm.h>
+ #include <linux/fs.h>
+ #include <linux/fsnotify.h>
++#include <linux/delay.h>
+ #include <linux/slab.h>
+ #include <linux/init.h>
+ #include <linux/hash.h>
+@@ -750,6 +751,8 @@ static inline bool fast_dput(struct dent
+  */
+ void dput(struct dentry *dentry)
+ {
++      struct dentry *parent;
++
+       if (unlikely(!dentry))
+               return;
+@@ -788,9 +791,18 @@ void dput(struct dentry *dentry)
+       return;
+ kill_it:
+-      dentry = dentry_kill(dentry);
+-      if (dentry) {
+-              cond_resched();
++      parent = dentry_kill(dentry);
++      if (parent) {
++              int r;
++
++              if (parent == dentry) {
++                      /* the task with the highest priority won't schedule */
++                      r = cond_resched();
++                      if (!r)
++                              cpu_chill();
++              } else {
++                      dentry = parent;
++              }
+               goto repeat;
+       }
+ }
+@@ -2324,7 +2336,7 @@ void d_delete(struct dentry * dentry)
+       if (dentry->d_lockref.count == 1) {
+               if (!spin_trylock(&inode->i_lock)) {
+                       spin_unlock(&dentry->d_lock);
+-                      cpu_relax();
++                      cpu_chill();
+                       goto again;
+               }
+               dentry->d_flags &= ~DCACHE_CANT_MOUNT;
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -14,6 +14,7 @@
+ #include <linux/mnt_namespace.h>
+ #include <linux/user_namespace.h>
+ #include <linux/namei.h>
++#include <linux/delay.h>
+ #include <linux/security.h>
+ #include <linux/idr.h>
+ #include <linux/init.h>               /* init_rootfs */
+@@ -358,7 +359,7 @@ int __mnt_want_write(struct vfsmount *m)
+       smp_mb();
+       while (ACCESS_ONCE(mnt->mnt.mnt_flags) & MNT_WRITE_HOLD) {
+               preempt_enable();
+-              cpu_relax();
++              cpu_chill();
+               preempt_disable();
+       }
+       /*
diff --git a/patches/features/all/rt/fs-dcache-use-swait_queue-instead-of-waitqueue.patch b/patches/features/all/rt/fs-dcache-use-swait_queue-instead-of-waitqueue.patch
new file mode 100644 (file)
index 0000000..359d744
--- /dev/null
@@ -0,0 +1,215 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 14 Sep 2016 14:35:49 +0200
+Subject: [PATCH] fs/dcache: use swait_queue instead of waitqueue
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+__d_lookup_done() invokes wake_up_all() while holding a hlist_bl_lock()
+which disables preemption. As a workaround convert it to swait.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ fs/cifs/readdir.c       |    2 +-
+ fs/dcache.c             |   27 +++++++++++++++------------
+ fs/fuse/dir.c           |    2 +-
+ fs/namei.c              |    4 ++--
+ fs/nfs/dir.c            |    4 ++--
+ fs/nfs/unlink.c         |    4 ++--
+ fs/proc/base.c          |    2 +-
+ fs/proc/proc_sysctl.c   |    2 +-
+ include/linux/dcache.h  |    4 ++--
+ include/linux/nfs_xdr.h |    2 +-
+ kernel/sched/swait.c    |    1 +
+ 11 files changed, 29 insertions(+), 25 deletions(-)
+
+--- a/fs/cifs/readdir.c
++++ b/fs/cifs/readdir.c
+@@ -80,7 +80,7 @@ cifs_prime_dcache(struct dentry *parent,
+       struct inode *inode;
+       struct super_block *sb = parent->d_sb;
+       struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
+-      DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
++      DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
+       cifs_dbg(FYI, "%s: for %s\n", __func__, name->name);
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -2396,21 +2396,24 @@ static inline void end_dir_add(struct in
+ static void d_wait_lookup(struct dentry *dentry)
+ {
+-      if (d_in_lookup(dentry)) {
+-              DECLARE_WAITQUEUE(wait, current);
+-              add_wait_queue(dentry->d_wait, &wait);
+-              do {
+-                      set_current_state(TASK_UNINTERRUPTIBLE);
+-                      spin_unlock(&dentry->d_lock);
+-                      schedule();
+-                      spin_lock(&dentry->d_lock);
+-              } while (d_in_lookup(dentry));
+-      }
++      struct swait_queue __wait;
++
++      if (!d_in_lookup(dentry))
++              return;
++
++      INIT_LIST_HEAD(&__wait.task_list);
++      do {
++              prepare_to_swait(dentry->d_wait, &__wait, TASK_UNINTERRUPTIBLE);
++              spin_unlock(&dentry->d_lock);
++              schedule();
++              spin_lock(&dentry->d_lock);
++      } while (d_in_lookup(dentry));
++      finish_swait(dentry->d_wait, &__wait);
+ }
+ struct dentry *d_alloc_parallel(struct dentry *parent,
+                               const struct qstr *name,
+-                              wait_queue_head_t *wq)
++                              struct swait_queue_head *wq)
+ {
+       unsigned int hash = name->hash;
+       struct hlist_bl_head *b = in_lookup_hash(parent, hash);
+@@ -2519,7 +2522,7 @@ void __d_lookup_done(struct dentry *dent
+       hlist_bl_lock(b);
+       dentry->d_flags &= ~DCACHE_PAR_LOOKUP;
+       __hlist_bl_del(&dentry->d_u.d_in_lookup_hash);
+-      wake_up_all(dentry->d_wait);
++      swake_up_all(dentry->d_wait);
+       dentry->d_wait = NULL;
+       hlist_bl_unlock(b);
+       INIT_HLIST_NODE(&dentry->d_u.d_alias);
+--- a/fs/fuse/dir.c
++++ b/fs/fuse/dir.c
+@@ -1191,7 +1191,7 @@ static int fuse_direntplus_link(struct f
+       struct inode *dir = d_inode(parent);
+       struct fuse_conn *fc;
+       struct inode *inode;
+-      DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
++      DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
+       if (!o->nodeid) {
+               /*
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -1626,7 +1626,7 @@ static struct dentry *lookup_slow(const
+ {
+       struct dentry *dentry = ERR_PTR(-ENOENT), *old;
+       struct inode *inode = dir->d_inode;
+-      DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
++      DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
+       inode_lock_shared(inode);
+       /* Don't go there if it's already dead */
+@@ -3083,7 +3083,7 @@ static int lookup_open(struct nameidata
+       struct dentry *dentry;
+       int error, create_error = 0;
+       umode_t mode = op->mode;
+-      DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
++      DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
+       if (unlikely(IS_DEADDIR(dir_inode)))
+               return -ENOENT;
+--- a/fs/nfs/dir.c
++++ b/fs/nfs/dir.c
+@@ -485,7 +485,7 @@ static
+ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry)
+ {
+       struct qstr filename = QSTR_INIT(entry->name, entry->len);
+-      DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
++      DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
+       struct dentry *dentry;
+       struct dentry *alias;
+       struct inode *dir = d_inode(parent);
+@@ -1487,7 +1487,7 @@ int nfs_atomic_open(struct inode *dir, s
+                   struct file *file, unsigned open_flags,
+                   umode_t mode, int *opened)
+ {
+-      DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
++      DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
+       struct nfs_open_context *ctx;
+       struct dentry *res;
+       struct iattr attr = { .ia_valid = ATTR_OPEN };
+--- a/fs/nfs/unlink.c
++++ b/fs/nfs/unlink.c
+@@ -12,7 +12,7 @@
+ #include <linux/sunrpc/clnt.h>
+ #include <linux/nfs_fs.h>
+ #include <linux/sched.h>
+-#include <linux/wait.h>
++#include <linux/swait.h>
+ #include <linux/namei.h>
+ #include <linux/fsnotify.h>
+@@ -205,7 +205,7 @@ nfs_async_unlink(struct dentry *dentry,
+               goto out_free_name;
+       }
+       data->res.dir_attr = &data->dir_attr;
+-      init_waitqueue_head(&data->wq);
++      init_swait_queue_head(&data->wq);
+       status = -EBUSY;
+       spin_lock(&dentry->d_lock);
+--- a/fs/proc/base.c
++++ b/fs/proc/base.c
+@@ -1834,7 +1834,7 @@ bool proc_fill_cache(struct file *file,
+       child = d_hash_and_lookup(dir, &qname);
+       if (!child) {
+-              DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
++              DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
+               child = d_alloc_parallel(dir, &qname, &wq);
+               if (IS_ERR(child))
+                       goto end_instantiate;
+--- a/fs/proc/proc_sysctl.c
++++ b/fs/proc/proc_sysctl.c
+@@ -632,7 +632,7 @@ static bool proc_sys_fill_cache(struct f
+       child = d_lookup(dir, &qname);
+       if (!child) {
+-              DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
++              DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq);
+               child = d_alloc_parallel(dir, &qname, &wq);
+               if (IS_ERR(child))
+                       return false;
+--- a/include/linux/dcache.h
++++ b/include/linux/dcache.h
+@@ -101,7 +101,7 @@ struct dentry {
+       union {
+               struct list_head d_lru;         /* LRU list */
+-              wait_queue_head_t *d_wait;      /* in-lookup ones only */
++              struct swait_queue_head *d_wait;        /* in-lookup ones only */
+       };
+       struct list_head d_child;       /* child of parent list */
+       struct list_head d_subdirs;     /* our children */
+@@ -231,7 +231,7 @@ extern void d_set_d_op(struct dentry *de
+ extern struct dentry * d_alloc(struct dentry *, const struct qstr *);
+ extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *);
+ extern struct dentry * d_alloc_parallel(struct dentry *, const struct qstr *,
+-                                      wait_queue_head_t *);
++                                      struct swait_queue_head *);
+ extern struct dentry * d_splice_alias(struct inode *, struct dentry *);
+ extern struct dentry * d_add_ci(struct dentry *, struct inode *, struct qstr *);
+ extern struct dentry * d_exact_alias(struct dentry *, struct inode *);
+--- a/include/linux/nfs_xdr.h
++++ b/include/linux/nfs_xdr.h
+@@ -1490,7 +1490,7 @@ struct nfs_unlinkdata {
+       struct nfs_removeargs args;
+       struct nfs_removeres res;
+       struct dentry *dentry;
+-      wait_queue_head_t wq;
++      struct swait_queue_head wq;
+       struct rpc_cred *cred;
+       struct nfs_fattr dir_attr;
+       long timeout;
+--- a/kernel/sched/swait.c
++++ b/kernel/sched/swait.c
+@@ -74,6 +74,7 @@ void swake_up_all(struct swait_queue_hea
+       if (!swait_active(q))
+               return;
++      WARN_ON(irqs_disabled());
+       raw_spin_lock_irq(&q->lock);
+       list_splice_init(&q->task_list, &tmp);
+       while (!list_empty(&tmp)) {
diff --git a/patches/features/all/rt/fs-jbd-replace-bh_state-lock.patch b/patches/features/all/rt/fs-jbd-replace-bh_state-lock.patch
new file mode 100644 (file)
index 0000000..8865658
--- /dev/null
@@ -0,0 +1,97 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 18 Mar 2011 10:11:25 +0100
+Subject: fs: jbd/jbd2: Make state lock and journal head lock rt safe
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+bit_spin_locks break under RT.
+
+Based on a previous patch from Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+--
+ include/linux/buffer_head.h |    8 ++++++++
+ include/linux/jbd2.h        |   24 ++++++++++++++++++++++++
+ 2 files changed, 32 insertions(+)
+
+--- a/include/linux/buffer_head.h
++++ b/include/linux/buffer_head.h
+@@ -77,6 +77,10 @@ struct buffer_head {
+       atomic_t b_count;               /* users using this buffer_head */
+ #ifdef CONFIG_PREEMPT_RT_BASE
+       spinlock_t b_uptodate_lock;
++#if IS_ENABLED(CONFIG_JBD2)
++      spinlock_t b_state_lock;
++      spinlock_t b_journal_head_lock;
++#endif
+ #endif
+ };
+@@ -108,6 +112,10 @@ static inline void buffer_head_init_lock
+ {
+ #ifdef CONFIG_PREEMPT_RT_BASE
+       spin_lock_init(&bh->b_uptodate_lock);
++#if IS_ENABLED(CONFIG_JBD2)
++      spin_lock_init(&bh->b_state_lock);
++      spin_lock_init(&bh->b_journal_head_lock);
++#endif
+ #endif
+ }
+--- a/include/linux/jbd2.h
++++ b/include/linux/jbd2.h
+@@ -347,32 +347,56 @@ static inline struct journal_head *bh2jh
+ static inline void jbd_lock_bh_state(struct buffer_head *bh)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       bit_spin_lock(BH_State, &bh->b_state);
++#else
++      spin_lock(&bh->b_state_lock);
++#endif
+ }
+ static inline int jbd_trylock_bh_state(struct buffer_head *bh)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       return bit_spin_trylock(BH_State, &bh->b_state);
++#else
++      return spin_trylock(&bh->b_state_lock);
++#endif
+ }
+ static inline int jbd_is_locked_bh_state(struct buffer_head *bh)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       return bit_spin_is_locked(BH_State, &bh->b_state);
++#else
++      return spin_is_locked(&bh->b_state_lock);
++#endif
+ }
+ static inline void jbd_unlock_bh_state(struct buffer_head *bh)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       bit_spin_unlock(BH_State, &bh->b_state);
++#else
++      spin_unlock(&bh->b_state_lock);
++#endif
+ }
+ static inline void jbd_lock_bh_journal_head(struct buffer_head *bh)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       bit_spin_lock(BH_JournalHead, &bh->b_state);
++#else
++      spin_lock(&bh->b_journal_head_lock);
++#endif
+ }
+ static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       bit_spin_unlock(BH_JournalHead, &bh->b_state);
++#else
++      spin_unlock(&bh->b_journal_head_lock);
++#endif
+ }
+ #define J_ASSERT(assert)      BUG_ON(!(assert))
diff --git a/patches/features/all/rt/fs-jbd2-pull-your-plug-when-waiting-for-space.patch b/patches/features/all/rt/fs-jbd2-pull-your-plug-when-waiting-for-space.patch
new file mode 100644 (file)
index 0000000..33b32b8
--- /dev/null
@@ -0,0 +1,32 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 17 Feb 2014 17:30:03 +0100
+Subject: fs: jbd2: pull your plug when waiting for space
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Two cps in parallel managed to stall the the ext4 fs. It seems that
+journal code is either waiting for locks or sleeping waiting for
+something to happen. This seems similar to what Mike observed on ext3,
+here is his description:
+
+|With an -rt kernel, and a heavy sync IO load, tasks can jam
+|up on journal locks without unplugging, which can lead to
+|terminal IO starvation.  Unplug and schedule when waiting
+|for space.
+
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ fs/jbd2/checkpoint.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/jbd2/checkpoint.c
++++ b/fs/jbd2/checkpoint.c
+@@ -116,6 +116,8 @@ void __jbd2_log_wait_for_space(journal_t
+       nblocks = jbd2_space_needed(journal);
+       while (jbd2_log_space_left(journal) < nblocks) {
+               write_unlock(&journal->j_state_lock);
++              if (current->plug)
++                      io_schedule();
+               mutex_lock(&journal->j_checkpoint_mutex);
+               /*
diff --git a/patches/features/all/rt/fs-namespace-preemption-fix.patch b/patches/features/all/rt/fs-namespace-preemption-fix.patch
new file mode 100644 (file)
index 0000000..179cd13
--- /dev/null
@@ -0,0 +1,31 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 19 Jul 2009 08:44:27 -0500
+Subject: fs: namespace preemption fix
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On RT we cannot loop with preemption disabled here as
+mnt_make_readonly() might have been preempted. We can safely enable
+preemption while waiting for MNT_WRITE_HOLD to be cleared. Safe on !RT
+as well.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ fs/namespace.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -356,8 +356,11 @@ int __mnt_want_write(struct vfsmount *m)
+        * incremented count after it has set MNT_WRITE_HOLD.
+        */
+       smp_mb();
+-      while (ACCESS_ONCE(mnt->mnt.mnt_flags) & MNT_WRITE_HOLD)
++      while (ACCESS_ONCE(mnt->mnt.mnt_flags) & MNT_WRITE_HOLD) {
++              preempt_enable();
+               cpu_relax();
++              preempt_disable();
++      }
+       /*
+        * After the slowpath clears MNT_WRITE_HOLD, mnt_is_readonly will
+        * be set to match its requirements. So we must not load that until
diff --git a/patches/features/all/rt/fs-nfs-turn-rmdir_sem-into-a-semaphore.patch b/patches/features/all/rt/fs-nfs-turn-rmdir_sem-into-a-semaphore.patch
new file mode 100644 (file)
index 0000000..b56f7b8
--- /dev/null
@@ -0,0 +1,139 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 15 Sep 2016 10:51:27 +0200
+Subject: [PATCH] fs/nfs: turn rmdir_sem into a semaphore
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The RW semaphore had a reader side which used the _non_owner version
+because it most likely took the reader lock in one thread and released it
+in another which would cause lockdep to complain if the "regular"
+version was used.
+On -RT we need the owner because the rw lock is turned into a rtmutex.
+The semaphores on the hand are "plain simple" and should work as
+expected. We can't have multiple readers but on -RT we don't allow
+multiple readers anyway so that is not a loss.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ fs/nfs/dir.c           |    8 ++++++++
+ fs/nfs/inode.c         |    4 ++++
+ fs/nfs/unlink.c        |   31 +++++++++++++++++++++++++++----
+ include/linux/nfs_fs.h |    4 ++++
+ 4 files changed, 43 insertions(+), 4 deletions(-)
+
+--- a/fs/nfs/dir.c
++++ b/fs/nfs/dir.c
+@@ -1802,7 +1802,11 @@ int nfs_rmdir(struct inode *dir, struct
+       trace_nfs_rmdir_enter(dir, dentry);
+       if (d_really_is_positive(dentry)) {
++#ifdef CONFIG_PREEMPT_RT_BASE
++              down(&NFS_I(d_inode(dentry))->rmdir_sem);
++#else
+               down_write(&NFS_I(d_inode(dentry))->rmdir_sem);
++#endif
+               error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name);
+               /* Ensure the VFS deletes this inode */
+               switch (error) {
+@@ -1812,7 +1816,11 @@ int nfs_rmdir(struct inode *dir, struct
+               case -ENOENT:
+                       nfs_dentry_handle_enoent(dentry);
+               }
++#ifdef CONFIG_PREEMPT_RT_BASE
++              up(&NFS_I(d_inode(dentry))->rmdir_sem);
++#else
+               up_write(&NFS_I(d_inode(dentry))->rmdir_sem);
++#endif
+       } else
+               error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name);
+       trace_nfs_rmdir_exit(dir, dentry, error);
+--- a/fs/nfs/inode.c
++++ b/fs/nfs/inode.c
+@@ -1957,7 +1957,11 @@ static void init_once(void *foo)
+       nfsi->nrequests = 0;
+       nfsi->commit_info.ncommit = 0;
+       atomic_set(&nfsi->commit_info.rpcs_out, 0);
++#ifdef CONFIG_PREEMPT_RT_BASE
++      sema_init(&nfsi->rmdir_sem, 1);
++#else
+       init_rwsem(&nfsi->rmdir_sem);
++#endif
+       nfs4_init_once(nfsi);
+ }
+--- a/fs/nfs/unlink.c
++++ b/fs/nfs/unlink.c
+@@ -51,6 +51,29 @@ static void nfs_async_unlink_done(struct
+               rpc_restart_call_prepare(task);
+ }
++#ifdef CONFIG_PREEMPT_RT_BASE
++static void nfs_down_anon(struct semaphore *sema)
++{
++      down(sema);
++}
++
++static void nfs_up_anon(struct semaphore *sema)
++{
++      up(sema);
++}
++
++#else
++static void nfs_down_anon(struct rw_semaphore *rwsem)
++{
++      down_read_non_owner(rwsem);
++}
++
++static void nfs_up_anon(struct rw_semaphore *rwsem)
++{
++      up_read_non_owner(rwsem);
++}
++#endif
++
+ /**
+  * nfs_async_unlink_release - Release the sillydelete data.
+  * @task: rpc_task of the sillydelete
+@@ -64,7 +87,7 @@ static void nfs_async_unlink_release(voi
+       struct dentry *dentry = data->dentry;
+       struct super_block *sb = dentry->d_sb;
+-      up_read_non_owner(&NFS_I(d_inode(dentry->d_parent))->rmdir_sem);
++      nfs_up_anon(&NFS_I(d_inode(dentry->d_parent))->rmdir_sem);
+       d_lookup_done(dentry);
+       nfs_free_unlinkdata(data);
+       dput(dentry);
+@@ -117,10 +140,10 @@ static int nfs_call_unlink(struct dentry
+       struct inode *dir = d_inode(dentry->d_parent);
+       struct dentry *alias;
+-      down_read_non_owner(&NFS_I(dir)->rmdir_sem);
++      nfs_down_anon(&NFS_I(dir)->rmdir_sem);
+       alias = d_alloc_parallel(dentry->d_parent, &data->args.name, &data->wq);
+       if (IS_ERR(alias)) {
+-              up_read_non_owner(&NFS_I(dir)->rmdir_sem);
++              nfs_up_anon(&NFS_I(dir)->rmdir_sem);
+               return 0;
+       }
+       if (!d_in_lookup(alias)) {
+@@ -142,7 +165,7 @@ static int nfs_call_unlink(struct dentry
+                       ret = 0;
+               spin_unlock(&alias->d_lock);
+               dput(alias);
+-              up_read_non_owner(&NFS_I(dir)->rmdir_sem);
++              nfs_up_anon(&NFS_I(dir)->rmdir_sem);
+               /*
+                * If we'd displaced old cached devname, free it.  At that
+                * point dentry is definitely not a root, so we won't need
+--- a/include/linux/nfs_fs.h
++++ b/include/linux/nfs_fs.h
+@@ -165,7 +165,11 @@ struct nfs_inode {
+       /* Readers: in-flight sillydelete RPC calls */
+       /* Writers: rmdir */
++#ifdef CONFIG_PREEMPT_RT_BASE
++      struct semaphore        rmdir_sem;
++#else
+       struct rw_semaphore     rmdir_sem;
++#endif
+ #if IS_ENABLED(CONFIG_NFS_V4)
+       struct nfs4_cached_acl  *nfs4_acl;
diff --git a/patches/features/all/rt/fs-ntfs-disable-interrupt-non-rt.patch b/patches/features/all/rt/fs-ntfs-disable-interrupt-non-rt.patch
new file mode 100644 (file)
index 0000000..51427c7
--- /dev/null
@@ -0,0 +1,76 @@
+From: Mike Galbraith <efault@gmx.de>
+Date: Fri, 3 Jul 2009 08:44:12 -0500
+Subject: fs: ntfs: disable interrupt only on !RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On Sat, 2007-10-27 at 11:44 +0200, Ingo Molnar wrote:
+> * Nick Piggin <nickpiggin@yahoo.com.au> wrote:
+>
+> > > [10138.175796]  [<c0105de3>] show_trace+0x12/0x14
+> > > [10138.180291]  [<c0105dfb>] dump_stack+0x16/0x18
+> > > [10138.184769]  [<c011609f>] native_smp_call_function_mask+0x138/0x13d
+> > > [10138.191117]  [<c0117606>] smp_call_function+0x1e/0x24
+> > > [10138.196210]  [<c012f85c>] on_each_cpu+0x25/0x50
+> > > [10138.200807]  [<c0115c74>] flush_tlb_all+0x1e/0x20
+> > > [10138.205553]  [<c016caaf>] kmap_high+0x1b6/0x417
+> > > [10138.210118]  [<c011ec88>] kmap+0x4d/0x4f
+> > > [10138.214102]  [<c026a9d8>] ntfs_end_buffer_async_read+0x228/0x2f9
+> > > [10138.220163]  [<c01a0e9e>] end_bio_bh_io_sync+0x26/0x3f
+> > > [10138.225352]  [<c01a2b09>] bio_endio+0x42/0x6d
+> > > [10138.229769]  [<c02c2a08>] __end_that_request_first+0x115/0x4ac
+> > > [10138.235682]  [<c02c2da7>] end_that_request_chunk+0x8/0xa
+> > > [10138.241052]  [<c0365943>] ide_end_request+0x55/0x10a
+> > > [10138.246058]  [<c036dae3>] ide_dma_intr+0x6f/0xac
+> > > [10138.250727]  [<c0366d83>] ide_intr+0x93/0x1e0
+> > > [10138.255125]  [<c015afb4>] handle_IRQ_event+0x5c/0xc9
+> >
+> > Looks like ntfs is kmap()ing from interrupt context. Should be using
+> > kmap_atomic instead, I think.
+>
+> it's not atomic interrupt context but irq thread context - and -rt
+> remaps kmap_atomic() to kmap() internally.
+
+Hm.  Looking at the change to mm/bounce.c, perhaps I should do this
+instead?
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ fs/ntfs/aops.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/fs/ntfs/aops.c
++++ b/fs/ntfs/aops.c
+@@ -92,13 +92,13 @@ static void ntfs_end_buffer_async_read(s
+                       ofs = 0;
+                       if (file_ofs < init_size)
+                               ofs = init_size - file_ofs;
+-                      local_irq_save(flags);
++                      local_irq_save_nort(flags);
+                       kaddr = kmap_atomic(page);
+                       memset(kaddr + bh_offset(bh) + ofs, 0,
+                                       bh->b_size - ofs);
+                       flush_dcache_page(page);
+                       kunmap_atomic(kaddr);
+-                      local_irq_restore(flags);
++                      local_irq_restore_nort(flags);
+               }
+       } else {
+               clear_buffer_uptodate(bh);
+@@ -143,13 +143,13 @@ static void ntfs_end_buffer_async_read(s
+               recs = PAGE_SIZE / rec_size;
+               /* Should have been verified before we got here... */
+               BUG_ON(!recs);
+-              local_irq_save(flags);
++              local_irq_save_nort(flags);
+               kaddr = kmap_atomic(page);
+               for (i = 0; i < recs; i++)
+                       post_read_mst_fixup((NTFS_RECORD*)(kaddr +
+                                       i * rec_size), rec_size);
+               kunmap_atomic(kaddr);
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+               flush_dcache_page(page);
+               if (likely(page_uptodate && !PageError(page)))
+                       SetPageUptodate(page);
diff --git a/patches/features/all/rt/fs-replace-bh_uptodate_lock-for-rt.patch b/patches/features/all/rt/fs-replace-bh_uptodate_lock-for-rt.patch
new file mode 100644 (file)
index 0000000..e88cbfc
--- /dev/null
@@ -0,0 +1,162 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 18 Mar 2011 09:18:52 +0100
+Subject: buffer_head: Replace bh_uptodate_lock for -rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Wrap the bit_spin_lock calls into a separate inline and add the RT
+replacements with a real spinlock.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ fs/buffer.c                 |   21 +++++++--------------
+ fs/ntfs/aops.c              |   10 +++-------
+ include/linux/buffer_head.h |   34 ++++++++++++++++++++++++++++++++++
+ 3 files changed, 44 insertions(+), 21 deletions(-)
+
+--- a/fs/buffer.c
++++ b/fs/buffer.c
+@@ -301,8 +301,7 @@ static void end_buffer_async_read(struct
+        * decide that the page is now completely done.
+        */
+       first = page_buffers(page);
+-      local_irq_save(flags);
+-      bit_spin_lock(BH_Uptodate_Lock, &first->b_state);
++      flags = bh_uptodate_lock_irqsave(first);
+       clear_buffer_async_read(bh);
+       unlock_buffer(bh);
+       tmp = bh;
+@@ -315,8 +314,7 @@ static void end_buffer_async_read(struct
+               }
+               tmp = tmp->b_this_page;
+       } while (tmp != bh);
+-      bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
+-      local_irq_restore(flags);
++      bh_uptodate_unlock_irqrestore(first, flags);
+       /*
+        * If none of the buffers had errors and they are all
+@@ -328,9 +326,7 @@ static void end_buffer_async_read(struct
+       return;
+ still_busy:
+-      bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
+-      local_irq_restore(flags);
+-      return;
++      bh_uptodate_unlock_irqrestore(first, flags);
+ }
+ /*
+@@ -358,8 +354,7 @@ void end_buffer_async_write(struct buffe
+       }
+       first = page_buffers(page);
+-      local_irq_save(flags);
+-      bit_spin_lock(BH_Uptodate_Lock, &first->b_state);
++      flags = bh_uptodate_lock_irqsave(first);
+       clear_buffer_async_write(bh);
+       unlock_buffer(bh);
+@@ -371,15 +366,12 @@ void end_buffer_async_write(struct buffe
+               }
+               tmp = tmp->b_this_page;
+       }
+-      bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
+-      local_irq_restore(flags);
++      bh_uptodate_unlock_irqrestore(first, flags);
+       end_page_writeback(page);
+       return;
+ still_busy:
+-      bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
+-      local_irq_restore(flags);
+-      return;
++      bh_uptodate_unlock_irqrestore(first, flags);
+ }
+ EXPORT_SYMBOL(end_buffer_async_write);
+@@ -3383,6 +3375,7 @@ struct buffer_head *alloc_buffer_head(gf
+       struct buffer_head *ret = kmem_cache_zalloc(bh_cachep, gfp_flags);
+       if (ret) {
+               INIT_LIST_HEAD(&ret->b_assoc_buffers);
++              buffer_head_init_locks(ret);
+               preempt_disable();
+               __this_cpu_inc(bh_accounting.nr);
+               recalc_bh_state();
+--- a/fs/ntfs/aops.c
++++ b/fs/ntfs/aops.c
+@@ -107,8 +107,7 @@ static void ntfs_end_buffer_async_read(s
+                               "0x%llx.", (unsigned long long)bh->b_blocknr);
+       }
+       first = page_buffers(page);
+-      local_irq_save(flags);
+-      bit_spin_lock(BH_Uptodate_Lock, &first->b_state);
++      flags = bh_uptodate_lock_irqsave(first);
+       clear_buffer_async_read(bh);
+       unlock_buffer(bh);
+       tmp = bh;
+@@ -123,8 +122,7 @@ static void ntfs_end_buffer_async_read(s
+               }
+               tmp = tmp->b_this_page;
+       } while (tmp != bh);
+-      bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
+-      local_irq_restore(flags);
++      bh_uptodate_unlock_irqrestore(first, flags);
+       /*
+        * If none of the buffers had errors then we can set the page uptodate,
+        * but we first have to perform the post read mst fixups, if the
+@@ -159,9 +157,7 @@ static void ntfs_end_buffer_async_read(s
+       unlock_page(page);
+       return;
+ still_busy:
+-      bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
+-      local_irq_restore(flags);
+-      return;
++      bh_uptodate_unlock_irqrestore(first, flags);
+ }
+ /**
+--- a/include/linux/buffer_head.h
++++ b/include/linux/buffer_head.h
+@@ -75,8 +75,42 @@ struct buffer_head {
+       struct address_space *b_assoc_map;      /* mapping this buffer is
+                                                  associated with */
+       atomic_t b_count;               /* users using this buffer_head */
++#ifdef CONFIG_PREEMPT_RT_BASE
++      spinlock_t b_uptodate_lock;
++#endif
+ };
++static inline unsigned long bh_uptodate_lock_irqsave(struct buffer_head *bh)
++{
++      unsigned long flags;
++
++#ifndef CONFIG_PREEMPT_RT_BASE
++      local_irq_save(flags);
++      bit_spin_lock(BH_Uptodate_Lock, &bh->b_state);
++#else
++      spin_lock_irqsave(&bh->b_uptodate_lock, flags);
++#endif
++      return flags;
++}
++
++static inline void
++bh_uptodate_unlock_irqrestore(struct buffer_head *bh, unsigned long flags)
++{
++#ifndef CONFIG_PREEMPT_RT_BASE
++      bit_spin_unlock(BH_Uptodate_Lock, &bh->b_state);
++      local_irq_restore(flags);
++#else
++      spin_unlock_irqrestore(&bh->b_uptodate_lock, flags);
++#endif
++}
++
++static inline void buffer_head_init_locks(struct buffer_head *bh)
++{
++#ifdef CONFIG_PREEMPT_RT_BASE
++      spin_lock_init(&bh->b_uptodate_lock);
++#endif
++}
++
+ /*
+  * macro tricks to expand the set_buffer_foo(), clear_buffer_foo()
+  * and buffer_foo() functions.
diff --git a/patches/features/all/rt/ftrace-Fix-trace-header-alignment.patch b/patches/features/all/rt/ftrace-Fix-trace-header-alignment.patch
new file mode 100644 (file)
index 0000000..8014a7d
--- /dev/null
@@ -0,0 +1,63 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sun, 16 Oct 2016 05:08:30 +0200
+Subject: [PATCH] ftrace: Fix trace header alignment
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Line up helper arrows to the right column.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+[bigeasy: fixup function tracer header]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/trace/trace.c |   32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -2896,17 +2896,17 @@ get_total_entries(struct trace_buffer *b
+ static void print_lat_help_header(struct seq_file *m)
+ {
+-      seq_puts(m, "#                   _--------=> CPU#              \n"
+-                  "#                  / _-------=> irqs-off          \n"
+-                  "#                 | / _------=> need-resched      \n"
+-                  "#                 || / _-----=> need-resched_lazy \n"
+-                  "#                 ||| / _----=> hardirq/softirq   \n"
+-                  "#                 |||| / _---=> preempt-depth     \n"
+-                  "#                 ||||| / _--=> preempt-lazy-depth\n"
+-                  "#                 |||||| / _-=> migrate-disable   \n"
+-                  "#                 ||||||| /     delay             \n"
+-                  "#  cmd     pid    |||||||| time  |   caller       \n"
+-                  "#     \\   /      ||||||||  \\   |   /            \n");
++      seq_puts(m, "#                  _--------=> CPU#              \n"
++                  "#                 / _-------=> irqs-off          \n"
++                  "#                | / _------=> need-resched      \n"
++                  "#                || / _-----=> need-resched_lazy \n"
++                  "#                ||| / _----=> hardirq/softirq   \n"
++                  "#                |||| / _---=> preempt-depth     \n"
++                  "#                ||||| / _--=> preempt-lazy-depth\n"
++                  "#                |||||| / _-=> migrate-disable   \n"
++                  "#                ||||||| /     delay             \n"
++                  "# cmd     pid    |||||||| time   |  caller       \n"
++                  "#     \\   /      ||||||||   \\    |  /            \n");
+ }
+ static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
+@@ -2935,11 +2935,11 @@ static void print_func_help_header_irq(s
+                   "#                            |/  _-----=> need-resched_lazy\n"
+                   "#                            || / _---=> hardirq/softirq\n"
+                   "#                            ||| / _--=> preempt-depth\n"
+-                  "#                            |||| /_--=> preempt-lazy-depth\n"
+-                  "#                            |||||  _-=> migrate-disable   \n"
+-                  "#                            ||||| /    delay\n"
+-                  "#           TASK-PID   CPU#  ||||||    TIMESTAMP  FUNCTION\n"
+-                  "#              | |       |   ||||||       |         |\n");
++                  "#                            |||| / _-=> preempt-lazy-depth\n"
++                  "#                            ||||| / _-=> migrate-disable   \n"
++                  "#                            |||||| /    delay\n"
++                  "#           TASK-PID   CPU#  |||||||   TIMESTAMP  FUNCTION\n"
++                  "#              | |       |   |||||||      |         |\n");
+ }
+ void
diff --git a/patches/features/all/rt/ftrace-migrate-disable-tracing.patch b/patches/features/all/rt/ftrace-migrate-disable-tracing.patch
new file mode 100644 (file)
index 0000000..db48440
--- /dev/null
@@ -0,0 +1,74 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 17 Jul 2011 21:56:42 +0200
+Subject: trace: Add migrate-disabled counter to tracing output
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/trace_events.h |    2 ++
+ kernel/trace/trace.c         |    9 ++++++---
+ kernel/trace/trace_events.c  |    2 ++
+ kernel/trace/trace_output.c  |    5 +++++
+ 4 files changed, 15 insertions(+), 3 deletions(-)
+
+--- a/include/linux/trace_events.h
++++ b/include/linux/trace_events.h
+@@ -56,6 +56,8 @@ struct trace_entry {
+       unsigned char           flags;
+       unsigned char           preempt_count;
+       int                     pid;
++      unsigned short          migrate_disable;
++      unsigned short          padding;
+ };
+ #define TRACE_EVENT_TYPE_MAX                                          \
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -1909,6 +1909,8 @@ tracing_generic_entry_update(struct trac
+               ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) |
+               (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
+               (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
++
++      entry->migrate_disable = (tsk) ? __migrate_disabled(tsk) & 0xFF : 0;
+ }
+ EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
+@@ -2897,9 +2899,10 @@ static void print_lat_help_header(struct
+                   "#                | / _----=> need-resched    \n"
+                   "#                || / _---=> hardirq/softirq \n"
+                   "#                ||| / _--=> preempt-depth   \n"
+-                  "#                |||| /     delay            \n"
+-                  "#  cmd     pid   ||||| time  |   caller      \n"
+-                  "#     \\   /      |||||  \\    |   /         \n");
++                  "#                |||| / _--=> migrate-disable\n"
++                  "#                ||||| /     delay           \n"
++                  "#  cmd     pid   |||||| time  |   caller     \n"
++                  "#     \\   /      |||||  \\   |   /          \n");
+ }
+ static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
+--- a/kernel/trace/trace_events.c
++++ b/kernel/trace/trace_events.c
+@@ -187,6 +187,8 @@ static int trace_define_common_fields(vo
+       __common_field(unsigned char, flags);
+       __common_field(unsigned char, preempt_count);
+       __common_field(int, pid);
++      __common_field(unsigned short, migrate_disable);
++      __common_field(unsigned short, padding);
+       return ret;
+ }
+--- a/kernel/trace/trace_output.c
++++ b/kernel/trace/trace_output.c
+@@ -432,6 +432,11 @@ int trace_print_lat_fmt(struct trace_seq
+       else
+               trace_seq_putc(s, '.');
++      if (entry->migrate_disable)
++              trace_seq_printf(s, "%x", entry->migrate_disable);
++      else
++              trace_seq_putc(s, '.');
++
+       return !trace_seq_has_overflowed(s);
+ }
diff --git a/patches/features/all/rt/futex-Ensure-lock-unlock-symetry-versus-pi_lock-and-.patch b/patches/features/all/rt/futex-Ensure-lock-unlock-symetry-versus-pi_lock-and-.patch
new file mode 100644 (file)
index 0000000..5d94006
--- /dev/null
@@ -0,0 +1,43 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 1 Mar 2013 11:17:42 +0100
+Subject: futex: Ensure lock/unlock symetry versus pi_lock and hash bucket lock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+In exit_pi_state_list() we have the following locking construct:
+
+   spin_lock(&hb->lock);
+   raw_spin_lock_irq(&curr->pi_lock);
+
+   ...
+   spin_unlock(&hb->lock);
+
+In !RT this works, but on RT the migrate_enable() function which is
+called from spin_unlock() sees atomic context due to the held pi_lock
+and just decrements the migrate_disable_atomic counter of the
+task. Now the next call to migrate_disable() sees the counter being
+negative and issues a warning. That check should be in
+migrate_enable() already.
+
+Fix this by dropping pi_lock before unlocking hb->lock and reaquire
+pi_lock after that again. This is safe as the loop code reevaluates
+head again under the pi_lock.
+
+Reported-by: Yong Zhang <yong.zhang@windriver.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -909,7 +909,9 @@ void exit_pi_state_list(struct task_stru
+                * task still owns the PI-state:
+                */
+               if (head->next != next) {
++                      raw_spin_unlock_irq(&curr->pi_lock);
+                       spin_unlock(&hb->lock);
++                      raw_spin_lock_irq(&curr->pi_lock);
+                       continue;
+               }
diff --git a/patches/features/all/rt/futex-requeue-pi-fix.patch b/patches/features/all/rt/futex-requeue-pi-fix.patch
new file mode 100644 (file)
index 0000000..708e2bc
--- /dev/null
@@ -0,0 +1,114 @@
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Tue, 14 Jul 2015 14:26:34 +0200
+Subject: futex: Fix bug on when a requeued RT task times out
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Requeue with timeout causes a bug with PREEMPT_RT_FULL.
+
+The bug comes from a timed out condition.
+
+
+       TASK 1                          TASK 2
+       ------                          ------
+    futex_wait_requeue_pi()
+       futex_wait_queue_me()
+       <timed out>
+
+                                       double_lock_hb();
+
+       raw_spin_lock(pi_lock);
+       if (current->pi_blocked_on) { 
+       } else {
+           current->pi_blocked_on = PI_WAKE_INPROGRESS;
+           run_spin_unlock(pi_lock);
+           spin_lock(hb->lock); <-- blocked!
+
+
+                                       plist_for_each_entry_safe(this) {
+                                           rt_mutex_start_proxy_lock();
+                                               task_blocks_on_rt_mutex();
+                                               BUG_ON(task->pi_blocked_on)!!!!
+
+The BUG_ON() actually has a check for PI_WAKE_INPROGRESS, but the
+problem is that, after TASK 1 sets PI_WAKE_INPROGRESS, it then tries to
+grab the hb->lock, which it fails to do so. As the hb->lock is a mutex,
+it will block and set the "pi_blocked_on" to the hb->lock.
+
+When TASK 2 goes to requeue it, the check for PI_WAKE_INPROGESS fails
+because the task1's pi_blocked_on is no longer set to that, but instead,
+set to the hb->lock.
+
+The fix:
+
+When calling rt_mutex_start_proxy_lock() a check is made to see
+if the proxy tasks pi_blocked_on is set. If so, exit out early.
+Otherwise set it to a new flag PI_REQUEUE_INPROGRESS, which notifies
+the proxy task that it is being requeued, and will handle things
+appropriately.
+
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/locking/rtmutex.c        |   32 +++++++++++++++++++++++++++++++-
+ kernel/locking/rtmutex_common.h |    1 +
+ 2 files changed, 32 insertions(+), 1 deletion(-)
+
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -135,7 +135,8 @@ static void fixup_rt_mutex_waiters(struc
+ static int rt_mutex_real_waiter(struct rt_mutex_waiter *waiter)
+ {
+-      return waiter && waiter != PI_WAKEUP_INPROGRESS;
++      return waiter && waiter != PI_WAKEUP_INPROGRESS &&
++              waiter != PI_REQUEUE_INPROGRESS;
+ }
+ /*
+@@ -1696,6 +1697,35 @@ int __rt_mutex_start_proxy_lock(struct r
+       if (try_to_take_rt_mutex(lock, task, NULL))
+               return 1;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      /*
++       * In PREEMPT_RT there's an added race.
++       * If the task, that we are about to requeue, times out,
++       * it can set the PI_WAKEUP_INPROGRESS. This tells the requeue
++       * to skip this task. But right after the task sets
++       * its pi_blocked_on to PI_WAKEUP_INPROGRESS it can then
++       * block on the spin_lock(&hb->lock), which in RT is an rtmutex.
++       * This will replace the PI_WAKEUP_INPROGRESS with the actual
++       * lock that it blocks on. We *must not* place this task
++       * on this proxy lock in that case.
++       *
++       * To prevent this race, we first take the task's pi_lock
++       * and check if it has updated its pi_blocked_on. If it has,
++       * we assume that it woke up and we return -EAGAIN.
++       * Otherwise, we set the task's pi_blocked_on to
++       * PI_REQUEUE_INPROGRESS, so that if the task is waking up
++       * it will know that we are in the process of requeuing it.
++       */
++      raw_spin_lock(&task->pi_lock);
++      if (task->pi_blocked_on) {
++              raw_spin_unlock(&task->pi_lock);
++              raw_spin_unlock_irq(&lock->wait_lock);
++              return -EAGAIN;
++      }
++      task->pi_blocked_on = PI_REQUEUE_INPROGRESS;
++      raw_spin_unlock(&task->pi_lock);
++#endif
++
+       /* We enforce deadlock detection for futexes */
+       ret = task_blocks_on_rt_mutex(lock, waiter, task,
+                                     RT_MUTEX_FULL_CHAINWALK);
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -99,6 +99,7 @@ enum rtmutex_chainwalk {
+  * PI-futex support (proxy locking functions, etc.):
+  */
+ #define PI_WAKEUP_INPROGRESS  ((struct rt_mutex_waiter *) 1)
++#define PI_REQUEUE_INPROGRESS ((struct rt_mutex_waiter *) 2)
+ extern struct task_struct *rt_mutex_next_owner(struct rt_mutex *lock);
+ extern void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
diff --git a/patches/features/all/rt/futex-workaround-migrate_disable-enable-in-different.patch b/patches/features/all/rt/futex-workaround-migrate_disable-enable-in-different.patch
new file mode 100644 (file)
index 0000000..a57a99f
--- /dev/null
@@ -0,0 +1,59 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 8 Mar 2017 14:23:35 +0100
+Subject: [PATCH] futex: workaround migrate_disable/enable in different context
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+migrate_disable()/migrate_enable() takes a different path in atomic() vs
+!atomic() context. These little hacks ensure that we don't underflow / overflow
+the migrate code counts properly while we lock the hb lockwith interrupts
+enabled and unlock it with interrupts disabled.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/futex.c |   20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -2667,9 +2667,18 @@ static int futex_lock_pi(u32 __user *uad
+        * lock handoff sequence.
+        */
+       raw_spin_lock_irq(&q.pi_state->pi_mutex.wait_lock);
++      /*
++       * the migrate_disable() here disables migration in the in_atomic() fast
++       * path which is enabled again in the following spin_unlock(). We have
++       * one migrate_disable() pending in the slow-path which is reversed
++       * after the raw_spin_unlock_irq() where we leave the atomic context.
++       */
++      migrate_disable();
++
+       spin_unlock(q.lock_ptr);
+       ret = __rt_mutex_start_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter, current);
+       raw_spin_unlock_irq(&q.pi_state->pi_mutex.wait_lock);
++      migrate_enable();
+       if (ret) {
+               if (ret == 1)
+@@ -2811,10 +2820,21 @@ static int futex_unlock_pi(u32 __user *u
+                * observed.
+                */
+               raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
++              /*
++               * Magic trickery for now to make the RT migrate disable
++               * logic happy. The following spin_unlock() happens with
++               * interrupts disabled so the internal migrate_enable()
++               * won't undo the migrate_disable() which was issued when
++               * locking hb->lock.
++               */
++              migrate_disable();
+               spin_unlock(&hb->lock);
++              /* Drops pi_state->pi_mutex.wait_lock */
+               ret = wake_futex_pi(uaddr, uval, pi_state);
++              migrate_enable();
++
+               put_pi_state(pi_state);
+               /*
diff --git a/patches/features/all/rt/genirq-disable-irqpoll-on-rt.patch b/patches/features/all/rt/genirq-disable-irqpoll-on-rt.patch
new file mode 100644 (file)
index 0000000..2b798f2
--- /dev/null
@@ -0,0 +1,38 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:57 -0500
+Subject: genirq: Disable irqpoll on -rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Creates long latencies for no value
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ kernel/irq/spurious.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/kernel/irq/spurious.c
++++ b/kernel/irq/spurious.c
+@@ -442,6 +442,10 @@ MODULE_PARM_DESC(noirqdebug, "Disable ir
+ static int __init irqfixup_setup(char *str)
+ {
++#ifdef CONFIG_PREEMPT_RT_BASE
++      pr_warn("irqfixup boot option not supported w/ CONFIG_PREEMPT_RT_BASE\n");
++      return 1;
++#endif
+       irqfixup = 1;
+       printk(KERN_WARNING "Misrouted IRQ fixup support enabled.\n");
+       printk(KERN_WARNING "This may impact system performance.\n");
+@@ -454,6 +458,10 @@ module_param(irqfixup, int, 0644);
+ static int __init irqpoll_setup(char *str)
+ {
++#ifdef CONFIG_PREEMPT_RT_BASE
++      pr_warn("irqpoll boot option not supported w/ CONFIG_PREEMPT_RT_BASE\n");
++      return 1;
++#endif
+       irqfixup = 2;
+       printk(KERN_WARNING "Misrouted IRQ fixup and polling support "
+                               "enabled\n");
diff --git a/patches/features/all/rt/genirq-do-not-invoke-the-affinity-callback-via-a-wor.patch b/patches/features/all/rt/genirq-do-not-invoke-the-affinity-callback-via-a-wor.patch
new file mode 100644 (file)
index 0000000..e0e1f84
--- /dev/null
@@ -0,0 +1,137 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 21 Aug 2013 17:48:46 +0200
+Subject: genirq: Do not invoke the affinity callback via a workqueue on RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Joe Korty reported, that __irq_set_affinity_locked() schedules a
+workqueue while holding a rawlock which results in a might_sleep()
+warning.
+This patch uses swork_queue() instead.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/scsi/qla2xxx/qla_isr.c |    4 +++
+ include/linux/interrupt.h      |    6 +++++
+ kernel/irq/manage.c            |   43 ++++++++++++++++++++++++++++++++++++++---
+ 3 files changed, 50 insertions(+), 3 deletions(-)
+
+--- a/drivers/scsi/qla2xxx/qla_isr.c
++++ b/drivers/scsi/qla2xxx/qla_isr.c
+@@ -3125,7 +3125,11 @@ qla24xx_enable_msix(struct qla_hw_data *
+               * kref_put().
+               */
+               kref_get(&qentry->irq_notify.kref);
++#ifdef CONFIG_PREEMPT_RT_BASE
++              swork_queue(&qentry->irq_notify.swork);
++#else
+               schedule_work(&qentry->irq_notify.work);
++#endif
+       }
+       /*
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -14,6 +14,7 @@
+ #include <linux/hrtimer.h>
+ #include <linux/kref.h>
+ #include <linux/workqueue.h>
++#include <linux/swork.h>
+ #include <linux/atomic.h>
+ #include <asm/ptrace.h>
+@@ -218,6 +219,7 @@ extern void resume_device_irqs(void);
+  * struct irq_affinity_notify - context for notification of IRQ affinity changes
+  * @irq:              Interrupt to which notification applies
+  * @kref:             Reference count, for internal use
++ * @swork:            Swork item, for internal use
+  * @work:             Work item, for internal use
+  * @notify:           Function to be called on change.  This will be
+  *                    called in process context.
+@@ -229,7 +231,11 @@ extern void resume_device_irqs(void);
+ struct irq_affinity_notify {
+       unsigned int irq;
+       struct kref kref;
++#ifdef CONFIG_PREEMPT_RT_BASE
++      struct swork_event swork;
++#else
+       struct work_struct work;
++#endif
+       void (*notify)(struct irq_affinity_notify *, const cpumask_t *mask);
+       void (*release)(struct kref *ref);
+ };
+--- a/kernel/irq/manage.c
++++ b/kernel/irq/manage.c
+@@ -235,7 +235,12 @@ int irq_set_affinity_locked(struct irq_d
+       if (desc->affinity_notify) {
+               kref_get(&desc->affinity_notify->kref);
++
++#ifdef CONFIG_PREEMPT_RT_BASE
++              swork_queue(&desc->affinity_notify->swork);
++#else
+               schedule_work(&desc->affinity_notify->work);
++#endif
+       }
+       irqd_set(data, IRQD_AFFINITY_SET);
+@@ -273,10 +278,8 @@ int irq_set_affinity_hint(unsigned int i
+ }
+ EXPORT_SYMBOL_GPL(irq_set_affinity_hint);
+-static void irq_affinity_notify(struct work_struct *work)
++static void _irq_affinity_notify(struct irq_affinity_notify *notify)
+ {
+-      struct irq_affinity_notify *notify =
+-              container_of(work, struct irq_affinity_notify, work);
+       struct irq_desc *desc = irq_to_desc(notify->irq);
+       cpumask_var_t cpumask;
+       unsigned long flags;
+@@ -298,6 +301,35 @@ static void irq_affinity_notify(struct w
+       kref_put(&notify->kref, notify->release);
+ }
++#ifdef CONFIG_PREEMPT_RT_BASE
++static void init_helper_thread(void)
++{
++      static int init_sworker_once;
++
++      if (init_sworker_once)
++              return;
++      if (WARN_ON(swork_get()))
++              return;
++      init_sworker_once = 1;
++}
++
++static void irq_affinity_notify(struct swork_event *swork)
++{
++      struct irq_affinity_notify *notify =
++              container_of(swork, struct irq_affinity_notify, swork);
++      _irq_affinity_notify(notify);
++}
++
++#else
++
++static void irq_affinity_notify(struct work_struct *work)
++{
++      struct irq_affinity_notify *notify =
++              container_of(work, struct irq_affinity_notify, work);
++      _irq_affinity_notify(notify);
++}
++#endif
++
+ /**
+  *    irq_set_affinity_notifier - control notification of IRQ affinity changes
+  *    @irq:           Interrupt for which to enable/disable notification
+@@ -326,7 +358,12 @@ irq_set_affinity_notifier(unsigned int i
+       if (notify) {
+               notify->irq = irq;
+               kref_init(&notify->kref);
++#ifdef CONFIG_PREEMPT_RT_BASE
++              INIT_SWORK(&notify->swork, irq_affinity_notify);
++              init_helper_thread();
++#else
+               INIT_WORK(&notify->work, irq_affinity_notify);
++#endif
+       }
+       raw_spin_lock_irqsave(&desc->lock, flags);
diff --git a/patches/features/all/rt/genirq-force-threading.patch b/patches/features/all/rt/genirq-force-threading.patch
new file mode 100644 (file)
index 0000000..2ed6e86
--- /dev/null
@@ -0,0 +1,49 @@
+Subject: genirq: Force interrupt thread on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 03 Apr 2011 11:57:29 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Force threaded_irqs and optimize the code (force_irqthreads) in regard
+to this.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/interrupt.h |    6 +++++-
+ kernel/irq/manage.c       |    2 ++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -406,9 +406,13 @@ extern int irq_set_irqchip_state(unsigne
+                                bool state);
+ #ifdef CONFIG_IRQ_FORCED_THREADING
++# ifndef CONFIG_PREEMPT_RT_BASE
+ extern bool force_irqthreads;
++# else
++#  define force_irqthreads    (true)
++# endif
+ #else
+-#define force_irqthreads      (0)
++#define force_irqthreads      (false)
+ #endif
+ #ifndef __ARCH_SET_SOFTIRQ_PENDING
+--- a/kernel/irq/manage.c
++++ b/kernel/irq/manage.c
+@@ -22,6 +22,7 @@
+ #include "internals.h"
+ #ifdef CONFIG_IRQ_FORCED_THREADING
++# ifndef CONFIG_PREEMPT_RT_BASE
+ __read_mostly bool force_irqthreads;
+ static int __init setup_forced_irqthreads(char *arg)
+@@ -30,6 +31,7 @@ static int __init setup_forced_irqthread
+       return 0;
+ }
+ early_param("threadirqs", setup_forced_irqthreads);
++# endif
+ #endif
+ static void __synchronize_hardirq(struct irq_desc *desc)
diff --git a/patches/features/all/rt/genirq-update-irq_set_irqchip_state-documentation.patch b/patches/features/all/rt/genirq-update-irq_set_irqchip_state-documentation.patch
new file mode 100644 (file)
index 0000000..24ceb10
--- /dev/null
@@ -0,0 +1,26 @@
+From: Josh Cartwright <joshc@ni.com>
+Date: Thu, 11 Feb 2016 11:54:00 -0600
+Subject: genirq: update irq_set_irqchip_state documentation
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On -rt kernels, the use of migrate_disable()/migrate_enable() is
+sufficient to guarantee a task isn't moved to another CPU.  Update the
+irq_set_irqchip_state() documentation to reflect this.
+
+Signed-off-by: Josh Cartwright <joshc@ni.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/irq/manage.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/irq/manage.c
++++ b/kernel/irq/manage.c
+@@ -2111,7 +2111,7 @@ EXPORT_SYMBOL_GPL(irq_get_irqchip_state)
+  *    This call sets the internal irqchip state of an interrupt,
+  *    depending on the value of @which.
+  *
+- *    This function should be called with preemption disabled if the
++ *    This function should be called with migration disabled if the
+  *    interrupt controller has per-cpu registers.
+  */
+ int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
diff --git a/patches/features/all/rt/genpatch.py b/patches/features/all/rt/genpatch.py
new file mode 100755 (executable)
index 0000000..eb3792d
--- /dev/null
@@ -0,0 +1,139 @@
+#!/usr/bin/python3
+
+import codecs, errno, io, os, os.path, re, shutil, subprocess, sys, tempfile
+
+def main(source, version=None):
+    patch_dir = 'debian/patches'
+    rt_patch_dir = 'features/all/rt'
+    series_name = 'series-rt'
+    old_series = set()
+    new_series = set()
+
+    try:
+        with open(os.path.join(patch_dir, series_name), 'r') as series_fh:
+            for line in series_fh:
+                name = line.strip()
+                if name != '' and name[0] != '#':
+                    old_series.add(name)
+    except FileNotFoundError:
+        pass
+
+    with open(os.path.join(patch_dir, series_name), 'w') as series_fh:
+        # Add directory prefix to all filenames.
+        # Add Origin to all patch headers.
+        def add_patch(name, source_patch, origin):
+            name = os.path.join(rt_patch_dir, name)
+            path = os.path.join(patch_dir, name)
+            try:
+                os.unlink(path)
+            except FileNotFoundError:
+                pass
+            with open(path, 'w') as patch:
+                in_header = True
+                for line in source_patch:
+                    if in_header and re.match(r'^(\n|[^\w\s]|Index:)', line):
+                        patch.write('Origin: %s\n' % origin)
+                        if line != '\n':
+                            patch.write('\n')
+                        in_header = False
+                    patch.write(line)
+            series_fh.write(name)
+            series_fh.write('\n')
+            new_series.add(name)
+
+        if os.path.isdir(os.path.join(source, '.git')):
+            # Export rebased branch from stable-rt git as patch series
+            up_ver = re.sub(r'-rt\d+$', '', version)
+            env = os.environ.copy()
+            env['GIT_DIR'] = os.path.join(source, '.git')
+            env['DEBIAN_KERNEL_KEYRING'] = 'rt-signing-key.pgp'
+
+            # Validate tag signature
+            gpg_wrapper = os.path.join(os.getcwd(),
+                                       "debian/bin/git-tag-gpg-wrapper")
+            verify_proc = subprocess.Popen(['git',
+                                            '-c', 'gpg.program=%s' % gpg_wrapper,
+                                            'tag', '-v', 'v%s-rebase' % version],
+                                           env=env)
+            if verify_proc.wait():
+                raise RuntimeError("GPG tag verification failed")
+
+            args = ['git', 'format-patch', 'v%s..v%s-rebase' % (up_ver, version)]
+            format_proc = subprocess.Popen(args,
+                                           cwd=os.path.join(patch_dir, rt_patch_dir),
+                                           env=env, stdout=subprocess.PIPE)
+            with io.open(format_proc.stdout.fileno(), encoding='utf-8') as pipe:
+                for line in pipe:
+                    name = line.strip('\n')
+                    with open(os.path.join(patch_dir, rt_patch_dir, name)) as \
+                            source_patch:
+                        patch_from = source_patch.readline()
+                        match = re.match(r'From ([0-9a-f]{40}) ', patch_from)
+                        assert match
+                        origin = 'https://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit?id=%s' % match.group(1)
+                        add_patch(name, source_patch, origin)
+
+        else:
+            # Get version and upstream version
+            if version is None:
+                match = re.search(r'(?:^|/)patches-(.+)\.tar\.[gx]z$', source)
+                assert match, 'no version specified or found in filename'
+                version = match.group(1)
+            match = re.match(r'^(\d+\.\d+)(?:\.\d+|-rc\d+)?-rt\d+$', version)
+            assert match, 'could not parse version string'
+            up_ver = match.group(1)
+
+            # Expect an accompanying signature, and validate it
+            source_sig = re.sub(r'.[gx]z$', '.sign', source)
+            unxz_proc = subprocess.Popen(['xzcat', source],
+                                         stdout=subprocess.PIPE)
+            verify_output = subprocess.check_output(
+                ['gpgv', '--status-fd', '1',
+                 '--keyring', 'debian/upstream/rt-signing-key.pgp',
+                 '--ignore-time-conflict', source_sig, '-'],
+                stdin=unxz_proc.stdout)
+            if unxz_proc.wait() or \
+               not re.search(r'^\[GNUPG:\]\s+VALIDSIG\s',
+                             codecs.decode(verify_output),
+                             re.MULTILINE):
+                os.write(2, verify_output) # bytes not str!
+                raise RuntimeError("GPG signature verification failed")
+
+            temp_dir = tempfile.mkdtemp(prefix='rt-genpatch', dir='debian')
+            try:
+                # Unpack tarball
+                subprocess.check_call(['tar', '-C', temp_dir, '-xaf', source])
+                source_dir = os.path.join(temp_dir, 'patches')
+                assert os.path.isdir(source_dir), 'tarball does not contain patches directory'
+
+                # Copy patch series
+                origin = 'https://www.kernel.org/pub/linux/kernel/projects/rt/%s/older/patches-%s.tar.xz' % (up_ver, version)
+                with open(os.path.join(source_dir, 'series'), 'r') as \
+                        source_series_fh:
+                    for line in source_series_fh:
+                        name = line.strip()
+                        if name != '' and name[0] != '#':
+                            with open(os.path.join(source_dir, name)) as source_patch:
+                                add_patch(name, source_patch, origin)
+                        else:
+                            # Leave comments and empty lines unchanged
+                            series_fh.write(line)
+            finally:
+                shutil.rmtree(temp_dir)
+
+    for name in new_series:
+        if name in old_series:
+            old_series.remove(name)
+        else:
+            print('Added patch', os.path.join(patch_dir, name))
+
+    for name in old_series:
+        print('Obsoleted patch', os.path.join(patch_dir, name))
+
+if __name__ == '__main__':
+    if not (1 <= len(sys.argv) <= 3):
+        print('Usage: %s {TAR [RT-VERSION] | REPO RT-VERSION}' % sys.argv[0], file=sys.stderr)
+        print('TAR is a tarball of patches.', file=sys.stderr)
+        print('REPO is a git repo containing the given RT-VERSION.', file=sys.stderr)
+        sys.exit(2)
+    main(*sys.argv[1:])
diff --git a/patches/features/all/rt/gpu_don_t_check_for_the_lock_owner.patch b/patches/features/all/rt/gpu_don_t_check_for_the_lock_owner.patch
new file mode 100644 (file)
index 0000000..ac3f1c0
--- /dev/null
@@ -0,0 +1,33 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Tue, 14 Jul 2015 14:26:34 +0200
+Subject: gpu: don't check for the lock owner.
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/gpu/drm/i915/i915_gem_shrinker.c |    2 +-
+ drivers/gpu/drm/msm/msm_gem_shrinker.c   |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
++++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
+@@ -40,7 +40,7 @@ static bool mutex_is_locked_by(struct mu
+       if (!mutex_is_locked(mutex))
+               return false;
+-#if defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_MUTEX_SPIN_ON_OWNER)
++#if (defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_MUTEX_SPIN_ON_OWNER)) && !defined(CONFIG_PREEMPT_RT_BASE)
+       return mutex->owner == task;
+ #else
+       /* Since UP may be pre-empted, we cannot assume that we own the lock */
+--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
++++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
+@@ -23,7 +23,7 @@ static bool mutex_is_locked_by(struct mu
+       if (!mutex_is_locked(mutex))
+               return false;
+-#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_MUTEXES)
++#if (defined(CONFIG_SMP) || defined(CONFIG_DEBUG_MUTEXES)) && !defined(CONFIG_PREEMPT_RT_BASE)
+       return mutex->owner == task;
+ #else
+       /* Since UP may be pre-empted, we cannot assume that we own the lock */
diff --git a/patches/features/all/rt/hotplug-Use-set_cpus_allowed_ptr-in-sync_unplug_thre.patch b/patches/features/all/rt/hotplug-Use-set_cpus_allowed_ptr-in-sync_unplug_thre.patch
new file mode 100644 (file)
index 0000000..52f3b19
--- /dev/null
@@ -0,0 +1,47 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Tue, 24 Mar 2015 08:14:49 +0100
+Subject: hotplug: Use set_cpus_allowed_ptr() in sync_unplug_thread()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+do_set_cpus_allowed() is not safe vs ->sched_class change.
+
+crash> bt
+PID: 11676  TASK: ffff88026f979da0  CPU: 22  COMMAND: "sync_unplug/22"
+ #0 [ffff880274d25bc8] machine_kexec at ffffffff8103b41c
+ #1 [ffff880274d25c18] crash_kexec at ffffffff810d881a
+ #2 [ffff880274d25cd8] oops_end at ffffffff81525818
+ #3 [ffff880274d25cf8] do_invalid_op at ffffffff81003096
+ #4 [ffff880274d25d90] invalid_op at ffffffff8152d3de
+    [exception RIP: set_cpus_allowed_rt+18]
+    RIP: ffffffff8109e012  RSP: ffff880274d25e48  RFLAGS: 00010202
+    RAX: ffffffff8109e000  RBX: ffff88026f979da0  RCX: ffff8802770cb6e8
+    RDX: 0000000000000000  RSI: ffffffff81add700  RDI: ffff88026f979da0
+    RBP: ffff880274d25e78   R8: ffffffff816112e0   R9: 0000000000000001
+    R10: 0000000000000001  R11: 0000000000011940  R12: ffff88026f979da0
+    R13: ffff8802770cb6d0  R14: ffff880274d25fd8  R15: 0000000000000000
+    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
+ #5 [ffff880274d25e60] do_set_cpus_allowed at ffffffff8108e65f
+ #6 [ffff880274d25e80] sync_unplug_thread at ffffffff81058c08
+ #7 [ffff880274d25ed8] kthread at ffffffff8107cad6
+ #8 [ffff880274d25f50] ret_from_fork at ffffffff8152bbbc
+crash> task_struct ffff88026f979da0 | grep class
+  sched_class = 0xffffffff816111e0 <fair_sched_class+64>,
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/cpu.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -418,7 +418,7 @@ static int sync_unplug_thread(void *data
+        * we don't want any more work on this CPU.
+        */
+       current->flags &= ~PF_NO_SETAFFINITY;
+-      do_set_cpus_allowed(current, cpu_present_mask);
++      set_cpus_allowed_ptr(current, cpu_present_mask);
+       migrate_me();
+       return 0;
+ }
diff --git a/patches/features/all/rt/hotplug-light-get-online-cpus.patch b/patches/features/all/rt/hotplug-light-get-online-cpus.patch
new file mode 100644 (file)
index 0000000..536504f
--- /dev/null
@@ -0,0 +1,198 @@
+Subject: hotplug: Lightweight get online cpus
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 15 Jun 2011 12:36:06 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+get_online_cpus() is a heavy weight function which involves a global
+mutex. migrate_disable() wants a simpler construct which prevents only
+a CPU from going doing while a task is in a migrate disabled section.
+
+Implement a per cpu lockless mechanism, which serializes only in the
+real unplug case on a global mutex. That serialization affects only
+tasks on the cpu which should be brought down.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/cpu.h |    7 +--
+ kernel/cpu.c        |  118 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 122 insertions(+), 3 deletions(-)
+
+--- a/include/linux/cpu.h
++++ b/include/linux/cpu.h
+@@ -173,9 +173,6 @@ static inline void cpu_notifier_register
+ #endif /* CONFIG_SMP */
+ extern struct bus_type cpu_subsys;
+-static inline void pin_current_cpu(void) { }
+-static inline void unpin_current_cpu(void) { }
+-
+ #ifdef CONFIG_HOTPLUG_CPU
+ /* Stop CPUs going up and down. */
+@@ -185,6 +182,8 @@ extern void get_online_cpus(void);
+ extern void put_online_cpus(void);
+ extern void cpu_hotplug_disable(void);
+ extern void cpu_hotplug_enable(void);
++extern void pin_current_cpu(void);
++extern void unpin_current_cpu(void);
+ #define hotcpu_notifier(fn, pri)      cpu_notifier(fn, pri)
+ #define __hotcpu_notifier(fn, pri)    __cpu_notifier(fn, pri)
+ #define register_hotcpu_notifier(nb)  register_cpu_notifier(nb)
+@@ -202,6 +201,8 @@ static inline void cpu_hotplug_done(void
+ #define put_online_cpus()     do { } while (0)
+ #define cpu_hotplug_disable() do { } while (0)
+ #define cpu_hotplug_enable()  do { } while (0)
++static inline void pin_current_cpu(void) { }
++static inline void unpin_current_cpu(void) { }
+ #define hotcpu_notifier(fn, pri)      do { (void)(fn); } while (0)
+ #define __hotcpu_notifier(fn, pri)    do { (void)(fn); } while (0)
+ /* These aren't inline functions due to a GCC bug. */
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -239,6 +239,100 @@ static struct {
+ #define cpuhp_lock_acquire()      lock_map_acquire(&cpu_hotplug.dep_map)
+ #define cpuhp_lock_release()      lock_map_release(&cpu_hotplug.dep_map)
++struct hotplug_pcp {
++      struct task_struct *unplug;
++      int refcount;
++      struct completion synced;
++};
++
++static DEFINE_PER_CPU(struct hotplug_pcp, hotplug_pcp);
++
++/**
++ * pin_current_cpu - Prevent the current cpu from being unplugged
++ *
++ * Lightweight version of get_online_cpus() to prevent cpu from being
++ * unplugged when code runs in a migration disabled region.
++ *
++ * Must be called with preemption disabled (preempt_count = 1)!
++ */
++void pin_current_cpu(void)
++{
++      struct hotplug_pcp *hp = this_cpu_ptr(&hotplug_pcp);
++
++retry:
++      if (!hp->unplug || hp->refcount || preempt_count() > 1 ||
++          hp->unplug == current) {
++              hp->refcount++;
++              return;
++      }
++      preempt_enable();
++      mutex_lock(&cpu_hotplug.lock);
++      mutex_unlock(&cpu_hotplug.lock);
++      preempt_disable();
++      goto retry;
++}
++
++/**
++ * unpin_current_cpu - Allow unplug of current cpu
++ *
++ * Must be called with preemption or interrupts disabled!
++ */
++void unpin_current_cpu(void)
++{
++      struct hotplug_pcp *hp = this_cpu_ptr(&hotplug_pcp);
++
++      WARN_ON(hp->refcount <= 0);
++
++      /* This is safe. sync_unplug_thread is pinned to this cpu */
++      if (!--hp->refcount && hp->unplug && hp->unplug != current)
++              wake_up_process(hp->unplug);
++}
++
++/*
++ * FIXME: Is this really correct under all circumstances ?
++ */
++static int sync_unplug_thread(void *data)
++{
++      struct hotplug_pcp *hp = data;
++
++      preempt_disable();
++      hp->unplug = current;
++      set_current_state(TASK_UNINTERRUPTIBLE);
++      while (hp->refcount) {
++              schedule_preempt_disabled();
++              set_current_state(TASK_UNINTERRUPTIBLE);
++      }
++      set_current_state(TASK_RUNNING);
++      preempt_enable();
++      complete(&hp->synced);
++      return 0;
++}
++
++/*
++ * Start the sync_unplug_thread on the target cpu and wait for it to
++ * complete.
++ */
++static int cpu_unplug_begin(unsigned int cpu)
++{
++      struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
++      struct task_struct *tsk;
++
++      init_completion(&hp->synced);
++      tsk = kthread_create(sync_unplug_thread, hp, "sync_unplug/%d\n", cpu);
++      if (IS_ERR(tsk))
++              return (PTR_ERR(tsk));
++      kthread_bind(tsk, cpu);
++      wake_up_process(tsk);
++      wait_for_completion(&hp->synced);
++      return 0;
++}
++
++static void cpu_unplug_done(unsigned int cpu)
++{
++      struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
++
++      hp->unplug = NULL;
++}
+ void get_online_cpus(void)
+ {
+@@ -877,6 +971,8 @@ static int __ref _cpu_down(unsigned int
+       struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
+       int prev_state, ret = 0;
+       bool hasdied = false;
++      int mycpu;
++      cpumask_var_t cpumask;
+       if (num_online_cpus() == 1)
+               return -EBUSY;
+@@ -884,7 +980,27 @@ static int __ref _cpu_down(unsigned int
+       if (!cpu_present(cpu))
+               return -EINVAL;
++      /* Move the downtaker off the unplug cpu */
++      if (!alloc_cpumask_var(&cpumask, GFP_KERNEL))
++              return -ENOMEM;
++      cpumask_andnot(cpumask, cpu_online_mask, cpumask_of(cpu));
++      set_cpus_allowed_ptr(current, cpumask);
++      free_cpumask_var(cpumask);
++      preempt_disable();
++      mycpu = smp_processor_id();
++      if (mycpu == cpu) {
++              printk(KERN_ERR "Yuck! Still on unplug CPU\n!");
++              preempt_enable();
++              return -EBUSY;
++      }
++      preempt_enable();
++
+       cpu_hotplug_begin();
++      ret = cpu_unplug_begin(cpu);
++      if (ret) {
++              printk("cpu_unplug_begin(%d) failed\n", cpu);
++              goto out_cancel;
++      }
+       cpuhp_tasks_frozen = tasks_frozen;
+@@ -923,6 +1039,8 @@ static int __ref _cpu_down(unsigned int
+       hasdied = prev_state != st->state && st->state == CPUHP_OFFLINE;
+ out:
++      cpu_unplug_done(cpu);
++out_cancel:
+       cpu_hotplug_done();
+       /* This post dead nonsense must die */
+       if (!ret && hasdied)
diff --git a/patches/features/all/rt/hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch b/patches/features/all/rt/hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch
new file mode 100644 (file)
index 0000000..5a6bc23
--- /dev/null
@@ -0,0 +1,25 @@
+Subject: hotplug: sync_unplug: No "\n" in task name
+From: Yong Zhang <yong.zhang0@gmail.com>
+Date: Sun, 16 Oct 2011 18:56:43 +0800
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Otherwise the output will look a little odd.
+
+Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
+Link: http://lkml.kernel.org/r/1318762607-2261-2-git-send-email-yong.zhang0@gmail.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/cpu.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -318,7 +318,7 @@ static int cpu_unplug_begin(unsigned int
+       struct task_struct *tsk;
+       init_completion(&hp->synced);
+-      tsk = kthread_create(sync_unplug_thread, hp, "sync_unplug/%d\n", cpu);
++      tsk = kthread_create(sync_unplug_thread, hp, "sync_unplug/%d", cpu);
+       if (IS_ERR(tsk))
+               return (PTR_ERR(tsk));
+       kthread_bind(tsk, cpu);
diff --git a/patches/features/all/rt/hotplug-use-migrate-disable.patch b/patches/features/all/rt/hotplug-use-migrate-disable.patch
new file mode 100644 (file)
index 0000000..6efab9e
--- /dev/null
@@ -0,0 +1,40 @@
+Subject: hotplug: Use migrate disable on unplug
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 17 Jul 2011 19:35:29 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Migration needs to be disabled accross the unplug handling to make
+sure that the unplug thread is off the unplugged cpu.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/cpu.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -988,14 +988,13 @@ static int __ref _cpu_down(unsigned int
+       cpumask_andnot(cpumask, cpu_online_mask, cpumask_of(cpu));
+       set_cpus_allowed_ptr(current, cpumask);
+       free_cpumask_var(cpumask);
+-      preempt_disable();
++      migrate_disable();
+       mycpu = smp_processor_id();
+       if (mycpu == cpu) {
+               printk(KERN_ERR "Yuck! Still on unplug CPU\n!");
+-              preempt_enable();
++              migrate_enable();
+               return -EBUSY;
+       }
+-      preempt_enable();
+       cpu_hotplug_begin();
+       ret = cpu_unplug_begin(cpu);
+@@ -1044,6 +1043,7 @@ static int __ref _cpu_down(unsigned int
+       cpu_unplug_done(cpu);
+ out_cancel:
+       cpu_hotplug_done();
++      migrate_enable();
+       /* This post dead nonsense must die */
+       if (!ret && hasdied)
+               cpu_notify_nofail(CPU_POST_DEAD, cpu);
diff --git a/patches/features/all/rt/hrtimer-Move-schedule_work-call-to-helper-thread.patch b/patches/features/all/rt/hrtimer-Move-schedule_work-call-to-helper-thread.patch
new file mode 100644 (file)
index 0000000..b2b5286
--- /dev/null
@@ -0,0 +1,92 @@
+From: Yang Shi <yang.shi@windriver.com>
+Date: Mon, 16 Sep 2013 14:09:19 -0700
+Subject: hrtimer: Move schedule_work call to helper thread
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When run ltp leapsec_timer test, the following call trace is caught:
+
+BUG: sleeping function called from invalid context at kernel/rtmutex.c:659
+in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/1
+Preemption disabled at:[<ffffffff810857f3>] cpu_startup_entry+0x133/0x310
+
+CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.10.10-rt3 #2
+Hardware name: Intel Corporation Calpella platform/MATXM-CORE-411-B, BIOS 4.6.3 08/18/2010
+ffffffff81c2f800 ffff880076843e40 ffffffff8169918d ffff880076843e58
+ffffffff8106db31 ffff88007684b4a0 ffff880076843e70 ffffffff8169d9c0
+ffff88007684b4a0 ffff880076843eb0 ffffffff81059da1 0000001876851200
+Call Trace:
+<IRQ>  [<ffffffff8169918d>] dump_stack+0x19/0x1b
+[<ffffffff8106db31>] __might_sleep+0xf1/0x170
+[<ffffffff8169d9c0>] rt_spin_lock+0x20/0x50
+[<ffffffff81059da1>] queue_work_on+0x61/0x100
+[<ffffffff81065aa1>] clock_was_set_delayed+0x21/0x30
+[<ffffffff810883be>] do_timer+0x40e/0x660
+[<ffffffff8108f487>] tick_do_update_jiffies64+0xf7/0x140
+[<ffffffff8108fe42>] tick_check_idle+0x92/0xc0
+[<ffffffff81044327>] irq_enter+0x57/0x70
+[<ffffffff816a040e>] smp_apic_timer_interrupt+0x3e/0x9b
+[<ffffffff8169f80a>] apic_timer_interrupt+0x6a/0x70
+<EOI>  [<ffffffff8155ea1c>] ? cpuidle_enter_state+0x4c/0xc0
+[<ffffffff8155eb68>] cpuidle_idle_call+0xd8/0x2d0
+[<ffffffff8100b59e>] arch_cpu_idle+0xe/0x30
+[<ffffffff8108585e>] cpu_startup_entry+0x19e/0x310
+[<ffffffff8168efa2>] start_secondary+0x1ad/0x1b0
+
+The clock_was_set_delayed is called in hard IRQ handler (timer interrupt), which
+calls schedule_work.
+
+Under PREEMPT_RT_FULL, schedule_work calls spinlocks which could sleep, so it's
+not safe to call schedule_work in interrupt context.
+
+Reference upstream commit b68d61c705ef02384c0538b8d9374545097899ca
+(rt,ntp: Move call to schedule_delayed_work() to helper thread)
+from git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git, which
+makes a similar change.
+
+Signed-off-by: Yang Shi <yang.shi@windriver.com>
+[bigeasy: use swork_queue() instead a helper thread]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/time/hrtimer.c |   24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -696,6 +696,29 @@ static void hrtimer_switch_to_hres(void)
+       retrigger_next_event(NULL);
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++
++static struct swork_event clock_set_delay_work;
++
++static void run_clock_set_delay(struct swork_event *event)
++{
++      clock_was_set();
++}
++
++void clock_was_set_delayed(void)
++{
++      swork_queue(&clock_set_delay_work);
++}
++
++static __init int create_clock_set_delay_thread(void)
++{
++      WARN_ON(swork_get());
++      INIT_SWORK(&clock_set_delay_work, run_clock_set_delay);
++      return 0;
++}
++early_initcall(create_clock_set_delay_thread);
++#else /* PREEMPT_RT_FULL */
++
+ static void clock_was_set_work(struct work_struct *work)
+ {
+       clock_was_set();
+@@ -711,6 +734,7 @@ void clock_was_set_delayed(void)
+ {
+       schedule_work(&hrtimer_work);
+ }
++#endif
+ #else
diff --git a/patches/features/all/rt/hrtimer-enfore-64byte-alignment.patch b/patches/features/all/rt/hrtimer-enfore-64byte-alignment.patch
new file mode 100644 (file)
index 0000000..ab77f96
--- /dev/null
@@ -0,0 +1,28 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 23 Dec 2015 20:57:41 +0100
+Subject: hrtimer: enfore 64byte alignment
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The patch "hrtimer: Fixup hrtimer callback changes for preempt-rt" adds
+a list_head expired to struct hrtimer_clock_base and with it we run into
+BUILD_BUG_ON(sizeof(struct hrtimer_clock_base) > HRTIMER_CLOCK_BASE_ALIGN);
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/hrtimer.h |    4 ----
+ 1 file changed, 4 deletions(-)
+
+--- a/include/linux/hrtimer.h
++++ b/include/linux/hrtimer.h
+@@ -127,11 +127,7 @@ struct hrtimer_sleeper {
+       struct task_struct *task;
+ };
+-#ifdef CONFIG_64BIT
+ # define HRTIMER_CLOCK_BASE_ALIGN     64
+-#else
+-# define HRTIMER_CLOCK_BASE_ALIGN     32
+-#endif
+ /**
+  * struct hrtimer_clock_base - the timer base for a specific clock
diff --git a/patches/features/all/rt/hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch b/patches/features/all/rt/hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
new file mode 100644 (file)
index 0000000..5389775
--- /dev/null
@@ -0,0 +1,341 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 3 Jul 2009 08:44:31 -0500
+Subject: hrtimer: Fixup hrtimer callback changes for preempt-rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+In preempt-rt we can not call the callbacks which take sleeping locks
+from the timer interrupt context.
+
+Bring back the softirq split for now, until we fixed the signal
+delivery problem for real.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+
+---
+ include/linux/hrtimer.h  |    7 ++
+ kernel/sched/core.c      |    1 
+ kernel/sched/rt.c        |    1 
+ kernel/time/hrtimer.c    |  144 ++++++++++++++++++++++++++++++++++++++++++++---
+ kernel/time/tick-sched.c |    1 
+ kernel/watchdog.c        |    1 
+ 6 files changed, 146 insertions(+), 9 deletions(-)
+
+--- a/include/linux/hrtimer.h
++++ b/include/linux/hrtimer.h
+@@ -87,6 +87,8 @@ enum hrtimer_restart {
+  * @function: timer expiry callback function
+  * @base:     pointer to the timer base (per cpu and per clock)
+  * @state:    state information (See bit values above)
++ * @cb_entry: list entry to defer timers from hardirq context
++ * @irqsafe:  timer can run in hardirq context
+  * @praecox:  timer expiry time if expired at the time of programming
+  * @is_rel:   Set if the timer was armed relative
+  * @start_pid:  timer statistics field to store the pid of the task which
+@@ -104,6 +106,8 @@ struct hrtimer {
+       enum hrtimer_restart            (*function)(struct hrtimer *);
+       struct hrtimer_clock_base       *base;
+       u8                              state;
++      struct list_head                cb_entry;
++      int                             irqsafe;
+ #ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
+       ktime_t                         praecox;
+ #endif
+@@ -136,6 +140,7 @@ struct hrtimer_sleeper {
+  *                    timer to a base on another cpu.
+  * @clockid:          clock id for per_cpu support
+  * @active:           red black tree root node for the active timers
++ * @expired:          list head for deferred timers.
+  * @get_time:         function to retrieve the current time of the clock
+  * @offset:           offset of this clock to the monotonic base
+  */
+@@ -144,6 +149,7 @@ struct hrtimer_clock_base {
+       int                     index;
+       clockid_t               clockid;
+       struct timerqueue_head  active;
++      struct list_head        expired;
+       ktime_t                 (*get_time)(void);
+       ktime_t                 offset;
+ } __attribute__((__aligned__(HRTIMER_CLOCK_BASE_ALIGN)));
+@@ -187,6 +193,7 @@ struct hrtimer_cpu_base {
+       raw_spinlock_t                  lock;
+       seqcount_t                      seq;
+       struct hrtimer                  *running;
++      struct hrtimer                  *running_soft;
+       unsigned int                    cpu;
+       unsigned int                    active_bases;
+       unsigned int                    clock_was_set_seq;
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -345,6 +345,7 @@ static void init_rq_hrtick(struct rq *rq
+       hrtimer_init(&rq->hrtick_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+       rq->hrtick_timer.function = hrtick;
++      rq->hrtick_timer.irqsafe = 1;
+ }
+ #else /* CONFIG_SCHED_HRTICK */
+ static inline void hrtick_clear(struct rq *rq)
+--- a/kernel/sched/rt.c
++++ b/kernel/sched/rt.c
+@@ -47,6 +47,7 @@ void init_rt_bandwidth(struct rt_bandwid
+       hrtimer_init(&rt_b->rt_period_timer,
+                       CLOCK_MONOTONIC, HRTIMER_MODE_REL);
++      rt_b->rt_period_timer.irqsafe = 1;
+       rt_b->rt_period_timer.function = sched_rt_period_timer;
+ }
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -720,11 +720,8 @@ static inline int hrtimer_is_hres_enable
+ static inline void hrtimer_switch_to_hres(void) { }
+ static inline void
+ hrtimer_force_reprogram(struct hrtimer_cpu_base *base, int skip_equal) { }
+-static inline int hrtimer_reprogram(struct hrtimer *timer,
+-                                  struct hrtimer_clock_base *base)
+-{
+-      return 0;
+-}
++static inline void hrtimer_reprogram(struct hrtimer *timer,
++                                   struct hrtimer_clock_base *base) { }
+ static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) { }
+ static inline void retrigger_next_event(void *arg) { }
+@@ -873,7 +870,7 @@ void hrtimer_wait_for_timer(const struct
+ {
+       struct hrtimer_clock_base *base = timer->base;
+-      if (base && base->cpu_base && !hrtimer_hres_active())
++      if (base && base->cpu_base && !timer->irqsafe)
+               wait_event(base->cpu_base->wait,
+                               !(hrtimer_callback_running(timer)));
+ }
+@@ -923,6 +920,11 @@ static void __remove_hrtimer(struct hrti
+       if (!(state & HRTIMER_STATE_ENQUEUED))
+               return;
++      if (unlikely(!list_empty(&timer->cb_entry))) {
++              list_del_init(&timer->cb_entry);
++              return;
++      }
++
+       if (!timerqueue_del(&base->active, &timer->node))
+               cpu_base->active_bases &= ~(1 << base->index);
+@@ -1163,6 +1165,7 @@ static void __hrtimer_init(struct hrtime
+       base = hrtimer_clockid_to_base(clock_id);
+       timer->base = &cpu_base->clock_base[base];
++      INIT_LIST_HEAD(&timer->cb_entry);
+       timerqueue_init(&timer->node);
+ #ifdef CONFIG_TIMER_STATS
+@@ -1203,6 +1206,7 @@ bool hrtimer_active(const struct hrtimer
+               seq = raw_read_seqcount_begin(&cpu_base->seq);
+               if (timer->state != HRTIMER_STATE_INACTIVE ||
++                  cpu_base->running_soft == timer ||
+                   cpu_base->running == timer)
+                       return true;
+@@ -1301,12 +1305,112 @@ static void __run_hrtimer(struct hrtimer
+       cpu_base->running = NULL;
+ }
++#ifdef CONFIG_PREEMPT_RT_BASE
++static void hrtimer_rt_reprogram(int restart, struct hrtimer *timer,
++                               struct hrtimer_clock_base *base)
++{
++      int leftmost;
++
++      if (restart != HRTIMER_NORESTART &&
++          !(timer->state & HRTIMER_STATE_ENQUEUED)) {
++
++              leftmost = enqueue_hrtimer(timer, base);
++              if (!leftmost)
++                      return;
++#ifdef CONFIG_HIGH_RES_TIMERS
++              if (!hrtimer_is_hres_active(timer)) {
++                      /*
++                       * Kick to reschedule the next tick to handle the new timer
++                       * on dynticks target.
++                       */
++                      if (base->cpu_base->nohz_active)
++                              wake_up_nohz_cpu(base->cpu_base->cpu);
++              } else {
++
++                      hrtimer_reprogram(timer, base);
++              }
++#endif
++      }
++}
++
++/*
++ * The changes in mainline which removed the callback modes from
++ * hrtimer are not yet working with -rt. The non wakeup_process()
++ * based callbacks which involve sleeping locks need to be treated
++ * seperately.
++ */
++static void hrtimer_rt_run_pending(void)
++{
++      enum hrtimer_restart (*fn)(struct hrtimer *);
++      struct hrtimer_cpu_base *cpu_base;
++      struct hrtimer_clock_base *base;
++      struct hrtimer *timer;
++      int index, restart;
++
++      local_irq_disable();
++      cpu_base = &per_cpu(hrtimer_bases, smp_processor_id());
++
++      raw_spin_lock(&cpu_base->lock);
++
++      for (index = 0; index < HRTIMER_MAX_CLOCK_BASES; index++) {
++              base = &cpu_base->clock_base[index];
++
++              while (!list_empty(&base->expired)) {
++                      timer = list_first_entry(&base->expired,
++                                               struct hrtimer, cb_entry);
++
++                      /*
++                       * Same as the above __run_hrtimer function
++                       * just we run with interrupts enabled.
++                       */
++                      debug_deactivate(timer);
++                      cpu_base->running_soft = timer;
++                      raw_write_seqcount_barrier(&cpu_base->seq);
++
++                      __remove_hrtimer(timer, base, HRTIMER_STATE_INACTIVE, 0);
++                      timer_stats_account_hrtimer(timer);
++                      fn = timer->function;
++
++                      raw_spin_unlock_irq(&cpu_base->lock);
++                      restart = fn(timer);
++                      raw_spin_lock_irq(&cpu_base->lock);
++
++                      hrtimer_rt_reprogram(restart, timer, base);
++                      raw_write_seqcount_barrier(&cpu_base->seq);
++
++                      WARN_ON_ONCE(cpu_base->running_soft != timer);
++                      cpu_base->running_soft = NULL;
++              }
++      }
++
++      raw_spin_unlock_irq(&cpu_base->lock);
++
++      wake_up_timer_waiters(cpu_base);
++}
++
++static int hrtimer_rt_defer(struct hrtimer *timer)
++{
++      if (timer->irqsafe)
++              return 0;
++
++      __remove_hrtimer(timer, timer->base, timer->state, 0);
++      list_add_tail(&timer->cb_entry, &timer->base->expired);
++      return 1;
++}
++
++#else
++
++static inline int hrtimer_rt_defer(struct hrtimer *timer) { return 0; }
++
++#endif
++
+ static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer);
+ static void __hrtimer_run_queues(struct hrtimer_cpu_base *cpu_base, ktime_t now)
+ {
+       struct hrtimer_clock_base *base = cpu_base->clock_base;
+       unsigned int active = cpu_base->active_bases;
++      int raise = 0;
+       for (; active; base++, active >>= 1) {
+               struct timerqueue_node *node;
+@@ -1346,9 +1450,14 @@ static void __hrtimer_run_queues(struct
+                       if (basenow.tv64 < hrtimer_get_softexpires_tv64(timer))
+                               break;
+-                      __run_hrtimer(cpu_base, base, timer, &basenow);
++                      if (!hrtimer_rt_defer(timer))
++                              __run_hrtimer(cpu_base, base, timer, &basenow);
++                      else
++                              raise = 1;
+               }
+       }
++      if (raise)
++              raise_softirq_irqoff(HRTIMER_SOFTIRQ);
+ }
+ #ifdef CONFIG_HIGH_RES_TIMERS
+@@ -1490,8 +1599,6 @@ void hrtimer_run_queues(void)
+       now = hrtimer_update_base(cpu_base);
+       __hrtimer_run_queues(cpu_base, now);
+       raw_spin_unlock(&cpu_base->lock);
+-
+-      wake_up_timer_waiters(cpu_base);
+ }
+ /*
+@@ -1513,6 +1620,7 @@ static enum hrtimer_restart hrtimer_wake
+ void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task)
+ {
+       sl->timer.function = hrtimer_wakeup;
++      sl->timer.irqsafe = 1;
+       sl->task = task;
+ }
+ EXPORT_SYMBOL_GPL(hrtimer_init_sleeper);
+@@ -1647,6 +1755,7 @@ int hrtimers_prepare_cpu(unsigned int cp
+       for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
+               cpu_base->clock_base[i].cpu_base = cpu_base;
+               timerqueue_init_head(&cpu_base->clock_base[i].active);
++              INIT_LIST_HEAD(&cpu_base->clock_base[i].expired);
+       }
+       cpu_base->cpu = cpu;
+@@ -1723,9 +1832,26 @@ int hrtimers_dead_cpu(unsigned int scpu)
+ #endif /* CONFIG_HOTPLUG_CPU */
++#ifdef CONFIG_PREEMPT_RT_BASE
++
++static void run_hrtimer_softirq(struct softirq_action *h)
++{
++      hrtimer_rt_run_pending();
++}
++
++static void hrtimers_open_softirq(void)
++{
++      open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq);
++}
++
++#else
++static void hrtimers_open_softirq(void) { }
++#endif
++
+ void __init hrtimers_init(void)
+ {
+       hrtimers_prepare_cpu(smp_processor_id());
++      hrtimers_open_softirq();
+ }
+ /**
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -1198,6 +1198,7 @@ void tick_setup_sched_timer(void)
+        * Emulate tick processing via per-CPU hrtimers:
+        */
+       hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
++      ts->sched_timer.irqsafe = 1;
+       ts->sched_timer.function = tick_sched_timer;
+       /* Get the next period (per-CPU) */
+--- a/kernel/watchdog.c
++++ b/kernel/watchdog.c
+@@ -522,6 +522,7 @@ static void watchdog_enable(unsigned int
+       /* kick off the timer for the hardlockup detector */
+       hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+       hrtimer->function = watchdog_timer_fn;
++      hrtimer->irqsafe = 1;
+       /* Enable the perf event */
+       watchdog_nmi_enable(cpu);
diff --git a/patches/features/all/rt/hrtimers-prepare-full-preemption.patch b/patches/features/all/rt/hrtimers-prepare-full-preemption.patch
new file mode 100644 (file)
index 0000000..1c8371e
--- /dev/null
@@ -0,0 +1,205 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:34 -0500
+Subject: hrtimers: Prepare full preemption
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Make cancellation of a running callback in softirq context safe
+against preemption.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/hrtimer.h    |   12 +++++++++++-
+ kernel/time/hrtimer.c      |   33 ++++++++++++++++++++++++++++++++-
+ kernel/time/itimer.c       |    1 +
+ kernel/time/posix-timers.c |   33 +++++++++++++++++++++++++++++++++
+ 4 files changed, 77 insertions(+), 2 deletions(-)
+
+--- a/include/linux/hrtimer.h
++++ b/include/linux/hrtimer.h
+@@ -207,6 +207,9 @@ struct hrtimer_cpu_base {
+       unsigned int                    nr_hangs;
+       unsigned int                    max_hang_time;
+ #endif
++#ifdef CONFIG_PREEMPT_RT_BASE
++      wait_queue_head_t               wait;
++#endif
+       struct hrtimer_clock_base       clock_base[HRTIMER_MAX_CLOCK_BASES];
+ } ____cacheline_aligned;
+@@ -416,6 +419,13 @@ static inline void hrtimer_restart(struc
+       hrtimer_start_expires(timer, HRTIMER_MODE_ABS);
+ }
++/* Softirq preemption could deadlock timer removal */
++#ifdef CONFIG_PREEMPT_RT_BASE
++  extern void hrtimer_wait_for_timer(const struct hrtimer *timer);
++#else
++# define hrtimer_wait_for_timer(timer)        do { cpu_relax(); } while (0)
++#endif
++
+ /* Query timers: */
+ extern ktime_t __hrtimer_get_remaining(const struct hrtimer *timer, bool adjust);
+@@ -440,7 +450,7 @@ static inline int hrtimer_is_queued(stru
+  * Helper function to check, whether the timer is running the callback
+  * function
+  */
+-static inline int hrtimer_callback_running(struct hrtimer *timer)
++static inline int hrtimer_callback_running(const struct hrtimer *timer)
+ {
+       return timer->base->cpu_base->running == timer;
+ }
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -856,6 +856,32 @@ u64 hrtimer_forward(struct hrtimer *time
+ }
+ EXPORT_SYMBOL_GPL(hrtimer_forward);
++#ifdef CONFIG_PREEMPT_RT_BASE
++# define wake_up_timer_waiters(b)     wake_up(&(b)->wait)
++
++/**
++ * hrtimer_wait_for_timer - Wait for a running timer
++ *
++ * @timer:    timer to wait for
++ *
++ * The function waits in case the timers callback function is
++ * currently executed on the waitqueue of the timer base. The
++ * waitqueue is woken up after the timer callback function has
++ * finished execution.
++ */
++void hrtimer_wait_for_timer(const struct hrtimer *timer)
++{
++      struct hrtimer_clock_base *base = timer->base;
++
++      if (base && base->cpu_base && !hrtimer_hres_active())
++              wait_event(base->cpu_base->wait,
++                              !(hrtimer_callback_running(timer)));
++}
++
++#else
++# define wake_up_timer_waiters(b)     do { } while (0)
++#endif
++
+ /*
+  * enqueue_hrtimer - internal function to (re)start a timer
+  *
+@@ -1073,7 +1099,7 @@ int hrtimer_cancel(struct hrtimer *timer
+               if (ret >= 0)
+                       return ret;
+-              cpu_relax();
++              hrtimer_wait_for_timer(timer);
+       }
+ }
+ EXPORT_SYMBOL_GPL(hrtimer_cancel);
+@@ -1464,6 +1490,8 @@ void hrtimer_run_queues(void)
+       now = hrtimer_update_base(cpu_base);
+       __hrtimer_run_queues(cpu_base, now);
+       raw_spin_unlock(&cpu_base->lock);
++
++      wake_up_timer_waiters(cpu_base);
+ }
+ /*
+@@ -1623,6 +1651,9 @@ int hrtimers_prepare_cpu(unsigned int cp
+       cpu_base->cpu = cpu;
+       hrtimer_init_hres(cpu_base);
++#ifdef CONFIG_PREEMPT_RT_BASE
++      init_waitqueue_head(&cpu_base->wait);
++#endif
+       return 0;
+ }
+--- a/kernel/time/itimer.c
++++ b/kernel/time/itimer.c
+@@ -213,6 +213,7 @@ int do_setitimer(int which, struct itime
+               /* We are sharing ->siglock with it_real_fn() */
+               if (hrtimer_try_to_cancel(timer) < 0) {
+                       spin_unlock_irq(&tsk->sighand->siglock);
++                      hrtimer_wait_for_timer(&tsk->signal->real_timer);
+                       goto again;
+               }
+               expires = timeval_to_ktime(value->it_value);
+--- a/kernel/time/posix-timers.c
++++ b/kernel/time/posix-timers.c
+@@ -828,6 +828,20 @@ SYSCALL_DEFINE1(timer_getoverrun, timer_
+       return overrun;
+ }
++/*
++ * Protected by RCU!
++ */
++static void timer_wait_for_callback(struct k_clock *kc, struct k_itimer *timr)
++{
++#ifdef CONFIG_PREEMPT_RT_FULL
++      if (kc->timer_set == common_timer_set)
++              hrtimer_wait_for_timer(&timr->it.real.timer);
++      else
++              /* FIXME: Whacky hack for posix-cpu-timers */
++              schedule_timeout(1);
++#endif
++}
++
+ /* Set a POSIX.1b interval timer. */
+ /* timr->it_lock is taken. */
+ static int
+@@ -905,6 +919,7 @@ SYSCALL_DEFINE4(timer_settime, timer_t,
+       if (!timr)
+               return -EINVAL;
++      rcu_read_lock();
+       kc = clockid_to_kclock(timr->it_clock);
+       if (WARN_ON_ONCE(!kc || !kc->timer_set))
+               error = -EINVAL;
+@@ -913,9 +928,12 @@ SYSCALL_DEFINE4(timer_settime, timer_t,
+       unlock_timer(timr, flag);
+       if (error == TIMER_RETRY) {
++              timer_wait_for_callback(kc, timr);
+               rtn = NULL;     // We already got the old time...
++              rcu_read_unlock();
+               goto retry;
+       }
++      rcu_read_unlock();
+       if (old_setting && !error &&
+           copy_to_user(old_setting, &old_spec, sizeof (old_spec)))
+@@ -953,10 +971,15 @@ SYSCALL_DEFINE1(timer_delete, timer_t, t
+       if (!timer)
+               return -EINVAL;
++      rcu_read_lock();
+       if (timer_delete_hook(timer) == TIMER_RETRY) {
+               unlock_timer(timer, flags);
++              timer_wait_for_callback(clockid_to_kclock(timer->it_clock),
++                                      timer);
++              rcu_read_unlock();
+               goto retry_delete;
+       }
++      rcu_read_unlock();
+       spin_lock(&current->sighand->siglock);
+       list_del(&timer->list);
+@@ -982,8 +1005,18 @@ static void itimer_delete(struct k_itime
+ retry_delete:
+       spin_lock_irqsave(&timer->it_lock, flags);
++      /* On RT we can race with a deletion */
++      if (!timer->it_signal) {
++              unlock_timer(timer, flags);
++              return;
++      }
++
+       if (timer_delete_hook(timer) == TIMER_RETRY) {
++              rcu_read_lock();
+               unlock_timer(timer, flags);
++              timer_wait_for_callback(clockid_to_kclock(timer->it_clock),
++                                      timer);
++              rcu_read_unlock();
+               goto retry_delete;
+       }
+       list_del(&timer->list);
diff --git a/patches/features/all/rt/i915-bogus-warning-from-i915-when-running-on-PREEMPT.patch b/patches/features/all/rt/i915-bogus-warning-from-i915-when-running-on-PREEMPT.patch
new file mode 100644 (file)
index 0000000..10beb33
--- /dev/null
@@ -0,0 +1,30 @@
+From: Clark Williams <williams@redhat.com>
+Date: Tue, 26 May 2015 10:43:43 -0500
+Subject: i915: bogus warning from i915 when running on PREEMPT_RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The i915 driver has a 'WARN_ON(!in_interrupt())' in the display
+handler, which whines constanly on the RT kernel (since the interrupt
+is actually handled in a threaded handler and not actual interrupt
+context).
+
+Change the WARN_ON to WARN_ON_NORT
+
+Tested-by: Joakim Hernberg <jhernberg@alchemy.lu>
+Signed-off-by: Clark Williams <williams@redhat.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/gpu/drm/i915/intel_display.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -12141,7 +12141,7 @@ void intel_check_page_flip(struct drm_i9
+       struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+       struct intel_flip_work *work;
+-      WARN_ON(!in_interrupt());
++      WARN_ON_NONRT(!in_interrupt());
+       if (crtc == NULL)
+               return;
diff --git a/patches/features/all/rt/ide-use-nort-local-irq-variants.patch b/patches/features/all/rt/ide-use-nort-local-irq-variants.patch
new file mode 100644 (file)
index 0000000..12018e5
--- /dev/null
@@ -0,0 +1,170 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:30:16 -0500
+Subject: ide: Do not disable interrupts for PREEMPT-RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use the local_irq_*_nort variants.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/ide/alim15x3.c     |    4 ++--
+ drivers/ide/hpt366.c       |    4 ++--
+ drivers/ide/ide-io-std.c   |    8 ++++----
+ drivers/ide/ide-io.c       |    2 +-
+ drivers/ide/ide-iops.c     |    4 ++--
+ drivers/ide/ide-probe.c    |    4 ++--
+ drivers/ide/ide-taskfile.c |    6 +++---
+ 7 files changed, 16 insertions(+), 16 deletions(-)
+
+--- a/drivers/ide/alim15x3.c
++++ b/drivers/ide/alim15x3.c
+@@ -234,7 +234,7 @@ static int init_chipset_ali15x3(struct p
+       isa_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL);
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       if (m5229_revision < 0xC2) {
+               /*
+@@ -325,7 +325,7 @@ static int init_chipset_ali15x3(struct p
+       }
+       pci_dev_put(north);
+       pci_dev_put(isa_dev);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+       return 0;
+ }
+--- a/drivers/ide/hpt366.c
++++ b/drivers/ide/hpt366.c
+@@ -1236,7 +1236,7 @@ static int init_dma_hpt366(ide_hwif_t *h
+       dma_old = inb(base + 2);
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       dma_new = dma_old;
+       pci_read_config_byte(dev, hwif->channel ? 0x4b : 0x43, &masterdma);
+@@ -1247,7 +1247,7 @@ static int init_dma_hpt366(ide_hwif_t *h
+       if (dma_new != dma_old)
+               outb(dma_new, base + 2);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+       printk(KERN_INFO "    %s: BM-DMA at 0x%04lx-0x%04lx\n",
+                        hwif->name, base, base + 7);
+--- a/drivers/ide/ide-io-std.c
++++ b/drivers/ide/ide-io-std.c
+@@ -175,7 +175,7 @@ void ide_input_data(ide_drive_t *drive,
+               unsigned long uninitialized_var(flags);
+               if ((io_32bit & 2) && !mmio) {
+-                      local_irq_save(flags);
++                      local_irq_save_nort(flags);
+                       ata_vlb_sync(io_ports->nsect_addr);
+               }
+@@ -186,7 +186,7 @@ void ide_input_data(ide_drive_t *drive,
+                       insl(data_addr, buf, words);
+               if ((io_32bit & 2) && !mmio)
+-                      local_irq_restore(flags);
++                      local_irq_restore_nort(flags);
+               if (((len + 1) & 3) < 2)
+                       return;
+@@ -219,7 +219,7 @@ void ide_output_data(ide_drive_t *drive,
+               unsigned long uninitialized_var(flags);
+               if ((io_32bit & 2) && !mmio) {
+-                      local_irq_save(flags);
++                      local_irq_save_nort(flags);
+                       ata_vlb_sync(io_ports->nsect_addr);
+               }
+@@ -230,7 +230,7 @@ void ide_output_data(ide_drive_t *drive,
+                       outsl(data_addr, buf, words);
+               if ((io_32bit & 2) && !mmio)
+-                      local_irq_restore(flags);
++                      local_irq_restore_nort(flags);
+               if (((len + 1) & 3) < 2)
+                       return;
+--- a/drivers/ide/ide-io.c
++++ b/drivers/ide/ide-io.c
+@@ -659,7 +659,7 @@ void ide_timer_expiry (unsigned long dat
+               /* disable_irq_nosync ?? */
+               disable_irq(hwif->irq);
+               /* local CPU only, as if we were handling an interrupt */
+-              local_irq_disable();
++              local_irq_disable_nort();
+               if (hwif->polling) {
+                       startstop = handler(drive);
+               } else if (drive_is_ready(drive)) {
+--- a/drivers/ide/ide-iops.c
++++ b/drivers/ide/ide-iops.c
+@@ -129,12 +129,12 @@ int __ide_wait_stat(ide_drive_t *drive,
+                               if ((stat & ATA_BUSY) == 0)
+                                       break;
+-                              local_irq_restore(flags);
++                              local_irq_restore_nort(flags);
+                               *rstat = stat;
+                               return -EBUSY;
+                       }
+               }
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+       }
+       /*
+        * Allow status to settle, then read it again.
+--- a/drivers/ide/ide-probe.c
++++ b/drivers/ide/ide-probe.c
+@@ -196,10 +196,10 @@ static void do_identify(ide_drive_t *dri
+       int bswap = 1;
+       /* local CPU only; some systems need this */
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       /* read 512 bytes of id info */
+       hwif->tp_ops->input_data(drive, NULL, id, SECTOR_SIZE);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+       drive->dev_flags |= IDE_DFLAG_ID_READ;
+ #ifdef DEBUG
+--- a/drivers/ide/ide-taskfile.c
++++ b/drivers/ide/ide-taskfile.c
+@@ -250,7 +250,7 @@ void ide_pio_bytes(ide_drive_t *drive, s
+               page_is_high = PageHighMem(page);
+               if (page_is_high)
+-                      local_irq_save(flags);
++                      local_irq_save_nort(flags);
+               buf = kmap_atomic(page) + offset;
+@@ -271,7 +271,7 @@ void ide_pio_bytes(ide_drive_t *drive, s
+               kunmap_atomic(buf);
+               if (page_is_high)
+-                      local_irq_restore(flags);
++                      local_irq_restore_nort(flags);
+               len -= nr_bytes;
+       }
+@@ -414,7 +414,7 @@ static ide_startstop_t pre_task_out_intr
+       }
+       if ((drive->dev_flags & IDE_DFLAG_UNMASK) == 0)
+-              local_irq_disable();
++              local_irq_disable_nort();
+       ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE);
diff --git a/patches/features/all/rt/idr-use-local-lock-for-protection.patch b/patches/features/all/rt/idr-use-local-lock-for-protection.patch
new file mode 100644 (file)
index 0000000..ff874e1
--- /dev/null
@@ -0,0 +1,124 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 14 Jul 2015 14:26:34 +0200
+Subject: idr: Use local lock instead of preempt enable/disable
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+We need to protect the per cpu variable and prevent migration.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/idr.h |    4 ++++
+ lib/idr.c           |   43 +++++++++++++++++++++++++++++++++++++------
+ 2 files changed, 41 insertions(+), 6 deletions(-)
+
+--- a/include/linux/idr.h
++++ b/include/linux/idr.h
+@@ -95,10 +95,14 @@ bool idr_is_empty(struct idr *idp);
+  * Each idr_preload() should be matched with an invocation of this
+  * function.  See idr_preload() for details.
+  */
++#ifdef CONFIG_PREEMPT_RT_FULL
++void idr_preload_end(void);
++#else
+ static inline void idr_preload_end(void)
+ {
+       preempt_enable();
+ }
++#endif
+ /**
+  * idr_find - return pointer for given id
+--- a/lib/idr.c
++++ b/lib/idr.c
+@@ -30,6 +30,7 @@
+ #include <linux/idr.h>
+ #include <linux/spinlock.h>
+ #include <linux/percpu.h>
++#include <linux/locallock.h>
+ #define MAX_IDR_SHIFT         (sizeof(int) * 8 - 1)
+ #define MAX_IDR_BIT           (1U << MAX_IDR_SHIFT)
+@@ -45,6 +46,37 @@ static DEFINE_PER_CPU(struct idr_layer *
+ static DEFINE_PER_CPU(int, idr_preload_cnt);
+ static DEFINE_SPINLOCK(simple_ida_lock);
++#ifdef CONFIG_PREEMPT_RT_FULL
++static DEFINE_LOCAL_IRQ_LOCK(idr_lock);
++
++static inline void idr_preload_lock(void)
++{
++      local_lock(idr_lock);
++}
++
++static inline void idr_preload_unlock(void)
++{
++      local_unlock(idr_lock);
++}
++
++void idr_preload_end(void)
++{
++      idr_preload_unlock();
++}
++EXPORT_SYMBOL(idr_preload_end);
++#else
++static inline void idr_preload_lock(void)
++{
++      preempt_disable();
++}
++
++static inline void idr_preload_unlock(void)
++{
++      preempt_enable();
++}
++#endif
++
++
+ /* the maximum ID which can be allocated given idr->layers */
+ static int idr_max(int layers)
+ {
+@@ -115,14 +147,14 @@ static struct idr_layer *idr_layer_alloc
+        * context.  See idr_preload() for details.
+        */
+       if (!in_interrupt()) {
+-              preempt_disable();
++              idr_preload_lock();
+               new = __this_cpu_read(idr_preload_head);
+               if (new) {
+                       __this_cpu_write(idr_preload_head, new->ary[0]);
+                       __this_cpu_dec(idr_preload_cnt);
+                       new->ary[0] = NULL;
+               }
+-              preempt_enable();
++              idr_preload_unlock();
+               if (new)
+                       return new;
+       }
+@@ -366,7 +398,6 @@ static void idr_fill_slot(struct idr *id
+       idr_mark_full(pa, id);
+ }
+-
+ /**
+  * idr_preload - preload for idr_alloc()
+  * @gfp_mask: allocation mask to use for preloading
+@@ -401,7 +432,7 @@ void idr_preload(gfp_t gfp_mask)
+       WARN_ON_ONCE(in_interrupt());
+       might_sleep_if(gfpflags_allow_blocking(gfp_mask));
+-      preempt_disable();
++      idr_preload_lock();
+       /*
+        * idr_alloc() is likely to succeed w/o full idr_layer buffer and
+@@ -413,9 +444,9 @@ void idr_preload(gfp_t gfp_mask)
+       while (__this_cpu_read(idr_preload_cnt) < MAX_IDR_FREE) {
+               struct idr_layer *new;
+-              preempt_enable();
++              idr_preload_unlock();
+               new = kmem_cache_zalloc(idr_layer_cache, gfp_mask);
+-              preempt_disable();
++              idr_preload_lock();
+               if (!new)
+                       break;
diff --git a/patches/features/all/rt/infiniband-mellanox-ib-use-nort-irq.patch b/patches/features/all/rt/infiniband-mellanox-ib-use-nort-irq.patch
new file mode 100644 (file)
index 0000000..ac23087
--- /dev/null
@@ -0,0 +1,41 @@
+From: Sven-Thorsten Dietrich <sdietrich@novell.com>
+Date: Fri, 3 Jul 2009 08:30:35 -0500
+Subject: infiniband: Mellanox IB driver patch use _nort() primitives
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Fixes in_atomic stack-dump, when Mellanox module is loaded into the RT
+Kernel.
+
+Michael S. Tsirkin <mst@dev.mellanox.co.il> sayeth:
+"Basically, if you just make spin_lock_irqsave (and spin_lock_irq) not disable
+interrupts for non-raw spinlocks, I think all of infiniband will be fine without
+changes."
+
+Signed-off-by: Sven-Thorsten Dietrich <sven@thebigcorporation.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/infiniband/ulp/ipoib/ipoib_multicast.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
++++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+@@ -902,7 +902,7 @@ void ipoib_mcast_restart_task(struct wor
+       ipoib_dbg_mcast(priv, "restarting multicast task\n");
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       netif_addr_lock(dev);
+       spin_lock(&priv->lock);
+@@ -984,7 +984,7 @@ void ipoib_mcast_restart_task(struct wor
+       spin_unlock(&priv->lock);
+       netif_addr_unlock(dev);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+       /*
+        * make sure the in-flight joins have finished before we attempt
diff --git a/patches/features/all/rt/inpt-gameport-use-local-irq-nort.patch b/patches/features/all/rt/inpt-gameport-use-local-irq-nort.patch
new file mode 100644 (file)
index 0000000..29b7cfd
--- /dev/null
@@ -0,0 +1,61 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:30:16 -0500
+Subject: input: gameport: Do not disable interrupts on PREEMPT_RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use the _nort() primitives.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/input/gameport/gameport.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/input/gameport/gameport.c
++++ b/drivers/input/gameport/gameport.c
+@@ -91,13 +91,13 @@ static int gameport_measure_speed(struct
+       tx = ~0;
+       for (i = 0; i < 50; i++) {
+-              local_irq_save(flags);
++              local_irq_save_nort(flags);
+               t1 = ktime_get_ns();
+               for (t = 0; t < 50; t++)
+                       gameport_read(gameport);
+               t2 = ktime_get_ns();
+               t3 = ktime_get_ns();
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+               udelay(i * 10);
+               t = (t2 - t1) - (t3 - t2);
+               if (t < tx)
+@@ -124,12 +124,12 @@ static int old_gameport_measure_speed(st
+       tx = 1 << 30;
+       for(i = 0; i < 50; i++) {
+-              local_irq_save(flags);
++              local_irq_save_nort(flags);
+               GET_TIME(t1);
+               for (t = 0; t < 50; t++) gameport_read(gameport);
+               GET_TIME(t2);
+               GET_TIME(t3);
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+               udelay(i * 10);
+               if ((t = DELTA(t2,t1) - DELTA(t3,t2)) < tx) tx = t;
+       }
+@@ -148,11 +148,11 @@ static int old_gameport_measure_speed(st
+       tx = 1 << 30;
+       for(i = 0; i < 50; i++) {
+-              local_irq_save(flags);
++              local_irq_save_nort(flags);
+               t1 = rdtsc();
+               for (t = 0; t < 50; t++) gameport_read(gameport);
+               t2 = rdtsc();
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+               udelay(i * 10);
+               if (t2 - t1 < tx) tx = t2 - t1;
+       }
diff --git a/patches/features/all/rt/introduce_migrate_disable_cpu_light.patch b/patches/features/all/rt/introduce_migrate_disable_cpu_light.patch
new file mode 100644 (file)
index 0000000..26d3ffd
--- /dev/null
@@ -0,0 +1,281 @@
+Subject: Intrduce migrate_disable() + cpu_light()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 17 Jun 2011 15:42:38 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Introduce migrate_disable(). The task can't be pushed to another CPU but can
+be preempted.
+
+From: Peter Zijlstra <a.p.zijlstra@chello.nl>:
+|Make migrate_disable() be a preempt_disable() for !rt kernels. This
+|allows generic code to use it but still enforces that these code
+|sections stay relatively small.
+|
+|A preemptible migrate_disable() accessible for general use would allow
+|people growing arbitrary per-cpu crap instead of clean these things
+|up.
+
+From: Steven Rostedt <rostedt@goodmis.org>
+| The migrate_disable() can cause a bit of a overhead to the RT kernel,
+| as changing the affinity is expensive to do at every lock encountered.
+| As a running task can not migrate, the actual disabling of migration
+| does not need to occur until the task is about to schedule out.
+|
+| In most cases, a task that disables migration will enable it before
+| it schedules making this change improve performance tremendously.
+
+On top of this build get/put_cpu_light(). It is similar to get_cpu():
+it uses migrate_disable() instead of preempt_disable(). That means the user
+remains on the same CPU but the function using it may be preempted and
+invoked again from another caller on the same CPU.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/cpu.h     |    3 ++
+ include/linux/preempt.h |    9 ++++++
+ include/linux/sched.h   |   39 +++++++++++++++++++++-----
+ include/linux/smp.h     |    3 ++
+ kernel/sched/core.c     |   70 +++++++++++++++++++++++++++++++++++++++++++++++-
+ kernel/sched/debug.c    |    7 ++++
+ lib/smp_processor_id.c  |    5 ++-
+ 7 files changed, 125 insertions(+), 11 deletions(-)
+
+--- a/include/linux/cpu.h
++++ b/include/linux/cpu.h
+@@ -173,6 +173,9 @@ static inline void cpu_notifier_register
+ #endif /* CONFIG_SMP */
+ extern struct bus_type cpu_subsys;
++static inline void pin_current_cpu(void) { }
++static inline void unpin_current_cpu(void) { }
++
+ #ifdef CONFIG_HOTPLUG_CPU
+ /* Stop CPUs going up and down. */
+--- a/include/linux/preempt.h
++++ b/include/linux/preempt.h
+@@ -257,11 +257,20 @@ do { \
+ # define preempt_enable_rt()          preempt_enable()
+ # define preempt_disable_nort()               barrier()
+ # define preempt_enable_nort()                barrier()
++# ifdef CONFIG_SMP
++   extern void migrate_disable(void);
++   extern void migrate_enable(void);
++# else /* CONFIG_SMP */
++#  define migrate_disable()           barrier()
++#  define migrate_enable()            barrier()
++# endif /* CONFIG_SMP */
+ #else
+ # define preempt_disable_rt()         barrier()
+ # define preempt_enable_rt()          barrier()
+ # define preempt_disable_nort()               preempt_disable()
+ # define preempt_enable_nort()                preempt_enable()
++# define migrate_disable()            preempt_disable()
++# define migrate_enable()             preempt_enable()
+ #endif
+ #ifdef CONFIG_PREEMPT_NOTIFIERS
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1520,6 +1520,12 @@ struct task_struct {
+ #endif
+       unsigned int policy;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      int migrate_disable;
++# ifdef CONFIG_SCHED_DEBUG
++      int migrate_disable_atomic;
++# endif
++#endif
+       int nr_cpus_allowed;
+       cpumask_t cpus_allowed;
+@@ -1991,14 +1997,6 @@ static inline struct vm_struct *task_sta
+ }
+ #endif
+-/* Future-safe accessor for struct task_struct's cpus_allowed. */
+-#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
+-
+-static inline int tsk_nr_cpus_allowed(struct task_struct *p)
+-{
+-      return p->nr_cpus_allowed;
+-}
+-
+ #define TNF_MIGRATED  0x01
+ #define TNF_NO_GROUP  0x02
+ #define TNF_SHARED    0x04
+@@ -3516,6 +3514,31 @@ static inline void set_task_cpu(struct t
+ #endif /* CONFIG_SMP */
++static inline int __migrate_disabled(struct task_struct *p)
++{
++#ifdef CONFIG_PREEMPT_RT_FULL
++      return p->migrate_disable;
++#else
++      return 0;
++#endif
++}
++
++/* Future-safe accessor for struct task_struct's cpus_allowed. */
++static inline const struct cpumask *tsk_cpus_allowed(struct task_struct *p)
++{
++      if (__migrate_disabled(p))
++              return cpumask_of(task_cpu(p));
++
++      return &p->cpus_allowed;
++}
++
++static inline int tsk_nr_cpus_allowed(struct task_struct *p)
++{
++      if (__migrate_disabled(p))
++              return 1;
++      return p->nr_cpus_allowed;
++}
++
+ extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask);
+ extern long sched_getaffinity(pid_t pid, struct cpumask *mask);
+--- a/include/linux/smp.h
++++ b/include/linux/smp.h
+@@ -197,6 +197,9 @@ static inline int get_boot_cpu_id(void)
+ #define get_cpu()             ({ preempt_disable(); smp_processor_id(); })
+ #define put_cpu()             preempt_enable()
++#define get_cpu_light()               ({ migrate_disable(); smp_processor_id(); })
++#define put_cpu_light()               migrate_enable()
++
+ /*
+  * Callback to arch code if there's nosmp or maxcpus=0 on the
+  * boot command line:
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -1100,6 +1100,11 @@ void do_set_cpus_allowed(struct task_str
+       lockdep_assert_held(&p->pi_lock);
++      if (__migrate_disabled(p)) {
++              cpumask_copy(&p->cpus_allowed, new_mask);
++              return;
++      }
++
+       queued = task_on_rq_queued(p);
+       running = task_current(rq, p);
+@@ -1179,7 +1184,7 @@ static int __set_cpus_allowed_ptr(struct
+       }
+       /* Can the task run on the task's current CPU? If so, we're done */
+-      if (cpumask_test_cpu(task_cpu(p), new_mask))
++      if (cpumask_test_cpu(task_cpu(p), new_mask) || __migrate_disabled(p))
+               goto out;
+       dest_cpu = cpumask_any_and(cpu_valid_mask, new_mask);
+@@ -3252,6 +3257,69 @@ static inline void schedule_debug(struct
+       schedstat_inc(this_rq()->sched_count);
+ }
++#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_SMP)
++
++void migrate_disable(void)
++{
++      struct task_struct *p = current;
++
++      if (in_atomic()) {
++#ifdef CONFIG_SCHED_DEBUG
++              p->migrate_disable_atomic++;
++#endif
++              return;
++      }
++
++#ifdef CONFIG_SCHED_DEBUG
++      WARN_ON_ONCE(p->migrate_disable_atomic);
++#endif
++
++      if (p->migrate_disable) {
++              p->migrate_disable++;
++              return;
++      }
++
++      preempt_disable();
++      pin_current_cpu();
++      p->migrate_disable = 1;
++      preempt_enable();
++}
++EXPORT_SYMBOL(migrate_disable);
++
++void migrate_enable(void)
++{
++      struct task_struct *p = current;
++
++      if (in_atomic()) {
++#ifdef CONFIG_SCHED_DEBUG
++              p->migrate_disable_atomic--;
++#endif
++              return;
++      }
++
++#ifdef CONFIG_SCHED_DEBUG
++      WARN_ON_ONCE(p->migrate_disable_atomic);
++#endif
++      WARN_ON_ONCE(p->migrate_disable <= 0);
++
++      if (p->migrate_disable > 1) {
++              p->migrate_disable--;
++              return;
++      }
++
++      preempt_disable();
++      /*
++       * Clearing migrate_disable causes tsk_cpus_allowed to
++       * show the tasks original cpu affinity.
++       */
++      p->migrate_disable = 0;
++
++      unpin_current_cpu();
++      preempt_enable();
++}
++EXPORT_SYMBOL(migrate_enable);
++#endif
++
+ /*
+  * Pick up the highest-prio task:
+  */
+--- a/kernel/sched/debug.c
++++ b/kernel/sched/debug.c
+@@ -558,6 +558,9 @@ void print_rt_rq(struct seq_file *m, int
+       P(rt_throttled);
+       PN(rt_time);
+       PN(rt_runtime);
++#ifdef CONFIG_SMP
++      P(rt_nr_migratory);
++#endif
+ #undef PN
+ #undef P
+@@ -953,6 +956,10 @@ void proc_sched_show_task(struct task_st
+ #endif
+       P(policy);
+       P(prio);
++#ifdef CONFIG_PREEMPT_RT_FULL
++      P(migrate_disable);
++#endif
++      P(nr_cpus_allowed);
+ #undef PN_SCHEDSTAT
+ #undef PN
+ #undef __PN
+--- a/lib/smp_processor_id.c
++++ b/lib/smp_processor_id.c
+@@ -39,8 +39,9 @@ notrace static unsigned int check_preemp
+       if (!printk_ratelimit())
+               goto out_enable;
+-      printk(KERN_ERR "BUG: using %s%s() in preemptible [%08x] code: %s/%d\n",
+-              what1, what2, preempt_count() - 1, current->comm, current->pid);
++      printk(KERN_ERR "BUG: using %s%s() in preemptible [%08x %08x] code: %s/%d\n",
++              what1, what2, preempt_count() - 1, __migrate_disabled(current),
++              current->comm, current->pid);
+       print_symbol("caller is %s\n", (long)__builtin_return_address(0));
+       dump_stack();
diff --git a/patches/features/all/rt/iommu-amd--Use-WARN_ON_NORT.patch b/patches/features/all/rt/iommu-amd--Use-WARN_ON_NORT.patch
new file mode 100644 (file)
index 0000000..bcf592d
--- /dev/null
@@ -0,0 +1,47 @@
+Subject: iommu/amd: Use WARN_ON_NORT in __attach_device()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 27 Feb 2016 10:22:23 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+RT does not disable interrupts here, but the protection is still
+correct. Fixup the WARN_ON so it won't yell on RT.
+
+Note: This WARN_ON is bogus anyway. The real thing this needs to check is that
+amd_iommu_devtable_lock is held.
+
+Reported-by: DIXLOR <dixlor@gmail.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/iommu/amd_iommu.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/iommu/amd_iommu.c
++++ b/drivers/iommu/amd_iommu.c
+@@ -1923,10 +1923,10 @@ static int __attach_device(struct iommu_
+       int ret;
+       /*
+-       * Must be called with IRQs disabled. Warn here to detect early
+-       * when its not.
++       * Must be called with IRQs disabled on a non RT kernel. Warn here to
++       * detect early when its not.
+        */
+-      WARN_ON(!irqs_disabled());
++      WARN_ON_NONRT(!irqs_disabled());
+       /* lock domain */
+       spin_lock(&domain->lock);
+@@ -2094,10 +2094,10 @@ static void __detach_device(struct iommu
+       struct protection_domain *domain;
+       /*
+-       * Must be called with IRQs disabled. Warn here to detect early
+-       * when its not.
++       * Must be called with IRQs disabled on a non RT kernel. Warn here to
++       * detect early when its not.
+        */
+-      WARN_ON(!irqs_disabled());
++      WARN_ON_NONRT(!irqs_disabled());
+       if (WARN_ON(!dev_data->domain))
+               return;
diff --git a/patches/features/all/rt/iommu-iova-don-t-disable-preempt-around-this_cpu_ptr.patch b/patches/features/all/rt/iommu-iova-don-t-disable-preempt-around-this_cpu_ptr.patch
new file mode 100644 (file)
index 0000000..1f22f12
--- /dev/null
@@ -0,0 +1,82 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 15 Sep 2016 16:58:19 +0200
+Subject: [PATCH] iommu/iova: don't disable preempt around this_cpu_ptr()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Commit 583248e6620a ("iommu/iova: Disable preemption around use of
+this_cpu_ptr()") disables preemption while accessing a per-CPU variable.
+This does keep lockdep quiet. However I don't see the point why it is
+bad if we get migrated after its access to another CPU.
+__iova_rcache_insert() and __iova_rcache_get() immediately locks the
+variable after obtaining it - before accessing its members.
+_If_ we get migrated away after retrieving the address of cpu_rcache
+before taking the lock then the *other* task on the same CPU will
+retrieve the same address of cpu_rcache and will spin on the lock.
+
+alloc_iova_fast() disables preemption while invoking
+free_cpu_cached_iovas() on each CPU. The function itself uses
+per_cpu_ptr() which does not trigger a warning (like this_cpu_ptr()
+does) because it assumes the caller knows what he does because he might
+access the data structure from a different CPU (which means he needs
+protection against concurrent access).
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/iommu/iova.c |    9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+--- a/drivers/iommu/iova.c
++++ b/drivers/iommu/iova.c
+@@ -22,6 +22,7 @@
+ #include <linux/slab.h>
+ #include <linux/smp.h>
+ #include <linux/bitops.h>
++#include <linux/cpu.h>
+ static bool iova_rcache_insert(struct iova_domain *iovad,
+                              unsigned long pfn,
+@@ -420,10 +421,8 @@ alloc_iova_fast(struct iova_domain *iova
+               /* Try replenishing IOVAs by flushing rcache. */
+               flushed_rcache = true;
+-              preempt_disable();
+               for_each_online_cpu(cpu)
+                       free_cpu_cached_iovas(cpu, iovad);
+-              preempt_enable();
+               goto retry;
+       }
+@@ -751,7 +750,7 @@ static bool __iova_rcache_insert(struct
+       bool can_insert = false;
+       unsigned long flags;
+-      cpu_rcache = get_cpu_ptr(rcache->cpu_rcaches);
++      cpu_rcache = raw_cpu_ptr(rcache->cpu_rcaches);
+       spin_lock_irqsave(&cpu_rcache->lock, flags);
+       if (!iova_magazine_full(cpu_rcache->loaded)) {
+@@ -781,7 +780,6 @@ static bool __iova_rcache_insert(struct
+               iova_magazine_push(cpu_rcache->loaded, iova_pfn);
+       spin_unlock_irqrestore(&cpu_rcache->lock, flags);
+-      put_cpu_ptr(rcache->cpu_rcaches);
+       if (mag_to_free) {
+               iova_magazine_free_pfns(mag_to_free, iovad);
+@@ -815,7 +813,7 @@ static unsigned long __iova_rcache_get(s
+       bool has_pfn = false;
+       unsigned long flags;
+-      cpu_rcache = get_cpu_ptr(rcache->cpu_rcaches);
++      cpu_rcache = raw_cpu_ptr(rcache->cpu_rcaches);
+       spin_lock_irqsave(&cpu_rcache->lock, flags);
+       if (!iova_magazine_empty(cpu_rcache->loaded)) {
+@@ -837,7 +835,6 @@ static unsigned long __iova_rcache_get(s
+               iova_pfn = iova_magazine_pop(cpu_rcache->loaded, limit_pfn);
+       spin_unlock_irqrestore(&cpu_rcache->lock, flags);
+-      put_cpu_ptr(rcache->cpu_rcaches);
+       return iova_pfn;
+ }
diff --git a/patches/features/all/rt/iommu-vt-d-don-t-disable-preemption-while-accessing-.patch b/patches/features/all/rt/iommu-vt-d-don-t-disable-preemption-while-accessing-.patch
new file mode 100644 (file)
index 0000000..745df01
--- /dev/null
@@ -0,0 +1,59 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 15 Sep 2016 17:16:44 +0200
+Subject: [PATCH] iommu/vt-d: don't disable preemption while accessing
+ deferred_flush()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+get_cpu() disables preemption and returns the current CPU number. The
+CPU number is later only used once while retrieving the address of the
+local's CPU deferred_flush pointer.
+We can instead use raw_cpu_ptr() while we remain preemptible. The worst
+thing that can happen is that flush_unmaps_timeout() is invoked multiple
+times: once by taskA after seeing HIGH_WATER_MARK and then preempted to
+another CPU and then by taskB which saw HIGH_WATER_MARK on the same CPU
+as taskA. It is also likely that ->size got from HIGH_WATER_MARK to 0
+right after its read because another CPU invoked flush_unmaps_timeout()
+for this CPU.
+The access to flush_data is protected by a spinlock so even if we get
+migrated to another CPU or preempted - the data structure is protected.
+
+While at it, I marked deferred_flush static since I can't find a
+reference to it outside of this file.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/iommu/intel-iommu.c |    8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+--- a/drivers/iommu/intel-iommu.c
++++ b/drivers/iommu/intel-iommu.c
+@@ -479,7 +479,7 @@ struct deferred_flush_data {
+       struct deferred_flush_table *tables;
+ };
+-DEFINE_PER_CPU(struct deferred_flush_data, deferred_flush);
++static DEFINE_PER_CPU(struct deferred_flush_data, deferred_flush);
+ /* bitmap for indexing intel_iommus */
+ static int g_num_of_iommus;
+@@ -3716,10 +3716,8 @@ static void add_unmap(struct dmar_domain
+       struct intel_iommu *iommu;
+       struct deferred_flush_entry *entry;
+       struct deferred_flush_data *flush_data;
+-      unsigned int cpuid;
+-      cpuid = get_cpu();
+-      flush_data = per_cpu_ptr(&deferred_flush, cpuid);
++      flush_data = raw_cpu_ptr(&deferred_flush);
+       /* Flush all CPUs' entries to avoid deferring too much.  If
+        * this becomes a bottleneck, can just flush us, and rely on
+@@ -3752,8 +3750,6 @@ static void add_unmap(struct dmar_domain
+       }
+       flush_data->size++;
+       spin_unlock_irqrestore(&flush_data->lock, flags);
+-
+-      put_cpu();
+ }
+ static void intel_unmap(struct device *dev, dma_addr_t dev_addr, size_t size)
diff --git a/patches/features/all/rt/ipc-sem-rework-semaphore-wakeups.patch b/patches/features/all/rt/ipc-sem-rework-semaphore-wakeups.patch
new file mode 100644 (file)
index 0000000..24fbfba
--- /dev/null
@@ -0,0 +1,70 @@
+Subject: ipc/sem: Rework semaphore wakeups
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 14 Sep 2011 11:57:04 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Current sysv sems have a weird ass wakeup scheme that involves keeping
+preemption disabled over a potential O(n^2) loop and busy waiting on
+that on other CPUs.
+
+Kill this and simply wake the task directly from under the sem_lock.
+
+This was discovered by a migrate_disable() debug feature that
+disallows:
+
+  spin_lock();
+  preempt_disable();
+  spin_unlock()
+  preempt_enable();
+
+Cc: Manfred Spraul <manfred@colorfullife.com>
+Suggested-by: Thomas Gleixner <tglx@linutronix.de>
+Reported-by: Mike Galbraith <efault@gmx.de>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Cc: Manfred Spraul <manfred@colorfullife.com>
+Link: http://lkml.kernel.org/r/1315994224.5040.1.camel@twins
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ ipc/sem.c |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/ipc/sem.c
++++ b/ipc/sem.c
+@@ -712,6 +712,13 @@ static int perform_atomic_semop(struct s
+ static void wake_up_sem_queue_prepare(struct list_head *pt,
+                               struct sem_queue *q, int error)
+ {
++#ifdef CONFIG_PREEMPT_RT_BASE
++      struct task_struct *p = q->sleeper;
++      get_task_struct(p);
++      q->status = error;
++      wake_up_process(p);
++      put_task_struct(p);
++#else
+       if (list_empty(pt)) {
+               /*
+                * Hold preempt off so that we don't get preempted and have the
+@@ -723,6 +730,7 @@ static void wake_up_sem_queue_prepare(st
+       q->pid = error;
+       list_add_tail(&q->list, pt);
++#endif
+ }
+ /**
+@@ -736,6 +744,7 @@ static void wake_up_sem_queue_prepare(st
+  */
+ static void wake_up_sem_queue_do(struct list_head *pt)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       struct sem_queue *q, *t;
+       int did_something;
+@@ -748,6 +757,7 @@ static void wake_up_sem_queue_do(struct
+       }
+       if (did_something)
+               preempt_enable();
++#endif
+ }
+ static void unlink_queue(struct sem_array *sma, struct sem_queue *q)
diff --git a/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch b/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch
new file mode 100644 (file)
index 0000000..6b27638
--- /dev/null
@@ -0,0 +1,147 @@
+Subject: genirq: Allow disabling of softirq processing in irq thread context
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 31 Jan 2012 13:01:27 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The processing of softirqs in irq thread context is a performance gain
+for the non-rt workloads of a system, but it's counterproductive for
+interrupts which are explicitely related to the realtime
+workload. Allow such interrupts to prevent softirq processing in their
+thread context.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/interrupt.h |    2 ++
+ include/linux/irq.h       |    4 +++-
+ kernel/irq/manage.c       |   13 ++++++++++++-
+ kernel/irq/settings.h     |   12 ++++++++++++
+ kernel/softirq.c          |    9 +++++++++
+ 5 files changed, 38 insertions(+), 2 deletions(-)
+
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -61,6 +61,7 @@
+  *                interrupt handler after suspending interrupts. For system
+  *                wakeup devices users need to implement wakeup detection in
+  *                their interrupt handlers.
++ * IRQF_NO_SOFTIRQ_CALL - Do not process softirqs in the irq thread context (RT)
+  */
+ #define IRQF_SHARED           0x00000080
+ #define IRQF_PROBE_SHARED     0x00000100
+@@ -74,6 +75,7 @@
+ #define IRQF_NO_THREAD                0x00010000
+ #define IRQF_EARLY_RESUME     0x00020000
+ #define IRQF_COND_SUSPEND     0x00040000
++#define IRQF_NO_SOFTIRQ_CALL  0x00080000
+ #define IRQF_TIMER            (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD)
+--- a/include/linux/irq.h
++++ b/include/linux/irq.h
+@@ -72,6 +72,7 @@ enum irqchip_irq_state;
+  * IRQ_IS_POLLED              - Always polled by another interrupt. Exclude
+  *                              it from the spurious interrupt detection
+  *                              mechanism and from core side polling.
++ * IRQ_NO_SOFTIRQ_CALL                - No softirq processing in the irq thread context (RT)
+  * IRQ_DISABLE_UNLAZY         - Disable lazy irq disable
+  */
+ enum {
+@@ -99,13 +100,14 @@ enum {
+       IRQ_PER_CPU_DEVID       = (1 << 17),
+       IRQ_IS_POLLED           = (1 << 18),
+       IRQ_DISABLE_UNLAZY      = (1 << 19),
++      IRQ_NO_SOFTIRQ_CALL     = (1 << 20),
+ };
+ #define IRQF_MODIFY_MASK      \
+       (IRQ_TYPE_SENSE_MASK | IRQ_NOPROBE | IRQ_NOREQUEST | \
+        IRQ_NOAUTOEN | IRQ_MOVE_PCNTXT | IRQ_LEVEL | IRQ_NO_BALANCING | \
+        IRQ_PER_CPU | IRQ_NESTED_THREAD | IRQ_NOTHREAD | IRQ_PER_CPU_DEVID | \
+-       IRQ_IS_POLLED | IRQ_DISABLE_UNLAZY)
++       IRQ_IS_POLLED | IRQ_DISABLE_UNLAZY | IRQ_NO_SOFTIRQ_CALL)
+ #define IRQ_NO_BALANCING_MASK (IRQ_PER_CPU | IRQ_NO_BALANCING)
+--- a/kernel/irq/manage.c
++++ b/kernel/irq/manage.c
+@@ -881,7 +881,15 @@ irq_forced_thread_fn(struct irq_desc *de
+       local_bh_disable();
+       ret = action->thread_fn(action->irq, action->dev_id);
+       irq_finalize_oneshot(desc, action);
+-      local_bh_enable();
++      /*
++       * Interrupts which have real time requirements can be set up
++       * to avoid softirq processing in the thread handler. This is
++       * safe as these interrupts do not raise soft interrupts.
++       */
++      if (irq_settings_no_softirq_call(desc))
++              _local_bh_enable();
++      else
++              local_bh_enable();
+       return ret;
+ }
+@@ -1338,6 +1346,9 @@ static int
+                       irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
+               }
++              if (new->flags & IRQF_NO_SOFTIRQ_CALL)
++                      irq_settings_set_no_softirq_call(desc);
++
+               /* Set default affinity mask once everything is setup */
+               setup_affinity(desc, mask);
+--- a/kernel/irq/settings.h
++++ b/kernel/irq/settings.h
+@@ -16,6 +16,7 @@ enum {
+       _IRQ_PER_CPU_DEVID      = IRQ_PER_CPU_DEVID,
+       _IRQ_IS_POLLED          = IRQ_IS_POLLED,
+       _IRQ_DISABLE_UNLAZY     = IRQ_DISABLE_UNLAZY,
++      _IRQ_NO_SOFTIRQ_CALL    = IRQ_NO_SOFTIRQ_CALL,
+       _IRQF_MODIFY_MASK       = IRQF_MODIFY_MASK,
+ };
+@@ -30,6 +31,7 @@ enum {
+ #define IRQ_PER_CPU_DEVID     GOT_YOU_MORON
+ #define IRQ_IS_POLLED         GOT_YOU_MORON
+ #define IRQ_DISABLE_UNLAZY    GOT_YOU_MORON
++#define IRQ_NO_SOFTIRQ_CALL   GOT_YOU_MORON
+ #undef IRQF_MODIFY_MASK
+ #define IRQF_MODIFY_MASK      GOT_YOU_MORON
+@@ -40,6 +42,16 @@ irq_settings_clr_and_set(struct irq_desc
+       desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK);
+ }
++static inline bool irq_settings_no_softirq_call(struct irq_desc *desc)
++{
++      return desc->status_use_accessors & _IRQ_NO_SOFTIRQ_CALL;
++}
++
++static inline void irq_settings_set_no_softirq_call(struct irq_desc *desc)
++{
++      desc->status_use_accessors |= _IRQ_NO_SOFTIRQ_CALL;
++}
++
+ static inline bool irq_settings_is_per_cpu(struct irq_desc *desc)
+ {
+       return desc->status_use_accessors & _IRQ_PER_CPU;
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -589,6 +589,15 @@ void __local_bh_enable(void)
+ }
+ EXPORT_SYMBOL(__local_bh_enable);
++void _local_bh_enable(void)
++{
++      if (WARN_ON(current->softirq_nestcnt == 0))
++              return;
++      if (--current->softirq_nestcnt == 0)
++              migrate_enable();
++}
++EXPORT_SYMBOL(_local_bh_enable);
++
+ int in_serving_softirq(void)
+ {
+       return current->flags & PF_IN_SOFTIRQ;
diff --git a/patches/features/all/rt/irqwork-Move-irq-safe-work-to-irq-context.patch b/patches/features/all/rt/irqwork-Move-irq-safe-work-to-irq-context.patch
new file mode 100644 (file)
index 0000000..49dc4b5
--- /dev/null
@@ -0,0 +1,78 @@
+Subject: irqwork: Move irq safe work to irq context
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 15 Nov 2015 18:40:17 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On architectures where arch_irq_work_has_interrupt() returns false, we
+end up running the irq safe work from the softirq context. That
+results in a potential deadlock in the scheduler irq work which
+expects that function to be called with interrupts disabled.
+
+Split the irq_work_tick() function into a hard and soft variant. Call
+the hard variant from the tick interrupt and add the soft variant to
+the timer softirq.
+
+Reported-and-tested-by: Yanjiang Jin <yanjiang.jin@windriver.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: stable-rt@vger.kernel.org
+---
+ include/linux/irq_work.h |    6 ++++++
+ kernel/irq_work.c        |    9 +++++++++
+ kernel/time/timer.c      |    6 ++----
+ 3 files changed, 17 insertions(+), 4 deletions(-)
+
+--- a/include/linux/irq_work.h
++++ b/include/linux/irq_work.h
+@@ -52,4 +52,10 @@ static inline bool irq_work_needs_cpu(vo
+ static inline void irq_work_run(void) { }
+ #endif
++#if defined(CONFIG_IRQ_WORK) && defined(CONFIG_PREEMPT_RT_FULL)
++void irq_work_tick_soft(void);
++#else
++static inline void irq_work_tick_soft(void) { }
++#endif
++
+ #endif /* _LINUX_IRQ_WORK_H */
+--- a/kernel/irq_work.c
++++ b/kernel/irq_work.c
+@@ -200,8 +200,17 @@ void irq_work_tick(void)
+       if (!llist_empty(raised) && !arch_irq_work_has_interrupt())
+               irq_work_run_list(raised);
++
++      if (!IS_ENABLED(CONFIG_PREEMPT_RT_FULL))
++              irq_work_run_list(this_cpu_ptr(&lazy_list));
++}
++
++#if defined(CONFIG_IRQ_WORK) && defined(CONFIG_PREEMPT_RT_FULL)
++void irq_work_tick_soft(void)
++{
+       irq_work_run_list(this_cpu_ptr(&lazy_list));
+ }
++#endif
+ /*
+  * Synchronize against the irq_work @entry, ensures the entry is not
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -1691,7 +1691,7 @@ void update_process_times(int user_tick)
+       scheduler_tick();
+       run_local_timers();
+       rcu_check_callbacks(user_tick);
+-#if defined(CONFIG_IRQ_WORK) && !defined(CONFIG_PREEMPT_RT_FULL)
++#if defined(CONFIG_IRQ_WORK)
+       if (in_irq())
+               irq_work_tick();
+ #endif
+@@ -1720,9 +1720,7 @@ static __latent_entropy void run_timer_s
+ {
+       struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);
+-#if defined(CONFIG_IRQ_WORK) && defined(CONFIG_PREEMPT_RT_FULL)
+-      irq_work_tick();
+-#endif
++      irq_work_tick_soft();
+       __run_timers(base);
+       if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && base->nohz_active)
diff --git a/patches/features/all/rt/irqwork-push_most_work_into_softirq_context.patch b/patches/features/all/rt/irqwork-push_most_work_into_softirq_context.patch
new file mode 100644 (file)
index 0000000..7b8eb67
--- /dev/null
@@ -0,0 +1,186 @@
+Subject: irqwork: push most work into softirq context
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Tue, 23 Jun 2015 15:32:51 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Initially we defered all irqwork into softirq because we didn't want the
+latency spikes if perf or another user was busy and delayed the RT task.
+The NOHZ trigger (nohz_full_kick_work) was the first user that did not work
+as expected if it did not run in the original irqwork context so we had to
+bring it back somehow for it. push_irq_work_func is the second one that
+requires this.
+
+This patch adds the IRQ_WORK_HARD_IRQ which makes sure the callback runs
+in raw-irq context. Everything else is defered into softirq context. Without
+-RT we have the orignal behavior.
+
+This patch incorporates tglx orignal work which revoked a little bringing back
+the arch_irq_work_raise() if possible and a few fixes from Steven Rostedt and
+Mike Galbraith,
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/irq_work.h |    1 +
+ kernel/irq_work.c        |   47 ++++++++++++++++++++++++++++++++++-------------
+ kernel/sched/rt.c        |    1 +
+ kernel/time/tick-sched.c |    1 +
+ kernel/time/timer.c      |    6 +++++-
+ 5 files changed, 42 insertions(+), 14 deletions(-)
+
+--- a/include/linux/irq_work.h
++++ b/include/linux/irq_work.h
+@@ -16,6 +16,7 @@
+ #define IRQ_WORK_BUSY         2UL
+ #define IRQ_WORK_FLAGS                3UL
+ #define IRQ_WORK_LAZY         4UL /* Doesn't want IPI, wait for tick */
++#define IRQ_WORK_HARD_IRQ     8UL /* Run hard IRQ context, even on RT */
+ struct irq_work {
+       unsigned long flags;
+--- a/kernel/irq_work.c
++++ b/kernel/irq_work.c
+@@ -17,6 +17,7 @@
+ #include <linux/cpu.h>
+ #include <linux/notifier.h>
+ #include <linux/smp.h>
++#include <linux/interrupt.h>
+ #include <asm/processor.h>
+@@ -65,6 +66,8 @@ void __weak arch_irq_work_raise(void)
+  */
+ bool irq_work_queue_on(struct irq_work *work, int cpu)
+ {
++      struct llist_head *list;
++
+       /* All work should have been flushed before going offline */
+       WARN_ON_ONCE(cpu_is_offline(cpu));
+@@ -75,7 +78,12 @@ bool irq_work_queue_on(struct irq_work *
+       if (!irq_work_claim(work))
+               return false;
+-      if (llist_add(&work->llnode, &per_cpu(raised_list, cpu)))
++      if (IS_ENABLED(CONFIG_PREEMPT_RT_FULL) && !(work->flags & IRQ_WORK_HARD_IRQ))
++              list = &per_cpu(lazy_list, cpu);
++      else
++              list = &per_cpu(raised_list, cpu);
++
++      if (llist_add(&work->llnode, list))
+               arch_send_call_function_single_ipi(cpu);
+       return true;
+@@ -86,6 +94,9 @@ EXPORT_SYMBOL_GPL(irq_work_queue_on);
+ /* Enqueue the irq work @work on the current CPU */
+ bool irq_work_queue(struct irq_work *work)
+ {
++      struct llist_head *list;
++      bool lazy_work, realtime = IS_ENABLED(CONFIG_PREEMPT_RT_FULL);
++
+       /* Only queue if not already pending */
+       if (!irq_work_claim(work))
+               return false;
+@@ -93,13 +104,15 @@ bool irq_work_queue(struct irq_work *wor
+       /* Queue the entry and raise the IPI if needed. */
+       preempt_disable();
+-      /* If the work is "lazy", handle it from next tick if any */
+-      if (work->flags & IRQ_WORK_LAZY) {
+-              if (llist_add(&work->llnode, this_cpu_ptr(&lazy_list)) &&
+-                  tick_nohz_tick_stopped())
+-                      arch_irq_work_raise();
+-      } else {
+-              if (llist_add(&work->llnode, this_cpu_ptr(&raised_list)))
++      lazy_work = work->flags & IRQ_WORK_LAZY;
++
++      if (lazy_work || (realtime && !(work->flags & IRQ_WORK_HARD_IRQ)))
++              list = this_cpu_ptr(&lazy_list);
++      else
++              list = this_cpu_ptr(&raised_list);
++
++      if (llist_add(&work->llnode, list)) {
++              if (!lazy_work || tick_nohz_tick_stopped())
+                       arch_irq_work_raise();
+       }
+@@ -116,9 +129,8 @@ bool irq_work_needs_cpu(void)
+       raised = this_cpu_ptr(&raised_list);
+       lazy = this_cpu_ptr(&lazy_list);
+-      if (llist_empty(raised) || arch_irq_work_has_interrupt())
+-              if (llist_empty(lazy))
+-                      return false;
++      if (llist_empty(raised) && llist_empty(lazy))
++              return false;
+       /* All work should have been flushed before going offline */
+       WARN_ON_ONCE(cpu_is_offline(smp_processor_id()));
+@@ -132,7 +144,7 @@ static void irq_work_run_list(struct lli
+       struct irq_work *work;
+       struct llist_node *llnode;
+-      BUG_ON(!irqs_disabled());
++      BUG_ON_NONRT(!irqs_disabled());
+       if (llist_empty(list))
+               return;
+@@ -169,7 +181,16 @@ static void irq_work_run_list(struct lli
+ void irq_work_run(void)
+ {
+       irq_work_run_list(this_cpu_ptr(&raised_list));
+-      irq_work_run_list(this_cpu_ptr(&lazy_list));
++      if (IS_ENABLED(CONFIG_PREEMPT_RT_FULL)) {
++              /*
++               * NOTE: we raise softirq via IPI for safety,
++               * and execute in irq_work_tick() to move the
++               * overhead from hard to soft irq context.
++               */
++              if (!llist_empty(this_cpu_ptr(&lazy_list)))
++                      raise_softirq(TIMER_SOFTIRQ);
++      } else
++              irq_work_run_list(this_cpu_ptr(&lazy_list));
+ }
+ EXPORT_SYMBOL_GPL(irq_work_run);
+--- a/kernel/sched/rt.c
++++ b/kernel/sched/rt.c
+@@ -102,6 +102,7 @@ void init_rt_rq(struct rt_rq *rt_rq)
+       rt_rq->push_cpu = nr_cpu_ids;
+       raw_spin_lock_init(&rt_rq->push_lock);
+       init_irq_work(&rt_rq->push_work, push_irq_work_func);
++      rt_rq->push_work.flags |= IRQ_WORK_HARD_IRQ;
+ #endif
+ #endif /* CONFIG_SMP */
+       /* We start is dequeued state, because no RT tasks are queued */
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -220,6 +220,7 @@ static void nohz_full_kick_func(struct i
+ static DEFINE_PER_CPU(struct irq_work, nohz_full_kick_work) = {
+       .func = nohz_full_kick_func,
++      .flags = IRQ_WORK_HARD_IRQ,
+ };
+ /*
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -1691,7 +1691,7 @@ void update_process_times(int user_tick)
+       scheduler_tick();
+       run_local_timers();
+       rcu_check_callbacks(user_tick);
+-#ifdef CONFIG_IRQ_WORK
++#if defined(CONFIG_IRQ_WORK) && !defined(CONFIG_PREEMPT_RT_FULL)
+       if (in_irq())
+               irq_work_tick();
+ #endif
+@@ -1720,6 +1720,10 @@ static __latent_entropy void run_timer_s
+ {
+       struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);
++#if defined(CONFIG_IRQ_WORK) && defined(CONFIG_PREEMPT_RT_FULL)
++      irq_work_tick();
++#endif
++
+       __run_timers(base);
+       if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && base->nohz_active)
+               __run_timers(this_cpu_ptr(&timer_bases[BASE_DEF]));
diff --git a/patches/features/all/rt/jump-label-rt.patch b/patches/features/all/rt/jump-label-rt.patch
new file mode 100644 (file)
index 0000000..744d3ca
--- /dev/null
@@ -0,0 +1,36 @@
+Subject: jump-label: disable if stop_machine() is used
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 08 Jul 2015 17:14:48 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Some architectures are using stop_machine() while switching the opcode which
+leads to latency spikes.
+The architectures which use stop_machine() atm:
+- ARM stop machine
+- s390 stop machine
+
+The architecures which use other sorcery:
+- MIPS
+- X86
+- powerpc
+- sparc
+- arm64
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+[bigeasy: only ARM for now]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/arm/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -36,7 +36,7 @@ config ARM
+       select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT)
+       select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6
+       select HAVE_ARCH_HARDENED_USERCOPY
+-      select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU
++      select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU && !PREEMPT_RT_BASE
+       select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU
+       select HAVE_ARCH_MMAP_RND_BITS if MMU
+       select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT)
diff --git a/patches/features/all/rt/kconfig-disable-a-few-options-rt.patch b/patches/features/all/rt/kconfig-disable-a-few-options-rt.patch
new file mode 100644 (file)
index 0000000..94d433c
--- /dev/null
@@ -0,0 +1,34 @@
+Subject: kconfig: Disable config options which are not RT compatible
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 24 Jul 2011 12:11:43 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Disable stuff which is known to have issues on RT
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/Kconfig |    1 +
+ mm/Kconfig   |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/Kconfig
++++ b/arch/Kconfig
+@@ -9,6 +9,7 @@ config OPROFILE
+       tristate "OProfile system profiling"
+       depends on PROFILING
+       depends on HAVE_OPROFILE
++      depends on !PREEMPT_RT_FULL
+       select RING_BUFFER
+       select RING_BUFFER_ALLOW_SWAP
+       help
+--- a/mm/Kconfig
++++ b/mm/Kconfig
+@@ -410,7 +410,7 @@ config NOMMU_INITIAL_TRIM_EXCESS
+ config TRANSPARENT_HUGEPAGE
+       bool "Transparent Hugepage Support"
+-      depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE
++      depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE && !PREEMPT_RT_FULL
+       select COMPACTION
+       select RADIX_TREE_MULTIORDER
+       help
diff --git a/patches/features/all/rt/kconfig-preempt-rt-full.patch b/patches/features/all/rt/kconfig-preempt-rt-full.patch
new file mode 100644 (file)
index 0000000..d80d86e
--- /dev/null
@@ -0,0 +1,59 @@
+Subject: kconfig: Add PREEMPT_RT_FULL
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 29 Jun 2011 14:58:57 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Introduce the final symbol for PREEMPT_RT_FULL.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ init/Makefile          |    2 +-
+ kernel/Kconfig.preempt |    8 ++++++++
+ scripts/mkcompile_h    |    4 +++-
+ 3 files changed, 12 insertions(+), 2 deletions(-)
+
+--- a/init/Makefile
++++ b/init/Makefile
+@@ -35,4 +35,4 @@ mounts-$(CONFIG_BLK_DEV_MD)  += do_mounts
+ include/generated/compile.h: FORCE
+       @$($(quiet)chk_compile.h)
+       $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
+-      "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(KBUILD_CFLAGS)"
++      "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CONFIG_PREEMPT_RT_FULL)" "$(CC) $(KBUILD_CFLAGS)"
+--- a/kernel/Kconfig.preempt
++++ b/kernel/Kconfig.preempt
+@@ -67,6 +67,14 @@ config PREEMPT_RTB
+         enables changes which are preliminary for the full preemptible
+         RT kernel.
++config PREEMPT_RT_FULL
++      bool "Fully Preemptible Kernel (RT)"
++      depends on IRQ_FORCED_THREADING
++      select PREEMPT_RT_BASE
++      select PREEMPT_RCU
++      help
++        All and everything
++
+ endchoice
+ config PREEMPT_COUNT
+--- a/scripts/mkcompile_h
++++ b/scripts/mkcompile_h
+@@ -4,7 +4,8 @@ TARGET=$1
+ ARCH=$2
+ SMP=$3
+ PREEMPT=$4
+-CC=$5
++RT=$5
++CC=$6
+ vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
+@@ -57,6 +58,7 @@ UTS_VERSION="#$VERSION"
+ CONFIG_FLAGS=""
+ if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
+ if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
++if [ -n "$RT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS RT"; fi
+ UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"
+ # Truncate to maximum length
diff --git a/patches/features/all/rt/kernel-SRCU-provide-a-static-initializer.patch b/patches/features/all/rt/kernel-SRCU-provide-a-static-initializer.patch
new file mode 100644 (file)
index 0000000..d47a073
--- /dev/null
@@ -0,0 +1,125 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Tue, 19 Mar 2013 14:44:30 +0100
+Subject: kernel/SRCU: provide a static initializer
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+There are macros for static initializer for the three out of four
+possible notifier types, that are:
+       ATOMIC_NOTIFIER_HEAD()
+       BLOCKING_NOTIFIER_HEAD()
+       RAW_NOTIFIER_HEAD()
+
+This patch provides a static initilizer for the forth type to make it
+complete.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/notifier.h |   34 +++++++++++++++++++++++++---------
+ include/linux/srcu.h     |    6 +++---
+ 2 files changed, 28 insertions(+), 12 deletions(-)
+
+--- a/include/linux/notifier.h
++++ b/include/linux/notifier.h
+@@ -6,7 +6,7 @@
+  *
+  *                            Alan Cox <Alan.Cox@linux.org>
+  */
+- 
++
+ #ifndef _LINUX_NOTIFIER_H
+ #define _LINUX_NOTIFIER_H
+ #include <linux/errno.h>
+@@ -42,9 +42,7 @@
+  * in srcu_notifier_call_chain(): no cache bounces and no memory barriers.
+  * As compensation, srcu_notifier_chain_unregister() is rather expensive.
+  * SRCU notifier chains should be used when the chain will be called very
+- * often but notifier_blocks will seldom be removed.  Also, SRCU notifier
+- * chains are slightly more difficult to use because they require special
+- * runtime initialization.
++ * often but notifier_blocks will seldom be removed.
+  */
+ struct notifier_block;
+@@ -90,7 +88,7 @@ struct srcu_notifier_head {
+               (name)->head = NULL;            \
+       } while (0)
+-/* srcu_notifier_heads must be initialized and cleaned up dynamically */
++/* srcu_notifier_heads must be cleaned up dynamically */
+ extern void srcu_init_notifier_head(struct srcu_notifier_head *nh);
+ #define srcu_cleanup_notifier_head(name)      \
+               cleanup_srcu_struct(&(name)->srcu);
+@@ -103,7 +101,13 @@ extern void srcu_init_notifier_head(stru
+               .head = NULL }
+ #define RAW_NOTIFIER_INIT(name)       {                               \
+               .head = NULL }
+-/* srcu_notifier_heads cannot be initialized statically */
++
++#define SRCU_NOTIFIER_INIT(name, pcpu)                                \
++      {                                                       \
++              .mutex = __MUTEX_INITIALIZER(name.mutex),       \
++              .head = NULL,                                   \
++              .srcu = __SRCU_STRUCT_INIT(name.srcu, pcpu),    \
++      }
+ #define ATOMIC_NOTIFIER_HEAD(name)                            \
+       struct atomic_notifier_head name =                      \
+@@ -115,6 +119,18 @@ extern void srcu_init_notifier_head(stru
+       struct raw_notifier_head name =                         \
+               RAW_NOTIFIER_INIT(name)
++#define _SRCU_NOTIFIER_HEAD(name, mod)                                \
++      static DEFINE_PER_CPU(struct srcu_struct_array,         \
++                      name##_head_srcu_array);                \
++      mod struct srcu_notifier_head name =                    \
++                      SRCU_NOTIFIER_INIT(name, name##_head_srcu_array)
++
++#define SRCU_NOTIFIER_HEAD(name)                              \
++      _SRCU_NOTIFIER_HEAD(name, )
++
++#define SRCU_NOTIFIER_HEAD_STATIC(name)                               \
++      _SRCU_NOTIFIER_HEAD(name, static)
++
+ #ifdef __KERNEL__
+ extern int atomic_notifier_chain_register(struct atomic_notifier_head *nh,
+@@ -184,12 +200,12 @@ static inline int notifier_to_errno(int
+ /*
+  *    Declared notifiers so far. I can imagine quite a few more chains
+- *    over time (eg laptop power reset chains, reboot chain (to clean 
++ *    over time (eg laptop power reset chains, reboot chain (to clean
+  *    device units up), device [un]mount chain, module load/unload chain,
+- *    low memory chain, screenblank chain (for plug in modular screenblankers) 
++ *    low memory chain, screenblank chain (for plug in modular screenblankers)
+  *    VC switch chains (for loadable kernel svgalib VC switch helpers) etc...
+  */
+- 
++
+ /* CPU notfiers are defined in include/linux/cpu.h. */
+ /* netdevice notifiers are defined in include/linux/netdevice.h */
+--- a/include/linux/srcu.h
++++ b/include/linux/srcu.h
+@@ -84,10 +84,10 @@ int init_srcu_struct(struct srcu_struct
+ void process_srcu(struct work_struct *work);
+-#define __SRCU_STRUCT_INIT(name)                                      \
++#define __SRCU_STRUCT_INIT(name, pcpu_name)                           \
+       {                                                               \
+               .completed = -300,                                      \
+-              .per_cpu_ref = &name##_srcu_array,                      \
++              .per_cpu_ref = &pcpu_name,                              \
+               .queue_lock = __SPIN_LOCK_UNLOCKED(name.queue_lock),    \
+               .running = false,                                       \
+               .batch_queue = RCU_BATCH_INIT(name.batch_queue),        \
+@@ -119,7 +119,7 @@ void process_srcu(struct work_struct *wo
+  */
+ #define __DEFINE_SRCU(name, is_static)                                        \
+       static DEFINE_PER_CPU(struct srcu_struct_array, name##_srcu_array);\
+-      is_static struct srcu_struct name = __SRCU_STRUCT_INIT(name)
++      is_static struct srcu_struct name = __SRCU_STRUCT_INIT(name, name##_srcu_array)
+ #define DEFINE_SRCU(name)             __DEFINE_SRCU(name, /* not static */)
+ #define DEFINE_STATIC_SRCU(name)      __DEFINE_SRCU(name, static)
diff --git a/patches/features/all/rt/kernel-cpu-fix-cpu-down-problem-if-kthread-s-cpu-is-.patch b/patches/features/all/rt/kernel-cpu-fix-cpu-down-problem-if-kthread-s-cpu-is-.patch
new file mode 100644 (file)
index 0000000..6fc287a
--- /dev/null
@@ -0,0 +1,86 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 7 Jun 2013 22:37:06 +0200
+Subject: kernel/cpu: fix cpu down problem if kthread's cpu is going down
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+If kthread is pinned to CPUx and CPUx is going down then we get into
+trouble:
+- first the unplug thread is created
+- it will set itself to hp->unplug. As a result, every task that is
+  going to take a lock, has to leave the CPU.
+- the CPU_DOWN_PREPARE notifier are started. The worker thread will
+  start a new process for the "high priority worker".
+  Now kthread would like to take a lock but since it can't leave the CPU
+  it will never complete its task.
+
+We could fire the unplug thread after the notifier but then the cpu is
+no longer marked "online" and the unplug thread will run on CPU0 which
+was fixed before :)
+
+So instead the unplug thread is started and kept waiting until the
+notfier complete their work.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/cpu.c |   15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -259,6 +259,7 @@ struct hotplug_pcp {
+       int refcount;
+       int grab_lock;
+       struct completion synced;
++      struct completion unplug_wait;
+ #ifdef CONFIG_PREEMPT_RT_FULL
+       /*
+        * Note, on PREEMPT_RT, the hotplug lock must save the state of
+@@ -362,6 +363,7 @@ static int sync_unplug_thread(void *data
+ {
+       struct hotplug_pcp *hp = data;
++      wait_for_completion(&hp->unplug_wait);
+       preempt_disable();
+       hp->unplug = current;
+       wait_for_pinned_cpus(hp);
+@@ -427,6 +429,14 @@ static void __cpu_unplug_sync(struct hot
+       wait_for_completion(&hp->synced);
+ }
++static void __cpu_unplug_wait(unsigned int cpu)
++{
++      struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
++
++      complete(&hp->unplug_wait);
++      wait_for_completion(&hp->synced);
++}
++
+ /*
+  * Start the sync_unplug_thread on the target cpu and wait for it to
+  * complete.
+@@ -450,6 +460,7 @@ static int cpu_unplug_begin(unsigned int
+       tell_sched_cpu_down_begin(cpu);
+       init_completion(&hp->synced);
++      init_completion(&hp->unplug_wait);
+       hp->sync_tsk = kthread_create(sync_unplug_thread, hp, "sync_unplug/%d", cpu);
+       if (IS_ERR(hp->sync_tsk)) {
+@@ -465,8 +476,7 @@ static int cpu_unplug_begin(unsigned int
+        * wait for tasks that are going to enter these sections and
+        * we must not have them block.
+        */
+-      __cpu_unplug_sync(hp);
+-
++      wake_up_process(hp->sync_tsk);
+       return 0;
+ }
+@@ -1062,6 +1072,7 @@ static int takedown_cpu(unsigned int cpu
+       struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu);
+       int err;
++      __cpu_unplug_wait(cpu);
+       /* Park the smpboot threads */
+       kthread_park(per_cpu_ptr(&cpuhp_state, cpu)->thread);
+       smpboot_park_threads(cpu);
diff --git a/patches/features/all/rt/kernel-hotplug-restore-original-cpu-mask-oncpu-down.patch b/patches/features/all/rt/kernel-hotplug-restore-original-cpu-mask-oncpu-down.patch
new file mode 100644 (file)
index 0000000..6542152
--- /dev/null
@@ -0,0 +1,59 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 14 Jun 2013 17:16:35 +0200
+Subject: kernel/hotplug: restore original cpu mask oncpu/down
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+If a task which is allowed to run only on CPU X puts CPU Y down then it
+will be allowed on all CPUs but the on CPU Y after it comes back from
+kernel. This patch ensures that we don't lose the initial setting unless
+the CPU the task is running is going down.
+
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/cpu.c |   13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -1166,6 +1166,7 @@ static int __ref _cpu_down(unsigned int
+       bool hasdied = false;
+       int mycpu;
+       cpumask_var_t cpumask;
++      cpumask_var_t cpumask_org;
+       if (num_online_cpus() == 1)
+               return -EBUSY;
+@@ -1176,6 +1177,12 @@ static int __ref _cpu_down(unsigned int
+       /* Move the downtaker off the unplug cpu */
+       if (!alloc_cpumask_var(&cpumask, GFP_KERNEL))
+               return -ENOMEM;
++      if (!alloc_cpumask_var(&cpumask_org, GFP_KERNEL))  {
++              free_cpumask_var(cpumask);
++              return -ENOMEM;
++      }
++
++      cpumask_copy(cpumask_org, tsk_cpus_allowed(current));
+       cpumask_andnot(cpumask, cpu_online_mask, cpumask_of(cpu));
+       set_cpus_allowed_ptr(current, cpumask);
+       free_cpumask_var(cpumask);
+@@ -1184,7 +1191,8 @@ static int __ref _cpu_down(unsigned int
+       if (mycpu == cpu) {
+               printk(KERN_ERR "Yuck! Still on unplug CPU\n!");
+               migrate_enable();
+-              return -EBUSY;
++              ret = -EBUSY;
++              goto restore_cpus;
+       }
+       cpu_hotplug_begin();
+@@ -1238,6 +1246,9 @@ static int __ref _cpu_down(unsigned int
+       /* This post dead nonsense must die */
+       if (!ret && hasdied)
+               cpu_notify_nofail(CPU_POST_DEAD, cpu);
++restore_cpus:
++      set_cpus_allowed_ptr(current, cpumask_org);
++      free_cpumask_var(cpumask_org);
+       return ret;
+ }
diff --git a/patches/features/all/rt/kernel-migrate_disable-do-fastpath-in-atomic-irqs-of.patch b/patches/features/all/rt/kernel-migrate_disable-do-fastpath-in-atomic-irqs-of.patch
new file mode 100644 (file)
index 0000000..459999f
--- /dev/null
@@ -0,0 +1,34 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Tue, 9 Feb 2016 18:18:01 +0100
+Subject: kernel: migrate_disable() do fastpath in atomic &
+ irqs-off
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+With interrupts off it makes no sense to do the long path since we can't
+leave the CPU anyway. Also we might end up in a recursion with lockdep.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/sched/core.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -3299,7 +3299,7 @@ void migrate_disable(void)
+ {
+       struct task_struct *p = current;
+-      if (in_atomic()) {
++      if (in_atomic() || irqs_disabled()) {
+ #ifdef CONFIG_SCHED_DEBUG
+               p->migrate_disable_atomic++;
+ #endif
+@@ -3326,7 +3326,7 @@ void migrate_enable(void)
+ {
+       struct task_struct *p = current;
+-      if (in_atomic()) {
++      if (in_atomic() || irqs_disabled()) {
+ #ifdef CONFIG_SCHED_DEBUG
+               p->migrate_disable_atomic--;
+ #endif
diff --git a/patches/features/all/rt/kernel-perf-mark-perf_cpu_context-s-timer-as-irqsafe.patch b/patches/features/all/rt/kernel-perf-mark-perf_cpu_context-s-timer-as-irqsafe.patch
new file mode 100644 (file)
index 0000000..892c481
--- /dev/null
@@ -0,0 +1,25 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 4 Feb 2016 16:38:10 +0100
+Subject: [PATCH] kernel/perf: mark perf_cpu_context's timer as irqsafe
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Otherwise we get a WARN_ON() backtrace and some events are reported as
+"not counted".
+
+Cc: stable-rt@vger.kernel.org
+Reported-by: Yang Shi <yang.shi@linaro.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/events/core.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/kernel/events/core.c
++++ b/kernel/events/core.c
+@@ -1050,6 +1050,7 @@ static void __perf_mux_hrtimer_init(stru
+       raw_spin_lock_init(&cpuctx->hrtimer_lock);
+       hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED);
+       timer->function = perf_mux_hrtimer_handler;
++      timer->irqsafe = 1;
+ }
+ static int perf_mux_hrtimer_restart(struct perf_cpu_context *cpuctx)
diff --git a/patches/features/all/rt/kernel-printk-Don-t-try-to-print-from-IRQ-NMI-region.patch b/patches/features/all/rt/kernel-printk-Don-t-try-to-print-from-IRQ-NMI-region.patch
new file mode 100644 (file)
index 0000000..69c6e6b
--- /dev/null
@@ -0,0 +1,42 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 19 May 2016 17:45:27 +0200
+Subject: [PATCH] kernel/printk: Don't try to print from IRQ/NMI region
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On -RT we try to acquire sleeping locks which might lead to warnings
+from lockdep or a warn_on() from spin_try_lock() (which is a rtmutex on
+RT).
+We don't print in general from a IRQ off region so we should not try
+this via console_unblank() / bust_spinlocks() as well.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/printk/printk.c |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -1628,6 +1628,11 @@ static void call_console_drivers(int lev
+       if (!console_drivers)
+               return;
++      if (IS_ENABLED(CONFIG_PREEMPT_RT_BASE)) {
++              if (in_irq() || in_nmi())
++                      return;
++      }
++
+       migrate_disable();
+       for_each_console(con) {
+               if (exclusive_console && con != exclusive_console)
+@@ -2556,6 +2561,11 @@ void console_unblank(void)
+ {
+       struct console *c;
++      if (IS_ENABLED(CONFIG_PREEMPT_RT_BASE)) {
++              if (in_irq() || in_nmi())
++                      return;
++      }
++
+       /*
+        * console_unblank can no longer be called in interrupt context unless
+        * oops_in_progress is set to 1..
diff --git a/patches/features/all/rt/kernel-sched-move-stack-kprobe-clean-up-to-__put_tas.patch b/patches/features/all/rt/kernel-sched-move-stack-kprobe-clean-up-to-__put_tas.patch
new file mode 100644 (file)
index 0000000..9a26527
--- /dev/null
@@ -0,0 +1,61 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 21 Nov 2016 19:31:08 +0100
+Subject: [PATCH] kernel/sched: move stack + kprobe clean up to
+ __put_task_struct()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+There is no need to free the stack before the task struct. This also
+comes handy on -RT because we can't free memory in preempt disabled
+region.
+
+Cc: stable-rt@vger.kernel.org #for kprobe_flush_task()
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/fork.c       |   10 ++++++++++
+ kernel/sched/core.c |    9 ---------
+ 2 files changed, 10 insertions(+), 9 deletions(-)
+
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -76,6 +76,7 @@
+ #include <linux/compiler.h>
+ #include <linux/sysctl.h>
+ #include <linux/kcov.h>
++#include <linux/kprobes.h>
+ #include <asm/pgtable.h>
+ #include <asm/pgalloc.h>
+@@ -385,6 +386,15 @@ void __put_task_struct(struct task_struc
+       WARN_ON(atomic_read(&tsk->usage));
+       WARN_ON(tsk == current);
++      /*
++       * Remove function-return probe instances associated with this
++       * task and put them back on the free list.
++       */
++      kprobe_flush_task(tsk);
++
++      /* Task is done with its stack. */
++      put_task_stack(tsk);
++
+       cgroup_free(tsk);
+       task_numa_free(tsk);
+       security_task_free(tsk);
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -2795,15 +2795,6 @@ static struct rq *finish_task_switch(str
+               if (prev->sched_class->task_dead)
+                       prev->sched_class->task_dead(prev);
+-              /*
+-               * Remove function-return probe instances associated with this
+-               * task and put them back on the free list.
+-               */
+-              kprobe_flush_task(prev);
+-
+-              /* Task is done with its stack. */
+-              put_task_stack(prev);
+-
+               put_task_struct(prev);
+       }
diff --git a/patches/features/all/rt/kernel-softirq-unlock-with-irqs-on.patch b/patches/features/all/rt/kernel-softirq-unlock-with-irqs-on.patch
new file mode 100644 (file)
index 0000000..d9b44d7
--- /dev/null
@@ -0,0 +1,28 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Tue, 9 Feb 2016 18:17:18 +0100
+Subject: kernel: softirq: unlock with irqs on
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+We unlock the lock while the interrupts are off. This isn't a problem
+now but will get because the migrate_disable() + enable are not
+symmetrical in regard to the status of interrupts.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/softirq.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -560,8 +560,10 @@ static void do_current_softirqs(void)
+                       do_single_softirq(i);
+               }
+               softirq_clr_runner(i);
+-              unlock_softirq(i);
+               WARN_ON(current->softirq_nestcnt != 1);
++              local_irq_enable();
++              unlock_softirq(i);
++              local_irq_disable();
+       }
+ }
diff --git a/patches/features/all/rt/kgb-serial-hackaround.patch b/patches/features/all/rt/kgb-serial-hackaround.patch
new file mode 100644 (file)
index 0000000..ec4224e
--- /dev/null
@@ -0,0 +1,102 @@
+From: Jason Wessel <jason.wessel@windriver.com>
+Date: Thu, 28 Jul 2011 12:42:23 -0500
+Subject: kgdb/serial: Short term workaround
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On 07/27/2011 04:37 PM, Thomas Gleixner wrote:
+>  - KGDB (not yet disabled) is reportedly unusable on -rt right now due
+>    to missing hacks in the console locking which I dropped on purpose.
+>
+
+To work around this in the short term you can use this patch, in
+addition to the clocksource watchdog patch that Thomas brewed up.
+
+Comments are welcome of course.  Ultimately the right solution is to
+change separation between the console and the HW to have a polled mode
++ work queue so as not to introduce any kind of latency.
+
+Thanks,
+Jason.
+
+---
+ drivers/tty/serial/8250/8250_port.c |    3 +++
+ include/linux/kdb.h                 |    2 ++
+ kernel/debug/kdb/kdb_io.c           |    6 ++----
+ 3 files changed, 7 insertions(+), 4 deletions(-)
+
+--- a/drivers/tty/serial/8250/8250_port.c
++++ b/drivers/tty/serial/8250/8250_port.c
+@@ -35,6 +35,7 @@
+ #include <linux/nmi.h>
+ #include <linux/mutex.h>
+ #include <linux/slab.h>
++#include <linux/kdb.h>
+ #include <linux/uaccess.h>
+ #include <linux/pm_runtime.h>
+ #include <linux/timer.h>
+@@ -3146,6 +3147,8 @@ void serial8250_console_write(struct uar
+       if (port->sysrq || oops_in_progress)
+               locked = 0;
++      else if (in_kdb_printk())
++              locked = spin_trylock_irqsave(&port->lock, flags);
+       else
+               spin_lock_irqsave(&port->lock, flags);
+--- a/include/linux/kdb.h
++++ b/include/linux/kdb.h
+@@ -167,6 +167,7 @@ extern __printf(2, 0) int vkdb_printf(en
+ extern __printf(1, 2) int kdb_printf(const char *, ...);
+ typedef __printf(1, 2) int (*kdb_printf_t)(const char *, ...);
++#define in_kdb_printk()       (kdb_trap_printk)
+ extern void kdb_init(int level);
+ /* Access to kdb specific polling devices */
+@@ -201,6 +202,7 @@ extern int kdb_register_flags(char *, kd
+ extern int kdb_unregister(char *);
+ #else /* ! CONFIG_KGDB_KDB */
+ static inline __printf(1, 2) int kdb_printf(const char *fmt, ...) { return 0; }
++#define in_kdb_printk() (0)
+ static inline void kdb_init(int level) {}
+ static inline int kdb_register(char *cmd, kdb_func_t func, char *usage,
+                              char *help, short minlen) { return 0; }
+--- a/kernel/debug/kdb/kdb_io.c
++++ b/kernel/debug/kdb/kdb_io.c
+@@ -554,7 +554,6 @@ int vkdb_printf(enum kdb_msgsrc src, con
+       int linecount;
+       int colcount;
+       int logging, saved_loglevel = 0;
+-      int saved_trap_printk;
+       int got_printf_lock = 0;
+       int retlen = 0;
+       int fnd, len;
+@@ -565,8 +564,6 @@ int vkdb_printf(enum kdb_msgsrc src, con
+       unsigned long uninitialized_var(flags);
+       preempt_disable();
+-      saved_trap_printk = kdb_trap_printk;
+-      kdb_trap_printk = 0;
+       /* Serialize kdb_printf if multiple cpus try to write at once.
+        * But if any cpu goes recursive in kdb, just print the output,
+@@ -855,7 +852,6 @@ int vkdb_printf(enum kdb_msgsrc src, con
+       } else {
+               __release(kdb_printf_lock);
+       }
+-      kdb_trap_printk = saved_trap_printk;
+       preempt_enable();
+       return retlen;
+ }
+@@ -865,9 +861,11 @@ int kdb_printf(const char *fmt, ...)
+       va_list ap;
+       int r;
++      kdb_trap_printk++;
+       va_start(ap, fmt);
+       r = vkdb_printf(KDB_MSGSRC_INTERNAL, fmt, ap);
+       va_end(ap);
++      kdb_trap_printk--;
+       return r;
+ }
diff --git a/patches/features/all/rt/latency-hist.patch b/patches/features/all/rt/latency-hist.patch
new file mode 100644 (file)
index 0000000..027bd18
--- /dev/null
@@ -0,0 +1,1818 @@
+Subject: tracing: Add latency histograms
+From: Carsten Emde <C.Emde@osadl.org>
+Date: Tue, 19 Jul 2011 14:03:41 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+This patch provides a recording mechanism to store data of potential
+sources of system latencies. The recordings separately determine the
+latency caused by a delayed timer expiration, by a delayed wakeup of the
+related user space program and by the sum of both. The histograms can be
+enabled and reset individually. The data are accessible via the debug
+filesystem. For details please consult Documentation/trace/histograms.txt.
+
+Signed-off-by: Carsten Emde <C.Emde@osadl.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ Documentation/trace/histograms.txt  |  186 +++++
+ include/linux/hrtimer.h             |    4 
+ include/linux/sched.h               |    6 
+ include/trace/events/hist.h         |   73 ++
+ include/trace/events/latency_hist.h |   29 
+ kernel/time/hrtimer.c               |   21 
+ kernel/trace/Kconfig                |  104 +++
+ kernel/trace/Makefile               |    4 
+ kernel/trace/latency_hist.c         | 1178 ++++++++++++++++++++++++++++++++++++
+ kernel/trace/trace_irqsoff.c        |   11 
+ 10 files changed, 1616 insertions(+)
+
+--- /dev/null
++++ b/Documentation/trace/histograms.txt
+@@ -0,0 +1,186 @@
++              Using the Linux Kernel Latency Histograms
++
++
++This document gives a short explanation how to enable, configure and use
++latency histograms. Latency histograms are primarily relevant in the
++context of real-time enabled kernels (CONFIG_PREEMPT/CONFIG_PREEMPT_RT)
++and are used in the quality management of the Linux real-time
++capabilities.
++
++
++* Purpose of latency histograms
++
++A latency histogram continuously accumulates the frequencies of latency
++data. There are two types of histograms
++- potential sources of latencies
++- effective latencies
++
++
++* Potential sources of latencies
++
++Potential sources of latencies are code segments where interrupts,
++preemption or both are disabled (aka critical sections). To create
++histograms of potential sources of latency, the kernel stores the time
++stamp at the start of a critical section, determines the time elapsed
++when the end of the section is reached, and increments the frequency
++counter of that latency value - irrespective of whether any concurrently
++running process is affected by latency or not.
++- Configuration items (in the Kernel hacking/Tracers submenu)
++  CONFIG_INTERRUPT_OFF_LATENCY
++  CONFIG_PREEMPT_OFF_LATENCY
++
++
++* Effective latencies
++
++Effective latencies are actually occuring during wakeup of a process. To
++determine effective latencies, the kernel stores the time stamp when a
++process is scheduled to be woken up, and determines the duration of the
++wakeup time shortly before control is passed over to this process. Note
++that the apparent latency in user space may be somewhat longer, since the
++process may be interrupted after control is passed over to it but before
++the execution in user space takes place. Simply measuring the interval
++between enqueuing and wakeup may also not appropriate in cases when a
++process is scheduled as a result of a timer expiration. The timer may have
++missed its deadline, e.g. due to disabled interrupts, but this latency
++would not be registered. Therefore, the offsets of missed timers are
++recorded in a separate histogram. If both wakeup latency and missed timer
++offsets are configured and enabled, a third histogram may be enabled that
++records the overall latency as a sum of the timer latency, if any, and the
++wakeup latency. This histogram is called "timerandwakeup".
++- Configuration items (in the Kernel hacking/Tracers submenu)
++  CONFIG_WAKEUP_LATENCY
++  CONFIG_MISSED_TIMER_OFSETS
++
++
++* Usage
++
++The interface to the administration of the latency histograms is located
++in the debugfs file system. To mount it, either enter
++
++mount -t sysfs nodev /sys
++mount -t debugfs nodev /sys/kernel/debug
++
++from shell command line level, or add
++
++nodev /sys                    sysfs   defaults        0 0
++nodev /sys/kernel/debug       debugfs defaults        0 0
++
++to the file /etc/fstab. All latency histogram related files are then
++available in the directory /sys/kernel/debug/tracing/latency_hist. A
++particular histogram type is enabled by writing non-zero to the related
++variable in the /sys/kernel/debug/tracing/latency_hist/enable directory.
++Select "preemptirqsoff" for the histograms of potential sources of
++latencies and "wakeup" for histograms of effective latencies etc. The
++histogram data - one per CPU - are available in the files
++
++/sys/kernel/debug/tracing/latency_hist/preemptoff/CPUx
++/sys/kernel/debug/tracing/latency_hist/irqsoff/CPUx
++/sys/kernel/debug/tracing/latency_hist/preemptirqsoff/CPUx
++/sys/kernel/debug/tracing/latency_hist/wakeup/CPUx
++/sys/kernel/debug/tracing/latency_hist/wakeup/sharedprio/CPUx
++/sys/kernel/debug/tracing/latency_hist/missed_timer_offsets/CPUx
++/sys/kernel/debug/tracing/latency_hist/timerandwakeup/CPUx
++
++The histograms are reset by writing non-zero to the file "reset" in a
++particular latency directory. To reset all latency data, use
++
++#!/bin/sh
++
++TRACINGDIR=/sys/kernel/debug/tracing
++HISTDIR=$TRACINGDIR/latency_hist
++
++if test -d $HISTDIR
++then
++  cd $HISTDIR
++  for i in `find . | grep /reset$`
++  do
++    echo 1 >$i
++  done
++fi
++
++
++* Data format
++
++Latency data are stored with a resolution of one microsecond. The
++maximum latency is 10,240 microseconds. The data are only valid, if the
++overflow register is empty. Every output line contains the latency in
++microseconds in the first row and the number of samples in the second
++row. To display only lines with a positive latency count, use, for
++example,
++
++grep -v " 0$" /sys/kernel/debug/tracing/latency_hist/preemptoff/CPU0
++
++#Minimum latency: 0 microseconds.
++#Average latency: 0 microseconds.
++#Maximum latency: 25 microseconds.
++#Total samples: 3104770694
++#There are 0 samples greater or equal than 10240 microseconds
++#usecs                 samples
++    0       2984486876
++    1         49843506
++    2         58219047
++    3          5348126
++    4          2187960
++    5          3388262
++    6           959289
++    7           208294
++    8            40420
++    9             4485
++   10            14918
++   11            18340
++   12            25052
++   13            19455
++   14             5602
++   15              969
++   16               47
++   17               18
++   18               14
++   19                1
++   20                3
++   21                2
++   22                5
++   23                2
++   25                1
++
++
++* Wakeup latency of a selected process
++
++To only collect wakeup latency data of a particular process, write the
++PID of the requested process to
++
++/sys/kernel/debug/tracing/latency_hist/wakeup/pid
++
++PIDs are not considered, if this variable is set to 0.
++
++
++* Details of the process with the highest wakeup latency so far
++
++Selected data of the process that suffered from the highest wakeup
++latency that occurred in a particular CPU are available in the file
++
++/sys/kernel/debug/tracing/latency_hist/wakeup/max_latency-CPUx.
++
++In addition, other relevant system data at the time when the
++latency occurred are given.
++
++The format of the data is (all in one line):
++<PID> <Priority> <Latency> (<Timeroffset>) <Command> \
++<- <PID> <Priority> <Command> <Timestamp>
++
++The value of <Timeroffset> is only relevant in the combined timer
++and wakeup latency recording. In the wakeup recording, it is
++always 0, in the missed_timer_offsets recording, it is the same
++as <Latency>.
++
++When retrospectively searching for the origin of a latency and
++tracing was not enabled, it may be helpful to know the name and
++some basic data of the task that (finally) was switching to the
++late real-tlme task. In addition to the victim's data, also the
++data of the possible culprit are therefore displayed after the
++"<-" symbol.
++
++Finally, the timestamp of the time when the latency occurred
++in <seconds>.<microseconds> after the most recent system boot
++is provided.
++
++These data are also reset when the wakeup histogram is reset.
+--- a/include/linux/hrtimer.h
++++ b/include/linux/hrtimer.h
+@@ -87,6 +87,7 @@ enum hrtimer_restart {
+  * @function: timer expiry callback function
+  * @base:     pointer to the timer base (per cpu and per clock)
+  * @state:    state information (See bit values above)
++ * @praecox:  timer expiry time if expired at the time of programming
+  * @is_rel:   Set if the timer was armed relative
+  * @start_pid:  timer statistics field to store the pid of the task which
+  *            started the timer
+@@ -103,6 +104,9 @@ struct hrtimer {
+       enum hrtimer_restart            (*function)(struct hrtimer *);
+       struct hrtimer_clock_base       *base;
+       u8                              state;
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++      ktime_t                         praecox;
++#endif
+       u8                              is_rel;
+ #ifdef CONFIG_TIMER_STATS
+       int                             start_pid;
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1918,6 +1918,12 @@ struct task_struct {
+       /* bitmask and counter of trace recursion */
+       unsigned long trace_recursion;
+ #endif /* CONFIG_TRACING */
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++      u64 preempt_timestamp_hist;
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++      long timer_offset;
++#endif
++#endif
+ #ifdef CONFIG_KCOV
+       /* Coverage collection mode enabled for this task (0 if disabled). */
+       enum kcov_mode kcov_mode;
+--- /dev/null
++++ b/include/trace/events/hist.h
+@@ -0,0 +1,73 @@
++#undef TRACE_SYSTEM
++#define TRACE_SYSTEM hist
++
++#if !defined(_TRACE_HIST_H) || defined(TRACE_HEADER_MULTI_READ)
++#define _TRACE_HIST_H
++
++#include "latency_hist.h"
++#include <linux/tracepoint.h>
++
++#if !defined(CONFIG_PREEMPT_OFF_HIST) && !defined(CONFIG_INTERRUPT_OFF_HIST)
++#define trace_preemptirqsoff_hist(a, b)
++#define trace_preemptirqsoff_hist_rcuidle(a, b)
++#else
++TRACE_EVENT(preemptirqsoff_hist,
++
++      TP_PROTO(int reason, int starthist),
++
++      TP_ARGS(reason, starthist),
++
++      TP_STRUCT__entry(
++              __field(int,    reason)
++              __field(int,    starthist)
++      ),
++
++      TP_fast_assign(
++              __entry->reason         = reason;
++              __entry->starthist      = starthist;
++      ),
++
++      TP_printk("reason=%s starthist=%s", getaction(__entry->reason),
++                __entry->starthist ? "start" : "stop")
++);
++#endif
++
++#ifndef CONFIG_MISSED_TIMER_OFFSETS_HIST
++#define trace_hrtimer_interrupt(a, b, c, d)
++#else
++TRACE_EVENT(hrtimer_interrupt,
++
++      TP_PROTO(int cpu, long long offset, struct task_struct *curr,
++              struct task_struct *task),
++
++      TP_ARGS(cpu, offset, curr, task),
++
++      TP_STRUCT__entry(
++              __field(int,            cpu)
++              __field(long long,      offset)
++              __array(char,           ccomm,  TASK_COMM_LEN)
++              __field(int,            cprio)
++              __array(char,           tcomm,  TASK_COMM_LEN)
++              __field(int,            tprio)
++      ),
++
++      TP_fast_assign(
++              __entry->cpu    = cpu;
++              __entry->offset = offset;
++              memcpy(__entry->ccomm, curr->comm, TASK_COMM_LEN);
++              __entry->cprio  = curr->prio;
++              memcpy(__entry->tcomm, task != NULL ? task->comm : "<none>",
++                      task != NULL ? TASK_COMM_LEN : 7);
++              __entry->tprio  = task != NULL ? task->prio : -1;
++      ),
++
++      TP_printk("cpu=%d offset=%lld curr=%s[%d] thread=%s[%d]",
++              __entry->cpu, __entry->offset, __entry->ccomm,
++              __entry->cprio, __entry->tcomm, __entry->tprio)
++);
++#endif
++
++#endif /* _TRACE_HIST_H */
++
++/* This part must be outside protection */
++#include <trace/define_trace.h>
+--- /dev/null
++++ b/include/trace/events/latency_hist.h
+@@ -0,0 +1,29 @@
++#ifndef _LATENCY_HIST_H
++#define _LATENCY_HIST_H
++
++enum hist_action {
++      IRQS_ON,
++      PREEMPT_ON,
++      TRACE_STOP,
++      IRQS_OFF,
++      PREEMPT_OFF,
++      TRACE_START,
++};
++
++static char *actions[] = {
++      "IRQS_ON",
++      "PREEMPT_ON",
++      "TRACE_STOP",
++      "IRQS_OFF",
++      "PREEMPT_OFF",
++      "TRACE_START",
++};
++
++static inline char *getaction(int action)
++{
++      if (action >= 0 && action <= sizeof(actions)/sizeof(actions[0]))
++              return actions[action];
++      return "unknown";
++}
++
++#endif /* _LATENCY_HIST_H */
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -53,6 +53,7 @@
+ #include <asm/uaccess.h>
+ #include <trace/events/timer.h>
++#include <trace/events/hist.h>
+ #include "tick-internal.h"
+@@ -991,7 +992,16 @@ void hrtimer_start_range_ns(struct hrtim
+       new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED);
+       timer_stats_hrtimer_set_start_info(timer);
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++      {
++              ktime_t now = new_base->get_time();
++              if (ktime_to_ns(tim) < ktime_to_ns(now))
++                      timer->praecox = now;
++              else
++                      timer->praecox = ktime_set(0, 0);
++      }
++#endif
+       leftmost = enqueue_hrtimer(timer, new_base);
+       if (!leftmost)
+               goto unlock;
+@@ -1265,6 +1275,8 @@ static void __run_hrtimer(struct hrtimer
+       cpu_base->running = NULL;
+ }
++static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer);
++
+ static void __hrtimer_run_queues(struct hrtimer_cpu_base *cpu_base, ktime_t now)
+ {
+       struct hrtimer_clock_base *base = cpu_base->clock_base;
+@@ -1284,6 +1296,15 @@ static void __hrtimer_run_queues(struct
+                       timer = container_of(node, struct hrtimer, node);
++                      trace_hrtimer_interrupt(raw_smp_processor_id(),
++                          ktime_to_ns(ktime_sub(ktime_to_ns(timer->praecox) ?
++                              timer->praecox : hrtimer_get_expires(timer),
++                              basenow)),
++                          current,
++                          timer->function == hrtimer_wakeup ?
++                          container_of(timer, struct hrtimer_sleeper,
++                              timer)->task : NULL);
++
+                       /*
+                        * The immediate goal for using the softexpires is
+                        * minimizing wakeups, not running timers at the
+--- a/kernel/trace/Kconfig
++++ b/kernel/trace/Kconfig
+@@ -182,6 +182,24 @@ config IRQSOFF_TRACER
+         enabled. This option and the preempt-off timing option can be
+         used together or separately.)
++config INTERRUPT_OFF_HIST
++      bool "Interrupts-off Latency Histogram"
++      depends on IRQSOFF_TRACER
++      help
++        This option generates continuously updated histograms (one per cpu)
++        of the duration of time periods with interrupts disabled. The
++        histograms are disabled by default. To enable them, write a non-zero
++        number to
++
++            /sys/kernel/debug/tracing/latency_hist/enable/preemptirqsoff
++
++        If PREEMPT_OFF_HIST is also selected, additional histograms (one
++        per cpu) are generated that accumulate the duration of time periods
++        when both interrupts and preemption are disabled. The histogram data
++        will be located in the debug file system at
++
++            /sys/kernel/debug/tracing/latency_hist/irqsoff
++
+ config PREEMPT_TRACER
+       bool "Preemption-off Latency Tracer"
+       default n
+@@ -206,6 +224,24 @@ config PREEMPT_TRACER
+         enabled. This option and the irqs-off timing option can be
+         used together or separately.)
++config PREEMPT_OFF_HIST
++      bool "Preemption-off Latency Histogram"
++      depends on PREEMPT_TRACER
++      help
++        This option generates continuously updated histograms (one per cpu)
++        of the duration of time periods with preemption disabled. The
++        histograms are disabled by default. To enable them, write a non-zero
++        number to
++
++            /sys/kernel/debug/tracing/latency_hist/enable/preemptirqsoff
++
++        If INTERRUPT_OFF_HIST is also selected, additional histograms (one
++        per cpu) are generated that accumulate the duration of time periods
++        when both interrupts and preemption are disabled. The histogram data
++        will be located in the debug file system at
++
++            /sys/kernel/debug/tracing/latency_hist/preemptoff
++
+ config SCHED_TRACER
+       bool "Scheduling Latency Tracer"
+       select GENERIC_TRACER
+@@ -251,6 +287,74 @@ config HWLAT_TRACER
+        file. Every time a latency is greater than tracing_thresh, it will
+        be recorded into the ring buffer.
++config WAKEUP_LATENCY_HIST
++      bool "Scheduling Latency Histogram"
++      depends on SCHED_TRACER
++      help
++        This option generates continuously updated histograms (one per cpu)
++        of the scheduling latency of the highest priority task.
++        The histograms are disabled by default. To enable them, write a
++        non-zero number to
++
++            /sys/kernel/debug/tracing/latency_hist/enable/wakeup
++
++        Two different algorithms are used, one to determine the latency of
++        processes that exclusively use the highest priority of the system and
++        another one to determine the latency of processes that share the
++        highest system priority with other processes. The former is used to
++        improve hardware and system software, the latter to optimize the
++        priority design of a given system. The histogram data will be
++        located in the debug file system at
++
++            /sys/kernel/debug/tracing/latency_hist/wakeup
++
++        and
++
++            /sys/kernel/debug/tracing/latency_hist/wakeup/sharedprio
++
++        If both Scheduling Latency Histogram and Missed Timer Offsets
++        Histogram are selected, additional histogram data will be collected
++        that contain, in addition to the wakeup latency, the timer latency, in
++        case the wakeup was triggered by an expired timer. These histograms
++        are available in the
++
++            /sys/kernel/debug/tracing/latency_hist/timerandwakeup
++
++        directory. They reflect the apparent interrupt and scheduling latency
++        and are best suitable to determine the worst-case latency of a given
++        system. To enable these histograms, write a non-zero number to
++
++            /sys/kernel/debug/tracing/latency_hist/enable/timerandwakeup
++
++config MISSED_TIMER_OFFSETS_HIST
++      depends on HIGH_RES_TIMERS
++      select GENERIC_TRACER
++      bool "Missed Timer Offsets Histogram"
++      help
++        Generate a histogram of missed timer offsets in microseconds. The
++        histograms are disabled by default. To enable them, write a non-zero
++        number to
++
++            /sys/kernel/debug/tracing/latency_hist/enable/missed_timer_offsets
++
++        The histogram data will be located in the debug file system at
++
++            /sys/kernel/debug/tracing/latency_hist/missed_timer_offsets
++
++        If both Scheduling Latency Histogram and Missed Timer Offsets
++        Histogram are selected, additional histogram data will be collected
++        that contain, in addition to the wakeup latency, the timer latency, in
++        case the wakeup was triggered by an expired timer. These histograms
++        are available in the
++
++            /sys/kernel/debug/tracing/latency_hist/timerandwakeup
++
++        directory. They reflect the apparent interrupt and scheduling latency
++        and are best suitable to determine the worst-case latency of a given
++        system. To enable these histograms, write a non-zero number to
++
++            /sys/kernel/debug/tracing/latency_hist/enable/timerandwakeup
++
+ config ENABLE_DEFAULT_TRACERS
+       bool "Trace process context switches and events"
+       depends on !GENERIC_TRACER
+--- a/kernel/trace/Makefile
++++ b/kernel/trace/Makefile
+@@ -38,6 +38,10 @@ obj-$(CONFIG_IRQSOFF_TRACER) += trace_ir
+ obj-$(CONFIG_PREEMPT_TRACER) += trace_irqsoff.o
+ obj-$(CONFIG_SCHED_TRACER) += trace_sched_wakeup.o
+ obj-$(CONFIG_HWLAT_TRACER) += trace_hwlat.o
++obj-$(CONFIG_INTERRUPT_OFF_HIST) += latency_hist.o
++obj-$(CONFIG_PREEMPT_OFF_HIST) += latency_hist.o
++obj-$(CONFIG_WAKEUP_LATENCY_HIST) += latency_hist.o
++obj-$(CONFIG_MISSED_TIMER_OFFSETS_HIST) += latency_hist.o
+ obj-$(CONFIG_NOP_TRACER) += trace_nop.o
+ obj-$(CONFIG_STACK_TRACER) += trace_stack.o
+ obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o
+--- /dev/null
++++ b/kernel/trace/latency_hist.c
+@@ -0,0 +1,1178 @@
++/*
++ * kernel/trace/latency_hist.c
++ *
++ * Add support for histograms of preemption-off latency and
++ * interrupt-off latency and wakeup latency, it depends on
++ * Real-Time Preemption Support.
++ *
++ *  Copyright (C) 2005 MontaVista Software, Inc.
++ *  Yi Yang <yyang@ch.mvista.com>
++ *
++ *  Converted to work with the new latency tracer.
++ *  Copyright (C) 2008 Red Hat, Inc.
++ *    Steven Rostedt <srostedt@redhat.com>
++ *
++ */
++#include <linux/module.h>
++#include <linux/debugfs.h>
++#include <linux/seq_file.h>
++#include <linux/percpu.h>
++#include <linux/kallsyms.h>
++#include <linux/uaccess.h>
++#include <linux/sched.h>
++#include <linux/sched/rt.h>
++#include <linux/slab.h>
++#include <linux/atomic.h>
++#include <asm/div64.h>
++
++#include "trace.h"
++#include <trace/events/sched.h>
++
++#define NSECS_PER_USECS 1000L
++
++#define CREATE_TRACE_POINTS
++#include <trace/events/hist.h>
++
++enum {
++      IRQSOFF_LATENCY = 0,
++      PREEMPTOFF_LATENCY,
++      PREEMPTIRQSOFF_LATENCY,
++      WAKEUP_LATENCY,
++      WAKEUP_LATENCY_SHAREDPRIO,
++      MISSED_TIMER_OFFSETS,
++      TIMERANDWAKEUP_LATENCY,
++      MAX_LATENCY_TYPE,
++};
++
++#define MAX_ENTRY_NUM 10240
++
++struct hist_data {
++      atomic_t hist_mode; /* 0 log, 1 don't log */
++      long offset; /* set it to MAX_ENTRY_NUM/2 for a bipolar scale */
++      long min_lat;
++      long max_lat;
++      unsigned long long below_hist_bound_samples;
++      unsigned long long above_hist_bound_samples;
++      long long accumulate_lat;
++      unsigned long long total_samples;
++      unsigned long long hist_array[MAX_ENTRY_NUM];
++};
++
++struct enable_data {
++      int latency_type;
++      int enabled;
++};
++
++static char *latency_hist_dir_root = "latency_hist";
++
++#ifdef CONFIG_INTERRUPT_OFF_HIST
++static DEFINE_PER_CPU(struct hist_data, irqsoff_hist);
++static char *irqsoff_hist_dir = "irqsoff";
++static DEFINE_PER_CPU(cycles_t, hist_irqsoff_start);
++static DEFINE_PER_CPU(int, hist_irqsoff_counting);
++#endif
++
++#ifdef CONFIG_PREEMPT_OFF_HIST
++static DEFINE_PER_CPU(struct hist_data, preemptoff_hist);
++static char *preemptoff_hist_dir = "preemptoff";
++static DEFINE_PER_CPU(cycles_t, hist_preemptoff_start);
++static DEFINE_PER_CPU(int, hist_preemptoff_counting);
++#endif
++
++#if defined(CONFIG_PREEMPT_OFF_HIST) && defined(CONFIG_INTERRUPT_OFF_HIST)
++static DEFINE_PER_CPU(struct hist_data, preemptirqsoff_hist);
++static char *preemptirqsoff_hist_dir = "preemptirqsoff";
++static DEFINE_PER_CPU(cycles_t, hist_preemptirqsoff_start);
++static DEFINE_PER_CPU(int, hist_preemptirqsoff_counting);
++#endif
++
++#if defined(CONFIG_PREEMPT_OFF_HIST) || defined(CONFIG_INTERRUPT_OFF_HIST)
++static notrace void probe_preemptirqsoff_hist(void *v, int reason, int start);
++static struct enable_data preemptirqsoff_enabled_data = {
++      .latency_type = PREEMPTIRQSOFF_LATENCY,
++      .enabled = 0,
++};
++#endif
++
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++struct maxlatproc_data {
++      char comm[FIELD_SIZEOF(struct task_struct, comm)];
++      char current_comm[FIELD_SIZEOF(struct task_struct, comm)];
++      int pid;
++      int current_pid;
++      int prio;
++      int current_prio;
++      long latency;
++      long timeroffset;
++      cycle_t timestamp;
++};
++#endif
++
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++static DEFINE_PER_CPU(struct hist_data, wakeup_latency_hist);
++static DEFINE_PER_CPU(struct hist_data, wakeup_latency_hist_sharedprio);
++static char *wakeup_latency_hist_dir = "wakeup";
++static char *wakeup_latency_hist_dir_sharedprio = "sharedprio";
++static notrace void probe_wakeup_latency_hist_start(void *v,
++      struct task_struct *p, int success);
++static notrace void probe_wakeup_latency_hist_stop(void *v,
++      struct task_struct *prev, struct task_struct *next);
++static notrace void probe_sched_migrate_task(void *,
++      struct task_struct *task, int cpu);
++static struct enable_data wakeup_latency_enabled_data = {
++      .latency_type = WAKEUP_LATENCY,
++      .enabled = 0,
++};
++static DEFINE_PER_CPU(struct maxlatproc_data, wakeup_maxlatproc);
++static DEFINE_PER_CPU(struct maxlatproc_data, wakeup_maxlatproc_sharedprio);
++static DEFINE_PER_CPU(struct task_struct *, wakeup_task);
++static DEFINE_PER_CPU(int, wakeup_sharedprio);
++static unsigned long wakeup_pid;
++#endif
++
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++static DEFINE_PER_CPU(struct hist_data, missed_timer_offsets);
++static char *missed_timer_offsets_dir = "missed_timer_offsets";
++static notrace void probe_hrtimer_interrupt(void *v, int cpu,
++      long long offset, struct task_struct *curr, struct task_struct *task);
++static struct enable_data missed_timer_offsets_enabled_data = {
++      .latency_type = MISSED_TIMER_OFFSETS,
++      .enabled = 0,
++};
++static DEFINE_PER_CPU(struct maxlatproc_data, missed_timer_offsets_maxlatproc);
++static unsigned long missed_timer_offsets_pid;
++#endif
++
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) && \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++static DEFINE_PER_CPU(struct hist_data, timerandwakeup_latency_hist);
++static char *timerandwakeup_latency_hist_dir = "timerandwakeup";
++static struct enable_data timerandwakeup_enabled_data = {
++      .latency_type = TIMERANDWAKEUP_LATENCY,
++      .enabled = 0,
++};
++static DEFINE_PER_CPU(struct maxlatproc_data, timerandwakeup_maxlatproc);
++#endif
++
++void notrace latency_hist(int latency_type, int cpu, long latency,
++                        long timeroffset, cycle_t stop,
++                        struct task_struct *p)
++{
++      struct hist_data *my_hist;
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++      struct maxlatproc_data *mp = NULL;
++#endif
++
++      if (!cpu_possible(cpu) || latency_type < 0 ||
++          latency_type >= MAX_LATENCY_TYPE)
++              return;
++
++      switch (latency_type) {
++#ifdef CONFIG_INTERRUPT_OFF_HIST
++      case IRQSOFF_LATENCY:
++              my_hist = &per_cpu(irqsoff_hist, cpu);
++              break;
++#endif
++#ifdef CONFIG_PREEMPT_OFF_HIST
++      case PREEMPTOFF_LATENCY:
++              my_hist = &per_cpu(preemptoff_hist, cpu);
++              break;
++#endif
++#if defined(CONFIG_PREEMPT_OFF_HIST) && defined(CONFIG_INTERRUPT_OFF_HIST)
++      case PREEMPTIRQSOFF_LATENCY:
++              my_hist = &per_cpu(preemptirqsoff_hist, cpu);
++              break;
++#endif
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++      case WAKEUP_LATENCY:
++              my_hist = &per_cpu(wakeup_latency_hist, cpu);
++              mp = &per_cpu(wakeup_maxlatproc, cpu);
++              break;
++      case WAKEUP_LATENCY_SHAREDPRIO:
++              my_hist = &per_cpu(wakeup_latency_hist_sharedprio, cpu);
++              mp = &per_cpu(wakeup_maxlatproc_sharedprio, cpu);
++              break;
++#endif
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++      case MISSED_TIMER_OFFSETS:
++              my_hist = &per_cpu(missed_timer_offsets, cpu);
++              mp = &per_cpu(missed_timer_offsets_maxlatproc, cpu);
++              break;
++#endif
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) && \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++      case TIMERANDWAKEUP_LATENCY:
++              my_hist = &per_cpu(timerandwakeup_latency_hist, cpu);
++              mp = &per_cpu(timerandwakeup_maxlatproc, cpu);
++              break;
++#endif
++
++      default:
++              return;
++      }
++
++      latency += my_hist->offset;
++
++      if (atomic_read(&my_hist->hist_mode) == 0)
++              return;
++
++      if (latency < 0 || latency >= MAX_ENTRY_NUM) {
++              if (latency < 0)
++                      my_hist->below_hist_bound_samples++;
++              else
++                      my_hist->above_hist_bound_samples++;
++      } else
++              my_hist->hist_array[latency]++;
++
++      if (unlikely(latency > my_hist->max_lat ||
++          my_hist->min_lat == LONG_MAX)) {
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++              if (latency_type == WAKEUP_LATENCY ||
++                  latency_type == WAKEUP_LATENCY_SHAREDPRIO ||
++                  latency_type == MISSED_TIMER_OFFSETS ||
++                  latency_type == TIMERANDWAKEUP_LATENCY) {
++                      strncpy(mp->comm, p->comm, sizeof(mp->comm));
++                      strncpy(mp->current_comm, current->comm,
++                          sizeof(mp->current_comm));
++                      mp->pid = task_pid_nr(p);
++                      mp->current_pid = task_pid_nr(current);
++                      mp->prio = p->prio;
++                      mp->current_prio = current->prio;
++                      mp->latency = latency;
++                      mp->timeroffset = timeroffset;
++                      mp->timestamp = stop;
++              }
++#endif
++              my_hist->max_lat = latency;
++      }
++      if (unlikely(latency < my_hist->min_lat))
++              my_hist->min_lat = latency;
++      my_hist->total_samples++;
++      my_hist->accumulate_lat += latency;
++}
++
++static void *l_start(struct seq_file *m, loff_t *pos)
++{
++      loff_t *index_ptr = NULL;
++      loff_t index = *pos;
++      struct hist_data *my_hist = m->private;
++
++      if (index == 0) {
++              char minstr[32], avgstr[32], maxstr[32];
++
++              atomic_dec(&my_hist->hist_mode);
++
++              if (likely(my_hist->total_samples)) {
++                      long avg = (long) div64_s64(my_hist->accumulate_lat,
++                          my_hist->total_samples);
++                      snprintf(minstr, sizeof(minstr), "%ld",
++                          my_hist->min_lat - my_hist->offset);
++                      snprintf(avgstr, sizeof(avgstr), "%ld",
++                          avg - my_hist->offset);
++                      snprintf(maxstr, sizeof(maxstr), "%ld",
++                          my_hist->max_lat - my_hist->offset);
++              } else {
++                      strcpy(minstr, "<undef>");
++                      strcpy(avgstr, minstr);
++                      strcpy(maxstr, minstr);
++              }
++
++              seq_printf(m, "#Minimum latency: %s microseconds\n"
++                         "#Average latency: %s microseconds\n"
++                         "#Maximum latency: %s microseconds\n"
++                         "#Total samples: %llu\n"
++                         "#There are %llu samples lower than %ld"
++                         " microseconds.\n"
++                         "#There are %llu samples greater or equal"
++                         " than %ld microseconds.\n"
++                         "#usecs\t%16s\n",
++                         minstr, avgstr, maxstr,
++                         my_hist->total_samples,
++                         my_hist->below_hist_bound_samples,
++                         -my_hist->offset,
++                         my_hist->above_hist_bound_samples,
++                         MAX_ENTRY_NUM - my_hist->offset,
++                         "samples");
++      }
++      if (index < MAX_ENTRY_NUM) {
++              index_ptr = kmalloc(sizeof(loff_t), GFP_KERNEL);
++              if (index_ptr)
++                      *index_ptr = index;
++      }
++
++      return index_ptr;
++}
++
++static void *l_next(struct seq_file *m, void *p, loff_t *pos)
++{
++      loff_t *index_ptr = p;
++      struct hist_data *my_hist = m->private;
++
++      if (++*pos >= MAX_ENTRY_NUM) {
++              atomic_inc(&my_hist->hist_mode);
++              return NULL;
++      }
++      *index_ptr = *pos;
++      return index_ptr;
++}
++
++static void l_stop(struct seq_file *m, void *p)
++{
++      kfree(p);
++}
++
++static int l_show(struct seq_file *m, void *p)
++{
++      int index = *(loff_t *) p;
++      struct hist_data *my_hist = m->private;
++
++      seq_printf(m, "%6ld\t%16llu\n", index - my_hist->offset,
++          my_hist->hist_array[index]);
++      return 0;
++}
++
++static const struct seq_operations latency_hist_seq_op = {
++      .start = l_start,
++      .next  = l_next,
++      .stop  = l_stop,
++      .show  = l_show
++};
++
++static int latency_hist_open(struct inode *inode, struct file *file)
++{
++      int ret;
++
++      ret = seq_open(file, &latency_hist_seq_op);
++      if (!ret) {
++              struct seq_file *seq = file->private_data;
++              seq->private = inode->i_private;
++      }
++      return ret;
++}
++
++static const struct file_operations latency_hist_fops = {
++      .open = latency_hist_open,
++      .read = seq_read,
++      .llseek = seq_lseek,
++      .release = seq_release,
++};
++
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++static void clear_maxlatprocdata(struct maxlatproc_data *mp)
++{
++      mp->comm[0] = mp->current_comm[0] = '\0';
++      mp->prio = mp->current_prio = mp->pid = mp->current_pid =
++          mp->latency = mp->timeroffset = -1;
++      mp->timestamp = 0;
++}
++#endif
++
++static void hist_reset(struct hist_data *hist)
++{
++      atomic_dec(&hist->hist_mode);
++
++      memset(hist->hist_array, 0, sizeof(hist->hist_array));
++      hist->below_hist_bound_samples = 0ULL;
++      hist->above_hist_bound_samples = 0ULL;
++      hist->min_lat = LONG_MAX;
++      hist->max_lat = LONG_MIN;
++      hist->total_samples = 0ULL;
++      hist->accumulate_lat = 0LL;
++
++      atomic_inc(&hist->hist_mode);
++}
++
++static ssize_t
++latency_hist_reset(struct file *file, const char __user *a,
++                 size_t size, loff_t *off)
++{
++      int cpu;
++      struct hist_data *hist = NULL;
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++      struct maxlatproc_data *mp = NULL;
++#endif
++      off_t latency_type = (off_t) file->private_data;
++
++      for_each_online_cpu(cpu) {
++
++              switch (latency_type) {
++#ifdef CONFIG_PREEMPT_OFF_HIST
++              case PREEMPTOFF_LATENCY:
++                      hist = &per_cpu(preemptoff_hist, cpu);
++                      break;
++#endif
++#ifdef CONFIG_INTERRUPT_OFF_HIST
++              case IRQSOFF_LATENCY:
++                      hist = &per_cpu(irqsoff_hist, cpu);
++                      break;
++#endif
++#if defined(CONFIG_INTERRUPT_OFF_HIST) && defined(CONFIG_PREEMPT_OFF_HIST)
++              case PREEMPTIRQSOFF_LATENCY:
++                      hist = &per_cpu(preemptirqsoff_hist, cpu);
++                      break;
++#endif
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++              case WAKEUP_LATENCY:
++                      hist = &per_cpu(wakeup_latency_hist, cpu);
++                      mp = &per_cpu(wakeup_maxlatproc, cpu);
++                      break;
++              case WAKEUP_LATENCY_SHAREDPRIO:
++                      hist = &per_cpu(wakeup_latency_hist_sharedprio, cpu);
++                      mp = &per_cpu(wakeup_maxlatproc_sharedprio, cpu);
++                      break;
++#endif
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++              case MISSED_TIMER_OFFSETS:
++                      hist = &per_cpu(missed_timer_offsets, cpu);
++                      mp = &per_cpu(missed_timer_offsets_maxlatproc, cpu);
++                      break;
++#endif
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) && \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++              case TIMERANDWAKEUP_LATENCY:
++                      hist = &per_cpu(timerandwakeup_latency_hist, cpu);
++                      mp = &per_cpu(timerandwakeup_maxlatproc, cpu);
++                      break;
++#endif
++              }
++
++              hist_reset(hist);
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++              if (latency_type == WAKEUP_LATENCY ||
++                  latency_type == WAKEUP_LATENCY_SHAREDPRIO ||
++                  latency_type == MISSED_TIMER_OFFSETS ||
++                  latency_type == TIMERANDWAKEUP_LATENCY)
++                      clear_maxlatprocdata(mp);
++#endif
++      }
++
++      return size;
++}
++
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++static ssize_t
++show_pid(struct file *file, char __user *ubuf, size_t cnt, loff_t *ppos)
++{
++      char buf[64];
++      int r;
++      unsigned long *this_pid = file->private_data;
++
++      r = snprintf(buf, sizeof(buf), "%lu\n", *this_pid);
++      return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
++}
++
++static ssize_t do_pid(struct file *file, const char __user *ubuf,
++                    size_t cnt, loff_t *ppos)
++{
++      char buf[64];
++      unsigned long pid;
++      unsigned long *this_pid = file->private_data;
++
++      if (cnt >= sizeof(buf))
++              return -EINVAL;
++
++      if (copy_from_user(&buf, ubuf, cnt))
++              return -EFAULT;
++
++      buf[cnt] = '\0';
++
++      if (kstrtoul(buf, 10, &pid))
++              return -EINVAL;
++
++      *this_pid = pid;
++
++      return cnt;
++}
++#endif
++
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++static ssize_t
++show_maxlatproc(struct file *file, char __user *ubuf, size_t cnt, loff_t *ppos)
++{
++      int r;
++      struct maxlatproc_data *mp = file->private_data;
++      int strmaxlen = (TASK_COMM_LEN * 2) + (8 * 8);
++      unsigned long long t;
++      unsigned long usecs, secs;
++      char *buf;
++
++      if (mp->pid == -1 || mp->current_pid == -1) {
++              buf = "(none)\n";
++              return simple_read_from_buffer(ubuf, cnt, ppos, buf,
++                  strlen(buf));
++      }
++
++      buf = kmalloc(strmaxlen, GFP_KERNEL);
++      if (buf == NULL)
++              return -ENOMEM;
++
++      t = ns2usecs(mp->timestamp);
++      usecs = do_div(t, USEC_PER_SEC);
++      secs = (unsigned long) t;
++      r = snprintf(buf, strmaxlen,
++          "%d %d %ld (%ld) %s <- %d %d %s %lu.%06lu\n", mp->pid,
++          MAX_RT_PRIO-1 - mp->prio, mp->latency, mp->timeroffset, mp->comm,
++          mp->current_pid, MAX_RT_PRIO-1 - mp->current_prio, mp->current_comm,
++          secs, usecs);
++      r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
++      kfree(buf);
++      return r;
++}
++#endif
++
++static ssize_t
++show_enable(struct file *file, char __user *ubuf, size_t cnt, loff_t *ppos)
++{
++      char buf[64];
++      struct enable_data *ed = file->private_data;
++      int r;
++
++      r = snprintf(buf, sizeof(buf), "%d\n", ed->enabled);
++      return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
++}
++
++static ssize_t
++do_enable(struct file *file, const char __user *ubuf, size_t cnt, loff_t *ppos)
++{
++      char buf[64];
++      long enable;
++      struct enable_data *ed = file->private_data;
++
++      if (cnt >= sizeof(buf))
++              return -EINVAL;
++
++      if (copy_from_user(&buf, ubuf, cnt))
++              return -EFAULT;
++
++      buf[cnt] = 0;
++
++      if (kstrtoul(buf, 10, &enable))
++              return -EINVAL;
++
++      if ((enable && ed->enabled) || (!enable && !ed->enabled))
++              return cnt;
++
++      if (enable) {
++              int ret;
++
++              switch (ed->latency_type) {
++#if defined(CONFIG_INTERRUPT_OFF_HIST) || defined(CONFIG_PREEMPT_OFF_HIST)
++              case PREEMPTIRQSOFF_LATENCY:
++                      ret = register_trace_preemptirqsoff_hist(
++                          probe_preemptirqsoff_hist, NULL);
++                      if (ret) {
++                              pr_info("wakeup trace: Couldn't assign "
++                                  "probe_preemptirqsoff_hist "
++                                  "to trace_preemptirqsoff_hist\n");
++                              return ret;
++                      }
++                      break;
++#endif
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++              case WAKEUP_LATENCY:
++                      ret = register_trace_sched_wakeup(
++                          probe_wakeup_latency_hist_start, NULL);
++                      if (ret) {
++                              pr_info("wakeup trace: Couldn't assign "
++                                  "probe_wakeup_latency_hist_start "
++                                  "to trace_sched_wakeup\n");
++                              return ret;
++                      }
++                      ret = register_trace_sched_wakeup_new(
++                          probe_wakeup_latency_hist_start, NULL);
++                      if (ret) {
++                              pr_info("wakeup trace: Couldn't assign "
++                                  "probe_wakeup_latency_hist_start "
++                                  "to trace_sched_wakeup_new\n");
++                              unregister_trace_sched_wakeup(
++                                  probe_wakeup_latency_hist_start, NULL);
++                              return ret;
++                      }
++                      ret = register_trace_sched_switch(
++                          probe_wakeup_latency_hist_stop, NULL);
++                      if (ret) {
++                              pr_info("wakeup trace: Couldn't assign "
++                                  "probe_wakeup_latency_hist_stop "
++                                  "to trace_sched_switch\n");
++                              unregister_trace_sched_wakeup(
++                                  probe_wakeup_latency_hist_start, NULL);
++                              unregister_trace_sched_wakeup_new(
++                                  probe_wakeup_latency_hist_start, NULL);
++                              return ret;
++                      }
++                      ret = register_trace_sched_migrate_task(
++                          probe_sched_migrate_task, NULL);
++                      if (ret) {
++                              pr_info("wakeup trace: Couldn't assign "
++                                  "probe_sched_migrate_task "
++                                  "to trace_sched_migrate_task\n");
++                              unregister_trace_sched_wakeup(
++                                  probe_wakeup_latency_hist_start, NULL);
++                              unregister_trace_sched_wakeup_new(
++                                  probe_wakeup_latency_hist_start, NULL);
++                              unregister_trace_sched_switch(
++                                  probe_wakeup_latency_hist_stop, NULL);
++                              return ret;
++                      }
++                      break;
++#endif
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++              case MISSED_TIMER_OFFSETS:
++                      ret = register_trace_hrtimer_interrupt(
++                          probe_hrtimer_interrupt, NULL);
++                      if (ret) {
++                              pr_info("wakeup trace: Couldn't assign "
++                                  "probe_hrtimer_interrupt "
++                                  "to trace_hrtimer_interrupt\n");
++                              return ret;
++                      }
++                      break;
++#endif
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) && \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++              case TIMERANDWAKEUP_LATENCY:
++                      if (!wakeup_latency_enabled_data.enabled ||
++                          !missed_timer_offsets_enabled_data.enabled)
++                              return -EINVAL;
++                      break;
++#endif
++              default:
++                      break;
++              }
++      } else {
++              switch (ed->latency_type) {
++#if defined(CONFIG_INTERRUPT_OFF_HIST) || defined(CONFIG_PREEMPT_OFF_HIST)
++              case PREEMPTIRQSOFF_LATENCY:
++                      {
++                              int cpu;
++
++                              unregister_trace_preemptirqsoff_hist(
++                                  probe_preemptirqsoff_hist, NULL);
++                              for_each_online_cpu(cpu) {
++#ifdef CONFIG_INTERRUPT_OFF_HIST
++                                      per_cpu(hist_irqsoff_counting,
++                                          cpu) = 0;
++#endif
++#ifdef CONFIG_PREEMPT_OFF_HIST
++                                      per_cpu(hist_preemptoff_counting,
++                                          cpu) = 0;
++#endif
++#if defined(CONFIG_INTERRUPT_OFF_HIST) && defined(CONFIG_PREEMPT_OFF_HIST)
++                                      per_cpu(hist_preemptirqsoff_counting,
++                                          cpu) = 0;
++#endif
++                              }
++                      }
++                      break;
++#endif
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++              case WAKEUP_LATENCY:
++                      {
++                              int cpu;
++
++                              unregister_trace_sched_wakeup(
++                                  probe_wakeup_latency_hist_start, NULL);
++                              unregister_trace_sched_wakeup_new(
++                                  probe_wakeup_latency_hist_start, NULL);
++                              unregister_trace_sched_switch(
++                                  probe_wakeup_latency_hist_stop, NULL);
++                              unregister_trace_sched_migrate_task(
++                                  probe_sched_migrate_task, NULL);
++
++                              for_each_online_cpu(cpu) {
++                                      per_cpu(wakeup_task, cpu) = NULL;
++                                      per_cpu(wakeup_sharedprio, cpu) = 0;
++                              }
++                      }
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++                      timerandwakeup_enabled_data.enabled = 0;
++#endif
++                      break;
++#endif
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++              case MISSED_TIMER_OFFSETS:
++                      unregister_trace_hrtimer_interrupt(
++                          probe_hrtimer_interrupt, NULL);
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++                      timerandwakeup_enabled_data.enabled = 0;
++#endif
++                      break;
++#endif
++              default:
++                      break;
++              }
++      }
++      ed->enabled = enable;
++      return cnt;
++}
++
++static const struct file_operations latency_hist_reset_fops = {
++      .open = tracing_open_generic,
++      .write = latency_hist_reset,
++};
++
++static const struct file_operations enable_fops = {
++      .open = tracing_open_generic,
++      .read = show_enable,
++      .write = do_enable,
++};
++
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++static const struct file_operations pid_fops = {
++      .open = tracing_open_generic,
++      .read = show_pid,
++      .write = do_pid,
++};
++
++static const struct file_operations maxlatproc_fops = {
++      .open = tracing_open_generic,
++      .read = show_maxlatproc,
++};
++#endif
++
++#if defined(CONFIG_INTERRUPT_OFF_HIST) || defined(CONFIG_PREEMPT_OFF_HIST)
++static notrace void probe_preemptirqsoff_hist(void *v, int reason,
++      int starthist)
++{
++      int cpu = raw_smp_processor_id();
++      int time_set = 0;
++
++      if (starthist) {
++              cycle_t uninitialized_var(start);
++
++              if (!preempt_count() && !irqs_disabled())
++                      return;
++
++#ifdef CONFIG_INTERRUPT_OFF_HIST
++              if ((reason == IRQS_OFF || reason == TRACE_START) &&
++                  !per_cpu(hist_irqsoff_counting, cpu)) {
++                      per_cpu(hist_irqsoff_counting, cpu) = 1;
++                      start = ftrace_now(cpu);
++                      time_set++;
++                      per_cpu(hist_irqsoff_start, cpu) = start;
++              }
++#endif
++
++#ifdef CONFIG_PREEMPT_OFF_HIST
++              if ((reason == PREEMPT_OFF || reason == TRACE_START) &&
++                  !per_cpu(hist_preemptoff_counting, cpu)) {
++                      per_cpu(hist_preemptoff_counting, cpu) = 1;
++                      if (!(time_set++))
++                              start = ftrace_now(cpu);
++                      per_cpu(hist_preemptoff_start, cpu) = start;
++              }
++#endif
++
++#if defined(CONFIG_INTERRUPT_OFF_HIST) && defined(CONFIG_PREEMPT_OFF_HIST)
++              if (per_cpu(hist_irqsoff_counting, cpu) &&
++                  per_cpu(hist_preemptoff_counting, cpu) &&
++                  !per_cpu(hist_preemptirqsoff_counting, cpu)) {
++                      per_cpu(hist_preemptirqsoff_counting, cpu) = 1;
++                      if (!time_set)
++                              start = ftrace_now(cpu);
++                      per_cpu(hist_preemptirqsoff_start, cpu) = start;
++              }
++#endif
++      } else {
++              cycle_t uninitialized_var(stop);
++
++#ifdef CONFIG_INTERRUPT_OFF_HIST
++              if ((reason == IRQS_ON || reason == TRACE_STOP) &&
++                  per_cpu(hist_irqsoff_counting, cpu)) {
++                      cycle_t start = per_cpu(hist_irqsoff_start, cpu);
++
++                      stop = ftrace_now(cpu);
++                      time_set++;
++                      if (start) {
++                              long latency = ((long) (stop - start)) /
++                                  NSECS_PER_USECS;
++
++                              latency_hist(IRQSOFF_LATENCY, cpu, latency, 0,
++                                  stop, NULL);
++                      }
++                      per_cpu(hist_irqsoff_counting, cpu) = 0;
++              }
++#endif
++
++#ifdef CONFIG_PREEMPT_OFF_HIST
++              if ((reason == PREEMPT_ON || reason == TRACE_STOP) &&
++                  per_cpu(hist_preemptoff_counting, cpu)) {
++                      cycle_t start = per_cpu(hist_preemptoff_start, cpu);
++
++                      if (!(time_set++))
++                              stop = ftrace_now(cpu);
++                      if (start) {
++                              long latency = ((long) (stop - start)) /
++                                  NSECS_PER_USECS;
++
++                              latency_hist(PREEMPTOFF_LATENCY, cpu, latency,
++                                  0, stop, NULL);
++                      }
++                      per_cpu(hist_preemptoff_counting, cpu) = 0;
++              }
++#endif
++
++#if defined(CONFIG_INTERRUPT_OFF_HIST) && defined(CONFIG_PREEMPT_OFF_HIST)
++              if ((!per_cpu(hist_irqsoff_counting, cpu) ||
++                   !per_cpu(hist_preemptoff_counting, cpu)) &&
++                 per_cpu(hist_preemptirqsoff_counting, cpu)) {
++                      cycle_t start = per_cpu(hist_preemptirqsoff_start, cpu);
++
++                      if (!time_set)
++                              stop = ftrace_now(cpu);
++                      if (start) {
++                              long latency = ((long) (stop - start)) /
++                                  NSECS_PER_USECS;
++
++                              latency_hist(PREEMPTIRQSOFF_LATENCY, cpu,
++                                  latency, 0, stop, NULL);
++                      }
++                      per_cpu(hist_preemptirqsoff_counting, cpu) = 0;
++              }
++#endif
++      }
++}
++#endif
++
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++static DEFINE_RAW_SPINLOCK(wakeup_lock);
++static notrace void probe_sched_migrate_task(void *v, struct task_struct *task,
++      int cpu)
++{
++      int old_cpu = task_cpu(task);
++
++      if (cpu != old_cpu) {
++              unsigned long flags;
++              struct task_struct *cpu_wakeup_task;
++
++              raw_spin_lock_irqsave(&wakeup_lock, flags);
++
++              cpu_wakeup_task = per_cpu(wakeup_task, old_cpu);
++              if (task == cpu_wakeup_task) {
++                      put_task_struct(cpu_wakeup_task);
++                      per_cpu(wakeup_task, old_cpu) = NULL;
++                      cpu_wakeup_task = per_cpu(wakeup_task, cpu) = task;
++                      get_task_struct(cpu_wakeup_task);
++              }
++
++              raw_spin_unlock_irqrestore(&wakeup_lock, flags);
++      }
++}
++
++static notrace void probe_wakeup_latency_hist_start(void *v,
++      struct task_struct *p, int success)
++{
++      unsigned long flags;
++      struct task_struct *curr = current;
++      int cpu = task_cpu(p);
++      struct task_struct *cpu_wakeup_task;
++
++      raw_spin_lock_irqsave(&wakeup_lock, flags);
++
++      cpu_wakeup_task = per_cpu(wakeup_task, cpu);
++
++      if (wakeup_pid) {
++              if ((cpu_wakeup_task && p->prio == cpu_wakeup_task->prio) ||
++                  p->prio == curr->prio)
++                      per_cpu(wakeup_sharedprio, cpu) = 1;
++              if (likely(wakeup_pid != task_pid_nr(p)))
++                      goto out;
++      } else {
++              if (likely(!rt_task(p)) ||
++                  (cpu_wakeup_task && p->prio > cpu_wakeup_task->prio) ||
++                  p->prio > curr->prio)
++                      goto out;
++              if ((cpu_wakeup_task && p->prio == cpu_wakeup_task->prio) ||
++                  p->prio == curr->prio)
++                      per_cpu(wakeup_sharedprio, cpu) = 1;
++      }
++
++      if (cpu_wakeup_task)
++              put_task_struct(cpu_wakeup_task);
++      cpu_wakeup_task = per_cpu(wakeup_task, cpu) = p;
++      get_task_struct(cpu_wakeup_task);
++      cpu_wakeup_task->preempt_timestamp_hist =
++              ftrace_now(raw_smp_processor_id());
++out:
++      raw_spin_unlock_irqrestore(&wakeup_lock, flags);
++}
++
++static notrace void probe_wakeup_latency_hist_stop(void *v,
++      struct task_struct *prev, struct task_struct *next)
++{
++      unsigned long flags;
++      int cpu = task_cpu(next);
++      long latency;
++      cycle_t stop;
++      struct task_struct *cpu_wakeup_task;
++
++      raw_spin_lock_irqsave(&wakeup_lock, flags);
++
++      cpu_wakeup_task = per_cpu(wakeup_task, cpu);
++
++      if (cpu_wakeup_task == NULL)
++              goto out;
++
++      /* Already running? */
++      if (unlikely(current == cpu_wakeup_task))
++              goto out_reset;
++
++      if (next != cpu_wakeup_task) {
++              if (next->prio < cpu_wakeup_task->prio)
++                      goto out_reset;
++
++              if (next->prio == cpu_wakeup_task->prio)
++                      per_cpu(wakeup_sharedprio, cpu) = 1;
++
++              goto out;
++      }
++
++      if (current->prio == cpu_wakeup_task->prio)
++              per_cpu(wakeup_sharedprio, cpu) = 1;
++
++      /*
++       * The task we are waiting for is about to be switched to.
++       * Calculate latency and store it in histogram.
++       */
++      stop = ftrace_now(raw_smp_processor_id());
++
++      latency = ((long) (stop - next->preempt_timestamp_hist)) /
++          NSECS_PER_USECS;
++
++      if (per_cpu(wakeup_sharedprio, cpu)) {
++              latency_hist(WAKEUP_LATENCY_SHAREDPRIO, cpu, latency, 0, stop,
++                  next);
++              per_cpu(wakeup_sharedprio, cpu) = 0;
++      } else {
++              latency_hist(WAKEUP_LATENCY, cpu, latency, 0, stop, next);
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++              if (timerandwakeup_enabled_data.enabled) {
++                      latency_hist(TIMERANDWAKEUP_LATENCY, cpu,
++                          next->timer_offset + latency, next->timer_offset,
++                          stop, next);
++              }
++#endif
++      }
++
++out_reset:
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++      next->timer_offset = 0;
++#endif
++      put_task_struct(cpu_wakeup_task);
++      per_cpu(wakeup_task, cpu) = NULL;
++out:
++      raw_spin_unlock_irqrestore(&wakeup_lock, flags);
++}
++#endif
++
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++static notrace void probe_hrtimer_interrupt(void *v, int cpu,
++      long long latency_ns, struct task_struct *curr,
++      struct task_struct *task)
++{
++      if (latency_ns <= 0 && task != NULL && rt_task(task) &&
++          (task->prio < curr->prio ||
++          (task->prio == curr->prio &&
++          !cpumask_test_cpu(cpu, &task->cpus_allowed)))) {
++              long latency;
++              cycle_t now;
++
++              if (missed_timer_offsets_pid) {
++                      if (likely(missed_timer_offsets_pid !=
++                          task_pid_nr(task)))
++                              return;
++              }
++
++              now = ftrace_now(cpu);
++              latency = (long) div_s64(-latency_ns, NSECS_PER_USECS);
++              latency_hist(MISSED_TIMER_OFFSETS, cpu, latency, latency, now,
++                  task);
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++              task->timer_offset = latency;
++#endif
++      }
++}
++#endif
++
++static __init int latency_hist_init(void)
++{
++      struct dentry *latency_hist_root = NULL;
++      struct dentry *dentry;
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++      struct dentry *dentry_sharedprio;
++#endif
++      struct dentry *entry;
++      struct dentry *enable_root;
++      int i = 0;
++      struct hist_data *my_hist;
++      char name[64];
++      char *cpufmt = "CPU%d";
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++      char *cpufmt_maxlatproc = "max_latency-CPU%d";
++      struct maxlatproc_data *mp = NULL;
++#endif
++
++      dentry = tracing_init_dentry();
++      latency_hist_root = debugfs_create_dir(latency_hist_dir_root, dentry);
++      enable_root = debugfs_create_dir("enable", latency_hist_root);
++
++#ifdef CONFIG_INTERRUPT_OFF_HIST
++      dentry = debugfs_create_dir(irqsoff_hist_dir, latency_hist_root);
++      for_each_possible_cpu(i) {
++              sprintf(name, cpufmt, i);
++              entry = debugfs_create_file(name, 0444, dentry,
++                  &per_cpu(irqsoff_hist, i), &latency_hist_fops);
++              my_hist = &per_cpu(irqsoff_hist, i);
++              atomic_set(&my_hist->hist_mode, 1);
++              my_hist->min_lat = LONG_MAX;
++      }
++      entry = debugfs_create_file("reset", 0644, dentry,
++          (void *)IRQSOFF_LATENCY, &latency_hist_reset_fops);
++#endif
++
++#ifdef CONFIG_PREEMPT_OFF_HIST
++      dentry = debugfs_create_dir(preemptoff_hist_dir,
++          latency_hist_root);
++      for_each_possible_cpu(i) {
++              sprintf(name, cpufmt, i);
++              entry = debugfs_create_file(name, 0444, dentry,
++                  &per_cpu(preemptoff_hist, i), &latency_hist_fops);
++              my_hist = &per_cpu(preemptoff_hist, i);
++              atomic_set(&my_hist->hist_mode, 1);
++              my_hist->min_lat = LONG_MAX;
++      }
++      entry = debugfs_create_file("reset", 0644, dentry,
++          (void *)PREEMPTOFF_LATENCY, &latency_hist_reset_fops);
++#endif
++
++#if defined(CONFIG_INTERRUPT_OFF_HIST) && defined(CONFIG_PREEMPT_OFF_HIST)
++      dentry = debugfs_create_dir(preemptirqsoff_hist_dir,
++          latency_hist_root);
++      for_each_possible_cpu(i) {
++              sprintf(name, cpufmt, i);
++              entry = debugfs_create_file(name, 0444, dentry,
++                  &per_cpu(preemptirqsoff_hist, i), &latency_hist_fops);
++              my_hist = &per_cpu(preemptirqsoff_hist, i);
++              atomic_set(&my_hist->hist_mode, 1);
++              my_hist->min_lat = LONG_MAX;
++      }
++      entry = debugfs_create_file("reset", 0644, dentry,
++          (void *)PREEMPTIRQSOFF_LATENCY, &latency_hist_reset_fops);
++#endif
++
++#if defined(CONFIG_INTERRUPT_OFF_HIST) || defined(CONFIG_PREEMPT_OFF_HIST)
++      entry = debugfs_create_file("preemptirqsoff", 0644,
++          enable_root, (void *)&preemptirqsoff_enabled_data,
++          &enable_fops);
++#endif
++
++#ifdef CONFIG_WAKEUP_LATENCY_HIST
++      dentry = debugfs_create_dir(wakeup_latency_hist_dir,
++          latency_hist_root);
++      dentry_sharedprio = debugfs_create_dir(
++          wakeup_latency_hist_dir_sharedprio, dentry);
++      for_each_possible_cpu(i) {
++              sprintf(name, cpufmt, i);
++
++              entry = debugfs_create_file(name, 0444, dentry,
++                  &per_cpu(wakeup_latency_hist, i),
++                  &latency_hist_fops);
++              my_hist = &per_cpu(wakeup_latency_hist, i);
++              atomic_set(&my_hist->hist_mode, 1);
++              my_hist->min_lat = LONG_MAX;
++
++              entry = debugfs_create_file(name, 0444, dentry_sharedprio,
++                  &per_cpu(wakeup_latency_hist_sharedprio, i),
++                  &latency_hist_fops);
++              my_hist = &per_cpu(wakeup_latency_hist_sharedprio, i);
++              atomic_set(&my_hist->hist_mode, 1);
++              my_hist->min_lat = LONG_MAX;
++
++              sprintf(name, cpufmt_maxlatproc, i);
++
++              mp = &per_cpu(wakeup_maxlatproc, i);
++              entry = debugfs_create_file(name, 0444, dentry, mp,
++                  &maxlatproc_fops);
++              clear_maxlatprocdata(mp);
++
++              mp = &per_cpu(wakeup_maxlatproc_sharedprio, i);
++              entry = debugfs_create_file(name, 0444, dentry_sharedprio, mp,
++                  &maxlatproc_fops);
++              clear_maxlatprocdata(mp);
++      }
++      entry = debugfs_create_file("pid", 0644, dentry,
++          (void *)&wakeup_pid, &pid_fops);
++      entry = debugfs_create_file("reset", 0644, dentry,
++          (void *)WAKEUP_LATENCY, &latency_hist_reset_fops);
++      entry = debugfs_create_file("reset", 0644, dentry_sharedprio,
++          (void *)WAKEUP_LATENCY_SHAREDPRIO, &latency_hist_reset_fops);
++      entry = debugfs_create_file("wakeup", 0644,
++          enable_root, (void *)&wakeup_latency_enabled_data,
++          &enable_fops);
++#endif
++
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++      dentry = debugfs_create_dir(missed_timer_offsets_dir,
++          latency_hist_root);
++      for_each_possible_cpu(i) {
++              sprintf(name, cpufmt, i);
++              entry = debugfs_create_file(name, 0444, dentry,
++                  &per_cpu(missed_timer_offsets, i), &latency_hist_fops);
++              my_hist = &per_cpu(missed_timer_offsets, i);
++              atomic_set(&my_hist->hist_mode, 1);
++              my_hist->min_lat = LONG_MAX;
++
++              sprintf(name, cpufmt_maxlatproc, i);
++              mp = &per_cpu(missed_timer_offsets_maxlatproc, i);
++              entry = debugfs_create_file(name, 0444, dentry, mp,
++                  &maxlatproc_fops);
++              clear_maxlatprocdata(mp);
++      }
++      entry = debugfs_create_file("pid", 0644, dentry,
++          (void *)&missed_timer_offsets_pid, &pid_fops);
++      entry = debugfs_create_file("reset", 0644, dentry,
++          (void *)MISSED_TIMER_OFFSETS, &latency_hist_reset_fops);
++      entry = debugfs_create_file("missed_timer_offsets", 0644,
++          enable_root, (void *)&missed_timer_offsets_enabled_data,
++          &enable_fops);
++#endif
++
++#if defined(CONFIG_WAKEUP_LATENCY_HIST) && \
++      defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
++      dentry = debugfs_create_dir(timerandwakeup_latency_hist_dir,
++          latency_hist_root);
++      for_each_possible_cpu(i) {
++              sprintf(name, cpufmt, i);
++              entry = debugfs_create_file(name, 0444, dentry,
++                  &per_cpu(timerandwakeup_latency_hist, i),
++                  &latency_hist_fops);
++              my_hist = &per_cpu(timerandwakeup_latency_hist, i);
++              atomic_set(&my_hist->hist_mode, 1);
++              my_hist->min_lat = LONG_MAX;
++
++              sprintf(name, cpufmt_maxlatproc, i);
++              mp = &per_cpu(timerandwakeup_maxlatproc, i);
++              entry = debugfs_create_file(name, 0444, dentry, mp,
++                  &maxlatproc_fops);
++              clear_maxlatprocdata(mp);
++      }
++      entry = debugfs_create_file("reset", 0644, dentry,
++          (void *)TIMERANDWAKEUP_LATENCY, &latency_hist_reset_fops);
++      entry = debugfs_create_file("timerandwakeup", 0644,
++          enable_root, (void *)&timerandwakeup_enabled_data,
++          &enable_fops);
++#endif
++      return 0;
++}
++
++device_initcall(latency_hist_init);
+--- a/kernel/trace/trace_irqsoff.c
++++ b/kernel/trace/trace_irqsoff.c
+@@ -13,6 +13,7 @@
+ #include <linux/uaccess.h>
+ #include <linux/module.h>
+ #include <linux/ftrace.h>
++#include <trace/events/hist.h>
+ #include "trace.h"
+@@ -424,11 +425,13 @@ void start_critical_timings(void)
+ {
+       if (preempt_trace() || irq_trace())
+               start_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
++      trace_preemptirqsoff_hist(TRACE_START, 1);
+ }
+ EXPORT_SYMBOL_GPL(start_critical_timings);
+ void stop_critical_timings(void)
+ {
++      trace_preemptirqsoff_hist(TRACE_STOP, 0);
+       if (preempt_trace() || irq_trace())
+               stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
+ }
+@@ -438,6 +441,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings)
+ #ifdef CONFIG_PROVE_LOCKING
+ void time_hardirqs_on(unsigned long a0, unsigned long a1)
+ {
++      trace_preemptirqsoff_hist(IRQS_ON, 0);
+       if (!preempt_trace() && irq_trace())
+               stop_critical_timing(a0, a1);
+ }
+@@ -446,6 +450,7 @@ void time_hardirqs_off(unsigned long a0,
+ {
+       if (!preempt_trace() && irq_trace())
+               start_critical_timing(a0, a1);
++      trace_preemptirqsoff_hist(IRQS_OFF, 1);
+ }
+ #else /* !CONFIG_PROVE_LOCKING */
+@@ -471,6 +476,7 @@ inline void print_irqtrace_events(struct
+  */
+ void trace_hardirqs_on(void)
+ {
++      trace_preemptirqsoff_hist(IRQS_ON, 0);
+       if (!preempt_trace() && irq_trace())
+               stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
+ }
+@@ -480,11 +486,13 @@ void trace_hardirqs_off(void)
+ {
+       if (!preempt_trace() && irq_trace())
+               start_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
++      trace_preemptirqsoff_hist(IRQS_OFF, 1);
+ }
+ EXPORT_SYMBOL(trace_hardirqs_off);
+ __visible void trace_hardirqs_on_caller(unsigned long caller_addr)
+ {
++      trace_preemptirqsoff_hist(IRQS_ON, 0);
+       if (!preempt_trace() && irq_trace())
+               stop_critical_timing(CALLER_ADDR0, caller_addr);
+ }
+@@ -494,6 +502,7 @@ EXPORT_SYMBOL(trace_hardirqs_on_caller);
+ {
+       if (!preempt_trace() && irq_trace())
+               start_critical_timing(CALLER_ADDR0, caller_addr);
++      trace_preemptirqsoff_hist(IRQS_OFF, 1);
+ }
+ EXPORT_SYMBOL(trace_hardirqs_off_caller);
+@@ -503,12 +512,14 @@ EXPORT_SYMBOL(trace_hardirqs_off_caller)
+ #ifdef CONFIG_PREEMPT_TRACER
+ void trace_preempt_on(unsigned long a0, unsigned long a1)
+ {
++      trace_preemptirqsoff_hist(PREEMPT_ON, 0);
+       if (preempt_trace() && !irq_trace())
+               stop_critical_timing(a0, a1);
+ }
+ void trace_preempt_off(unsigned long a0, unsigned long a1)
+ {
++      trace_preemptirqsoff_hist(PREEMPT_ON, 1);
+       if (preempt_trace() && !irq_trace())
+               start_critical_timing(a0, a1);
+ }
diff --git a/patches/features/all/rt/latency_hist-update-sched_wakeup-probe.patch b/patches/features/all/rt/latency_hist-update-sched_wakeup-probe.patch
new file mode 100644 (file)
index 0000000..3d3f799
--- /dev/null
@@ -0,0 +1,41 @@
+Subject: latency_hist: Update sched_wakeup probe
+From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+Date: Sun, 25 Oct 2015 18:06:05 -0400
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+"sched: Introduce the 'trace_sched_waking' tracepoint" introduces a
+prototype change for the sched_wakeup probe: the "success" argument is
+removed. Update the latency_hist probe following this change.
+
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: Julien Desfossez <jdesfossez@efficios.com>
+Cc: Francis Giraldeau <francis.giraldeau@gmail.com>
+Cc: Mike Galbraith <efault@gmx.de>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Link: http://lkml.kernel.org/r/1445810765-18732-1-git-send-email-mathieu.desnoyers@efficios.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/trace/latency_hist.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/trace/latency_hist.c
++++ b/kernel/trace/latency_hist.c
+@@ -115,7 +115,7 @@ static DEFINE_PER_CPU(struct hist_data,
+ static char *wakeup_latency_hist_dir = "wakeup";
+ static char *wakeup_latency_hist_dir_sharedprio = "sharedprio";
+ static notrace void probe_wakeup_latency_hist_start(void *v,
+-      struct task_struct *p, int success);
++      struct task_struct *p);
+ static notrace void probe_wakeup_latency_hist_stop(void *v,
+       struct task_struct *prev, struct task_struct *next);
+ static notrace void probe_sched_migrate_task(void *,
+@@ -869,7 +869,7 @@ static notrace void probe_sched_migrate_
+ }
+ static notrace void probe_wakeup_latency_hist_start(void *v,
+-      struct task_struct *p, int success)
++      struct task_struct *p)
+ {
+       unsigned long flags;
+       struct task_struct *curr = current;
diff --git a/patches/features/all/rt/latencyhist-disable-jump-labels.patch b/patches/features/all/rt/latencyhist-disable-jump-labels.patch
new file mode 100644 (file)
index 0000000..fb62d2b
--- /dev/null
@@ -0,0 +1,62 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 4 Feb 2016 14:08:06 +0100
+Subject: latencyhist: disable jump-labels
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Atleast on X86 we die a recursive death
+
+|CPU: 3 PID: 585 Comm: bash Not tainted 4.4.1-rt4+ #198
+|Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS Debian-1.8.2-1 04/01/2014
+|task: ffff88007ab4cd00 ti: ffff88007ab94000 task.ti: ffff88007ab94000
+|RIP: 0010:[<ffffffff81684870>]  [<ffffffff81684870>] int3+0x0/0x10
+|RSP: 0018:ffff88013c107fd8  EFLAGS: 00010082
+|RAX: ffff88007ab4cd00 RBX: ffffffff8100ceab RCX: 0000000080202001
+|RDX: 0000000000000000 RSI: ffffffff8100ceab RDI: ffffffff810c78b2
+|RBP: ffff88007ab97c10 R08: ffffffffff57b000 R09: 0000000000000000
+|R10: ffff88013bb64790 R11: ffff88007ab4cd68 R12: ffffffff8100ceab
+|R13: ffffffff810c78b2 R14: ffffffff810f8158 R15: ffffffff810f9120
+|FS:  0000000000000000(0000) GS:ffff88013c100000(0063) knlGS:00000000f74e3940
+|CS:  0010 DS: 002b ES: 002b CR0: 000000008005003b
+|CR2: 0000000008cf6008 CR3: 000000013b169000 CR4: 00000000000006e0
+|Call Trace:
+| <#DB>
+| [<ffffffff810f8158>] ? trace_preempt_off+0x18/0x170
+| <<EOE>>
+| [<ffffffff81077745>] preempt_count_add+0xa5/0xc0
+| [<ffffffff810c78b2>] on_each_cpu+0x22/0x90
+| [<ffffffff8100ceab>] text_poke_bp+0x5b/0xc0
+| [<ffffffff8100a29c>] arch_jump_label_transform+0x8c/0xf0
+| [<ffffffff8111c77c>] __jump_label_update+0x6c/0x80
+| [<ffffffff8111c83a>] jump_label_update+0xaa/0xc0
+| [<ffffffff8111ca54>] static_key_slow_inc+0x94/0xa0
+| [<ffffffff810e0d8d>] tracepoint_probe_register_prio+0x26d/0x2c0
+| [<ffffffff810e0df3>] tracepoint_probe_register+0x13/0x20
+| [<ffffffff810fca78>] trace_event_reg+0x98/0xd0
+| [<ffffffff810fcc8b>] __ftrace_event_enable_disable+0x6b/0x180
+| [<ffffffff810fd5b8>] event_enable_write+0x78/0xc0
+| [<ffffffff8117a768>] __vfs_write+0x28/0xe0
+| [<ffffffff8117b025>] vfs_write+0xa5/0x180
+| [<ffffffff8117bb76>] SyS_write+0x46/0xa0
+| [<ffffffff81002c91>] do_fast_syscall_32+0xa1/0x1d0
+| [<ffffffff81684d57>] sysenter_flags_fixed+0xd/0x17
+
+during
+ echo 1 > /sys/kernel/debug/tracing/events/hist/preemptirqsoff_hist/enable
+
+Reported-By: Christoph Mathys <eraserix@gmail.com>
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/Kconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/Kconfig
++++ b/arch/Kconfig
+@@ -52,6 +52,7 @@ config KPROBES
+ config JUMP_LABEL
+        bool "Optimize very unlikely/likely branches"
+        depends on HAVE_ARCH_JUMP_LABEL
++       depends on (!INTERRUPT_OFF_HIST && !PREEMPT_OFF_HIST && !WAKEUP_LATENCY_HIST && !MISSED_TIMER_OFFSETS_HIST)
+        help
+          This option enables a transparent branch optimization that
+        makes certain almost-always-true or almost-always-false branch
diff --git a/patches/features/all/rt/leds-trigger-disable-CPU-trigger-on-RT.patch b/patches/features/all/rt/leds-trigger-disable-CPU-trigger-on-RT.patch
new file mode 100644 (file)
index 0000000..33b5647
--- /dev/null
@@ -0,0 +1,36 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 23 Jan 2014 14:45:59 +0100
+Subject: leds: trigger: disable CPU trigger on -RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+as it triggers:
+|CPU: 0 PID: 0 Comm: swapper Not tainted 3.12.8-rt10 #141
+|[<c0014aa4>] (unwind_backtrace+0x0/0xf8) from [<c0012788>] (show_stack+0x1c/0x20)
+|[<c0012788>] (show_stack+0x1c/0x20) from [<c043c8dc>] (dump_stack+0x20/0x2c)
+|[<c043c8dc>] (dump_stack+0x20/0x2c) from [<c004c5e8>] (__might_sleep+0x13c/0x170)
+|[<c004c5e8>] (__might_sleep+0x13c/0x170) from [<c043f270>] (__rt_spin_lock+0x28/0x38)
+|[<c043f270>] (__rt_spin_lock+0x28/0x38) from [<c043fa00>] (rt_read_lock+0x68/0x7c)
+|[<c043fa00>] (rt_read_lock+0x68/0x7c) from [<c036cf74>] (led_trigger_event+0x2c/0x5c)
+|[<c036cf74>] (led_trigger_event+0x2c/0x5c) from [<c036e0bc>] (ledtrig_cpu+0x54/0x5c)
+|[<c036e0bc>] (ledtrig_cpu+0x54/0x5c) from [<c000ffd8>] (arch_cpu_idle_exit+0x18/0x1c)
+|[<c000ffd8>] (arch_cpu_idle_exit+0x18/0x1c) from [<c00590b8>] (cpu_startup_entry+0xa8/0x234)
+|[<c00590b8>] (cpu_startup_entry+0xa8/0x234) from [<c043b2cc>] (rest_init+0xb8/0xe0)
+|[<c043b2cc>] (rest_init+0xb8/0xe0) from [<c061ebe0>] (start_kernel+0x2c4/0x380)
+
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/leds/trigger/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/leds/trigger/Kconfig
++++ b/drivers/leds/trigger/Kconfig
+@@ -69,7 +69,7 @@ config LEDS_TRIGGER_BACKLIGHT
+ config LEDS_TRIGGER_CPU
+       bool "LED CPU Trigger"
+-      depends on LEDS_TRIGGERS
++      depends on LEDS_TRIGGERS && !PREEMPT_RT_BASE
+       help
+         This allows LEDs to be controlled by active CPUs. This shows
+         the active CPUs across an array of LEDs so you can see which
diff --git a/patches/features/all/rt/list_bl-fixup-bogus-lockdep-warning.patch b/patches/features/all/rt/list_bl-fixup-bogus-lockdep-warning.patch
new file mode 100644 (file)
index 0000000..8ce7dfa
--- /dev/null
@@ -0,0 +1,98 @@
+From: Josh Cartwright <joshc@ni.com>
+Date: Thu, 31 Mar 2016 00:04:25 -0500
+Subject: [PATCH] list_bl: fixup bogus lockdep warning
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+At first glance, the use of 'static inline' seems appropriate for
+INIT_HLIST_BL_HEAD().
+
+However, when a 'static inline' function invocation is inlined by gcc,
+all callers share any static local data declared within that inline
+function.
+
+This presents a problem for how lockdep classes are setup.  raw_spinlocks, for
+example, when CONFIG_DEBUG_SPINLOCK,
+
+       # define raw_spin_lock_init(lock)                               \
+       do {                                                            \
+               static struct lock_class_key __key;                     \
+                                                                       \
+               __raw_spin_lock_init((lock), #lock, &__key);            \
+       } while (0)
+
+When this macro is expanded into a 'static inline' caller, like
+INIT_HLIST_BL_HEAD():
+
+       static inline INIT_HLIST_BL_HEAD(struct hlist_bl_head *h)
+       {
+               h->first = NULL;
+               raw_spin_lock_init(&h->lock);
+       }
+
+...the static local lock_class_key object is made a function static.
+
+For compilation units which initialize invoke INIT_HLIST_BL_HEAD() more
+than once, then, all of the invocations share this same static local
+object.
+
+This can lead to some very confusing lockdep splats (example below).
+Solve this problem by forcing the INIT_HLIST_BL_HEAD() to be a macro,
+which prevents the lockdep class object sharing.
+
+ =============================================
+ [ INFO: possible recursive locking detected ]
+ 4.4.4-rt11 #4 Not tainted
+ ---------------------------------------------
+ kswapd0/59 is trying to acquire lock:
+  (&h->lock#2){+.+.-.}, at: mb_cache_shrink_scan
+
+ but task is already holding lock:
+  (&h->lock#2){+.+.-.}, at:  mb_cache_shrink_scan
+
+ other info that might help us debug this:
+  Possible unsafe locking scenario:
+
+        CPU0
+        ----
+   lock(&h->lock#2);
+   lock(&h->lock#2);
+
+  *** DEADLOCK ***
+
+  May be due to missing lock nesting notation
+
+ 2 locks held by kswapd0/59:
+  #0:  (shrinker_rwsem){+.+...}, at: rt_down_read_trylock
+  #1:  (&h->lock#2){+.+.-.}, at: mb_cache_shrink_scan
+
+Reported-by: Luis Claudio R. Goncalves <lclaudio@uudg.org>
+Tested-by: Luis Claudio R. Goncalves <lclaudio@uudg.org>
+Signed-off-by: Josh Cartwright <joshc@ni.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/list_bl.h |   12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- a/include/linux/list_bl.h
++++ b/include/linux/list_bl.h
+@@ -42,13 +42,15 @@ struct hlist_bl_node {
+       struct hlist_bl_node *next, **pprev;
+ };
+-static inline void INIT_HLIST_BL_HEAD(struct hlist_bl_head *h)
+-{
+-      h->first = NULL;
+ #ifdef CONFIG_PREEMPT_RT_BASE
+-      raw_spin_lock_init(&h->lock);
++#define INIT_HLIST_BL_HEAD(h)         \
++do {                                  \
++      (h)->first = NULL;              \
++      raw_spin_lock_init(&(h)->lock); \
++} while (0)
++#else
++#define INIT_HLIST_BL_HEAD(h) (h)->first = NULL
+ #endif
+-}
+ static inline void INIT_HLIST_BL_NODE(struct hlist_bl_node *h)
+ {
diff --git a/patches/features/all/rt/list_bl.h-make-list-head-locking-RT-safe.patch b/patches/features/all/rt/list_bl.h-make-list-head-locking-RT-safe.patch
new file mode 100644 (file)
index 0000000..077d1a3
--- /dev/null
@@ -0,0 +1,115 @@
+From: Paul Gortmaker <paul.gortmaker@windriver.com>
+Date: Fri, 21 Jun 2013 15:07:25 -0400
+Subject: list_bl: Make list head locking RT safe
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+As per changes in include/linux/jbd_common.h for avoiding the
+bit_spin_locks on RT ("fs: jbd/jbd2: Make state lock and journal
+head lock rt safe") we do the same thing here.
+
+We use the non atomic __set_bit and __clear_bit inside the scope of
+the lock to preserve the ability of the existing LIST_DEBUG code to
+use the zero'th bit in the sanity checks.
+
+As a bit spinlock, we had no lockdep visibility into the usage
+of the list head locking.  Now, if we were to implement it as a
+standard non-raw spinlock, we would see:
+
+BUG: sleeping function called from invalid context at kernel/rtmutex.c:658
+in_atomic(): 1, irqs_disabled(): 0, pid: 122, name: udevd
+5 locks held by udevd/122:
+ #0:  (&sb->s_type->i_mutex_key#7/1){+.+.+.}, at: [<ffffffff811967e8>] lock_rename+0xe8/0xf0
+ #1:  (rename_lock){+.+...}, at: [<ffffffff811a277c>] d_move+0x2c/0x60
+ #2:  (&dentry->d_lock){+.+...}, at: [<ffffffff811a0763>] dentry_lock_for_move+0xf3/0x130
+ #3:  (&dentry->d_lock/2){+.+...}, at: [<ffffffff811a0734>] dentry_lock_for_move+0xc4/0x130
+ #4:  (&dentry->d_lock/3){+.+...}, at: [<ffffffff811a0747>] dentry_lock_for_move+0xd7/0x130
+Pid: 122, comm: udevd Not tainted 3.4.47-rt62 #7
+Call Trace:
+ [<ffffffff810b9624>] __might_sleep+0x134/0x1f0
+ [<ffffffff817a24d4>] rt_spin_lock+0x24/0x60
+ [<ffffffff811a0c4c>] __d_shrink+0x5c/0xa0
+ [<ffffffff811a1b2d>] __d_drop+0x1d/0x40
+ [<ffffffff811a24be>] __d_move+0x8e/0x320
+ [<ffffffff811a278e>] d_move+0x3e/0x60
+ [<ffffffff81199598>] vfs_rename+0x198/0x4c0
+ [<ffffffff8119b093>] sys_renameat+0x213/0x240
+ [<ffffffff817a2de5>] ? _raw_spin_unlock+0x35/0x60
+ [<ffffffff8107781c>] ? do_page_fault+0x1ec/0x4b0
+ [<ffffffff817a32ca>] ? retint_swapgs+0xe/0x13
+ [<ffffffff813eb0e6>] ? trace_hardirqs_on_thunk+0x3a/0x3f
+ [<ffffffff8119b0db>] sys_rename+0x1b/0x20
+ [<ffffffff817a3b96>] system_call_fastpath+0x1a/0x1f
+
+Since we are only taking the lock during short lived list operations,
+lets assume for now that it being raw won't be a significant latency
+concern.
+
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/list_bl.h |   28 ++++++++++++++++++++++++++--
+ 1 file changed, 26 insertions(+), 2 deletions(-)
+
+--- a/include/linux/list_bl.h
++++ b/include/linux/list_bl.h
+@@ -2,6 +2,7 @@
+ #define _LINUX_LIST_BL_H
+ #include <linux/list.h>
++#include <linux/spinlock.h>
+ #include <linux/bit_spinlock.h>
+ /*
+@@ -32,13 +33,22 @@
+ struct hlist_bl_head {
+       struct hlist_bl_node *first;
++#ifdef CONFIG_PREEMPT_RT_BASE
++      raw_spinlock_t lock;
++#endif
+ };
+ struct hlist_bl_node {
+       struct hlist_bl_node *next, **pprev;
+ };
+-#define INIT_HLIST_BL_HEAD(ptr) \
+-      ((ptr)->first = NULL)
++
++static inline void INIT_HLIST_BL_HEAD(struct hlist_bl_head *h)
++{
++      h->first = NULL;
++#ifdef CONFIG_PREEMPT_RT_BASE
++      raw_spin_lock_init(&h->lock);
++#endif
++}
+ static inline void INIT_HLIST_BL_NODE(struct hlist_bl_node *h)
+ {
+@@ -118,12 +128,26 @@ static inline void hlist_bl_del_init(str
+ static inline void hlist_bl_lock(struct hlist_bl_head *b)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       bit_spin_lock(0, (unsigned long *)b);
++#else
++      raw_spin_lock(&b->lock);
++#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
++      __set_bit(0, (unsigned long *)b);
++#endif
++#endif
+ }
+ static inline void hlist_bl_unlock(struct hlist_bl_head *b)
+ {
++#ifndef CONFIG_PREEMPT_RT_BASE
+       __bit_spin_unlock(0, (unsigned long *)b);
++#else
++#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
++      __clear_bit(0, (unsigned long *)b);
++#endif
++      raw_spin_unlock(&b->lock);
++#endif
+ }
+ static inline bool hlist_bl_is_locked(struct hlist_bl_head *b)
diff --git a/patches/features/all/rt/local-irq-rt-depending-variants.patch b/patches/features/all/rt/local-irq-rt-depending-variants.patch
new file mode 100644 (file)
index 0000000..07fa123
--- /dev/null
@@ -0,0 +1,53 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 21 Jul 2009 22:34:14 +0200
+Subject: rt: local_irq_* variants depending on RT/!RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Add local_irq_*_(no)rt variant which are mainly used to break
+interrupt disabled sections on PREEMPT_RT or to explicitely disable
+interrupts on PREEMPT_RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/interrupt.h |    2 +-
+ include/linux/irqflags.h  |   19 +++++++++++++++++++
+ 2 files changed, 20 insertions(+), 1 deletion(-)
+
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -196,7 +196,7 @@ extern void devm_free_irq(struct device
+ #ifdef CONFIG_LOCKDEP
+ # define local_irq_enable_in_hardirq()        do { } while (0)
+ #else
+-# define local_irq_enable_in_hardirq()        local_irq_enable()
++# define local_irq_enable_in_hardirq()        local_irq_enable_nort()
+ #endif
+ extern void disable_irq_nosync(unsigned int irq);
+--- a/include/linux/irqflags.h
++++ b/include/linux/irqflags.h
+@@ -148,4 +148,23 @@
+ #define irqs_disabled_flags(flags) raw_irqs_disabled_flags(flags)
++/*
++ * local_irq* variants depending on RT/!RT
++ */
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define local_irq_disable_nort()     do { } while (0)
++# define local_irq_enable_nort()      do { } while (0)
++# define local_irq_save_nort(flags)   local_save_flags(flags)
++# define local_irq_restore_nort(flags)        (void)(flags)
++# define local_irq_disable_rt()               local_irq_disable()
++# define local_irq_enable_rt()                local_irq_enable()
++#else
++# define local_irq_disable_nort()     local_irq_disable()
++# define local_irq_enable_nort()      local_irq_enable()
++# define local_irq_save_nort(flags)   local_irq_save(flags)
++# define local_irq_restore_nort(flags)        local_irq_restore(flags)
++# define local_irq_disable_rt()               do { } while (0)
++# define local_irq_enable_rt()                do { } while (0)
++#endif
++
+ #endif
diff --git a/patches/features/all/rt/locallock-add-local_lock_on.patch b/patches/features/all/rt/locallock-add-local_lock_on.patch
new file mode 100644 (file)
index 0000000..0ac1fb0
--- /dev/null
@@ -0,0 +1,32 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 27 May 2016 15:11:51 +0200
+Subject: [PATCH] locallock: add local_lock_on()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/locallock.h |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/include/linux/locallock.h
++++ b/include/linux/locallock.h
+@@ -60,6 +60,9 @@ static inline void __local_lock(struct l
+ #define local_lock(lvar)                                      \
+       do { __local_lock(&get_local_var(lvar)); } while (0)
++#define local_lock_on(lvar, cpu)                              \
++      do { __local_lock(&per_cpu(lvar, cpu)); } while (0)
++
+ static inline int __local_trylock(struct local_irq_lock *lv)
+ {
+       if (lv->owner != current && spin_trylock_local(&lv->lock)) {
+@@ -98,6 +101,9 @@ static inline void __local_unlock(struct
+               put_local_var(lvar);                            \
+       } while (0)
++#define local_unlock_on(lvar, cpu)                       \
++      do { __local_unlock(&per_cpu(lvar, cpu)); } while (0)
++
+ static inline void __local_lock_irq(struct local_irq_lock *lv)
+ {
+       spin_lock_irqsave(&lv->lock, lv->flags);
diff --git a/patches/features/all/rt/localversion.patch b/patches/features/all/rt/localversion.patch
new file mode 100644 (file)
index 0000000..b961f8c
--- /dev/null
@@ -0,0 +1,14 @@
+Subject: Add localversion for -RT release
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 08 Jul 2011 20:25:16 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ localversion-rt |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- /dev/null
++++ b/localversion-rt
+@@ -0,0 +1 @@
++-rt16
diff --git a/patches/features/all/rt/lockdep-Fix-compilation-error-for-CONFIG_MODULES-and.patch b/patches/features/all/rt/lockdep-Fix-compilation-error-for-CONFIG_MODULES-and.patch
new file mode 100644 (file)
index 0000000..840eb65
--- /dev/null
@@ -0,0 +1,56 @@
+From: Dan Murphy <dmurphy@ti.com>
+Date: Fri, 24 Feb 2017 08:41:49 -0600
+Subject: [PATCH] lockdep: Fix compilation error for !CONFIG_MODULES and
+ !CONFIG_SMP
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When CONFIG_MODULES is not set then it fails to compile in lockdep:
+
+|kernel/locking/lockdep.c: In function 'look_up_lock_class':
+|kernel/locking/lockdep.c:684:12: error: implicit declaration of function
+| '__is_module_percpu_address' [-Werror=implicit-function-declaration]
+
+If CONFIG_MODULES is set but CONFIG_SMP is not, then it compiles but
+fails link at the end:
+
+|kernel/locking/lockdep.c:684: undefined reference to `__is_module_percpu_address'
+|kernel/built-in.o:(.debug_addr+0x1e674): undefined reference to `__is_module_percpu_address'
+
+This patch adds the function for both cases.
+
+Signed-off-by: Dan Murphy <dmurphy@ti.com>
+[bigeasy: merge the two patches from Dan into one, adapt changelog]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/module.h |    5 +++++
+ kernel/module.c        |    5 +++++
+ 2 files changed, 10 insertions(+)
+
+--- a/include/linux/module.h
++++ b/include/linux/module.h
+@@ -664,6 +664,11 @@ static inline bool is_module_percpu_addr
+       return false;
+ }
++static inline bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr)
++{
++      return false;
++}
++
+ static inline bool is_module_text_address(unsigned long addr)
+ {
+       return false;
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -734,6 +734,11 @@ bool is_module_percpu_address(unsigned l
+       return false;
+ }
++bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr)
++{
++      return false;
++}
++
+ #endif /* CONFIG_SMP */
+ #define MODINFO_ATTR(field)   \
diff --git a/patches/features/all/rt/lockdep-Fix-per-cpu-static-objects.patch b/patches/features/all/rt/lockdep-Fix-per-cpu-static-objects.patch
new file mode 100644 (file)
index 0000000..59c51ec
--- /dev/null
@@ -0,0 +1,125 @@
+From 8ce371f9846ef1e8b3cc8f6865766cb5c1f17e40 Mon Sep 17 00:00:00 2001
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Mon, 20 Mar 2017 12:26:55 +0100
+Subject: [PATCH] lockdep: Fix per-cpu static objects
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Since commit 383776fa7527 ("locking/lockdep: Handle statically initialized
+PER_CPU locks properly") we try to collapse per-cpu locks into a single
+class by giving them all the same key. For this key we choose the canonical
+address of the per-cpu object, which would be the offset into the per-cpu
+area.
+
+This has two problems:
+
+ - there is a case where we run !0 lock->key through static_obj() and
+   expect this to pass; it doesn't for canonical pointers.
+
+ - 0 is a valid canonical address.
+
+Cure both issues by redefining the canonical address as the address of the
+per-cpu variable on the boot CPU.
+
+Since I didn't want to rely on CPU0 being the boot-cpu, or even existing at
+all, track the boot CPU in a variable.
+
+Fixes: 383776fa7527 ("locking/lockdep: Handle statically initialized PER_CPU locks properly")
+Reported-by: kernel test robot <fengguang.wu@intel.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Tested-by: Borislav Petkov <bp@suse.de>
+Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Cc: linux-mm@kvack.org
+Cc: wfg@linux.intel.com
+Cc: kernel test robot <fengguang.wu@intel.com>
+Cc: LKP <lkp@01.org>
+Link: http://lkml.kernel.org/r/20170320114108.kbvcsuepem45j5cr@hirez.programming.kicks-ass.net
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/smp.h |   12 ++++++++++++
+ kernel/cpu.c        |    6 ++++++
+ kernel/module.c     |    6 +++++-
+ mm/percpu.c         |    5 ++++-
+ 4 files changed, 27 insertions(+), 2 deletions(-)
+
+--- a/include/linux/smp.h
++++ b/include/linux/smp.h
+@@ -120,6 +120,13 @@ extern unsigned int setup_max_cpus;
+ extern void __init setup_nr_cpu_ids(void);
+ extern void __init smp_init(void);
++extern int __boot_cpu_id;
++
++static inline int get_boot_cpu_id(void)
++{
++      return __boot_cpu_id;
++}
++
+ #else /* !SMP */
+ static inline void smp_send_stop(void) { }
+@@ -158,6 +165,11 @@ static inline void smp_init(void) { up_l
+ static inline void smp_init(void) { }
+ #endif
++static inline int get_boot_cpu_id(void)
++{
++      return 0;
++}
++
+ #endif /* !SMP */
+ /*
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -1240,6 +1240,8 @@ core_initcall(cpu_hotplug_pm_sync_init);
+ #endif /* CONFIG_PM_SLEEP_SMP */
++int __boot_cpu_id;
++
+ #endif /* CONFIG_SMP */
+ /* Boot processor state steps */
+@@ -1923,6 +1925,10 @@ void __init boot_cpu_init(void)
+       set_cpu_active(cpu, true);
+       set_cpu_present(cpu, true);
+       set_cpu_possible(cpu, true);
++
++#ifdef CONFIG_SMP
++      __boot_cpu_id = cpu;
++#endif
+ }
+ /*
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -677,8 +677,12 @@ bool __is_module_percpu_address(unsigned
+                       void *va = (void *)addr;
+                       if (va >= start && va < start + mod->percpu_size) {
+-                              if (can_addr)
++                              if (can_addr) {
+                                       *can_addr = (unsigned long) (va - start);
++                                      *can_addr += (unsigned long)
++                                              per_cpu_ptr(mod->percpu,
++                                                          get_boot_cpu_id());
++                              }
+                               preempt_enable();
+                               return true;
+                       }
+--- a/mm/percpu.c
++++ b/mm/percpu.c
+@@ -1295,8 +1295,11 @@ bool __is_kernel_percpu_address(unsigned
+               void *va = (void *)addr;
+               if (va >= start && va < start + static_size) {
+-                      if (can_addr)
++                      if (can_addr) {
+                               *can_addr = (unsigned long) (va - start);
++                              *can_addr += (unsigned long)
++                                      per_cpu_ptr(base, get_boot_cpu_id());
++                      }
+                       return true;
+               }
+       }
diff --git a/patches/features/all/rt/lockdep-Handle-statically-initialized-PER_CPU-locks-.patch b/patches/features/all/rt/lockdep-Handle-statically-initialized-PER_CPU-locks-.patch
new file mode 100644 (file)
index 0000000..971d5a4
--- /dev/null
@@ -0,0 +1,269 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 17 Feb 2017 19:44:39 +0100
+Subject: [PATCH] lockdep: Handle statically initialized PER_CPU locks proper
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+If a PER_CPU struct which contains a spin_lock is statically initialized
+via:
+
+DEFINE_PER_CPU(struct foo, bla) = {
+       .lock = __SPIN_LOCK_UNLOCKED(bla.lock)
+};
+
+then lockdep assigns a seperate key to each lock because the logic for
+assigning a key to statically initialized locks is to use the address as
+the key. With per CPU locks the address is obvioulsy different on each CPU.
+
+That's wrong, because all locks should have the same key.
+
+To solve this the following modifications are required:
+
+ 1) Extend the is_kernel/module_percpu_addr() functions to hand back the
+    canonical address of the per CPU address, i.e. the per CPU address
+    minus the per CPU offset.
+
+ 2) Check the lock address with these functions and if the per CPU check
+    matches use the returned canonical address as the lock key, so all per
+    CPU locks have the same key.
+
+ 3) Move the static_obj(key) check into look_up_lock_class() so this check
+    can be avoided for statically initialized per CPU locks.  That's
+    required because the canonical address fails the static_obj(key) check
+    for obvious reasons.
+
+Reported-by: Mike Galbraith <efault@gmx.de>
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/module.h   |    1 +
+ include/linux/percpu.h   |    1 +
+ kernel/locking/lockdep.c |   35 ++++++++++++++++++++++++-----------
+ kernel/module.c          |   31 +++++++++++++++++++------------
+ mm/percpu.c              |   37 +++++++++++++++++++++++--------------
+ 5 files changed, 68 insertions(+), 37 deletions(-)
+
+--- a/include/linux/module.h
++++ b/include/linux/module.h
+@@ -496,6 +496,7 @@ static inline int module_is_live(struct
+ struct module *__module_text_address(unsigned long addr);
+ struct module *__module_address(unsigned long addr);
+ bool is_module_address(unsigned long addr);
++bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr);
+ bool is_module_percpu_address(unsigned long addr);
+ bool is_module_text_address(unsigned long addr);
+--- a/include/linux/percpu.h
++++ b/include/linux/percpu.h
+@@ -110,6 +110,7 @@ extern int __init pcpu_page_first_chunk(
+ #endif
+ extern void __percpu *__alloc_reserved_percpu(size_t size, size_t align);
++extern bool __is_kernel_percpu_address(unsigned long addr, unsigned long *can_addr);
+ extern bool is_kernel_percpu_address(unsigned long addr);
+ #if !defined(CONFIG_SMP) || !defined(CONFIG_HAVE_SETUP_PER_CPU_AREA)
+--- a/kernel/locking/lockdep.c
++++ b/kernel/locking/lockdep.c
+@@ -658,6 +658,7 @@ look_up_lock_class(struct lockdep_map *l
+       struct lockdep_subclass_key *key;
+       struct hlist_head *hash_head;
+       struct lock_class *class;
++      bool is_static = false;
+       if (unlikely(subclass >= MAX_LOCKDEP_SUBCLASSES)) {
+               debug_locks_off();
+@@ -671,10 +672,23 @@ look_up_lock_class(struct lockdep_map *l
+       /*
+        * Static locks do not have their class-keys yet - for them the key
+-       * is the lock object itself:
+-       */
+-      if (unlikely(!lock->key))
+-              lock->key = (void *)lock;
++       * is the lock object itself. If the lock is in the per cpu area,
++       * the canonical address of the lock (per cpu offset removed) is
++       * used.
++       */
++      if (unlikely(!lock->key)) {
++              unsigned long can_addr, addr = (unsigned long)lock;
++
++              if (__is_kernel_percpu_address(addr, &can_addr))
++                      lock->key = (void *)can_addr;
++              else if (__is_module_percpu_address(addr, &can_addr))
++                      lock->key = (void *)can_addr;
++              else if (static_obj(lock))
++                      lock->key = (void *)lock;
++              else
++                      return ERR_PTR(-EINVAL);
++              is_static = true;
++      }
+       /*
+        * NOTE: the class-key must be unique. For dynamic locks, a static
+@@ -706,7 +720,7 @@ look_up_lock_class(struct lockdep_map *l
+               }
+       }
+-      return NULL;
++      return is_static || static_obj(lock->key) ? NULL : ERR_PTR(-EINVAL);
+ }
+ /*
+@@ -724,19 +738,18 @@ register_lock_class(struct lockdep_map *
+       DEBUG_LOCKS_WARN_ON(!irqs_disabled());
+       class = look_up_lock_class(lock, subclass);
+-      if (likely(class))
++      if (likely(!IS_ERR_OR_NULL(class)))
+               goto out_set_class_cache;
+       /*
+        * Debug-check: all keys must be persistent!
+-       */
+-      if (!static_obj(lock->key)) {
++       */
++      if (IS_ERR(class)) {
+               debug_locks_off();
+               printk("INFO: trying to register non-static key.\n");
+               printk("the code is fine but needs lockdep annotation.\n");
+               printk("turning off the locking correctness validator.\n");
+               dump_stack();
+-
+               return NULL;
+       }
+@@ -3410,7 +3423,7 @@ static int match_held_lock(struct held_l
+                * Clearly if the lock hasn't been acquired _ever_, we're not
+                * holding it either, so report failure.
+                */
+-              if (!class)
++              if (IS_ERR_OR_NULL(class))
+                       return 0;
+               /*
+@@ -4159,7 +4172,7 @@ void lockdep_reset_lock(struct lockdep_m
+                * If the class exists we look it up and zap it:
+                */
+               class = look_up_lock_class(lock, j);
+-              if (class)
++              if (!IS_ERR_OR_NULL(class))
+                       zap_class(class);
+       }
+       /*
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -660,16 +660,7 @@ static void percpu_modcopy(struct module
+               memcpy(per_cpu_ptr(mod->percpu, cpu), from, size);
+ }
+-/**
+- * is_module_percpu_address - test whether address is from module static percpu
+- * @addr: address to test
+- *
+- * Test whether @addr belongs to module static percpu area.
+- *
+- * RETURNS:
+- * %true if @addr is from module static percpu area
+- */
+-bool is_module_percpu_address(unsigned long addr)
++bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr)
+ {
+       struct module *mod;
+       unsigned int cpu;
+@@ -683,9 +674,11 @@ bool is_module_percpu_address(unsigned l
+                       continue;
+               for_each_possible_cpu(cpu) {
+                       void *start = per_cpu_ptr(mod->percpu, cpu);
++                      void *va = (void *)addr;
+-                      if ((void *)addr >= start &&
+-                          (void *)addr < start + mod->percpu_size) {
++                      if (va >= start && va < start + mod->percpu_size) {
++                              if (can_addr)
++                                      *can_addr = (unsigned long) (va - start);
+                               preempt_enable();
+                               return true;
+                       }
+@@ -696,6 +689,20 @@ bool is_module_percpu_address(unsigned l
+       return false;
+ }
++/**
++ * is_module_percpu_address - test whether address is from module static percpu
++ * @addr: address to test
++ *
++ * Test whether @addr belongs to module static percpu area.
++ *
++ * RETURNS:
++ * %true if @addr is from module static percpu area
++ */
++bool is_module_percpu_address(unsigned long addr)
++{
++      return __is_module_percpu_address(addr, NULL);
++}
++
+ #else /* ... !CONFIG_SMP */
+ static inline void __percpu *mod_percpu(struct module *mod)
+--- a/mm/percpu.c
++++ b/mm/percpu.c
+@@ -1283,18 +1283,7 @@ void free_percpu(void __percpu *ptr)
+ }
+ EXPORT_SYMBOL_GPL(free_percpu);
+-/**
+- * is_kernel_percpu_address - test whether address is from static percpu area
+- * @addr: address to test
+- *
+- * Test whether @addr belongs to in-kernel static percpu area.  Module
+- * static percpu areas are not considered.  For those, use
+- * is_module_percpu_address().
+- *
+- * RETURNS:
+- * %true if @addr is from in-kernel static percpu area, %false otherwise.
+- */
+-bool is_kernel_percpu_address(unsigned long addr)
++bool __is_kernel_percpu_address(unsigned long addr, unsigned long *can_addr)
+ {
+ #ifdef CONFIG_SMP
+       const size_t static_size = __per_cpu_end - __per_cpu_start;
+@@ -1303,16 +1292,36 @@ bool is_kernel_percpu_address(unsigned l
+       for_each_possible_cpu(cpu) {
+               void *start = per_cpu_ptr(base, cpu);
++              void *va = (void *)addr;
+-              if ((void *)addr >= start && (void *)addr < start + static_size)
++              if (va >= start && va < start + static_size) {
++                      if (can_addr)
++                              *can_addr = (unsigned long) (va - start);
+                       return true;
+-        }
++              }
++      }
+ #endif
+       /* on UP, can't distinguish from other static vars, always false */
+       return false;
+ }
+ /**
++ * is_kernel_percpu_address - test whether address is from static percpu area
++ * @addr: address to test
++ *
++ * Test whether @addr belongs to in-kernel static percpu area.  Module
++ * static percpu areas are not considered.  For those, use
++ * is_module_percpu_address().
++ *
++ * RETURNS:
++ * %true if @addr is from in-kernel static percpu area, %false otherwise.
++ */
++bool is_kernel_percpu_address(unsigned long addr)
++{
++      return __is_kernel_percpu_address(addr, NULL);
++}
++
++/**
+  * per_cpu_ptr_to_phys - convert translated percpu address to physical address
+  * @addr: the address to be converted to physical address
+  *
diff --git a/patches/features/all/rt/lockdep-no-softirq-accounting-on-rt.patch b/patches/features/all/rt/lockdep-no-softirq-accounting-on-rt.patch
new file mode 100644 (file)
index 0000000..c947026
--- /dev/null
@@ -0,0 +1,59 @@
+Subject: lockdep: Make it RT aware
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 17 Jul 2011 18:51:23 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+teach lockdep that we don't really do softirqs on -RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/irqflags.h |   10 +++++++---
+ kernel/locking/lockdep.c |    2 ++
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+--- a/include/linux/irqflags.h
++++ b/include/linux/irqflags.h
+@@ -25,8 +25,6 @@
+ # define trace_softirqs_enabled(p)    ((p)->softirqs_enabled)
+ # define trace_hardirq_enter()        do { current->hardirq_context++; } while (0)
+ # define trace_hardirq_exit() do { current->hardirq_context--; } while (0)
+-# define lockdep_softirq_enter()      do { current->softirq_context++; } while (0)
+-# define lockdep_softirq_exit()       do { current->softirq_context--; } while (0)
+ # define INIT_TRACE_IRQFLAGS  .softirqs_enabled = 1,
+ #else
+ # define trace_hardirqs_on()          do { } while (0)
+@@ -39,9 +37,15 @@
+ # define trace_softirqs_enabled(p)    0
+ # define trace_hardirq_enter()                do { } while (0)
+ # define trace_hardirq_exit()         do { } while (0)
++# define INIT_TRACE_IRQFLAGS
++#endif
++
++#if defined(CONFIG_TRACE_IRQFLAGS) && !defined(CONFIG_PREEMPT_RT_FULL)
++# define lockdep_softirq_enter() do { current->softirq_context++; } while (0)
++# define lockdep_softirq_exit()        do { current->softirq_context--; } while (0)
++#else
+ # define lockdep_softirq_enter()      do { } while (0)
+ # define lockdep_softirq_exit()               do { } while (0)
+-# define INIT_TRACE_IRQFLAGS
+ #endif
+ #if defined(CONFIG_IRQSOFF_TRACER) || \
+--- a/kernel/locking/lockdep.c
++++ b/kernel/locking/lockdep.c
+@@ -3702,6 +3702,7 @@ static void check_flags(unsigned long fl
+               }
+       }
++#ifndef CONFIG_PREEMPT_RT_FULL
+       /*
+        * We dont accurately track softirq state in e.g.
+        * hardirq contexts (such as on 4KSTACKS), so only
+@@ -3716,6 +3717,7 @@ static void check_flags(unsigned long fl
+                       DEBUG_LOCKS_WARN_ON(!current->softirqs_enabled);
+               }
+       }
++#endif
+       if (!debug_locks)
+               print_irqtrace_events(current);
diff --git a/patches/features/all/rt/lockdep-selftest-fix-warnings-due-to-missing-PREEMPT.patch b/patches/features/all/rt/lockdep-selftest-fix-warnings-due-to-missing-PREEMPT.patch
new file mode 100644 (file)
index 0000000..48584fb
--- /dev/null
@@ -0,0 +1,142 @@
+From: Josh Cartwright <josh.cartwright@ni.com>
+Date: Wed, 28 Jan 2015 13:08:45 -0600
+Subject: lockdep: selftest: fix warnings due to missing PREEMPT_RT conditionals
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+"lockdep: Selftest: Only do hardirq context test for raw spinlock"
+disabled the execution of certain tests with PREEMPT_RT_FULL, but did
+not prevent the tests from still being defined.  This leads to warnings
+like:
+
+  ./linux/lib/locking-selftest.c:574:1: warning: 'irqsafe1_hard_rlock_12' defined but not used [-Wunused-function]
+  ./linux/lib/locking-selftest.c:574:1: warning: 'irqsafe1_hard_rlock_21' defined but not used [-Wunused-function]
+  ./linux/lib/locking-selftest.c:577:1: warning: 'irqsafe1_hard_wlock_12' defined but not used [-Wunused-function]
+  ./linux/lib/locking-selftest.c:577:1: warning: 'irqsafe1_hard_wlock_21' defined but not used [-Wunused-function]
+  ./linux/lib/locking-selftest.c:580:1: warning: 'irqsafe1_soft_spin_12' defined but not used [-Wunused-function]
+  ...
+
+Fixed by wrapping the test definitions in #ifndef CONFIG_PREEMPT_RT_FULL
+conditionals.
+
+
+Signed-off-by: Josh Cartwright <josh.cartwright@ni.com>
+Signed-off-by: Xander Huff <xander.huff@ni.com>
+Acked-by: Gratian Crisan <gratian.crisan@ni.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ lib/locking-selftest.c |   27 +++++++++++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+--- a/lib/locking-selftest.c
++++ b/lib/locking-selftest.c
+@@ -590,6 +590,8 @@ GENERATE_TESTCASE(init_held_rsem)
+ #include "locking-selftest-spin-hardirq.h"
+ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_spin)
++#ifndef CONFIG_PREEMPT_RT_FULL
++
+ #include "locking-selftest-rlock-hardirq.h"
+ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_rlock)
+@@ -605,9 +607,12 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_
+ #include "locking-selftest-wlock-softirq.h"
+ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_soft_wlock)
++#endif
++
+ #undef E1
+ #undef E2
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+  * Enabling hardirqs with a softirq-safe lock held:
+  */
+@@ -640,6 +645,8 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2A
+ #undef E1
+ #undef E2
++#endif
++
+ /*
+  * Enabling irqs with an irq-safe lock held:
+  */
+@@ -663,6 +670,8 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2A
+ #include "locking-selftest-spin-hardirq.h"
+ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_spin)
++#ifndef CONFIG_PREEMPT_RT_FULL
++
+ #include "locking-selftest-rlock-hardirq.h"
+ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_rlock)
+@@ -678,6 +687,8 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B
+ #include "locking-selftest-wlock-softirq.h"
+ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_soft_wlock)
++#endif
++
+ #undef E1
+ #undef E2
+@@ -709,6 +720,8 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B
+ #include "locking-selftest-spin-hardirq.h"
+ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_spin)
++#ifndef CONFIG_PREEMPT_RT_FULL
++
+ #include "locking-selftest-rlock-hardirq.h"
+ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_rlock)
+@@ -724,6 +737,8 @@ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_
+ #include "locking-selftest-wlock-softirq.h"
+ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_soft_wlock)
++#endif
++
+ #undef E1
+ #undef E2
+ #undef E3
+@@ -757,6 +772,8 @@ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_
+ #include "locking-selftest-spin-hardirq.h"
+ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_spin)
++#ifndef CONFIG_PREEMPT_RT_FULL
++
+ #include "locking-selftest-rlock-hardirq.h"
+ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_rlock)
+@@ -772,10 +789,14 @@ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_
+ #include "locking-selftest-wlock-softirq.h"
+ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_soft_wlock)
++#endif
++
+ #undef E1
+ #undef E2
+ #undef E3
++#ifndef CONFIG_PREEMPT_RT_FULL
++
+ /*
+  * read-lock / write-lock irq inversion.
+  *
+@@ -838,6 +859,10 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_inver
+ #undef E2
+ #undef E3
++#endif
++
++#ifndef CONFIG_PREEMPT_RT_FULL
++
+ /*
+  * read-lock / write-lock recursion that is actually safe.
+  */
+@@ -876,6 +901,8 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_read_
+ #undef E2
+ #undef E3
++#endif
++
+ /*
+  * read-lock / write-lock recursion that is unsafe.
+  */
diff --git a/patches/features/all/rt/lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch b/patches/features/all/rt/lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch
new file mode 100644 (file)
index 0000000..39503d8
--- /dev/null
@@ -0,0 +1,57 @@
+Subject: lockdep: selftest: Only do hardirq context test for raw spinlock
+From: Yong Zhang <yong.zhang0@gmail.com>
+Date: Mon, 16 Apr 2012 15:01:56 +0800
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+From: Yong Zhang <yong.zhang@windriver.com>
+
+On -rt there is no softirq context any more and rwlock is sleepable,
+disable softirq context test and rwlock+irq test.
+
+Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
+Cc: Yong Zhang <yong.zhang@windriver.com>
+Link: http://lkml.kernel.org/r/1334559716-18447-3-git-send-email-yong.zhang0@gmail.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ lib/locking-selftest.c |   23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+--- a/lib/locking-selftest.c
++++ b/lib/locking-selftest.c
+@@ -1858,6 +1858,7 @@ void locking_selftest(void)
+       printk("  --------------------------------------------------------------------------\n");
++#ifndef CONFIG_PREEMPT_RT_FULL
+       /*
+        * irq-context testcases:
+        */
+@@ -1870,6 +1871,28 @@ void locking_selftest(void)
+       DO_TESTCASE_6x2("irq read-recursion", irq_read_recursion);
+ //    DO_TESTCASE_6x2B("irq read-recursion #2", irq_read_recursion2);
++#else
++      /* On -rt, we only do hardirq context test for raw spinlock */
++      DO_TESTCASE_1B("hard-irqs-on + irq-safe-A", irqsafe1_hard_spin, 12);
++      DO_TESTCASE_1B("hard-irqs-on + irq-safe-A", irqsafe1_hard_spin, 21);
++
++      DO_TESTCASE_1B("hard-safe-A + irqs-on", irqsafe2B_hard_spin, 12);
++      DO_TESTCASE_1B("hard-safe-A + irqs-on", irqsafe2B_hard_spin, 21);
++
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 123);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 132);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 213);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 231);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 312);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #1", irqsafe3_hard_spin, 321);
++
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 123);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 132);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 213);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 231);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 312);
++      DO_TESTCASE_1B("hard-safe-A + unsafe-B #2", irqsafe4_hard_spin, 321);
++#endif
+       ww_tests();
diff --git a/patches/features/all/rt/locking-locktorture-Do-NOT-include-rwlock.h-directly.patch b/patches/features/all/rt/locking-locktorture-Do-NOT-include-rwlock.h-directly.patch
new file mode 100644 (file)
index 0000000..99a0c42
--- /dev/null
@@ -0,0 +1,27 @@
+From: "Wolfgang M. Reimer" <linuxball@gmail.com>
+Date: Tue, 21 Jul 2015 16:20:07 +0200
+Subject: locking: locktorture: Do NOT include rwlock.h directly
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Including rwlock.h directly will cause kernel builds to fail
+if CONFIG_PREEMPT_RT_FULL is defined. The correct header file
+(rwlock_rt.h OR rwlock.h) will be included by spinlock.h which
+is included by locktorture.c anyway.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Wolfgang M. Reimer <linuxball@gmail.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/locking/locktorture.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/kernel/locking/locktorture.c
++++ b/kernel/locking/locktorture.c
+@@ -26,7 +26,6 @@
+ #include <linux/kthread.h>
+ #include <linux/sched/rt.h>
+ #include <linux/spinlock.h>
+-#include <linux/rwlock.h>
+ #include <linux/mutex.h>
+ #include <linux/rwsem.h>
+ #include <linux/smp.h>
diff --git a/patches/features/all/rt/locking-percpu-rwsem-use-swait-for-the-wating-writer.patch b/patches/features/all/rt/locking-percpu-rwsem-use-swait-for-the-wating-writer.patch
new file mode 100644 (file)
index 0000000..bd334ce
--- /dev/null
@@ -0,0 +1,73 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 21 Nov 2016 19:26:15 +0100
+Subject: [PATCH] locking/percpu-rwsem: use swait for the wating writer
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use struct swait_queue_head instead of wait_queue_head_t for the waiting
+writer. The swait implementation is smaller and lightweight compared to
+wait_queue_head_t.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/percpu-rwsem.h  |    6 +++---
+ kernel/locking/percpu-rwsem.c |    6 +++---
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+--- a/include/linux/percpu-rwsem.h
++++ b/include/linux/percpu-rwsem.h
+@@ -4,7 +4,7 @@
+ #include <linux/atomic.h>
+ #include <linux/rwsem.h>
+ #include <linux/percpu.h>
+-#include <linux/wait.h>
++#include <linux/swait.h>
+ #include <linux/rcu_sync.h>
+ #include <linux/lockdep.h>
+@@ -12,7 +12,7 @@ struct percpu_rw_semaphore {
+       struct rcu_sync         rss;
+       unsigned int __percpu   *read_count;
+       struct rw_semaphore     rw_sem;
+-      wait_queue_head_t       writer;
++      struct swait_queue_head writer;
+       int                     readers_block;
+ };
+@@ -22,7 +22,7 @@ static struct percpu_rw_semaphore name =
+       .rss = __RCU_SYNC_INITIALIZER(name.rss, RCU_SCHED_SYNC),        \
+       .read_count = &__percpu_rwsem_rc_##name,                        \
+       .rw_sem = __RWSEM_INITIALIZER(name.rw_sem),                     \
+-      .writer = __WAIT_QUEUE_HEAD_INITIALIZER(name.writer),           \
++      .writer = __SWAIT_QUEUE_HEAD_INITIALIZER(name.writer),          \
+ }
+ extern int __percpu_down_read(struct percpu_rw_semaphore *, int);
+--- a/kernel/locking/percpu-rwsem.c
++++ b/kernel/locking/percpu-rwsem.c
+@@ -18,7 +18,7 @@ int __percpu_init_rwsem(struct percpu_rw
+       /* ->rw_sem represents the whole percpu_rw_semaphore for lockdep */
+       rcu_sync_init(&sem->rss, RCU_SCHED_SYNC);
+       __init_rwsem(&sem->rw_sem, name, rwsem_key);
+-      init_waitqueue_head(&sem->writer);
++      init_swait_queue_head(&sem->writer);
+       sem->readers_block = 0;
+       return 0;
+ }
+@@ -103,7 +103,7 @@ void __percpu_up_read(struct percpu_rw_s
+       __this_cpu_dec(*sem->read_count);
+       /* Prod writer to recheck readers_active */
+-      wake_up(&sem->writer);
++      swake_up(&sem->writer);
+ }
+ EXPORT_SYMBOL_GPL(__percpu_up_read);
+@@ -160,7 +160,7 @@ void percpu_down_write(struct percpu_rw_
+        */
+       /* Wait for all now active readers to complete. */
+-      wait_event(sem->writer, readers_active_check(sem));
++      swait_event(sem->writer, readers_active_check(sem));
+ }
+ EXPORT_SYMBOL_GPL(percpu_down_write);
diff --git a/patches/features/all/rt/md-disable-bcache.patch b/patches/features/all/rt/md-disable-bcache.patch
new file mode 100644 (file)
index 0000000..612d3dd
--- /dev/null
@@ -0,0 +1,32 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 29 Aug 2013 11:48:57 +0200
+Subject: md: disable bcache
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+It uses anon semaphores
+|drivers/md/bcache/request.c: In function ‘cached_dev_write_complete’:
+|drivers/md/bcache/request.c:1007:2: error: implicit declaration of function ‘up_read_non_owner’ [-Werror=implicit-function-declaration]
+|  up_read_non_owner(&dc->writeback_lock);
+|  ^
+|drivers/md/bcache/request.c: In function ‘request_write’:
+|drivers/md/bcache/request.c:1033:2: error: implicit declaration of function ‘down_read_non_owner’ [-Werror=implicit-function-declaration]
+|  down_read_non_owner(&dc->writeback_lock);
+|  ^
+
+either we get rid of those or we have to introduce them…
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/md/bcache/Kconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/md/bcache/Kconfig
++++ b/drivers/md/bcache/Kconfig
+@@ -1,6 +1,7 @@
+ config BCACHE
+       tristate "Block device as cache"
++      depends on !PREEMPT_RT_FULL
+       ---help---
+       Allows a block device to be used as cache for other devices; uses
+       a btree for indexing and the layout is optimized for SSDs.
diff --git a/patches/features/all/rt/md-raid5-percpu-handling-rt-aware.patch b/patches/features/all/rt/md-raid5-percpu-handling-rt-aware.patch
new file mode 100644 (file)
index 0000000..f2d8f19
--- /dev/null
@@ -0,0 +1,70 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 6 Apr 2010 16:51:31 +0200
+Subject: md: raid5: Make raid5_percpu handling RT aware
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+__raid_run_ops() disables preemption with get_cpu() around the access
+to the raid5_percpu variables. That causes scheduling while atomic
+spews on RT.
+
+Serialize the access to the percpu data with a lock and keep the code
+preemptible.
+
+Reported-by: Udo van den Heuvel <udovdh@xs4all.nl>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Tested-by: Udo van den Heuvel <udovdh@xs4all.nl>
+
+---
+ drivers/md/raid5.c |    8 +++++---
+ drivers/md/raid5.h |    1 +
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -1928,8 +1928,9 @@ static void raid_run_ops(struct stripe_h
+       struct raid5_percpu *percpu;
+       unsigned long cpu;
+-      cpu = get_cpu();
++      cpu = get_cpu_light();
+       percpu = per_cpu_ptr(conf->percpu, cpu);
++      spin_lock(&percpu->lock);
+       if (test_bit(STRIPE_OP_BIOFILL, &ops_request)) {
+               ops_run_biofill(sh);
+               overlap_clear++;
+@@ -1985,7 +1986,8 @@ static void raid_run_ops(struct stripe_h
+                       if (test_and_clear_bit(R5_Overlap, &dev->flags))
+                               wake_up(&sh->raid_conf->wait_for_overlap);
+               }
+-      put_cpu();
++      spin_unlock(&percpu->lock);
++      put_cpu_light();
+ }
+ static struct stripe_head *alloc_stripe(struct kmem_cache *sc, gfp_t gfp,
+@@ -6391,6 +6393,7 @@ static int raid456_cpu_up_prepare(unsign
+                      __func__, cpu);
+               return -ENOMEM;
+       }
++      spin_lock_init(&per_cpu_ptr(conf->percpu, cpu)->lock);
+       return 0;
+ }
+@@ -6401,7 +6404,6 @@ static int raid5_alloc_percpu(struct r5c
+       conf->percpu = alloc_percpu(struct raid5_percpu);
+       if (!conf->percpu)
+               return -ENOMEM;
+-
+       err = cpuhp_state_add_instance(CPUHP_MD_RAID5_PREPARE, &conf->node);
+       if (!err) {
+               conf->scribble_disks = max(conf->raid_disks,
+--- a/drivers/md/raid5.h
++++ b/drivers/md/raid5.h
+@@ -504,6 +504,7 @@ struct r5conf {
+       int                     recovery_disabled;
+       /* per cpu variables */
+       struct raid5_percpu {
++              spinlock_t      lock;           /* Protection for -RT */
+               struct page     *spare_page; /* Used when checking P/Q in raid6 */
+               struct flex_array *scribble;   /* space for constructing buffer
+                                             * lists and performing address
diff --git a/patches/features/all/rt/mips-disable-highmem-on-rt.patch b/patches/features/all/rt/mips-disable-highmem-on-rt.patch
new file mode 100644 (file)
index 0000000..2e57fe3
--- /dev/null
@@ -0,0 +1,23 @@
+Subject: mips: Disable highmem on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 18 Jul 2011 17:10:12 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The current highmem handling on -RT is not compatible and needs fixups.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/mips/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/mips/Kconfig
++++ b/arch/mips/Kconfig
+@@ -2514,7 +2514,7 @@ config MIPS_ASID_BITS_VARIABLE
+ #
+ config HIGHMEM
+       bool "High Memory Support"
+-      depends on 32BIT && CPU_SUPPORTS_HIGHMEM && SYS_SUPPORTS_HIGHMEM && !CPU_MIPS32_3_5_EVA
++      depends on 32BIT && CPU_SUPPORTS_HIGHMEM && SYS_SUPPORTS_HIGHMEM && !CPU_MIPS32_3_5_EVA && !PREEMPT_RT_FULL
+ config CPU_SUPPORTS_HIGHMEM
+       bool
diff --git a/patches/features/all/rt/mm--rt--Fix-generic-kmap_atomic-for-RT.patch b/patches/features/all/rt/mm--rt--Fix-generic-kmap_atomic-for-RT.patch
new file mode 100644 (file)
index 0000000..9d729c9
--- /dev/null
@@ -0,0 +1,41 @@
+Subject: mm: rt: Fix generic kmap_atomic for RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 19 Sep 2015 10:15:00 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The update to 4.1 brought in the mainline variant of the pagefault
+disable distangling from preempt count. That introduced a
+preempt_disable/enable pair in the generic kmap_atomic/kunmap_atomic
+implementations which got not converted to the _nort() variant.
+
+That results in massive 'scheduling while atomic/sleeping function
+called from invalid context' splats.
+
+Fix that up.
+
+Reported-and-tested-by: Juergen Borleis <jbe@pengutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/highmem.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/include/linux/highmem.h
++++ b/include/linux/highmem.h
+@@ -65,7 +65,7 @@ static inline void kunmap(struct page *p
+ static inline void *kmap_atomic(struct page *page)
+ {
+-      preempt_disable();
++      preempt_disable_nort();
+       pagefault_disable();
+       return page_address(page);
+ }
+@@ -74,7 +74,7 @@ static inline void *kmap_atomic(struct p
+ static inline void __kunmap_atomic(void *addr)
+ {
+       pagefault_enable();
+-      preempt_enable();
++      preempt_enable_nort();
+ }
+ #define kmap_atomic_pfn(pfn)  kmap_atomic(pfn_to_page(pfn))
diff --git a/patches/features/all/rt/mm-backing-dev-don-t-disable-IRQs-in-wb_congested_pu.patch b/patches/features/all/rt/mm-backing-dev-don-t-disable-IRQs-in-wb_congested_pu.patch
new file mode 100644 (file)
index 0000000..ce5b109
--- /dev/null
@@ -0,0 +1,42 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 5 Feb 2016 12:17:14 +0100
+Subject: mm: backing-dev: don't disable IRQs in wb_congested_put()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+it triggers:
+|BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:930
+|in_atomic(): 0, irqs_disabled(): 1, pid: 12, name: rcuc/0
+|1 lock held by rcuc/0/12:
+| #0:  (rcu_callback){......}, at: [<ffffffff810ce1a6>] rcu_cpu_kthread+0x376/0xb10
+|irq event stamp: 23636
+|hardirqs last  enabled at (23635): [<ffffffff8173524c>] _raw_spin_unlock_irqrestore+0x6c/0x80
+|hardirqs last disabled at (23636): [<ffffffff81173918>] wb_congested_put+0x18/0x90
+| [<ffffffff81735434>] rt_spin_lock+0x24/0x60
+| [<ffffffff810afed2>] atomic_dec_and_spin_lock+0x52/0x90
+| [<ffffffff81173928>] wb_congested_put+0x28/0x90
+| [<ffffffff813b833e>] __blkg_release_rcu+0x5e/0x1e0
+| [<ffffffff813b8367>] ? __blkg_release_rcu+0x87/0x1e0
+| [<ffffffff813b82e0>] ? blkg_conf_finish+0x90/0x90
+| [<ffffffff810ce1e7>] rcu_cpu_kthread+0x3b7/0xb10
+
+due to cgwb_lock beeing taken with spin_lock_irqsave() usually.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ mm/backing-dev.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/mm/backing-dev.c
++++ b/mm/backing-dev.c
+@@ -457,9 +457,9 @@ void wb_congested_put(struct bdi_writeba
+ {
+       unsigned long flags;
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       if (!atomic_dec_and_lock(&congested->refcnt, &cgwb_lock)) {
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+               return;
+       }
diff --git a/patches/features/all/rt/mm-bounce-local-irq-save-nort.patch b/patches/features/all/rt/mm-bounce-local-irq-save-nort.patch
new file mode 100644 (file)
index 0000000..d4a3342
--- /dev/null
@@ -0,0 +1,28 @@
+Subject: mm: bounce: Use local_irq_save_nort
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 09 Jan 2013 10:33:09 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+kmap_atomic() is preemptible on RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ block/bounce.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/block/bounce.c
++++ b/block/bounce.c
+@@ -55,11 +55,11 @@ static void bounce_copy_vec(struct bio_v
+       unsigned long flags;
+       unsigned char *vto;
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       vto = kmap_atomic(to->bv_page);
+       memcpy(vto + to->bv_offset, vfrom, to->bv_len);
+       kunmap_atomic(vto);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+ }
+ #else /* CONFIG_HIGHMEM */
diff --git a/patches/features/all/rt/mm-convert-swap-to-percpu-locked.patch b/patches/features/all/rt/mm-convert-swap-to-percpu-locked.patch
new file mode 100644 (file)
index 0000000..c8402b9
--- /dev/null
@@ -0,0 +1,191 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:51 -0500
+Subject: mm/swap: Convert to percpu locked
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Replace global locks (get_cpu + local_irq_save) with "local_locks()".
+Currently there is one of for "rotate" and one for "swap".
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/swap.h |    1 +
+ mm/compaction.c      |    6 ++++--
+ mm/page_alloc.c      |    2 ++
+ mm/swap.c            |   38 ++++++++++++++++++++++----------------
+ 4 files changed, 29 insertions(+), 18 deletions(-)
+
+--- a/include/linux/swap.h
++++ b/include/linux/swap.h
+@@ -294,6 +294,7 @@ extern unsigned long nr_free_pagecache_p
+ /* linux/mm/swap.c */
++DECLARE_LOCAL_IRQ_LOCK(swapvec_lock);
+ extern void lru_cache_add(struct page *);
+ extern void lru_cache_add_anon(struct page *page);
+ extern void lru_cache_add_file(struct page *page);
+--- a/mm/compaction.c
++++ b/mm/compaction.c
+@@ -1593,10 +1593,12 @@ static enum compact_result compact_zone(
+                               block_start_pfn(cc->migrate_pfn, cc->order);
+                       if (cc->last_migrated_pfn < current_block_start) {
+-                              cpu = get_cpu();
++                              cpu = get_cpu_light();
++                              local_lock_irq(swapvec_lock);
+                               lru_add_drain_cpu(cpu);
++                              local_unlock_irq(swapvec_lock);
+                               drain_local_pages(zone);
+-                              put_cpu();
++                              put_cpu_light();
+                               /* No more flushing until we migrate again */
+                               cc->last_migrated_pfn = 0;
+                       }
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -6593,7 +6593,9 @@ static int page_alloc_cpu_notify(struct
+       int cpu = (unsigned long)hcpu;
+       if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) {
++              local_lock_irq_on(swapvec_lock, cpu);
+               lru_add_drain_cpu(cpu);
++              local_unlock_irq_on(swapvec_lock, cpu);
+               drain_pages(cpu);
+               /*
+--- a/mm/swap.c
++++ b/mm/swap.c
+@@ -32,6 +32,7 @@
+ #include <linux/memcontrol.h>
+ #include <linux/gfp.h>
+ #include <linux/uio.h>
++#include <linux/locallock.h>
+ #include <linux/hugetlb.h>
+ #include <linux/page_idle.h>
+@@ -50,6 +51,8 @@ static DEFINE_PER_CPU(struct pagevec, lr
+ #ifdef CONFIG_SMP
+ static DEFINE_PER_CPU(struct pagevec, activate_page_pvecs);
+ #endif
++static DEFINE_LOCAL_IRQ_LOCK(rotate_lock);
++DEFINE_LOCAL_IRQ_LOCK(swapvec_lock);
+ /*
+  * This path almost never happens for VM activity - pages are normally
+@@ -240,11 +243,11 @@ void rotate_reclaimable_page(struct page
+               unsigned long flags;
+               get_page(page);
+-              local_irq_save(flags);
++              local_lock_irqsave(rotate_lock, flags);
+               pvec = this_cpu_ptr(&lru_rotate_pvecs);
+               if (!pagevec_add(pvec, page) || PageCompound(page))
+                       pagevec_move_tail(pvec);
+-              local_irq_restore(flags);
++              local_unlock_irqrestore(rotate_lock, flags);
+       }
+ }
+@@ -294,12 +297,13 @@ void activate_page(struct page *page)
+ {
+       page = compound_head(page);
+       if (PageLRU(page) && !PageActive(page) && !PageUnevictable(page)) {
+-              struct pagevec *pvec = &get_cpu_var(activate_page_pvecs);
++              struct pagevec *pvec = &get_locked_var(swapvec_lock,
++                                                     activate_page_pvecs);
+               get_page(page);
+               if (!pagevec_add(pvec, page) || PageCompound(page))
+                       pagevec_lru_move_fn(pvec, __activate_page, NULL);
+-              put_cpu_var(activate_page_pvecs);
++              put_locked_var(swapvec_lock, activate_page_pvecs);
+       }
+ }
+@@ -326,7 +330,7 @@ void activate_page(struct page *page)
+ static void __lru_cache_activate_page(struct page *page)
+ {
+-      struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
++      struct pagevec *pvec = &get_locked_var(swapvec_lock, lru_add_pvec);
+       int i;
+       /*
+@@ -348,7 +352,7 @@ static void __lru_cache_activate_page(st
+               }
+       }
+-      put_cpu_var(lru_add_pvec);
++      put_locked_var(swapvec_lock, lru_add_pvec);
+ }
+ /*
+@@ -390,12 +394,12 @@ EXPORT_SYMBOL(mark_page_accessed);
+ static void __lru_cache_add(struct page *page)
+ {
+-      struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
++      struct pagevec *pvec = &get_locked_var(swapvec_lock, lru_add_pvec);
+       get_page(page);
+       if (!pagevec_add(pvec, page) || PageCompound(page))
+               __pagevec_lru_add(pvec);
+-      put_cpu_var(lru_add_pvec);
++      put_locked_var(swapvec_lock, lru_add_pvec);
+ }
+ /**
+@@ -593,9 +597,9 @@ void lru_add_drain_cpu(int cpu)
+               unsigned long flags;
+               /* No harm done if a racing interrupt already did this */
+-              local_irq_save(flags);
++              local_lock_irqsave(rotate_lock, flags);
+               pagevec_move_tail(pvec);
+-              local_irq_restore(flags);
++              local_unlock_irqrestore(rotate_lock, flags);
+       }
+       pvec = &per_cpu(lru_deactivate_file_pvecs, cpu);
+@@ -627,11 +631,12 @@ void deactivate_file_page(struct page *p
+               return;
+       if (likely(get_page_unless_zero(page))) {
+-              struct pagevec *pvec = &get_cpu_var(lru_deactivate_file_pvecs);
++              struct pagevec *pvec = &get_locked_var(swapvec_lock,
++                                                     lru_deactivate_file_pvecs);
+               if (!pagevec_add(pvec, page) || PageCompound(page))
+                       pagevec_lru_move_fn(pvec, lru_deactivate_file_fn, NULL);
+-              put_cpu_var(lru_deactivate_file_pvecs);
++              put_locked_var(swapvec_lock, lru_deactivate_file_pvecs);
+       }
+ }
+@@ -646,19 +651,20 @@ void deactivate_file_page(struct page *p
+ void deactivate_page(struct page *page)
+ {
+       if (PageLRU(page) && PageActive(page) && !PageUnevictable(page)) {
+-              struct pagevec *pvec = &get_cpu_var(lru_deactivate_pvecs);
++              struct pagevec *pvec = &get_locked_var(swapvec_lock,
++                                                     lru_deactivate_pvecs);
+               get_page(page);
+               if (!pagevec_add(pvec, page) || PageCompound(page))
+                       pagevec_lru_move_fn(pvec, lru_deactivate_fn, NULL);
+-              put_cpu_var(lru_deactivate_pvecs);
++              put_locked_var(swapvec_lock, lru_deactivate_pvecs);
+       }
+ }
+ void lru_add_drain(void)
+ {
+-      lru_add_drain_cpu(get_cpu());
+-      put_cpu();
++      lru_add_drain_cpu(local_lock_cpu(swapvec_lock));
++      local_unlock_cpu(swapvec_lock);
+ }
+ static void lru_add_drain_per_cpu(struct work_struct *dummy)
diff --git a/patches/features/all/rt/mm-disable-sloub-rt.patch b/patches/features/all/rt/mm-disable-sloub-rt.patch
new file mode 100644 (file)
index 0000000..03097b2
--- /dev/null
@@ -0,0 +1,32 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:44:03 -0500
+Subject: mm: Allow only slub on RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Disable SLAB and SLOB on -RT. Only SLUB is adopted to -RT needs.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ init/Kconfig |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -1759,6 +1759,7 @@ choice
+ config SLAB
+       bool "SLAB"
++      depends on !PREEMPT_RT_FULL
+       select HAVE_HARDENED_USERCOPY_ALLOCATOR
+       help
+         The regular slab allocator that is established and known to work
+@@ -1779,6 +1780,7 @@ config SLUB
+ config SLOB
+       depends on EXPERT
+       bool "SLOB (Simple Allocator)"
++      depends on !PREEMPT_RT_FULL
+       help
+          SLOB replaces the stock allocator with a drastically simpler
+          allocator. SLOB is generally more space efficient but
diff --git a/patches/features/all/rt/mm-enable-slub.patch b/patches/features/all/rt/mm-enable-slub.patch
new file mode 100644 (file)
index 0000000..3426372
--- /dev/null
@@ -0,0 +1,465 @@
+Subject: mm: Enable SLUB for RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 25 Oct 2012 10:32:35 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Make SLUB RT aware by converting locks to raw and using free lists to
+move the freeing out of the lock held region.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ mm/slab.h |    4 +
+ mm/slub.c |  134 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
+ 2 files changed, 109 insertions(+), 29 deletions(-)
+
+--- a/mm/slab.h
++++ b/mm/slab.h
+@@ -426,7 +426,11 @@ static inline void slab_post_alloc_hook(
+  * The slab lists for all objects.
+  */
+ struct kmem_cache_node {
++#ifdef CONFIG_SLUB
++      raw_spinlock_t list_lock;
++#else
+       spinlock_t list_lock;
++#endif
+ #ifdef CONFIG_SLAB
+       struct list_head slabs_partial; /* partial list first, better asm code */
+--- a/mm/slub.c
++++ b/mm/slub.c
+@@ -1141,7 +1141,7 @@ static noinline int free_debug_processin
+       unsigned long uninitialized_var(flags);
+       int ret = 0;
+-      spin_lock_irqsave(&n->list_lock, flags);
++      raw_spin_lock_irqsave(&n->list_lock, flags);
+       slab_lock(page);
+       if (s->flags & SLAB_CONSISTENCY_CHECKS) {
+@@ -1176,7 +1176,7 @@ static noinline int free_debug_processin
+                        bulk_cnt, cnt);
+       slab_unlock(page);
+-      spin_unlock_irqrestore(&n->list_lock, flags);
++      raw_spin_unlock_irqrestore(&n->list_lock, flags);
+       if (!ret)
+               slab_fix(s, "Object at 0x%p not freed", object);
+       return ret;
+@@ -1304,6 +1304,12 @@ static inline void dec_slabs_node(struct
+ #endif /* CONFIG_SLUB_DEBUG */
++struct slub_free_list {
++      raw_spinlock_t          lock;
++      struct list_head        list;
++};
++static DEFINE_PER_CPU(struct slub_free_list, slub_free_list);
++
+ /*
+  * Hooks for other subsystems that check memory allocations. In a typical
+  * production configuration these hooks all should produce no code at all.
+@@ -1530,7 +1536,11 @@ static struct page *allocate_slab(struct
+       flags &= gfp_allowed_mask;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      if (system_state == SYSTEM_RUNNING)
++#else
+       if (gfpflags_allow_blocking(flags))
++#endif
+               local_irq_enable();
+       flags |= s->allocflags;
+@@ -1605,7 +1615,11 @@ static struct page *allocate_slab(struct
+       page->frozen = 1;
+ out:
++#ifdef CONFIG_PREEMPT_RT_FULL
++      if (system_state == SYSTEM_RUNNING)
++#else
+       if (gfpflags_allow_blocking(flags))
++#endif
+               local_irq_disable();
+       if (!page)
+               return NULL;
+@@ -1664,6 +1678,16 @@ static void __free_slab(struct kmem_cach
+       __free_pages(page, order);
+ }
++static void free_delayed(struct list_head *h)
++{
++      while(!list_empty(h)) {
++              struct page *page = list_first_entry(h, struct page, lru);
++
++              list_del(&page->lru);
++              __free_slab(page->slab_cache, page);
++      }
++}
++
+ #define need_reserve_slab_rcu                                         \
+       (sizeof(((struct page *)NULL)->lru) < sizeof(struct rcu_head))
+@@ -1695,6 +1719,12 @@ static void free_slab(struct kmem_cache
+               }
+               call_rcu(head, rcu_free_slab);
++      } else if (irqs_disabled()) {
++              struct slub_free_list *f = this_cpu_ptr(&slub_free_list);
++
++              raw_spin_lock(&f->lock);
++              list_add(&page->lru, &f->list);
++              raw_spin_unlock(&f->lock);
+       } else
+               __free_slab(s, page);
+ }
+@@ -1802,7 +1832,7 @@ static void *get_partial_node(struct kme
+       if (!n || !n->nr_partial)
+               return NULL;
+-      spin_lock(&n->list_lock);
++      raw_spin_lock(&n->list_lock);
+       list_for_each_entry_safe(page, page2, &n->partial, lru) {
+               void *t;
+@@ -1827,7 +1857,7 @@ static void *get_partial_node(struct kme
+                       break;
+       }
+-      spin_unlock(&n->list_lock);
++      raw_spin_unlock(&n->list_lock);
+       return object;
+ }
+@@ -2073,7 +2103,7 @@ static void deactivate_slab(struct kmem_
+                        * that acquire_slab() will see a slab page that
+                        * is frozen
+                        */
+-                      spin_lock(&n->list_lock);
++                      raw_spin_lock(&n->list_lock);
+               }
+       } else {
+               m = M_FULL;
+@@ -2084,7 +2114,7 @@ static void deactivate_slab(struct kmem_
+                        * slabs from diagnostic functions will not see
+                        * any frozen slabs.
+                        */
+-                      spin_lock(&n->list_lock);
++                      raw_spin_lock(&n->list_lock);
+               }
+       }
+@@ -2119,7 +2149,7 @@ static void deactivate_slab(struct kmem_
+               goto redo;
+       if (lock)
+-              spin_unlock(&n->list_lock);
++              raw_spin_unlock(&n->list_lock);
+       if (m == M_FREE) {
+               stat(s, DEACTIVATE_EMPTY);
+@@ -2151,10 +2181,10 @@ static void unfreeze_partials(struct kme
+               n2 = get_node(s, page_to_nid(page));
+               if (n != n2) {
+                       if (n)
+-                              spin_unlock(&n->list_lock);
++                              raw_spin_unlock(&n->list_lock);
+                       n = n2;
+-                      spin_lock(&n->list_lock);
++                      raw_spin_lock(&n->list_lock);
+               }
+               do {
+@@ -2183,7 +2213,7 @@ static void unfreeze_partials(struct kme
+       }
+       if (n)
+-              spin_unlock(&n->list_lock);
++              raw_spin_unlock(&n->list_lock);
+       while (discard_page) {
+               page = discard_page;
+@@ -2222,14 +2252,21 @@ static void put_cpu_partial(struct kmem_
+                       pobjects = oldpage->pobjects;
+                       pages = oldpage->pages;
+                       if (drain && pobjects > s->cpu_partial) {
++                              struct slub_free_list *f;
+                               unsigned long flags;
++                              LIST_HEAD(tofree);
+                               /*
+                                * partial array is full. Move the existing
+                                * set to the per node partial list.
+                                */
+                               local_irq_save(flags);
+                               unfreeze_partials(s, this_cpu_ptr(s->cpu_slab));
++                              f = this_cpu_ptr(&slub_free_list);
++                              raw_spin_lock(&f->lock);
++                              list_splice_init(&f->list, &tofree);
++                              raw_spin_unlock(&f->lock);
+                               local_irq_restore(flags);
++                              free_delayed(&tofree);
+                               oldpage = NULL;
+                               pobjects = 0;
+                               pages = 0;
+@@ -2301,7 +2338,22 @@ static bool has_cpu_slab(int cpu, void *
+ static void flush_all(struct kmem_cache *s)
+ {
++      LIST_HEAD(tofree);
++      int cpu;
++
+       on_each_cpu_cond(has_cpu_slab, flush_cpu_slab, s, 1, GFP_ATOMIC);
++      for_each_online_cpu(cpu) {
++              struct slub_free_list *f;
++
++              if (!has_cpu_slab(cpu, s))
++                      continue;
++
++              f = &per_cpu(slub_free_list, cpu);
++              raw_spin_lock_irq(&f->lock);
++              list_splice_init(&f->list, &tofree);
++              raw_spin_unlock_irq(&f->lock);
++              free_delayed(&tofree);
++      }
+ }
+ /*
+@@ -2356,10 +2408,10 @@ static unsigned long count_partial(struc
+       unsigned long x = 0;
+       struct page *page;
+-      spin_lock_irqsave(&n->list_lock, flags);
++      raw_spin_lock_irqsave(&n->list_lock, flags);
+       list_for_each_entry(page, &n->partial, lru)
+               x += get_count(page);
+-      spin_unlock_irqrestore(&n->list_lock, flags);
++      raw_spin_unlock_irqrestore(&n->list_lock, flags);
+       return x;
+ }
+ #endif /* CONFIG_SLUB_DEBUG || CONFIG_SYSFS */
+@@ -2497,8 +2549,10 @@ static inline void *get_freelist(struct
+  * already disabled (which is the case for bulk allocation).
+  */
+ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
+-                        unsigned long addr, struct kmem_cache_cpu *c)
++                        unsigned long addr, struct kmem_cache_cpu *c,
++                        struct list_head *to_free)
+ {
++      struct slub_free_list *f;
+       void *freelist;
+       struct page *page;
+@@ -2558,6 +2612,13 @@ static void *___slab_alloc(struct kmem_c
+       VM_BUG_ON(!c->page->frozen);
+       c->freelist = get_freepointer(s, freelist);
+       c->tid = next_tid(c->tid);
++
++out:
++      f = this_cpu_ptr(&slub_free_list);
++      raw_spin_lock(&f->lock);
++      list_splice_init(&f->list, to_free);
++      raw_spin_unlock(&f->lock);
++
+       return freelist;
+ new_slab:
+@@ -2589,7 +2650,7 @@ static void *___slab_alloc(struct kmem_c
+       deactivate_slab(s, page, get_freepointer(s, freelist));
+       c->page = NULL;
+       c->freelist = NULL;
+-      return freelist;
++      goto out;
+ }
+ /*
+@@ -2601,6 +2662,7 @@ static void *__slab_alloc(struct kmem_ca
+ {
+       void *p;
+       unsigned long flags;
++      LIST_HEAD(tofree);
+       local_irq_save(flags);
+ #ifdef CONFIG_PREEMPT
+@@ -2612,8 +2674,9 @@ static void *__slab_alloc(struct kmem_ca
+       c = this_cpu_ptr(s->cpu_slab);
+ #endif
+-      p = ___slab_alloc(s, gfpflags, node, addr, c);
++      p = ___slab_alloc(s, gfpflags, node, addr, c, &tofree);
+       local_irq_restore(flags);
++      free_delayed(&tofree);
+       return p;
+ }
+@@ -2799,7 +2862,7 @@ static void __slab_free(struct kmem_cach
+       do {
+               if (unlikely(n)) {
+-                      spin_unlock_irqrestore(&n->list_lock, flags);
++                      raw_spin_unlock_irqrestore(&n->list_lock, flags);
+                       n = NULL;
+               }
+               prior = page->freelist;
+@@ -2831,7 +2894,7 @@ static void __slab_free(struct kmem_cach
+                                * Otherwise the list_lock will synchronize with
+                                * other processors updating the list of slabs.
+                                */
+-                              spin_lock_irqsave(&n->list_lock, flags);
++                              raw_spin_lock_irqsave(&n->list_lock, flags);
+                       }
+               }
+@@ -2873,7 +2936,7 @@ static void __slab_free(struct kmem_cach
+               add_partial(n, page, DEACTIVATE_TO_TAIL);
+               stat(s, FREE_ADD_PARTIAL);
+       }
+-      spin_unlock_irqrestore(&n->list_lock, flags);
++      raw_spin_unlock_irqrestore(&n->list_lock, flags);
+       return;
+ slab_empty:
+@@ -2888,7 +2951,7 @@ static void __slab_free(struct kmem_cach
+               remove_full(s, n, page);
+       }
+-      spin_unlock_irqrestore(&n->list_lock, flags);
++      raw_spin_unlock_irqrestore(&n->list_lock, flags);
+       stat(s, FREE_SLAB);
+       discard_slab(s, page);
+ }
+@@ -3093,6 +3156,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca
+                         void **p)
+ {
+       struct kmem_cache_cpu *c;
++      LIST_HEAD(to_free);
+       int i;
+       /* memcg and kmem_cache debug support */
+@@ -3116,7 +3180,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca
+                        * of re-populating per CPU c->freelist
+                        */
+                       p[i] = ___slab_alloc(s, flags, NUMA_NO_NODE,
+-                                          _RET_IP_, c);
++                                          _RET_IP_, c, &to_free);
+                       if (unlikely(!p[i]))
+                               goto error;
+@@ -3128,6 +3192,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca
+       }
+       c->tid = next_tid(c->tid);
+       local_irq_enable();
++      free_delayed(&to_free);
+       /* Clear memory outside IRQ disabled fastpath loop */
+       if (unlikely(flags & __GFP_ZERO)) {
+@@ -3275,7 +3340,7 @@ static void
+ init_kmem_cache_node(struct kmem_cache_node *n)
+ {
+       n->nr_partial = 0;
+-      spin_lock_init(&n->list_lock);
++      raw_spin_lock_init(&n->list_lock);
+       INIT_LIST_HEAD(&n->partial);
+ #ifdef CONFIG_SLUB_DEBUG
+       atomic_long_set(&n->nr_slabs, 0);
+@@ -3619,6 +3684,10 @@ static void list_slab_objects(struct kme
+                                                       const char *text)
+ {
+ #ifdef CONFIG_SLUB_DEBUG
++#ifdef CONFIG_PREEMPT_RT_BASE
++      /* XXX move out of irq-off section */
++      slab_err(s, page, text, s->name);
++#else
+       void *addr = page_address(page);
+       void *p;
+       unsigned long *map = kzalloc(BITS_TO_LONGS(page->objects) *
+@@ -3639,6 +3708,7 @@ static void list_slab_objects(struct kme
+       slab_unlock(page);
+       kfree(map);
+ #endif
++#endif
+ }
+ /*
+@@ -3652,7 +3722,7 @@ static void free_partial(struct kmem_cac
+       struct page *page, *h;
+       BUG_ON(irqs_disabled());
+-      spin_lock_irq(&n->list_lock);
++      raw_spin_lock_irq(&n->list_lock);
+       list_for_each_entry_safe(page, h, &n->partial, lru) {
+               if (!page->inuse) {
+                       remove_partial(n, page);
+@@ -3662,7 +3732,7 @@ static void free_partial(struct kmem_cac
+                       "Objects remaining in %s on __kmem_cache_shutdown()");
+               }
+       }
+-      spin_unlock_irq(&n->list_lock);
++      raw_spin_unlock_irq(&n->list_lock);
+       list_for_each_entry_safe(page, h, &discard, lru)
+               discard_slab(s, page);
+@@ -3905,7 +3975,7 @@ int __kmem_cache_shrink(struct kmem_cach
+               for (i = 0; i < SHRINK_PROMOTE_MAX; i++)
+                       INIT_LIST_HEAD(promote + i);
+-              spin_lock_irqsave(&n->list_lock, flags);
++              raw_spin_lock_irqsave(&n->list_lock, flags);
+               /*
+                * Build lists of slabs to discard or promote.
+@@ -3936,7 +4006,7 @@ int __kmem_cache_shrink(struct kmem_cach
+               for (i = SHRINK_PROMOTE_MAX - 1; i >= 0; i--)
+                       list_splice(promote + i, &n->partial);
+-              spin_unlock_irqrestore(&n->list_lock, flags);
++              raw_spin_unlock_irqrestore(&n->list_lock, flags);
+               /* Release empty slabs */
+               list_for_each_entry_safe(page, t, &discard, lru)
+@@ -4112,6 +4182,12 @@ void __init kmem_cache_init(void)
+ {
+       static __initdata struct kmem_cache boot_kmem_cache,
+               boot_kmem_cache_node;
++      int cpu;
++
++      for_each_possible_cpu(cpu) {
++              raw_spin_lock_init(&per_cpu(slub_free_list, cpu).lock);
++              INIT_LIST_HEAD(&per_cpu(slub_free_list, cpu).list);
++      }
+       if (debug_guardpage_minorder())
+               slub_max_order = 0;
+@@ -4320,7 +4396,7 @@ static int validate_slab_node(struct kme
+       struct page *page;
+       unsigned long flags;
+-      spin_lock_irqsave(&n->list_lock, flags);
++      raw_spin_lock_irqsave(&n->list_lock, flags);
+       list_for_each_entry(page, &n->partial, lru) {
+               validate_slab_slab(s, page, map);
+@@ -4342,7 +4418,7 @@ static int validate_slab_node(struct kme
+                      s->name, count, atomic_long_read(&n->nr_slabs));
+ out:
+-      spin_unlock_irqrestore(&n->list_lock, flags);
++      raw_spin_unlock_irqrestore(&n->list_lock, flags);
+       return count;
+ }
+@@ -4530,12 +4606,12 @@ static int list_locations(struct kmem_ca
+               if (!atomic_long_read(&n->nr_slabs))
+                       continue;
+-              spin_lock_irqsave(&n->list_lock, flags);
++              raw_spin_lock_irqsave(&n->list_lock, flags);
+               list_for_each_entry(page, &n->partial, lru)
+                       process_slab(&t, s, page, alloc, map);
+               list_for_each_entry(page, &n->full, lru)
+                       process_slab(&t, s, page, alloc, map);
+-              spin_unlock_irqrestore(&n->list_lock, flags);
++              raw_spin_unlock_irqrestore(&n->list_lock, flags);
+       }
+       for (i = 0; i < t.count; i++) {
diff --git a/patches/features/all/rt/mm-make-vmstat-rt-aware.patch b/patches/features/all/rt/mm-make-vmstat-rt-aware.patch
new file mode 100644 (file)
index 0000000..0eb093e
--- /dev/null
@@ -0,0 +1,137 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:30:13 -0500
+Subject: mm/vmstat: Protect per cpu variables with preempt disable on RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Disable preemption on -RT for the vmstat code. On vanila the code runs in
+IRQ-off regions while on -RT it is not. "preempt_disable" ensures that the
+same ressources is not updated in parallel due to preemption.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/vmstat.h |    4 ++++
+ mm/vmstat.c            |   12 ++++++++++++
+ 2 files changed, 16 insertions(+)
+
+--- a/include/linux/vmstat.h
++++ b/include/linux/vmstat.h
+@@ -33,7 +33,9 @@ DECLARE_PER_CPU(struct vm_event_state, v
+  */
+ static inline void __count_vm_event(enum vm_event_item item)
+ {
++      preempt_disable_rt();
+       raw_cpu_inc(vm_event_states.event[item]);
++      preempt_enable_rt();
+ }
+ static inline void count_vm_event(enum vm_event_item item)
+@@ -43,7 +45,9 @@ static inline void count_vm_event(enum v
+ static inline void __count_vm_events(enum vm_event_item item, long delta)
+ {
++      preempt_disable_rt();
+       raw_cpu_add(vm_event_states.event[item], delta);
++      preempt_enable_rt();
+ }
+ static inline void count_vm_events(enum vm_event_item item, long delta)
+--- a/mm/vmstat.c
++++ b/mm/vmstat.c
+@@ -245,6 +245,7 @@ void __mod_zone_page_state(struct zone *
+       long x;
+       long t;
++      preempt_disable_rt();
+       x = delta + __this_cpu_read(*p);
+       t = __this_cpu_read(pcp->stat_threshold);
+@@ -254,6 +255,7 @@ void __mod_zone_page_state(struct zone *
+               x = 0;
+       }
+       __this_cpu_write(*p, x);
++      preempt_enable_rt();
+ }
+ EXPORT_SYMBOL(__mod_zone_page_state);
+@@ -265,6 +267,7 @@ void __mod_node_page_state(struct pglist
+       long x;
+       long t;
++      preempt_disable_rt();
+       x = delta + __this_cpu_read(*p);
+       t = __this_cpu_read(pcp->stat_threshold);
+@@ -274,6 +277,7 @@ void __mod_node_page_state(struct pglist
+               x = 0;
+       }
+       __this_cpu_write(*p, x);
++      preempt_enable_rt();
+ }
+ EXPORT_SYMBOL(__mod_node_page_state);
+@@ -306,6 +310,7 @@ void __inc_zone_state(struct zone *zone,
+       s8 __percpu *p = pcp->vm_stat_diff + item;
+       s8 v, t;
++      preempt_disable_rt();
+       v = __this_cpu_inc_return(*p);
+       t = __this_cpu_read(pcp->stat_threshold);
+       if (unlikely(v > t)) {
+@@ -314,6 +319,7 @@ void __inc_zone_state(struct zone *zone,
+               zone_page_state_add(v + overstep, zone, item);
+               __this_cpu_write(*p, -overstep);
+       }
++      preempt_enable_rt();
+ }
+ void __inc_node_state(struct pglist_data *pgdat, enum node_stat_item item)
+@@ -322,6 +328,7 @@ void __inc_node_state(struct pglist_data
+       s8 __percpu *p = pcp->vm_node_stat_diff + item;
+       s8 v, t;
++      preempt_disable_rt();
+       v = __this_cpu_inc_return(*p);
+       t = __this_cpu_read(pcp->stat_threshold);
+       if (unlikely(v > t)) {
+@@ -330,6 +337,7 @@ void __inc_node_state(struct pglist_data
+               node_page_state_add(v + overstep, pgdat, item);
+               __this_cpu_write(*p, -overstep);
+       }
++      preempt_enable_rt();
+ }
+ void __inc_zone_page_state(struct page *page, enum zone_stat_item item)
+@@ -350,6 +358,7 @@ void __dec_zone_state(struct zone *zone,
+       s8 __percpu *p = pcp->vm_stat_diff + item;
+       s8 v, t;
++      preempt_disable_rt();
+       v = __this_cpu_dec_return(*p);
+       t = __this_cpu_read(pcp->stat_threshold);
+       if (unlikely(v < - t)) {
+@@ -358,6 +367,7 @@ void __dec_zone_state(struct zone *zone,
+               zone_page_state_add(v - overstep, zone, item);
+               __this_cpu_write(*p, overstep);
+       }
++      preempt_enable_rt();
+ }
+ void __dec_node_state(struct pglist_data *pgdat, enum node_stat_item item)
+@@ -366,6 +376,7 @@ void __dec_node_state(struct pglist_data
+       s8 __percpu *p = pcp->vm_node_stat_diff + item;
+       s8 v, t;
++      preempt_disable_rt();
+       v = __this_cpu_dec_return(*p);
+       t = __this_cpu_read(pcp->stat_threshold);
+       if (unlikely(v < - t)) {
+@@ -374,6 +385,7 @@ void __dec_node_state(struct pglist_data
+               node_page_state_add(v - overstep, pgdat, item);
+               __this_cpu_write(*p, overstep);
+       }
++      preempt_enable_rt();
+ }
+ void __dec_zone_page_state(struct page *page, enum zone_stat_item item)
diff --git a/patches/features/all/rt/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch b/patches/features/all/rt/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch
new file mode 100644 (file)
index 0000000..99423f4
--- /dev/null
@@ -0,0 +1,69 @@
+From: Yang Shi <yang.shi@windriver.com>
+Subject: mm/memcontrol: Don't call schedule_work_on in preemption disabled context
+Date: Wed, 30 Oct 2013 11:48:33 -0700
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The following trace is triggered when running ltp oom test cases:
+
+BUG: sleeping function called from invalid context at kernel/rtmutex.c:659
+in_atomic(): 1, irqs_disabled(): 0, pid: 17188, name: oom03
+Preemption disabled at:[<ffffffff8112ba70>] mem_cgroup_reclaim+0x90/0xe0
+
+CPU: 2 PID: 17188 Comm: oom03 Not tainted 3.10.10-rt3 #2
+Hardware name: Intel Corporation Calpella platform/MATXM-CORE-411-B, BIOS 4.6.3 08/18/2010
+ffff88007684d730 ffff880070df9b58 ffffffff8169918d ffff880070df9b70
+ffffffff8106db31 ffff88007688b4a0 ffff880070df9b88 ffffffff8169d9c0
+ffff88007688b4a0 ffff880070df9bc8 ffffffff81059da1 0000000170df9bb0
+Call Trace:
+[<ffffffff8169918d>] dump_stack+0x19/0x1b
+[<ffffffff8106db31>] __might_sleep+0xf1/0x170
+[<ffffffff8169d9c0>] rt_spin_lock+0x20/0x50
+[<ffffffff81059da1>] queue_work_on+0x61/0x100
+[<ffffffff8112b361>] drain_all_stock+0xe1/0x1c0
+[<ffffffff8112ba70>] mem_cgroup_reclaim+0x90/0xe0
+[<ffffffff8112beda>] __mem_cgroup_try_charge+0x41a/0xc40
+[<ffffffff810f1c91>] ? release_pages+0x1b1/0x1f0
+[<ffffffff8106f200>] ? sched_exec+0x40/0xb0
+[<ffffffff8112cc87>] mem_cgroup_charge_common+0x37/0x70
+[<ffffffff8112e2c6>] mem_cgroup_newpage_charge+0x26/0x30
+[<ffffffff8110af68>] handle_pte_fault+0x618/0x840
+[<ffffffff8103ecf6>] ? unpin_current_cpu+0x16/0x70
+[<ffffffff81070f94>] ? migrate_enable+0xd4/0x200
+[<ffffffff8110cde5>] handle_mm_fault+0x145/0x1e0
+[<ffffffff810301e1>] __do_page_fault+0x1a1/0x4c0
+[<ffffffff8169c9eb>] ? preempt_schedule_irq+0x4b/0x70
+[<ffffffff8169e3b7>] ? retint_kernel+0x37/0x40
+[<ffffffff8103053e>] do_page_fault+0xe/0x10
+[<ffffffff8169e4c2>] page_fault+0x22/0x30
+
+So, to prevent schedule_work_on from being called in preempt disabled context,
+replace the pair of get/put_cpu() to get/put_cpu_light().
+
+
+Signed-off-by: Yang Shi <yang.shi@windriver.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+
+ mm/memcontrol.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/mm/memcontrol.c
++++ b/mm/memcontrol.c
+@@ -1792,7 +1792,7 @@ static void drain_all_stock(struct mem_c
+               return;
+       /* Notify other cpus that system-wide "drain" is running */
+       get_online_cpus();
+-      curcpu = get_cpu();
++      curcpu = get_cpu_light();
+       for_each_online_cpu(cpu) {
+               struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu);
+               struct mem_cgroup *memcg;
+@@ -1809,7 +1809,7 @@ static void drain_all_stock(struct mem_c
+                               schedule_work_on(cpu, &stock->work);
+               }
+       }
+-      put_cpu();
++      put_cpu_light();
+       put_online_cpus();
+       mutex_unlock(&percpu_charge_mutex);
+ }
diff --git a/patches/features/all/rt/mm-memcontrol-do_not_disable_irq.patch b/patches/features/all/rt/mm-memcontrol-do_not_disable_irq.patch
new file mode 100644 (file)
index 0000000..38dcf52
--- /dev/null
@@ -0,0 +1,102 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Subject: mm/memcontrol: Replace local_irq_disable with local locks
+Date: Wed, 28 Jan 2015 17:14:16 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+There are a few local_irq_disable() which then take sleeping locks. This
+patch converts them local locks.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ mm/memcontrol.c |   20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+--- a/mm/memcontrol.c
++++ b/mm/memcontrol.c
+@@ -67,6 +67,7 @@
+ #include <net/sock.h>
+ #include <net/ip.h>
+ #include "slab.h"
++#include <linux/locallock.h>
+ #include <asm/uaccess.h>
+@@ -92,6 +93,8 @@ int do_swap_account __read_mostly;
+ #define do_swap_account               0
+ #endif
++static DEFINE_LOCAL_IRQ_LOCK(event_lock);
++
+ /* Whether legacy memory+swap accounting is active */
+ static bool do_memsw_account(void)
+ {
+@@ -4553,12 +4556,12 @@ static int mem_cgroup_move_account(struc
+       ret = 0;
+-      local_irq_disable();
++      local_lock_irq(event_lock);
+       mem_cgroup_charge_statistics(to, page, compound, nr_pages);
+       memcg_check_events(to, page);
+       mem_cgroup_charge_statistics(from, page, compound, -nr_pages);
+       memcg_check_events(from, page);
+-      local_irq_enable();
++      local_unlock_irq(event_lock);
+ out_unlock:
+       unlock_page(page);
+ out:
+@@ -5433,10 +5436,10 @@ void mem_cgroup_commit_charge(struct pag
+       commit_charge(page, memcg, lrucare);
+-      local_irq_disable();
++      local_lock_irq(event_lock);
+       mem_cgroup_charge_statistics(memcg, page, compound, nr_pages);
+       memcg_check_events(memcg, page);
+-      local_irq_enable();
++      local_unlock_irq(event_lock);
+       if (do_memsw_account() && PageSwapCache(page)) {
+               swp_entry_t entry = { .val = page_private(page) };
+@@ -5492,14 +5495,14 @@ static void uncharge_batch(struct mem_cg
+               memcg_oom_recover(memcg);
+       }
+-      local_irq_save(flags);
++      local_lock_irqsave(event_lock, flags);
+       __this_cpu_sub(memcg->stat->count[MEM_CGROUP_STAT_RSS], nr_anon);
+       __this_cpu_sub(memcg->stat->count[MEM_CGROUP_STAT_CACHE], nr_file);
+       __this_cpu_sub(memcg->stat->count[MEM_CGROUP_STAT_RSS_HUGE], nr_huge);
+       __this_cpu_add(memcg->stat->events[MEM_CGROUP_EVENTS_PGPGOUT], pgpgout);
+       __this_cpu_add(memcg->stat->nr_page_events, nr_pages);
+       memcg_check_events(memcg, dummy_page);
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(event_lock, flags);
+       if (!mem_cgroup_is_root(memcg))
+               css_put_many(&memcg->css, nr_pages);
+@@ -5837,6 +5840,7 @@ void mem_cgroup_swapout(struct page *pag
+ {
+       struct mem_cgroup *memcg, *swap_memcg;
+       unsigned short oldid;
++      unsigned long flags;
+       VM_BUG_ON_PAGE(PageLRU(page), page);
+       VM_BUG_ON_PAGE(page_count(page), page);
+@@ -5877,12 +5881,16 @@ void mem_cgroup_swapout(struct page *pag
+        * important here to have the interrupts disabled because it is the
+        * only synchronisation we have for udpating the per-CPU variables.
+        */
++      local_lock_irqsave(event_lock, flags);
++#ifndef CONFIG_PREEMPT_RT_BASE
+       VM_BUG_ON(!irqs_disabled());
++#endif
+       mem_cgroup_charge_statistics(memcg, page, false, -1);
+       memcg_check_events(memcg, page);
+       if (!mem_cgroup_is_root(memcg))
+               css_put(&memcg->css);
++      local_unlock_irqrestore(event_lock, flags);
+ }
+ /*
diff --git a/patches/features/all/rt/mm-memcontrol-mem_cgroup_migrate-replace-another-loc.patch b/patches/features/all/rt/mm-memcontrol-mem_cgroup_migrate-replace-another-loc.patch
new file mode 100644 (file)
index 0000000..1ef02b1
--- /dev/null
@@ -0,0 +1,30 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sun, 5 Jun 2016 08:11:13 +0200
+Subject: [PATCH] mm/memcontrol: mem_cgroup_migrate() - replace another
+ local_irq_disable() w. local_lock_irq()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+v4.6 grew a local_irq_disable() in mm/memcontrol.c::mem_cgroup_migrate().
+Convert it to use the existing local lock (event_lock) like the others.
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ mm/memcontrol.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/mm/memcontrol.c
++++ b/mm/memcontrol.c
+@@ -5657,10 +5657,10 @@ void mem_cgroup_migrate(struct page *old
+       commit_charge(newpage, memcg, false);
+-      local_irq_save(flags);
++      local_lock_irqsave(event_lock, flags);
+       mem_cgroup_charge_statistics(memcg, newpage, compound, nr_pages);
+       memcg_check_events(memcg, newpage);
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(event_lock, flags);
+ }
+ DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key);
diff --git a/patches/features/all/rt/mm-page-alloc-use-local-lock-on-target-cpu.patch b/patches/features/all/rt/mm-page-alloc-use-local-lock-on-target-cpu.patch
new file mode 100644 (file)
index 0000000..28cc2a7
--- /dev/null
@@ -0,0 +1,28 @@
+Subject: mm: page_alloc: Use local_lock_on() instead of plain spinlock
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 27 Sep 2012 11:11:46 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The plain spinlock while sufficient does not update the local_lock
+internals. Use a proper local_lock function instead to ease debugging.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ mm/page_alloc.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -286,9 +286,9 @@ static DEFINE_LOCAL_IRQ_LOCK(pa_lock);
+ #ifdef CONFIG_PREEMPT_RT_BASE
+ # define cpu_lock_irqsave(cpu, flags)         \
+-      spin_lock_irqsave(&per_cpu(pa_lock, cpu).lock, flags)
++      local_lock_irqsave_on(pa_lock, flags, cpu)
+ # define cpu_unlock_irqrestore(cpu, flags)    \
+-      spin_unlock_irqrestore(&per_cpu(pa_lock, cpu).lock, flags)
++      local_unlock_irqrestore_on(pa_lock, flags, cpu)
+ #else
+ # define cpu_lock_irqsave(cpu, flags)         local_irq_save(flags)
+ # define cpu_unlock_irqrestore(cpu, flags)    local_irq_restore(flags)
diff --git a/patches/features/all/rt/mm-page_alloc-reduce-lock-sections-further.patch b/patches/features/all/rt/mm-page_alloc-reduce-lock-sections-further.patch
new file mode 100644 (file)
index 0000000..d38156d
--- /dev/null
@@ -0,0 +1,205 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Fri Jul 3 08:44:37 2009 -0500
+Subject: mm: page_alloc: Reduce lock sections further
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Split out the pages which are to be freed into a separate list and
+call free_pages_bulk() outside of the percpu page allocator locks.
+
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ mm/page_alloc.c |   94 +++++++++++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 66 insertions(+), 28 deletions(-)
+
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -1085,7 +1085,7 @@ static bool bulkfree_pcp_prepare(struct
+ #endif /* CONFIG_DEBUG_VM */
+ /*
+- * Frees a number of pages from the PCP lists
++ * Frees a number of pages which have been collected from the pcp lists.
+  * Assumes all pages on list are in same zone, and of same order.
+  * count is the number of pages to free.
+  *
+@@ -1096,19 +1096,58 @@ static bool bulkfree_pcp_prepare(struct
+  * pinned" detection logic.
+  */
+ static void free_pcppages_bulk(struct zone *zone, int count,
+-                                      struct per_cpu_pages *pcp)
++                             struct list_head *list)
+ {
+-      int migratetype = 0;
+-      int batch_free = 0;
+       unsigned long nr_scanned;
+       bool isolated_pageblocks;
++      unsigned long flags;
++
++      spin_lock_irqsave(&zone->lock, flags);
+-      spin_lock(&zone->lock);
+       isolated_pageblocks = has_isolate_pageblock(zone);
+       nr_scanned = node_page_state(zone->zone_pgdat, NR_PAGES_SCANNED);
+       if (nr_scanned)
+               __mod_node_page_state(zone->zone_pgdat, NR_PAGES_SCANNED, -nr_scanned);
++      while (!list_empty(list)) {
++              struct page *page;
++              int mt; /* migratetype of the to-be-freed page */
++
++              page = list_first_entry(list, struct page, lru);
++              /* must delete as __free_one_page list manipulates */
++              list_del(&page->lru);
++
++              mt = get_pcppage_migratetype(page);
++              /* MIGRATE_ISOLATE page should not go to pcplists */
++              VM_BUG_ON_PAGE(is_migrate_isolate(mt), page);
++              /* Pageblock could have been isolated meanwhile */
++              if (unlikely(isolated_pageblocks))
++                      mt = get_pageblock_migratetype(page);
++
++              if (bulkfree_pcp_prepare(page))
++                      continue;
++
++              __free_one_page(page, page_to_pfn(page), zone, 0, mt);
++              trace_mm_page_pcpu_drain(page, 0, mt);
++              count--;
++      }
++      WARN_ON(count != 0);
++      spin_unlock_irqrestore(&zone->lock, flags);
++}
++
++/*
++ * Moves a number of pages from the PCP lists to free list which
++ * is freed outside of the locked region.
++ *
++ * Assumes all pages on list are in same zone, and of same order.
++ * count is the number of pages to free.
++ */
++static void isolate_pcp_pages(int count, struct per_cpu_pages *src,
++                            struct list_head *dst)
++{
++      int migratetype = 0;
++      int batch_free = 0;
++
+       while (count) {
+               struct page *page;
+               struct list_head *list;
+@@ -1124,7 +1163,7 @@ static void free_pcppages_bulk(struct zo
+                       batch_free++;
+                       if (++migratetype == MIGRATE_PCPTYPES)
+                               migratetype = 0;
+-                      list = &pcp->lists[migratetype];
++                      list = &src->lists[migratetype];
+               } while (list_empty(list));
+               /* This is the only non-empty list. Free them all. */
+@@ -1132,27 +1171,12 @@ static void free_pcppages_bulk(struct zo
+                       batch_free = count;
+               do {
+-                      int mt; /* migratetype of the to-be-freed page */
+-
+                       page = list_last_entry(list, struct page, lru);
+-                      /* must delete as __free_one_page list manipulates */
+                       list_del(&page->lru);
+-                      mt = get_pcppage_migratetype(page);
+-                      /* MIGRATE_ISOLATE page should not go to pcplists */
+-                      VM_BUG_ON_PAGE(is_migrate_isolate(mt), page);
+-                      /* Pageblock could have been isolated meanwhile */
+-                      if (unlikely(isolated_pageblocks))
+-                              mt = get_pageblock_migratetype(page);
+-
+-                      if (bulkfree_pcp_prepare(page))
+-                              continue;
+-
+-                      __free_one_page(page, page_to_pfn(page), zone, 0, mt);
+-                      trace_mm_page_pcpu_drain(page, 0, mt);
++                      list_add(&page->lru, dst);
+               } while (--count && --batch_free && !list_empty(list));
+       }
+-      spin_unlock(&zone->lock);
+ }
+ static void free_one_page(struct zone *zone,
+@@ -1161,7 +1185,9 @@ static void free_one_page(struct zone *z
+                               int migratetype)
+ {
+       unsigned long nr_scanned;
+-      spin_lock(&zone->lock);
++      unsigned long flags;
++
++      spin_lock_irqsave(&zone->lock, flags);
+       nr_scanned = node_page_state(zone->zone_pgdat, NR_PAGES_SCANNED);
+       if (nr_scanned)
+               __mod_node_page_state(zone->zone_pgdat, NR_PAGES_SCANNED, -nr_scanned);
+@@ -1171,7 +1197,7 @@ static void free_one_page(struct zone *z
+               migratetype = get_pfnblock_migratetype(page, pfn);
+       }
+       __free_one_page(page, pfn, zone, order, migratetype);
+-      spin_unlock(&zone->lock);
++      spin_unlock_irqrestore(&zone->lock, flags);
+ }
+ static void __meminit __init_single_page(struct page *page, unsigned long pfn,
+@@ -2259,16 +2285,18 @@ static int rmqueue_bulk(struct zone *zon
+ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
+ {
+       unsigned long flags;
++      LIST_HEAD(dst);
+       int to_drain, batch;
+       local_lock_irqsave(pa_lock, flags);
+       batch = READ_ONCE(pcp->batch);
+       to_drain = min(pcp->count, batch);
+       if (to_drain > 0) {
+-              free_pcppages_bulk(zone, to_drain, pcp);
++              isolate_pcp_pages(to_drain, pcp, &dst);
+               pcp->count -= to_drain;
+       }
+       local_unlock_irqrestore(pa_lock, flags);
++      free_pcppages_bulk(zone, to_drain, &dst);
+ }
+ #endif
+@@ -2284,16 +2312,21 @@ static void drain_pages_zone(unsigned in
+       unsigned long flags;
+       struct per_cpu_pageset *pset;
+       struct per_cpu_pages *pcp;
++      LIST_HEAD(dst);
++      int count;
+       cpu_lock_irqsave(cpu, flags);
+       pset = per_cpu_ptr(zone->pageset, cpu);
+       pcp = &pset->pcp;
+-      if (pcp->count) {
+-              free_pcppages_bulk(zone, pcp->count, pcp);
++      count = pcp->count;
++      if (count) {
++              isolate_pcp_pages(count, pcp, &dst);
+               pcp->count = 0;
+       }
+       cpu_unlock_irqrestore(cpu, flags);
++      if (count)
++              free_pcppages_bulk(zone, count, &dst);
+ }
+ /*
+@@ -2475,8 +2508,13 @@ void free_hot_cold_page(struct page *pag
+       pcp->count++;
+       if (pcp->count >= pcp->high) {
+               unsigned long batch = READ_ONCE(pcp->batch);
+-              free_pcppages_bulk(zone, batch, pcp);
++              LIST_HEAD(dst);
++
++              isolate_pcp_pages(batch, pcp, &dst);
+               pcp->count -= batch;
++              local_unlock_irqrestore(pa_lock, flags);
++              free_pcppages_bulk(zone, batch, &dst);
++              return;
+       }
+ out:
diff --git a/patches/features/all/rt/mm-page_alloc-rt-friendly-per-cpu-pages.patch b/patches/features/all/rt/mm-page_alloc-rt-friendly-per-cpu-pages.patch
new file mode 100644 (file)
index 0000000..870ca86
--- /dev/null
@@ -0,0 +1,204 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:37 -0500
+Subject: mm: page_alloc: rt-friendly per-cpu pages
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+rt-friendly per-cpu pages: convert the irqs-off per-cpu locking
+method into a preemptible, explicit-per-cpu-locks method.
+
+Contains fixes from:
+        Peter Zijlstra <a.p.zijlstra@chello.nl>
+        Thomas Gleixner <tglx@linutronix.de>
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ mm/page_alloc.c |   57 ++++++++++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 41 insertions(+), 16 deletions(-)
+
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -61,6 +61,7 @@
+ #include <linux/page_ext.h>
+ #include <linux/hugetlb.h>
+ #include <linux/sched/rt.h>
++#include <linux/locallock.h>
+ #include <linux/page_owner.h>
+ #include <linux/kthread.h>
+ #include <linux/memcontrol.h>
+@@ -281,6 +282,18 @@ EXPORT_SYMBOL(nr_node_ids);
+ EXPORT_SYMBOL(nr_online_nodes);
+ #endif
++static DEFINE_LOCAL_IRQ_LOCK(pa_lock);
++
++#ifdef CONFIG_PREEMPT_RT_BASE
++# define cpu_lock_irqsave(cpu, flags)         \
++      spin_lock_irqsave(&per_cpu(pa_lock, cpu).lock, flags)
++# define cpu_unlock_irqrestore(cpu, flags)    \
++      spin_unlock_irqrestore(&per_cpu(pa_lock, cpu).lock, flags)
++#else
++# define cpu_lock_irqsave(cpu, flags)         local_irq_save(flags)
++# define cpu_unlock_irqrestore(cpu, flags)    local_irq_restore(flags)
++#endif
++
+ int page_group_by_mobility_disabled __read_mostly;
+ #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
+@@ -1244,10 +1257,10 @@ static void __free_pages_ok(struct page
+               return;
+       migratetype = get_pfnblock_migratetype(page, pfn);
+-      local_irq_save(flags);
++      local_lock_irqsave(pa_lock, flags);
+       __count_vm_events(PGFREE, 1 << order);
+       free_one_page(page_zone(page), page, pfn, order, migratetype);
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pa_lock, flags);
+ }
+ static void __init __free_pages_boot_core(struct page *page, unsigned int order)
+@@ -2248,14 +2261,14 @@ void drain_zone_pages(struct zone *zone,
+       unsigned long flags;
+       int to_drain, batch;
+-      local_irq_save(flags);
++      local_lock_irqsave(pa_lock, flags);
+       batch = READ_ONCE(pcp->batch);
+       to_drain = min(pcp->count, batch);
+       if (to_drain > 0) {
+               free_pcppages_bulk(zone, to_drain, pcp);
+               pcp->count -= to_drain;
+       }
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pa_lock, flags);
+ }
+ #endif
+@@ -2272,7 +2285,7 @@ static void drain_pages_zone(unsigned in
+       struct per_cpu_pageset *pset;
+       struct per_cpu_pages *pcp;
+-      local_irq_save(flags);
++      cpu_lock_irqsave(cpu, flags);
+       pset = per_cpu_ptr(zone->pageset, cpu);
+       pcp = &pset->pcp;
+@@ -2280,7 +2293,7 @@ static void drain_pages_zone(unsigned in
+               free_pcppages_bulk(zone, pcp->count, pcp);
+               pcp->count = 0;
+       }
+-      local_irq_restore(flags);
++      cpu_unlock_irqrestore(cpu, flags);
+ }
+ /*
+@@ -2366,8 +2379,17 @@ void drain_all_pages(struct zone *zone)
+               else
+                       cpumask_clear_cpu(cpu, &cpus_with_pcps);
+       }
++#ifndef CONFIG_PREEMPT_RT_BASE
+       on_each_cpu_mask(&cpus_with_pcps, (smp_call_func_t) drain_local_pages,
+                                                               zone, 1);
++#else
++      for_each_cpu(cpu, &cpus_with_pcps) {
++              if (zone)
++                      drain_pages_zone(cpu, zone);
++              else
++                      drain_pages(cpu);
++      }
++#endif
+ }
+ #ifdef CONFIG_HIBERNATION
+@@ -2427,7 +2449,7 @@ void free_hot_cold_page(struct page *pag
+       migratetype = get_pfnblock_migratetype(page, pfn);
+       set_pcppage_migratetype(page, migratetype);
+-      local_irq_save(flags);
++      local_lock_irqsave(pa_lock, flags);
+       __count_vm_event(PGFREE);
+       /*
+@@ -2458,7 +2480,7 @@ void free_hot_cold_page(struct page *pag
+       }
+ out:
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pa_lock, flags);
+ }
+ /*
+@@ -2600,7 +2622,7 @@ struct page *buffered_rmqueue(struct zon
+               struct per_cpu_pages *pcp;
+               struct list_head *list;
+-              local_irq_save(flags);
++              local_lock_irqsave(pa_lock, flags);
+               do {
+                       pcp = &this_cpu_ptr(zone->pageset)->pcp;
+                       list = &pcp->lists[migratetype];
+@@ -2627,7 +2649,7 @@ struct page *buffered_rmqueue(struct zon
+                * allocate greater than order-1 page units with __GFP_NOFAIL.
+                */
+               WARN_ON_ONCE((gfp_flags & __GFP_NOFAIL) && (order > 1));
+-              spin_lock_irqsave(&zone->lock, flags);
++              local_spin_lock_irqsave(pa_lock, &zone->lock, flags);
+               do {
+                       page = NULL;
+@@ -2639,22 +2661,24 @@ struct page *buffered_rmqueue(struct zon
+                       if (!page)
+                               page = __rmqueue(zone, order, migratetype);
+               } while (page && check_new_pages(page, order));
+-              spin_unlock(&zone->lock);
+-              if (!page)
++              if (!page) {
++                      spin_unlock(&zone->lock);
+                       goto failed;
++              }
+               __mod_zone_freepage_state(zone, -(1 << order),
+                                         get_pcppage_migratetype(page));
++              spin_unlock(&zone->lock);
+       }
+       __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order);
+       zone_statistics(preferred_zone, zone, gfp_flags);
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pa_lock, flags);
+       VM_BUG_ON_PAGE(bad_range(zone, page), page);
+       return page;
+ failed:
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pa_lock, flags);
+       return NULL;
+ }
+@@ -6557,6 +6581,7 @@ static int page_alloc_cpu_notify(struct
+ void __init page_alloc_init(void)
+ {
+       hotcpu_notifier(page_alloc_cpu_notify, 0);
++      local_irq_lock_init(pa_lock);
+ }
+ /*
+@@ -7385,7 +7410,7 @@ void zone_pcp_reset(struct zone *zone)
+       struct per_cpu_pageset *pset;
+       /* avoid races with drain_pages()  */
+-      local_irq_save(flags);
++      local_lock_irqsave(pa_lock, flags);
+       if (zone->pageset != &boot_pageset) {
+               for_each_online_cpu(cpu) {
+                       pset = per_cpu_ptr(zone->pageset, cpu);
+@@ -7394,7 +7419,7 @@ void zone_pcp_reset(struct zone *zone)
+               free_percpu(zone->pageset);
+               zone->pageset = &boot_pageset;
+       }
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pa_lock, flags);
+ }
+ #ifdef CONFIG_MEMORY_HOTREMOVE
diff --git a/patches/features/all/rt/mm-perform-lru_add_drain_all-remotely.patch b/patches/features/all/rt/mm-perform-lru_add_drain_all-remotely.patch
new file mode 100644 (file)
index 0000000..a1bc816
--- /dev/null
@@ -0,0 +1,111 @@
+From: Luiz Capitulino <lcapitulino@redhat.com>
+Date: Fri, 27 May 2016 15:03:28 +0200
+Subject: [PATCH] mm: perform lru_add_drain_all() remotely
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+lru_add_drain_all() works by scheduling lru_add_drain_cpu() to run
+on all CPUs that have non-empty LRU pagevecs and then waiting for
+the scheduled work to complete. However, workqueue threads may never
+have the chance to run on a CPU that's running a SCHED_FIFO task.
+This causes lru_add_drain_all() to block forever.
+
+This commit solves this problem by changing lru_add_drain_all()
+to drain the LRU pagevecs of remote CPUs. This is done by grabbing
+swapvec_lock and calling lru_add_drain_cpu().
+
+PS: This is based on an idea and initial implementation by
+    Rik van Riel.
+
+Signed-off-by: Rik van Riel <riel@redhat.com>
+Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ mm/swap.c |   42 ++++++++++++++++++++++++++++++++----------
+ 1 file changed, 32 insertions(+), 10 deletions(-)
+
+--- a/mm/swap.c
++++ b/mm/swap.c
+@@ -597,9 +597,15 @@ void lru_add_drain_cpu(int cpu)
+               unsigned long flags;
+               /* No harm done if a racing interrupt already did this */
++#ifdef CONFIG_PREEMPT_RT_BASE
++              local_lock_irqsave_on(rotate_lock, flags, cpu);
++              pagevec_move_tail(pvec);
++              local_unlock_irqrestore_on(rotate_lock, flags, cpu);
++#else
+               local_lock_irqsave(rotate_lock, flags);
+               pagevec_move_tail(pvec);
+               local_unlock_irqrestore(rotate_lock, flags);
++#endif
+       }
+       pvec = &per_cpu(lru_deactivate_file_pvecs, cpu);
+@@ -667,12 +673,15 @@ void lru_add_drain(void)
+       local_unlock_cpu(swapvec_lock);
+ }
+-static void lru_add_drain_per_cpu(struct work_struct *dummy)
++#ifdef CONFIG_PREEMPT_RT_BASE
++static inline void remote_lru_add_drain(int cpu, struct cpumask *has_work)
+ {
+-      lru_add_drain();
++      local_lock_on(swapvec_lock, cpu);
++      lru_add_drain_cpu(cpu);
++      local_unlock_on(swapvec_lock, cpu);
+ }
+-static DEFINE_PER_CPU(struct work_struct, lru_add_drain_work);
++#else
+ /*
+  * lru_add_drain_wq is used to do lru_add_drain_all() from a WQ_MEM_RECLAIM
+@@ -692,6 +701,22 @@ static int __init lru_init(void)
+ }
+ early_initcall(lru_init);
++static void lru_add_drain_per_cpu(struct work_struct *dummy)
++{
++      lru_add_drain();
++}
++
++static DEFINE_PER_CPU(struct work_struct, lru_add_drain_work);
++static inline void remote_lru_add_drain(int cpu, struct cpumask *has_work)
++{
++      struct work_struct *work = &per_cpu(lru_add_drain_work, cpu);
++
++      INIT_WORK(work, lru_add_drain_per_cpu);
++      queue_work_on(cpu, lru_add_drain_wq, work);
++      cpumask_set_cpu(cpu, has_work);
++}
++#endif
++
+ void lru_add_drain_all(void)
+ {
+       static DEFINE_MUTEX(lock);
+@@ -703,21 +728,18 @@ void lru_add_drain_all(void)
+       cpumask_clear(&has_work);
+       for_each_online_cpu(cpu) {
+-              struct work_struct *work = &per_cpu(lru_add_drain_work, cpu);
+-
+               if (pagevec_count(&per_cpu(lru_add_pvec, cpu)) ||
+                   pagevec_count(&per_cpu(lru_rotate_pvecs, cpu)) ||
+                   pagevec_count(&per_cpu(lru_deactivate_file_pvecs, cpu)) ||
+                   pagevec_count(&per_cpu(lru_deactivate_pvecs, cpu)) ||
+-                  need_activate_page_drain(cpu)) {
+-                      INIT_WORK(work, lru_add_drain_per_cpu);
+-                      queue_work_on(cpu, lru_add_drain_wq, work);
+-                      cpumask_set_cpu(cpu, &has_work);
+-              }
++                  need_activate_page_drain(cpu))
++                      remote_lru_add_drain(cpu, &has_work);
+       }
++#ifndef CONFIG_PREEMPT_RT_BASE
+       for_each_cpu(cpu, &has_work)
+               flush_work(&per_cpu(lru_add_drain_work, cpu));
++#endif
+       put_online_cpus();
+       mutex_unlock(&lock);
diff --git a/patches/features/all/rt/mm-protect-activate-switch-mm.patch b/patches/features/all/rt/mm-protect-activate-switch-mm.patch
new file mode 100644 (file)
index 0000000..7c091bd
--- /dev/null
@@ -0,0 +1,72 @@
+From: Yong Zhang <yong.zhang0@gmail.com>
+Date: Tue, 15 May 2012 13:53:56 +0800
+Subject: mm: Protect activate_mm() by preempt_[disable&enable]_rt()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+User preempt_*_rt instead of local_irq_*_rt or otherwise there will be
+warning on ARM like below:
+
+WARNING: at build/linux/kernel/smp.c:459 smp_call_function_many+0x98/0x264()
+Modules linked in:
+[<c0013bb4>] (unwind_backtrace+0x0/0xe4) from [<c001be94>] (warn_slowpath_common+0x4c/0x64)
+[<c001be94>] (warn_slowpath_common+0x4c/0x64) from [<c001bec4>] (warn_slowpath_null+0x18/0x1c)
+[<c001bec4>] (warn_slowpath_null+0x18/0x1c) from [<c0053ff8>](smp_call_function_many+0x98/0x264)
+[<c0053ff8>] (smp_call_function_many+0x98/0x264) from [<c0054364>] (smp_call_function+0x44/0x6c)
+[<c0054364>] (smp_call_function+0x44/0x6c) from [<c0017d50>] (__new_context+0xbc/0x124)
+[<c0017d50>] (__new_context+0xbc/0x124) from [<c009e49c>] (flush_old_exec+0x460/0x5e4)
+[<c009e49c>] (flush_old_exec+0x460/0x5e4) from [<c00d61ac>] (load_elf_binary+0x2e0/0x11ac)
+[<c00d61ac>] (load_elf_binary+0x2e0/0x11ac) from [<c009d060>] (search_binary_handler+0x94/0x2a4)
+[<c009d060>] (search_binary_handler+0x94/0x2a4) from [<c009e8fc>] (do_execve+0x254/0x364)
+[<c009e8fc>] (do_execve+0x254/0x364) from [<c0010e84>] (sys_execve+0x34/0x54)
+[<c0010e84>] (sys_execve+0x34/0x54) from [<c000da00>] (ret_fast_syscall+0x0/0x30)
+---[ end trace 0000000000000002 ]---
+
+The reason is that ARM need irq enabled when doing activate_mm().
+According to mm-protect-activate-switch-mm.patch, actually
+preempt_[disable|enable]_rt() is sufficient.
+
+Inspired-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Link: http://lkml.kernel.org/r/1337061236-1766-1-git-send-email-yong.zhang0@gmail.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ fs/exec.c        |    2 ++
+ mm/mmu_context.c |    2 ++
+ 2 files changed, 4 insertions(+)
+
+--- a/fs/exec.c
++++ b/fs/exec.c
+@@ -1017,12 +1017,14 @@ static int exec_mmap(struct mm_struct *m
+               }
+       }
+       task_lock(tsk);
++      preempt_disable_rt();
+       active_mm = tsk->active_mm;
+       tsk->mm = mm;
+       tsk->active_mm = mm;
+       activate_mm(active_mm, mm);
+       tsk->mm->vmacache_seqnum = 0;
+       vmacache_flush(tsk);
++      preempt_enable_rt();
+       task_unlock(tsk);
+       if (old_mm) {
+               up_read(&old_mm->mmap_sem);
+--- a/mm/mmu_context.c
++++ b/mm/mmu_context.c
+@@ -23,6 +23,7 @@ void use_mm(struct mm_struct *mm)
+       struct task_struct *tsk = current;
+       task_lock(tsk);
++      preempt_disable_rt();
+       active_mm = tsk->active_mm;
+       if (active_mm != mm) {
+               atomic_inc(&mm->mm_count);
+@@ -30,6 +31,7 @@ void use_mm(struct mm_struct *mm)
+       }
+       tsk->mm = mm;
+       switch_mm(active_mm, mm, tsk);
++      preempt_enable_rt();
+       task_unlock(tsk);
+ #ifdef finish_arch_post_lock_switch
+       finish_arch_post_lock_switch();
diff --git a/patches/features/all/rt/mm-rt-kmap-atomic-scheduling.patch b/patches/features/all/rt/mm-rt-kmap-atomic-scheduling.patch
new file mode 100644 (file)
index 0000000..79bad78
--- /dev/null
@@ -0,0 +1,289 @@
+Subject: mm, rt: kmap_atomic scheduling
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Thu, 28 Jul 2011 10:43:51 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+In fact, with migrate_disable() existing one could play games with
+kmap_atomic. You could save/restore the kmap_atomic slots on context
+switch (if there are any in use of course), this should be esp easy now
+that we have a kmap_atomic stack.
+
+Something like the below.. it wants replacing all the preempt_disable()
+stuff with pagefault_disable() && migrate_disable() of course, but then
+you can flip kmaps around like below.
+
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+[dvhart@linux.intel.com: build fix]
+Link: http://lkml.kernel.org/r/1311842631.5890.208.camel@twins
+
+[tglx@linutronix.de: Get rid of the per cpu variable and store the idx
+                    and the pte content right away in the task struct.
+                    Shortens the context switch code. ]
+---
+ arch/x86/kernel/process_32.c |   32 ++++++++++++++++++++++++++++++++
+ arch/x86/mm/highmem_32.c     |   13 ++++++++++---
+ arch/x86/mm/iomap_32.c       |    9 ++++++++-
+ include/linux/highmem.h      |   27 +++++++++++++++++++++++----
+ include/linux/sched.h        |    7 +++++++
+ include/linux/uaccess.h      |    2 ++
+ mm/highmem.c                 |    6 ++++--
+ 7 files changed, 86 insertions(+), 10 deletions(-)
+
+--- a/arch/x86/kernel/process_32.c
++++ b/arch/x86/kernel/process_32.c
+@@ -35,6 +35,7 @@
+ #include <linux/uaccess.h>
+ #include <linux/io.h>
+ #include <linux/kdebug.h>
++#include <linux/highmem.h>
+ #include <asm/pgtable.h>
+ #include <asm/ldt.h>
+@@ -195,6 +196,35 @@ start_thread(struct pt_regs *regs, unsig
+ }
+ EXPORT_SYMBOL_GPL(start_thread);
++#ifdef CONFIG_PREEMPT_RT_FULL
++static void switch_kmaps(struct task_struct *prev_p, struct task_struct *next_p)
++{
++      int i;
++
++      /*
++       * Clear @prev's kmap_atomic mappings
++       */
++      for (i = 0; i < prev_p->kmap_idx; i++) {
++              int idx = i + KM_TYPE_NR * smp_processor_id();
++              pte_t *ptep = kmap_pte - idx;
++
++              kpte_clear_flush(ptep, __fix_to_virt(FIX_KMAP_BEGIN + idx));
++      }
++      /*
++       * Restore @next_p's kmap_atomic mappings
++       */
++      for (i = 0; i < next_p->kmap_idx; i++) {
++              int idx = i + KM_TYPE_NR * smp_processor_id();
++
++              if (!pte_none(next_p->kmap_pte[i]))
++                      set_pte(kmap_pte - idx, next_p->kmap_pte[i]);
++      }
++}
++#else
++static inline void
++switch_kmaps(struct task_struct *prev_p, struct task_struct *next_p) { }
++#endif
++
+ /*
+  *    switch_to(x,y) should switch tasks from x to y.
+@@ -271,6 +301,8 @@ EXPORT_SYMBOL_GPL(start_thread);
+                    task_thread_info(next_p)->flags & _TIF_WORK_CTXSW_NEXT))
+               __switch_to_xtra(prev_p, next_p, tss);
++      switch_kmaps(prev_p, next_p);
++
+       /*
+        * Leave lazy mode, flushing any hypercalls made here.
+        * This must be done before restoring TLS segments so
+--- a/arch/x86/mm/highmem_32.c
++++ b/arch/x86/mm/highmem_32.c
+@@ -32,10 +32,11 @@ EXPORT_SYMBOL(kunmap);
+  */
+ void *kmap_atomic_prot(struct page *page, pgprot_t prot)
+ {
++      pte_t pte = mk_pte(page, prot);
+       unsigned long vaddr;
+       int idx, type;
+-      preempt_disable();
++      preempt_disable_nort();
+       pagefault_disable();
+       if (!PageHighMem(page))
+@@ -45,7 +46,10 @@ void *kmap_atomic_prot(struct page *page
+       idx = type + KM_TYPE_NR*smp_processor_id();
+       vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
+       BUG_ON(!pte_none(*(kmap_pte-idx)));
+-      set_pte(kmap_pte-idx, mk_pte(page, prot));
++#ifdef CONFIG_PREEMPT_RT_FULL
++      current->kmap_pte[type] = pte;
++#endif
++      set_pte(kmap_pte-idx, pte);
+       arch_flush_lazy_mmu_mode();
+       return (void *)vaddr;
+@@ -88,6 +92,9 @@ void __kunmap_atomic(void *kvaddr)
+                * is a bad idea also, in case the page changes cacheability
+                * attributes or becomes a protected page in a hypervisor.
+                */
++#ifdef CONFIG_PREEMPT_RT_FULL
++              current->kmap_pte[type] = __pte(0);
++#endif
+               kpte_clear_flush(kmap_pte-idx, vaddr);
+               kmap_atomic_idx_pop();
+               arch_flush_lazy_mmu_mode();
+@@ -100,7 +107,7 @@ void __kunmap_atomic(void *kvaddr)
+ #endif
+       pagefault_enable();
+-      preempt_enable();
++      preempt_enable_nort();
+ }
+ EXPORT_SYMBOL(__kunmap_atomic);
+--- a/arch/x86/mm/iomap_32.c
++++ b/arch/x86/mm/iomap_32.c
+@@ -56,6 +56,7 @@ EXPORT_SYMBOL_GPL(iomap_free);
+ void *kmap_atomic_prot_pfn(unsigned long pfn, pgprot_t prot)
+ {
++      pte_t pte = pfn_pte(pfn, prot);
+       unsigned long vaddr;
+       int idx, type;
+@@ -65,7 +66,10 @@ void *kmap_atomic_prot_pfn(unsigned long
+       type = kmap_atomic_idx_push();
+       idx = type + KM_TYPE_NR * smp_processor_id();
+       vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
+-      set_pte(kmap_pte - idx, pfn_pte(pfn, prot));
++#ifdef CONFIG_PREEMPT_RT_FULL
++      current->kmap_pte[type] = pte;
++#endif
++      set_pte(kmap_pte - idx, pte);
+       arch_flush_lazy_mmu_mode();
+       return (void *)vaddr;
+@@ -113,6 +117,9 @@ iounmap_atomic(void __iomem *kvaddr)
+                * is a bad idea also, in case the page changes cacheability
+                * attributes or becomes a protected page in a hypervisor.
+                */
++#ifdef CONFIG_PREEMPT_RT_FULL
++              current->kmap_pte[type] = __pte(0);
++#endif
+               kpte_clear_flush(kmap_pte-idx, vaddr);
+               kmap_atomic_idx_pop();
+       }
+--- a/include/linux/highmem.h
++++ b/include/linux/highmem.h
+@@ -86,32 +86,51 @@ static inline void __kunmap_atomic(void
+ #if defined(CONFIG_HIGHMEM) || defined(CONFIG_X86_32)
++#ifndef CONFIG_PREEMPT_RT_FULL
+ DECLARE_PER_CPU(int, __kmap_atomic_idx);
++#endif
+ static inline int kmap_atomic_idx_push(void)
+ {
++#ifndef CONFIG_PREEMPT_RT_FULL
+       int idx = __this_cpu_inc_return(__kmap_atomic_idx) - 1;
+-#ifdef CONFIG_DEBUG_HIGHMEM
++# ifdef CONFIG_DEBUG_HIGHMEM
+       WARN_ON_ONCE(in_irq() && !irqs_disabled());
+       BUG_ON(idx >= KM_TYPE_NR);
+-#endif
++# endif
+       return idx;
++#else
++      current->kmap_idx++;
++      BUG_ON(current->kmap_idx > KM_TYPE_NR);
++      return current->kmap_idx - 1;
++#endif
+ }
+ static inline int kmap_atomic_idx(void)
+ {
++#ifndef CONFIG_PREEMPT_RT_FULL
+       return __this_cpu_read(__kmap_atomic_idx) - 1;
++#else
++      return current->kmap_idx - 1;
++#endif
+ }
+ static inline void kmap_atomic_idx_pop(void)
+ {
+-#ifdef CONFIG_DEBUG_HIGHMEM
++#ifndef CONFIG_PREEMPT_RT_FULL
++# ifdef CONFIG_DEBUG_HIGHMEM
+       int idx = __this_cpu_dec_return(__kmap_atomic_idx);
+       BUG_ON(idx < 0);
+-#else
++# else
+       __this_cpu_dec(__kmap_atomic_idx);
++# endif
++#else
++      current->kmap_idx--;
++# ifdef CONFIG_DEBUG_HIGHMEM
++      BUG_ON(current->kmap_idx < 0);
++# endif
+ #endif
+ }
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -26,6 +26,7 @@ struct sched_param {
+ #include <linux/nodemask.h>
+ #include <linux/mm_types.h>
+ #include <linux/preempt.h>
++#include <asm/kmap_types.h>
+ #include <asm/page.h>
+ #include <asm/ptrace.h>
+@@ -1980,6 +1981,12 @@ struct task_struct {
+       int softirq_nestcnt;
+       unsigned int softirqs_raised;
+ #endif
++#ifdef CONFIG_PREEMPT_RT_FULL
++# if defined CONFIG_HIGHMEM || defined CONFIG_X86_32
++      int kmap_idx;
++      pte_t kmap_pte[KM_TYPE_NR];
++# endif
++#endif
+ #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
+       unsigned long   task_state_change;
+ #endif
+--- a/include/linux/uaccess.h
++++ b/include/linux/uaccess.h
+@@ -24,6 +24,7 @@ static __always_inline void pagefault_di
+  */
+ static inline void pagefault_disable(void)
+ {
++      migrate_disable();
+       pagefault_disabled_inc();
+       /*
+        * make sure to have issued the store before a pagefault
+@@ -40,6 +41,7 @@ static inline void pagefault_enable(void
+        */
+       barrier();
+       pagefault_disabled_dec();
++      migrate_enable();
+ }
+ /*
+--- a/mm/highmem.c
++++ b/mm/highmem.c
+@@ -29,10 +29,11 @@
+ #include <linux/kgdb.h>
+ #include <asm/tlbflush.h>
+-
++#ifndef CONFIG_PREEMPT_RT_FULL
+ #if defined(CONFIG_HIGHMEM) || defined(CONFIG_X86_32)
+ DEFINE_PER_CPU(int, __kmap_atomic_idx);
+ #endif
++#endif
+ /*
+  * Virtual_count is not a pure "count".
+@@ -107,8 +108,9 @@ static inline wait_queue_head_t *get_pkm
+ unsigned long totalhigh_pages __read_mostly;
+ EXPORT_SYMBOL(totalhigh_pages);
+-
++#ifndef CONFIG_PREEMPT_RT_FULL
+ EXPORT_PER_CPU_SYMBOL(__kmap_atomic_idx);
++#endif
+ unsigned int nr_free_highpages (void)
+ {
diff --git a/patches/features/all/rt/mm-scatterlist-dont-disable-irqs-on-RT.patch b/patches/features/all/rt/mm-scatterlist-dont-disable-irqs-on-RT.patch
new file mode 100644 (file)
index 0000000..f276713
--- /dev/null
@@ -0,0 +1,44 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 3 Jul 2009 08:44:34 -0500
+Subject: mm/scatterlist: Do not disable irqs on RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The local_irq_save() is not only used to get things done "fast" but
+also to ensure that in case of SG_MITER_ATOMIC we are in "atomic"
+context for kmap_atomic(). For -RT it is enough to keep pagefault
+disabled (which is currently handled by kmap_atomic()).
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ lib/scatterlist.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/lib/scatterlist.c
++++ b/lib/scatterlist.c
+@@ -620,7 +620,7 @@ void sg_miter_stop(struct sg_mapping_ite
+                       flush_kernel_dcache_page(miter->page);
+               if (miter->__flags & SG_MITER_ATOMIC) {
+-                      WARN_ON_ONCE(preemptible());
++                      WARN_ON_ONCE(!pagefault_disabled());
+                       kunmap_atomic(miter->addr);
+               } else
+                       kunmap(miter->page);
+@@ -664,7 +664,7 @@ size_t sg_copy_buffer(struct scatterlist
+       if (!sg_miter_skip(&miter, skip))
+               return false;
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       while (sg_miter_next(&miter) && offset < buflen) {
+               unsigned int len;
+@@ -681,7 +681,7 @@ size_t sg_copy_buffer(struct scatterlist
+       sg_miter_stop(&miter);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+       return offset;
+ }
+ EXPORT_SYMBOL(sg_copy_buffer);
diff --git a/patches/features/all/rt/mm-vmalloc-use-get-cpu-light.patch b/patches/features/all/rt/mm-vmalloc-use-get-cpu-light.patch
new file mode 100644 (file)
index 0000000..a773188
--- /dev/null
@@ -0,0 +1,66 @@
+Subject: mm/vmalloc: Another preempt disable region which sucks
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 12 Jul 2011 11:39:36 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Avoid the preempt disable version of get_cpu_var(). The inner-lock should
+provide enough serialisation.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ mm/vmalloc.c |   13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+--- a/mm/vmalloc.c
++++ b/mm/vmalloc.c
+@@ -845,7 +845,7 @@ static void *new_vmap_block(unsigned int
+       struct vmap_block *vb;
+       struct vmap_area *va;
+       unsigned long vb_idx;
+-      int node, err;
++      int node, err, cpu;
+       void *vaddr;
+       node = numa_node_id();
+@@ -888,11 +888,12 @@ static void *new_vmap_block(unsigned int
+       BUG_ON(err);
+       radix_tree_preload_end();
+-      vbq = &get_cpu_var(vmap_block_queue);
++      cpu = get_cpu_light();
++      vbq = this_cpu_ptr(&vmap_block_queue);
+       spin_lock(&vbq->lock);
+       list_add_tail_rcu(&vb->free_list, &vbq->free);
+       spin_unlock(&vbq->lock);
+-      put_cpu_var(vmap_block_queue);
++      put_cpu_light();
+       return vaddr;
+ }
+@@ -961,6 +962,7 @@ static void *vb_alloc(unsigned long size
+       struct vmap_block *vb;
+       void *vaddr = NULL;
+       unsigned int order;
++      int cpu;
+       BUG_ON(offset_in_page(size));
+       BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC);
+@@ -975,7 +977,8 @@ static void *vb_alloc(unsigned long size
+       order = get_order(size);
+       rcu_read_lock();
+-      vbq = &get_cpu_var(vmap_block_queue);
++      cpu = get_cpu_light();
++      vbq = this_cpu_ptr(&vmap_block_queue);
+       list_for_each_entry_rcu(vb, &vbq->free, free_list) {
+               unsigned long pages_off;
+@@ -998,7 +1001,7 @@ static void *vb_alloc(unsigned long size
+               break;
+       }
+-      put_cpu_var(vmap_block_queue);
++      put_cpu_light();
+       rcu_read_unlock();
+       /* Allocate new block if nothing was found */
diff --git a/patches/features/all/rt/mm-workingset-do-not-protect-workingset_shadow_nodes.patch b/patches/features/all/rt/mm-workingset-do-not-protect-workingset_shadow_nodes.patch
new file mode 100644 (file)
index 0000000..07d0cd3
--- /dev/null
@@ -0,0 +1,156 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 29 Jan 2015 17:19:44 +0100
+Subject: mm/workingset: Do not protect workingset_shadow_nodes with irq off
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+workingset_shadow_nodes is protected by local_irq_disable(). Some users
+use spin_lock_irq().
+Replace the irq/on with a local_lock(). Rename workingset_shadow_nodes
+so I catch users of it which will be introduced later.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+[bwh: Forward-ported to 4.9.22: workingset_init() now uses
+ __list_lru_init() instead of list_lru_init_key()]
+---
+ include/linux/swap.h |    4 +++-
+ mm/filemap.c         |   13 +++++++++----
+ mm/truncate.c        |    7 +++++--
+ mm/workingset.c      |   23 ++++++++++++-----------
+ 4 files changed, 29 insertions(+), 18 deletions(-)
+
+--- a/include/linux/swap.h
++++ b/include/linux/swap.h
+@@ -11,6 +11,7 @@
+ #include <linux/fs.h>
+ #include <linux/atomic.h>
+ #include <linux/page-flags.h>
++#include <linux/locallock.h>
+ #include <asm/page.h>
+ struct notifier_block;
+@@ -247,7 +248,8 @@ struct swap_info_struct {
+ void *workingset_eviction(struct address_space *mapping, struct page *page);
+ bool workingset_refault(void *shadow);
+ void workingset_activation(struct page *page);
+-extern struct list_lru workingset_shadow_nodes;
++extern struct list_lru __workingset_shadow_nodes;
++DECLARE_LOCAL_IRQ_LOCK(workingset_shadow_lock);
+ static inline unsigned int workingset_node_pages(struct radix_tree_node *node)
+ {
+--- a/mm/filemap.c
++++ b/mm/filemap.c
+@@ -159,9 +159,12 @@ static int page_cache_tree_insert(struct
+                * node->private_list is protected by
+                * mapping->tree_lock.
+                */
+-              if (!list_empty(&node->private_list))
+-                      list_lru_del(&workingset_shadow_nodes,
++              if (!list_empty(&node->private_list)) {
++                      local_lock(workingset_shadow_lock);
++                      list_lru_del(&__workingset_shadow_nodes,
+                                    &node->private_list);
++                      local_unlock(workingset_shadow_lock);
++              }
+       }
+       return 0;
+ }
+@@ -217,8 +220,10 @@ static void page_cache_tree_delete(struc
+               if (!dax_mapping(mapping) && !workingset_node_pages(node) &&
+                               list_empty(&node->private_list)) {
+                       node->private_data = mapping;
+-                      list_lru_add(&workingset_shadow_nodes,
+-                                      &node->private_list);
++                      local_lock(workingset_shadow_lock);
++                      list_lru_add(&__workingset_shadow_nodes,
++                                   &node->private_list);
++                      local_unlock(workingset_shadow_lock);
+               }
+       }
+--- a/mm/truncate.c
++++ b/mm/truncate.c
+@@ -62,9 +62,12 @@ static void clear_exceptional_entry(stru
+        * protected by mapping->tree_lock.
+        */
+       if (!workingset_node_shadows(node) &&
+-          !list_empty(&node->private_list))
+-              list_lru_del(&workingset_shadow_nodes,
++          !list_empty(&node->private_list)) {
++              local_lock(workingset_shadow_lock);
++              list_lru_del(&__workingset_shadow_nodes,
+                               &node->private_list);
++              local_unlock(workingset_shadow_lock);
++      }
+       __radix_tree_delete_node(&mapping->page_tree, node);
+ unlock:
+       spin_unlock_irq(&mapping->tree_lock);
+--- a/mm/workingset.c
++++ b/mm/workingset.c
+@@ -334,7 +334,8 @@ void workingset_activation(struct page *
+  * point where they would still be useful.
+  */
+-struct list_lru workingset_shadow_nodes;
++struct list_lru __workingset_shadow_nodes;
++DEFINE_LOCAL_IRQ_LOCK(workingset_shadow_lock);
+ static unsigned long count_shadow_nodes(struct shrinker *shrinker,
+                                       struct shrink_control *sc)
+@@ -344,9 +345,9 @@ static unsigned long count_shadow_nodes(
+       unsigned long pages;
+       /* list_lru lock nests inside IRQ-safe mapping->tree_lock */
+-      local_irq_disable();
+-      shadow_nodes = list_lru_shrink_count(&workingset_shadow_nodes, sc);
+-      local_irq_enable();
++      local_lock_irq(workingset_shadow_lock);
++      shadow_nodes = list_lru_shrink_count(&__workingset_shadow_nodes, sc);
++      local_unlock_irq(workingset_shadow_lock);
+       if (sc->memcg) {
+               pages = mem_cgroup_node_nr_lru_pages(sc->memcg, sc->nid,
+@@ -438,9 +439,9 @@ static enum lru_status shadow_lru_isolat
+       spin_unlock(&mapping->tree_lock);
+       ret = LRU_REMOVED_RETRY;
+ out:
+-      local_irq_enable();
++      local_unlock_irq(workingset_shadow_lock);
+       cond_resched();
+-      local_irq_disable();
++      local_lock_irq(workingset_shadow_lock);
+       spin_lock(lru_lock);
+       return ret;
+ }
+@@ -451,10 +452,10 @@ static unsigned long scan_shadow_nodes(s
+       unsigned long ret;
+       /* list_lru lock nests inside IRQ-safe mapping->tree_lock */
+-      local_irq_disable();
+-      ret =  list_lru_shrink_walk(&workingset_shadow_nodes, sc,
++      local_lock_irq(workingset_shadow_lock);
++      ret =  list_lru_shrink_walk(&__workingset_shadow_nodes, sc,
+                                   shadow_lru_isolate, NULL);
+-      local_irq_enable();
++      local_unlock_irq(workingset_shadow_lock);
+       return ret;
+ }
+@@ -492,7 +493,7 @@ static int __init workingset_init(void)
+       pr_info("workingset: timestamp_bits=%d max_order=%d bucket_order=%u\n",
+              timestamp_bits, max_order, bucket_order);
+-      ret = __list_lru_init(&workingset_shadow_nodes, true, &shadow_nodes_key);
++      ret = __list_lru_init(&__workingset_shadow_nodes, true, &shadow_nodes_key);
+       if (ret)
+               goto err;
+       ret = register_shrinker(&workingset_shadow_shrinker);
+@@ -500,7 +501,7 @@ static int __init workingset_init(void)
+               goto err_list_lru;
+       return 0;
+ err_list_lru:
+-      list_lru_destroy(&workingset_shadow_nodes);
++      list_lru_destroy(&__workingset_shadow_nodes);
+ err:
+       return ret;
+ }
diff --git a/patches/features/all/rt/mm_zsmalloc_copy_with_get_cpu_var_and_locking.patch b/patches/features/all/rt/mm_zsmalloc_copy_with_get_cpu_var_and_locking.patch
new file mode 100644 (file)
index 0000000..b990b1b
--- /dev/null
@@ -0,0 +1,197 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Tue, 22 Mar 2016 11:16:09 +0100
+Subject: [PATCH] mm/zsmalloc: copy with get_cpu_var() and locking
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+get_cpu_var() disables preemption and triggers a might_sleep() splat later.
+This is replaced with get_locked_var().
+This bitspinlocks are replaced with a proper mutex which requires a slightly
+larger struct to allocate.
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+[bigeasy: replace the bitspin_lock() with a mutex, get_locked_var(). Mike then
+fixed the size magic]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ mm/zsmalloc.c |   80 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 74 insertions(+), 6 deletions(-)
+
+--- a/mm/zsmalloc.c
++++ b/mm/zsmalloc.c
+@@ -53,6 +53,7 @@
+ #include <linux/mount.h>
+ #include <linux/migrate.h>
+ #include <linux/pagemap.h>
++#include <linux/locallock.h>
+ #define ZSPAGE_MAGIC  0x58
+@@ -70,9 +71,22 @@
+  */
+ #define ZS_MAX_ZSPAGE_ORDER 2
+ #define ZS_MAX_PAGES_PER_ZSPAGE (_AC(1, UL) << ZS_MAX_ZSPAGE_ORDER)
+-
+ #define ZS_HANDLE_SIZE (sizeof(unsigned long))
++#ifdef CONFIG_PREEMPT_RT_FULL
++
++struct zsmalloc_handle {
++      unsigned long addr;
++      struct mutex lock;
++};
++
++#define ZS_HANDLE_ALLOC_SIZE (sizeof(struct zsmalloc_handle))
++
++#else
++
++#define ZS_HANDLE_ALLOC_SIZE (sizeof(unsigned long))
++#endif
++
+ /*
+  * Object location (<PFN>, <obj_idx>) is encoded as
+  * as single (unsigned long) handle value.
+@@ -327,7 +341,7 @@ static void SetZsPageMovable(struct zs_p
+ static int create_cache(struct zs_pool *pool)
+ {
+-      pool->handle_cachep = kmem_cache_create("zs_handle", ZS_HANDLE_SIZE,
++      pool->handle_cachep = kmem_cache_create("zs_handle", ZS_HANDLE_ALLOC_SIZE,
+                                       0, 0, NULL);
+       if (!pool->handle_cachep)
+               return 1;
+@@ -351,10 +365,27 @@ static void destroy_cache(struct zs_pool
+ static unsigned long cache_alloc_handle(struct zs_pool *pool, gfp_t gfp)
+ {
+-      return (unsigned long)kmem_cache_alloc(pool->handle_cachep,
+-                      gfp & ~(__GFP_HIGHMEM|__GFP_MOVABLE));
++      void *p;
++
++      p = kmem_cache_alloc(pool->handle_cachep,
++                           gfp & ~(__GFP_HIGHMEM|__GFP_MOVABLE));
++#ifdef CONFIG_PREEMPT_RT_FULL
++      if (p) {
++              struct zsmalloc_handle *zh = p;
++
++              mutex_init(&zh->lock);
++      }
++#endif
++      return (unsigned long)p;
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++static struct zsmalloc_handle *zs_get_pure_handle(unsigned long handle)
++{
++      return (void *)(handle &~((1 << OBJ_TAG_BITS) - 1));
++}
++#endif
++
+ static void cache_free_handle(struct zs_pool *pool, unsigned long handle)
+ {
+       kmem_cache_free(pool->handle_cachep, (void *)handle);
+@@ -373,12 +404,18 @@ static void cache_free_zspage(struct zs_
+ static void record_obj(unsigned long handle, unsigned long obj)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
++
++      WRITE_ONCE(zh->addr, obj);
++#else
+       /*
+        * lsb of @obj represents handle lock while other bits
+        * represent object value the handle is pointing so
+        * updating shouldn't do store tearing.
+        */
+       WRITE_ONCE(*(unsigned long *)handle, obj);
++#endif
+ }
+ /* zpool driver */
+@@ -467,6 +504,7 @@ MODULE_ALIAS("zpool-zsmalloc");
+ /* per-cpu VM mapping areas for zspage accesses that cross page boundaries */
+ static DEFINE_PER_CPU(struct mapping_area, zs_map_area);
++static DEFINE_LOCAL_IRQ_LOCK(zs_map_area_lock);
+ static bool is_zspage_isolated(struct zspage *zspage)
+ {
+@@ -902,7 +940,13 @@ static unsigned long location_to_obj(str
+ static unsigned long handle_to_obj(unsigned long handle)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
++
++      return zh->addr;
++#else
+       return *(unsigned long *)handle;
++#endif
+ }
+ static unsigned long obj_to_head(struct page *page, void *obj)
+@@ -916,22 +960,46 @@ static unsigned long obj_to_head(struct
+ static inline int testpin_tag(unsigned long handle)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
++
++      return mutex_is_locked(&zh->lock);
++#else
+       return bit_spin_is_locked(HANDLE_PIN_BIT, (unsigned long *)handle);
++#endif
+ }
+ static inline int trypin_tag(unsigned long handle)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
++
++      return mutex_trylock(&zh->lock);
++#else
+       return bit_spin_trylock(HANDLE_PIN_BIT, (unsigned long *)handle);
++#endif
+ }
+ static void pin_tag(unsigned long handle)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
++
++      return mutex_lock(&zh->lock);
++#else
+       bit_spin_lock(HANDLE_PIN_BIT, (unsigned long *)handle);
++#endif
+ }
+ static void unpin_tag(unsigned long handle)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
++
++      return mutex_unlock(&zh->lock);
++#else
+       bit_spin_unlock(HANDLE_PIN_BIT, (unsigned long *)handle);
++#endif
+ }
+ static void reset_page(struct page *page)
+@@ -1423,7 +1491,7 @@ void *zs_map_object(struct zs_pool *pool
+       class = pool->size_class[class_idx];
+       off = (class->size * obj_idx) & ~PAGE_MASK;
+-      area = &get_cpu_var(zs_map_area);
++      area = &get_locked_var(zs_map_area_lock, zs_map_area);
+       area->vm_mm = mm;
+       if (off + class->size <= PAGE_SIZE) {
+               /* this object is contained entirely within a page */
+@@ -1477,7 +1545,7 @@ void zs_unmap_object(struct zs_pool *poo
+               __zs_unmap_object(area, pages, off, class->size);
+       }
+-      put_cpu_var(zs_map_area);
++      put_locked_var(zs_map_area_lock, zs_map_area);
+       migrate_read_unlock(zspage);
+       unpin_tag(handle);
diff --git a/patches/features/all/rt/mmci-remove-bogus-irq-save.patch b/patches/features/all/rt/mmci-remove-bogus-irq-save.patch
new file mode 100644 (file)
index 0000000..7037cdb
--- /dev/null
@@ -0,0 +1,40 @@
+Subject: mmci: Remove bogus local_irq_save()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 09 Jan 2013 12:11:12 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On !RT interrupt runs with interrupts disabled. On RT it's in a
+thread, so no need to disable interrupts at all.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/mmc/host/mmci.c |    5 -----
+ 1 file changed, 5 deletions(-)
+
+--- a/drivers/mmc/host/mmci.c
++++ b/drivers/mmc/host/mmci.c
+@@ -1147,15 +1147,12 @@ static irqreturn_t mmci_pio_irq(int irq,
+       struct sg_mapping_iter *sg_miter = &host->sg_miter;
+       struct variant_data *variant = host->variant;
+       void __iomem *base = host->base;
+-      unsigned long flags;
+       u32 status;
+       status = readl(base + MMCISTATUS);
+       dev_dbg(mmc_dev(host->mmc), "irq1 (pio) %08x\n", status);
+-      local_irq_save(flags);
+-
+       do {
+               unsigned int remain, len;
+               char *buffer;
+@@ -1195,8 +1192,6 @@ static irqreturn_t mmci_pio_irq(int irq,
+       sg_miter_stop(sg_miter);
+-      local_irq_restore(flags);
+-
+       /*
+        * If we have less than the fifo 'half-full' threshold to transfer,
+        * trigger a PIO interrupt as soon as any data is available.
diff --git a/patches/features/all/rt/move_sched_delayed_work_to_helper.patch b/patches/features/all/rt/move_sched_delayed_work_to_helper.patch
new file mode 100644 (file)
index 0000000..26e97a7
--- /dev/null
@@ -0,0 +1,73 @@
+Date: Wed, 26 Jun 2013 15:28:11 -0400
+From: Steven Rostedt <rostedt@goodmis.org>
+Subject: rt,ntp: Move call to schedule_delayed_work() to helper thread
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The ntp code for notify_cmos_timer() is called from a hard interrupt
+context. schedule_delayed_work() under PREEMPT_RT_FULL calls spinlocks
+that have been converted to mutexes, thus calling schedule_delayed_work()
+from interrupt is not safe.
+
+Add a helper thread that does the call to schedule_delayed_work and wake
+up that thread instead of calling schedule_delayed_work() directly.
+This is only for CONFIG_PREEMPT_RT_FULL, otherwise the code still calls
+schedule_delayed_work() directly in irq context.
+
+Note: There's a few places in the kernel that do this. Perhaps the RT
+code should have a dedicated thread that does the checks. Just register
+a notifier on boot up for your check and wake up the thread when
+needed. This will be a todo.
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+[bigeasy: use swork_queue() instead a helper thread]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/time/ntp.c |   26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+--- a/kernel/time/ntp.c
++++ b/kernel/time/ntp.c
+@@ -17,6 +17,7 @@
+ #include <linux/module.h>
+ #include <linux/rtc.h>
+ #include <linux/math64.h>
++#include <linux/swork.h>
+ #include "ntp_internal.h"
+ #include "timekeeping_internal.h"
+@@ -568,10 +569,35 @@ static void sync_cmos_clock(struct work_
+                          &sync_cmos_work, timespec64_to_jiffies(&next));
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++
++static void run_clock_set_delay(struct swork_event *event)
++{
++      queue_delayed_work(system_power_efficient_wq, &sync_cmos_work, 0);
++}
++
++static struct swork_event ntp_cmos_swork;
++
++void ntp_notify_cmos_timer(void)
++{
++      swork_queue(&ntp_cmos_swork);
++}
++
++static __init int create_cmos_delay_thread(void)
++{
++      WARN_ON(swork_get());
++      INIT_SWORK(&ntp_cmos_swork, run_clock_set_delay);
++      return 0;
++}
++early_initcall(create_cmos_delay_thread);
++
++#else
++
+ void ntp_notify_cmos_timer(void)
+ {
+       queue_delayed_work(system_power_efficient_wq, &sync_cmos_work, 0);
+ }
++#endif /* CONFIG_PREEMPT_RT_FULL */
+ #else
+ void ntp_notify_cmos_timer(void) { }
diff --git a/patches/features/all/rt/mutex-no-spin-on-rt.patch b/patches/features/all/rt/mutex-no-spin-on-rt.patch
new file mode 100644 (file)
index 0000000..9d347a9
--- /dev/null
@@ -0,0 +1,29 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 17 Jul 2011 21:51:45 +0200
+Subject: locking: Disable spin on owner for RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Drop spin on owner for mutex / rwsem. We are most likely not using it
+but…
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/Kconfig.locks |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/Kconfig.locks
++++ b/kernel/Kconfig.locks
+@@ -225,11 +225,11 @@ config ARCH_SUPPORTS_ATOMIC_RMW
+ config MUTEX_SPIN_ON_OWNER
+       def_bool y
+-      depends on SMP && !DEBUG_MUTEXES && ARCH_SUPPORTS_ATOMIC_RMW
++      depends on SMP && !DEBUG_MUTEXES && ARCH_SUPPORTS_ATOMIC_RMW && !PREEMPT_RT_FULL
+ config RWSEM_SPIN_ON_OWNER
+        def_bool y
+-       depends on SMP && RWSEM_XCHGADD_ALGORITHM && ARCH_SUPPORTS_ATOMIC_RMW
++       depends on SMP && RWSEM_XCHGADD_ALGORITHM && ARCH_SUPPORTS_ATOMIC_RMW && !PREEMPT_RT_FULL
+ config LOCK_SPIN_ON_OWNER
+        def_bool y
diff --git a/patches/features/all/rt/net-Have-__napi_schedule_irqoff-disable-interrupts-o.patch b/patches/features/all/rt/net-Have-__napi_schedule_irqoff-disable-interrupts-o.patch
new file mode 100644 (file)
index 0000000..980890d
--- /dev/null
@@ -0,0 +1,69 @@
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Tue, 6 Dec 2016 17:50:30 -0500
+Subject: [PATCH] net: Have __napi_schedule_irqoff() disable interrupts on
+ RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+A customer hit a crash where the napi sd->poll_list became corrupted.
+The customer had the bnx2x driver, which does a
+__napi_schedule_irqoff() in its interrupt handler. Unfortunately, when
+running with CONFIG_PREEMPT_RT_FULL, this interrupt handler is run as a
+thread and is preemptable. The call to ____napi_schedule() must be done
+with interrupts disabled to protect the per cpu softnet_data's
+"poll_list, which is protected by disabling interrupts (disabling
+preemption is enough when all interrupts are threaded and
+local_bh_disable() can't preempt)."
+
+As bnx2x isn't the only driver that does this, the safest thing to do
+is to make __napi_schedule_irqoff() call __napi_schedule() instead when
+CONFIG_PREEMPT_RT_FULL is enabled, which will call local_irq_save()
+before calling ____napi_schedule().
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/netdevice.h |   12 ++++++++++++
+ net/core/dev.c            |    2 ++
+ 2 files changed, 14 insertions(+)
+
+--- a/include/linux/netdevice.h
++++ b/include/linux/netdevice.h
+@@ -396,7 +396,19 @@ typedef enum rx_handler_result rx_handle
+ typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **pskb);
+ void __napi_schedule(struct napi_struct *n);
++
++/*
++ * When PREEMPT_RT_FULL is defined, all device interrupt handlers
++ * run as threads, and they can also be preempted (without PREEMPT_RT
++ * interrupt threads can not be preempted). Which means that calling
++ * __napi_schedule_irqoff() from an interrupt handler can be preempted
++ * and can corrupt the napi->poll_list.
++ */
++#ifdef CONFIG_PREEMPT_RT_FULL
++#define __napi_schedule_irqoff(n) __napi_schedule(n)
++#else
+ void __napi_schedule_irqoff(struct napi_struct *n);
++#endif
+ static inline bool napi_disable_pending(struct napi_struct *n)
+ {
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -4938,6 +4938,7 @@ void __napi_schedule(struct napi_struct
+ }
+ EXPORT_SYMBOL(__napi_schedule);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /**
+  * __napi_schedule_irqoff - schedule for receive
+  * @n: entry to schedule
+@@ -4949,6 +4950,7 @@ void __napi_schedule_irqoff(struct napi_
+       ____napi_schedule(this_cpu_ptr(&softnet_data), n);
+ }
+ EXPORT_SYMBOL(__napi_schedule_irqoff);
++#endif
+ void __napi_complete(struct napi_struct *n)
+ {
diff --git a/patches/features/all/rt/net-Qdisc-use-a-seqlock-instead-seqcount.patch b/patches/features/all/rt/net-Qdisc-use-a-seqlock-instead-seqcount.patch
new file mode 100644 (file)
index 0000000..5123ddc
--- /dev/null
@@ -0,0 +1,274 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 14 Sep 2016 17:36:35 +0200
+Subject: [PATCH] net/Qdisc: use a seqlock instead seqcount
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The seqcount disables preemption on -RT while it is held which can't
+remove. Also we don't want the reader to spin for ages if the writer is
+scheduled out. The seqlock on the other hand will serialize / sleep on
+the lock while writer is active.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/seqlock.h    |    9 +++++++++
+ include/net/gen_stats.h    |    9 +++++----
+ include/net/net_seq_lock.h |   15 +++++++++++++++
+ include/net/sch_generic.h  |   21 ++++++++++++++++++---
+ net/core/gen_estimator.c   |    6 +++---
+ net/core/gen_stats.c       |    8 ++++----
+ net/sched/sch_api.c        |    2 +-
+ net/sched/sch_generic.c    |   12 ++++++++++++
+ 8 files changed, 67 insertions(+), 15 deletions(-)
+ create mode 100644 include/net/net_seq_lock.h
+
+--- a/include/linux/seqlock.h
++++ b/include/linux/seqlock.h
+@@ -481,6 +481,15 @@ static inline void write_seqlock(seqlock
+       __raw_write_seqcount_begin(&sl->seqcount);
+ }
++static inline int try_write_seqlock(seqlock_t *sl)
++{
++      if (spin_trylock(&sl->lock)) {
++              __raw_write_seqcount_begin(&sl->seqcount);
++              return 1;
++      }
++      return 0;
++}
++
+ static inline void write_sequnlock(seqlock_t *sl)
+ {
+       __raw_write_seqcount_end(&sl->seqcount);
+--- a/include/net/gen_stats.h
++++ b/include/net/gen_stats.h
+@@ -5,6 +5,7 @@
+ #include <linux/socket.h>
+ #include <linux/rtnetlink.h>
+ #include <linux/pkt_sched.h>
++#include <net/net_seq_lock.h>
+ struct gnet_stats_basic_cpu {
+       struct gnet_stats_basic_packed bstats;
+@@ -33,11 +34,11 @@ int gnet_stats_start_copy_compat(struct
+                                spinlock_t *lock, struct gnet_dump *d,
+                                int padattr);
+-int gnet_stats_copy_basic(const seqcount_t *running,
++int gnet_stats_copy_basic(net_seqlock_t *running,
+                         struct gnet_dump *d,
+                         struct gnet_stats_basic_cpu __percpu *cpu,
+                         struct gnet_stats_basic_packed *b);
+-void __gnet_stats_copy_basic(const seqcount_t *running,
++void __gnet_stats_copy_basic(net_seqlock_t *running,
+                            struct gnet_stats_basic_packed *bstats,
+                            struct gnet_stats_basic_cpu __percpu *cpu,
+                            struct gnet_stats_basic_packed *b);
+@@ -55,14 +56,14 @@ int gen_new_estimator(struct gnet_stats_
+                     struct gnet_stats_basic_cpu __percpu *cpu_bstats,
+                     struct gnet_stats_rate_est64 *rate_est,
+                     spinlock_t *stats_lock,
+-                    seqcount_t *running, struct nlattr *opt);
++                    net_seqlock_t *running, struct nlattr *opt);
+ void gen_kill_estimator(struct gnet_stats_basic_packed *bstats,
+                       struct gnet_stats_rate_est64 *rate_est);
+ int gen_replace_estimator(struct gnet_stats_basic_packed *bstats,
+                         struct gnet_stats_basic_cpu __percpu *cpu_bstats,
+                         struct gnet_stats_rate_est64 *rate_est,
+                         spinlock_t *stats_lock,
+-                        seqcount_t *running, struct nlattr *opt);
++                        net_seqlock_t *running, struct nlattr *opt);
+ bool gen_estimator_active(const struct gnet_stats_basic_packed *bstats,
+                         const struct gnet_stats_rate_est64 *rate_est);
+ #endif
+--- /dev/null
++++ b/include/net/net_seq_lock.h
+@@ -0,0 +1,15 @@
++#ifndef __NET_NET_SEQ_LOCK_H__
++#define __NET_NET_SEQ_LOCK_H__
++
++#ifdef CONFIG_PREEMPT_RT_BASE
++# define net_seqlock_t                        seqlock_t
++# define net_seq_begin(__r)           read_seqbegin(__r)
++# define net_seq_retry(__r, __s)      read_seqretry(__r, __s)
++
++#else
++# define net_seqlock_t                        seqcount_t
++# define net_seq_begin(__r)           read_seqcount_begin(__r)
++# define net_seq_retry(__r, __s)      read_seqcount_retry(__r, __s)
++#endif
++
++#endif
+--- a/include/net/sch_generic.h
++++ b/include/net/sch_generic.h
+@@ -10,6 +10,7 @@
+ #include <linux/dynamic_queue_limits.h>
+ #include <net/gen_stats.h>
+ #include <net/rtnetlink.h>
++#include <net/net_seq_lock.h>
+ struct Qdisc_ops;
+ struct qdisc_walker;
+@@ -86,7 +87,7 @@ struct Qdisc {
+       struct sk_buff          *gso_skb ____cacheline_aligned_in_smp;
+       struct qdisc_skb_head   q;
+       struct gnet_stats_basic_packed bstats;
+-      seqcount_t              running;
++      net_seqlock_t           running;
+       struct gnet_stats_queue qstats;
+       unsigned long           state;
+       struct Qdisc            *next_sched;
+@@ -98,13 +99,22 @@ struct Qdisc {
+       spinlock_t              busylock ____cacheline_aligned_in_smp;
+ };
+-static inline bool qdisc_is_running(const struct Qdisc *qdisc)
++static inline bool qdisc_is_running(struct Qdisc *qdisc)
+ {
++#ifdef CONFIG_PREEMPT_RT_BASE
++      return spin_is_locked(&qdisc->running.lock) ? true : false;
++#else
+       return (raw_read_seqcount(&qdisc->running) & 1) ? true : false;
++#endif
+ }
+ static inline bool qdisc_run_begin(struct Qdisc *qdisc)
+ {
++#ifdef CONFIG_PREEMPT_RT_BASE
++      if (try_write_seqlock(&qdisc->running))
++              return true;
++      return false;
++#else
+       if (qdisc_is_running(qdisc))
+               return false;
+       /* Variant of write_seqcount_begin() telling lockdep a trylock
+@@ -113,11 +123,16 @@ static inline bool qdisc_run_begin(struc
+       raw_write_seqcount_begin(&qdisc->running);
+       seqcount_acquire(&qdisc->running.dep_map, 0, 1, _RET_IP_);
+       return true;
++#endif
+ }
+ static inline void qdisc_run_end(struct Qdisc *qdisc)
+ {
++#ifdef CONFIG_PREEMPT_RT_BASE
++      write_sequnlock(&qdisc->running);
++#else
+       write_seqcount_end(&qdisc->running);
++#endif
+ }
+ static inline bool qdisc_may_bulk(const struct Qdisc *qdisc)
+@@ -308,7 +323,7 @@ static inline spinlock_t *qdisc_root_sle
+       return qdisc_lock(root);
+ }
+-static inline seqcount_t *qdisc_root_sleeping_running(const struct Qdisc *qdisc)
++static inline net_seqlock_t *qdisc_root_sleeping_running(const struct Qdisc *qdisc)
+ {
+       struct Qdisc *root = qdisc_root_sleeping(qdisc);
+--- a/net/core/gen_estimator.c
++++ b/net/core/gen_estimator.c
+@@ -84,7 +84,7 @@ struct gen_estimator
+       struct gnet_stats_basic_packed  *bstats;
+       struct gnet_stats_rate_est64    *rate_est;
+       spinlock_t              *stats_lock;
+-      seqcount_t              *running;
++      net_seqlock_t           *running;
+       int                     ewma_log;
+       u32                     last_packets;
+       unsigned long           avpps;
+@@ -213,7 +213,7 @@ int gen_new_estimator(struct gnet_stats_
+                     struct gnet_stats_basic_cpu __percpu *cpu_bstats,
+                     struct gnet_stats_rate_est64 *rate_est,
+                     spinlock_t *stats_lock,
+-                    seqcount_t *running,
++                    net_seqlock_t *running,
+                     struct nlattr *opt)
+ {
+       struct gen_estimator *est;
+@@ -309,7 +309,7 @@ int gen_replace_estimator(struct gnet_st
+                         struct gnet_stats_basic_cpu __percpu *cpu_bstats,
+                         struct gnet_stats_rate_est64 *rate_est,
+                         spinlock_t *stats_lock,
+-                        seqcount_t *running, struct nlattr *opt)
++                        net_seqlock_t *running, struct nlattr *opt)
+ {
+       gen_kill_estimator(bstats, rate_est);
+       return gen_new_estimator(bstats, cpu_bstats, rate_est, stats_lock, running, opt);
+--- a/net/core/gen_stats.c
++++ b/net/core/gen_stats.c
+@@ -130,7 +130,7 @@ static void
+ }
+ void
+-__gnet_stats_copy_basic(const seqcount_t *running,
++__gnet_stats_copy_basic(net_seqlock_t *running,
+                       struct gnet_stats_basic_packed *bstats,
+                       struct gnet_stats_basic_cpu __percpu *cpu,
+                       struct gnet_stats_basic_packed *b)
+@@ -143,10 +143,10 @@ void
+       }
+       do {
+               if (running)
+-                      seq = read_seqcount_begin(running);
++                      seq = net_seq_begin(running);
+               bstats->bytes = b->bytes;
+               bstats->packets = b->packets;
+-      } while (running && read_seqcount_retry(running, seq));
++      } while (running && net_seq_retry(running, seq));
+ }
+ EXPORT_SYMBOL(__gnet_stats_copy_basic);
+@@ -164,7 +164,7 @@ EXPORT_SYMBOL(__gnet_stats_copy_basic);
+  * if the room in the socket buffer was not sufficient.
+  */
+ int
+-gnet_stats_copy_basic(const seqcount_t *running,
++gnet_stats_copy_basic(net_seqlock_t *running,
+                     struct gnet_dump *d,
+                     struct gnet_stats_basic_cpu __percpu *cpu,
+                     struct gnet_stats_basic_packed *b)
+--- a/net/sched/sch_api.c
++++ b/net/sched/sch_api.c
+@@ -981,7 +981,7 @@ static struct Qdisc *qdisc_create(struct
+                       rcu_assign_pointer(sch->stab, stab);
+               }
+               if (tca[TCA_RATE]) {
+-                      seqcount_t *running;
++                      net_seqlock_t *running;
+                       err = -EOPNOTSUPP;
+                       if (sch->flags & TCQ_F_MQROOT)
+--- a/net/sched/sch_generic.c
++++ b/net/sched/sch_generic.c
+@@ -425,7 +425,11 @@ struct Qdisc noop_qdisc = {
+       .ops            =       &noop_qdisc_ops,
+       .q.lock         =       __SPIN_LOCK_UNLOCKED(noop_qdisc.q.lock),
+       .dev_queue      =       &noop_netdev_queue,
++#ifdef CONFIG_PREEMPT_RT_BASE
++      .running        =       __SEQLOCK_UNLOCKED(noop_qdisc.running),
++#else
+       .running        =       SEQCNT_ZERO(noop_qdisc.running),
++#endif
+       .busylock       =       __SPIN_LOCK_UNLOCKED(noop_qdisc.busylock),
+ };
+ EXPORT_SYMBOL(noop_qdisc);
+@@ -624,9 +628,17 @@ struct Qdisc *qdisc_alloc(struct netdev_
+       lockdep_set_class(&sch->busylock,
+                         dev->qdisc_tx_busylock ?: &qdisc_tx_busylock);
++#ifdef CONFIG_PREEMPT_RT_BASE
++      seqlock_init(&sch->running);
++      lockdep_set_class(&sch->running.seqcount,
++                        dev->qdisc_running_key ?: &qdisc_running_key);
++      lockdep_set_class(&sch->running.lock,
++                        dev->qdisc_running_key ?: &qdisc_running_key);
++#else
+       seqcount_init(&sch->running);
+       lockdep_set_class(&sch->running,
+                         dev->qdisc_running_key ?: &qdisc_running_key);
++#endif
+       sch->ops = ops;
+       sch->enqueue = ops->enqueue;
diff --git a/patches/features/all/rt/net-add-a-lock-around-icmp_sk.patch b/patches/features/all/rt/net-add-a-lock-around-icmp_sk.patch
new file mode 100644 (file)
index 0000000..3610740
--- /dev/null
@@ -0,0 +1,73 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 31 Aug 2016 17:54:09 +0200
+Subject: [PATCH] net: add a lock around icmp_sk()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+It looks like the this_cpu_ptr() access in icmp_sk() is protected with
+local_bh_disable(). To avoid missing serialization in -RT I am adding
+here a local lock. No crash has been observed, this is just precaution.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ net/ipv4/icmp.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/net/ipv4/icmp.c
++++ b/net/ipv4/icmp.c
+@@ -77,6 +77,7 @@
+ #include <linux/string.h>
+ #include <linux/netfilter_ipv4.h>
+ #include <linux/slab.h>
++#include <linux/locallock.h>
+ #include <net/snmp.h>
+ #include <net/ip.h>
+ #include <net/route.h>
+@@ -204,6 +205,8 @@ static const struct icmp_control icmp_po
+  *
+  *    On SMP we have one ICMP socket per-cpu.
+  */
++static DEFINE_LOCAL_IRQ_LOCK(icmp_sk_lock);
++
+ static struct sock *icmp_sk(struct net *net)
+ {
+       return *this_cpu_ptr(net->ipv4.icmp_sk);
+@@ -215,12 +218,14 @@ static inline struct sock *icmp_xmit_loc
+       local_bh_disable();
++      local_lock(icmp_sk_lock);
+       sk = icmp_sk(net);
+       if (unlikely(!spin_trylock(&sk->sk_lock.slock))) {
+               /* This can happen if the output path signals a
+                * dst_link_failure() for an outgoing ICMP packet.
+                */
++              local_unlock(icmp_sk_lock);
+               local_bh_enable();
+               return NULL;
+       }
+@@ -230,6 +235,7 @@ static inline struct sock *icmp_xmit_loc
+ static inline void icmp_xmit_unlock(struct sock *sk)
+ {
+       spin_unlock_bh(&sk->sk_lock.slock);
++      local_unlock(icmp_sk_lock);
+ }
+ int sysctl_icmp_msgs_per_sec __read_mostly = 1000;
+@@ -358,6 +364,7 @@ static void icmp_push_reply(struct icmp_
+       struct sock *sk;
+       struct sk_buff *skb;
++      local_lock(icmp_sk_lock);
+       sk = icmp_sk(dev_net((*rt)->dst.dev));
+       if (ip_append_data(sk, fl4, icmp_glue_bits, icmp_param,
+                          icmp_param->data_len+icmp_param->head_len,
+@@ -380,6 +387,7 @@ static void icmp_push_reply(struct icmp_
+               skb->ip_summed = CHECKSUM_NONE;
+               ip_push_pending_frames(sk, fl4);
+       }
++      local_unlock(icmp_sk_lock);
+ }
+ /*
diff --git a/patches/features/all/rt/net-add-back-the-missing-serialization-in-ip_send_un.patch b/patches/features/all/rt/net-add-back-the-missing-serialization-in-ip_send_un.patch
new file mode 100644 (file)
index 0000000..1d80c75
--- /dev/null
@@ -0,0 +1,94 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 31 Aug 2016 17:21:56 +0200
+Subject: [PATCH] net: add back the missing serialization in
+ ip_send_unicast_reply()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Some time ago Sami Pietikäinen reported a crash on -RT in
+ip_send_unicast_reply() which was later fixed by Nicholas Mc Guire
+(v3.12.8-rt11). Later (v3.18.8) the code was reworked and I dropped the
+patch. As it turns out it was mistake.
+I have reports that the same crash is possible with a similar backtrace.
+It seems that vanilla protects access to this_cpu_ptr() via
+local_bh_disable(). This does not work the on -RT since we can have
+NET_RX and NET_TX running in parallel on the same CPU.
+This is brings back the old locks.
+
+|Unable to handle kernel NULL pointer dereference at virtual address 00000010
+|PC is at __ip_make_skb+0x198/0x3e8
+|[<c04e39d8>] (__ip_make_skb) from [<c04e3ca8>] (ip_push_pending_frames+0x20/0x40)
+|[<c04e3ca8>] (ip_push_pending_frames) from [<c04e3ff0>] (ip_send_unicast_reply+0x210/0x22c)
+|[<c04e3ff0>] (ip_send_unicast_reply) from [<c04fbb54>] (tcp_v4_send_reset+0x190/0x1c0)
+|[<c04fbb54>] (tcp_v4_send_reset) from [<c04fcc1c>] (tcp_v4_do_rcv+0x22c/0x288)
+|[<c04fcc1c>] (tcp_v4_do_rcv) from [<c0474364>] (release_sock+0xb4/0x150)
+|[<c0474364>] (release_sock) from [<c04ed904>] (tcp_close+0x240/0x454)
+|[<c04ed904>] (tcp_close) from [<c0511408>] (inet_release+0x74/0x7c)
+|[<c0511408>] (inet_release) from [<c0470728>] (sock_release+0x30/0xb0)
+|[<c0470728>] (sock_release) from [<c0470abc>] (sock_close+0x1c/0x24)
+|[<c0470abc>] (sock_close) from [<c0115ec4>] (__fput+0xe8/0x20c)
+|[<c0115ec4>] (__fput) from [<c0116050>] (____fput+0x18/0x1c)
+|[<c0116050>] (____fput) from [<c0058138>] (task_work_run+0xa4/0xb8)
+|[<c0058138>] (task_work_run) from [<c0011478>] (do_work_pending+0xd0/0xe4)
+|[<c0011478>] (do_work_pending) from [<c000e740>] (work_pending+0xc/0x20)
+|Code: e3530001 8a000001 e3a00040 ea000011 (e5973010)
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ net/ipv4/tcp_ipv4.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/net/ipv4/tcp_ipv4.c
++++ b/net/ipv4/tcp_ipv4.c
+@@ -62,6 +62,7 @@
+ #include <linux/init.h>
+ #include <linux/times.h>
+ #include <linux/slab.h>
++#include <linux/locallock.h>
+ #include <net/net_namespace.h>
+ #include <net/icmp.h>
+@@ -568,6 +569,7 @@ void tcp_v4_send_check(struct sock *sk,
+ }
+ EXPORT_SYMBOL(tcp_v4_send_check);
++static DEFINE_LOCAL_IRQ_LOCK(tcp_sk_lock);
+ /*
+  *    This routine will send an RST to the other tcp.
+  *
+@@ -695,6 +697,8 @@ static void tcp_v4_send_reset(const stru
+                    offsetof(struct inet_timewait_sock, tw_bound_dev_if));
+       arg.tos = ip_hdr(skb)->tos;
++
++      local_lock(tcp_sk_lock);
+       local_bh_disable();
+       ip_send_unicast_reply(*this_cpu_ptr(net->ipv4.tcp_sk),
+                             skb, &TCP_SKB_CB(skb)->header.h4.opt,
+@@ -704,6 +708,7 @@ static void tcp_v4_send_reset(const stru
+       __TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
+       __TCP_INC_STATS(net, TCP_MIB_OUTRSTS);
+       local_bh_enable();
++      local_unlock(tcp_sk_lock);
+ #ifdef CONFIG_TCP_MD5SIG
+ out:
+@@ -779,6 +784,7 @@ static void tcp_v4_send_ack(struct net *
+       if (oif)
+               arg.bound_dev_if = oif;
+       arg.tos = tos;
++      local_lock(tcp_sk_lock);
+       local_bh_disable();
+       ip_send_unicast_reply(*this_cpu_ptr(net->ipv4.tcp_sk),
+                             skb, &TCP_SKB_CB(skb)->header.h4.opt,
+@@ -787,6 +793,7 @@ static void tcp_v4_send_ack(struct net *
+       __TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
+       local_bh_enable();
++      local_unlock(tcp_sk_lock);
+ }
+ static void tcp_v4_timewait_ack(struct sock *sk, struct sk_buff *skb)
diff --git a/patches/features/all/rt/net-another-local-irq-disable-alloc-atomic-headache.patch b/patches/features/all/rt/net-another-local-irq-disable-alloc-atomic-headache.patch
new file mode 100644 (file)
index 0000000..727a72c
--- /dev/null
@@ -0,0 +1,59 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 26 Sep 2012 16:21:08 +0200
+Subject: net: Another local_irq_disable/kmalloc headache
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Replace it by a local lock. Though that's pretty inefficient :(
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ net/core/skbuff.c |   10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -64,6 +64,7 @@
+ #include <linux/errqueue.h>
+ #include <linux/prefetch.h>
+ #include <linux/if_vlan.h>
++#include <linux/locallock.h>
+ #include <net/protocol.h>
+ #include <net/dst.h>
+@@ -360,6 +361,7 @@ struct napi_alloc_cache {
+ static DEFINE_PER_CPU(struct page_frag_cache, netdev_alloc_cache);
+ static DEFINE_PER_CPU(struct napi_alloc_cache, napi_alloc_cache);
++static DEFINE_LOCAL_IRQ_LOCK(netdev_alloc_lock);
+ static void *__netdev_alloc_frag(unsigned int fragsz, gfp_t gfp_mask)
+ {
+@@ -367,10 +369,10 @@ static void *__netdev_alloc_frag(unsigne
+       unsigned long flags;
+       void *data;
+-      local_irq_save(flags);
++      local_lock_irqsave(netdev_alloc_lock, flags);
+       nc = this_cpu_ptr(&netdev_alloc_cache);
+       data = __alloc_page_frag(nc, fragsz, gfp_mask);
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(netdev_alloc_lock, flags);
+       return data;
+ }
+@@ -438,13 +440,13 @@ struct sk_buff *__netdev_alloc_skb(struc
+       if (sk_memalloc_socks())
+               gfp_mask |= __GFP_MEMALLOC;
+-      local_irq_save(flags);
++      local_lock_irqsave(netdev_alloc_lock, flags);
+       nc = this_cpu_ptr(&netdev_alloc_cache);
+       data = __alloc_page_frag(nc, len, gfp_mask);
+       pfmemalloc = nc->pfmemalloc;
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(netdev_alloc_lock, flags);
+       if (unlikely(!data))
+               return NULL;
diff --git a/patches/features/all/rt/net-core-cpuhotplug-drain-input_pkt_queue-lockless.patch b/patches/features/all/rt/net-core-cpuhotplug-drain-input_pkt_queue-lockless.patch
new file mode 100644 (file)
index 0000000..1d6c363
--- /dev/null
@@ -0,0 +1,47 @@
+Subject: net/core/cpuhotplug: Drain input_pkt_queue lockless
+From: Grygorii Strashko <grygorii.strashko@ti.com>
+Date: Fri, 9 Oct 2015 09:25:49 -0500
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+I can constantly see below error report with 4.1 RT-kernel on TI ARM dra7-evm 
+if I'm trying to unplug cpu1:
+
+[   57.737589] CPU1: shutdown
+[   57.767537] BUG: spinlock bad magic on CPU#0, sh/137
+[   57.767546]  lock: 0xee994730, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
+[   57.767552] CPU: 0 PID: 137 Comm: sh Not tainted 4.1.10-rt8-01700-g2c38702-dirty #55
+[   57.767555] Hardware name: Generic DRA74X (Flattened Device Tree)
+[   57.767568] [<c001acd0>] (unwind_backtrace) from [<c001534c>] (show_stack+0x20/0x24)
+[   57.767579] [<c001534c>] (show_stack) from [<c075560c>] (dump_stack+0x84/0xa0)
+[   57.767593] [<c075560c>] (dump_stack) from [<c00aca48>] (spin_dump+0x84/0xac)
+[   57.767603] [<c00aca48>] (spin_dump) from [<c00acaa4>] (spin_bug+0x34/0x38)
+[   57.767614] [<c00acaa4>] (spin_bug) from [<c00acc10>] (do_raw_spin_lock+0x168/0x1c0)
+[   57.767624] [<c00acc10>] (do_raw_spin_lock) from [<c075b4cc>] (_raw_spin_lock+0x4c/0x54)
+[   57.767631] [<c075b4cc>] (_raw_spin_lock) from [<c07599fc>] (rt_spin_lock_slowlock+0x5c/0x374)
+[   57.767638] [<c07599fc>] (rt_spin_lock_slowlock) from [<c075bcf4>] (rt_spin_lock+0x38/0x70)
+[   57.767649] [<c075bcf4>] (rt_spin_lock) from [<c06333c0>] (skb_dequeue+0x28/0x7c)
+[   57.767662] [<c06333c0>] (skb_dequeue) from [<c06476ec>] (dev_cpu_callback+0x1b8/0x240)
+[   57.767673] [<c06476ec>] (dev_cpu_callback) from [<c007566c>] (notifier_call_chain+0x3c/0xb4)
+
+The reason is that skb_dequeue is taking skb->lock, but RT changed the
+core code to use a raw spinlock. The non-raw lock is not initialized
+on purpose to catch exactly this kind of problem.
+
+Fixes: 91df05da13a6 'net: Use skbufhead with raw lock'
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: stable-rt@vger.kernel.org
+---
+ net/core/dev.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -8046,7 +8046,7 @@ static int dev_cpu_callback(struct notif
+               netif_rx_ni(skb);
+               input_queue_head_incr(oldsd);
+       }
+-      while ((skb = skb_dequeue(&oldsd->input_pkt_queue))) {
++      while ((skb = __skb_dequeue(&oldsd->input_pkt_queue))) {
+               netif_rx_ni(skb);
+               input_queue_head_incr(oldsd);
+       }
diff --git a/patches/features/all/rt/net-core-protect-users-of-napi_alloc_cache-against-r.patch b/patches/features/all/rt/net-core-protect-users-of-napi_alloc_cache-against-r.patch
new file mode 100644 (file)
index 0000000..88dc924
--- /dev/null
@@ -0,0 +1,113 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 15 Jan 2016 16:33:34 +0100
+Subject: net/core: protect users of napi_alloc_cache against
+ reentrance
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On -RT the code running in BH can not be moved to another CPU so CPU
+local variable remain local. However the code can be preempted
+and another task may enter BH accessing the same CPU using the same
+napi_alloc_cache variable.
+This patch ensures that each user of napi_alloc_cache uses a local lock.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ net/core/skbuff.c |   25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
+
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -362,6 +362,7 @@ struct napi_alloc_cache {
+ static DEFINE_PER_CPU(struct page_frag_cache, netdev_alloc_cache);
+ static DEFINE_PER_CPU(struct napi_alloc_cache, napi_alloc_cache);
+ static DEFINE_LOCAL_IRQ_LOCK(netdev_alloc_lock);
++static DEFINE_LOCAL_IRQ_LOCK(napi_alloc_cache_lock);
+ static void *__netdev_alloc_frag(unsigned int fragsz, gfp_t gfp_mask)
+ {
+@@ -391,9 +392,13 @@ EXPORT_SYMBOL(netdev_alloc_frag);
+ static void *__napi_alloc_frag(unsigned int fragsz, gfp_t gfp_mask)
+ {
+-      struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
++      struct napi_alloc_cache *nc;
++      void *data;
+-      return __alloc_page_frag(&nc->page, fragsz, gfp_mask);
++      nc = &get_locked_var(napi_alloc_cache_lock, napi_alloc_cache);
++      data = __alloc_page_frag(&nc->page, fragsz, gfp_mask);
++      put_locked_var(napi_alloc_cache_lock, napi_alloc_cache);
++      return data;
+ }
+ void *napi_alloc_frag(unsigned int fragsz)
+@@ -487,9 +492,10 @@ EXPORT_SYMBOL(__netdev_alloc_skb);
+ struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
+                                gfp_t gfp_mask)
+ {
+-      struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
++      struct napi_alloc_cache *nc;
+       struct sk_buff *skb;
+       void *data;
++      bool pfmemalloc;
+       len += NET_SKB_PAD + NET_IP_ALIGN;
+@@ -507,7 +513,10 @@ struct sk_buff *__napi_alloc_skb(struct
+       if (sk_memalloc_socks())
+               gfp_mask |= __GFP_MEMALLOC;
++      nc = &get_locked_var(napi_alloc_cache_lock, napi_alloc_cache);
+       data = __alloc_page_frag(&nc->page, len, gfp_mask);
++      pfmemalloc = nc->page.pfmemalloc;
++      put_locked_var(napi_alloc_cache_lock, napi_alloc_cache);
+       if (unlikely(!data))
+               return NULL;
+@@ -518,7 +527,7 @@ struct sk_buff *__napi_alloc_skb(struct
+       }
+       /* use OR instead of assignment to avoid clearing of bits in mask */
+-      if (nc->page.pfmemalloc)
++      if (pfmemalloc)
+               skb->pfmemalloc = 1;
+       skb->head_frag = 1;
+@@ -762,23 +771,26 @@ EXPORT_SYMBOL(consume_skb);
+ void __kfree_skb_flush(void)
+ {
+-      struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
++      struct napi_alloc_cache *nc;
++      nc = &get_locked_var(napi_alloc_cache_lock, napi_alloc_cache);
+       /* flush skb_cache if containing objects */
+       if (nc->skb_count) {
+               kmem_cache_free_bulk(skbuff_head_cache, nc->skb_count,
+                                    nc->skb_cache);
+               nc->skb_count = 0;
+       }
++      put_locked_var(napi_alloc_cache_lock, napi_alloc_cache);
+ }
+ static inline void _kfree_skb_defer(struct sk_buff *skb)
+ {
+-      struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
++      struct napi_alloc_cache *nc;
+       /* drop skb->head and call any destructors for packet */
+       skb_release_all(skb);
++      nc = &get_locked_var(napi_alloc_cache_lock, napi_alloc_cache);
+       /* record skb to CPU local list */
+       nc->skb_cache[nc->skb_count++] = skb;
+@@ -793,6 +805,7 @@ static inline void _kfree_skb_defer(stru
+                                    nc->skb_cache);
+               nc->skb_count = 0;
+       }
++      put_locked_var(napi_alloc_cache_lock, napi_alloc_cache);
+ }
+ void __kfree_skb_defer(struct sk_buff *skb)
+ {
diff --git a/patches/features/all/rt/net-dev-always-take-qdisc-s-busylock-in-__dev_xmit_s.patch b/patches/features/all/rt/net-dev-always-take-qdisc-s-busylock-in-__dev_xmit_s.patch
new file mode 100644 (file)
index 0000000..6e86e33
--- /dev/null
@@ -0,0 +1,35 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 30 Mar 2016 13:36:29 +0200
+Subject: [PATCH] net: dev: always take qdisc's busylock in __dev_xmit_skb()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The root-lock is dropped before dev_hard_start_xmit() is invoked and after
+setting the __QDISC___STATE_RUNNING bit. If this task is now pushed away
+by a task with a higher priority then the task with the higher priority
+won't be able to submit packets to the NIC directly instead they will be
+enqueued into the Qdisc. The NIC will remain idle until the task(s) with
+higher priority leave the CPU and the task with lower priority gets back
+and finishes the job.
+
+If we take always the busylock we ensure that the RT task can boost the
+low-prio task and submit the packet.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ net/core/dev.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -3102,7 +3102,11 @@ static inline int __dev_xmit_skb(struct
+        * This permits qdisc->running owner to get the lock more
+        * often and dequeue packets faster.
+        */
++#ifdef CONFIG_PREEMPT_RT_FULL
++      contended = true;
++#else
+       contended = qdisc_is_running(q);
++#endif
+       if (unlikely(contended))
+               spin_lock(&q->busylock);
diff --git a/patches/features/all/rt/net-fix-iptable-xt-write-recseq-begin-rt-fallout.patch b/patches/features/all/rt/net-fix-iptable-xt-write-recseq-begin-rt-fallout.patch
new file mode 100644 (file)
index 0000000..a7d405c
--- /dev/null
@@ -0,0 +1,75 @@
+Subject: net: netfilter: Serialize xt_write_recseq sections on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 28 Oct 2012 11:18:08 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The netfilter code relies only on the implicit semantics of
+local_bh_disable() for serializing wt_write_recseq sections. RT breaks
+that and needs explicit serialization here.
+
+Reported-by: Peter LaDow <petela@gocougs.wsu.edu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/netfilter/x_tables.h |    7 +++++++
+ net/netfilter/core.c               |    6 ++++++
+ 2 files changed, 13 insertions(+)
+
+--- a/include/linux/netfilter/x_tables.h
++++ b/include/linux/netfilter/x_tables.h
+@@ -4,6 +4,7 @@
+ #include <linux/netdevice.h>
+ #include <linux/static_key.h>
++#include <linux/locallock.h>
+ #include <uapi/linux/netfilter/x_tables.h>
+ /* Test a struct->invflags and a boolean for inequality */
+@@ -300,6 +301,8 @@ void xt_free_table_info(struct xt_table_
+  */
+ DECLARE_PER_CPU(seqcount_t, xt_recseq);
++DECLARE_LOCAL_IRQ_LOCK(xt_write_lock);
++
+ /* xt_tee_enabled - true if x_tables needs to handle reentrancy
+  *
+  * Enabled if current ip(6)tables ruleset has at least one -j TEE rule.
+@@ -320,6 +323,9 @@ static inline unsigned int xt_write_recs
+ {
+       unsigned int addend;
++      /* RT protection */
++      local_lock(xt_write_lock);
++
+       /*
+        * Low order bit of sequence is set if we already
+        * called xt_write_recseq_begin().
+@@ -350,6 +356,7 @@ static inline void xt_write_recseq_end(u
+       /* this is kind of a write_seqcount_end(), but addend is 0 or 1 */
+       smp_wmb();
+       __this_cpu_add(xt_recseq.sequence, addend);
++      local_unlock(xt_write_lock);
+ }
+ /*
+--- a/net/netfilter/core.c
++++ b/net/netfilter/core.c
+@@ -22,12 +22,18 @@
+ #include <linux/proc_fs.h>
+ #include <linux/mutex.h>
+ #include <linux/slab.h>
++#include <linux/locallock.h>
+ #include <linux/rcupdate.h>
+ #include <net/net_namespace.h>
+ #include <net/sock.h>
+ #include "nf_internals.h"
++#ifdef CONFIG_PREEMPT_RT_BASE
++DEFINE_LOCAL_IRQ_LOCK(xt_write_lock);
++EXPORT_PER_CPU_SYMBOL(xt_write_lock);
++#endif
++
+ static DEFINE_MUTEX(afinfo_mutex);
+ const struct nf_afinfo __rcu *nf_afinfo[NFPROTO_NUMPROTO] __read_mostly;
diff --git a/patches/features/all/rt/net-make-devnet_rename_seq-a-mutex.patch b/patches/features/all/rt/net-make-devnet_rename_seq-a-mutex.patch
new file mode 100644 (file)
index 0000000..e4b0b40
--- /dev/null
@@ -0,0 +1,107 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 20 Mar 2013 18:06:20 +0100
+Subject: net: Add a mutex around devnet_rename_seq
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On RT write_seqcount_begin() disables preemption and device_rename()
+allocates memory with GFP_KERNEL and grabs later the sysfs_mutex
+mutex. Serialize with a mutex and add use the non preemption disabling
+__write_seqcount_begin().
+
+To avoid writer starvation, let the reader grab the mutex and release
+it when it detects a writer in progress. This keeps the normal case
+(no reader on the fly) fast.
+
+[ tglx: Instead of replacing the seqcount by a mutex, add the mutex ]
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ net/core/dev.c |   34 ++++++++++++++++++++--------------
+ 1 file changed, 20 insertions(+), 14 deletions(-)
+
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -190,6 +190,7 @@ static unsigned int napi_gen_id = NR_CPU
+ static DEFINE_READ_MOSTLY_HASHTABLE(napi_hash, 8);
+ static seqcount_t devnet_rename_seq;
++static DEFINE_MUTEX(devnet_rename_mutex);
+ static inline void dev_base_seq_inc(struct net *net)
+ {
+@@ -888,7 +889,8 @@ int netdev_get_name(struct net *net, cha
+       strcpy(name, dev->name);
+       rcu_read_unlock();
+       if (read_seqcount_retry(&devnet_rename_seq, seq)) {
+-              cond_resched();
++              mutex_lock(&devnet_rename_mutex);
++              mutex_unlock(&devnet_rename_mutex);
+               goto retry;
+       }
+@@ -1157,20 +1159,17 @@ int dev_change_name(struct net_device *d
+       if (dev->flags & IFF_UP)
+               return -EBUSY;
+-      write_seqcount_begin(&devnet_rename_seq);
++      mutex_lock(&devnet_rename_mutex);
++      __raw_write_seqcount_begin(&devnet_rename_seq);
+-      if (strncmp(newname, dev->name, IFNAMSIZ) == 0) {
+-              write_seqcount_end(&devnet_rename_seq);
+-              return 0;
+-      }
++      if (strncmp(newname, dev->name, IFNAMSIZ) == 0)
++              goto outunlock;
+       memcpy(oldname, dev->name, IFNAMSIZ);
+       err = dev_get_valid_name(net, dev, newname);
+-      if (err < 0) {
+-              write_seqcount_end(&devnet_rename_seq);
+-              return err;
+-      }
++      if (err < 0)
++              goto outunlock;
+       if (oldname[0] && !strchr(oldname, '%'))
+               netdev_info(dev, "renamed from %s\n", oldname);
+@@ -1183,11 +1182,12 @@ int dev_change_name(struct net_device *d
+       if (ret) {
+               memcpy(dev->name, oldname, IFNAMSIZ);
+               dev->name_assign_type = old_assign_type;
+-              write_seqcount_end(&devnet_rename_seq);
+-              return ret;
++              err = ret;
++              goto outunlock;
+       }
+-      write_seqcount_end(&devnet_rename_seq);
++      __raw_write_seqcount_end(&devnet_rename_seq);
++      mutex_unlock(&devnet_rename_mutex);
+       netdev_adjacent_rename_links(dev, oldname);
+@@ -1208,7 +1208,8 @@ int dev_change_name(struct net_device *d
+               /* err >= 0 after dev_alloc_name() or stores the first errno */
+               if (err >= 0) {
+                       err = ret;
+-                      write_seqcount_begin(&devnet_rename_seq);
++                      mutex_lock(&devnet_rename_mutex);
++                      __raw_write_seqcount_begin(&devnet_rename_seq);
+                       memcpy(dev->name, oldname, IFNAMSIZ);
+                       memcpy(oldname, newname, IFNAMSIZ);
+                       dev->name_assign_type = old_assign_type;
+@@ -1221,6 +1222,11 @@ int dev_change_name(struct net_device *d
+       }
+       return err;
++
++outunlock:
++      __raw_write_seqcount_end(&devnet_rename_seq);
++      mutex_unlock(&devnet_rename_mutex);
++      return err;
+ }
+ /**
diff --git a/patches/features/all/rt/net-move-xmit_recursion-to-per-task-variable-on-RT.patch b/patches/features/all/rt/net-move-xmit_recursion-to-per-task-variable-on-RT.patch
new file mode 100644 (file)
index 0000000..e5644a5
--- /dev/null
@@ -0,0 +1,151 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 13 Jan 2016 15:55:02 +0100
+Subject: net: move xmit_recursion to per-task variable on -RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+A softirq on -RT can be preempted. That means one task is in
+__dev_queue_xmit(), gets preempted and another task may enter
+__dev_queue_xmit() aw well. netperf together with a bridge device
+will then trigger the `recursion alert` because each task increments
+the xmit_recursion variable which is per-CPU.
+A virtual device like br0 is required to trigger this warning.
+
+This patch moves the counter to per task instead per-CPU so it counts
+the recursion properly on -RT.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/netdevice.h |   41 ++++++++++++++++++++++++++++++++++++++++-
+ include/linux/sched.h     |    3 +++
+ net/core/dev.c            |    9 +++++----
+ net/core/filter.c         |    6 +++---
+ 4 files changed, 51 insertions(+), 8 deletions(-)
+
+--- a/include/linux/netdevice.h
++++ b/include/linux/netdevice.h
+@@ -2463,14 +2463,53 @@ void netdev_freemem(struct net_device *d
+ void synchronize_net(void);
+ int init_dummy_netdev(struct net_device *dev);
+-DECLARE_PER_CPU(int, xmit_recursion);
+ #define XMIT_RECURSION_LIMIT  10
++#ifdef CONFIG_PREEMPT_RT_FULL
++static inline int dev_recursion_level(void)
++{
++      return current->xmit_recursion;
++}
++
++static inline int xmit_rec_read(void)
++{
++      return current->xmit_recursion;
++}
++
++static inline void xmit_rec_inc(void)
++{
++      current->xmit_recursion++;
++}
++
++static inline void xmit_rec_dec(void)
++{
++      current->xmit_recursion--;
++}
++
++#else
++
++DECLARE_PER_CPU(int, xmit_recursion);
+ static inline int dev_recursion_level(void)
+ {
+       return this_cpu_read(xmit_recursion);
+ }
++static inline int xmit_rec_read(void)
++{
++      return __this_cpu_read(xmit_recursion);
++}
++
++static inline void xmit_rec_inc(void)
++{
++      __this_cpu_inc(xmit_recursion);
++}
++
++static inline void xmit_rec_dec(void)
++{
++      __this_cpu_dec(xmit_recursion);
++}
++#endif
++
+ struct net_device *dev_get_by_index(struct net *net, int ifindex);
+ struct net_device *__dev_get_by_index(struct net *net, int ifindex);
+ struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex);
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1983,6 +1983,9 @@ struct task_struct {
+ #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
+       unsigned long   task_state_change;
+ #endif
++#ifdef CONFIG_PREEMPT_RT_FULL
++      int xmit_recursion;
++#endif
+       int pagefault_disabled;
+ #ifdef CONFIG_MMU
+       struct task_struct *oom_reaper_list;
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -3165,8 +3165,10 @@ static void skb_update_prio(struct sk_bu
+ #define skb_update_prio(skb)
+ #endif
++#ifndef CONFIG_PREEMPT_RT_FULL
+ DEFINE_PER_CPU(int, xmit_recursion);
+ EXPORT_SYMBOL(xmit_recursion);
++#endif
+ /**
+  *    dev_loopback_xmit - loop back @skb
+@@ -3400,8 +3402,7 @@ static int __dev_queue_xmit(struct sk_bu
+               int cpu = smp_processor_id(); /* ok because BHs are off */
+               if (txq->xmit_lock_owner != cpu) {
+-                      if (unlikely(__this_cpu_read(xmit_recursion) >
+-                                   XMIT_RECURSION_LIMIT))
++                      if (unlikely(xmit_rec_read() > XMIT_RECURSION_LIMIT))
+                               goto recursion_alert;
+                       skb = validate_xmit_skb(skb, dev);
+@@ -3411,9 +3412,9 @@ static int __dev_queue_xmit(struct sk_bu
+                       HARD_TX_LOCK(dev, txq, cpu);
+                       if (!netif_xmit_stopped(txq)) {
+-                              __this_cpu_inc(xmit_recursion);
++                              xmit_rec_inc();
+                               skb = dev_hard_start_xmit(skb, dev, txq, &rc);
+-                              __this_cpu_dec(xmit_recursion);
++                              xmit_rec_dec();
+                               if (dev_xmit_complete(rc)) {
+                                       HARD_TX_UNLOCK(dev, txq);
+                                       goto out;
+--- a/net/core/filter.c
++++ b/net/core/filter.c
+@@ -1645,7 +1645,7 @@ static inline int __bpf_tx_skb(struct ne
+ {
+       int ret;
+-      if (unlikely(__this_cpu_read(xmit_recursion) > XMIT_RECURSION_LIMIT)) {
++      if (unlikely(xmit_rec_read() > XMIT_RECURSION_LIMIT)) {
+               net_crit_ratelimited("bpf: recursion limit reached on datapath, buggy bpf program?\n");
+               kfree_skb(skb);
+               return -ENETDOWN;
+@@ -1653,9 +1653,9 @@ static inline int __bpf_tx_skb(struct ne
+       skb->dev = dev;
+-      __this_cpu_inc(xmit_recursion);
++      xmit_rec_inc();
+       ret = dev_queue_xmit(skb);
+-      __this_cpu_dec(xmit_recursion);
++      xmit_rec_dec();
+       return ret;
+ }
diff --git a/patches/features/all/rt/net-prevent-abba-deadlock.patch b/patches/features/all/rt/net-prevent-abba-deadlock.patch
new file mode 100644 (file)
index 0000000..14902cf
--- /dev/null
@@ -0,0 +1,112 @@
+Subject: net-flip-lock-dep-thingy.patch
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 28 Jun 2011 10:59:58 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+=======================================================
+[ INFO: possible circular locking dependency detected ]
+3.0.0-rc3+ #26
+-------------------------------------------------------
+ip/1104 is trying to acquire lock:
+ (local_softirq_lock){+.+...}, at: [<ffffffff81056d12>] __local_lock+0x25/0x68
+
+but task is already holding lock:
+ (sk_lock-AF_INET){+.+...}, at: [<ffffffff81433308>] lock_sock+0x10/0x12
+
+which lock already depends on the new lock.
+
+
+the existing dependency chain (in reverse order) is:
+
+-> #1 (sk_lock-AF_INET){+.+...}:
+       [<ffffffff810836e5>] lock_acquire+0x103/0x12e
+       [<ffffffff813e2781>] lock_sock_nested+0x82/0x92
+       [<ffffffff81433308>] lock_sock+0x10/0x12
+       [<ffffffff81433afa>] tcp_close+0x1b/0x355
+       [<ffffffff81453c99>] inet_release+0xc3/0xcd
+       [<ffffffff813dff3f>] sock_release+0x1f/0x74
+       [<ffffffff813dffbb>] sock_close+0x27/0x2b
+       [<ffffffff81129c63>] fput+0x11d/0x1e3
+       [<ffffffff81126577>] filp_close+0x70/0x7b
+       [<ffffffff8112667a>] sys_close+0xf8/0x13d
+       [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
+
+-> #0 (local_softirq_lock){+.+...}:
+       [<ffffffff81082ecc>] __lock_acquire+0xacc/0xdc8
+       [<ffffffff810836e5>] lock_acquire+0x103/0x12e
+       [<ffffffff814a7e40>] _raw_spin_lock+0x3b/0x4a
+       [<ffffffff81056d12>] __local_lock+0x25/0x68
+       [<ffffffff81056d8b>] local_bh_disable+0x36/0x3b
+       [<ffffffff814a7fc4>] _raw_write_lock_bh+0x16/0x4f
+       [<ffffffff81433c38>] tcp_close+0x159/0x355
+       [<ffffffff81453c99>] inet_release+0xc3/0xcd
+       [<ffffffff813dff3f>] sock_release+0x1f/0x74
+       [<ffffffff813dffbb>] sock_close+0x27/0x2b
+       [<ffffffff81129c63>] fput+0x11d/0x1e3
+       [<ffffffff81126577>] filp_close+0x70/0x7b
+       [<ffffffff8112667a>] sys_close+0xf8/0x13d
+       [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
+
+other info that might help us debug this:
+
+ Possible unsafe locking scenario:
+
+       CPU0                    CPU1
+       ----                    ----
+  lock(sk_lock-AF_INET);
+                               lock(local_softirq_lock);
+                               lock(sk_lock-AF_INET);
+  lock(local_softirq_lock);
+
+ *** DEADLOCK ***
+
+1 lock held by ip/1104:
+ #0:  (sk_lock-AF_INET){+.+...}, at: [<ffffffff81433308>] lock_sock+0x10/0x12
+
+stack backtrace:
+Pid: 1104, comm: ip Not tainted 3.0.0-rc3+ #26
+Call Trace:
+ [<ffffffff81081649>] print_circular_bug+0x1f8/0x209
+ [<ffffffff81082ecc>] __lock_acquire+0xacc/0xdc8
+ [<ffffffff81056d12>] ? __local_lock+0x25/0x68
+ [<ffffffff810836e5>] lock_acquire+0x103/0x12e
+ [<ffffffff81056d12>] ? __local_lock+0x25/0x68
+ [<ffffffff81046c75>] ? get_parent_ip+0x11/0x41
+ [<ffffffff814a7e40>] _raw_spin_lock+0x3b/0x4a
+ [<ffffffff81056d12>] ? __local_lock+0x25/0x68
+ [<ffffffff81046c8c>] ? get_parent_ip+0x28/0x41
+ [<ffffffff81056d12>] __local_lock+0x25/0x68
+ [<ffffffff81056d8b>] local_bh_disable+0x36/0x3b
+ [<ffffffff81433308>] ? lock_sock+0x10/0x12
+ [<ffffffff814a7fc4>] _raw_write_lock_bh+0x16/0x4f
+ [<ffffffff81433c38>] tcp_close+0x159/0x355
+ [<ffffffff81453c99>] inet_release+0xc3/0xcd
+ [<ffffffff813dff3f>] sock_release+0x1f/0x74
+ [<ffffffff813dffbb>] sock_close+0x27/0x2b
+ [<ffffffff81129c63>] fput+0x11d/0x1e3
+ [<ffffffff81126577>] filp_close+0x70/0x7b
+ [<ffffffff8112667a>] sys_close+0xf8/0x13d
+ [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
+
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ net/core/sock.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/net/core/sock.c
++++ b/net/core/sock.c
+@@ -2499,12 +2499,11 @@ void lock_sock_nested(struct sock *sk, i
+       if (sk->sk_lock.owned)
+               __lock_sock(sk);
+       sk->sk_lock.owned = 1;
+-      spin_unlock(&sk->sk_lock.slock);
++      spin_unlock_bh(&sk->sk_lock.slock);
+       /*
+        * The sk_lock has mutex_lock() semantics here:
+        */
+       mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
+-      local_bh_enable();
+ }
+ EXPORT_SYMBOL(lock_sock_nested);
diff --git a/patches/features/all/rt/net-provide-a-way-to-delegate-processing-a-softirq-t.patch b/patches/features/all/rt/net-provide-a-way-to-delegate-processing-a-softirq-t.patch
new file mode 100644 (file)
index 0000000..cf7fc1b
--- /dev/null
@@ -0,0 +1,79 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 20 Jan 2016 15:39:05 +0100
+Subject: net: provide a way to delegate processing a softirq to
+ ksoftirqd
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+If the NET_RX uses up all of his budget it moves the following NAPI
+invocations into the `ksoftirqd`. On -RT it does not do so. Instead it
+rises the NET_RX softirq in its current context again.
+
+In order to get closer to mainline's behaviour this patch provides
+__raise_softirq_irqoff_ksoft() which raises the softirq in the ksoftird.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/interrupt.h |    8 ++++++++
+ kernel/softirq.c          |   21 +++++++++++++++++++++
+ net/core/dev.c            |    2 +-
+ 3 files changed, 30 insertions(+), 1 deletion(-)
+
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -496,6 +496,14 @@ extern void thread_do_softirq(void);
+ extern void open_softirq(int nr, void (*action)(struct softirq_action *));
+ extern void softirq_init(void);
+ extern void __raise_softirq_irqoff(unsigned int nr);
++#ifdef CONFIG_PREEMPT_RT_FULL
++extern void __raise_softirq_irqoff_ksoft(unsigned int nr);
++#else
++static inline void __raise_softirq_irqoff_ksoft(unsigned int nr)
++{
++      __raise_softirq_irqoff(nr);
++}
++#endif
+ extern void raise_softirq_irqoff(unsigned int nr);
+ extern void raise_softirq(unsigned int nr);
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -685,6 +685,27 @@ void __raise_softirq_irqoff(unsigned int
+ }
+ /*
++ * Same as __raise_softirq_irqoff() but will process them in ksoftirqd
++ */
++void __raise_softirq_irqoff_ksoft(unsigned int nr)
++{
++      unsigned int mask;
++
++      if (WARN_ON_ONCE(!__this_cpu_read(ksoftirqd) ||
++                       !__this_cpu_read(ktimer_softirqd)))
++              return;
++      mask = 1UL << nr;
++
++      trace_softirq_raise(nr);
++      or_softirq_pending(mask);
++      if (mask & TIMER_SOFTIRQS)
++              __this_cpu_read(ktimer_softirqd)->softirqs_raised |= mask;
++      else
++              __this_cpu_read(ksoftirqd)->softirqs_raised |= mask;
++      wakeup_proper_softirq(nr);
++}
++
++/*
+  * This function must run with irqs disabled!
+  */
+ void raise_softirq_irqoff(unsigned int nr)
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -5279,7 +5279,7 @@ static __latent_entropy void net_rx_acti
+       list_splice_tail(&repoll, &list);
+       list_splice(&list, &sd->poll_list);
+       if (!list_empty(&sd->poll_list))
+-              __raise_softirq_irqoff(NET_RX_SOFTIRQ);
++              __raise_softirq_irqoff_ksoft(NET_RX_SOFTIRQ);
+       net_rps_action_and_irq_enable(sd);
+ }
diff --git a/patches/features/all/rt/net-sched-dev_deactivate_many-use-msleep-1-instead-o.patch b/patches/features/all/rt/net-sched-dev_deactivate_many-use-msleep-1-instead-o.patch
new file mode 100644 (file)
index 0000000..48b4407
--- /dev/null
@@ -0,0 +1,58 @@
+From: Marc Kleine-Budde <mkl@pengutronix.de>
+Date: Wed, 5 Mar 2014 00:49:47 +0100
+Subject: net: sched: Use msleep() instead of yield()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On PREEMPT_RT enabled systems the interrupt handler run as threads at prio 50
+(by default). If a high priority userspace process tries to shut down a busy
+network interface it might spin in a yield loop waiting for the device to
+become idle. With the interrupt thread having a lower priority than the
+looping process it might never be scheduled and so result in a deadlock on UP
+systems.
+
+With Magic SysRq the following backtrace can be produced:
+
+> test_app R running      0   174    168 0x00000000
+> [<c02c7070>] (__schedule+0x220/0x3fc) from [<c02c7870>] (preempt_schedule_irq+0x48/0x80)
+> [<c02c7870>] (preempt_schedule_irq+0x48/0x80) from [<c0008fa8>] (svc_preempt+0x8/0x20)
+> [<c0008fa8>] (svc_preempt+0x8/0x20) from [<c001a984>] (local_bh_enable+0x18/0x88)
+> [<c001a984>] (local_bh_enable+0x18/0x88) from [<c025316c>] (dev_deactivate_many+0x220/0x264)
+> [<c025316c>] (dev_deactivate_many+0x220/0x264) from [<c023be04>] (__dev_close_many+0x64/0xd4)
+> [<c023be04>] (__dev_close_many+0x64/0xd4) from [<c023be9c>] (__dev_close+0x28/0x3c)
+> [<c023be9c>] (__dev_close+0x28/0x3c) from [<c023f7f0>] (__dev_change_flags+0x88/0x130)
+> [<c023f7f0>] (__dev_change_flags+0x88/0x130) from [<c023f904>] (dev_change_flags+0x10/0x48)
+> [<c023f904>] (dev_change_flags+0x10/0x48) from [<c024c140>] (do_setlink+0x370/0x7ec)
+> [<c024c140>] (do_setlink+0x370/0x7ec) from [<c024d2f0>] (rtnl_newlink+0x2b4/0x450)
+> [<c024d2f0>] (rtnl_newlink+0x2b4/0x450) from [<c024cfa0>] (rtnetlink_rcv_msg+0x158/0x1f4)
+> [<c024cfa0>] (rtnetlink_rcv_msg+0x158/0x1f4) from [<c0256740>] (netlink_rcv_skb+0xac/0xc0)
+> [<c0256740>] (netlink_rcv_skb+0xac/0xc0) from [<c024bbd8>] (rtnetlink_rcv+0x18/0x24)
+> [<c024bbd8>] (rtnetlink_rcv+0x18/0x24) from [<c02561b8>] (netlink_unicast+0x13c/0x198)
+> [<c02561b8>] (netlink_unicast+0x13c/0x198) from [<c025651c>] (netlink_sendmsg+0x264/0x2e0)
+> [<c025651c>] (netlink_sendmsg+0x264/0x2e0) from [<c022af98>] (sock_sendmsg+0x78/0x98)
+> [<c022af98>] (sock_sendmsg+0x78/0x98) from [<c022bb50>] (___sys_sendmsg.part.25+0x268/0x278)
+> [<c022bb50>] (___sys_sendmsg.part.25+0x268/0x278) from [<c022cf08>] (__sys_sendmsg+0x48/0x78)
+> [<c022cf08>] (__sys_sendmsg+0x48/0x78) from [<c0009320>] (ret_fast_syscall+0x0/0x2c)
+
+This patch works around the problem by replacing yield() by msleep(1), giving
+the interrupt thread time to finish, similar to other changes contained in the
+rt patch set. Using wait_for_completion() instead would probably be a better
+solution.
+
+
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ net/sched/sch_generic.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/sched/sch_generic.c
++++ b/net/sched/sch_generic.c
+@@ -925,7 +925,7 @@ void dev_deactivate_many(struct list_hea
+       /* Wait for outstanding qdisc_run calls. */
+       list_for_each_entry(dev, head, close_list)
+               while (some_qdisc_is_busy(dev))
+-                      yield();
++                      msleep(1);
+ }
+ void dev_deactivate(struct net_device *dev)
diff --git a/patches/features/all/rt/net-use-cpu-chill.patch b/patches/features/all/rt/net-use-cpu-chill.patch
new file mode 100644 (file)
index 0000000..7100162
--- /dev/null
@@ -0,0 +1,63 @@
+Subject: net: Use cpu_chill() instead of cpu_relax()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 07 Mar 2012 21:10:04 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Retry loops on RT might loop forever when the modifying side was
+preempted. Use cpu_chill() instead of cpu_relax() to let the system
+make progress.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ net/packet/af_packet.c |    5 +++--
+ net/rds/ib_rdma.c      |    3 ++-
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -63,6 +63,7 @@
+ #include <linux/if_packet.h>
+ #include <linux/wireless.h>
+ #include <linux/kernel.h>
++#include <linux/delay.h>
+ #include <linux/kmod.h>
+ #include <linux/slab.h>
+ #include <linux/vmalloc.h>
+@@ -694,7 +695,7 @@ static void prb_retire_rx_blk_timer_expi
+       if (BLOCK_NUM_PKTS(pbd)) {
+               while (atomic_read(&pkc->blk_fill_in_prog)) {
+                       /* Waiting for skb_copy_bits to finish... */
+-                      cpu_relax();
++                      cpu_chill();
+               }
+       }
+@@ -956,7 +957,7 @@ static void prb_retire_current_block(str
+               if (!(status & TP_STATUS_BLK_TMO)) {
+                       while (atomic_read(&pkc->blk_fill_in_prog)) {
+                               /* Waiting for skb_copy_bits to finish... */
+-                              cpu_relax();
++                              cpu_chill();
+                       }
+               }
+               prb_close_block(pkc, pbd, po, status);
+--- a/net/rds/ib_rdma.c
++++ b/net/rds/ib_rdma.c
+@@ -34,6 +34,7 @@
+ #include <linux/slab.h>
+ #include <linux/rculist.h>
+ #include <linux/llist.h>
++#include <linux/delay.h>
+ #include "rds_single_path.h"
+ #include "ib_mr.h"
+@@ -210,7 +211,7 @@ static inline void wait_clean_list_grace
+       for_each_online_cpu(cpu) {
+               flag = &per_cpu(clean_list_grace, cpu);
+               while (test_bit(CLEAN_LIST_BUSY_BIT, flag))
+-                      cpu_relax();
++                      cpu_chill();
+       }
+ }
diff --git a/patches/features/all/rt/net-wireless-warn-nort.patch b/patches/features/all/rt/net-wireless-warn-nort.patch
new file mode 100644 (file)
index 0000000..41c4c32
--- /dev/null
@@ -0,0 +1,24 @@
+Subject: net/wireless: Use WARN_ON_NORT()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 21 Jul 2011 21:05:33 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The softirq counter is meaningless on RT, so the check triggers a
+false positive.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ net/mac80211/rx.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -4180,7 +4180,7 @@ void ieee80211_rx_napi(struct ieee80211_
+       struct ieee80211_supported_band *sband;
+       struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
+-      WARN_ON_ONCE(softirq_count() == 0);
++      WARN_ON_ONCE_NONRT(softirq_count() == 0);
+       if (WARN_ON(status->band >= NUM_NL80211_BANDS))
+               goto drop;
diff --git a/patches/features/all/rt/oleg-signal-rt-fix.patch b/patches/features/all/rt/oleg-signal-rt-fix.patch
new file mode 100644 (file)
index 0000000..efe6b89
--- /dev/null
@@ -0,0 +1,143 @@
+From: Oleg Nesterov <oleg@redhat.com>
+Date: Tue, 14 Jul 2015 14:26:34 +0200
+Subject: signal/x86: Delay calling signals in atomic
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On x86_64 we must disable preemption before we enable interrupts
+for stack faults, int3 and debugging, because the current task is using
+a per CPU debug stack defined by the IST. If we schedule out, another task
+can come in and use the same stack and cause the stack to be corrupted
+and crash the kernel on return.
+
+When CONFIG_PREEMPT_RT_FULL is enabled, spin_locks become mutexes, and
+one of these is the spin lock used in signal handling.
+
+Some of the debug code (int3) causes do_trap() to send a signal.
+This function calls a spin lock that has been converted to a mutex
+and has the possibility to sleep. If this happens, the above issues with
+the corrupted stack is possible.
+
+Instead of calling the signal right away, for PREEMPT_RT and x86_64,
+the signal information is stored on the stacks task_struct and
+TIF_NOTIFY_RESUME is set. Then on exit of the trap, the signal resume
+code will send the signal when preemption is enabled.
+
+[ rostedt: Switched from #ifdef CONFIG_PREEMPT_RT_FULL to
+  ARCH_RT_DELAYS_SIGNAL_SEND and added comments to the code. ]
+
+
+Signed-off-by: Oleg Nesterov <oleg@redhat.com>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+
+ arch/x86/entry/common.c       |    7 +++++++
+ arch/x86/include/asm/signal.h |   13 +++++++++++++
+ include/linux/sched.h         |    4 ++++
+ kernel/signal.c               |   37 +++++++++++++++++++++++++++++++++++--
+ 4 files changed, 59 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/entry/common.c
++++ b/arch/x86/entry/common.c
+@@ -148,6 +148,13 @@ static void exit_to_usermode_loop(struct
+               if (cached_flags & _TIF_NEED_RESCHED)
+                       schedule();
++#ifdef ARCH_RT_DELAYS_SIGNAL_SEND
++              if (unlikely(current->forced_info.si_signo)) {
++                      struct task_struct *t = current;
++                      force_sig_info(t->forced_info.si_signo, &t->forced_info, t);
++                      t->forced_info.si_signo = 0;
++              }
++#endif
+               if (cached_flags & _TIF_UPROBE)
+                       uprobe_notify_resume(regs);
+--- a/arch/x86/include/asm/signal.h
++++ b/arch/x86/include/asm/signal.h
+@@ -27,6 +27,19 @@ typedef struct {
+ #define SA_IA32_ABI   0x02000000u
+ #define SA_X32_ABI    0x01000000u
++/*
++ * Because some traps use the IST stack, we must keep preemption
++ * disabled while calling do_trap(), but do_trap() may call
++ * force_sig_info() which will grab the signal spin_locks for the
++ * task, which in PREEMPT_RT_FULL are mutexes.  By defining
++ * ARCH_RT_DELAYS_SIGNAL_SEND the force_sig_info() will set
++ * TIF_NOTIFY_RESUME and set up the signal to be sent on exit of the
++ * trap.
++ */
++#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_X86_64)
++#define ARCH_RT_DELAYS_SIGNAL_SEND
++#endif
++
+ #ifndef CONFIG_COMPAT
+ typedef sigset_t compat_sigset_t;
+ #endif
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1696,6 +1696,10 @@ struct task_struct {
+       sigset_t blocked, real_blocked;
+       sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */
+       struct sigpending pending;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      /* TODO: move me into ->restart_block ? */
++      struct siginfo forced_info;
++#endif
+       unsigned long sas_ss_sp;
+       size_t sas_ss_size;
+--- a/kernel/signal.c
++++ b/kernel/signal.c
+@@ -1216,8 +1216,8 @@ int do_send_sig_info(int sig, struct sig
+  * We don't want to have recursive SIGSEGV's etc, for example,
+  * that is why we also clear SIGNAL_UNKILLABLE.
+  */
+-int
+-force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
++static int
++do_force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
+ {
+       unsigned long int flags;
+       int ret, blocked, ignored;
+@@ -1242,6 +1242,39 @@ force_sig_info(int sig, struct siginfo *
+       return ret;
+ }
++int force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
++{
++/*
++ * On some archs, PREEMPT_RT has to delay sending a signal from a trap
++ * since it can not enable preemption, and the signal code's spin_locks
++ * turn into mutexes. Instead, it must set TIF_NOTIFY_RESUME which will
++ * send the signal on exit of the trap.
++ */
++#ifdef ARCH_RT_DELAYS_SIGNAL_SEND
++      if (in_atomic()) {
++              if (WARN_ON_ONCE(t != current))
++                      return 0;
++              if (WARN_ON_ONCE(t->forced_info.si_signo))
++                      return 0;
++
++              if (is_si_special(info)) {
++                      WARN_ON_ONCE(info != SEND_SIG_PRIV);
++                      t->forced_info.si_signo = sig;
++                      t->forced_info.si_errno = 0;
++                      t->forced_info.si_code = SI_KERNEL;
++                      t->forced_info.si_pid = 0;
++                      t->forced_info.si_uid = 0;
++              } else {
++                      t->forced_info = *info;
++              }
++
++              set_tsk_thread_flag(t, TIF_NOTIFY_RESUME);
++              return 0;
++      }
++#endif
++      return do_force_sig_info(sig, info, t);
++}
++
+ /*
+  * Nuke all other threads in the group.
+  */
diff --git a/patches/features/all/rt/panic-disable-random-on-rt.patch b/patches/features/all/rt/panic-disable-random-on-rt.patch
new file mode 100644 (file)
index 0000000..bce2557
--- /dev/null
@@ -0,0 +1,27 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 14 Jul 2015 14:26:34 +0200
+Subject: panic: skip get_random_bytes for RT_FULL in init_oops_id
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Disable on -RT. If this is invoked from irq-context we will have problems
+to acquire the sleeping lock.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/panic.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/kernel/panic.c
++++ b/kernel/panic.c
+@@ -482,9 +482,11 @@ static u64 oops_id;
+ static int init_oops_id(void)
+ {
++#ifndef CONFIG_PREEMPT_RT_FULL
+       if (!oops_id)
+               get_random_bytes(&oops_id, sizeof(oops_id));
+       else
++#endif
+               oops_id++;
+       return 0;
diff --git a/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch b/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch
new file mode 100644 (file)
index 0000000..56c9fe2
--- /dev/null
@@ -0,0 +1,109 @@
+Subject: rcu: Make ksoftirqd do RCU quiescent states
+From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
+Date: Wed, 5 Oct 2011 11:45:18 -0700
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Implementing RCU-bh in terms of RCU-preempt makes the system vulnerable
+to network-based denial-of-service attacks.  This patch therefore
+makes __do_softirq() invoke rcu_bh_qs(), but only when __do_softirq()
+is running in ksoftirqd context.  A wrapper layer in interposed so that
+other calls to __do_softirq() avoid invoking rcu_bh_qs().  The underlying
+function __do_softirq_common() does the actual work.
+
+The reason that rcu_bh_qs() is bad in these non-ksoftirqd contexts is
+that there might be a local_bh_enable() inside an RCU-preempt read-side
+critical section.  This local_bh_enable() can invoke __do_softirq()
+directly, so if __do_softirq() were to invoke rcu_bh_qs() (which just
+calls rcu_preempt_qs() in the PREEMPT_RT_FULL case), there would be
+an illegal RCU-preempt quiescent state in the middle of an RCU-preempt
+read-side critical section.  Therefore, quiescent states can only happen
+in cases where __do_softirq() is invoked directly from ksoftirqd.
+
+Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Link: http://lkml.kernel.org/r/20111005184518.GA21601@linux.vnet.ibm.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/rcupdate.h |    4 ----
+ kernel/rcu/tree.c        |    9 ++++++++-
+ kernel/rcu/tree_plugin.h |    8 +++++++-
+ 3 files changed, 15 insertions(+), 6 deletions(-)
+
+--- a/include/linux/rcupdate.h
++++ b/include/linux/rcupdate.h
+@@ -343,11 +343,7 @@ static inline int rcu_preempt_depth(void
+ /* Internal to kernel */
+ void rcu_init(void);
+ void rcu_sched_qs(void);
+-#ifdef CONFIG_PREEMPT_RT_FULL
+-static inline void rcu_bh_qs(void) { }
+-#else
+ void rcu_bh_qs(void);
+-#endif
+ void rcu_check_callbacks(int user);
+ void rcu_report_dead(unsigned int cpu);
+ void rcu_cpu_starting(unsigned int cpu);
+--- a/kernel/rcu/tree.c
++++ b/kernel/rcu/tree.c
+@@ -260,7 +260,14 @@ void rcu_sched_qs(void)
+                          this_cpu_ptr(&rcu_sched_data), true);
+ }
+-#ifndef CONFIG_PREEMPT_RT_FULL
++#ifdef CONFIG_PREEMPT_RT_FULL
++static void rcu_preempt_qs(void);
++
++void rcu_bh_qs(void)
++{
++      rcu_preempt_qs();
++}
++#else
+ void rcu_bh_qs(void)
+ {
+       if (__this_cpu_read(rcu_bh_data.cpu_no_qs.s)) {
+--- a/kernel/rcu/tree_plugin.h
++++ b/kernel/rcu/tree_plugin.h
+@@ -28,6 +28,7 @@
+ #include <linux/gfp.h>
+ #include <linux/oom.h>
+ #include <linux/smpboot.h>
++#include <linux/jiffies.h>
+ #include "../time/tick-internal.h"
+ #ifdef CONFIG_RCU_BOOST
+@@ -1244,7 +1245,7 @@ static void rcu_prepare_kthreads(int cpu
+ #endif /* #else #ifdef CONFIG_RCU_BOOST */
+-#if !defined(CONFIG_RCU_FAST_NO_HZ)
++#if !defined(CONFIG_RCU_FAST_NO_HZ) || defined(CONFIG_PREEMPT_RT_FULL)
+ /*
+  * Check to see if any future RCU-related work will need to be done
+@@ -1261,7 +1262,9 @@ int rcu_needs_cpu(u64 basemono, u64 *nex
+       return IS_ENABLED(CONFIG_RCU_NOCB_CPU_ALL)
+              ? 0 : rcu_cpu_has_callbacks(NULL);
+ }
++#endif /* !defined(CONFIG_RCU_FAST_NO_HZ) || defined(CONFIG_PREEMPT_RT_FULL) */
++#if !defined(CONFIG_RCU_FAST_NO_HZ)
+ /*
+  * Because we do not have RCU_FAST_NO_HZ, don't bother cleaning up
+  * after it.
+@@ -1357,6 +1360,8 @@ static bool __maybe_unused rcu_try_advan
+       return cbs_ready;
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
++
+ /*
+  * Allow the CPU to enter dyntick-idle mode unless it has callbacks ready
+  * to invoke.  If the CPU has callbacks, try to advance them.  Tell the
+@@ -1402,6 +1407,7 @@ int rcu_needs_cpu(u64 basemono, u64 *nex
+       *nextevt = basemono + dj * TICK_NSEC;
+       return 0;
+ }
++#endif /* #ifndef CONFIG_PREEMPT_RT_FULL */
+ /*
+  * Prepare a CPU for idle from an RCU perspective.  The first major task
diff --git a/patches/features/all/rt/pci-access-use-__wake_up_all_locked.patch b/patches/features/all/rt/pci-access-use-__wake_up_all_locked.patch
new file mode 100644 (file)
index 0000000..0f6b958
--- /dev/null
@@ -0,0 +1,26 @@
+Subject: pci: Use __wake_up_all_locked in pci_unblock_user_cfg_access()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 01 Dec 2011 00:07:16 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The waitqueue is protected by the pci_lock, so we can just avoid to
+lock the waitqueue lock itself. That prevents the
+might_sleep()/scheduling while atomic problem on RT
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/pci/access.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/pci/access.c
++++ b/drivers/pci/access.c
+@@ -672,7 +672,7 @@ void pci_cfg_access_unlock(struct pci_de
+       WARN_ON(!dev->block_cfg_access);
+       dev->block_cfg_access = 0;
+-      wake_up_all(&pci_cfg_wait);
++      wake_up_all_locked(&pci_cfg_wait);
+       raw_spin_unlock_irqrestore(&pci_lock, flags);
+ }
+ EXPORT_SYMBOL_GPL(pci_cfg_access_unlock);
diff --git a/patches/features/all/rt/percpu_ida-use-locklocks.patch b/patches/features/all/rt/percpu_ida-use-locklocks.patch
new file mode 100644 (file)
index 0000000..d3d94f6
--- /dev/null
@@ -0,0 +1,102 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 9 Apr 2014 11:58:17 +0200
+Subject: percpu_ida: Use local locks
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+the local_irq_save() + spin_lock() does not work that well on -RT
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ lib/percpu_ida.c |   20 ++++++++++++--------
+ 1 file changed, 12 insertions(+), 8 deletions(-)
+
+--- a/lib/percpu_ida.c
++++ b/lib/percpu_ida.c
+@@ -26,6 +26,9 @@
+ #include <linux/string.h>
+ #include <linux/spinlock.h>
+ #include <linux/percpu_ida.h>
++#include <linux/locallock.h>
++
++static DEFINE_LOCAL_IRQ_LOCK(irq_off_lock);
+ struct percpu_ida_cpu {
+       /*
+@@ -148,13 +151,13 @@ int percpu_ida_alloc(struct percpu_ida *
+       unsigned long flags;
+       int tag;
+-      local_irq_save(flags);
++      local_lock_irqsave(irq_off_lock, flags);
+       tags = this_cpu_ptr(pool->tag_cpu);
+       /* Fastpath */
+       tag = alloc_local_tag(tags);
+       if (likely(tag >= 0)) {
+-              local_irq_restore(flags);
++              local_unlock_irqrestore(irq_off_lock, flags);
+               return tag;
+       }
+@@ -173,6 +176,7 @@ int percpu_ida_alloc(struct percpu_ida *
+               if (!tags->nr_free)
+                       alloc_global_tags(pool, tags);
++
+               if (!tags->nr_free)
+                       steal_tags(pool, tags);
+@@ -184,7 +188,7 @@ int percpu_ida_alloc(struct percpu_ida *
+               }
+               spin_unlock(&pool->lock);
+-              local_irq_restore(flags);
++              local_unlock_irqrestore(irq_off_lock, flags);
+               if (tag >= 0 || state == TASK_RUNNING)
+                       break;
+@@ -196,7 +200,7 @@ int percpu_ida_alloc(struct percpu_ida *
+               schedule();
+-              local_irq_save(flags);
++              local_lock_irqsave(irq_off_lock, flags);
+               tags = this_cpu_ptr(pool->tag_cpu);
+       }
+       if (state != TASK_RUNNING)
+@@ -221,7 +225,7 @@ void percpu_ida_free(struct percpu_ida *
+       BUG_ON(tag >= pool->nr_tags);
+-      local_irq_save(flags);
++      local_lock_irqsave(irq_off_lock, flags);
+       tags = this_cpu_ptr(pool->tag_cpu);
+       spin_lock(&tags->lock);
+@@ -253,7 +257,7 @@ void percpu_ida_free(struct percpu_ida *
+               spin_unlock(&pool->lock);
+       }
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(irq_off_lock, flags);
+ }
+ EXPORT_SYMBOL_GPL(percpu_ida_free);
+@@ -345,7 +349,7 @@ int percpu_ida_for_each_free(struct perc
+       struct percpu_ida_cpu *remote;
+       unsigned cpu, i, err = 0;
+-      local_irq_save(flags);
++      local_lock_irqsave(irq_off_lock, flags);
+       for_each_possible_cpu(cpu) {
+               remote = per_cpu_ptr(pool->tag_cpu, cpu);
+               spin_lock(&remote->lock);
+@@ -367,7 +371,7 @@ int percpu_ida_for_each_free(struct perc
+       }
+       spin_unlock(&pool->lock);
+ out:
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(irq_off_lock, flags);
+       return err;
+ }
+ EXPORT_SYMBOL_GPL(percpu_ida_for_each_free);
diff --git a/patches/features/all/rt/perf-make-swevent-hrtimer-irqsafe.patch b/patches/features/all/rt/perf-make-swevent-hrtimer-irqsafe.patch
new file mode 100644 (file)
index 0000000..9cd1ca4
--- /dev/null
@@ -0,0 +1,69 @@
+From: Yong Zhang <yong.zhang@windriver.com>
+Date: Wed, 11 Jul 2012 22:05:21 +0000
+Subject: perf: Make swevent hrtimer run in irq instead of softirq
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Otherwise we get a deadlock like below:
+
+[ 1044.042749] BUG: scheduling while atomic: ksoftirqd/21/141/0x00010003
+[ 1044.042752] INFO: lockdep is turned off.
+[ 1044.042754] Modules linked in:
+[ 1044.042757] Pid: 141, comm: ksoftirqd/21 Tainted: G        W    3.4.0-rc2-rt3-23676-ga723175-dirty #29
+[ 1044.042759] Call Trace:
+[ 1044.042761]  <IRQ>  [<ffffffff8107d8e5>] __schedule_bug+0x65/0x80
+[ 1044.042770]  [<ffffffff8168978c>] __schedule+0x83c/0xa70
+[ 1044.042775]  [<ffffffff8106bdd2>] ? prepare_to_wait+0x32/0xb0
+[ 1044.042779]  [<ffffffff81689a5e>] schedule+0x2e/0xa0
+[ 1044.042782]  [<ffffffff81071ebd>] hrtimer_wait_for_timer+0x6d/0xb0
+[ 1044.042786]  [<ffffffff8106bb30>] ? wake_up_bit+0x40/0x40
+[ 1044.042790]  [<ffffffff81071f20>] hrtimer_cancel+0x20/0x40
+[ 1044.042794]  [<ffffffff8111da0c>] perf_swevent_cancel_hrtimer+0x3c/0x50
+[ 1044.042798]  [<ffffffff8111da31>] task_clock_event_stop+0x11/0x40
+[ 1044.042802]  [<ffffffff8111da6e>] task_clock_event_del+0xe/0x10
+[ 1044.042805]  [<ffffffff8111c568>] event_sched_out+0x118/0x1d0
+[ 1044.042809]  [<ffffffff8111c649>] group_sched_out+0x29/0x90
+[ 1044.042813]  [<ffffffff8111ed7e>] __perf_event_disable+0x18e/0x200
+[ 1044.042817]  [<ffffffff8111c343>] remote_function+0x63/0x70
+[ 1044.042821]  [<ffffffff810b0aae>] generic_smp_call_function_single_interrupt+0xce/0x120
+[ 1044.042826]  [<ffffffff81022bc7>] smp_call_function_single_interrupt+0x27/0x40
+[ 1044.042831]  [<ffffffff8168d50c>] call_function_single_interrupt+0x6c/0x80
+[ 1044.042833]  <EOI>  [<ffffffff811275b0>] ? perf_event_overflow+0x20/0x20
+[ 1044.042840]  [<ffffffff8168b970>] ? _raw_spin_unlock_irq+0x30/0x70
+[ 1044.042844]  [<ffffffff8168b976>] ? _raw_spin_unlock_irq+0x36/0x70
+[ 1044.042848]  [<ffffffff810702e2>] run_hrtimer_softirq+0xc2/0x200
+[ 1044.042853]  [<ffffffff811275b0>] ? perf_event_overflow+0x20/0x20
+[ 1044.042857]  [<ffffffff81045265>] __do_softirq_common+0xf5/0x3a0
+[ 1044.042862]  [<ffffffff81045c3d>] __thread_do_softirq+0x15d/0x200
+[ 1044.042865]  [<ffffffff81045dda>] run_ksoftirqd+0xfa/0x210
+[ 1044.042869]  [<ffffffff81045ce0>] ? __thread_do_softirq+0x200/0x200
+[ 1044.042873]  [<ffffffff81045ce0>] ? __thread_do_softirq+0x200/0x200
+[ 1044.042877]  [<ffffffff8106b596>] kthread+0xb6/0xc0
+[ 1044.042881]  [<ffffffff8168b97b>] ? _raw_spin_unlock_irq+0x3b/0x70
+[ 1044.042886]  [<ffffffff8168d994>] kernel_thread_helper+0x4/0x10
+[ 1044.042889]  [<ffffffff8107d98c>] ? finish_task_switch+0x8c/0x110
+[ 1044.042894]  [<ffffffff8168b97b>] ? _raw_spin_unlock_irq+0x3b/0x70
+[ 1044.042897]  [<ffffffff8168bd5d>] ? retint_restore_args+0xe/0xe
+[ 1044.042900]  [<ffffffff8106b4e0>] ? kthreadd+0x1e0/0x1e0
+[ 1044.042902]  [<ffffffff8168d990>] ? gs_change+0xb/0xb
+
+Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
+Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Link: http://lkml.kernel.org/r/1341476476-5666-1-git-send-email-yong.zhang0@gmail.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+
+---
+ kernel/events/core.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/kernel/events/core.c
++++ b/kernel/events/core.c
+@@ -8363,6 +8363,7 @@ static void perf_swevent_init_hrtimer(st
+       hrtimer_init(&hwc->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+       hwc->hrtimer.function = perf_swevent_hrtimer;
++      hwc->hrtimer.irqsafe = 1;
+       /*
+        * Since hrtimers have a fixed rate, we can do a static freq->period
diff --git a/patches/features/all/rt/peter_zijlstra-frob-rcu.patch b/patches/features/all/rt/peter_zijlstra-frob-rcu.patch
new file mode 100644 (file)
index 0000000..bf0883d
--- /dev/null
@@ -0,0 +1,167 @@
+Subject: rcu: Frob softirq test
+From: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Date: Sat Aug 13 00:23:17 CEST 2011
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+With RT_FULL we get the below wreckage:
+
+[  126.060484] =======================================================
+[  126.060486] [ INFO: possible circular locking dependency detected ]
+[  126.060489] 3.0.1-rt10+ #30
+[  126.060490] -------------------------------------------------------
+[  126.060492] irq/24-eth0/1235 is trying to acquire lock:
+[  126.060495]  (&(lock)->wait_lock#2){+.+...}, at: [<ffffffff81501c81>] rt_mutex_slowunlock+0x16/0x55
+[  126.060503] 
+[  126.060504] but task is already holding lock:
+[  126.060506]  (&p->pi_lock){-...-.}, at: [<ffffffff81074fdc>] try_to_wake_up+0x35/0x429
+[  126.060511] 
+[  126.060511] which lock already depends on the new lock.
+[  126.060513] 
+[  126.060514] 
+[  126.060514] the existing dependency chain (in reverse order) is:
+[  126.060516] 
+[  126.060516] -> #1 (&p->pi_lock){-...-.}:
+[  126.060519]        [<ffffffff810afe9e>] lock_acquire+0x145/0x18a
+[  126.060524]        [<ffffffff8150291e>] _raw_spin_lock_irqsave+0x4b/0x85
+[  126.060527]        [<ffffffff810b5aa4>] task_blocks_on_rt_mutex+0x36/0x20f
+[  126.060531]        [<ffffffff815019bb>] rt_mutex_slowlock+0xd1/0x15a
+[  126.060534]        [<ffffffff81501ae3>] rt_mutex_lock+0x2d/0x2f
+[  126.060537]        [<ffffffff810d9020>] rcu_boost+0xad/0xde
+[  126.060541]        [<ffffffff810d90ce>] rcu_boost_kthread+0x7d/0x9b
+[  126.060544]        [<ffffffff8109a760>] kthread+0x99/0xa1
+[  126.060547]        [<ffffffff81509b14>] kernel_thread_helper+0x4/0x10
+[  126.060551] 
+[  126.060552] -> #0 (&(lock)->wait_lock#2){+.+...}:
+[  126.060555]        [<ffffffff810af1b8>] __lock_acquire+0x1157/0x1816
+[  126.060558]        [<ffffffff810afe9e>] lock_acquire+0x145/0x18a
+[  126.060561]        [<ffffffff8150279e>] _raw_spin_lock+0x40/0x73
+[  126.060564]        [<ffffffff81501c81>] rt_mutex_slowunlock+0x16/0x55
+[  126.060566]        [<ffffffff81501ce7>] rt_mutex_unlock+0x27/0x29
+[  126.060569]        [<ffffffff810d9f86>] rcu_read_unlock_special+0x17e/0x1c4
+[  126.060573]        [<ffffffff810da014>] __rcu_read_unlock+0x48/0x89
+[  126.060576]        [<ffffffff8106847a>] select_task_rq_rt+0xc7/0xd5
+[  126.060580]        [<ffffffff8107511c>] try_to_wake_up+0x175/0x429
+[  126.060583]        [<ffffffff81075425>] wake_up_process+0x15/0x17
+[  126.060585]        [<ffffffff81080a51>] wakeup_softirqd+0x24/0x26
+[  126.060590]        [<ffffffff81081df9>] irq_exit+0x49/0x55
+[  126.060593]        [<ffffffff8150a3bd>] smp_apic_timer_interrupt+0x8a/0x98
+[  126.060597]        [<ffffffff81509793>] apic_timer_interrupt+0x13/0x20
+[  126.060600]        [<ffffffff810d5952>] irq_forced_thread_fn+0x1b/0x44
+[  126.060603]        [<ffffffff810d582c>] irq_thread+0xde/0x1af
+[  126.060606]        [<ffffffff8109a760>] kthread+0x99/0xa1
+[  126.060608]        [<ffffffff81509b14>] kernel_thread_helper+0x4/0x10
+[  126.060611] 
+[  126.060612] other info that might help us debug this:
+[  126.060614] 
+[  126.060615]  Possible unsafe locking scenario:
+[  126.060616] 
+[  126.060617]        CPU0                    CPU1
+[  126.060619]        ----                    ----
+[  126.060620]   lock(&p->pi_lock);
+[  126.060623]                                lock(&(lock)->wait_lock);
+[  126.060625]                                lock(&p->pi_lock);
+[  126.060627]   lock(&(lock)->wait_lock);
+[  126.060629] 
+[  126.060629]  *** DEADLOCK ***
+[  126.060630] 
+[  126.060632] 1 lock held by irq/24-eth0/1235:
+[  126.060633]  #0:  (&p->pi_lock){-...-.}, at: [<ffffffff81074fdc>] try_to_wake_up+0x35/0x429
+[  126.060638] 
+[  126.060638] stack backtrace:
+[  126.060641] Pid: 1235, comm: irq/24-eth0 Not tainted 3.0.1-rt10+ #30
+[  126.060643] Call Trace:
+[  126.060644]  <IRQ>  [<ffffffff810acbde>] print_circular_bug+0x289/0x29a
+[  126.060651]  [<ffffffff810af1b8>] __lock_acquire+0x1157/0x1816
+[  126.060655]  [<ffffffff810ab3aa>] ? trace_hardirqs_off_caller+0x1f/0x99
+[  126.060658]  [<ffffffff81501c81>] ? rt_mutex_slowunlock+0x16/0x55
+[  126.060661]  [<ffffffff810afe9e>] lock_acquire+0x145/0x18a
+[  126.060664]  [<ffffffff81501c81>] ? rt_mutex_slowunlock+0x16/0x55
+[  126.060668]  [<ffffffff8150279e>] _raw_spin_lock+0x40/0x73
+[  126.060671]  [<ffffffff81501c81>] ? rt_mutex_slowunlock+0x16/0x55
+[  126.060674]  [<ffffffff810d9655>] ? rcu_report_qs_rsp+0x87/0x8c
+[  126.060677]  [<ffffffff81501c81>] rt_mutex_slowunlock+0x16/0x55
+[  126.060680]  [<ffffffff810d9ea3>] ? rcu_read_unlock_special+0x9b/0x1c4
+[  126.060683]  [<ffffffff81501ce7>] rt_mutex_unlock+0x27/0x29
+[  126.060687]  [<ffffffff810d9f86>] rcu_read_unlock_special+0x17e/0x1c4
+[  126.060690]  [<ffffffff810da014>] __rcu_read_unlock+0x48/0x89
+[  126.060693]  [<ffffffff8106847a>] select_task_rq_rt+0xc7/0xd5
+[  126.060696]  [<ffffffff810683da>] ? select_task_rq_rt+0x27/0xd5
+[  126.060701]  [<ffffffff810a852a>] ? clockevents_program_event+0x8e/0x90
+[  126.060704]  [<ffffffff8107511c>] try_to_wake_up+0x175/0x429
+[  126.060708]  [<ffffffff810a95dc>] ? tick_program_event+0x1f/0x21
+[  126.060711]  [<ffffffff81075425>] wake_up_process+0x15/0x17
+[  126.060715]  [<ffffffff81080a51>] wakeup_softirqd+0x24/0x26
+[  126.060718]  [<ffffffff81081df9>] irq_exit+0x49/0x55
+[  126.060721]  [<ffffffff8150a3bd>] smp_apic_timer_interrupt+0x8a/0x98
+[  126.060724]  [<ffffffff81509793>] apic_timer_interrupt+0x13/0x20
+[  126.060726]  <EOI>  [<ffffffff81072855>] ? migrate_disable+0x75/0x12d
+[  126.060733]  [<ffffffff81080a61>] ? local_bh_disable+0xe/0x1f
+[  126.060736]  [<ffffffff81080a70>] ? local_bh_disable+0x1d/0x1f
+[  126.060739]  [<ffffffff810d5952>] irq_forced_thread_fn+0x1b/0x44
+[  126.060742]  [<ffffffff81502ac0>] ? _raw_spin_unlock_irq+0x3b/0x59
+[  126.060745]  [<ffffffff810d582c>] irq_thread+0xde/0x1af
+[  126.060748]  [<ffffffff810d5937>] ? irq_thread_fn+0x3a/0x3a
+[  126.060751]  [<ffffffff810d574e>] ? irq_finalize_oneshot+0xd1/0xd1
+[  126.060754]  [<ffffffff810d574e>] ? irq_finalize_oneshot+0xd1/0xd1
+[  126.060757]  [<ffffffff8109a760>] kthread+0x99/0xa1
+[  126.060761]  [<ffffffff81509b14>] kernel_thread_helper+0x4/0x10
+[  126.060764]  [<ffffffff81069ed7>] ? finish_task_switch+0x87/0x10a
+[  126.060768]  [<ffffffff81502ec4>] ? retint_restore_args+0xe/0xe
+[  126.060771]  [<ffffffff8109a6c7>] ? __init_kthread_worker+0x8c/0x8c
+[  126.060774]  [<ffffffff81509b10>] ? gs_change+0xb/0xb
+
+Because irq_exit() does:
+
+void irq_exit(void)
+{
+       account_system_vtime(current);
+       trace_hardirq_exit();
+       sub_preempt_count(IRQ_EXIT_OFFSET);
+       if (!in_interrupt() && local_softirq_pending())
+               invoke_softirq();
+
+       ...
+}
+
+Which triggers a wakeup, which uses RCU, now if the interrupted task has
+t->rcu_read_unlock_special set, the rcu usage from the wakeup will end
+up in rcu_read_unlock_special(). rcu_read_unlock_special() will test
+for in_irq(), which will fail as we just decremented preempt_count
+with IRQ_EXIT_OFFSET, and in_sering_softirq(), which for
+PREEMPT_RT_FULL reads:
+
+int in_serving_softirq(void)
+{
+       int res;
+
+       preempt_disable();
+       res = __get_cpu_var(local_softirq_runner) == current;
+       preempt_enable();
+       return res;
+}
+
+Which will thus also fail, resulting in the above wreckage.
+
+The 'somewhat' ugly solution is to open-code the preempt_count() test
+in rcu_read_unlock_special().
+
+Also, we're not at all sure how ->rcu_read_unlock_special gets set
+here... so this is very likely a bandaid and more thought is required.
+
+Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+---
+ kernel/rcu/tree_plugin.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/rcu/tree_plugin.h
++++ b/kernel/rcu/tree_plugin.h
+@@ -426,7 +426,7 @@ void rcu_read_unlock_special(struct task
+       }
+       /* Hardware IRQ handlers cannot block, complain if they get here. */
+-      if (in_irq() || in_serving_softirq()) {
++      if (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_OFFSET)) {
+               lockdep_rcu_suspicious(__FILE__, __LINE__,
+                                      "rcu_read_unlock() from irq or softirq with blocking in critical section!!!\n");
+               pr_alert("->rcu_read_unlock_special: %#x (b: %d, enq: %d nq: %d)\n",
diff --git a/patches/features/all/rt/peterz-percpu-rwsem-rt.patch b/patches/features/all/rt/peterz-percpu-rwsem-rt.patch
new file mode 100644 (file)
index 0000000..a42e1a9
--- /dev/null
@@ -0,0 +1,219 @@
+Subject: locking/percpu-rwsem: Remove preempt_disable variants
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed Nov 23 16:29:32 CET 2016
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Effective revert commit:
+
+  87709e28dc7c ("fs/locks: Use percpu_down_read_preempt_disable()")
+
+This is causing major pain for PREEMPT_RT and is only a very small
+performance issue for PREEMPT=y.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+---
+---
+ fs/locks.c                   |   32 ++++++++++++++++----------------
+ include/linux/percpu-rwsem.h |   24 ++++--------------------
+ 2 files changed, 20 insertions(+), 36 deletions(-)
+
+--- a/fs/locks.c
++++ b/fs/locks.c
+@@ -935,7 +935,7 @@ static int flock_lock_inode(struct inode
+                       return -ENOMEM;
+       }
+-      percpu_down_read_preempt_disable(&file_rwsem);
++      percpu_down_read(&file_rwsem);
+       spin_lock(&ctx->flc_lock);
+       if (request->fl_flags & FL_ACCESS)
+               goto find_conflict;
+@@ -976,7 +976,7 @@ static int flock_lock_inode(struct inode
+ out:
+       spin_unlock(&ctx->flc_lock);
+-      percpu_up_read_preempt_enable(&file_rwsem);
++      percpu_up_read(&file_rwsem);
+       if (new_fl)
+               locks_free_lock(new_fl);
+       locks_dispose_list(&dispose);
+@@ -1013,7 +1013,7 @@ static int posix_lock_inode(struct inode
+               new_fl2 = locks_alloc_lock();
+       }
+-      percpu_down_read_preempt_disable(&file_rwsem);
++      percpu_down_read(&file_rwsem);
+       spin_lock(&ctx->flc_lock);
+       /*
+        * New lock request. Walk all POSIX locks and look for conflicts. If
+@@ -1185,7 +1185,7 @@ static int posix_lock_inode(struct inode
+       }
+  out:
+       spin_unlock(&ctx->flc_lock);
+-      percpu_up_read_preempt_enable(&file_rwsem);
++      percpu_up_read(&file_rwsem);
+       /*
+        * Free any unused locks.
+        */
+@@ -1460,7 +1460,7 @@ int __break_lease(struct inode *inode, u
+               return error;
+       }
+-      percpu_down_read_preempt_disable(&file_rwsem);
++      percpu_down_read(&file_rwsem);
+       spin_lock(&ctx->flc_lock);
+       time_out_leases(inode, &dispose);
+@@ -1512,13 +1512,13 @@ int __break_lease(struct inode *inode, u
+       locks_insert_block(fl, new_fl);
+       trace_break_lease_block(inode, new_fl);
+       spin_unlock(&ctx->flc_lock);
+-      percpu_up_read_preempt_enable(&file_rwsem);
++      percpu_up_read(&file_rwsem);
+       locks_dispose_list(&dispose);
+       error = wait_event_interruptible_timeout(new_fl->fl_wait,
+                                               !new_fl->fl_next, break_time);
+-      percpu_down_read_preempt_disable(&file_rwsem);
++      percpu_down_read(&file_rwsem);
+       spin_lock(&ctx->flc_lock);
+       trace_break_lease_unblock(inode, new_fl);
+       locks_delete_block(new_fl);
+@@ -1535,7 +1535,7 @@ int __break_lease(struct inode *inode, u
+       }
+ out:
+       spin_unlock(&ctx->flc_lock);
+-      percpu_up_read_preempt_enable(&file_rwsem);
++      percpu_up_read(&file_rwsem);
+       locks_dispose_list(&dispose);
+       locks_free_lock(new_fl);
+       return error;
+@@ -1609,7 +1609,7 @@ int fcntl_getlease(struct file *filp)
+       ctx = smp_load_acquire(&inode->i_flctx);
+       if (ctx && !list_empty_careful(&ctx->flc_lease)) {
+-              percpu_down_read_preempt_disable(&file_rwsem);
++              percpu_down_read(&file_rwsem);
+               spin_lock(&ctx->flc_lock);
+               time_out_leases(inode, &dispose);
+               list_for_each_entry(fl, &ctx->flc_lease, fl_list) {
+@@ -1619,7 +1619,7 @@ int fcntl_getlease(struct file *filp)
+                       break;
+               }
+               spin_unlock(&ctx->flc_lock);
+-              percpu_up_read_preempt_enable(&file_rwsem);
++              percpu_up_read(&file_rwsem);
+               locks_dispose_list(&dispose);
+       }
+@@ -1694,7 +1694,7 @@ generic_add_lease(struct file *filp, lon
+               return -EINVAL;
+       }
+-      percpu_down_read_preempt_disable(&file_rwsem);
++      percpu_down_read(&file_rwsem);
+       spin_lock(&ctx->flc_lock);
+       time_out_leases(inode, &dispose);
+       error = check_conflicting_open(dentry, arg, lease->fl_flags);
+@@ -1765,7 +1765,7 @@ generic_add_lease(struct file *filp, lon
+               lease->fl_lmops->lm_setup(lease, priv);
+ out:
+       spin_unlock(&ctx->flc_lock);
+-      percpu_up_read_preempt_enable(&file_rwsem);
++      percpu_up_read(&file_rwsem);
+       locks_dispose_list(&dispose);
+       if (is_deleg)
+               inode_unlock(inode);
+@@ -1788,7 +1788,7 @@ static int generic_delete_lease(struct f
+               return error;
+       }
+-      percpu_down_read_preempt_disable(&file_rwsem);
++      percpu_down_read(&file_rwsem);
+       spin_lock(&ctx->flc_lock);
+       list_for_each_entry(fl, &ctx->flc_lease, fl_list) {
+               if (fl->fl_file == filp &&
+@@ -1801,7 +1801,7 @@ static int generic_delete_lease(struct f
+       if (victim)
+               error = fl->fl_lmops->lm_change(victim, F_UNLCK, &dispose);
+       spin_unlock(&ctx->flc_lock);
+-      percpu_up_read_preempt_enable(&file_rwsem);
++      percpu_up_read(&file_rwsem);
+       locks_dispose_list(&dispose);
+       return error;
+ }
+@@ -2532,13 +2532,13 @@ locks_remove_lease(struct file *filp, st
+       if (list_empty(&ctx->flc_lease))
+               return;
+-      percpu_down_read_preempt_disable(&file_rwsem);
++      percpu_down_read(&file_rwsem);
+       spin_lock(&ctx->flc_lock);
+       list_for_each_entry_safe(fl, tmp, &ctx->flc_lease, fl_list)
+               if (filp == fl->fl_file)
+                       lease_modify(fl, F_UNLCK, &dispose);
+       spin_unlock(&ctx->flc_lock);
+-      percpu_up_read_preempt_enable(&file_rwsem);
++      percpu_up_read(&file_rwsem);
+       locks_dispose_list(&dispose);
+ }
+--- a/include/linux/percpu-rwsem.h
++++ b/include/linux/percpu-rwsem.h
+@@ -28,7 +28,7 @@ static struct percpu_rw_semaphore name =
+ extern int __percpu_down_read(struct percpu_rw_semaphore *, int);
+ extern void __percpu_up_read(struct percpu_rw_semaphore *);
+-static inline void percpu_down_read_preempt_disable(struct percpu_rw_semaphore *sem)
++static inline void percpu_down_read(struct percpu_rw_semaphore *sem)
+ {
+       might_sleep();
+@@ -46,16 +46,10 @@ static inline void percpu_down_read_pree
+       __this_cpu_inc(*sem->read_count);
+       if (unlikely(!rcu_sync_is_idle(&sem->rss)))
+               __percpu_down_read(sem, false); /* Unconditional memory barrier */
+-      barrier();
+       /*
+-       * The barrier() prevents the compiler from
++       * The preempt_enable() prevents the compiler from
+        * bleeding the critical section out.
+        */
+-}
+-
+-static inline void percpu_down_read(struct percpu_rw_semaphore *sem)
+-{
+-      percpu_down_read_preempt_disable(sem);
+       preempt_enable();
+ }
+@@ -82,13 +76,9 @@ static inline int percpu_down_read_trylo
+       return ret;
+ }
+-static inline void percpu_up_read_preempt_enable(struct percpu_rw_semaphore *sem)
++static inline void percpu_up_read(struct percpu_rw_semaphore *sem)
+ {
+-      /*
+-       * The barrier() prevents the compiler from
+-       * bleeding the critical section out.
+-       */
+-      barrier();
++      preempt_disable();
+       /*
+        * Same as in percpu_down_read().
+        */
+@@ -101,12 +91,6 @@ static inline void percpu_up_read_preemp
+       rwsem_release(&sem->rw_sem.dep_map, 1, _RET_IP_);
+ }
+-static inline void percpu_up_read(struct percpu_rw_semaphore *sem)
+-{
+-      preempt_disable();
+-      percpu_up_read_preempt_enable(sem);
+-}
+-
+ extern void percpu_down_write(struct percpu_rw_semaphore *);
+ extern void percpu_up_write(struct percpu_rw_semaphore *);
diff --git a/patches/features/all/rt/peterz-srcu-crypto-chain.patch b/patches/features/all/rt/peterz-srcu-crypto-chain.patch
new file mode 100644 (file)
index 0000000..7d358c1
--- /dev/null
@@ -0,0 +1,183 @@
+Subject: crypto: Convert crypto notifier chain to SRCU
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Fri, 05 Oct 2012 09:03:24 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The crypto notifier deadlocks on RT. Though this can be a real deadlock
+on mainline as well due to fifo fair rwsems.
+
+The involved parties here are:
+
+[   82.172678] swapper/0       S 0000000000000001     0     1      0 0x00000000
+[   82.172682]  ffff88042f18fcf0 0000000000000046 ffff88042f18fc80 ffffffff81491238
+[   82.172685]  0000000000011cc0 0000000000011cc0 ffff88042f18c040 ffff88042f18ffd8
+[   82.172688]  0000000000011cc0 0000000000011cc0 ffff88042f18ffd8 0000000000011cc0
+[   82.172689] Call Trace:
+[   82.172697]  [<ffffffff81491238>] ? _raw_spin_unlock_irqrestore+0x6c/0x7a
+[   82.172701]  [<ffffffff8148fd3f>] schedule+0x64/0x66
+[   82.172704]  [<ffffffff8148ec6b>] schedule_timeout+0x27/0xd0
+[   82.172708]  [<ffffffff81043c0c>] ? unpin_current_cpu+0x1a/0x6c
+[   82.172713]  [<ffffffff8106e491>] ? migrate_enable+0x12f/0x141
+[   82.172716]  [<ffffffff8148fbbd>] wait_for_common+0xbb/0x11f
+[   82.172719]  [<ffffffff810709f2>] ? try_to_wake_up+0x182/0x182
+[   82.172722]  [<ffffffff8148fc96>] wait_for_completion_interruptible+0x1d/0x2e
+[   82.172726]  [<ffffffff811debfd>] crypto_wait_for_test+0x49/0x6b
+[   82.172728]  [<ffffffff811ded32>] crypto_register_alg+0x53/0x5a
+[   82.172730]  [<ffffffff811ded6c>] crypto_register_algs+0x33/0x72
+[   82.172734]  [<ffffffff81ad7686>] ? aes_init+0x12/0x12
+[   82.172737]  [<ffffffff81ad76ea>] aesni_init+0x64/0x66
+[   82.172741]  [<ffffffff81000318>] do_one_initcall+0x7f/0x13b
+[   82.172744]  [<ffffffff81ac4d34>] kernel_init+0x199/0x22c
+[   82.172747]  [<ffffffff81ac44ef>] ? loglevel+0x31/0x31
+[   82.172752]  [<ffffffff814987c4>] kernel_thread_helper+0x4/0x10
+[   82.172755]  [<ffffffff81491574>] ? retint_restore_args+0x13/0x13
+[   82.172759]  [<ffffffff81ac4b9b>] ? start_kernel+0x3ca/0x3ca
+[   82.172761]  [<ffffffff814987c0>] ? gs_change+0x13/0x13
+
+[   82.174186] cryptomgr_test  S 0000000000000001     0    41      2 0x00000000
+[   82.174189]  ffff88042c971980 0000000000000046 ffffffff81d74830 0000000000000292
+[   82.174192]  0000000000011cc0 0000000000011cc0 ffff88042c96eb80 ffff88042c971fd8
+[   82.174195]  0000000000011cc0 0000000000011cc0 ffff88042c971fd8 0000000000011cc0
+[   82.174195] Call Trace:
+[   82.174198]  [<ffffffff8148fd3f>] schedule+0x64/0x66
+[   82.174201]  [<ffffffff8148ec6b>] schedule_timeout+0x27/0xd0
+[   82.174204]  [<ffffffff81043c0c>] ? unpin_current_cpu+0x1a/0x6c
+[   82.174206]  [<ffffffff8106e491>] ? migrate_enable+0x12f/0x141
+[   82.174209]  [<ffffffff8148fbbd>] wait_for_common+0xbb/0x11f
+[   82.174212]  [<ffffffff810709f2>] ? try_to_wake_up+0x182/0x182
+[   82.174215]  [<ffffffff8148fc96>] wait_for_completion_interruptible+0x1d/0x2e
+[   82.174218]  [<ffffffff811e4883>] cryptomgr_notify+0x280/0x385
+[   82.174221]  [<ffffffff814943de>] notifier_call_chain+0x6b/0x98
+[   82.174224]  [<ffffffff8108a11c>] ? rt_down_read+0x10/0x12
+[   82.174227]  [<ffffffff810677cd>] __blocking_notifier_call_chain+0x70/0x8d
+[   82.174230]  [<ffffffff810677fe>] blocking_notifier_call_chain+0x14/0x16
+[   82.174234]  [<ffffffff811dd272>] crypto_probing_notify+0x24/0x50
+[   82.174236]  [<ffffffff811dd7a1>] crypto_alg_mod_lookup+0x3e/0x74
+[   82.174238]  [<ffffffff811dd949>] crypto_alloc_base+0x36/0x8f
+[   82.174241]  [<ffffffff811e9408>] cryptd_alloc_ablkcipher+0x6e/0xb5
+[   82.174243]  [<ffffffff811dd591>] ? kzalloc.clone.5+0xe/0x10
+[   82.174246]  [<ffffffff8103085d>] ablk_init_common+0x1d/0x38
+[   82.174249]  [<ffffffff8103852a>] ablk_ecb_init+0x15/0x17
+[   82.174251]  [<ffffffff811dd8c6>] __crypto_alloc_tfm+0xc7/0x114
+[   82.174254]  [<ffffffff811e0caa>] ? crypto_lookup_skcipher+0x1f/0xe4
+[   82.174256]  [<ffffffff811e0dcf>] crypto_alloc_ablkcipher+0x60/0xa5
+[   82.174258]  [<ffffffff811e5bde>] alg_test_skcipher+0x24/0x9b
+[   82.174261]  [<ffffffff8106d96d>] ? finish_task_switch+0x3f/0xfa
+[   82.174263]  [<ffffffff811e6b8e>] alg_test+0x16f/0x1d7
+[   82.174267]  [<ffffffff811e45ac>] ? cryptomgr_probe+0xac/0xac
+[   82.174269]  [<ffffffff811e45d8>] cryptomgr_test+0x2c/0x47
+[   82.174272]  [<ffffffff81061161>] kthread+0x7e/0x86
+[   82.174275]  [<ffffffff8106d9dd>] ? finish_task_switch+0xaf/0xfa
+[   82.174278]  [<ffffffff814987c4>] kernel_thread_helper+0x4/0x10
+[   82.174281]  [<ffffffff81491574>] ? retint_restore_args+0x13/0x13
+[   82.174284]  [<ffffffff810610e3>] ? __init_kthread_worker+0x8c/0x8c
+[   82.174287]  [<ffffffff814987c0>] ? gs_change+0x13/0x13
+
+[   82.174329] cryptomgr_probe D 0000000000000002     0    47      2 0x00000000
+[   82.174332]  ffff88042c991b70 0000000000000046 ffff88042c991bb0 0000000000000006
+[   82.174335]  0000000000011cc0 0000000000011cc0 ffff88042c98ed00 ffff88042c991fd8
+[   82.174338]  0000000000011cc0 0000000000011cc0 ffff88042c991fd8 0000000000011cc0
+[   82.174338] Call Trace:
+[   82.174342]  [<ffffffff8148fd3f>] schedule+0x64/0x66
+[   82.174344]  [<ffffffff814901ad>] __rt_mutex_slowlock+0x85/0xbe
+[   82.174347]  [<ffffffff814902d2>] rt_mutex_slowlock+0xec/0x159
+[   82.174351]  [<ffffffff81089c4d>] rt_mutex_fastlock.clone.8+0x29/0x2f
+[   82.174353]  [<ffffffff81490372>] rt_mutex_lock+0x33/0x37
+[   82.174356]  [<ffffffff8108a0f2>] __rt_down_read+0x50/0x5a
+[   82.174358]  [<ffffffff8108a11c>] ? rt_down_read+0x10/0x12
+[   82.174360]  [<ffffffff8108a11c>] rt_down_read+0x10/0x12
+[   82.174363]  [<ffffffff810677b5>] __blocking_notifier_call_chain+0x58/0x8d
+[   82.174366]  [<ffffffff810677fe>] blocking_notifier_call_chain+0x14/0x16
+[   82.174369]  [<ffffffff811dd272>] crypto_probing_notify+0x24/0x50
+[   82.174372]  [<ffffffff811debd6>] crypto_wait_for_test+0x22/0x6b
+[   82.174374]  [<ffffffff811decd3>] crypto_register_instance+0xb4/0xc0
+[   82.174377]  [<ffffffff811e9b76>] cryptd_create+0x378/0x3b6
+[   82.174379]  [<ffffffff811de512>] ? __crypto_lookup_template+0x5b/0x63
+[   82.174382]  [<ffffffff811e4545>] cryptomgr_probe+0x45/0xac
+[   82.174385]  [<ffffffff811e4500>] ? crypto_alloc_pcomp+0x1b/0x1b
+[   82.174388]  [<ffffffff81061161>] kthread+0x7e/0x86
+[   82.174391]  [<ffffffff8106d9dd>] ? finish_task_switch+0xaf/0xfa
+[   82.174394]  [<ffffffff814987c4>] kernel_thread_helper+0x4/0x10
+[   82.174398]  [<ffffffff81491574>] ? retint_restore_args+0x13/0x13
+[   82.174401]  [<ffffffff810610e3>] ? __init_kthread_worker+0x8c/0x8c
+[   82.174403]  [<ffffffff814987c0>] ? gs_change+0x13/0x13
+
+cryptomgr_test spawns the cryptomgr_probe thread from the notifier
+call. The probe thread fires the same notifier as the test thread and
+deadlocks on the rwsem on RT.
+
+Now this is a potential deadlock in mainline as well, because we have
+fifo fair rwsems. If another thread blocks with a down_write() on the
+notifier chain before the probe thread issues the down_read() it will
+block the probe thread and the whole party is dead locked.
+
+Signed-off-by: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ crypto/algapi.c   |    4 ++--
+ crypto/api.c      |    6 +++---
+ crypto/internal.h |    4 ++--
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+--- a/crypto/algapi.c
++++ b/crypto/algapi.c
+@@ -719,13 +719,13 @@ EXPORT_SYMBOL_GPL(crypto_spawn_tfm2);
+ int crypto_register_notifier(struct notifier_block *nb)
+ {
+-      return blocking_notifier_chain_register(&crypto_chain, nb);
++      return srcu_notifier_chain_register(&crypto_chain, nb);
+ }
+ EXPORT_SYMBOL_GPL(crypto_register_notifier);
+ int crypto_unregister_notifier(struct notifier_block *nb)
+ {
+-      return blocking_notifier_chain_unregister(&crypto_chain, nb);
++      return srcu_notifier_chain_unregister(&crypto_chain, nb);
+ }
+ EXPORT_SYMBOL_GPL(crypto_unregister_notifier);
+--- a/crypto/api.c
++++ b/crypto/api.c
+@@ -31,7 +31,7 @@ EXPORT_SYMBOL_GPL(crypto_alg_list);
+ DECLARE_RWSEM(crypto_alg_sem);
+ EXPORT_SYMBOL_GPL(crypto_alg_sem);
+-BLOCKING_NOTIFIER_HEAD(crypto_chain);
++SRCU_NOTIFIER_HEAD(crypto_chain);
+ EXPORT_SYMBOL_GPL(crypto_chain);
+ static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg);
+@@ -236,10 +236,10 @@ int crypto_probing_notify(unsigned long
+ {
+       int ok;
+-      ok = blocking_notifier_call_chain(&crypto_chain, val, v);
++      ok = srcu_notifier_call_chain(&crypto_chain, val, v);
+       if (ok == NOTIFY_DONE) {
+               request_module("cryptomgr");
+-              ok = blocking_notifier_call_chain(&crypto_chain, val, v);
++              ok = srcu_notifier_call_chain(&crypto_chain, val, v);
+       }
+       return ok;
+--- a/crypto/internal.h
++++ b/crypto/internal.h
+@@ -47,7 +47,7 @@ struct crypto_larval {
+ extern struct list_head crypto_alg_list;
+ extern struct rw_semaphore crypto_alg_sem;
+-extern struct blocking_notifier_head crypto_chain;
++extern struct srcu_notifier_head crypto_chain;
+ #ifdef CONFIG_PROC_FS
+ void __init crypto_init_proc(void);
+@@ -146,7 +146,7 @@ static inline int crypto_is_moribund(str
+ static inline void crypto_notify(unsigned long val, void *v)
+ {
+-      blocking_notifier_call_chain(&crypto_chain, val, v);
++      srcu_notifier_call_chain(&crypto_chain, val, v);
+ }
+ #endif        /* _CRYPTO_INTERNAL_H */
diff --git a/patches/features/all/rt/pid.h-include-atomic.h.patch b/patches/features/all/rt/pid.h-include-atomic.h.patch
new file mode 100644 (file)
index 0000000..2781b3a
--- /dev/null
@@ -0,0 +1,37 @@
+From: Grygorii Strashko <Grygorii.Strashko@linaro.org>
+Date: Tue, 21 Jul 2015 19:43:56 +0300
+Subject: pid.h: include atomic.h
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+This patch fixes build error:
+  CC      kernel/pid_namespace.o
+In file included from kernel/pid_namespace.c:11:0:
+include/linux/pid.h: In function 'get_pid':
+include/linux/pid.h:78:3: error: implicit declaration of function 'atomic_inc' [-Werror=implicit-function-declaration]
+   atomic_inc(&pid->count);
+   ^
+which happens when
+ CONFIG_PROVE_LOCKING=n
+ CONFIG_DEBUG_SPINLOCK=n
+ CONFIG_DEBUG_MUTEXES=n
+ CONFIG_DEBUG_LOCK_ALLOC=n
+ CONFIG_PID_NS=y
+
+Vanilla gets this via spinlock.h.
+
+Signed-off-by: Grygorii Strashko <Grygorii.Strashko@linaro.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/pid.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/include/linux/pid.h
++++ b/include/linux/pid.h
+@@ -2,6 +2,7 @@
+ #define _LINUX_PID_H
+ #include <linux/rcupdate.h>
++#include <linux/atomic.h>
+ enum pid_type
+ {
diff --git a/patches/features/all/rt/pinctrl-qcom-Use-raw-spinlock-variants.patch b/patches/features/all/rt/pinctrl-qcom-Use-raw-spinlock-variants.patch
new file mode 100644 (file)
index 0000000..dec0b08
--- /dev/null
@@ -0,0 +1,253 @@
+From: Julia Cartwright <julia@ni.com>
+Date: Fri, 20 Jan 2017 10:13:47 -0600
+Subject: [PATCH] pinctrl: qcom: Use raw spinlock variants
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The MSM pinctrl driver currently implements an irq_chip for handling
+GPIO interrupts; due to how irq_chip handling is done, it's necessary
+for the irq_chip methods to be invoked from hardirq context, even on a
+a real-time kernel.  Because the spinlock_t type becomes a "sleeping"
+spinlock w/ RT kernels, it is not suitable to be used with irq_chips.
+
+A quick audit of the operations under the lock reveal that they do only
+minimal, bounded work, and are therefore safe to do under a raw
+spinlock.
+
+On real-time kernels, this fixes an OOPs which looks like the following,
+as reported by Brian Wrenn:
+
+    kernel BUG at kernel/locking/rtmutex.c:1014!
+    Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
+    Modules linked in: spidev_irq(O) smsc75xx wcn36xx [last unloaded: spidev]
+    CPU: 0 PID: 1163 Comm: irq/144-mmc0 Tainted: G        W  O    4.4.9-linaro-lt-qcom #1
+    PC is at rt_spin_lock_slowlock+0x80/0x2d8
+    LR is at rt_spin_lock_slowlock+0x68/0x2d8
+    [..]
+  Call trace:
+    rt_spin_lock_slowlock
+    rt_spin_lock
+    msm_gpio_irq_ack
+    handle_edge_irq
+    generic_handle_irq
+    msm_gpio_irq_handler
+    generic_handle_irq
+    __handle_domain_irq
+    gic_handle_irq
+
+Cc: stable-rt@vger.kernel.org
+Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
+Reported-by: Brian Wrenn <dcbrianw@gmail.com>
+Tested-by: Brian Wrenn <dcbrianw@gmail.com>
+Signed-off-by: Julia Cartwright <julia@ni.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/pinctrl/qcom/pinctrl-msm.c |   48 ++++++++++++++++++-------------------
+ 1 file changed, 24 insertions(+), 24 deletions(-)
+
+--- a/drivers/pinctrl/qcom/pinctrl-msm.c
++++ b/drivers/pinctrl/qcom/pinctrl-msm.c
+@@ -61,7 +61,7 @@ struct msm_pinctrl {
+       struct notifier_block restart_nb;
+       int irq;
+-      spinlock_t lock;
++      raw_spinlock_t lock;
+       DECLARE_BITMAP(dual_edge_irqs, MAX_NR_GPIO);
+       DECLARE_BITMAP(enabled_irqs, MAX_NR_GPIO);
+@@ -153,14 +153,14 @@ static int msm_pinmux_set_mux(struct pin
+       if (WARN_ON(i == g->nfuncs))
+               return -EINVAL;
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       val = readl(pctrl->regs + g->ctl_reg);
+       val &= ~mask;
+       val |= i << g->mux_bit;
+       writel(val, pctrl->regs + g->ctl_reg);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+       return 0;
+ }
+@@ -323,14 +323,14 @@ static int msm_config_group_set(struct p
+                       break;
+               case PIN_CONFIG_OUTPUT:
+                       /* set output value */
+-                      spin_lock_irqsave(&pctrl->lock, flags);
++                      raw_spin_lock_irqsave(&pctrl->lock, flags);
+                       val = readl(pctrl->regs + g->io_reg);
+                       if (arg)
+                               val |= BIT(g->out_bit);
+                       else
+                               val &= ~BIT(g->out_bit);
+                       writel(val, pctrl->regs + g->io_reg);
+-                      spin_unlock_irqrestore(&pctrl->lock, flags);
++                      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+                       /* enable output */
+                       arg = 1;
+@@ -351,12 +351,12 @@ static int msm_config_group_set(struct p
+                       return -EINVAL;
+               }
+-              spin_lock_irqsave(&pctrl->lock, flags);
++              raw_spin_lock_irqsave(&pctrl->lock, flags);
+               val = readl(pctrl->regs + g->ctl_reg);
+               val &= ~(mask << bit);
+               val |= arg << bit;
+               writel(val, pctrl->regs + g->ctl_reg);
+-              spin_unlock_irqrestore(&pctrl->lock, flags);
++              raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+       }
+       return 0;
+@@ -384,13 +384,13 @@ static int msm_gpio_direction_input(stru
+       g = &pctrl->soc->groups[offset];
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       val = readl(pctrl->regs + g->ctl_reg);
+       val &= ~BIT(g->oe_bit);
+       writel(val, pctrl->regs + g->ctl_reg);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+       return 0;
+ }
+@@ -404,7 +404,7 @@ static int msm_gpio_direction_output(str
+       g = &pctrl->soc->groups[offset];
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       val = readl(pctrl->regs + g->io_reg);
+       if (value)
+@@ -417,7 +417,7 @@ static int msm_gpio_direction_output(str
+       val |= BIT(g->oe_bit);
+       writel(val, pctrl->regs + g->ctl_reg);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+       return 0;
+ }
+@@ -443,7 +443,7 @@ static void msm_gpio_set(struct gpio_chi
+       g = &pctrl->soc->groups[offset];
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       val = readl(pctrl->regs + g->io_reg);
+       if (value)
+@@ -452,7 +452,7 @@ static void msm_gpio_set(struct gpio_chi
+               val &= ~BIT(g->out_bit);
+       writel(val, pctrl->regs + g->io_reg);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+ }
+ #ifdef CONFIG_DEBUG_FS
+@@ -571,7 +571,7 @@ static void msm_gpio_irq_mask(struct irq
+       g = &pctrl->soc->groups[d->hwirq];
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       val = readl(pctrl->regs + g->intr_cfg_reg);
+       val &= ~BIT(g->intr_enable_bit);
+@@ -579,7 +579,7 @@ static void msm_gpio_irq_mask(struct irq
+       clear_bit(d->hwirq, pctrl->enabled_irqs);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+ }
+ static void msm_gpio_irq_unmask(struct irq_data *d)
+@@ -592,7 +592,7 @@ static void msm_gpio_irq_unmask(struct i
+       g = &pctrl->soc->groups[d->hwirq];
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       val = readl(pctrl->regs + g->intr_cfg_reg);
+       val |= BIT(g->intr_enable_bit);
+@@ -600,7 +600,7 @@ static void msm_gpio_irq_unmask(struct i
+       set_bit(d->hwirq, pctrl->enabled_irqs);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+ }
+ static void msm_gpio_irq_ack(struct irq_data *d)
+@@ -613,7 +613,7 @@ static void msm_gpio_irq_ack(struct irq_
+       g = &pctrl->soc->groups[d->hwirq];
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       val = readl(pctrl->regs + g->intr_status_reg);
+       if (g->intr_ack_high)
+@@ -625,7 +625,7 @@ static void msm_gpio_irq_ack(struct irq_
+       if (test_bit(d->hwirq, pctrl->dual_edge_irqs))
+               msm_gpio_update_dual_edge_pos(pctrl, g, d);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+ }
+ static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int type)
+@@ -638,7 +638,7 @@ static int msm_gpio_irq_set_type(struct
+       g = &pctrl->soc->groups[d->hwirq];
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       /*
+        * For hw without possibility of detecting both edges
+@@ -712,7 +712,7 @@ static int msm_gpio_irq_set_type(struct
+       if (test_bit(d->hwirq, pctrl->dual_edge_irqs))
+               msm_gpio_update_dual_edge_pos(pctrl, g, d);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+       if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
+               irq_set_handler_locked(d, handle_level_irq);
+@@ -728,11 +728,11 @@ static int msm_gpio_irq_set_wake(struct
+       struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
+       unsigned long flags;
+-      spin_lock_irqsave(&pctrl->lock, flags);
++      raw_spin_lock_irqsave(&pctrl->lock, flags);
+       irq_set_irq_wake(pctrl->irq, on);
+-      spin_unlock_irqrestore(&pctrl->lock, flags);
++      raw_spin_unlock_irqrestore(&pctrl->lock, flags);
+       return 0;
+ }
+@@ -878,7 +878,7 @@ int msm_pinctrl_probe(struct platform_de
+       pctrl->soc = soc_data;
+       pctrl->chip = msm_gpio_template;
+-      spin_lock_init(&pctrl->lock);
++      raw_spin_lock_init(&pctrl->lock);
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       pctrl->regs = devm_ioremap_resource(&pdev->dev, res);
diff --git a/patches/features/all/rt/ping-sysrq.patch b/patches/features/all/rt/ping-sysrq.patch
new file mode 100644 (file)
index 0000000..9a64842
--- /dev/null
@@ -0,0 +1,122 @@
+Subject: net: sysrq via icmp
+From: Carsten Emde <C.Emde@osadl.org>
+Date: Tue, 19 Jul 2011 13:51:17 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+There are (probably rare) situations when a system crashed and the system
+console becomes unresponsive but the network icmp layer still is alive.
+Wouldn't it be wonderful, if we then could submit a sysreq command via ping?
+
+This patch provides this facility. Please consult the updated documentation
+Documentation/sysrq.txt for details.
+
+Signed-off-by: Carsten Emde <C.Emde@osadl.org>
+
+---
+ Documentation/sysrq.txt    |   11 +++++++++--
+ include/net/netns/ipv4.h   |    1 +
+ net/ipv4/icmp.c            |   30 ++++++++++++++++++++++++++++++
+ net/ipv4/sysctl_net_ipv4.c |    7 +++++++
+ 4 files changed, 47 insertions(+), 2 deletions(-)
+
+--- a/Documentation/sysrq.txt
++++ b/Documentation/sysrq.txt
+@@ -59,10 +59,17 @@ On PowerPC - Press 'ALT - Print Screen (
+ On other - If you know of the key combos for other architectures, please
+            let me know so I can add them to this section.
+-On all -  write a character to /proc/sysrq-trigger.  e.g.:
+-
++On all -  write a character to /proc/sysrq-trigger, e.g.:
+               echo t > /proc/sysrq-trigger
++On all - Enable network SysRq by writing a cookie to icmp_echo_sysrq, e.g.
++              echo 0x01020304 >/proc/sys/net/ipv4/icmp_echo_sysrq
++       Send an ICMP echo request with this pattern plus the particular
++       SysRq command key. Example:
++              # ping -c1 -s57 -p0102030468
++       will trigger the SysRq-H (help) command.
++
++
+ *  What are the 'command' keys?
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 'b'     - Will immediately reboot the system without syncing or unmounting
+--- a/include/net/netns/ipv4.h
++++ b/include/net/netns/ipv4.h
+@@ -69,6 +69,7 @@ struct netns_ipv4 {
+       int sysctl_icmp_echo_ignore_all;
+       int sysctl_icmp_echo_ignore_broadcasts;
++      int sysctl_icmp_echo_sysrq;
+       int sysctl_icmp_ignore_bogus_error_responses;
+       int sysctl_icmp_ratelimit;
+       int sysctl_icmp_ratemask;
+--- a/net/ipv4/icmp.c
++++ b/net/ipv4/icmp.c
+@@ -69,6 +69,7 @@
+ #include <linux/jiffies.h>
+ #include <linux/kernel.h>
+ #include <linux/fcntl.h>
++#include <linux/sysrq.h>
+ #include <linux/socket.h>
+ #include <linux/in.h>
+ #include <linux/inet.h>
+@@ -899,6 +900,30 @@ static bool icmp_redirect(struct sk_buff
+ }
+ /*
++ * 32bit and 64bit have different timestamp length, so we check for
++ * the cookie at offset 20 and verify it is repeated at offset 50
++ */
++#define CO_POS0               20
++#define CO_POS1               50
++#define CO_SIZE               sizeof(int)
++#define ICMP_SYSRQ_SIZE       57
++
++/*
++ * We got a ICMP_SYSRQ_SIZE sized ping request. Check for the cookie
++ * pattern and if it matches send the next byte as a trigger to sysrq.
++ */
++static void icmp_check_sysrq(struct net *net, struct sk_buff *skb)
++{
++      int cookie = htonl(net->ipv4.sysctl_icmp_echo_sysrq);
++      char *p = skb->data;
++
++      if (!memcmp(&cookie, p + CO_POS0, CO_SIZE) &&
++          !memcmp(&cookie, p + CO_POS1, CO_SIZE) &&
++          p[CO_POS0 + CO_SIZE] == p[CO_POS1 + CO_SIZE])
++              handle_sysrq(p[CO_POS0 + CO_SIZE]);
++}
++
++/*
+  *    Handle ICMP_ECHO ("ping") requests.
+  *
+  *    RFC 1122: 3.2.2.6 MUST have an echo server that answers ICMP echo
+@@ -925,6 +950,11 @@ static bool icmp_echo(struct sk_buff *sk
+               icmp_param.data_len        = skb->len;
+               icmp_param.head_len        = sizeof(struct icmphdr);
+               icmp_reply(&icmp_param, skb);
++
++              if (skb->len == ICMP_SYSRQ_SIZE &&
++                  net->ipv4.sysctl_icmp_echo_sysrq) {
++                      icmp_check_sysrq(net, skb);
++              }
+       }
+       /* should there be an ICMP stat for ignored echos? */
+       return true;
+--- a/net/ipv4/sysctl_net_ipv4.c
++++ b/net/ipv4/sysctl_net_ipv4.c
+@@ -681,6 +681,13 @@ static struct ctl_table ipv4_net_table[]
+               .proc_handler   = proc_dointvec
+       },
+       {
++              .procname       = "icmp_echo_sysrq",
++              .data           = &init_net.ipv4.sysctl_icmp_echo_sysrq,
++              .maxlen         = sizeof(int),
++              .mode           = 0644,
++              .proc_handler   = proc_dointvec
++      },
++      {
+               .procname       = "icmp_ignore_bogus_error_responses",
+               .data           = &init_net.ipv4.sysctl_icmp_ignore_bogus_error_responses,
+               .maxlen         = sizeof(int),
diff --git a/patches/features/all/rt/posix-timers-no-broadcast.patch b/patches/features/all/rt/posix-timers-no-broadcast.patch
new file mode 100644 (file)
index 0000000..a3ef4b7
--- /dev/null
@@ -0,0 +1,34 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 3 Jul 2009 08:29:20 -0500
+Subject: posix-timers: Prevent broadcast signals
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Posix timers should not send broadcast signals and kernel only
+signals. Prevent it.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ kernel/time/posix-timers.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/kernel/time/posix-timers.c
++++ b/kernel/time/posix-timers.c
+@@ -506,6 +506,7 @@ static enum hrtimer_restart posix_timer_
+ static struct pid *good_sigevent(sigevent_t * event)
+ {
+       struct task_struct *rtn = current->group_leader;
++      int sig = event->sigev_signo;
+       if ((event->sigev_notify & SIGEV_THREAD_ID ) &&
+               (!(rtn = find_task_by_vpid(event->sigev_notify_thread_id)) ||
+@@ -514,7 +515,8 @@ static struct pid *good_sigevent(sigeven
+               return NULL;
+       if (((event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) &&
+-          ((event->sigev_signo <= 0) || (event->sigev_signo > SIGRTMAX)))
++          (sig <= 0 || sig > SIGRTMAX || sig_kernel_only(sig) ||
++           sig_kernel_coredump(sig)))
+               return NULL;
+       return task_pid(rtn);
diff --git a/patches/features/all/rt/posix-timers-thread-posix-cpu-timers-on-rt.patch b/patches/features/all/rt/posix-timers-thread-posix-cpu-timers-on-rt.patch
new file mode 100644 (file)
index 0000000..79b354e
--- /dev/null
@@ -0,0 +1,302 @@
+From: John Stultz <johnstul@us.ibm.com>
+Date: Fri, 3 Jul 2009 08:29:58 -0500
+Subject: posix-timers: Thread posix-cpu-timers on -rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+posix-cpu-timer code takes non -rt safe locks in hard irq
+context. Move it to a thread.
+
+[ 3.0 fixes from Peter Zijlstra <peterz@infradead.org> ]
+
+Signed-off-by: John Stultz <johnstul@us.ibm.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/init_task.h      |    7 +
+ include/linux/sched.h          |    3 
+ kernel/fork.c                  |    3 
+ kernel/time/posix-cpu-timers.c |  193 ++++++++++++++++++++++++++++++++++++++++-
+ 4 files changed, 202 insertions(+), 4 deletions(-)
+
+--- a/include/linux/init_task.h
++++ b/include/linux/init_task.h
+@@ -150,6 +150,12 @@ extern struct task_group root_task_group
+ # define INIT_PERF_EVENTS(tsk)
+ #endif
++#ifdef CONFIG_PREEMPT_RT_BASE
++# define INIT_TIMER_LIST              .posix_timer_list = NULL,
++#else
++# define INIT_TIMER_LIST
++#endif
++
+ #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
+ # define INIT_VTIME(tsk)                                              \
+       .vtime_seqcount = SEQCNT_ZERO(tsk.vtime_seqcount),      \
+@@ -250,6 +256,7 @@ extern struct task_group root_task_group
+       .cpu_timers     = INIT_CPU_TIMERS(tsk.cpu_timers),              \
+       .pi_lock        = __RAW_SPIN_LOCK_UNLOCKED(tsk.pi_lock),        \
+       .timer_slack_ns = 50000, /* 50 usec default slack */            \
++      INIT_TIMER_LIST                                                 \
+       .pids = {                                                       \
+               [PIDTYPE_PID]  = INIT_PID_LINK(PIDTYPE_PID),            \
+               [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID),           \
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1660,6 +1660,9 @@ struct task_struct {
+       struct task_cputime cputime_expires;
+       struct list_head cpu_timers[3];
++#ifdef CONFIG_PREEMPT_RT_BASE
++      struct task_struct *posix_timer_list;
++#endif
+ /* process credentials */
+       const struct cred __rcu *ptracer_cred; /* Tracer's credentials at attach */
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -1426,6 +1426,9 @@ static void rt_mutex_init_task(struct ta
+  */
+ static void posix_cpu_timers_init(struct task_struct *tsk)
+ {
++#ifdef CONFIG_PREEMPT_RT_BASE
++      tsk->posix_timer_list = NULL;
++#endif
+       tsk->cputime_expires.prof_exp = 0;
+       tsk->cputime_expires.virt_exp = 0;
+       tsk->cputime_expires.sched_exp = 0;
+--- a/kernel/time/posix-cpu-timers.c
++++ b/kernel/time/posix-cpu-timers.c
+@@ -3,6 +3,7 @@
+  */
+ #include <linux/sched.h>
++#include <linux/sched/rt.h>
+ #include <linux/posix-timers.h>
+ #include <linux/errno.h>
+ #include <linux/math64.h>
+@@ -620,7 +621,7 @@ static int posix_cpu_timer_set(struct k_
+       /*
+        * Disarm any old timer after extracting its expiry time.
+        */
+-      WARN_ON_ONCE(!irqs_disabled());
++      WARN_ON_ONCE_NONRT(!irqs_disabled());
+       ret = 0;
+       old_incr = timer->it.cpu.incr;
+@@ -1064,7 +1065,7 @@ void posix_cpu_timer_schedule(struct k_i
+       /*
+        * Now re-arm for the new expiry time.
+        */
+-      WARN_ON_ONCE(!irqs_disabled());
++      WARN_ON_ONCE_NONRT(!irqs_disabled());
+       arm_timer(timer);
+       unlock_task_sighand(p, &flags);
+@@ -1153,13 +1154,13 @@ static inline int fastpath_timer_check(s
+  * already updated our counts.  We need to check if any timers fire now.
+  * Interrupts are disabled.
+  */
+-void run_posix_cpu_timers(struct task_struct *tsk)
++static void __run_posix_cpu_timers(struct task_struct *tsk)
+ {
+       LIST_HEAD(firing);
+       struct k_itimer *timer, *next;
+       unsigned long flags;
+-      WARN_ON_ONCE(!irqs_disabled());
++      WARN_ON_ONCE_NONRT(!irqs_disabled());
+       /*
+        * The fast path checks that there are no expired thread or thread
+@@ -1213,6 +1214,190 @@ void run_posix_cpu_timers(struct task_st
+       }
+ }
++#ifdef CONFIG_PREEMPT_RT_BASE
++#include <linux/kthread.h>
++#include <linux/cpu.h>
++DEFINE_PER_CPU(struct task_struct *, posix_timer_task);
++DEFINE_PER_CPU(struct task_struct *, posix_timer_tasklist);
++
++static int posix_cpu_timers_thread(void *data)
++{
++      int cpu = (long)data;
++
++      BUG_ON(per_cpu(posix_timer_task,cpu) != current);
++
++      while (!kthread_should_stop()) {
++              struct task_struct *tsk = NULL;
++              struct task_struct *next = NULL;
++
++              if (cpu_is_offline(cpu))
++                      goto wait_to_die;
++
++              /* grab task list */
++              raw_local_irq_disable();
++              tsk = per_cpu(posix_timer_tasklist, cpu);
++              per_cpu(posix_timer_tasklist, cpu) = NULL;
++              raw_local_irq_enable();
++
++              /* its possible the list is empty, just return */
++              if (!tsk) {
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule();
++                      __set_current_state(TASK_RUNNING);
++                      continue;
++              }
++
++              /* Process task list */
++              while (1) {
++                      /* save next */
++                      next = tsk->posix_timer_list;
++
++                      /* run the task timers, clear its ptr and
++                       * unreference it
++                       */
++                      __run_posix_cpu_timers(tsk);
++                      tsk->posix_timer_list = NULL;
++                      put_task_struct(tsk);
++
++                      /* check if this is the last on the list */
++                      if (next == tsk)
++                              break;
++                      tsk = next;
++              }
++      }
++      return 0;
++
++wait_to_die:
++      /* Wait for kthread_stop */
++      set_current_state(TASK_INTERRUPTIBLE);
++      while (!kthread_should_stop()) {
++              schedule();
++              set_current_state(TASK_INTERRUPTIBLE);
++      }
++      __set_current_state(TASK_RUNNING);
++      return 0;
++}
++
++static inline int __fastpath_timer_check(struct task_struct *tsk)
++{
++      /* tsk == current, ensure it is safe to use ->signal/sighand */
++      if (unlikely(tsk->exit_state))
++              return 0;
++
++      if (!task_cputime_zero(&tsk->cputime_expires))
++                      return 1;
++
++      if (!task_cputime_zero(&tsk->signal->cputime_expires))
++                      return 1;
++
++      return 0;
++}
++
++void run_posix_cpu_timers(struct task_struct *tsk)
++{
++      unsigned long cpu = smp_processor_id();
++      struct task_struct *tasklist;
++
++      BUG_ON(!irqs_disabled());
++      if(!per_cpu(posix_timer_task, cpu))
++              return;
++      /* get per-cpu references */
++      tasklist = per_cpu(posix_timer_tasklist, cpu);
++
++      /* check to see if we're already queued */
++      if (!tsk->posix_timer_list && __fastpath_timer_check(tsk)) {
++              get_task_struct(tsk);
++              if (tasklist) {
++                      tsk->posix_timer_list = tasklist;
++              } else {
++                      /*
++                       * The list is terminated by a self-pointing
++                       * task_struct
++                       */
++                      tsk->posix_timer_list = tsk;
++              }
++              per_cpu(posix_timer_tasklist, cpu) = tsk;
++
++              wake_up_process(per_cpu(posix_timer_task, cpu));
++      }
++}
++
++/*
++ * posix_cpu_thread_call - callback that gets triggered when a CPU is added.
++ * Here we can start up the necessary migration thread for the new CPU.
++ */
++static int posix_cpu_thread_call(struct notifier_block *nfb,
++                               unsigned long action, void *hcpu)
++{
++      int cpu = (long)hcpu;
++      struct task_struct *p;
++      struct sched_param param;
++
++      switch (action) {
++      case CPU_UP_PREPARE:
++              p = kthread_create(posix_cpu_timers_thread, hcpu,
++                                      "posixcputmr/%d",cpu);
++              if (IS_ERR(p))
++                      return NOTIFY_BAD;
++              p->flags |= PF_NOFREEZE;
++              kthread_bind(p, cpu);
++              /* Must be high prio to avoid getting starved */
++              param.sched_priority = MAX_RT_PRIO-1;
++              sched_setscheduler(p, SCHED_FIFO, &param);
++              per_cpu(posix_timer_task,cpu) = p;
++              break;
++      case CPU_ONLINE:
++              /* Strictly unneccessary, as first user will wake it. */
++              wake_up_process(per_cpu(posix_timer_task,cpu));
++              break;
++#ifdef CONFIG_HOTPLUG_CPU
++      case CPU_UP_CANCELED:
++              /* Unbind it from offline cpu so it can run.  Fall thru. */
++              kthread_bind(per_cpu(posix_timer_task, cpu),
++                           cpumask_any(cpu_online_mask));
++              kthread_stop(per_cpu(posix_timer_task,cpu));
++              per_cpu(posix_timer_task,cpu) = NULL;
++              break;
++      case CPU_DEAD:
++              kthread_stop(per_cpu(posix_timer_task,cpu));
++              per_cpu(posix_timer_task,cpu) = NULL;
++              break;
++#endif
++      }
++      return NOTIFY_OK;
++}
++
++/* Register at highest priority so that task migration (migrate_all_tasks)
++ * happens before everything else.
++ */
++static struct notifier_block posix_cpu_thread_notifier = {
++      .notifier_call = posix_cpu_thread_call,
++      .priority = 10
++};
++
++static int __init posix_cpu_thread_init(void)
++{
++      void *hcpu = (void *)(long)smp_processor_id();
++      /* Start one for boot CPU. */
++      unsigned long cpu;
++
++      /* init the per-cpu posix_timer_tasklets */
++      for_each_possible_cpu(cpu)
++              per_cpu(posix_timer_tasklist, cpu) = NULL;
++
++      posix_cpu_thread_call(&posix_cpu_thread_notifier, CPU_UP_PREPARE, hcpu);
++      posix_cpu_thread_call(&posix_cpu_thread_notifier, CPU_ONLINE, hcpu);
++      register_cpu_notifier(&posix_cpu_thread_notifier);
++      return 0;
++}
++early_initcall(posix_cpu_thread_init);
++#else /* CONFIG_PREEMPT_RT_BASE */
++void run_posix_cpu_timers(struct task_struct *tsk)
++{
++      __run_posix_cpu_timers(tsk);
++}
++#endif /* CONFIG_PREEMPT_RT_BASE */
++
+ /*
+  * Set one of the process-wide special case CPU timers or RLIMIT_CPU.
+  * The tsk->sighand->siglock must be held by the caller.
diff --git a/patches/features/all/rt/power-disable-highmem-on-rt.patch b/patches/features/all/rt/power-disable-highmem-on-rt.patch
new file mode 100644 (file)
index 0000000..76f47fa
--- /dev/null
@@ -0,0 +1,23 @@
+Subject: powerpc: Disable highmem on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 18 Jul 2011 17:08:34 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The current highmem handling on -RT is not compatible and needs fixups.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/powerpc/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/Kconfig
++++ b/arch/powerpc/Kconfig
+@@ -322,7 +322,7 @@ menu "Kernel options"
+ config HIGHMEM
+       bool "High memory support"
+-      depends on PPC32
++      depends on PPC32 && !PREEMPT_RT_FULL
+ source kernel/Kconfig.hz
+ source kernel/Kconfig.preempt
diff --git a/patches/features/all/rt/power-use-generic-rwsem-on-rt.patch b/patches/features/all/rt/power-use-generic-rwsem-on-rt.patch
new file mode 100644 (file)
index 0000000..f627af8
--- /dev/null
@@ -0,0 +1,27 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 14 Jul 2015 14:26:34 +0200
+Subject: powerpc: Use generic rwsem on RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use generic code which uses rtmutex
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/powerpc/Kconfig |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/powerpc/Kconfig
++++ b/arch/powerpc/Kconfig
+@@ -52,10 +52,11 @@ config LOCKDEP_SUPPORT
+ config RWSEM_GENERIC_SPINLOCK
+       bool
++      default y if PREEMPT_RT_FULL
+ config RWSEM_XCHGADD_ALGORITHM
+       bool
+-      default y
++      default y if !PREEMPT_RT_FULL
+ config GENERIC_LOCKBREAK
+       bool
diff --git a/patches/features/all/rt/powerpc-kvm-Disable-in-kernel-MPIC-emulation-for-PRE.patch b/patches/features/all/rt/powerpc-kvm-Disable-in-kernel-MPIC-emulation-for-PRE.patch
new file mode 100644 (file)
index 0000000..dd52539
--- /dev/null
@@ -0,0 +1,38 @@
+From: Bogdan Purcareata <bogdan.purcareata@freescale.com>
+Date: Fri, 24 Apr 2015 15:53:13 +0000
+Subject: powerpc/kvm: Disable in-kernel MPIC emulation for PREEMPT_RT_FULL
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+While converting the openpic emulation code to use a raw_spinlock_t enables
+guests to run on RT, there's still a performance issue. For interrupts sent in
+directed delivery mode with a multiple CPU mask, the emulated openpic will loop
+through all of the VCPUs, and for each VCPUs, it call IRQ_check, which will loop
+through all the pending interrupts for that VCPU. This is done while holding the
+raw_lock, meaning that in all this time the interrupts and preemption are
+disabled on the host Linux. A malicious user app can max both these number and
+cause a DoS.
+
+This temporary fix is sent for two reasons. First is so that users who want to
+use the in-kernel MPIC emulation are aware of the potential latencies, thus
+making sure that the hardware MPIC and their usage scenario does not involve
+interrupts sent in directed delivery mode, and the number of possible pending
+interrupts is kept small. Secondly, this should incentivize the development of a
+proper openpic emulation that would be better suited for RT.
+
+Acked-by: Scott Wood <scottwood@freescale.com>
+Signed-off-by: Bogdan Purcareata <bogdan.purcareata@freescale.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/powerpc/kvm/Kconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/powerpc/kvm/Kconfig
++++ b/arch/powerpc/kvm/Kconfig
+@@ -175,6 +175,7 @@ config KVM_E500MC
+ config KVM_MPIC
+       bool "KVM in-kernel MPIC emulation"
+       depends on KVM && E500
++      depends on !PREEMPT_RT_FULL
+       select HAVE_KVM_IRQCHIP
+       select HAVE_KVM_IRQFD
+       select HAVE_KVM_IRQ_ROUTING
diff --git a/patches/features/all/rt/powerpc-preempt-lazy-support.patch b/patches/features/all/rt/powerpc-preempt-lazy-support.patch
new file mode 100644 (file)
index 0000000..aa03f9c
--- /dev/null
@@ -0,0 +1,174 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 1 Nov 2012 10:14:11 +0100
+Subject: powerpc: Add support for lazy preemption
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Implement the powerpc pieces for lazy preempt.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/powerpc/Kconfig                   |    1 +
+ arch/powerpc/include/asm/thread_info.h |   11 ++++++++---
+ arch/powerpc/kernel/asm-offsets.c      |    1 +
+ arch/powerpc/kernel/entry_32.S         |   17 ++++++++++++-----
+ arch/powerpc/kernel/entry_64.S         |   14 +++++++++++---
+ 5 files changed, 33 insertions(+), 11 deletions(-)
+
+--- a/arch/powerpc/Kconfig
++++ b/arch/powerpc/Kconfig
+@@ -135,6 +135,7 @@ config PPC
+       select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
+       select GENERIC_STRNCPY_FROM_USER
+       select GENERIC_STRNLEN_USER
++      select HAVE_PREEMPT_LAZY
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
+       select CLONE_BACKWARDS
+--- a/arch/powerpc/include/asm/thread_info.h
++++ b/arch/powerpc/include/asm/thread_info.h
+@@ -43,6 +43,8 @@ struct thread_info {
+       int             cpu;                    /* cpu we're on */
+       int             preempt_count;          /* 0 => preemptable,
+                                                  <0 => BUG */
++      int             preempt_lazy_count;     /* 0 => preemptable,
++                                                 <0 => BUG */
+       unsigned long   local_flags;            /* private flags for thread */
+ #ifdef CONFIG_LIVEPATCH
+       unsigned long *livepatch_sp;
+@@ -88,8 +90,7 @@ static inline struct thread_info *curren
+ #define TIF_SYSCALL_TRACE     0       /* syscall trace active */
+ #define TIF_SIGPENDING                1       /* signal pending */
+ #define TIF_NEED_RESCHED      2       /* rescheduling necessary */
+-#define TIF_POLLING_NRFLAG    3       /* true if poll_idle() is polling
+-                                         TIF_NEED_RESCHED */
++#define TIF_NEED_RESCHED_LAZY 3       /* lazy rescheduling necessary */
+ #define TIF_32BIT             4       /* 32 bit binary */
+ #define TIF_RESTORE_TM                5       /* need to restore TM FP/VEC/VSX */
+ #define TIF_SYSCALL_AUDIT     7       /* syscall auditing active */
+@@ -107,6 +108,8 @@ static inline struct thread_info *curren
+ #if defined(CONFIG_PPC64)
+ #define TIF_ELF2ABI           18      /* function descriptors must die! */
+ #endif
++#define TIF_POLLING_NRFLAG    19      /* true if poll_idle() is polling
++                                         TIF_NEED_RESCHED */
+ /* as above, but as bit values */
+ #define _TIF_SYSCALL_TRACE    (1<<TIF_SYSCALL_TRACE)
+@@ -125,14 +128,16 @@ static inline struct thread_info *curren
+ #define _TIF_SYSCALL_TRACEPOINT       (1<<TIF_SYSCALL_TRACEPOINT)
+ #define _TIF_EMULATE_STACK_STORE      (1<<TIF_EMULATE_STACK_STORE)
+ #define _TIF_NOHZ             (1<<TIF_NOHZ)
++#define _TIF_NEED_RESCHED_LAZY        (1<<TIF_NEED_RESCHED_LAZY)
+ #define _TIF_SYSCALL_DOTRACE  (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \
+                                _TIF_SECCOMP | _TIF_SYSCALL_TRACEPOINT | \
+                                _TIF_NOHZ)
+ #define _TIF_USER_WORK_MASK   (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
+                                _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
+-                               _TIF_RESTORE_TM)
++                               _TIF_RESTORE_TM | _TIF_NEED_RESCHED_LAZY)
+ #define _TIF_PERSYSCALL_MASK  (_TIF_RESTOREALL|_TIF_NOERROR)
++#define _TIF_NEED_RESCHED_MASK        (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)
+ /* Bits in local_flags */
+ /* Don't move TLF_NAPPING without adjusting the code in entry_32.S */
+--- a/arch/powerpc/kernel/asm-offsets.c
++++ b/arch/powerpc/kernel/asm-offsets.c
+@@ -156,6 +156,7 @@ int main(void)
+       DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
+       DEFINE(TI_LOCAL_FLAGS, offsetof(struct thread_info, local_flags));
+       DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count));
++      DEFINE(TI_PREEMPT_LAZY, offsetof(struct thread_info, preempt_lazy_count));
+       DEFINE(TI_TASK, offsetof(struct thread_info, task));
+       DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
+--- a/arch/powerpc/kernel/entry_32.S
++++ b/arch/powerpc/kernel/entry_32.S
+@@ -835,7 +835,14 @@ user_exc_return:          /* r10 contains MSR_KE
+       cmpwi   0,r0,0          /* if non-zero, just restore regs and return */
+       bne     restore
+       andi.   r8,r8,_TIF_NEED_RESCHED
++      bne+    1f
++      lwz     r0,TI_PREEMPT_LAZY(r9)
++      cmpwi   0,r0,0          /* if non-zero, just restore regs and return */
++      bne     restore
++      lwz     r0,TI_FLAGS(r9)
++      andi.   r0,r0,_TIF_NEED_RESCHED_LAZY
+       beq+    restore
++1:
+       lwz     r3,_MSR(r1)
+       andi.   r0,r3,MSR_EE    /* interrupts off? */
+       beq     restore         /* don't schedule if so */
+@@ -846,11 +853,11 @@ user_exc_return:         /* r10 contains MSR_KE
+        */
+       bl      trace_hardirqs_off
+ #endif
+-1:    bl      preempt_schedule_irq
++2:    bl      preempt_schedule_irq
+       CURRENT_THREAD_INFO(r9, r1)
+       lwz     r3,TI_FLAGS(r9)
+-      andi.   r0,r3,_TIF_NEED_RESCHED
+-      bne-    1b
++      andi.   r0,r3,_TIF_NEED_RESCHED_MASK
++      bne-    2b
+ #ifdef CONFIG_TRACE_IRQFLAGS
+       /* And now, to properly rebalance the above, we tell lockdep they
+        * are being turned back on, which will happen when we return
+@@ -1171,7 +1178,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRE
+ #endif /* !(CONFIG_4xx || CONFIG_BOOKE) */
+ do_work:                      /* r10 contains MSR_KERNEL here */
+-      andi.   r0,r9,_TIF_NEED_RESCHED
++      andi.   r0,r9,_TIF_NEED_RESCHED_MASK
+       beq     do_user_signal
+ do_resched:                   /* r10 contains MSR_KERNEL here */
+@@ -1192,7 +1199,7 @@ do_resched:                      /* r10 contains MSR_KERNEL
+       MTMSRD(r10)             /* disable interrupts */
+       CURRENT_THREAD_INFO(r9, r1)
+       lwz     r9,TI_FLAGS(r9)
+-      andi.   r0,r9,_TIF_NEED_RESCHED
++      andi.   r0,r9,_TIF_NEED_RESCHED_MASK
+       bne-    do_resched
+       andi.   r0,r9,_TIF_USER_WORK_MASK
+       beq     restore_user
+--- a/arch/powerpc/kernel/entry_64.S
++++ b/arch/powerpc/kernel/entry_64.S
+@@ -656,7 +656,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEG
+       bl      restore_math
+       b       restore
+ #endif
+-1:    andi.   r0,r4,_TIF_NEED_RESCHED
++1:    andi.   r0,r4,_TIF_NEED_RESCHED_MASK
+       beq     2f
+       bl      restore_interrupts
+       SCHEDULE_USER
+@@ -718,10 +718,18 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEG
+ #ifdef CONFIG_PREEMPT
+       /* Check if we need to preempt */
++      lwz     r8,TI_PREEMPT(r9)
++      cmpwi   0,r8,0          /* if non-zero, just restore regs and return */
++      bne     restore
+       andi.   r0,r4,_TIF_NEED_RESCHED
++      bne+    check_count
++
++      andi.   r0,r4,_TIF_NEED_RESCHED_LAZY
+       beq+    restore
++      lwz     r8,TI_PREEMPT_LAZY(r9)
++
+       /* Check that preempt_count() == 0 and interrupts are enabled */
+-      lwz     r8,TI_PREEMPT(r9)
++check_count:
+       cmpwi   cr1,r8,0
+       ld      r0,SOFTE(r1)
+       cmpdi   r0,0
+@@ -738,7 +746,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEG
+       /* Re-test flags and eventually loop */
+       CURRENT_THREAD_INFO(r9, r1)
+       ld      r4,TI_FLAGS(r9)
+-      andi.   r0,r4,_TIF_NEED_RESCHED
++      andi.   r0,r4,_TIF_NEED_RESCHED_MASK
+       bne     1b
+       /*
diff --git a/patches/features/all/rt/powerpc-ps3-device-init.c-adapt-to-completions-using.patch b/patches/features/all/rt/powerpc-ps3-device-init.c-adapt-to-completions-using.patch
new file mode 100644 (file)
index 0000000..686bd2f
--- /dev/null
@@ -0,0 +1,32 @@
+From: Paul Gortmaker <paul.gortmaker@windriver.com>
+Date: Sun, 31 May 2015 14:44:42 -0400
+Subject: powerpc: ps3/device-init.c - adapt to completions using swait vs wait
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+To fix:
+
+  cc1: warnings being treated as errors
+  arch/powerpc/platforms/ps3/device-init.c: In function 'ps3_notification_read_write':
+  arch/powerpc/platforms/ps3/device-init.c:755:2: error: passing argument 1 of 'prepare_to_wait_event' from incompatible pointer type
+  arch/powerpc/platforms/ps3/device-init.c:755:2: error: passing argument 1 of 'abort_exclusive_wait' from incompatible pointer type
+  arch/powerpc/platforms/ps3/device-init.c:755:2: error: passing argument 1 of 'finish_wait' from incompatible pointer type
+  arch/powerpc/platforms/ps3/device-init.o] Error 1
+  make[3]: *** Waiting for unfinished jobs....
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/powerpc/platforms/ps3/device-init.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/platforms/ps3/device-init.c
++++ b/arch/powerpc/platforms/ps3/device-init.c
+@@ -752,7 +752,7 @@ static int ps3_notification_read_write(s
+       }
+       pr_debug("%s:%u: notification %s issued\n", __func__, __LINE__, op);
+-      res = wait_event_interruptible(dev->done.wait,
++      res = swait_event_interruptible(dev->done.wait,
+                                      dev->done.done || kthread_should_stop());
+       if (kthread_should_stop())
+               res = -EINTR;
diff --git a/patches/features/all/rt/preempt-lazy-support.patch b/patches/features/all/rt/preempt-lazy-support.patch
new file mode 100644 (file)
index 0000000..1072a21
--- /dev/null
@@ -0,0 +1,589 @@
+Subject: sched: Add support for lazy preemption
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 26 Oct 2012 18:50:54 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+It has become an obsession to mitigate the determinism vs. throughput
+loss of RT. Looking at the mainline semantics of preemption points
+gives a hint why RT sucks throughput wise for ordinary SCHED_OTHER
+tasks. One major issue is the wakeup of tasks which are right away
+preempting the waking task while the waking task holds a lock on which
+the woken task will block right after having preempted the wakee. In
+mainline this is prevented due to the implicit preemption disable of
+spin/rw_lock held regions. On RT this is not possible due to the fully
+preemptible nature of sleeping spinlocks.
+
+Though for a SCHED_OTHER task preempting another SCHED_OTHER task this
+is really not a correctness issue. RT folks are concerned about
+SCHED_FIFO/RR tasks preemption and not about the purely fairness
+driven SCHED_OTHER preemption latencies.
+
+So I introduced a lazy preemption mechanism which only applies to
+SCHED_OTHER tasks preempting another SCHED_OTHER task. Aside of the
+existing preempt_count each tasks sports now a preempt_lazy_count
+which is manipulated on lock acquiry and release. This is slightly
+incorrect as for lazyness reasons I coupled this on
+migrate_disable/enable so some other mechanisms get the same treatment
+(e.g. get_cpu_light).
+
+Now on the scheduler side instead of setting NEED_RESCHED this sets
+NEED_RESCHED_LAZY in case of a SCHED_OTHER/SCHED_OTHER preemption and
+therefor allows to exit the waking task the lock held region before
+the woken task preempts. That also works better for cross CPU wakeups
+as the other side can stay in the adaptive spinning loop.
+
+For RT class preemption there is no change. This simply sets
+NEED_RESCHED and forgoes the lazy preemption counter.
+
+ Initial test do not expose any observable latency increasement, but
+history shows that I've been proven wrong before :)
+
+The lazy preemption mode is per default on, but with
+CONFIG_SCHED_DEBUG enabled it can be disabled via:
+
+ # echo NO_PREEMPT_LAZY >/sys/kernel/debug/sched_features
+
+and reenabled via
+
+ # echo PREEMPT_LAZY >/sys/kernel/debug/sched_features
+
+The test results so far are very machine and workload dependent, but
+there is a clear trend that it enhances the non RT workload
+performance.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/preempt.h      |   29 ++++++++++++++++-
+ include/linux/sched.h        |   37 ++++++++++++++++++++++
+ include/linux/thread_info.h  |   12 ++++++-
+ include/linux/trace_events.h |    1 
+ kernel/Kconfig.preempt       |    6 +++
+ kernel/sched/core.c          |   72 +++++++++++++++++++++++++++++++++++++++++--
+ kernel/sched/fair.c          |   16 ++++-----
+ kernel/sched/features.h      |    3 +
+ kernel/sched/sched.h         |    9 +++++
+ kernel/trace/trace.c         |   37 +++++++++++++---------
+ kernel/trace/trace.h         |    2 +
+ kernel/trace/trace_output.c  |   14 +++++++-
+ 12 files changed, 209 insertions(+), 29 deletions(-)
+
+--- a/include/linux/preempt.h
++++ b/include/linux/preempt.h
+@@ -153,6 +153,20 @@ extern void preempt_count_sub(int val);
+ #define preempt_count_inc() preempt_count_add(1)
+ #define preempt_count_dec() preempt_count_sub(1)
++#ifdef CONFIG_PREEMPT_LAZY
++#define add_preempt_lazy_count(val)   do { preempt_lazy_count() += (val); } while (0)
++#define sub_preempt_lazy_count(val)   do { preempt_lazy_count() -= (val); } while (0)
++#define inc_preempt_lazy_count()      add_preempt_lazy_count(1)
++#define dec_preempt_lazy_count()      sub_preempt_lazy_count(1)
++#define preempt_lazy_count()          (current_thread_info()->preempt_lazy_count)
++#else
++#define add_preempt_lazy_count(val)   do { } while (0)
++#define sub_preempt_lazy_count(val)   do { } while (0)
++#define inc_preempt_lazy_count()      do { } while (0)
++#define dec_preempt_lazy_count()      do { } while (0)
++#define preempt_lazy_count()          (0)
++#endif
++
+ #ifdef CONFIG_PREEMPT_COUNT
+ #define preempt_disable() \
+@@ -161,6 +175,12 @@ do { \
+       barrier(); \
+ } while (0)
++#define preempt_lazy_disable() \
++do { \
++      inc_preempt_lazy_count(); \
++      barrier(); \
++} while (0)
++
+ #define sched_preempt_enable_no_resched() \
+ do { \
+       barrier(); \
+@@ -198,6 +218,13 @@ do { \
+               __preempt_schedule(); \
+ } while (0)
++#define preempt_lazy_enable() \
++do { \
++      dec_preempt_lazy_count(); \
++      barrier(); \
++      preempt_check_resched(); \
++} while (0)
++
+ #else /* !CONFIG_PREEMPT */
+ #define preempt_enable() \
+ do { \
+@@ -264,7 +291,7 @@ do { \
+ } while (0)
+ #define preempt_fold_need_resched() \
+ do { \
+-      if (tif_need_resched()) \
++      if (tif_need_resched_now()) \
+               set_preempt_need_resched(); \
+ } while (0)
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -3343,6 +3343,43 @@ static inline int test_tsk_need_resched(
+       return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED));
+ }
++#ifdef CONFIG_PREEMPT_LAZY
++static inline void set_tsk_need_resched_lazy(struct task_struct *tsk)
++{
++      set_tsk_thread_flag(tsk,TIF_NEED_RESCHED_LAZY);
++}
++
++static inline void clear_tsk_need_resched_lazy(struct task_struct *tsk)
++{
++      clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED_LAZY);
++}
++
++static inline int test_tsk_need_resched_lazy(struct task_struct *tsk)
++{
++      return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED_LAZY));
++}
++
++static inline int need_resched_lazy(void)
++{
++      return test_thread_flag(TIF_NEED_RESCHED_LAZY);
++}
++
++static inline int need_resched_now(void)
++{
++      return test_thread_flag(TIF_NEED_RESCHED);
++}
++
++#else
++static inline void clear_tsk_need_resched_lazy(struct task_struct *tsk) { }
++static inline int need_resched_lazy(void) { return 0; }
++
++static inline int need_resched_now(void)
++{
++      return test_thread_flag(TIF_NEED_RESCHED);
++}
++
++#endif
++
+ static inline int restart_syscall(void)
+ {
+       set_tsk_thread_flag(current, TIF_SIGPENDING);
+--- a/include/linux/thread_info.h
++++ b/include/linux/thread_info.h
+@@ -107,7 +107,17 @@ static inline int test_ti_thread_flag(st
+ #define test_thread_flag(flag) \
+       test_ti_thread_flag(current_thread_info(), flag)
+-#define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED)
++#ifdef CONFIG_PREEMPT_LAZY
++#define tif_need_resched()    (test_thread_flag(TIF_NEED_RESCHED) || \
++                               test_thread_flag(TIF_NEED_RESCHED_LAZY))
++#define tif_need_resched_now()        (test_thread_flag(TIF_NEED_RESCHED))
++#define tif_need_resched_lazy()       test_thread_flag(TIF_NEED_RESCHED_LAZY))
++
++#else
++#define tif_need_resched()    test_thread_flag(TIF_NEED_RESCHED)
++#define tif_need_resched_now()        test_thread_flag(TIF_NEED_RESCHED)
++#define tif_need_resched_lazy()       0
++#endif
+ #ifndef CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES
+ static inline int arch_within_stack_frames(const void * const stack,
+--- a/include/linux/trace_events.h
++++ b/include/linux/trace_events.h
+@@ -58,6 +58,7 @@ struct trace_entry {
+       int                     pid;
+       unsigned short          migrate_disable;
+       unsigned short          padding;
++      unsigned char           preempt_lazy_count;
+ };
+ #define TRACE_EVENT_TYPE_MAX                                          \
+--- a/kernel/Kconfig.preempt
++++ b/kernel/Kconfig.preempt
+@@ -6,6 +6,12 @@ config PREEMPT_RT_BASE
+       bool
+       select PREEMPT
++config HAVE_PREEMPT_LAZY
++      bool
++
++config PREEMPT_LAZY
++      def_bool y if HAVE_PREEMPT_LAZY && PREEMPT_RT_FULL
++
+ choice
+       prompt "Preemption Model"
+       default PREEMPT_NONE
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -510,6 +510,38 @@ void resched_curr(struct rq *rq)
+               trace_sched_wake_idle_without_ipi(cpu);
+ }
++#ifdef CONFIG_PREEMPT_LAZY
++void resched_curr_lazy(struct rq *rq)
++{
++      struct task_struct *curr = rq->curr;
++      int cpu;
++
++      if (!sched_feat(PREEMPT_LAZY)) {
++              resched_curr(rq);
++              return;
++      }
++
++      lockdep_assert_held(&rq->lock);
++
++      if (test_tsk_need_resched(curr))
++              return;
++
++      if (test_tsk_need_resched_lazy(curr))
++              return;
++
++      set_tsk_need_resched_lazy(curr);
++
++      cpu = cpu_of(rq);
++      if (cpu == smp_processor_id())
++              return;
++
++      /* NEED_RESCHED_LAZY must be visible before we test polling */
++      smp_mb();
++      if (!tsk_is_polling(curr))
++              smp_send_reschedule(cpu);
++}
++#endif
++
+ void resched_cpu(int cpu)
+ {
+       struct rq *rq = cpu_rq(cpu);
+@@ -2531,6 +2563,9 @@ int sched_fork(unsigned long clone_flags
+       p->on_cpu = 0;
+ #endif
+       init_task_preempt_count(p);
++#ifdef CONFIG_HAVE_PREEMPT_LAZY
++      task_thread_info(p)->preempt_lazy_count = 0;
++#endif
+ #ifdef CONFIG_SMP
+       plist_node_init(&p->pushable_tasks, MAX_PRIO);
+       RB_CLEAR_NODE(&p->pushable_dl_tasks);
+@@ -3362,6 +3397,7 @@ void migrate_disable(void)
+       }
+       preempt_disable();
++      preempt_lazy_disable();
+       pin_current_cpu();
+       p->migrate_disable = 1;
+       preempt_enable();
+@@ -3401,6 +3437,7 @@ void migrate_enable(void)
+       unpin_current_cpu();
+       preempt_enable();
++      preempt_lazy_enable();
+ }
+ EXPORT_SYMBOL(migrate_enable);
+ #endif
+@@ -3530,6 +3567,7 @@ static void __sched notrace __schedule(b
+       next = pick_next_task(rq, prev, cookie);
+       clear_tsk_need_resched(prev);
++      clear_tsk_need_resched_lazy(prev);
+       clear_preempt_need_resched();
+       rq->clock_skip_update = 0;
+@@ -3675,6 +3713,30 @@ static void __sched notrace preempt_sche
+       } while (need_resched());
+ }
++#ifdef CONFIG_PREEMPT_LAZY
++/*
++ * If TIF_NEED_RESCHED is then we allow to be scheduled away since this is
++ * set by a RT task. Oterwise we try to avoid beeing scheduled out as long as
++ * preempt_lazy_count counter >0.
++ */
++static __always_inline int preemptible_lazy(void)
++{
++      if (test_thread_flag(TIF_NEED_RESCHED))
++              return 1;
++      if (current_thread_info()->preempt_lazy_count)
++              return 0;
++      return 1;
++}
++
++#else
++
++static inline int preemptible_lazy(void)
++{
++      return 1;
++}
++
++#endif
++
+ #ifdef CONFIG_PREEMPT
+ /*
+  * this is the entry point to schedule() from in-kernel preemption
+@@ -3689,7 +3751,8 @@ asmlinkage __visible void __sched notrac
+        */
+       if (likely(!preemptible()))
+               return;
+-
++      if (!preemptible_lazy())
++              return;
+       preempt_schedule_common();
+ }
+ NOKPROBE_SYMBOL(preempt_schedule);
+@@ -3716,6 +3779,9 @@ asmlinkage __visible void __sched notrac
+       if (likely(!preemptible()))
+               return;
++      if (!preemptible_lazy())
++              return;
++
+       do {
+               /*
+                * Because the function tracer can trace preempt_count_sub()
+@@ -5481,7 +5547,9 @@ void init_idle(struct task_struct *idle,
+       /* Set the preempt count _outside_ the spinlocks! */
+       init_idle_preempt_count(idle, cpu);
+-
++#ifdef CONFIG_HAVE_PREEMPT_LAZY
++      task_thread_info(idle)->preempt_lazy_count = 0;
++#endif
+       /*
+        * The idle tasks have their own, simple scheduling class:
+        */
+--- a/kernel/sched/fair.c
++++ b/kernel/sched/fair.c
+@@ -3518,7 +3518,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq
+       ideal_runtime = sched_slice(cfs_rq, curr);
+       delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime;
+       if (delta_exec > ideal_runtime) {
+-              resched_curr(rq_of(cfs_rq));
++              resched_curr_lazy(rq_of(cfs_rq));
+               /*
+                * The current task ran long enough, ensure it doesn't get
+                * re-elected due to buddy favours.
+@@ -3542,7 +3542,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq
+               return;
+       if (delta > ideal_runtime)
+-              resched_curr(rq_of(cfs_rq));
++              resched_curr_lazy(rq_of(cfs_rq));
+ }
+ static void
+@@ -3684,7 +3684,7 @@ entity_tick(struct cfs_rq *cfs_rq, struc
+        * validating it and just reschedule.
+        */
+       if (queued) {
+-              resched_curr(rq_of(cfs_rq));
++              resched_curr_lazy(rq_of(cfs_rq));
+               return;
+       }
+       /*
+@@ -3866,7 +3866,7 @@ static void __account_cfs_rq_runtime(str
+        * hierarchy can be throttled
+        */
+       if (!assign_cfs_rq_runtime(cfs_rq) && likely(cfs_rq->curr))
+-              resched_curr(rq_of(cfs_rq));
++              resched_curr_lazy(rq_of(cfs_rq));
+ }
+ static __always_inline
+@@ -4494,7 +4494,7 @@ static void hrtick_start_fair(struct rq
+               if (delta < 0) {
+                       if (rq->curr == p)
+-                              resched_curr(rq);
++                              resched_curr_lazy(rq);
+                       return;
+               }
+               hrtick_start(rq, delta);
+@@ -5905,7 +5905,7 @@ static void check_preempt_wakeup(struct
+       return;
+ preempt:
+-      resched_curr(rq);
++      resched_curr_lazy(rq);
+       /*
+        * Only set the backward buddy when the current task is still
+        * on the rq. This can happen when a wakeup gets interleaved
+@@ -8631,7 +8631,7 @@ static void task_fork_fair(struct task_s
+                * 'current' within the tree based on its new key value.
+                */
+               swap(curr->vruntime, se->vruntime);
+-              resched_curr(rq);
++              resched_curr_lazy(rq);
+       }
+       se->vruntime -= cfs_rq->min_vruntime;
+@@ -8655,7 +8655,7 @@ prio_changed_fair(struct rq *rq, struct
+        */
+       if (rq->curr == p) {
+               if (p->prio > oldprio)
+-                      resched_curr(rq);
++                      resched_curr_lazy(rq);
+       } else
+               check_preempt_curr(rq, p, 0);
+ }
+--- a/kernel/sched/features.h
++++ b/kernel/sched/features.h
+@@ -47,6 +47,9 @@ SCHED_FEAT(NONTASK_CAPACITY, true)
+ #ifdef CONFIG_PREEMPT_RT_FULL
+ SCHED_FEAT(TTWU_QUEUE, false)
++# ifdef CONFIG_PREEMPT_LAZY
++SCHED_FEAT(PREEMPT_LAZY, true)
++# endif
+ #else
+ /*
+--- a/kernel/sched/sched.h
++++ b/kernel/sched/sched.h
+@@ -1347,6 +1347,15 @@ extern void init_sched_fair_class(void);
+ extern void resched_curr(struct rq *rq);
+ extern void resched_cpu(int cpu);
++#ifdef CONFIG_PREEMPT_LAZY
++extern void resched_curr_lazy(struct rq *rq);
++#else
++static inline void resched_curr_lazy(struct rq *rq)
++{
++      resched_curr(rq);
++}
++#endif
++
+ extern struct rt_bandwidth def_rt_bandwidth;
+ extern void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime);
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -1897,6 +1897,7 @@ tracing_generic_entry_update(struct trac
+       struct task_struct *tsk = current;
+       entry->preempt_count            = pc & 0xff;
++      entry->preempt_lazy_count       = preempt_lazy_count();
+       entry->pid                      = (tsk) ? tsk->pid : 0;
+       entry->flags =
+ #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
+@@ -1907,7 +1908,8 @@ tracing_generic_entry_update(struct trac
+               ((pc & NMI_MASK    ) ? TRACE_FLAG_NMI     : 0) |
+               ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
+               ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) |
+-              (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
++              (tif_need_resched_now() ? TRACE_FLAG_NEED_RESCHED : 0) |
++              (need_resched_lazy() ? TRACE_FLAG_NEED_RESCHED_LAZY : 0) |
+               (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
+       entry->migrate_disable = (tsk) ? __migrate_disabled(tsk) & 0xFF : 0;
+@@ -2894,15 +2896,17 @@ get_total_entries(struct trace_buffer *b
+ static void print_lat_help_header(struct seq_file *m)
+ {
+-      seq_puts(m, "#                  _------=> CPU#            \n"
+-                  "#                 / _-----=> irqs-off        \n"
+-                  "#                | / _----=> need-resched    \n"
+-                  "#                || / _---=> hardirq/softirq \n"
+-                  "#                ||| / _--=> preempt-depth   \n"
+-                  "#                |||| / _--=> migrate-disable\n"
+-                  "#                ||||| /     delay           \n"
+-                  "#  cmd     pid   |||||| time  |   caller     \n"
+-                  "#     \\   /      |||||  \\   |   /          \n");
++      seq_puts(m, "#                   _--------=> CPU#              \n"
++                  "#                  / _-------=> irqs-off          \n"
++                  "#                 | / _------=> need-resched      \n"
++                  "#                 || / _-----=> need-resched_lazy \n"
++                  "#                 ||| / _----=> hardirq/softirq   \n"
++                  "#                 |||| / _---=> preempt-depth     \n"
++                  "#                 ||||| / _--=> preempt-lazy-depth\n"
++                  "#                 |||||| / _-=> migrate-disable   \n"
++                  "#                 ||||||| /     delay             \n"
++                  "#  cmd     pid    |||||||| time  |   caller       \n"
++                  "#     \\   /      ||||||||  \\   |   /            \n");
+ }
+ static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
+@@ -2928,11 +2932,14 @@ static void print_func_help_header_irq(s
+       print_event_info(buf, m);
+       seq_puts(m, "#                              _-----=> irqs-off\n"
+                   "#                             / _----=> need-resched\n"
+-                  "#                            | / _---=> hardirq/softirq\n"
+-                  "#                            || / _--=> preempt-depth\n"
+-                  "#                            ||| /     delay\n"
+-                  "#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION\n"
+-                  "#              | |       |   ||||       |         |\n");
++                  "#                            |/  _-----=> need-resched_lazy\n"
++                  "#                            || / _---=> hardirq/softirq\n"
++                  "#                            ||| / _--=> preempt-depth\n"
++                  "#                            |||| /_--=> preempt-lazy-depth\n"
++                  "#                            |||||  _-=> migrate-disable   \n"
++                  "#                            ||||| /    delay\n"
++                  "#           TASK-PID   CPU#  ||||||    TIMESTAMP  FUNCTION\n"
++                  "#              | |       |   ||||||       |         |\n");
+ }
+ void
+--- a/kernel/trace/trace.h
++++ b/kernel/trace/trace.h
+@@ -124,6 +124,7 @@ struct kretprobe_trace_entry_head {
+  *  NEED_RESCHED      - reschedule is requested
+  *  HARDIRQ           - inside an interrupt handler
+  *  SOFTIRQ           - inside a softirq handler
++ *  NEED_RESCHED_LAZY - lazy reschedule is requested
+  */
+ enum trace_flag_type {
+       TRACE_FLAG_IRQS_OFF             = 0x01,
+@@ -133,6 +134,7 @@ enum trace_flag_type {
+       TRACE_FLAG_SOFTIRQ              = 0x10,
+       TRACE_FLAG_PREEMPT_RESCHED      = 0x20,
+       TRACE_FLAG_NMI                  = 0x40,
++      TRACE_FLAG_NEED_RESCHED_LAZY    = 0x80,
+ };
+ #define TRACE_BUF_SIZE                1024
+--- a/kernel/trace/trace_output.c
++++ b/kernel/trace/trace_output.c
+@@ -386,6 +386,7 @@ int trace_print_lat_fmt(struct trace_seq
+ {
+       char hardsoft_irq;
+       char need_resched;
++      char need_resched_lazy;
+       char irqs_off;
+       int hardirq;
+       int softirq;
+@@ -416,6 +417,9 @@ int trace_print_lat_fmt(struct trace_seq
+               break;
+       }
++      need_resched_lazy =
++              (entry->flags & TRACE_FLAG_NEED_RESCHED_LAZY) ? 'L' : '.';
++
+       hardsoft_irq =
+               (nmi && hardirq)     ? 'Z' :
+               nmi                  ? 'z' :
+@@ -424,14 +428,20 @@ int trace_print_lat_fmt(struct trace_seq
+               softirq              ? 's' :
+                                      '.' ;
+-      trace_seq_printf(s, "%c%c%c",
+-                       irqs_off, need_resched, hardsoft_irq);
++      trace_seq_printf(s, "%c%c%c%c",
++                       irqs_off, need_resched, need_resched_lazy,
++                       hardsoft_irq);
+       if (entry->preempt_count)
+               trace_seq_printf(s, "%x", entry->preempt_count);
+       else
+               trace_seq_putc(s, '.');
++      if (entry->preempt_lazy_count)
++              trace_seq_printf(s, "%x", entry->preempt_lazy_count);
++      else
++              trace_seq_putc(s, '.');
++
+       if (entry->migrate_disable)
+               trace_seq_printf(s, "%x", entry->migrate_disable);
+       else
diff --git a/patches/features/all/rt/preempt-nort-rt-variants.patch b/patches/features/all/rt/preempt-nort-rt-variants.patch
new file mode 100644 (file)
index 0000000..b726b96
--- /dev/null
@@ -0,0 +1,48 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 24 Jul 2009 12:38:56 +0200
+Subject: preempt: Provide preempt_*_(no)rt variants
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+RT needs a few preempt_disable/enable points which are not necessary
+otherwise. Implement variants to avoid #ifdeffery.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/preempt.h |   18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+--- a/include/linux/preempt.h
++++ b/include/linux/preempt.h
+@@ -154,7 +154,11 @@ do { \
+       preempt_count_dec(); \
+ } while (0)
+-#define preempt_enable_no_resched() sched_preempt_enable_no_resched()
++#ifdef CONFIG_PREEMPT_RT_BASE
++# define preempt_enable_no_resched() sched_preempt_enable_no_resched()
++#else
++# define preempt_enable_no_resched() preempt_enable()
++#endif
+ #define preemptible() (preempt_count() == 0 && !irqs_disabled())
+@@ -248,6 +252,18 @@ do { \
+               set_preempt_need_resched(); \
+ } while (0)
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define preempt_disable_rt()         preempt_disable()
++# define preempt_enable_rt()          preempt_enable()
++# define preempt_disable_nort()               barrier()
++# define preempt_enable_nort()                barrier()
++#else
++# define preempt_disable_rt()         barrier()
++# define preempt_enable_rt()          barrier()
++# define preempt_disable_nort()               preempt_disable()
++# define preempt_enable_nort()                preempt_enable()
++#endif
++
+ #ifdef CONFIG_PREEMPT_NOTIFIERS
+ struct preempt_notifier;
diff --git a/patches/features/all/rt/printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch b/patches/features/all/rt/printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch
new file mode 100644 (file)
index 0000000..3e0d833
--- /dev/null
@@ -0,0 +1,32 @@
+Subject: printk: Add "force_early_printk" boot param to help with debugging
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Fri, 02 Sep 2011 14:41:29 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Gives me an option to screw printk and actually see what the machine
+says.
+
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Link: http://lkml.kernel.org/r/1314967289.1301.11.camel@twins
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Link: http://lkml.kernel.org/n/tip-ykb97nsfmobq44xketrxs977@git.kernel.org
+---
+ kernel/printk/printk.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -381,6 +381,13 @@ asmlinkage void early_printk(const char
+  */
+ static bool __read_mostly printk_killswitch;
++static int __init force_early_printk_setup(char *str)
++{
++      printk_killswitch = true;
++      return 0;
++}
++early_param("force_early_printk", force_early_printk_setup);
++
+ void printk_kill(void)
+ {
+       printk_killswitch = true;
diff --git a/patches/features/all/rt/printk-kill.patch b/patches/features/all/rt/printk-kill.patch
new file mode 100644 (file)
index 0000000..a4e72d0
--- /dev/null
@@ -0,0 +1,164 @@
+Subject: printk: Add a printk kill switch
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 22 Jul 2011 17:58:40 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Add a prinkt-kill-switch. This is used from (NMI) watchdog to ensure that
+it does not dead-lock with the early printk code.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/printk.h |    2 +
+ kernel/printk/printk.c |   79 ++++++++++++++++++++++++++++++++++++-------------
+ kernel/watchdog.c      |   10 ++++++
+ 3 files changed, 71 insertions(+), 20 deletions(-)
+
+--- a/include/linux/printk.h
++++ b/include/linux/printk.h
+@@ -126,9 +126,11 @@ struct va_format {
+ #ifdef CONFIG_EARLY_PRINTK
+ extern asmlinkage __printf(1, 2)
+ void early_printk(const char *fmt, ...);
++extern void printk_kill(void);
+ #else
+ static inline __printf(1, 2) __cold
+ void early_printk(const char *s, ...) { }
++static inline void printk_kill(void) { }
+ #endif
+ #ifdef CONFIG_PRINTK_NMI
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -351,6 +351,58 @@ struct printk_log {
+  */
+ DEFINE_RAW_SPINLOCK(logbuf_lock);
++#ifdef CONFIG_EARLY_PRINTK
++struct console *early_console;
++
++static void early_vprintk(const char *fmt, va_list ap)
++{
++      if (early_console) {
++              char buf[512];
++              int n = vscnprintf(buf, sizeof(buf), fmt, ap);
++
++              early_console->write(early_console, buf, n);
++      }
++}
++
++asmlinkage void early_printk(const char *fmt, ...)
++{
++      va_list ap;
++
++      va_start(ap, fmt);
++      early_vprintk(fmt, ap);
++      va_end(ap);
++}
++
++/*
++ * This is independent of any log levels - a global
++ * kill switch that turns off all of printk.
++ *
++ * Used by the NMI watchdog if early-printk is enabled.
++ */
++static bool __read_mostly printk_killswitch;
++
++void printk_kill(void)
++{
++      printk_killswitch = true;
++}
++
++#ifdef CONFIG_PRINTK
++static int forced_early_printk(const char *fmt, va_list ap)
++{
++      if (!printk_killswitch)
++              return 0;
++      early_vprintk(fmt, ap);
++      return 1;
++}
++#endif
++
++#else
++static inline int forced_early_printk(const char *fmt, va_list ap)
++{
++      return 0;
++}
++#endif
++
+ #ifdef CONFIG_PRINTK
+ DECLARE_WAIT_QUEUE_HEAD(log_wait);
+ /* the next printk record to read by syslog(READ) or /proc/kmsg */
+@@ -1781,6 +1833,13 @@ asmlinkage int vprintk_emit(int facility
+       /* cpu currently holding logbuf_lock in this function */
+       static unsigned int logbuf_cpu = UINT_MAX;
++      /*
++       * Fall back to early_printk if a debugging subsystem has
++       * killed printk output
++       */
++      if (unlikely(forced_early_printk(fmt, args)))
++              return 1;
++
+       if (level == LOGLEVEL_SCHED) {
+               level = LOGLEVEL_DEFAULT;
+               in_sched = true;
+@@ -2014,26 +2073,6 @@ DEFINE_PER_CPU(printk_func_t, printk_fun
+ #endif /* CONFIG_PRINTK */
+-#ifdef CONFIG_EARLY_PRINTK
+-struct console *early_console;
+-
+-asmlinkage __visible void early_printk(const char *fmt, ...)
+-{
+-      va_list ap;
+-      char buf[512];
+-      int n;
+-
+-      if (!early_console)
+-              return;
+-
+-      va_start(ap, fmt);
+-      n = vscnprintf(buf, sizeof(buf), fmt, ap);
+-      va_end(ap);
+-
+-      early_console->write(early_console, buf, n);
+-}
+-#endif
+-
+ static int __add_preferred_console(char *name, int idx, char *options,
+                                  char *brl_options)
+ {
+--- a/kernel/watchdog.c
++++ b/kernel/watchdog.c
+@@ -315,6 +315,8 @@ static int is_softlockup(unsigned long t
+ #ifdef CONFIG_HARDLOCKUP_DETECTOR
++static DEFINE_RAW_SPINLOCK(watchdog_output_lock);
++
+ static struct perf_event_attr wd_hw_attr = {
+       .type           = PERF_TYPE_HARDWARE,
+       .config         = PERF_COUNT_HW_CPU_CYCLES,
+@@ -348,6 +350,13 @@ static void watchdog_overflow_callback(s
+               /* only print hardlockups once */
+               if (__this_cpu_read(hard_watchdog_warn) == true)
+                       return;
++              /*
++               * If early-printk is enabled then make sure we do not
++               * lock up in printk() and kill console logging:
++               */
++              printk_kill();
++
++              raw_spin_lock(&watchdog_output_lock);
+               pr_emerg("Watchdog detected hard LOCKUP on cpu %d", this_cpu);
+               print_modules();
+@@ -365,6 +374,7 @@ static void watchdog_overflow_callback(s
+                               !test_and_set_bit(0, &hardlockup_allcpu_dumped))
+                       trigger_allbutself_cpu_backtrace();
++              raw_spin_unlock(&watchdog_output_lock);
+               if (hardlockup_panic)
+                       nmi_panic(regs, "Hard LOCKUP");
diff --git a/patches/features/all/rt/printk-rt-aware.patch b/patches/features/all/rt/printk-rt-aware.patch
new file mode 100644 (file)
index 0000000..3f8b36b
--- /dev/null
@@ -0,0 +1,92 @@
+Subject: printk: Make rt aware
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 19 Sep 2012 14:50:37 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Drop the lock before calling the console driver and do not disable
+interrupts while printing to a serial console.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/printk/printk.c |   25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -1628,6 +1628,7 @@ static void call_console_drivers(int lev
+       if (!console_drivers)
+               return;
++      migrate_disable();
+       for_each_console(con) {
+               if (exclusive_console && con != exclusive_console)
+                       continue;
+@@ -1643,6 +1644,7 @@ static void call_console_drivers(int lev
+               else
+                       con->write(con, text, len);
+       }
++      migrate_enable();
+ }
+ /*
+@@ -1951,13 +1953,23 @@ asmlinkage int vprintk_emit(int facility
+       /* If called from the scheduler, we can not call up(). */
+       if (!in_sched) {
++              int may_trylock = 1;
++
+               lockdep_off();
++#ifdef CONFIG_PREEMPT_RT_FULL
++              /*
++               * we can't take a sleeping lock with IRQs or preeption disabled
++               * so we can't print in these contexts
++               */
++              if (!(preempt_count() == 0 && !irqs_disabled()))
++                      may_trylock = 0;
++#endif
+               /*
+                * Try to acquire and then immediately release the console
+                * semaphore.  The release will print out buffers and wake up
+                * /dev/kmsg and syslog() users.
+                */
+-              if (console_trylock())
++              if (may_trylock && console_trylock())
+                       console_unlock();
+               lockdep_on();
+       }
+@@ -2349,11 +2361,16 @@ static void console_cont_flush(char *tex
+               goto out;
+       len = cont_print_text(text, size);
++#ifdef CONFIG_PREEMPT_RT_FULL
++      raw_spin_unlock_irqrestore(&logbuf_lock, flags);
++      call_console_drivers(cont.level, NULL, 0, text, len);
++#else
+       raw_spin_unlock(&logbuf_lock);
+       stop_critical_timings();
+       call_console_drivers(cont.level, NULL, 0, text, len);
+       start_critical_timings();
+       local_irq_restore(flags);
++#endif
+       return;
+ out:
+       raw_spin_unlock_irqrestore(&logbuf_lock, flags);
+@@ -2477,13 +2494,17 @@ void console_unlock(void)
+               console_idx = log_next(console_idx);
+               console_seq++;
+               console_prev = msg->flags;
++#ifdef CONFIG_PREEMPT_RT_FULL
++              raw_spin_unlock_irqrestore(&logbuf_lock, flags);
++              call_console_drivers(level, ext_text, ext_len, text, len);
++#else
+               raw_spin_unlock(&logbuf_lock);
+               stop_critical_timings();        /* don't trace print latency */
+               call_console_drivers(level, ext_text, ext_len, text, len);
+               start_critical_timings();
+               local_irq_restore(flags);
+-
++#endif
+               if (do_cond_resched)
+                       cond_resched();
+       }
diff --git a/patches/features/all/rt/ptrace-fix-ptrace-vs-tasklist_lock-race.patch b/patches/features/all/rt/ptrace-fix-ptrace-vs-tasklist_lock-race.patch
new file mode 100644 (file)
index 0000000..5020ef4
--- /dev/null
@@ -0,0 +1,154 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 29 Aug 2013 18:21:04 +0200
+Subject: ptrace: fix ptrace vs tasklist_lock race
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+As explained by Alexander Fyodorov <halcy@yandex.ru>:
+
+|read_lock(&tasklist_lock) in ptrace_stop() is converted to mutex on RT kernel,
+|and it can remove __TASK_TRACED from task->state (by moving  it to
+|task->saved_state). If parent does wait() on child followed by a sys_ptrace
+|call, the following race can happen:
+|
+|- child sets __TASK_TRACED in ptrace_stop()
+|- parent does wait() which eventually calls wait_task_stopped() and returns
+|  child's pid
+|- child blocks on read_lock(&tasklist_lock) in ptrace_stop() and moves
+|  __TASK_TRACED flag to saved_state
+|- parent calls sys_ptrace, which calls ptrace_check_attach() and wait_task_inactive()
+
+The patch is based on his initial patch where an additional check is
+added in case the __TASK_TRACED moved to ->saved_state. The pi_lock is
+taken in case the caller is interrupted between looking into ->state and
+->saved_state.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/sched.h |   48 +++++++++++++++++++++++++++++++++++++++++++++---
+ kernel/ptrace.c       |    9 ++++++++-
+ kernel/sched/core.c   |   17 +++++++++++++++--
+ 3 files changed, 68 insertions(+), 6 deletions(-)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -243,10 +243,7 @@ extern char ___assert_task_state[1 - 2*!
+                                TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
+                                __TASK_TRACED | EXIT_ZOMBIE | EXIT_DEAD)
+-#define task_is_traced(task)  ((task->state & __TASK_TRACED) != 0)
+ #define task_is_stopped(task) ((task->state & __TASK_STOPPED) != 0)
+-#define task_is_stopped_or_traced(task)       \
+-                      ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0)
+ #define task_contributes_to_load(task)        \
+                               ((task->state & TASK_UNINTERRUPTIBLE) != 0 && \
+                                (task->flags & PF_FROZEN) == 0 && \
+@@ -3360,6 +3357,51 @@ static inline int signal_pending_state(l
+       return (state & TASK_INTERRUPTIBLE) || __fatal_signal_pending(p);
+ }
++static inline bool __task_is_stopped_or_traced(struct task_struct *task)
++{
++      if (task->state & (__TASK_STOPPED | __TASK_TRACED))
++              return true;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      if (task->saved_state & (__TASK_STOPPED | __TASK_TRACED))
++              return true;
++#endif
++      return false;
++}
++
++static inline bool task_is_stopped_or_traced(struct task_struct *task)
++{
++      bool traced_stopped;
++
++#ifdef CONFIG_PREEMPT_RT_FULL
++      unsigned long flags;
++
++      raw_spin_lock_irqsave(&task->pi_lock, flags);
++      traced_stopped = __task_is_stopped_or_traced(task);
++      raw_spin_unlock_irqrestore(&task->pi_lock, flags);
++#else
++      traced_stopped = __task_is_stopped_or_traced(task);
++#endif
++      return traced_stopped;
++}
++
++static inline bool task_is_traced(struct task_struct *task)
++{
++      bool traced = false;
++
++      if (task->state & __TASK_TRACED)
++              return true;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      /* in case the task is sleeping on tasklist_lock */
++      raw_spin_lock_irq(&task->pi_lock);
++      if (task->state & __TASK_TRACED)
++              traced = true;
++      else if (task->saved_state & __TASK_TRACED)
++              traced = true;
++      raw_spin_unlock_irq(&task->pi_lock);
++#endif
++      return traced;
++}
++
+ /*
+  * cond_resched() and cond_resched_lock(): latency reduction via
+  * explicit rescheduling in places that are safe. The return
+--- a/kernel/ptrace.c
++++ b/kernel/ptrace.c
+@@ -166,7 +166,14 @@ static bool ptrace_freeze_traced(struct
+       spin_lock_irq(&task->sighand->siglock);
+       if (task_is_traced(task) && !__fatal_signal_pending(task)) {
+-              task->state = __TASK_TRACED;
++              unsigned long flags;
++
++              raw_spin_lock_irqsave(&task->pi_lock, flags);
++              if (task->state & __TASK_TRACED)
++                      task->state = __TASK_TRACED;
++              else
++                      task->saved_state = __TASK_TRACED;
++              raw_spin_unlock_irqrestore(&task->pi_lock, flags);
+               ret = true;
+       }
+       spin_unlock_irq(&task->sighand->siglock);
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -1384,6 +1384,18 @@ int migrate_swap(struct task_struct *cur
+       return ret;
+ }
++static bool check_task_state(struct task_struct *p, long match_state)
++{
++      bool match = false;
++
++      raw_spin_lock_irq(&p->pi_lock);
++      if (p->state == match_state || p->saved_state == match_state)
++              match = true;
++      raw_spin_unlock_irq(&p->pi_lock);
++
++      return match;
++}
++
+ /*
+  * wait_task_inactive - wait for a thread to unschedule.
+  *
+@@ -1428,7 +1440,7 @@ unsigned long wait_task_inactive(struct
+                * is actually now running somewhere else!
+                */
+               while (task_running(rq, p)) {
+-                      if (match_state && unlikely(p->state != match_state))
++                      if (match_state && !check_task_state(p, match_state))
+                               return 0;
+                       cpu_relax();
+               }
+@@ -1443,7 +1455,8 @@ unsigned long wait_task_inactive(struct
+               running = task_running(rq, p);
+               queued = task_on_rq_queued(p);
+               ncsw = 0;
+-              if (!match_state || p->state == match_state)
++              if (!match_state || p->state == match_state ||
++                  p->saved_state == match_state)
+                       ncsw = p->nvcsw | LONG_MIN; /* sets MSB */
+               task_rq_unlock(rq, p, &rf);
diff --git a/patches/features/all/rt/radix-tree-use-local-locks.patch b/patches/features/all/rt/radix-tree-use-local-locks.patch
new file mode 100644 (file)
index 0000000..6a732fc
--- /dev/null
@@ -0,0 +1,125 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 25 Jan 2017 16:34:27 +0100
+Subject: [PATCH] radix-tree: use local locks
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The preload functionality uses per-CPU variables and preempt-disable to
+ensure that it does not switch CPUs during its usage. This patch adds
+local_locks() instead preempt_disable() for the same purpose and to
+remain preemptible on -RT.
+
+Cc: stable-rt@vger.kernel.org
+Reported-and-debugged-by: Mike Galbraith <efault@gmx.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/radix-tree.h |    7 ++-----
+ lib/radix-tree.c           |   22 +++++++++++++++-------
+ 2 files changed, 17 insertions(+), 12 deletions(-)
+
+--- a/include/linux/radix-tree.h
++++ b/include/linux/radix-tree.h
+@@ -292,6 +292,8 @@ unsigned int radix_tree_gang_lookup_slot
+ int radix_tree_preload(gfp_t gfp_mask);
+ int radix_tree_maybe_preload(gfp_t gfp_mask);
+ int radix_tree_maybe_preload_order(gfp_t gfp_mask, int order);
++void radix_tree_preload_end(void);
++
+ void radix_tree_init(void);
+ void *radix_tree_tag_set(struct radix_tree_root *root,
+                       unsigned long index, unsigned int tag);
+@@ -314,11 +316,6 @@ unsigned long radix_tree_range_tag_if_ta
+ int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag);
+ unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item);
+-static inline void radix_tree_preload_end(void)
+-{
+-      preempt_enable();
+-}
+-
+ /**
+  * struct radix_tree_iter - radix tree iterator state
+  *
+--- a/lib/radix-tree.c
++++ b/lib/radix-tree.c
+@@ -36,7 +36,7 @@
+ #include <linux/bitops.h>
+ #include <linux/rcupdate.h>
+ #include <linux/preempt.h>            /* in_interrupt() */
+-
++#include <linux/locallock.h>
+ /* Number of nodes in fully populated tree of given height */
+ static unsigned long height_to_maxnodes[RADIX_TREE_MAX_PATH + 1] __read_mostly;
+@@ -68,6 +68,7 @@ struct radix_tree_preload {
+       struct radix_tree_node *nodes;
+ };
+ static DEFINE_PER_CPU(struct radix_tree_preload, radix_tree_preloads) = { 0, };
++static DEFINE_LOCAL_IRQ_LOCK(radix_tree_preloads_lock);
+ static inline void *node_to_entry(void *ptr)
+ {
+@@ -290,13 +291,14 @@ radix_tree_node_alloc(struct radix_tree_
+                * succeed in getting a node here (and never reach
+                * kmem_cache_alloc)
+                */
+-              rtp = this_cpu_ptr(&radix_tree_preloads);
++              rtp = &get_locked_var(radix_tree_preloads_lock, radix_tree_preloads);
+               if (rtp->nr) {
+                       ret = rtp->nodes;
+                       rtp->nodes = ret->private_data;
+                       ret->private_data = NULL;
+                       rtp->nr--;
+               }
++              put_locked_var(radix_tree_preloads_lock, radix_tree_preloads);
+               /*
+                * Update the allocation stack trace as this is more useful
+                * for debugging.
+@@ -357,14 +359,14 @@ static int __radix_tree_preload(gfp_t gf
+        */
+       gfp_mask &= ~__GFP_ACCOUNT;
+-      preempt_disable();
++      local_lock(radix_tree_preloads_lock);
+       rtp = this_cpu_ptr(&radix_tree_preloads);
+       while (rtp->nr < nr) {
+-              preempt_enable();
++              local_unlock(radix_tree_preloads_lock);
+               node = kmem_cache_alloc(radix_tree_node_cachep, gfp_mask);
+               if (node == NULL)
+                       goto out;
+-              preempt_disable();
++              local_lock(radix_tree_preloads_lock);
+               rtp = this_cpu_ptr(&radix_tree_preloads);
+               if (rtp->nr < nr) {
+                       node->private_data = rtp->nodes;
+@@ -406,7 +408,7 @@ int radix_tree_maybe_preload(gfp_t gfp_m
+       if (gfpflags_allow_blocking(gfp_mask))
+               return __radix_tree_preload(gfp_mask, RADIX_TREE_PRELOAD_SIZE);
+       /* Preloading doesn't help anything with this gfp mask, skip it */
+-      preempt_disable();
++      local_lock(radix_tree_preloads_lock);
+       return 0;
+ }
+ EXPORT_SYMBOL(radix_tree_maybe_preload);
+@@ -422,7 +424,7 @@ int radix_tree_maybe_preload_order(gfp_t
+       /* Preloading doesn't help anything with this gfp mask, skip it */
+       if (!gfpflags_allow_blocking(gfp_mask)) {
+-              preempt_disable();
++              local_lock(radix_tree_preloads_lock);
+               return 0;
+       }
+@@ -456,6 +458,12 @@ int radix_tree_maybe_preload_order(gfp_t
+       return __radix_tree_preload(gfp_mask, nr_nodes);
+ }
++void radix_tree_preload_end(void)
++{
++      local_unlock(radix_tree_preloads_lock);
++}
++EXPORT_SYMBOL(radix_tree_preload_end);
++
+ /*
+  * The maximum index which can be stored in a radix tree
+  */
diff --git a/patches/features/all/rt/random-make-it-work-on-rt.patch b/patches/features/all/rt/random-make-it-work-on-rt.patch
new file mode 100644 (file)
index 0000000..6057a90
--- /dev/null
@@ -0,0 +1,133 @@
+Subject: random: Make it work on rt
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 21 Aug 2012 20:38:50 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Delegate the random insertion to the forced threaded interrupt
+handler. Store the return IP of the hard interrupt handler in the irq
+descriptor and feed it into the random generator as a source of
+entropy.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ drivers/char/random.c   |   11 +++++------
+ drivers/hv/vmbus_drv.c  |    4 +++-
+ include/linux/irqdesc.h |    1 +
+ include/linux/random.h  |    2 +-
+ kernel/irq/handle.c     |    8 +++++++-
+ kernel/irq/manage.c     |    6 ++++++
+ 6 files changed, 23 insertions(+), 9 deletions(-)
+
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -1120,28 +1120,27 @@ static __u32 get_reg(struct fast_pool *f
+       return *(ptr + f->reg_idx++);
+ }
+-void add_interrupt_randomness(int irq, int irq_flags)
++void add_interrupt_randomness(int irq, int irq_flags, __u64 ip)
+ {
+       struct entropy_store    *r;
+       struct fast_pool        *fast_pool = this_cpu_ptr(&irq_randomness);
+-      struct pt_regs          *regs = get_irq_regs();
+       unsigned long           now = jiffies;
+       cycles_t                cycles = random_get_entropy();
+       __u32                   c_high, j_high;
+-      __u64                   ip;
+       unsigned long           seed;
+       int                     credit = 0;
+       if (cycles == 0)
+-              cycles = get_reg(fast_pool, regs);
++              cycles = get_reg(fast_pool, NULL);
+       c_high = (sizeof(cycles) > 4) ? cycles >> 32 : 0;
+       j_high = (sizeof(now) > 4) ? now >> 32 : 0;
+       fast_pool->pool[0] ^= cycles ^ j_high ^ irq;
+       fast_pool->pool[1] ^= now ^ c_high;
+-      ip = regs ? instruction_pointer(regs) : _RET_IP_;
++      if (!ip)
++              ip = _RET_IP_;
+       fast_pool->pool[2] ^= ip;
+       fast_pool->pool[3] ^= (sizeof(ip) > 4) ? ip >> 32 :
+-              get_reg(fast_pool, regs);
++              get_reg(fast_pool, NULL);
+       fast_mix(fast_pool);
+       add_interrupt_bench(cycles);
+--- a/drivers/hv/vmbus_drv.c
++++ b/drivers/hv/vmbus_drv.c
+@@ -761,6 +761,8 @@ static void vmbus_isr(void)
+       void *page_addr;
+       struct hv_message *msg;
+       union hv_synic_event_flags *event;
++      struct pt_regs *regs = get_irq_regs();
++      u64 ip = regs ? instruction_pointer(regs) : 0;
+       bool handled = false;
+       page_addr = hv_context.synic_event_page[cpu];
+@@ -808,7 +810,7 @@ static void vmbus_isr(void)
+                       tasklet_schedule(hv_context.msg_dpc[cpu]);
+       }
+-      add_interrupt_randomness(HYPERVISOR_CALLBACK_VECTOR, 0);
++      add_interrupt_randomness(HYPERVISOR_CALLBACK_VECTOR, 0, ip);
+ }
+--- a/include/linux/irqdesc.h
++++ b/include/linux/irqdesc.h
+@@ -66,6 +66,7 @@ struct irq_desc {
+       unsigned int            irqs_unhandled;
+       atomic_t                threads_handled;
+       int                     threads_handled_last;
++      u64                     random_ip;
+       raw_spinlock_t          lock;
+       struct cpumask          *percpu_enabled;
+       const struct cpumask    *percpu_affinity;
+--- a/include/linux/random.h
++++ b/include/linux/random.h
+@@ -31,7 +31,7 @@ static inline void add_latent_entropy(vo
+ extern void add_input_randomness(unsigned int type, unsigned int code,
+                                unsigned int value) __latent_entropy;
+-extern void add_interrupt_randomness(int irq, int irq_flags) __latent_entropy;
++extern void add_interrupt_randomness(int irq, int irq_flags, __u64 ip) __latent_entropy;
+ extern void get_random_bytes(void *buf, int nbytes);
+ extern int add_random_ready_callback(struct random_ready_callback *rdy);
+--- a/kernel/irq/handle.c
++++ b/kernel/irq/handle.c
+@@ -181,10 +181,16 @@ irqreturn_t handle_irq_event_percpu(stru
+ {
+       irqreturn_t retval;
+       unsigned int flags = 0;
++      struct pt_regs *regs = get_irq_regs();
++      u64 ip = regs ? instruction_pointer(regs) : 0;
+       retval = __handle_irq_event_percpu(desc, &flags);
+-      add_interrupt_randomness(desc->irq_data.irq, flags);
++#ifdef CONFIG_PREEMPT_RT_FULL
++      desc->random_ip = ip;
++#else
++      add_interrupt_randomness(desc->irq_data.irq, flags, ip);
++#endif
+       if (!noirqdebug)
+               note_interrupt(desc, retval);
+--- a/kernel/irq/manage.c
++++ b/kernel/irq/manage.c
+@@ -1023,6 +1023,12 @@ static int irq_thread(void *data)
+               if (action_ret == IRQ_WAKE_THREAD)
+                       irq_wake_secondary(desc, action);
++#ifdef CONFIG_PREEMPT_RT_FULL
++              migrate_disable();
++              add_interrupt_randomness(action->irq, 0,
++                               desc->random_ip ^ (unsigned long) action);
++              migrate_enable();
++#endif
+               wake_threads_waitq(desc);
+       }
diff --git a/patches/features/all/rt/rbtree-include-rcu.h-because-we-use-it.patch b/patches/features/all/rt/rbtree-include-rcu.h-because-we-use-it.patch
new file mode 100644 (file)
index 0000000..87b1947
--- /dev/null
@@ -0,0 +1,25 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 14 Sep 2016 11:52:17 +0200
+Subject: rbtree: include rcu.h because we use it
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Since commit c1adf20052d8 ("Introduce rb_replace_node_rcu()")
+rbtree_augmented.h uses RCU related data structures but does not include
+them. It works as long as gets somehow included before that and fails
+otherwise.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/rbtree_augmented.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/include/linux/rbtree_augmented.h
++++ b/include/linux/rbtree_augmented.h
+@@ -26,6 +26,7 @@
+ #include <linux/compiler.h>
+ #include <linux/rbtree.h>
++#include <linux/rcupdate.h>
+ /*
+  * Please note - only struct rb_augment_callbacks and the prototypes for
diff --git a/patches/features/all/rt/rcu-Eliminate-softirq-processing-from-rcutree.patch b/patches/features/all/rt/rcu-Eliminate-softirq-processing-from-rcutree.patch
new file mode 100644 (file)
index 0000000..6b30fa3
--- /dev/null
@@ -0,0 +1,434 @@
+From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
+Date: Mon, 4 Nov 2013 13:21:10 -0800
+Subject: rcu: Eliminate softirq processing from rcutree
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Running RCU out of softirq is a problem for some workloads that would
+like to manage RCU core processing independently of other softirq work,
+for example, setting kthread priority.  This commit therefore moves the
+RCU core work from softirq to a per-CPU/per-flavor SCHED_OTHER kthread
+named rcuc.  The SCHED_OTHER approach avoids the scalability problems
+that appeared with the earlier attempt to move RCU core processing to
+from softirq to kthreads.  That said, kernels built with RCU_BOOST=y
+will run the rcuc kthreads at the RCU-boosting priority.
+
+Reported-by: Thomas Gleixner <tglx@linutronix.de>
+Tested-by: Mike Galbraith <bitbucket@online.de>
+Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/rcu/tree.c        |  110 ++++++++++++++++++++++++++++++---
+ kernel/rcu/tree.h        |    5 -
+ kernel/rcu/tree_plugin.h |  153 ++++++-----------------------------------------
+ 3 files changed, 122 insertions(+), 146 deletions(-)
+
+--- a/kernel/rcu/tree.c
++++ b/kernel/rcu/tree.c
+@@ -55,6 +55,11 @@
+ #include <linux/random.h>
+ #include <linux/trace_events.h>
+ #include <linux/suspend.h>
++#include <linux/delay.h>
++#include <linux/gfp.h>
++#include <linux/oom.h>
++#include <linux/smpboot.h>
++#include "../time/tick-internal.h"
+ #include "tree.h"
+ #include "rcu.h"
+@@ -3044,18 +3049,17 @@ static void
+ /*
+  * Do RCU core processing for the current CPU.
+  */
+-static __latent_entropy void rcu_process_callbacks(struct softirq_action *unused)
++static __latent_entropy void rcu_process_callbacks(void)
+ {
+       struct rcu_state *rsp;
+       if (cpu_is_offline(smp_processor_id()))
+               return;
+-      trace_rcu_utilization(TPS("Start RCU core"));
+       for_each_rcu_flavor(rsp)
+               __rcu_process_callbacks(rsp);
+-      trace_rcu_utilization(TPS("End RCU core"));
+ }
++static DEFINE_PER_CPU(struct task_struct *, rcu_cpu_kthread_task);
+ /*
+  * Schedule RCU callback invocation.  If the specified type of RCU
+  * does not support RCU priority boosting, just do a direct call,
+@@ -3067,18 +3071,105 @@ static void invoke_rcu_callbacks(struct
+ {
+       if (unlikely(!READ_ONCE(rcu_scheduler_fully_active)))
+               return;
+-      if (likely(!rsp->boost)) {
+-              rcu_do_batch(rsp, rdp);
++      rcu_do_batch(rsp, rdp);
++}
++
++static void rcu_wake_cond(struct task_struct *t, int status)
++{
++      /*
++       * If the thread is yielding, only wake it when this
++       * is invoked from idle
++       */
++      if (t && (status != RCU_KTHREAD_YIELDING || is_idle_task(current)))
++              wake_up_process(t);
++}
++
++/*
++ * Wake up this CPU's rcuc kthread to do RCU core processing.
++ */
++static void invoke_rcu_core(void)
++{
++      unsigned long flags;
++      struct task_struct *t;
++
++      if (!cpu_online(smp_processor_id()))
+               return;
++      local_irq_save(flags);
++      __this_cpu_write(rcu_cpu_has_work, 1);
++      t = __this_cpu_read(rcu_cpu_kthread_task);
++      if (t != NULL && current != t)
++              rcu_wake_cond(t, __this_cpu_read(rcu_cpu_kthread_status));
++      local_irq_restore(flags);
++}
++
++static void rcu_cpu_kthread_park(unsigned int cpu)
++{
++      per_cpu(rcu_cpu_kthread_status, cpu) = RCU_KTHREAD_OFFCPU;
++}
++
++static int rcu_cpu_kthread_should_run(unsigned int cpu)
++{
++      return __this_cpu_read(rcu_cpu_has_work);
++}
++
++/*
++ * Per-CPU kernel thread that invokes RCU callbacks.  This replaces the
++ * RCU softirq used in flavors and configurations of RCU that do not
++ * support RCU priority boosting.
++ */
++static void rcu_cpu_kthread(unsigned int cpu)
++{
++      unsigned int *statusp = this_cpu_ptr(&rcu_cpu_kthread_status);
++      char work, *workp = this_cpu_ptr(&rcu_cpu_has_work);
++      int spincnt;
++
++      for (spincnt = 0; spincnt < 10; spincnt++) {
++              trace_rcu_utilization(TPS("Start CPU kthread@rcu_wait"));
++              local_bh_disable();
++              *statusp = RCU_KTHREAD_RUNNING;
++              this_cpu_inc(rcu_cpu_kthread_loops);
++              local_irq_disable();
++              work = *workp;
++              *workp = 0;
++              local_irq_enable();
++              if (work)
++                      rcu_process_callbacks();
++              local_bh_enable();
++              if (*workp == 0) {
++                      trace_rcu_utilization(TPS("End CPU kthread@rcu_wait"));
++                      *statusp = RCU_KTHREAD_WAITING;
++                      return;
++              }
+       }
+-      invoke_rcu_callbacks_kthread();
++      *statusp = RCU_KTHREAD_YIELDING;
++      trace_rcu_utilization(TPS("Start CPU kthread@rcu_yield"));
++      schedule_timeout_interruptible(2);
++      trace_rcu_utilization(TPS("End CPU kthread@rcu_yield"));
++      *statusp = RCU_KTHREAD_WAITING;
+ }
+-static void invoke_rcu_core(void)
++static struct smp_hotplug_thread rcu_cpu_thread_spec = {
++      .store                  = &rcu_cpu_kthread_task,
++      .thread_should_run      = rcu_cpu_kthread_should_run,
++      .thread_fn              = rcu_cpu_kthread,
++      .thread_comm            = "rcuc/%u",
++      .setup                  = rcu_cpu_kthread_setup,
++      .park                   = rcu_cpu_kthread_park,
++};
++
++/*
++ * Spawn per-CPU RCU core processing kthreads.
++ */
++static int __init rcu_spawn_core_kthreads(void)
+ {
+-      if (cpu_online(smp_processor_id()))
+-              raise_softirq(RCU_SOFTIRQ);
++      int cpu;
++
++      for_each_possible_cpu(cpu)
++              per_cpu(rcu_cpu_has_work, cpu) = 0;
++      BUG_ON(smpboot_register_percpu_thread(&rcu_cpu_thread_spec));
++      return 0;
+ }
++early_initcall(rcu_spawn_core_kthreads);
+ /*
+  * Handle any core-RCU processing required by a call_rcu() invocation.
+@@ -4268,7 +4359,6 @@ void __init rcu_init(void)
+       if (dump_tree)
+               rcu_dump_rcu_node_tree(&rcu_sched_state);
+       __rcu_init_preempt();
+-      open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
+       /*
+        * We don't need protection against CPU-hotplug here because
+--- a/kernel/rcu/tree.h
++++ b/kernel/rcu/tree.h
+@@ -596,12 +596,10 @@ extern struct rcu_state rcu_bh_state;
+ extern struct rcu_state rcu_preempt_state;
+ #endif /* #ifdef CONFIG_PREEMPT_RCU */
+-#ifdef CONFIG_RCU_BOOST
+ DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
+ DECLARE_PER_CPU(int, rcu_cpu_kthread_cpu);
+ DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
+ DECLARE_PER_CPU(char, rcu_cpu_has_work);
+-#endif /* #ifdef CONFIG_RCU_BOOST */
+ #ifndef RCU_TREE_NONCORE
+@@ -621,10 +619,9 @@ void call_rcu(struct rcu_head *head, rcu
+ static void __init __rcu_init_preempt(void);
+ static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags);
+ static void rcu_preempt_boost_start_gp(struct rcu_node *rnp);
+-static void invoke_rcu_callbacks_kthread(void);
+ static bool rcu_is_callbacks_kthread(void);
++static void rcu_cpu_kthread_setup(unsigned int cpu);
+ #ifdef CONFIG_RCU_BOOST
+-static void rcu_preempt_do_callbacks(void);
+ static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
+                                                struct rcu_node *rnp);
+ #endif /* #ifdef CONFIG_RCU_BOOST */
+--- a/kernel/rcu/tree_plugin.h
++++ b/kernel/rcu/tree_plugin.h
+@@ -24,26 +24,10 @@
+  *       Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+  */
+-#include <linux/delay.h>
+-#include <linux/gfp.h>
+-#include <linux/oom.h>
+-#include <linux/smpboot.h>
+-#include <linux/jiffies.h>
+-#include "../time/tick-internal.h"
+-
+ #ifdef CONFIG_RCU_BOOST
+ #include "../locking/rtmutex_common.h"
+-/*
+- * Control variables for per-CPU and per-rcu_node kthreads.  These
+- * handle all flavors of RCU.
+- */
+-static DEFINE_PER_CPU(struct task_struct *, rcu_cpu_kthread_task);
+-DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
+-DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
+-DEFINE_PER_CPU(char, rcu_cpu_has_work);
+-
+ #else /* #ifdef CONFIG_RCU_BOOST */
+ /*
+@@ -56,6 +40,14 @@ DEFINE_PER_CPU(char, rcu_cpu_has_work);
+ #endif /* #else #ifdef CONFIG_RCU_BOOST */
++/*
++ * Control variables for per-CPU and per-rcu_node kthreads.  These
++ * handle all flavors of RCU.
++ */
++DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
++DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
++DEFINE_PER_CPU(char, rcu_cpu_has_work);
++
+ #ifdef CONFIG_RCU_NOCB_CPU
+ static cpumask_var_t rcu_nocb_mask; /* CPUs to have callbacks offloaded. */
+ static bool have_rcu_nocb_mask;           /* Was rcu_nocb_mask allocated? */
+@@ -633,15 +625,6 @@ static void rcu_preempt_check_callbacks(
+               t->rcu_read_unlock_special.b.need_qs = true;
+ }
+-#ifdef CONFIG_RCU_BOOST
+-
+-static void rcu_preempt_do_callbacks(void)
+-{
+-      rcu_do_batch(rcu_state_p, this_cpu_ptr(rcu_data_p));
+-}
+-
+-#endif /* #ifdef CONFIG_RCU_BOOST */
+-
+ /*
+  * Queue a preemptible-RCU callback for invocation after a grace period.
+  */
+@@ -830,6 +813,19 @@ void exit_rcu(void)
+ #endif /* #else #ifdef CONFIG_PREEMPT_RCU */
++/*
++ * If boosting, set rcuc kthreads to realtime priority.
++ */
++static void rcu_cpu_kthread_setup(unsigned int cpu)
++{
++#ifdef CONFIG_RCU_BOOST
++      struct sched_param sp;
++
++      sp.sched_priority = kthread_prio;
++      sched_setscheduler_nocheck(current, SCHED_FIFO, &sp);
++#endif /* #ifdef CONFIG_RCU_BOOST */
++}
++
+ #ifdef CONFIG_RCU_BOOST
+ #include "../locking/rtmutex_common.h"
+@@ -861,16 +857,6 @@ static void rcu_initiate_boost_trace(str
+ #endif /* #else #ifdef CONFIG_RCU_TRACE */
+-static void rcu_wake_cond(struct task_struct *t, int status)
+-{
+-      /*
+-       * If the thread is yielding, only wake it when this
+-       * is invoked from idle
+-       */
+-      if (status != RCU_KTHREAD_YIELDING || is_idle_task(current))
+-              wake_up_process(t);
+-}
+-
+ /*
+  * Carry out RCU priority boosting on the task indicated by ->exp_tasks
+  * or ->boost_tasks, advancing the pointer to the next task in the
+@@ -1014,23 +1000,6 @@ static void rcu_initiate_boost(struct rc
+ }
+ /*
+- * Wake up the per-CPU kthread to invoke RCU callbacks.
+- */
+-static void invoke_rcu_callbacks_kthread(void)
+-{
+-      unsigned long flags;
+-
+-      local_irq_save(flags);
+-      __this_cpu_write(rcu_cpu_has_work, 1);
+-      if (__this_cpu_read(rcu_cpu_kthread_task) != NULL &&
+-          current != __this_cpu_read(rcu_cpu_kthread_task)) {
+-              rcu_wake_cond(__this_cpu_read(rcu_cpu_kthread_task),
+-                            __this_cpu_read(rcu_cpu_kthread_status));
+-      }
+-      local_irq_restore(flags);
+-}
+-
+-/*
+  * Is the current CPU running the RCU-callbacks kthread?
+  * Caller must have preemption disabled.
+  */
+@@ -1084,67 +1053,6 @@ static int rcu_spawn_one_boost_kthread(s
+       return 0;
+ }
+-static void rcu_kthread_do_work(void)
+-{
+-      rcu_do_batch(&rcu_sched_state, this_cpu_ptr(&rcu_sched_data));
+-      rcu_do_batch(&rcu_bh_state, this_cpu_ptr(&rcu_bh_data));
+-      rcu_preempt_do_callbacks();
+-}
+-
+-static void rcu_cpu_kthread_setup(unsigned int cpu)
+-{
+-      struct sched_param sp;
+-
+-      sp.sched_priority = kthread_prio;
+-      sched_setscheduler_nocheck(current, SCHED_FIFO, &sp);
+-}
+-
+-static void rcu_cpu_kthread_park(unsigned int cpu)
+-{
+-      per_cpu(rcu_cpu_kthread_status, cpu) = RCU_KTHREAD_OFFCPU;
+-}
+-
+-static int rcu_cpu_kthread_should_run(unsigned int cpu)
+-{
+-      return __this_cpu_read(rcu_cpu_has_work);
+-}
+-
+-/*
+- * Per-CPU kernel thread that invokes RCU callbacks.  This replaces the
+- * RCU softirq used in flavors and configurations of RCU that do not
+- * support RCU priority boosting.
+- */
+-static void rcu_cpu_kthread(unsigned int cpu)
+-{
+-      unsigned int *statusp = this_cpu_ptr(&rcu_cpu_kthread_status);
+-      char work, *workp = this_cpu_ptr(&rcu_cpu_has_work);
+-      int spincnt;
+-
+-      for (spincnt = 0; spincnt < 10; spincnt++) {
+-              trace_rcu_utilization(TPS("Start CPU kthread@rcu_wait"));
+-              local_bh_disable();
+-              *statusp = RCU_KTHREAD_RUNNING;
+-              this_cpu_inc(rcu_cpu_kthread_loops);
+-              local_irq_disable();
+-              work = *workp;
+-              *workp = 0;
+-              local_irq_enable();
+-              if (work)
+-                      rcu_kthread_do_work();
+-              local_bh_enable();
+-              if (*workp == 0) {
+-                      trace_rcu_utilization(TPS("End CPU kthread@rcu_wait"));
+-                      *statusp = RCU_KTHREAD_WAITING;
+-                      return;
+-              }
+-      }
+-      *statusp = RCU_KTHREAD_YIELDING;
+-      trace_rcu_utilization(TPS("Start CPU kthread@rcu_yield"));
+-      schedule_timeout_interruptible(2);
+-      trace_rcu_utilization(TPS("End CPU kthread@rcu_yield"));
+-      *statusp = RCU_KTHREAD_WAITING;
+-}
+-
+ /*
+  * Set the per-rcu_node kthread's affinity to cover all CPUs that are
+  * served by the rcu_node in question.  The CPU hotplug lock is still
+@@ -1175,26 +1083,12 @@ static void rcu_boost_kthread_setaffinit
+       free_cpumask_var(cm);
+ }
+-static struct smp_hotplug_thread rcu_cpu_thread_spec = {
+-      .store                  = &rcu_cpu_kthread_task,
+-      .thread_should_run      = rcu_cpu_kthread_should_run,
+-      .thread_fn              = rcu_cpu_kthread,
+-      .thread_comm            = "rcuc/%u",
+-      .setup                  = rcu_cpu_kthread_setup,
+-      .park                   = rcu_cpu_kthread_park,
+-};
+-
+ /*
+  * Spawn boost kthreads -- called as soon as the scheduler is running.
+  */
+ static void __init rcu_spawn_boost_kthreads(void)
+ {
+       struct rcu_node *rnp;
+-      int cpu;
+-
+-      for_each_possible_cpu(cpu)
+-              per_cpu(rcu_cpu_has_work, cpu) = 0;
+-      BUG_ON(smpboot_register_percpu_thread(&rcu_cpu_thread_spec));
+       rcu_for_each_leaf_node(rcu_state_p, rnp)
+               (void)rcu_spawn_one_boost_kthread(rcu_state_p, rnp);
+ }
+@@ -1217,11 +1111,6 @@ static void rcu_initiate_boost(struct rc
+       raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
+ }
+-static void invoke_rcu_callbacks_kthread(void)
+-{
+-      WARN_ON_ONCE(1);
+-}
+-
+ static bool rcu_is_callbacks_kthread(void)
+ {
+       return false;
diff --git a/patches/features/all/rt/rcu-disable-rcu-fast-no-hz-on-rt.patch b/patches/features/all/rt/rcu-disable-rcu-fast-no-hz-on-rt.patch
new file mode 100644 (file)
index 0000000..28aaa79
--- /dev/null
@@ -0,0 +1,25 @@
+Subject: rcu: Disable RCU_FAST_NO_HZ on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 28 Oct 2012 13:26:09 +0000
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+This uses a timer_list timer from the irq disabled guts of the idle
+code. Disable it for now to prevent wreckage.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ init/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -623,7 +623,7 @@ config RCU_FANOUT_LEAF
+ config RCU_FAST_NO_HZ
+       bool "Accelerate last non-dyntick-idle CPU's grace periods"
+-      depends on NO_HZ_COMMON && SMP && RCU_EXPERT
++      depends on NO_HZ_COMMON && SMP && RCU_EXPERT && !PREEMPT_RT_FULL
+       default n
+       help
+         This option permits CPUs to enter dynticks-idle state even if
diff --git a/patches/features/all/rt/rcu-enable-rcu_normal_after_boot-by-default-for-RT.patch b/patches/features/all/rt/rcu-enable-rcu_normal_after_boot-by-default-for-RT.patch
new file mode 100644 (file)
index 0000000..9ac29b0
--- /dev/null
@@ -0,0 +1,30 @@
+From: Julia Cartwright <julia@ni.com>
+Date: Wed, 12 Oct 2016 11:21:14 -0500
+Subject: [PATCH] rcu: enable rcu_normal_after_boot by default for RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The forcing of an expedited grace period is an expensive and very
+RT-application unfriendly operation, as it forcibly preempts all running
+tasks on CPUs which are preventing the gp from expiring.
+
+By default, as a policy decision, disable the expediting of grace
+periods (after boot) on configurations which enable PREEMPT_RT_FULL.
+
+Suggested-by: Luiz Capitulino <lcapitulino@redhat.com>
+Signed-off-by: Julia Cartwright <julia@ni.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/rcu/update.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/rcu/update.c
++++ b/kernel/rcu/update.c
+@@ -62,7 +62,7 @@
+ #ifndef CONFIG_TINY_RCU
+ module_param(rcu_expedited, int, 0);
+ module_param(rcu_normal, int, 0);
+-static int rcu_normal_after_boot;
++static int rcu_normal_after_boot = IS_ENABLED(CONFIG_PREEMPT_RT_FULL);
+ module_param(rcu_normal_after_boot, int, 0);
+ #endif /* #ifndef CONFIG_TINY_RCU */
diff --git a/patches/features/all/rt/rcu-make-RCU_BOOST-default-on-RT.patch b/patches/features/all/rt/rcu-make-RCU_BOOST-default-on-RT.patch
new file mode 100644 (file)
index 0000000..830eacc
--- /dev/null
@@ -0,0 +1,35 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 21 Mar 2014 20:19:05 +0100
+Subject: rcu: make RCU_BOOST default on RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Since it is no longer invoked from the softirq people run into OOM more
+often if the priority of the RCU thread is too low. Making boosting
+default on RT should help in those case and it can be switched off if
+someone knows better.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ init/Kconfig |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -506,7 +506,7 @@ config TINY_RCU
+ config RCU_EXPERT
+       bool "Make expert-level adjustments to RCU configuration"
+-      default n
++      default y if PREEMPT_RT_FULL
+       help
+         This option needs to be enabled if you wish to make
+         expert-level adjustments to RCU configuration.  By default,
+@@ -650,7 +650,7 @@ config TREE_RCU_TRACE
+ config RCU_BOOST
+       bool "Enable RCU priority boosting"
+       depends on RT_MUTEXES && PREEMPT_RCU && RCU_EXPERT
+-      default n
++      default y if PREEMPT_RT_FULL
+       help
+         This option boosts the priority of preempted RCU readers that
+         block the current preemptible RCU grace period for too long.
diff --git a/patches/features/all/rt/rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch b/patches/features/all/rt/rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch
new file mode 100644 (file)
index 0000000..12ce78a
--- /dev/null
@@ -0,0 +1,366 @@
+Subject: rcu: Merge RCU-bh into RCU-preempt
+Date: Wed, 5 Oct 2011 11:59:38 -0700
+From: Thomas Gleixner <tglx@linutronix.de>
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The Linux kernel has long RCU-bh read-side critical sections that
+intolerably increase scheduling latency under mainline's RCU-bh rules,
+which include RCU-bh read-side critical sections being non-preemptible.
+This patch therefore arranges for RCU-bh to be implemented in terms of
+RCU-preempt for CONFIG_PREEMPT_RT_FULL=y.
+
+This has the downside of defeating the purpose of RCU-bh, namely,
+handling the case where the system is subjected to a network-based
+denial-of-service attack that keeps at least one CPU doing full-time
+softirq processing.  This issue will be fixed by a later commit.
+
+The current commit will need some work to make it appropriate for
+mainline use, for example, it needs to be extended to cover Tiny RCU.
+
+[ paulmck: Added a useful changelog ]
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Link: http://lkml.kernel.org/r/20111005185938.GA20403@linux.vnet.ibm.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/rcupdate.h |   23 +++++++++++++++++++++++
+ include/linux/rcutree.h  |   21 ++++++++++++++++++---
+ kernel/rcu/rcutorture.c  |    7 +++++++
+ kernel/rcu/tree.c        |   24 ++++++++++++++++++++++++
+ kernel/rcu/tree.h        |    2 ++
+ kernel/rcu/update.c      |    2 ++
+ 6 files changed, 76 insertions(+), 3 deletions(-)
+
+--- a/include/linux/rcupdate.h
++++ b/include/linux/rcupdate.h
+@@ -179,6 +179,9 @@ void call_rcu(struct rcu_head *head,
+ #endif /* #else #ifdef CONFIG_PREEMPT_RCU */
++#ifdef CONFIG_PREEMPT_RT_FULL
++#define call_rcu_bh   call_rcu
++#else
+ /**
+  * call_rcu_bh() - Queue an RCU for invocation after a quicker grace period.
+  * @head: structure to be used for queueing the RCU updates.
+@@ -202,6 +205,7 @@ void call_rcu(struct rcu_head *head,
+  */
+ void call_rcu_bh(struct rcu_head *head,
+                rcu_callback_t func);
++#endif
+ /**
+  * call_rcu_sched() - Queue an RCU for invocation after sched grace period.
+@@ -339,7 +343,11 @@ static inline int rcu_preempt_depth(void
+ /* Internal to kernel */
+ void rcu_init(void);
+ void rcu_sched_qs(void);
++#ifdef CONFIG_PREEMPT_RT_FULL
++static inline void rcu_bh_qs(void) { }
++#else
+ void rcu_bh_qs(void);
++#endif
+ void rcu_check_callbacks(int user);
+ void rcu_report_dead(unsigned int cpu);
+ void rcu_cpu_starting(unsigned int cpu);
+@@ -513,7 +521,14 @@ extern struct lockdep_map rcu_callback_m
+ int debug_lockdep_rcu_enabled(void);
+ int rcu_read_lock_held(void);
++#ifdef CONFIG_PREEMPT_RT_FULL
++static inline int rcu_read_lock_bh_held(void)
++{
++      return rcu_read_lock_held();
++}
++#else
+ int rcu_read_lock_bh_held(void);
++#endif
+ /**
+  * rcu_read_lock_sched_held() - might we be in RCU-sched read-side critical section?
+@@ -911,10 +926,14 @@ static inline void rcu_read_unlock(void)
+ static inline void rcu_read_lock_bh(void)
+ {
+       local_bh_disable();
++#ifdef CONFIG_PREEMPT_RT_FULL
++      rcu_read_lock();
++#else
+       __acquire(RCU_BH);
+       rcu_lock_acquire(&rcu_bh_lock_map);
+       RCU_LOCKDEP_WARN(!rcu_is_watching(),
+                        "rcu_read_lock_bh() used illegally while idle");
++#endif
+ }
+ /*
+@@ -924,10 +943,14 @@ static inline void rcu_read_lock_bh(void
+  */
+ static inline void rcu_read_unlock_bh(void)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      rcu_read_unlock();
++#else
+       RCU_LOCKDEP_WARN(!rcu_is_watching(),
+                        "rcu_read_unlock_bh() used illegally while idle");
+       rcu_lock_release(&rcu_bh_lock_map);
+       __release(RCU_BH);
++#endif
+       local_bh_enable();
+ }
+--- a/include/linux/rcutree.h
++++ b/include/linux/rcutree.h
+@@ -44,7 +44,11 @@ static inline void rcu_virt_note_context
+       rcu_note_context_switch();
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define synchronize_rcu_bh   synchronize_rcu
++#else
+ void synchronize_rcu_bh(void);
++#endif
+ void synchronize_sched_expedited(void);
+ void synchronize_rcu_expedited(void);
+@@ -72,7 +76,11 @@ static inline void synchronize_rcu_bh_ex
+ }
+ void rcu_barrier(void);
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define rcu_barrier_bh                rcu_barrier
++#else
+ void rcu_barrier_bh(void);
++#endif
+ void rcu_barrier_sched(void);
+ unsigned long get_state_synchronize_rcu(void);
+ void cond_synchronize_rcu(unsigned long oldstate);
+@@ -82,17 +90,14 @@ void cond_synchronize_sched(unsigned lon
+ extern unsigned long rcutorture_testseq;
+ extern unsigned long rcutorture_vernum;
+ unsigned long rcu_batches_started(void);
+-unsigned long rcu_batches_started_bh(void);
+ unsigned long rcu_batches_started_sched(void);
+ unsigned long rcu_batches_completed(void);
+-unsigned long rcu_batches_completed_bh(void);
+ unsigned long rcu_batches_completed_sched(void);
+ unsigned long rcu_exp_batches_completed(void);
+ unsigned long rcu_exp_batches_completed_sched(void);
+ void show_rcu_gp_kthreads(void);
+ void rcu_force_quiescent_state(void);
+-void rcu_bh_force_quiescent_state(void);
+ void rcu_sched_force_quiescent_state(void);
+ void rcu_idle_enter(void);
+@@ -109,6 +114,16 @@ extern int rcu_scheduler_active __read_m
+ bool rcu_is_watching(void);
++#ifndef CONFIG_PREEMPT_RT_FULL
++void rcu_bh_force_quiescent_state(void);
++unsigned long rcu_batches_started_bh(void);
++unsigned long rcu_batches_completed_bh(void);
++#else
++# define rcu_bh_force_quiescent_state rcu_force_quiescent_state
++# define rcu_batches_completed_bh     rcu_batches_completed
++# define rcu_batches_started_bh               rcu_batches_completed
++#endif
++
+ void rcu_all_qs(void);
+ /* RCUtree hotplug events */
+--- a/kernel/rcu/rcutorture.c
++++ b/kernel/rcu/rcutorture.c
+@@ -404,6 +404,7 @@ static struct rcu_torture_ops rcu_ops =
+       .name           = "rcu"
+ };
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+  * Definitions for rcu_bh torture testing.
+  */
+@@ -443,6 +444,12 @@ static struct rcu_torture_ops rcu_bh_ops
+       .name           = "rcu_bh"
+ };
++#else
++static struct rcu_torture_ops rcu_bh_ops = {
++      .ttype          = INVALID_RCU_FLAVOR,
++};
++#endif
++
+ /*
+  * Don't even think about trying any of these in real life!!!
+  * The names includes "busted", and they really means it!
+--- a/kernel/rcu/tree.c
++++ b/kernel/rcu/tree.c
+@@ -260,6 +260,7 @@ void rcu_sched_qs(void)
+                          this_cpu_ptr(&rcu_sched_data), true);
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
+ void rcu_bh_qs(void)
+ {
+       if (__this_cpu_read(rcu_bh_data.cpu_no_qs.s)) {
+@@ -269,6 +270,7 @@ void rcu_bh_qs(void)
+               __this_cpu_write(rcu_bh_data.cpu_no_qs.b.norm, false);
+       }
+ }
++#endif
+ static DEFINE_PER_CPU(int, rcu_sched_qs_mask);
+@@ -449,11 +451,13 @@ EXPORT_SYMBOL_GPL(rcu_batches_started_sc
+ /*
+  * Return the number of RCU BH batches started thus far for debug & stats.
+  */
++#ifndef CONFIG_PREEMPT_RT_FULL
+ unsigned long rcu_batches_started_bh(void)
+ {
+       return rcu_bh_state.gpnum;
+ }
+ EXPORT_SYMBOL_GPL(rcu_batches_started_bh);
++#endif
+ /*
+  * Return the number of RCU batches completed thus far for debug & stats.
+@@ -473,6 +477,7 @@ unsigned long rcu_batches_completed_sche
+ }
+ EXPORT_SYMBOL_GPL(rcu_batches_completed_sched);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+  * Return the number of RCU BH batches completed thus far for debug & stats.
+  */
+@@ -481,6 +486,7 @@ unsigned long rcu_batches_completed_bh(v
+       return rcu_bh_state.completed;
+ }
+ EXPORT_SYMBOL_GPL(rcu_batches_completed_bh);
++#endif
+ /*
+  * Return the number of RCU expedited batches completed thus far for
+@@ -504,6 +510,7 @@ unsigned long rcu_exp_batches_completed_
+ }
+ EXPORT_SYMBOL_GPL(rcu_exp_batches_completed_sched);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+  * Force a quiescent state.
+  */
+@@ -522,6 +529,13 @@ void rcu_bh_force_quiescent_state(void)
+ }
+ EXPORT_SYMBOL_GPL(rcu_bh_force_quiescent_state);
++#else
++void rcu_force_quiescent_state(void)
++{
++}
++EXPORT_SYMBOL_GPL(rcu_force_quiescent_state);
++#endif
++
+ /*
+  * Force a quiescent state for RCU-sched.
+  */
+@@ -572,9 +586,11 @@ void rcutorture_get_gp_data(enum rcutort
+       case RCU_FLAVOR:
+               rsp = rcu_state_p;
+               break;
++#ifndef CONFIG_PREEMPT_RT_FULL
+       case RCU_BH_FLAVOR:
+               rsp = &rcu_bh_state;
+               break;
++#endif
+       case RCU_SCHED_FLAVOR:
+               rsp = &rcu_sched_state;
+               break;
+@@ -3195,6 +3211,7 @@ void call_rcu_sched(struct rcu_head *hea
+ }
+ EXPORT_SYMBOL_GPL(call_rcu_sched);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+  * Queue an RCU callback for invocation after a quicker grace period.
+  */
+@@ -3203,6 +3220,7 @@ void call_rcu_bh(struct rcu_head *head,
+       __call_rcu(head, func, &rcu_bh_state, -1, 0);
+ }
+ EXPORT_SYMBOL_GPL(call_rcu_bh);
++#endif
+ /*
+  * Queue an RCU callback for lazy invocation after a grace period.
+@@ -3294,6 +3312,7 @@ void synchronize_sched(void)
+ }
+ EXPORT_SYMBOL_GPL(synchronize_sched);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /**
+  * synchronize_rcu_bh - wait until an rcu_bh grace period has elapsed.
+  *
+@@ -3320,6 +3339,7 @@ void synchronize_rcu_bh(void)
+               wait_rcu_gp(call_rcu_bh);
+ }
+ EXPORT_SYMBOL_GPL(synchronize_rcu_bh);
++#endif
+ /**
+  * get_state_synchronize_rcu - Snapshot current RCU state
+@@ -3698,6 +3718,7 @@ static void _rcu_barrier(struct rcu_stat
+       mutex_unlock(&rsp->barrier_mutex);
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /**
+  * rcu_barrier_bh - Wait until all in-flight call_rcu_bh() callbacks complete.
+  */
+@@ -3706,6 +3727,7 @@ void rcu_barrier_bh(void)
+       _rcu_barrier(&rcu_bh_state);
+ }
+ EXPORT_SYMBOL_GPL(rcu_barrier_bh);
++#endif
+ /**
+  * rcu_barrier_sched - Wait for in-flight call_rcu_sched() callbacks.
+@@ -4227,7 +4249,9 @@ void __init rcu_init(void)
+       rcu_bootup_announce();
+       rcu_init_geometry();
++#ifndef CONFIG_PREEMPT_RT_FULL
+       rcu_init_one(&rcu_bh_state);
++#endif
+       rcu_init_one(&rcu_sched_state);
+       if (dump_tree)
+               rcu_dump_rcu_node_tree(&rcu_sched_state);
+--- a/kernel/rcu/tree.h
++++ b/kernel/rcu/tree.h
+@@ -588,7 +588,9 @@ extern struct list_head rcu_struct_flavo
+  */
+ extern struct rcu_state rcu_sched_state;
++#ifndef CONFIG_PREEMPT_RT_FULL
+ extern struct rcu_state rcu_bh_state;
++#endif
+ #ifdef CONFIG_PREEMPT_RCU
+ extern struct rcu_state rcu_preempt_state;
+--- a/kernel/rcu/update.c
++++ b/kernel/rcu/update.c
+@@ -296,6 +296,7 @@ int rcu_read_lock_held(void)
+ }
+ EXPORT_SYMBOL_GPL(rcu_read_lock_held);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /**
+  * rcu_read_lock_bh_held() - might we be in RCU-bh read-side critical section?
+  *
+@@ -322,6 +323,7 @@ int rcu_read_lock_bh_held(void)
+       return in_softirq() || irqs_disabled();
+ }
+ EXPORT_SYMBOL_GPL(rcu_read_lock_bh_held);
++#endif
+ #endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
diff --git a/patches/features/all/rt/rcu-update-make-RCU_EXPEDITE_BOOT-default.patch b/patches/features/all/rt/rcu-update-make-RCU_EXPEDITE_BOOT-default.patch
new file mode 100644 (file)
index 0000000..b903bf0
--- /dev/null
@@ -0,0 +1,61 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 2 Nov 2016 16:45:58 +0100
+Subject: [PATCH] rcu: update: make RCU_EXPEDITE_BOOT default
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+RCU_EXPEDITE_BOOT should speed up the boot process by enforcing
+synchronize_rcu_expedited() instead of synchronize_rcu() during the boot
+process. There should be no reason why one does not want this and there
+is no need worry about real time latency at this point.
+Therefore make it default.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ init/Kconfig        |   13 -------------
+ kernel/rcu/update.c |    6 ++----
+ 2 files changed, 2 insertions(+), 17 deletions(-)
+
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -781,19 +781,6 @@ config RCU_NOCB_CPU_ALL
+ endchoice
+-config RCU_EXPEDITE_BOOT
+-      bool
+-      default n
+-      help
+-        This option enables expedited grace periods at boot time,
+-        as if rcu_expedite_gp() had been invoked early in boot.
+-        The corresponding rcu_unexpedite_gp() is invoked from
+-        rcu_end_inkernel_boot(), which is intended to be invoked
+-        at the end of the kernel-only boot sequence, just before
+-        init is exec'ed.
+-
+-        Accept the default if unsure.
+-
+ endmenu # "RCU Subsystem"
+ config BUILD_BIN2C
+--- a/kernel/rcu/update.c
++++ b/kernel/rcu/update.c
+@@ -132,8 +132,7 @@ bool rcu_gp_is_normal(void)
+ }
+ EXPORT_SYMBOL_GPL(rcu_gp_is_normal);
+-static atomic_t rcu_expedited_nesting =
+-      ATOMIC_INIT(IS_ENABLED(CONFIG_RCU_EXPEDITE_BOOT) ? 1 : 0);
++static atomic_t rcu_expedited_nesting =       ATOMIC_INIT(1);
+ /*
+  * Should normal grace-period primitives be expedited?  Intended for
+@@ -182,8 +181,7 @@ EXPORT_SYMBOL_GPL(rcu_unexpedite_gp);
+  */
+ void rcu_end_inkernel_boot(void)
+ {
+-      if (IS_ENABLED(CONFIG_RCU_EXPEDITE_BOOT))
+-              rcu_unexpedite_gp();
++      rcu_unexpedite_gp();
+       if (rcu_normal_after_boot)
+               WRITE_ONCE(rcu_normal, 1);
+ }
diff --git a/patches/features/all/rt/rcutree-rcu_bh_qs-disable-irq-while-calling-rcu_pree.patch b/patches/features/all/rt/rcutree-rcu_bh_qs-disable-irq-while-calling-rcu_pree.patch
new file mode 100644 (file)
index 0000000..36c01d3
--- /dev/null
@@ -0,0 +1,49 @@
+From: Tiejun Chen <tiejun.chen@windriver.com>
+Date: Wed, 18 Dec 2013 17:51:49 +0800
+Subject: rcutree/rcu_bh_qs: Disable irq while calling rcu_preempt_qs()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Any callers to the function rcu_preempt_qs() must disable irqs in
+order to protect the assignment to ->rcu_read_unlock_special. In
+RT case, rcu_bh_qs() as the wrapper of rcu_preempt_qs() is called
+in some scenarios where irq is enabled, like this path,
+
+do_single_softirq()
+    |
+    + local_irq_enable();
+    + handle_softirq()
+    |    |
+    |    + rcu_bh_qs()
+    |        |
+    |        + rcu_preempt_qs()
+    |
+    + local_irq_disable()
+
+So here we'd better disable irq directly inside of rcu_bh_qs() to
+fix this, otherwise the kernel may be freezable sometimes as
+observed. And especially this way is also kind and safe for the
+potential rcu_bh_qs() usage elsewhere in the future.
+
+
+Signed-off-by: Tiejun Chen <tiejun.chen@windriver.com>
+Signed-off-by: Bin Jiang <bin.jiang@windriver.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/rcu/tree.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/kernel/rcu/tree.c
++++ b/kernel/rcu/tree.c
+@@ -265,7 +265,12 @@ static void rcu_preempt_qs(void);
+ void rcu_bh_qs(void)
+ {
++      unsigned long flags;
++
++      /* Callers to this function, rcu_preempt_qs(), must disable irqs. */
++      local_irq_save(flags);
+       rcu_preempt_qs();
++      local_irq_restore(flags);
+ }
+ #else
+ void rcu_bh_qs(void)
diff --git a/patches/features/all/rt/re-migrate_disable-race-with-cpu-hotplug-3f.patch b/patches/features/all/rt/re-migrate_disable-race-with-cpu-hotplug-3f.patch
new file mode 100644 (file)
index 0000000..658ee89
--- /dev/null
@@ -0,0 +1,35 @@
+From: Yong Zhang <yong.zhang0@gmail.com>
+Date: Thu, 28 Jul 2011 11:16:00 +0800
+Subject: hotplug: Reread hotplug_pcp on pin_current_cpu() retry
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When retry happens, it's likely that the task has been migrated to
+another cpu (except unplug failed), but it still derefernces the
+original hotplug_pcp per cpu data.
+
+Update the pointer to hotplug_pcp in the retry path, so it points to
+the current cpu.
+
+Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
+Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Link: http://lkml.kernel.org/r/20110728031600.GA338@windriver.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/cpu.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -257,9 +257,11 @@ static DEFINE_PER_CPU(struct hotplug_pcp
+  */
+ void pin_current_cpu(void)
+ {
+-      struct hotplug_pcp *hp = this_cpu_ptr(&hotplug_pcp);
++      struct hotplug_pcp *hp;
+ retry:
++      hp = this_cpu_ptr(&hotplug_pcp);
++
+       if (!hp->unplug || hp->refcount || preempt_count() > 1 ||
+           hp->unplug == current) {
+               hp->refcount++;
diff --git a/patches/features/all/rt/re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch b/patches/features/all/rt/re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch
new file mode 100644 (file)
index 0000000..2d99dcd
--- /dev/null
@@ -0,0 +1,69 @@
+Subject: ARM: Initialize split page table locks for vector page
+From: Frank Rowand <frank.rowand@am.sony.com>
+Date: Sat, 1 Oct 2011 18:58:13 -0700
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Without this patch, ARM can not use SPLIT_PTLOCK_CPUS if
+PREEMPT_RT_FULL=y because vectors_user_mapping() creates a
+VM_ALWAYSDUMP mapping of the vector page (address 0xffff0000), but no
+ptl->lock has been allocated for the page.  An attempt to coredump
+that page will result in a kernel NULL pointer dereference when
+follow_page() attempts to lock the page.
+
+The call tree to the NULL pointer dereference is:
+
+   do_notify_resume()
+      get_signal_to_deliver()
+         do_coredump()
+            elf_core_dump()
+               get_dump_page()
+                  __get_user_pages()
+                     follow_page()
+                        pte_offset_map_lock() <----- a #define
+                           ...
+                              rt_spin_lock()
+
+The underlying problem is exposed by mm-shrink-the-page-frame-to-rt-size.patch.
+
+Signed-off-by: Frank Rowand <frank.rowand@am.sony.com>
+Cc: Frank <Frank_Rowand@sonyusa.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Link: http://lkml.kernel.org/r/4E87C535.2030907@am.sony.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/arm/kernel/process.c |   24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+--- a/arch/arm/kernel/process.c
++++ b/arch/arm/kernel/process.c
+@@ -322,6 +322,30 @@ unsigned long arch_randomize_brk(struct
+ }
+ #ifdef CONFIG_MMU
++/*
++ * CONFIG_SPLIT_PTLOCK_CPUS results in a page->ptl lock.  If the lock is not
++ * initialized by pgtable_page_ctor() then a coredump of the vector page will
++ * fail.
++ */
++static int __init vectors_user_mapping_init_page(void)
++{
++      struct page *page;
++      unsigned long addr = 0xffff0000;
++      pgd_t *pgd;
++      pud_t *pud;
++      pmd_t *pmd;
++
++      pgd = pgd_offset_k(addr);
++      pud = pud_offset(pgd, addr);
++      pmd = pmd_offset(pud, addr);
++      page = pmd_page(*(pmd));
++
++      pgtable_page_ctor(page);
++
++      return 0;
++}
++late_initcall(vectors_user_mapping_init_page);
++
+ #ifdef CONFIG_KUSER_HELPERS
+ /*
+  * The vectors page is always readable from user space for the
diff --git a/patches/features/all/rt/rfc-arm-smp-__cpu_disable-fix-sleeping-function-called-from-invalid-context.patch b/patches/features/all/rt/rfc-arm-smp-__cpu_disable-fix-sleeping-function-called-from-invalid-context.patch
new file mode 100644 (file)
index 0000000..7edb69b
--- /dev/null
@@ -0,0 +1,96 @@
+Subject: ARM: smp: Move clear_tasks_mm_cpumask() call to __cpu_die()
+From: Grygorii Strashko <grygorii.strashko@ti.com>
+Date: Fri, 11 Sep 2015 21:21:23 +0300
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When running with the RT-kernel (4.1.5-rt5) on TI OMAP dra7-evm and trying
+to do Suspend to RAM, the following backtrace occurs:
+
+ Disabling non-boot CPUs ...
+ PM: noirq suspend of devices complete after 7.295 msecs
+ Disabling non-boot CPUs ...
+ BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917
+ in_atomic(): 1, irqs_disabled(): 128, pid: 18, name: migration/1
+ INFO: lockdep is turned off.
+ irq event stamp: 122
+ hardirqs last  enabled at (121): [<c06ac0ac>] _raw_spin_unlock_irqrestore+0x88/0x90
+ hardirqs last disabled at (122): [<c06abed0>] _raw_spin_lock_irq+0x28/0x5c
+ softirqs last  enabled at (0): [<c003d294>] copy_process.part.52+0x410/0x19d8
+ softirqs last disabled at (0): [<  (null)>]   (null)
+ Preemption disabled at:[<  (null)>]   (null)
+  CPU: 1 PID: 18 Comm: migration/1 Tainted: G        W       4.1.4-rt3-01046-g96ac8da #204
+ Hardware name: Generic DRA74X (Flattened Device Tree)
+ [<c0019134>] (unwind_backtrace) from [<c0014774>] (show_stack+0x20/0x24)
+ [<c0014774>] (show_stack) from [<c06a70f4>] (dump_stack+0x88/0xdc)
+ [<c06a70f4>] (dump_stack) from [<c006cab8>] (___might_sleep+0x198/0x2a8)
+ [<c006cab8>] (___might_sleep) from [<c06ac4dc>] (rt_spin_lock+0x30/0x70)
+ [<c06ac4dc>] (rt_spin_lock) from [<c013f790>] (find_lock_task_mm+0x9c/0x174)
+ [<c013f790>] (find_lock_task_mm) from [<c00409ac>] (clear_tasks_mm_cpumask+0xb4/0x1ac)
+ [<c00409ac>] (clear_tasks_mm_cpumask) from [<c00166a4>] (__cpu_disable+0x98/0xbc)
+ [<c00166a4>] (__cpu_disable) from [<c06a2e8c>] (take_cpu_down+0x1c/0x50)
+ [<c06a2e8c>] (take_cpu_down) from [<c00f2600>] (multi_cpu_stop+0x11c/0x158)
+ [<c00f2600>] (multi_cpu_stop) from [<c00f2a9c>] (cpu_stopper_thread+0xc4/0x184)
+ [<c00f2a9c>] (cpu_stopper_thread) from [<c0069058>] (smpboot_thread_fn+0x18c/0x324)
+ [<c0069058>] (smpboot_thread_fn) from [<c00649c4>] (kthread+0xe8/0x104)
+ [<c00649c4>] (kthread) from [<c0010058>] (ret_from_fork+0x14/0x3c)
+ CPU1: shutdown
+ PM: Calling sched_clock_suspend+0x0/0x40
+ PM: Calling timekeeping_suspend+0x0/0x2e0
+ PM: Calling irq_gc_suspend+0x0/0x68
+ PM: Calling fw_suspend+0x0/0x2c
+ PM: Calling cpu_pm_suspend+0x0/0x28
+
+Also, sometimes system stucks right after displaying "Disabling non-boot
+CPUs ...". The root cause of above backtrace is task_lock() which takes
+a sleeping lock on -RT.
+
+To fix the issue, move clear_tasks_mm_cpumask() call from __cpu_disable()
+to __cpu_die() which is called on the thread which is asking for a target
+CPU to be shutdown. In addition, this change restores CPUhotplug functionality
+on TI OMAP dra7-evm and CPU1 can be unplugged/plugged many times.
+
+Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Cc: <linux-arm-kernel@lists.infradead.org>
+Cc: Sekhar Nori <nsekhar@ti.com>
+Cc: Austin Schuh <austin@peloton-tech.com>
+Cc: <philipp@peloton-tech.com>
+Cc: Russell King <linux@arm.linux.org.uk>
+Cc: <bigeasy@linutronix.de>
+Cc: stable-rt@vger.kernel.org
+Link: http://lkml.kernel.org/r/1441995683-30817-1-git-send-email-grygorii.strashko@ti.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+
+RFC: I'm not sure how safe this change is and will be appreciated for any comments.
+Most of arches call clear_tasks_mm_cpumask() from __cpu_disable(), but *powerpc*
+calls it from CPU_DEAD notifier. This patch follows powerpc's approach in
+general.
+
+This issue was first reported in:
+ http://www.spinics.net/lists/linux-rt-users/msg13752.html
+
+ arch/arm/kernel/smp.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/arch/arm/kernel/smp.c
++++ b/arch/arm/kernel/smp.c
+@@ -234,8 +234,6 @@ int __cpu_disable(void)
+       flush_cache_louis();
+       local_flush_tlb_all();
+-      clear_tasks_mm_cpumask(cpu);
+-
+       return 0;
+ }
+@@ -251,6 +249,9 @@ void __cpu_die(unsigned int cpu)
+               pr_err("CPU%u: cpu didn't die\n", cpu);
+               return;
+       }
++
++      clear_tasks_mm_cpumask(cpu);
++
+       pr_notice("CPU%u: shutdown\n", cpu);
+       /*
diff --git a/patches/features/all/rt/rt-add-rt-locks.patch b/patches/features/all/rt/rt-add-rt-locks.patch
new file mode 100644 (file)
index 0000000..2b22795
--- /dev/null
@@ -0,0 +1,2261 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 26 Jul 2009 19:39:56 +0200
+Subject: rt: Add the preempt-rt lock replacement APIs
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Map spinlocks, rwlocks, rw_semaphores and semaphores to the rt_mutex
+based locking functions for preempt-rt.
+This also introduces RT's sleeping locks.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/kernel.h            |    4 
+ include/linux/locallock.h         |    6 
+ include/linux/mutex.h             |   20 -
+ include/linux/mutex_rt.h          |   84 ++++++
+ include/linux/rtmutex.h           |   29 +-
+ include/linux/rwlock_rt.h         |   99 +++++++
+ include/linux/rwlock_types_rt.h   |   33 ++
+ include/linux/rwsem.h             |    6 
+ include/linux/rwsem_rt.h          |  167 ++++++++++++
+ include/linux/sched.h             |   19 +
+ include/linux/spinlock.h          |   12 
+ include/linux/spinlock_api_smp.h  |    4 
+ include/linux/spinlock_rt.h       |  162 ++++++++++++
+ include/linux/spinlock_types.h    |   11 
+ include/linux/spinlock_types_rt.h |   48 +++
+ kernel/futex.c                    |    9 
+ kernel/locking/Makefile           |    9 
+ kernel/locking/rt.c               |  498 ++++++++++++++++++++++++++++++++++++++
+ kernel/locking/rtmutex.c          |  463 +++++++++++++++++++++++++++++++++--
+ kernel/locking/rtmutex_common.h   |    6 
+ kernel/locking/spinlock.c         |    7 
+ kernel/locking/spinlock_debug.c   |    5 
+ kernel/sched/core.c               |    7 
+ 23 files changed, 1653 insertions(+), 55 deletions(-)
+
+--- a/include/linux/kernel.h
++++ b/include/linux/kernel.h
+@@ -194,6 +194,9 @@ extern int _cond_resched(void);
+  */
+ # define might_sleep() \
+       do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0)
++
++# define might_sleep_no_state_check() \
++      do { ___might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0)
+ # define sched_annotate_sleep()       (current->task_state_change = 0)
+ #else
+   static inline void ___might_sleep(const char *file, int line,
+@@ -201,6 +204,7 @@ extern int _cond_resched(void);
+   static inline void __might_sleep(const char *file, int line,
+                                  int preempt_offset) { }
+ # define might_sleep() do { might_resched(); } while (0)
++# define might_sleep_no_state_check() do { might_resched(); } while (0)
+ # define sched_annotate_sleep() do { } while (0)
+ #endif
+--- a/include/linux/locallock.h
++++ b/include/linux/locallock.h
+@@ -42,9 +42,15 @@ struct local_irq_lock {
+  * already takes care of the migrate_disable/enable
+  * for CONFIG_PREEMPT_BASE map to the normal spin_* calls.
+  */
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define spin_lock_local(lock)                        rt_spin_lock__no_mg(lock)
++# define spin_trylock_local(lock)             rt_spin_trylock__no_mg(lock)
++# define spin_unlock_local(lock)              rt_spin_unlock__no_mg(lock)
++#else
+ # define spin_lock_local(lock)                        spin_lock(lock)
+ # define spin_trylock_local(lock)             spin_trylock(lock)
+ # define spin_unlock_local(lock)              spin_unlock(lock)
++#endif
+ static inline void __local_lock(struct local_irq_lock *lv)
+ {
+--- a/include/linux/mutex.h
++++ b/include/linux/mutex.h
+@@ -19,6 +19,17 @@
+ #include <asm/processor.h>
+ #include <linux/osq_lock.h>
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++# define __DEP_MAP_MUTEX_INITIALIZER(lockname) \
++      , .dep_map = { .name = #lockname }
++#else
++# define __DEP_MAP_MUTEX_INITIALIZER(lockname)
++#endif
++
++#ifdef CONFIG_PREEMPT_RT_FULL
++# include <linux/mutex_rt.h>
++#else
++
+ /*
+  * Simple, straightforward mutexes with strict semantics:
+  *
+@@ -99,13 +110,6 @@ do {                                                       \
+ static inline void mutex_destroy(struct mutex *lock) {}
+ #endif
+-#ifdef CONFIG_DEBUG_LOCK_ALLOC
+-# define __DEP_MAP_MUTEX_INITIALIZER(lockname) \
+-              , .dep_map = { .name = #lockname }
+-#else
+-# define __DEP_MAP_MUTEX_INITIALIZER(lockname)
+-#endif
+-
+ #define __MUTEX_INITIALIZER(lockname) \
+               { .count = ATOMIC_INIT(1) \
+               , .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock) \
+@@ -173,6 +177,8 @@ extern int __must_check mutex_lock_killa
+ extern int mutex_trylock(struct mutex *lock);
+ extern void mutex_unlock(struct mutex *lock);
++#endif /* !PREEMPT_RT_FULL */
++
+ extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock);
+ #endif /* __LINUX_MUTEX_H */
+--- /dev/null
++++ b/include/linux/mutex_rt.h
+@@ -0,0 +1,84 @@
++#ifndef __LINUX_MUTEX_RT_H
++#define __LINUX_MUTEX_RT_H
++
++#ifndef __LINUX_MUTEX_H
++#error "Please include mutex.h"
++#endif
++
++#include <linux/rtmutex.h>
++
++/* FIXME: Just for __lockfunc */
++#include <linux/spinlock.h>
++
++struct mutex {
++      struct rt_mutex         lock;
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      struct lockdep_map      dep_map;
++#endif
++};
++
++#define __MUTEX_INITIALIZER(mutexname)                                        \
++      {                                                               \
++              .lock = __RT_MUTEX_INITIALIZER(mutexname.lock)          \
++              __DEP_MAP_MUTEX_INITIALIZER(mutexname)                  \
++      }
++
++#define DEFINE_MUTEX(mutexname)                                               \
++      struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
++
++extern void __mutex_do_init(struct mutex *lock, const char *name, struct lock_class_key *key);
++extern void __lockfunc _mutex_lock(struct mutex *lock);
++extern int __lockfunc _mutex_lock_interruptible(struct mutex *lock);
++extern int __lockfunc _mutex_lock_killable(struct mutex *lock);
++extern void __lockfunc _mutex_lock_nested(struct mutex *lock, int subclass);
++extern void __lockfunc _mutex_lock_nest_lock(struct mutex *lock, struct lockdep_map *nest_lock);
++extern int __lockfunc _mutex_lock_interruptible_nested(struct mutex *lock, int subclass);
++extern int __lockfunc _mutex_lock_killable_nested(struct mutex *lock, int subclass);
++extern int __lockfunc _mutex_trylock(struct mutex *lock);
++extern void __lockfunc _mutex_unlock(struct mutex *lock);
++
++#define mutex_is_locked(l)            rt_mutex_is_locked(&(l)->lock)
++#define mutex_lock(l)                 _mutex_lock(l)
++#define mutex_lock_interruptible(l)   _mutex_lock_interruptible(l)
++#define mutex_lock_killable(l)                _mutex_lock_killable(l)
++#define mutex_trylock(l)              _mutex_trylock(l)
++#define mutex_unlock(l)                       _mutex_unlock(l)
++#define mutex_destroy(l)              rt_mutex_destroy(&(l)->lock)
++
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++# define mutex_lock_nested(l, s)      _mutex_lock_nested(l, s)
++# define mutex_lock_interruptible_nested(l, s) \
++                                      _mutex_lock_interruptible_nested(l, s)
++# define mutex_lock_killable_nested(l, s) \
++                                      _mutex_lock_killable_nested(l, s)
++
++# define mutex_lock_nest_lock(lock, nest_lock)                                \
++do {                                                                  \
++      typecheck(struct lockdep_map *, &(nest_lock)->dep_map);         \
++      _mutex_lock_nest_lock(lock, &(nest_lock)->dep_map);             \
++} while (0)
++
++#else
++# define mutex_lock_nested(l, s)      _mutex_lock(l)
++# define mutex_lock_interruptible_nested(l, s) \
++                                      _mutex_lock_interruptible(l)
++# define mutex_lock_killable_nested(l, s) \
++                                      _mutex_lock_killable(l)
++# define mutex_lock_nest_lock(lock, nest_lock) mutex_lock(lock)
++#endif
++
++# define mutex_init(mutex)                            \
++do {                                                  \
++      static struct lock_class_key __key;             \
++                                                      \
++      rt_mutex_init(&(mutex)->lock);                  \
++      __mutex_do_init((mutex), #mutex, &__key);       \
++} while (0)
++
++# define __mutex_init(mutex, name, key)                       \
++do {                                                  \
++      rt_mutex_init(&(mutex)->lock);                  \
++      __mutex_do_init((mutex), name, key);            \
++} while (0)
++
++#endif
+--- a/include/linux/rtmutex.h
++++ b/include/linux/rtmutex.h
+@@ -13,11 +13,15 @@
+ #define __LINUX_RT_MUTEX_H
+ #include <linux/linkage.h>
+-#include <linux/rbtree.h>
+ #include <linux/spinlock_types_raw.h>
++#include <linux/rbtree.h>
+ extern int max_lock_depth; /* for sysctl */
++#ifdef CONFIG_DEBUG_MUTEXES
++#include <linux/debug_locks.h>
++#endif
++
+ /**
+  * The rt_mutex structure
+  *
+@@ -31,8 +35,8 @@ struct rt_mutex {
+       struct rb_root          waiters;
+       struct rb_node          *waiters_leftmost;
+       struct task_struct      *owner;
+-#ifdef CONFIG_DEBUG_RT_MUTEXES
+       int                     save_state;
++#ifdef CONFIG_DEBUG_RT_MUTEXES
+       const char              *name, *file;
+       int                     line;
+       void                    *magic;
+@@ -55,22 +59,33 @@ struct hrtimer_sleeper;
+ # define rt_mutex_debug_check_no_locks_held(task)     do { } while (0)
+ #endif
++# define rt_mutex_init(mutex)                                 \
++      do {                                                    \
++              raw_spin_lock_init(&(mutex)->wait_lock);        \
++              __rt_mutex_init(mutex, #mutex);                 \
++      } while (0)
++
+ #ifdef CONFIG_DEBUG_RT_MUTEXES
+ # define __DEBUG_RT_MUTEX_INITIALIZER(mutexname) \
+       , .name = #mutexname, .file = __FILE__, .line = __LINE__
+-# define rt_mutex_init(mutex)                 __rt_mutex_init(mutex, __func__)
+  extern void rt_mutex_debug_task_free(struct task_struct *tsk);
+ #else
+ # define __DEBUG_RT_MUTEX_INITIALIZER(mutexname)
+-# define rt_mutex_init(mutex)                 __rt_mutex_init(mutex, NULL)
+ # define rt_mutex_debug_task_free(t)                  do { } while (0)
+ #endif
+-#define __RT_MUTEX_INITIALIZER(mutexname) \
+-      { .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \
++#define __RT_MUTEX_INITIALIZER_PLAIN(mutexname) \
++       .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \
+       , .waiters = RB_ROOT \
+       , .owner = NULL \
+-      __DEBUG_RT_MUTEX_INITIALIZER(mutexname)}
++      __DEBUG_RT_MUTEX_INITIALIZER(mutexname)
++
++#define __RT_MUTEX_INITIALIZER(mutexname) \
++      { __RT_MUTEX_INITIALIZER_PLAIN(mutexname) }
++
++#define __RT_MUTEX_INITIALIZER_SAVE_STATE(mutexname) \
++      { __RT_MUTEX_INITIALIZER_PLAIN(mutexname)    \
++      , .save_state = 1 }
+ #define DEFINE_RT_MUTEX(mutexname) \
+       struct rt_mutex mutexname = __RT_MUTEX_INITIALIZER(mutexname)
+--- /dev/null
++++ b/include/linux/rwlock_rt.h
+@@ -0,0 +1,99 @@
++#ifndef __LINUX_RWLOCK_RT_H
++#define __LINUX_RWLOCK_RT_H
++
++#ifndef __LINUX_SPINLOCK_H
++#error Do not include directly. Use spinlock.h
++#endif
++
++#define rwlock_init(rwl)                              \
++do {                                                  \
++      static struct lock_class_key __key;             \
++                                                      \
++      rt_mutex_init(&(rwl)->lock);                    \
++      __rt_rwlock_init(rwl, #rwl, &__key);            \
++} while (0)
++
++extern void __lockfunc rt_write_lock(rwlock_t *rwlock);
++extern void __lockfunc rt_read_lock(rwlock_t *rwlock);
++extern int __lockfunc rt_write_trylock(rwlock_t *rwlock);
++extern int __lockfunc rt_write_trylock_irqsave(rwlock_t *trylock, unsigned long *flags);
++extern int __lockfunc rt_read_trylock(rwlock_t *rwlock);
++extern void __lockfunc rt_write_unlock(rwlock_t *rwlock);
++extern void __lockfunc rt_read_unlock(rwlock_t *rwlock);
++extern unsigned long __lockfunc rt_write_lock_irqsave(rwlock_t *rwlock);
++extern unsigned long __lockfunc rt_read_lock_irqsave(rwlock_t *rwlock);
++extern void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key);
++
++#define read_trylock(lock)    __cond_lock(lock, rt_read_trylock(lock))
++#define write_trylock(lock)   __cond_lock(lock, rt_write_trylock(lock))
++
++#define write_trylock_irqsave(lock, flags)    \
++      __cond_lock(lock, rt_write_trylock_irqsave(lock, &flags))
++
++#define read_lock_irqsave(lock, flags)                        \
++      do {                                            \
++              typecheck(unsigned long, flags);        \
++              flags = rt_read_lock_irqsave(lock);     \
++      } while (0)
++
++#define write_lock_irqsave(lock, flags)                       \
++      do {                                            \
++              typecheck(unsigned long, flags);        \
++              flags = rt_write_lock_irqsave(lock);    \
++      } while (0)
++
++#define read_lock(lock)               rt_read_lock(lock)
++
++#define read_lock_bh(lock)                            \
++      do {                                            \
++              local_bh_disable();                     \
++              rt_read_lock(lock);                     \
++      } while (0)
++
++#define read_lock_irq(lock)   read_lock(lock)
++
++#define write_lock(lock)      rt_write_lock(lock)
++
++#define write_lock_bh(lock)                           \
++      do {                                            \
++              local_bh_disable();                     \
++              rt_write_lock(lock);                    \
++      } while (0)
++
++#define write_lock_irq(lock)  write_lock(lock)
++
++#define read_unlock(lock)     rt_read_unlock(lock)
++
++#define read_unlock_bh(lock)                          \
++      do {                                            \
++              rt_read_unlock(lock);                   \
++              local_bh_enable();                      \
++      } while (0)
++
++#define read_unlock_irq(lock) read_unlock(lock)
++
++#define write_unlock(lock)    rt_write_unlock(lock)
++
++#define write_unlock_bh(lock)                         \
++      do {                                            \
++              rt_write_unlock(lock);                  \
++              local_bh_enable();                      \
++      } while (0)
++
++#define write_unlock_irq(lock)        write_unlock(lock)
++
++#define read_unlock_irqrestore(lock, flags)           \
++      do {                                            \
++              typecheck(unsigned long, flags);        \
++              (void) flags;                           \
++              rt_read_unlock(lock);                   \
++      } while (0)
++
++#define write_unlock_irqrestore(lock, flags) \
++      do {                                            \
++              typecheck(unsigned long, flags);        \
++              (void) flags;                           \
++              rt_write_unlock(lock);                  \
++      } while (0)
++
++#endif
+--- /dev/null
++++ b/include/linux/rwlock_types_rt.h
+@@ -0,0 +1,33 @@
++#ifndef __LINUX_RWLOCK_TYPES_RT_H
++#define __LINUX_RWLOCK_TYPES_RT_H
++
++#ifndef __LINUX_SPINLOCK_TYPES_H
++#error "Do not include directly. Include spinlock_types.h instead"
++#endif
++
++/*
++ * rwlocks - rtmutex which allows single reader recursion
++ */
++typedef struct {
++      struct rt_mutex         lock;
++      int                     read_depth;
++      unsigned int            break_lock;
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      struct lockdep_map      dep_map;
++#endif
++} rwlock_t;
++
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++# define RW_DEP_MAP_INIT(lockname)    .dep_map = { .name = #lockname }
++#else
++# define RW_DEP_MAP_INIT(lockname)
++#endif
++
++#define __RW_LOCK_UNLOCKED(name) \
++      { .lock = __RT_MUTEX_INITIALIZER_SAVE_STATE(name.lock), \
++        RW_DEP_MAP_INIT(name) }
++
++#define DEFINE_RWLOCK(name) \
++      rwlock_t name = __RW_LOCK_UNLOCKED(name)
++
++#endif
+--- a/include/linux/rwsem.h
++++ b/include/linux/rwsem.h
+@@ -19,6 +19,10 @@
+ #include <linux/osq_lock.h>
+ #endif
++#ifdef CONFIG_PREEMPT_RT_FULL
++#include <linux/rwsem_rt.h>
++#else /* PREEMPT_RT_FULL */
++
+ struct rw_semaphore;
+ #ifdef CONFIG_RWSEM_GENERIC_SPINLOCK
+@@ -184,4 +188,6 @@ extern void up_read_non_owner(struct rw_
+ # define up_read_non_owner(sem)                       up_read(sem)
+ #endif
++#endif /* !PREEMPT_RT_FULL */
++
+ #endif /* _LINUX_RWSEM_H */
+--- /dev/null
++++ b/include/linux/rwsem_rt.h
+@@ -0,0 +1,167 @@
++#ifndef _LINUX_RWSEM_RT_H
++#define _LINUX_RWSEM_RT_H
++
++#ifndef _LINUX_RWSEM_H
++#error "Include rwsem.h"
++#endif
++
++/*
++ * RW-semaphores are a spinlock plus a reader-depth count.
++ *
++ * Note that the semantics are different from the usual
++ * Linux rw-sems, in PREEMPT_RT mode we do not allow
++ * multiple readers to hold the lock at once, we only allow
++ * a read-lock owner to read-lock recursively. This is
++ * better for latency, makes the implementation inherently
++ * fair and makes it simpler as well.
++ */
++
++#include <linux/rtmutex.h>
++
++struct rw_semaphore {
++      struct rt_mutex         lock;
++      int                     read_depth;
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      struct lockdep_map      dep_map;
++#endif
++};
++
++#define __RWSEM_INITIALIZER(name) \
++      { .lock = __RT_MUTEX_INITIALIZER(name.lock), \
++        RW_DEP_MAP_INIT(name) }
++
++#define DECLARE_RWSEM(lockname) \
++      struct rw_semaphore lockname = __RWSEM_INITIALIZER(lockname)
++
++extern void  __rt_rwsem_init(struct rw_semaphore *rwsem, const char *name,
++                                   struct lock_class_key *key);
++
++#define __rt_init_rwsem(sem, name, key)                       \
++      do {                                            \
++              rt_mutex_init(&(sem)->lock);            \
++              __rt_rwsem_init((sem), (name), (key));\
++      } while (0)
++
++#define __init_rwsem(sem, name, key) __rt_init_rwsem(sem, name, key)
++
++# define rt_init_rwsem(sem)                           \
++do {                                                  \
++      static struct lock_class_key __key;             \
++                                                      \
++      __rt_init_rwsem((sem), #sem, &__key);           \
++} while (0)
++
++extern void rt_down_write(struct rw_semaphore *rwsem);
++extern int  rt_down_write_killable(struct rw_semaphore *rwsem);
++extern void rt_down_read_nested(struct rw_semaphore *rwsem, int subclass);
++extern void rt_down_write_nested(struct rw_semaphore *rwsem, int subclass);
++extern int  rt_down_write_killable_nested(struct rw_semaphore *rwsem,
++                                        int subclass);
++extern void rt_down_write_nested_lock(struct rw_semaphore *rwsem,
++                                    struct lockdep_map *nest);
++extern void rt__down_read(struct rw_semaphore *rwsem);
++extern void rt_down_read(struct rw_semaphore *rwsem);
++extern int  rt_down_write_trylock(struct rw_semaphore *rwsem);
++extern int  rt__down_read_trylock(struct rw_semaphore *rwsem);
++extern int  rt_down_read_trylock(struct rw_semaphore *rwsem);
++extern void __rt_up_read(struct rw_semaphore *rwsem);
++extern void rt_up_read(struct rw_semaphore *rwsem);
++extern void rt_up_write(struct rw_semaphore *rwsem);
++extern void rt_downgrade_write(struct rw_semaphore *rwsem);
++
++#define init_rwsem(sem)               rt_init_rwsem(sem)
++#define rwsem_is_locked(s)    rt_mutex_is_locked(&(s)->lock)
++
++static inline int rwsem_is_contended(struct rw_semaphore *sem)
++{
++      /* rt_mutex_has_waiters() */
++      return !RB_EMPTY_ROOT(&sem->lock.waiters);
++}
++
++static inline void __down_read(struct rw_semaphore *sem)
++{
++      rt__down_read(sem);
++}
++
++static inline void down_read(struct rw_semaphore *sem)
++{
++      rt_down_read(sem);
++}
++
++static inline int __down_read_trylock(struct rw_semaphore *sem)
++{
++      return rt__down_read_trylock(sem);
++}
++
++static inline int down_read_trylock(struct rw_semaphore *sem)
++{
++      return rt_down_read_trylock(sem);
++}
++
++static inline void down_write(struct rw_semaphore *sem)
++{
++      rt_down_write(sem);
++}
++
++static inline int down_write_killable(struct rw_semaphore *sem)
++{
++      return rt_down_write_killable(sem);
++}
++
++static inline int down_write_trylock(struct rw_semaphore *sem)
++{
++      return rt_down_write_trylock(sem);
++}
++
++static inline void __up_read(struct rw_semaphore *sem)
++{
++      __rt_up_read(sem);
++}
++
++static inline void up_read(struct rw_semaphore *sem)
++{
++      rt_up_read(sem);
++}
++
++static inline void up_write(struct rw_semaphore *sem)
++{
++      rt_up_write(sem);
++}
++
++static inline void downgrade_write(struct rw_semaphore *sem)
++{
++      rt_downgrade_write(sem);
++}
++
++static inline void down_read_nested(struct rw_semaphore *sem, int subclass)
++{
++      return rt_down_read_nested(sem, subclass);
++}
++
++static inline void down_write_nested(struct rw_semaphore *sem, int subclass)
++{
++      rt_down_write_nested(sem, subclass);
++}
++
++static inline int down_write_killable_nested(struct rw_semaphore *sem,
++                                           int subclass)
++{
++      return rt_down_write_killable_nested(sem, subclass);
++}
++
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++static inline void down_write_nest_lock(struct rw_semaphore *sem,
++              struct rw_semaphore *nest_lock)
++{
++      rt_down_write_nested_lock(sem, &nest_lock->dep_map);
++}
++
++#else
++
++static inline void down_write_nest_lock(struct rw_semaphore *sem,
++              struct rw_semaphore *nest_lock)
++{
++      rt_down_write_nested_lock(sem, NULL);
++}
++#endif
++#endif
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -312,6 +312,11 @@ extern char ___assert_task_state[1 - 2*!
+ #endif
++#define __set_current_state_no_track(state_value)     \
++      do { current->state = (state_value); } while (0)
++#define set_current_state_no_track(state_value)               \
++      set_mb(current->state, (state_value))
++
+ /* Task command name length */
+ #define TASK_COMM_LEN 16
+@@ -1013,8 +1018,18 @@ struct wake_q_head {
+       struct wake_q_head name = { WAKE_Q_TAIL, &name.first }
+ extern void wake_q_add(struct wake_q_head *head,
+-                     struct task_struct *task);
+-extern void wake_up_q(struct wake_q_head *head);
++                            struct task_struct *task);
++extern void __wake_up_q(struct wake_q_head *head, bool sleeper);
++
++static inline void wake_up_q(struct wake_q_head *head)
++{
++      __wake_up_q(head, false);
++}
++
++static inline void wake_up_q_sleeper(struct wake_q_head *head)
++{
++      __wake_up_q(head, true);
++}
+ /*
+  * sched-domains (multiprocessor balancing) declarations:
+--- a/include/linux/spinlock.h
++++ b/include/linux/spinlock.h
+@@ -271,7 +271,11 @@ static inline void do_raw_spin_unlock(ra
+ #define raw_spin_can_lock(lock)       (!raw_spin_is_locked(lock))
+ /* Include rwlock functions */
+-#include <linux/rwlock.h>
++#ifdef CONFIG_PREEMPT_RT_FULL
++# include <linux/rwlock_rt.h>
++#else
++# include <linux/rwlock.h>
++#endif
+ /*
+  * Pull the _spin_*()/_read_*()/_write_*() functions/declarations:
+@@ -282,6 +286,10 @@ static inline void do_raw_spin_unlock(ra
+ # include <linux/spinlock_api_up.h>
+ #endif
++#ifdef CONFIG_PREEMPT_RT_FULL
++# include <linux/spinlock_rt.h>
++#else /* PREEMPT_RT_FULL */
++
+ /*
+  * Map the spin_lock functions to the raw variants for PREEMPT_RT=n
+  */
+@@ -416,4 +424,6 @@ extern int _atomic_dec_and_lock(atomic_t
+ #define atomic_dec_and_lock(atomic, lock) \
+               __cond_lock(lock, _atomic_dec_and_lock(atomic, lock))
++#endif /* !PREEMPT_RT_FULL */
++
+ #endif /* __LINUX_SPINLOCK_H */
+--- a/include/linux/spinlock_api_smp.h
++++ b/include/linux/spinlock_api_smp.h
+@@ -189,6 +189,8 @@ static inline int __raw_spin_trylock_bh(
+       return 0;
+ }
+-#include <linux/rwlock_api_smp.h>
++#ifndef CONFIG_PREEMPT_RT_FULL
++# include <linux/rwlock_api_smp.h>
++#endif
+ #endif /* __LINUX_SPINLOCK_API_SMP_H */
+--- /dev/null
++++ b/include/linux/spinlock_rt.h
+@@ -0,0 +1,162 @@
++#ifndef __LINUX_SPINLOCK_RT_H
++#define __LINUX_SPINLOCK_RT_H
++
++#ifndef __LINUX_SPINLOCK_H
++#error Do not include directly. Use spinlock.h
++#endif
++
++#include <linux/bug.h>
++
++extern void
++__rt_spin_lock_init(spinlock_t *lock, char *name, struct lock_class_key *key);
++
++#define spin_lock_init(slock)                         \
++do {                                                  \
++      static struct lock_class_key __key;             \
++                                                      \
++      rt_mutex_init(&(slock)->lock);                  \
++      __rt_spin_lock_init(slock, #slock, &__key);     \
++} while (0)
++
++void __lockfunc rt_spin_lock__no_mg(spinlock_t *lock);
++void __lockfunc rt_spin_unlock__no_mg(spinlock_t *lock);
++int __lockfunc rt_spin_trylock__no_mg(spinlock_t *lock);
++
++extern void __lockfunc rt_spin_lock(spinlock_t *lock);
++extern unsigned long __lockfunc rt_spin_lock_trace_flags(spinlock_t *lock);
++extern void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass);
++extern void __lockfunc rt_spin_unlock(spinlock_t *lock);
++extern void __lockfunc rt_spin_unlock_wait(spinlock_t *lock);
++extern int __lockfunc rt_spin_trylock_irqsave(spinlock_t *lock, unsigned long *flags);
++extern int __lockfunc rt_spin_trylock_bh(spinlock_t *lock);
++extern int __lockfunc rt_spin_trylock(spinlock_t *lock);
++extern int atomic_dec_and_spin_lock(atomic_t *atomic, spinlock_t *lock);
++
++/*
++ * lockdep-less calls, for derived types like rwlock:
++ * (for trylock they can use rt_mutex_trylock() directly.
++ */
++extern void __lockfunc __rt_spin_lock__no_mg(struct rt_mutex *lock);
++extern void __lockfunc __rt_spin_lock(struct rt_mutex *lock);
++extern void __lockfunc __rt_spin_unlock(struct rt_mutex *lock);
++
++#define spin_lock(lock)                       rt_spin_lock(lock)
++
++#define spin_lock_bh(lock)                    \
++      do {                                    \
++              local_bh_disable();             \
++              rt_spin_lock(lock);             \
++      } while (0)
++
++#define spin_lock_irq(lock)           spin_lock(lock)
++
++#define spin_do_trylock(lock)         __cond_lock(lock, rt_spin_trylock(lock))
++
++#define spin_trylock(lock)                    \
++({                                            \
++      int __locked;                           \
++      __locked = spin_do_trylock(lock);       \
++      __locked;                               \
++})
++
++#ifdef CONFIG_LOCKDEP
++# define spin_lock_nested(lock, subclass)             \
++      do {                                            \
++              rt_spin_lock_nested(lock, subclass);    \
++      } while (0)
++
++#define spin_lock_bh_nested(lock, subclass)           \
++      do {                                            \
++              local_bh_disable();                     \
++              rt_spin_lock_nested(lock, subclass);    \
++      } while (0)
++
++# define spin_lock_irqsave_nested(lock, flags, subclass) \
++      do {                                             \
++              typecheck(unsigned long, flags);         \
++              flags = 0;                               \
++              rt_spin_lock_nested(lock, subclass);     \
++      } while (0)
++#else
++# define spin_lock_nested(lock, subclass)     spin_lock(lock)
++# define spin_lock_bh_nested(lock, subclass)  spin_lock_bh(lock)
++
++# define spin_lock_irqsave_nested(lock, flags, subclass) \
++      do {                                             \
++              typecheck(unsigned long, flags);         \
++              flags = 0;                               \
++              spin_lock(lock);                         \
++      } while (0)
++#endif
++
++#define spin_lock_irqsave(lock, flags)                         \
++      do {                                             \
++              typecheck(unsigned long, flags);         \
++              flags = 0;                               \
++              spin_lock(lock);                         \
++      } while (0)
++
++static inline unsigned long spin_lock_trace_flags(spinlock_t *lock)
++{
++      unsigned long flags = 0;
++#ifdef CONFIG_TRACE_IRQFLAGS
++      flags = rt_spin_lock_trace_flags(lock);
++#else
++      spin_lock(lock); /* lock_local */
++#endif
++      return flags;
++}
++
++/* FIXME: we need rt_spin_lock_nest_lock */
++#define spin_lock_nest_lock(lock, nest_lock) spin_lock_nested(lock, 0)
++
++#define spin_unlock(lock)                     rt_spin_unlock(lock)
++
++#define spin_unlock_bh(lock)                          \
++      do {                                            \
++              rt_spin_unlock(lock);                   \
++              local_bh_enable();                      \
++      } while (0)
++
++#define spin_unlock_irq(lock)         spin_unlock(lock)
++
++#define spin_unlock_irqrestore(lock, flags)           \
++      do {                                            \
++              typecheck(unsigned long, flags);        \
++              (void) flags;                           \
++              spin_unlock(lock);                      \
++      } while (0)
++
++#define spin_trylock_bh(lock) __cond_lock(lock, rt_spin_trylock_bh(lock))
++#define spin_trylock_irq(lock)        spin_trylock(lock)
++
++#define spin_trylock_irqsave(lock, flags)     \
++      rt_spin_trylock_irqsave(lock, &(flags))
++
++#define spin_unlock_wait(lock)                rt_spin_unlock_wait(lock)
++
++#ifdef CONFIG_GENERIC_LOCKBREAK
++# define spin_is_contended(lock)      ((lock)->break_lock)
++#else
++# define spin_is_contended(lock)      (((void)(lock), 0))
++#endif
++
++static inline int spin_can_lock(spinlock_t *lock)
++{
++      return !rt_mutex_is_locked(&lock->lock);
++}
++
++static inline int spin_is_locked(spinlock_t *lock)
++{
++      return rt_mutex_is_locked(&lock->lock);
++}
++
++static inline void assert_spin_locked(spinlock_t *lock)
++{
++      BUG_ON(!spin_is_locked(lock));
++}
++
++#define atomic_dec_and_lock(atomic, lock) \
++      atomic_dec_and_spin_lock(atomic, lock)
++
++#endif
+--- a/include/linux/spinlock_types.h
++++ b/include/linux/spinlock_types.h
+@@ -11,8 +11,13 @@
+ #include <linux/spinlock_types_raw.h>
+-#include <linux/spinlock_types_nort.h>
+-
+-#include <linux/rwlock_types.h>
++#ifndef CONFIG_PREEMPT_RT_FULL
++# include <linux/spinlock_types_nort.h>
++# include <linux/rwlock_types.h>
++#else
++# include <linux/rtmutex.h>
++# include <linux/spinlock_types_rt.h>
++# include <linux/rwlock_types_rt.h>
++#endif
+ #endif /* __LINUX_SPINLOCK_TYPES_H */
+--- /dev/null
++++ b/include/linux/spinlock_types_rt.h
+@@ -0,0 +1,48 @@
++#ifndef __LINUX_SPINLOCK_TYPES_RT_H
++#define __LINUX_SPINLOCK_TYPES_RT_H
++
++#ifndef __LINUX_SPINLOCK_TYPES_H
++#error "Do not include directly. Include spinlock_types.h instead"
++#endif
++
++#include <linux/cache.h>
++
++/*
++ * PREEMPT_RT: spinlocks - an RT mutex plus lock-break field:
++ */
++typedef struct spinlock {
++      struct rt_mutex         lock;
++      unsigned int            break_lock;
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      struct lockdep_map      dep_map;
++#endif
++} spinlock_t;
++
++#ifdef CONFIG_DEBUG_RT_MUTEXES
++# define __RT_SPIN_INITIALIZER(name) \
++      { \
++      .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(name.wait_lock), \
++      .save_state = 1, \
++      .file = __FILE__, \
++      .line = __LINE__ , \
++      }
++#else
++# define __RT_SPIN_INITIALIZER(name) \
++      {                                                               \
++      .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(name.wait_lock),          \
++      .save_state = 1, \
++      }
++#endif
++
++/*
++.wait_list = PLIST_HEAD_INIT_RAW((name).lock.wait_list, (name).lock.wait_lock)
++*/
++
++#define __SPIN_LOCK_UNLOCKED(name)                    \
++      { .lock = __RT_SPIN_INITIALIZER(name.lock),             \
++        SPIN_DEP_MAP_INIT(name) }
++
++#define DEFINE_SPINLOCK(name) \
++      spinlock_t name = __SPIN_LOCK_UNLOCKED(name)
++
++#endif
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1396,6 +1396,7 @@ static int wake_futex_pi(u32 __user *uad
+       struct task_struct *new_owner;
+       bool deboost = false;
+       WAKE_Q(wake_q);
++      WAKE_Q(wake_sleeper_q);
+       int ret = 0;
+       new_owner = rt_mutex_next_owner(&pi_state->pi_mutex);
+@@ -1455,13 +1456,15 @@ static int wake_futex_pi(u32 __user *uad
+       /*
+        * We've updated the uservalue, this unlock cannot fail.
+        */
+-      deboost = __rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q);
++      deboost = __rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q,
++                                        &wake_sleeper_q);
+ out_unlock:
+       raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
+       if (deboost) {
+               wake_up_q(&wake_q);
++              wake_up_q_sleeper(&wake_sleeper_q);
+               rt_mutex_adjust_prio(current);
+       }
+@@ -2664,7 +2667,7 @@ static int futex_lock_pi(u32 __user *uad
+               goto no_block;
+       }
+-      rt_mutex_init_waiter(&rt_waiter);
++      rt_mutex_init_waiter(&rt_waiter, false);
+       /*
+        * On PREEMPT_RT_FULL, when hb->lock becomes an rt_mutex, we must not
+@@ -3029,7 +3032,7 @@ static int futex_wait_requeue_pi(u32 __u
+        * The waiter is allocated on our stack, manipulated by the requeue
+        * code while we sleep on uaddr.
+        */
+-      rt_mutex_init_waiter(&rt_waiter);
++      rt_mutex_init_waiter(&rt_waiter, false);
+       ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, VERIFY_WRITE);
+       if (unlikely(ret != 0))
+--- a/kernel/locking/Makefile
++++ b/kernel/locking/Makefile
+@@ -2,7 +2,7 @@
+ # and is generally not a function of system call inputs.
+ KCOV_INSTRUMENT               := n
+-obj-y += mutex.o semaphore.o rwsem.o percpu-rwsem.o
++obj-y += semaphore.o percpu-rwsem.o
+ ifdef CONFIG_FUNCTION_TRACER
+ CFLAGS_REMOVE_lockdep.o = $(CC_FLAGS_FTRACE)
+@@ -11,7 +11,11 @@ CFLAGS_REMOVE_mutex-debug.o = $(CC_FLAGS
+ CFLAGS_REMOVE_rtmutex-debug.o = $(CC_FLAGS_FTRACE)
+ endif
++ifneq ($(CONFIG_PREEMPT_RT_FULL),y)
++obj-y += mutex.o
+ obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o
++obj-y += rwsem.o
++endif
+ obj-$(CONFIG_LOCKDEP) += lockdep.o
+ ifeq ($(CONFIG_PROC_FS),y)
+ obj-$(CONFIG_LOCKDEP) += lockdep_proc.o
+@@ -24,7 +28,10 @@ obj-$(CONFIG_RT_MUTEXES) += rtmutex.o
+ obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o
+ obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock.o
+ obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock_debug.o
++ifneq ($(CONFIG_PREEMPT_RT_FULL),y)
+ obj-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
+ obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem-xadd.o
++endif
++obj-$(CONFIG_PREEMPT_RT_FULL) += rt.o
+ obj-$(CONFIG_QUEUED_RWLOCKS) += qrwlock.o
+ obj-$(CONFIG_LOCK_TORTURE_TEST) += locktorture.o
+--- /dev/null
++++ b/kernel/locking/rt.c
+@@ -0,0 +1,498 @@
++/*
++ * kernel/rt.c
++ *
++ * Real-Time Preemption Support
++ *
++ * started by Ingo Molnar:
++ *
++ *  Copyright (C) 2004-2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
++ *  Copyright (C) 2006, Timesys Corp., Thomas Gleixner <tglx@timesys.com>
++ *
++ * historic credit for proving that Linux spinlocks can be implemented via
++ * RT-aware mutexes goes to many people: The Pmutex project (Dirk Grambow
++ * and others) who prototyped it on 2.4 and did lots of comparative
++ * research and analysis; TimeSys, for proving that you can implement a
++ * fully preemptible kernel via the use of IRQ threading and mutexes;
++ * Bill Huey for persuasively arguing on lkml that the mutex model is the
++ * right one; and to MontaVista, who ported pmutexes to 2.6.
++ *
++ * This code is a from-scratch implementation and is not based on pmutexes,
++ * but the idea of converting spinlocks to mutexes is used here too.
++ *
++ * lock debugging, locking tree, deadlock detection:
++ *
++ *  Copyright (C) 2004, LynuxWorks, Inc., Igor Manyilov, Bill Huey
++ *  Released under the General Public License (GPL).
++ *
++ * Includes portions of the generic R/W semaphore implementation from:
++ *
++ *  Copyright (c) 2001   David Howells (dhowells@redhat.com).
++ *  - Derived partially from idea by Andrea Arcangeli <andrea@suse.de>
++ *  - Derived also from comments by Linus
++ *
++ * Pending ownership of locks and ownership stealing:
++ *
++ *  Copyright (C) 2005, Kihon Technologies Inc., Steven Rostedt
++ *
++ *   (also by Steven Rostedt)
++ *    - Converted single pi_lock to individual task locks.
++ *
++ * By Esben Nielsen:
++ *    Doing priority inheritance with help of the scheduler.
++ *
++ *  Copyright (C) 2006, Timesys Corp., Thomas Gleixner <tglx@timesys.com>
++ *  - major rework based on Esben Nielsens initial patch
++ *  - replaced thread_info references by task_struct refs
++ *  - removed task->pending_owner dependency
++ *  - BKL drop/reacquire for semaphore style locks to avoid deadlocks
++ *    in the scheduler return path as discussed with Steven Rostedt
++ *
++ *  Copyright (C) 2006, Kihon Technologies Inc.
++ *    Steven Rostedt <rostedt@goodmis.org>
++ *  - debugged and patched Thomas Gleixner's rework.
++ *  - added back the cmpxchg to the rework.
++ *  - turned atomic require back on for SMP.
++ */
++
++#include <linux/spinlock.h>
++#include <linux/rtmutex.h>
++#include <linux/sched.h>
++#include <linux/delay.h>
++#include <linux/module.h>
++#include <linux/kallsyms.h>
++#include <linux/syscalls.h>
++#include <linux/interrupt.h>
++#include <linux/plist.h>
++#include <linux/fs.h>
++#include <linux/futex.h>
++#include <linux/hrtimer.h>
++
++#include "rtmutex_common.h"
++
++/*
++ * struct mutex functions
++ */
++void __mutex_do_init(struct mutex *mutex, const char *name,
++                   struct lock_class_key *key)
++{
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      /*
++       * Make sure we are not reinitializing a held lock:
++       */
++      debug_check_no_locks_freed((void *)mutex, sizeof(*mutex));
++      lockdep_init_map(&mutex->dep_map, name, key, 0);
++#endif
++      mutex->lock.save_state = 0;
++}
++EXPORT_SYMBOL(__mutex_do_init);
++
++void __lockfunc _mutex_lock(struct mutex *lock)
++{
++      mutex_acquire(&lock->dep_map, 0, 0, _RET_IP_);
++      rt_mutex_lock(&lock->lock);
++}
++EXPORT_SYMBOL(_mutex_lock);
++
++int __lockfunc _mutex_lock_interruptible(struct mutex *lock)
++{
++      int ret;
++
++      mutex_acquire(&lock->dep_map, 0, 0, _RET_IP_);
++      ret = rt_mutex_lock_interruptible(&lock->lock);
++      if (ret)
++              mutex_release(&lock->dep_map, 1, _RET_IP_);
++      return ret;
++}
++EXPORT_SYMBOL(_mutex_lock_interruptible);
++
++int __lockfunc _mutex_lock_killable(struct mutex *lock)
++{
++      int ret;
++
++      mutex_acquire(&lock->dep_map, 0, 0, _RET_IP_);
++      ret = rt_mutex_lock_killable(&lock->lock);
++      if (ret)
++              mutex_release(&lock->dep_map, 1, _RET_IP_);
++      return ret;
++}
++EXPORT_SYMBOL(_mutex_lock_killable);
++
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++void __lockfunc _mutex_lock_nested(struct mutex *lock, int subclass)
++{
++      mutex_acquire_nest(&lock->dep_map, subclass, 0, NULL, _RET_IP_);
++      rt_mutex_lock(&lock->lock);
++}
++EXPORT_SYMBOL(_mutex_lock_nested);
++
++void __lockfunc _mutex_lock_nest_lock(struct mutex *lock, struct lockdep_map *nest)
++{
++      mutex_acquire_nest(&lock->dep_map, 0, 0, nest, _RET_IP_);
++      rt_mutex_lock(&lock->lock);
++}
++EXPORT_SYMBOL(_mutex_lock_nest_lock);
++
++int __lockfunc _mutex_lock_interruptible_nested(struct mutex *lock, int subclass)
++{
++      int ret;
++
++      mutex_acquire_nest(&lock->dep_map, subclass, 0, NULL, _RET_IP_);
++      ret = rt_mutex_lock_interruptible(&lock->lock);
++      if (ret)
++              mutex_release(&lock->dep_map, 1, _RET_IP_);
++      return ret;
++}
++EXPORT_SYMBOL(_mutex_lock_interruptible_nested);
++
++int __lockfunc _mutex_lock_killable_nested(struct mutex *lock, int subclass)
++{
++      int ret;
++
++      mutex_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
++      ret = rt_mutex_lock_killable(&lock->lock);
++      if (ret)
++              mutex_release(&lock->dep_map, 1, _RET_IP_);
++      return ret;
++}
++EXPORT_SYMBOL(_mutex_lock_killable_nested);
++#endif
++
++int __lockfunc _mutex_trylock(struct mutex *lock)
++{
++      int ret = rt_mutex_trylock(&lock->lock);
++
++      if (ret)
++              mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_);
++
++      return ret;
++}
++EXPORT_SYMBOL(_mutex_trylock);
++
++void __lockfunc _mutex_unlock(struct mutex *lock)
++{
++      mutex_release(&lock->dep_map, 1, _RET_IP_);
++      rt_mutex_unlock(&lock->lock);
++}
++EXPORT_SYMBOL(_mutex_unlock);
++
++/*
++ * rwlock_t functions
++ */
++int __lockfunc rt_write_trylock(rwlock_t *rwlock)
++{
++      int ret;
++
++      migrate_disable();
++      ret = rt_mutex_trylock(&rwlock->lock);
++      if (ret)
++              rwlock_acquire(&rwlock->dep_map, 0, 1, _RET_IP_);
++      else
++              migrate_enable();
++
++      return ret;
++}
++EXPORT_SYMBOL(rt_write_trylock);
++
++int __lockfunc rt_write_trylock_irqsave(rwlock_t *rwlock, unsigned long *flags)
++{
++      int ret;
++
++      *flags = 0;
++      ret = rt_write_trylock(rwlock);
++      return ret;
++}
++EXPORT_SYMBOL(rt_write_trylock_irqsave);
++
++int __lockfunc rt_read_trylock(rwlock_t *rwlock)
++{
++      struct rt_mutex *lock = &rwlock->lock;
++      int ret = 1;
++
++      /*
++       * recursive read locks succeed when current owns the lock,
++       * but not when read_depth == 0 which means that the lock is
++       * write locked.
++       */
++      if (rt_mutex_owner(lock) != current) {
++              migrate_disable();
++              ret = rt_mutex_trylock(lock);
++              if (ret)
++                      rwlock_acquire(&rwlock->dep_map, 0, 1, _RET_IP_);
++              else
++                      migrate_enable();
++
++      } else if (!rwlock->read_depth) {
++              ret = 0;
++      }
++
++      if (ret)
++              rwlock->read_depth++;
++
++      return ret;
++}
++EXPORT_SYMBOL(rt_read_trylock);
++
++void __lockfunc rt_write_lock(rwlock_t *rwlock)
++{
++      rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_);
++      __rt_spin_lock(&rwlock->lock);
++}
++EXPORT_SYMBOL(rt_write_lock);
++
++void __lockfunc rt_read_lock(rwlock_t *rwlock)
++{
++      struct rt_mutex *lock = &rwlock->lock;
++
++
++      /*
++       * recursive read locks succeed when current owns the lock
++       */
++      if (rt_mutex_owner(lock) != current) {
++              rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_);
++              __rt_spin_lock(lock);
++      }
++      rwlock->read_depth++;
++}
++
++EXPORT_SYMBOL(rt_read_lock);
++
++void __lockfunc rt_write_unlock(rwlock_t *rwlock)
++{
++      /* NOTE: we always pass in '1' for nested, for simplicity */
++      rwlock_release(&rwlock->dep_map, 1, _RET_IP_);
++      __rt_spin_unlock(&rwlock->lock);
++      migrate_enable();
++}
++EXPORT_SYMBOL(rt_write_unlock);
++
++void __lockfunc rt_read_unlock(rwlock_t *rwlock)
++{
++      /* Release the lock only when read_depth is down to 0 */
++      if (--rwlock->read_depth == 0) {
++              rwlock_release(&rwlock->dep_map, 1, _RET_IP_);
++              __rt_spin_unlock(&rwlock->lock);
++              migrate_enable();
++      }
++}
++EXPORT_SYMBOL(rt_read_unlock);
++
++unsigned long __lockfunc rt_write_lock_irqsave(rwlock_t *rwlock)
++{
++      rt_write_lock(rwlock);
++
++      return 0;
++}
++EXPORT_SYMBOL(rt_write_lock_irqsave);
++
++unsigned long __lockfunc rt_read_lock_irqsave(rwlock_t *rwlock)
++{
++      rt_read_lock(rwlock);
++
++      return 0;
++}
++EXPORT_SYMBOL(rt_read_lock_irqsave);
++
++void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key)
++{
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      /*
++       * Make sure we are not reinitializing a held lock:
++       */
++      debug_check_no_locks_freed((void *)rwlock, sizeof(*rwlock));
++      lockdep_init_map(&rwlock->dep_map, name, key, 0);
++#endif
++      rwlock->lock.save_state = 1;
++      rwlock->read_depth = 0;
++}
++EXPORT_SYMBOL(__rt_rwlock_init);
++
++/*
++ * rw_semaphores
++ */
++
++void  rt_up_write(struct rw_semaphore *rwsem)
++{
++      rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
++      rt_mutex_unlock(&rwsem->lock);
++}
++EXPORT_SYMBOL(rt_up_write);
++
++void __rt_up_read(struct rw_semaphore *rwsem)
++{
++      if (--rwsem->read_depth == 0)
++              rt_mutex_unlock(&rwsem->lock);
++}
++
++void  rt_up_read(struct rw_semaphore *rwsem)
++{
++      rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
++      __rt_up_read(rwsem);
++}
++EXPORT_SYMBOL(rt_up_read);
++
++/*
++ * downgrade a write lock into a read lock
++ * - just wake up any readers at the front of the queue
++ */
++void  rt_downgrade_write(struct rw_semaphore *rwsem)
++{
++      BUG_ON(rt_mutex_owner(&rwsem->lock) != current);
++      rwsem->read_depth = 1;
++}
++EXPORT_SYMBOL(rt_downgrade_write);
++
++int  rt_down_write_trylock(struct rw_semaphore *rwsem)
++{
++      int ret = rt_mutex_trylock(&rwsem->lock);
++
++      if (ret)
++              rwsem_acquire(&rwsem->dep_map, 0, 1, _RET_IP_);
++      return ret;
++}
++EXPORT_SYMBOL(rt_down_write_trylock);
++
++void  rt_down_write(struct rw_semaphore *rwsem)
++{
++      rwsem_acquire(&rwsem->dep_map, 0, 0, _RET_IP_);
++      rt_mutex_lock(&rwsem->lock);
++}
++EXPORT_SYMBOL(rt_down_write);
++
++int rt_down_write_killable(struct rw_semaphore *rwsem)
++{
++      int ret;
++
++      rwsem_acquire(&rwsem->dep_map, 0, 0, _RET_IP_);
++      ret = rt_mutex_lock_killable(&rwsem->lock);
++      if (ret)
++              rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
++      return ret;
++}
++EXPORT_SYMBOL(rt_down_write_killable);
++
++int rt_down_write_killable_nested(struct rw_semaphore *rwsem, int subclass)
++{
++      int ret;
++
++      rwsem_acquire(&rwsem->dep_map, subclass, 0, _RET_IP_);
++      ret = rt_mutex_lock_killable(&rwsem->lock);
++      if (ret)
++              rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
++      return ret;
++}
++EXPORT_SYMBOL(rt_down_write_killable_nested);
++
++void  rt_down_write_nested(struct rw_semaphore *rwsem, int subclass)
++{
++      rwsem_acquire(&rwsem->dep_map, subclass, 0, _RET_IP_);
++      rt_mutex_lock(&rwsem->lock);
++}
++EXPORT_SYMBOL(rt_down_write_nested);
++
++void rt_down_write_nested_lock(struct rw_semaphore *rwsem,
++                             struct lockdep_map *nest)
++{
++      rwsem_acquire_nest(&rwsem->dep_map, 0, 0, nest, _RET_IP_);
++      rt_mutex_lock(&rwsem->lock);
++}
++EXPORT_SYMBOL(rt_down_write_nested_lock);
++
++int rt__down_read_trylock(struct rw_semaphore *rwsem)
++{
++      struct rt_mutex *lock = &rwsem->lock;
++      int ret = 1;
++
++      /*
++       * recursive read locks succeed when current owns the rwsem,
++       * but not when read_depth == 0 which means that the rwsem is
++       * write locked.
++       */
++      if (rt_mutex_owner(lock) != current)
++              ret = rt_mutex_trylock(&rwsem->lock);
++      else if (!rwsem->read_depth)
++              ret = 0;
++
++      if (ret)
++              rwsem->read_depth++;
++      return ret;
++
++}
++
++int  rt_down_read_trylock(struct rw_semaphore *rwsem)
++{
++      int ret;
++
++      ret = rt__down_read_trylock(rwsem);
++      if (ret)
++              rwsem_acquire(&rwsem->dep_map, 0, 1, _RET_IP_);
++
++      return ret;
++}
++EXPORT_SYMBOL(rt_down_read_trylock);
++
++void rt__down_read(struct rw_semaphore *rwsem)
++{
++      struct rt_mutex *lock = &rwsem->lock;
++
++      if (rt_mutex_owner(lock) != current)
++              rt_mutex_lock(&rwsem->lock);
++      rwsem->read_depth++;
++}
++EXPORT_SYMBOL(rt__down_read);
++
++static void __rt_down_read(struct rw_semaphore *rwsem, int subclass)
++{
++      rwsem_acquire_read(&rwsem->dep_map, subclass, 0, _RET_IP_);
++      rt__down_read(rwsem);
++}
++
++void  rt_down_read(struct rw_semaphore *rwsem)
++{
++      __rt_down_read(rwsem, 0);
++}
++EXPORT_SYMBOL(rt_down_read);
++
++void  rt_down_read_nested(struct rw_semaphore *rwsem, int subclass)
++{
++      __rt_down_read(rwsem, subclass);
++}
++EXPORT_SYMBOL(rt_down_read_nested);
++
++void  __rt_rwsem_init(struct rw_semaphore *rwsem, const char *name,
++                            struct lock_class_key *key)
++{
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      /*
++       * Make sure we are not reinitializing a held lock:
++       */
++      debug_check_no_locks_freed((void *)rwsem, sizeof(*rwsem));
++      lockdep_init_map(&rwsem->dep_map, name, key, 0);
++#endif
++      rwsem->read_depth = 0;
++      rwsem->lock.save_state = 0;
++}
++EXPORT_SYMBOL(__rt_rwsem_init);
++
++/**
++ * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0
++ * @cnt: the atomic which we are to dec
++ * @lock: the mutex to return holding if we dec to 0
++ *
++ * return true and hold lock if we dec to 0, return false otherwise
++ */
++int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock)
++{
++      /* dec if we can't possibly hit 0 */
++      if (atomic_add_unless(cnt, -1, 1))
++              return 0;
++      /* we might hit 0, so take the lock */
++      mutex_lock(lock);
++      if (!atomic_dec_and_test(cnt)) {
++              /* when we actually did the dec, we didn't hit 0 */
++              mutex_unlock(lock);
++              return 0;
++      }
++      /* we hit 0, and we hold the lock */
++      return 1;
++}
++EXPORT_SYMBOL(atomic_dec_and_mutex_lock);
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -7,6 +7,11 @@
+  *  Copyright (C) 2005-2006 Timesys Corp., Thomas Gleixner <tglx@timesys.com>
+  *  Copyright (C) 2005 Kihon Technologies Inc., Steven Rostedt
+  *  Copyright (C) 2006 Esben Nielsen
++ *  Adaptive Spinlocks:
++ *  Copyright (C) 2008 Novell, Inc., Gregory Haskins, Sven Dietrich,
++ *                                 and Peter Morreale,
++ * Adaptive Spinlocks simplification:
++ *  Copyright (C) 2008 Red Hat, Inc., Steven Rostedt <srostedt@redhat.com>
+  *
+  *  See Documentation/locking/rt-mutex-design.txt for details.
+  */
+@@ -420,6 +425,14 @@ static bool rt_mutex_cond_detect_deadloc
+       return debug_rt_mutex_detect_deadlock(waiter, chwalk);
+ }
++static void rt_mutex_wake_waiter(struct rt_mutex_waiter *waiter)
++{
++      if (waiter->savestate)
++              wake_up_lock_sleeper(waiter->task);
++      else
++              wake_up_process(waiter->task);
++}
++
+ /*
+  * Max number of times we'll walk the boosting chain:
+  */
+@@ -726,13 +739,16 @@ static int rt_mutex_adjust_prio_chain(st
+        * follow here. This is the end of the chain we are walking.
+        */
+       if (!rt_mutex_owner(lock)) {
++              struct rt_mutex_waiter *lock_top_waiter;
++
+               /*
+                * If the requeue [7] above changed the top waiter,
+                * then we need to wake the new top waiter up to try
+                * to get the lock.
+                */
+-              if (prerequeue_top_waiter != rt_mutex_top_waiter(lock))
+-                      wake_up_process(rt_mutex_top_waiter(lock)->task);
++              lock_top_waiter = rt_mutex_top_waiter(lock);
++              if (prerequeue_top_waiter != lock_top_waiter)
++                      rt_mutex_wake_waiter(lock_top_waiter);
+               raw_spin_unlock_irq(&lock->wait_lock);
+               return 0;
+       }
+@@ -825,6 +841,25 @@ static int rt_mutex_adjust_prio_chain(st
+       return ret;
+ }
++
++#define STEAL_NORMAL  0
++#define STEAL_LATERAL 1
++
++/*
++ * Note that RT tasks are excluded from lateral-steals to prevent the
++ * introduction of an unbounded latency
++ */
++static inline int lock_is_stealable(struct task_struct *task,
++                                  struct task_struct *pendowner, int mode)
++{
++    if (mode == STEAL_NORMAL || rt_task(task)) {
++          if (task->prio >= pendowner->prio)
++                  return 0;
++    } else if (task->prio > pendowner->prio)
++          return 0;
++    return 1;
++}
++
+ /*
+  * Try to take an rt-mutex
+  *
+@@ -835,8 +870,9 @@ static int rt_mutex_adjust_prio_chain(st
+  * @waiter: The waiter that is queued to the lock's wait tree if the
+  *        callsite called task_blocked_on_lock(), otherwise NULL
+  */
+-static int try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task,
+-                              struct rt_mutex_waiter *waiter)
++static int __try_to_take_rt_mutex(struct rt_mutex *lock,
++                                struct task_struct *task,
++                                struct rt_mutex_waiter *waiter, int mode)
+ {
+       /*
+        * Before testing whether we can acquire @lock, we set the
+@@ -873,8 +909,10 @@ static int try_to_take_rt_mutex(struct r
+                * If waiter is not the highest priority waiter of
+                * @lock, give up.
+                */
+-              if (waiter != rt_mutex_top_waiter(lock))
++              if (waiter != rt_mutex_top_waiter(lock)) {
++                      /* XXX lock_is_stealable() ? */
+                       return 0;
++              }
+               /*
+                * We can acquire the lock. Remove the waiter from the
+@@ -892,14 +930,10 @@ static int try_to_take_rt_mutex(struct r
+                * not need to be dequeued.
+                */
+               if (rt_mutex_has_waiters(lock)) {
+-                      /*
+-                       * If @task->prio is greater than or equal to
+-                       * the top waiter priority (kernel view),
+-                       * @task lost.
+-                       */
+-                      if (task->prio >= rt_mutex_top_waiter(lock)->prio)
+-                              return 0;
++                      struct task_struct *pown = rt_mutex_top_waiter(lock)->task;
++                      if (task != pown && !lock_is_stealable(task, pown, mode))
++                              return 0;
+                       /*
+                        * The current top waiter stays enqueued. We
+                        * don't have to change anything in the lock
+@@ -946,6 +980,350 @@ static int try_to_take_rt_mutex(struct r
+       return 1;
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++/*
++ * preemptible spin_lock functions:
++ */
++static inline void rt_spin_lock_fastlock(struct rt_mutex *lock,
++                                       void  (*slowfn)(struct rt_mutex *lock))
++{
++      might_sleep_no_state_check();
++
++      if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
++              return;
++      else
++              slowfn(lock);
++}
++
++static inline void rt_spin_lock_fastunlock(struct rt_mutex *lock,
++                                         void  (*slowfn)(struct rt_mutex *lock))
++{
++      if (likely(rt_mutex_cmpxchg_release(lock, current, NULL)))
++              return;
++      else
++              slowfn(lock);
++}
++#ifdef CONFIG_SMP
++/*
++ * Note that owner is a speculative pointer and dereferencing relies
++ * on rcu_read_lock() and the check against the lock owner.
++ */
++static int adaptive_wait(struct rt_mutex *lock,
++                       struct task_struct *owner)
++{
++      int res = 0;
++
++      rcu_read_lock();
++      for (;;) {
++              if (owner != rt_mutex_owner(lock))
++                      break;
++              /*
++               * Ensure that owner->on_cpu is dereferenced _after_
++               * checking the above to be valid.
++               */
++              barrier();
++              if (!owner->on_cpu) {
++                      res = 1;
++                      break;
++              }
++              cpu_relax();
++      }
++      rcu_read_unlock();
++      return res;
++}
++#else
++static int adaptive_wait(struct rt_mutex *lock,
++                       struct task_struct *orig_owner)
++{
++      return 1;
++}
++#endif
++
++static int task_blocks_on_rt_mutex(struct rt_mutex *lock,
++                                 struct rt_mutex_waiter *waiter,
++                                 struct task_struct *task,
++                                 enum rtmutex_chainwalk chwalk);
++/*
++ * Slow path lock function spin_lock style: this variant is very
++ * careful not to miss any non-lock wakeups.
++ *
++ * We store the current state under p->pi_lock in p->saved_state and
++ * the try_to_wake_up() code handles this accordingly.
++ */
++static void  noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock)
++{
++      struct task_struct *lock_owner, *self = current;
++      struct rt_mutex_waiter waiter, *top_waiter;
++      unsigned long flags;
++      int ret;
++
++      rt_mutex_init_waiter(&waiter, true);
++
++      raw_spin_lock_irqsave(&lock->wait_lock, flags);
++
++      if (__try_to_take_rt_mutex(lock, self, NULL, STEAL_LATERAL)) {
++              raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
++              return;
++      }
++
++      BUG_ON(rt_mutex_owner(lock) == self);
++
++      /*
++       * We save whatever state the task is in and we'll restore it
++       * after acquiring the lock taking real wakeups into account
++       * as well. We are serialized via pi_lock against wakeups. See
++       * try_to_wake_up().
++       */
++      raw_spin_lock(&self->pi_lock);
++      self->saved_state = self->state;
++      __set_current_state_no_track(TASK_UNINTERRUPTIBLE);
++      raw_spin_unlock(&self->pi_lock);
++
++      ret = task_blocks_on_rt_mutex(lock, &waiter, self, RT_MUTEX_MIN_CHAINWALK);
++      BUG_ON(ret);
++
++      for (;;) {
++              /* Try to acquire the lock again. */
++              if (__try_to_take_rt_mutex(lock, self, &waiter, STEAL_LATERAL))
++                      break;
++
++              top_waiter = rt_mutex_top_waiter(lock);
++              lock_owner = rt_mutex_owner(lock);
++
++              raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
++
++              debug_rt_mutex_print_deadlock(&waiter);
++
++              if (top_waiter != &waiter || adaptive_wait(lock, lock_owner))
++                      schedule();
++
++              raw_spin_lock_irqsave(&lock->wait_lock, flags);
++
++              raw_spin_lock(&self->pi_lock);
++              __set_current_state_no_track(TASK_UNINTERRUPTIBLE);
++              raw_spin_unlock(&self->pi_lock);
++      }
++
++      /*
++       * Restore the task state to current->saved_state. We set it
++       * to the original state above and the try_to_wake_up() code
++       * has possibly updated it when a real (non-rtmutex) wakeup
++       * happened while we were blocked. Clear saved_state so
++       * try_to_wakeup() does not get confused.
++       */
++      raw_spin_lock(&self->pi_lock);
++      __set_current_state_no_track(self->saved_state);
++      self->saved_state = TASK_RUNNING;
++      raw_spin_unlock(&self->pi_lock);
++
++      /*
++       * try_to_take_rt_mutex() sets the waiter bit
++       * unconditionally. We might have to fix that up:
++       */
++      fixup_rt_mutex_waiters(lock);
++
++      BUG_ON(rt_mutex_has_waiters(lock) && &waiter == rt_mutex_top_waiter(lock));
++      BUG_ON(!RB_EMPTY_NODE(&waiter.tree_entry));
++
++      raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
++
++      debug_rt_mutex_free_waiter(&waiter);
++}
++
++static void mark_wakeup_next_waiter(struct wake_q_head *wake_q,
++                                  struct wake_q_head *wake_sleeper_q,
++                                  struct rt_mutex *lock);
++/*
++ * Slow path to release a rt_mutex spin_lock style
++ */
++static void  noinline __sched rt_spin_lock_slowunlock(struct rt_mutex *lock)
++{
++      unsigned long flags;
++      WAKE_Q(wake_q);
++      WAKE_Q(wake_sleeper_q);
++
++      raw_spin_lock_irqsave(&lock->wait_lock, flags);
++
++      debug_rt_mutex_unlock(lock);
++
++      if (!rt_mutex_has_waiters(lock)) {
++              lock->owner = NULL;
++              raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
++              return;
++      }
++
++      mark_wakeup_next_waiter(&wake_q, &wake_sleeper_q, lock);
++
++      raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
++      wake_up_q(&wake_q);
++      wake_up_q_sleeper(&wake_sleeper_q);
++
++      /* Undo pi boosting.when necessary */
++      rt_mutex_adjust_prio(current);
++}
++
++void __lockfunc rt_spin_lock__no_mg(spinlock_t *lock)
++{
++      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
++      spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
++}
++EXPORT_SYMBOL(rt_spin_lock__no_mg);
++
++void __lockfunc rt_spin_lock(spinlock_t *lock)
++{
++      migrate_disable();
++      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
++      spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
++}
++EXPORT_SYMBOL(rt_spin_lock);
++
++void __lockfunc __rt_spin_lock(struct rt_mutex *lock)
++{
++      migrate_disable();
++      rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock);
++}
++EXPORT_SYMBOL(__rt_spin_lock);
++
++void __lockfunc __rt_spin_lock__no_mg(struct rt_mutex *lock)
++{
++      rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock);
++}
++EXPORT_SYMBOL(__rt_spin_lock__no_mg);
++
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass)
++{
++      migrate_disable();
++      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
++      spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
++}
++EXPORT_SYMBOL(rt_spin_lock_nested);
++#endif
++
++void __lockfunc rt_spin_unlock__no_mg(spinlock_t *lock)
++{
++      /* NOTE: we always pass in '1' for nested, for simplicity */
++      spin_release(&lock->dep_map, 1, _RET_IP_);
++      rt_spin_lock_fastunlock(&lock->lock, rt_spin_lock_slowunlock);
++}
++EXPORT_SYMBOL(rt_spin_unlock__no_mg);
++
++void __lockfunc rt_spin_unlock(spinlock_t *lock)
++{
++      /* NOTE: we always pass in '1' for nested, for simplicity */
++      spin_release(&lock->dep_map, 1, _RET_IP_);
++      rt_spin_lock_fastunlock(&lock->lock, rt_spin_lock_slowunlock);
++      migrate_enable();
++}
++EXPORT_SYMBOL(rt_spin_unlock);
++
++void __lockfunc __rt_spin_unlock(struct rt_mutex *lock)
++{
++      rt_spin_lock_fastunlock(lock, rt_spin_lock_slowunlock);
++}
++EXPORT_SYMBOL(__rt_spin_unlock);
++
++/*
++ * Wait for the lock to get unlocked: instead of polling for an unlock
++ * (like raw spinlocks do), we lock and unlock, to force the kernel to
++ * schedule if there's contention:
++ */
++void __lockfunc rt_spin_unlock_wait(spinlock_t *lock)
++{
++      spin_lock(lock);
++      spin_unlock(lock);
++}
++EXPORT_SYMBOL(rt_spin_unlock_wait);
++
++int __lockfunc rt_spin_trylock__no_mg(spinlock_t *lock)
++{
++      int ret;
++
++      ret = rt_mutex_trylock(&lock->lock);
++      if (ret)
++              spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
++      return ret;
++}
++EXPORT_SYMBOL(rt_spin_trylock__no_mg);
++
++int __lockfunc rt_spin_trylock(spinlock_t *lock)
++{
++      int ret;
++
++      migrate_disable();
++      ret = rt_mutex_trylock(&lock->lock);
++      if (ret)
++              spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
++      else
++              migrate_enable();
++      return ret;
++}
++EXPORT_SYMBOL(rt_spin_trylock);
++
++int __lockfunc rt_spin_trylock_bh(spinlock_t *lock)
++{
++      int ret;
++
++      local_bh_disable();
++      ret = rt_mutex_trylock(&lock->lock);
++      if (ret) {
++              migrate_disable();
++              spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
++      } else
++              local_bh_enable();
++      return ret;
++}
++EXPORT_SYMBOL(rt_spin_trylock_bh);
++
++int __lockfunc rt_spin_trylock_irqsave(spinlock_t *lock, unsigned long *flags)
++{
++      int ret;
++
++      *flags = 0;
++      ret = rt_mutex_trylock(&lock->lock);
++      if (ret) {
++              migrate_disable();
++              spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
++      }
++      return ret;
++}
++EXPORT_SYMBOL(rt_spin_trylock_irqsave);
++
++int atomic_dec_and_spin_lock(atomic_t *atomic, spinlock_t *lock)
++{
++      /* Subtract 1 from counter unless that drops it to 0 (ie. it was 1) */
++      if (atomic_add_unless(atomic, -1, 1))
++              return 0;
++      rt_spin_lock(lock);
++      if (atomic_dec_and_test(atomic))
++              return 1;
++      rt_spin_unlock(lock);
++      return 0;
++}
++EXPORT_SYMBOL(atomic_dec_and_spin_lock);
++
++      void
++__rt_spin_lock_init(spinlock_t *lock, char *name, struct lock_class_key *key)
++{
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      /*
++       * Make sure we are not reinitializing a held lock:
++       */
++      debug_check_no_locks_freed((void *)lock, sizeof(*lock));
++      lockdep_init_map(&lock->dep_map, name, key, 0);
++#endif
++}
++EXPORT_SYMBOL(__rt_spin_lock_init);
++
++#endif /* PREEMPT_RT_FULL */
++
++static inline int
++try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task,
++                   struct rt_mutex_waiter *waiter)
++{
++      return __try_to_take_rt_mutex(lock, task, waiter, STEAL_NORMAL);
++}
++
+ /*
+  * Task blocks on lock.
+  *
+@@ -1058,6 +1436,7 @@ static int task_blocks_on_rt_mutex(struc
+  * Called with lock->wait_lock held and interrupts disabled.
+  */
+ static void mark_wakeup_next_waiter(struct wake_q_head *wake_q,
++                                  struct wake_q_head *wake_sleeper_q,
+                                   struct rt_mutex *lock)
+ {
+       struct rt_mutex_waiter *waiter;
+@@ -1086,7 +1465,10 @@ static void mark_wakeup_next_waiter(stru
+       raw_spin_unlock(&current->pi_lock);
+-      wake_q_add(wake_q, waiter->task);
++      if (waiter->savestate)
++              wake_q_add(wake_sleeper_q, waiter->task);
++      else
++              wake_q_add(wake_q, waiter->task);
+ }
+ /*
+@@ -1167,21 +1549,22 @@ void rt_mutex_adjust_pi(struct task_stru
+               return;
+       }
+       next_lock = waiter->lock;
+-      raw_spin_unlock_irqrestore(&task->pi_lock, flags);
+       /* gets dropped in rt_mutex_adjust_prio_chain()! */
+       get_task_struct(task);
++      raw_spin_unlock_irqrestore(&task->pi_lock, flags);
+       rt_mutex_adjust_prio_chain(task, RT_MUTEX_MIN_CHAINWALK, NULL,
+                                  next_lock, NULL, task);
+ }
+-void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter)
++void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter, bool savestate)
+ {
+       debug_rt_mutex_init_waiter(waiter);
+       RB_CLEAR_NODE(&waiter->pi_tree_entry);
+       RB_CLEAR_NODE(&waiter->tree_entry);
+       waiter->task = NULL;
++      waiter->savestate = savestate;
+ }
+ /**
+@@ -1261,7 +1644,7 @@ rt_mutex_slowlock(struct rt_mutex *lock,
+       unsigned long flags;
+       int ret = 0;
+-      rt_mutex_init_waiter(&waiter);
++      rt_mutex_init_waiter(&waiter, false);
+       /*
+        * Technically we could use raw_spin_[un]lock_irq() here, but this can
+@@ -1355,7 +1738,8 @@ static inline int rt_mutex_slowtrylock(s
+  * Return whether the current task needs to undo a potential priority boosting.
+  */
+ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock,
+-                                      struct wake_q_head *wake_q)
++                                      struct wake_q_head *wake_q,
++                                      struct wake_q_head *wake_sleeper_q)
+ {
+       unsigned long flags;
+@@ -1409,7 +1793,7 @@ static bool __sched rt_mutex_slowunlock(
+        *
+        * Queue the next waiter for wakeup once we release the wait_lock.
+        */
+-      mark_wakeup_next_waiter(wake_q, lock);
++      mark_wakeup_next_waiter(wake_q, wake_sleeper_q, lock);
+       raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
+@@ -1463,17 +1847,20 @@ rt_mutex_fasttrylock(struct rt_mutex *lo
+ static inline void
+ rt_mutex_fastunlock(struct rt_mutex *lock,
+                   bool (*slowfn)(struct rt_mutex *lock,
+-                                 struct wake_q_head *wqh))
++                                 struct wake_q_head *wqh,
++                                 struct wake_q_head *wq_sleeper))
+ {
+       WAKE_Q(wake_q);
++      WAKE_Q(wake_sleeper_q);
+       bool deboost;
+       if (likely(rt_mutex_cmpxchg_release(lock, current, NULL)))
+               return;
+-      deboost = slowfn(lock, &wake_q);
++      deboost = slowfn(lock, &wake_q, &wake_sleeper_q);
+       wake_up_q(&wake_q);
++      wake_up_q_sleeper(&wake_sleeper_q);
+       /* Undo pi boosting if necessary: */
+       if (deboost)
+@@ -1601,7 +1988,8 @@ EXPORT_SYMBOL_GPL(rt_mutex_unlock);
+  * simple and will not need to retry.
+  */
+ bool __sched __rt_mutex_futex_unlock(struct rt_mutex *lock,
+-                                  struct wake_q_head *wake_q)
++                                  struct wake_q_head *wake_q,
++                                  struct wake_q_head *wq_sleeper)
+ {
+       lockdep_assert_held(&lock->wait_lock);
+@@ -1612,21 +2000,23 @@ bool __sched __rt_mutex_futex_unlock(str
+               return false; /* done */
+       }
+-      mark_wakeup_next_waiter(wake_q, lock);
++      mark_wakeup_next_waiter(wake_q, wq_sleeper, lock);
+       return true; /* deboost and wakeups */
+ }
+ void __sched rt_mutex_futex_unlock(struct rt_mutex *lock)
+ {
+       WAKE_Q(wake_q);
++      WAKE_Q(wake_sleeper_q);
+       bool deboost;
+       raw_spin_lock_irq(&lock->wait_lock);
+-      deboost = __rt_mutex_futex_unlock(lock, &wake_q);
++      deboost = __rt_mutex_futex_unlock(lock, &wake_q, &wake_sleeper_q);
+       raw_spin_unlock_irq(&lock->wait_lock);
+       if (deboost) {
+               wake_up_q(&wake_q);
++              wake_up_q_sleeper(&wake_sleeper_q);
+               rt_mutex_adjust_prio(current);
+       }
+ }
+@@ -1661,13 +2051,12 @@ EXPORT_SYMBOL_GPL(rt_mutex_destroy);
+ void __rt_mutex_init(struct rt_mutex *lock, const char *name)
+ {
+       lock->owner = NULL;
+-      raw_spin_lock_init(&lock->wait_lock);
+       lock->waiters = RB_ROOT;
+       lock->waiters_leftmost = NULL;
+       debug_rt_mutex_init(lock, name);
+ }
+-EXPORT_SYMBOL_GPL(__rt_mutex_init);
++EXPORT_SYMBOL(__rt_mutex_init);
+ /**
+  * rt_mutex_init_proxy_locked - initialize and lock a rt_mutex on behalf of a
+@@ -1682,7 +2071,7 @@ EXPORT_SYMBOL_GPL(__rt_mutex_init);
+ void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
+                               struct task_struct *proxy_owner)
+ {
+-      __rt_mutex_init(lock, NULL);
++      rt_mutex_init(lock);
+       debug_rt_mutex_proxy_lock(lock, proxy_owner);
+       rt_mutex_set_owner(lock, proxy_owner);
+ }
+@@ -1888,3 +2277,25 @@ bool rt_mutex_cleanup_proxy_lock(struct
+       return cleanup;
+ }
++
++#ifdef CONFIG_PREEMPT_RT_FULL
++struct ww_mutex {
++};
++struct ww_acquire_ctx {
++};
++int __ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ww_ctx)
++{
++      BUG();
++}
++EXPORT_SYMBOL_GPL(__ww_mutex_lock);
++int __ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ww_ctx)
++{
++      BUG();
++}
++EXPORT_SYMBOL_GPL(__ww_mutex_lock_interruptible);
++void __sched ww_mutex_unlock(struct ww_mutex *lock)
++{
++      BUG();
++}
++EXPORT_SYMBOL_GPL(ww_mutex_unlock);
++#endif
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -27,6 +27,7 @@ struct rt_mutex_waiter {
+       struct rb_node          pi_tree_entry;
+       struct task_struct      *task;
+       struct rt_mutex         *lock;
++      bool                    savestate;
+ #ifdef CONFIG_DEBUG_RT_MUTEXES
+       unsigned long           ip;
+       struct pid              *deadlock_task_pid;
+@@ -106,7 +107,7 @@ extern void rt_mutex_init_proxy_locked(s
+                                      struct task_struct *proxy_owner);
+ extern void rt_mutex_proxy_unlock(struct rt_mutex *lock,
+                                 struct task_struct *proxy_owner);
+-extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter);
++extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter, bool savetate);
+ extern int __rt_mutex_start_proxy_lock(struct rt_mutex *lock,
+                                    struct rt_mutex_waiter *waiter,
+                                    struct task_struct *task);
+@@ -123,7 +124,8 @@ extern int rt_mutex_futex_trylock(struct
+ extern void rt_mutex_futex_unlock(struct rt_mutex *lock);
+ extern bool __rt_mutex_futex_unlock(struct rt_mutex *lock,
+-                               struct wake_q_head *wqh);
++                               struct wake_q_head *wqh,
++                               struct wake_q_head *wq_sleeper);
+ extern void rt_mutex_adjust_prio(struct task_struct *task);
+--- a/kernel/locking/spinlock.c
++++ b/kernel/locking/spinlock.c
+@@ -124,8 +124,11 @@ void __lockfunc __raw_##op##_lock_bh(loc
+  *         __[spin|read|write]_lock_bh()
+  */
+ BUILD_LOCK_OPS(spin, raw_spinlock);
++
++#ifndef CONFIG_PREEMPT_RT_FULL
+ BUILD_LOCK_OPS(read, rwlock);
+ BUILD_LOCK_OPS(write, rwlock);
++#endif
+ #endif
+@@ -209,6 +212,8 @@ void __lockfunc _raw_spin_unlock_bh(raw_
+ EXPORT_SYMBOL(_raw_spin_unlock_bh);
+ #endif
++#ifndef CONFIG_PREEMPT_RT_FULL
++
+ #ifndef CONFIG_INLINE_READ_TRYLOCK
+ int __lockfunc _raw_read_trylock(rwlock_t *lock)
+ {
+@@ -353,6 +358,8 @@ void __lockfunc _raw_write_unlock_bh(rwl
+ EXPORT_SYMBOL(_raw_write_unlock_bh);
+ #endif
++#endif /* !PREEMPT_RT_FULL */
++
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+ void __lockfunc _raw_spin_lock_nested(raw_spinlock_t *lock, int subclass)
+--- a/kernel/locking/spinlock_debug.c
++++ b/kernel/locking/spinlock_debug.c
+@@ -31,6 +31,7 @@ void __raw_spin_lock_init(raw_spinlock_t
+ EXPORT_SYMBOL(__raw_spin_lock_init);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ void __rwlock_init(rwlock_t *lock, const char *name,
+                  struct lock_class_key *key)
+ {
+@@ -48,6 +49,7 @@ void __rwlock_init(rwlock_t *lock, const
+ }
+ EXPORT_SYMBOL(__rwlock_init);
++#endif
+ static void spin_dump(raw_spinlock_t *lock, const char *msg)
+ {
+@@ -159,6 +161,7 @@ void do_raw_spin_unlock(raw_spinlock_t *
+       arch_spin_unlock(&lock->raw_lock);
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
+ static void rwlock_bug(rwlock_t *lock, const char *msg)
+ {
+       if (!debug_locks_off())
+@@ -300,3 +303,5 @@ void do_raw_write_unlock(rwlock_t *lock)
+       debug_write_unlock(lock);
+       arch_write_unlock(&lock->raw_lock);
+ }
++
++#endif
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -454,7 +454,7 @@ void wake_q_add(struct wake_q_head *head
+       head->lastp = &node->next;
+ }
+-void wake_up_q(struct wake_q_head *head)
++void __wake_up_q(struct wake_q_head *head, bool sleeper)
+ {
+       struct wake_q_node *node = head->first;
+@@ -471,7 +471,10 @@ void wake_up_q(struct wake_q_head *head)
+                * wake_up_process() implies a wmb() to pair with the queueing
+                * in wake_q_add() so as not to miss wakeups.
+                */
+-              wake_up_process(task);
++              if (sleeper)
++                      wake_up_lock_sleeper(task);
++              else
++                      wake_up_process(task);
+               put_task_struct(task);
+       }
+ }
diff --git a/patches/features/all/rt/rt-drop_mutex_disable_on_not_debug.patch b/patches/features/all/rt/rt-drop_mutex_disable_on_not_debug.patch
new file mode 100644 (file)
index 0000000..7aafec2
--- /dev/null
@@ -0,0 +1,33 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 10 Feb 2017 18:21:04 +0100
+Subject: rt: Drop mutex_disable() on !DEBUG configs and the GPL suffix from export symbol
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Alex Goins reported that mutex_destroy() on RT will force a GPL only symbol
+which won't link and therefore fail on a non-GPL kernel module.
+This does not happen on !RT and is a regression on RT which we would like to
+avoid.
+I try here the easy thing and to not use rt_mutex_destroy() if
+CONFIG_DEBUG_MUTEXES is not enabled.
+
+Reported-by: Alex Goins <agoins@nvidia.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/mutex_rt.h |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/include/linux/mutex_rt.h
++++ b/include/linux/mutex_rt.h
+@@ -43,7 +43,12 @@ extern void __lockfunc _mutex_unlock(str
+ #define mutex_lock_killable(l)                _mutex_lock_killable(l)
+ #define mutex_trylock(l)              _mutex_trylock(l)
+ #define mutex_unlock(l)                       _mutex_unlock(l)
++
++#ifdef CONFIG_DEBUG_MUTEXES
+ #define mutex_destroy(l)              rt_mutex_destroy(&(l)->lock)
++#else
++static inline void mutex_destroy(struct mutex *lock) {}
++#endif
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+ # define mutex_lock_nested(l, s)      _mutex_lock_nested(l, s)
diff --git a/patches/features/all/rt/rt-introduce-cpu-chill.patch b/patches/features/all/rt/rt-introduce-cpu-chill.patch
new file mode 100644 (file)
index 0000000..847544d
--- /dev/null
@@ -0,0 +1,129 @@
+Subject: rt: Introduce cpu_chill()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 07 Mar 2012 20:51:03 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Retry loops on RT might loop forever when the modifying side was
+preempted. Add cpu_chill() to replace cpu_relax(). cpu_chill()
+defaults to cpu_relax() for non RT. On RT it puts the looping task to
+sleep for a tick so the preempted task can make progress.
+
+Steven Rostedt changed it to use a hrtimer instead of msleep():
+|
+|Ulrich Obergfell pointed out that cpu_chill() calls msleep() which is woken
+|up by the ksoftirqd running the TIMER softirq. But as the cpu_chill() is
+|called from softirq context, it may block the ksoftirqd() from running, in
+|which case, it may never wake up the msleep() causing the deadlock.
+|
+|I checked the vmcore, and irq/74-qla2xxx is stuck in the msleep() call,
+|running on CPU 8. The one ksoftirqd that is stuck, happens to be the one that
+|runs on CPU 8, and it is blocked on a lock held by irq/74-qla2xxx. As that
+|ksoftirqd is the one that will wake up irq/74-qla2xxx, and it happens to be
+|blocked on a lock that irq/74-qla2xxx holds, we have our deadlock.
+|
+|The solution is not to convert the cpu_chill() back to a cpu_relax() as that
+|will re-create a possible live lock that the cpu_chill() fixed earlier, and may
+|also leave this bug open on other softirqs. The fix is to remove the
+|dependency on ksoftirqd from cpu_chill(). That is, instead of calling
+|msleep() that requires ksoftirqd to wake it up, use the
+|hrtimer_nanosleep() code that does the wakeup from hard irq context.
+|
+||Looks to be the lock of the block softirq. I don't have the core dump
+||anymore, but from what I could tell the ksoftirqd was blocked on the
+||block softirq lock, where the block softirq handler did a msleep
+||(called by the qla2xxx interrupt handler).
+||
+||Looking at trigger_softirq() in block/blk-softirq.c, it can do a
+||smp_callfunction() to another cpu to run the block softirq. If that
+||happens to be the cpu where the qla2xx irq handler is doing the block
+||softirq and is in a middle of a msleep(), I believe the ksoftirqd will
+||try to run the softirq. If it does that, then BOOM, it's deadlocked
+||because the ksoftirqd will never run the timer softirq either.
+|
+||I should have also stated that it was only one lock that was involved.
+||But the lock owner was doing a msleep() that requires a wakeup by
+||ksoftirqd to continue. If ksoftirqd happens to be blocked on a lock
+||held by the msleep() caller, then you have your deadlock.
+||
+||It's best not to have any softirqs going to sleep requiring another
+||softirq to wake it up. Note, if we ever require a timer softirq to do a
+||cpu_chill() it will most definitely hit this deadlock.
+
++ bigeasy: add PF_NOFREEZE:
+| [....] Waiting for /dev to be fully populated...
+| =====================================
+| [ BUG: udevd/229 still has locks held! ]
+| 3.12.11-rt17 #23 Not tainted
+| -------------------------------------
+| 1 lock held by udevd/229:
+|  #0:  (&type->i_mutex_dir_key#2){+.+.+.}, at: lookup_slow+0x28/0x98
+|
+| stack backtrace:
+| CPU: 0 PID: 229 Comm: udevd Not tainted 3.12.11-rt17 #23
+| (unwind_backtrace+0x0/0xf8) from (show_stack+0x10/0x14)
+| (show_stack+0x10/0x14) from (dump_stack+0x74/0xbc)
+| (dump_stack+0x74/0xbc) from (do_nanosleep+0x120/0x160)
+| (do_nanosleep+0x120/0x160) from (hrtimer_nanosleep+0x90/0x110)
+| (hrtimer_nanosleep+0x90/0x110) from (cpu_chill+0x30/0x38)
+| (cpu_chill+0x30/0x38) from (dentry_kill+0x158/0x1ec)
+| (dentry_kill+0x158/0x1ec) from (dput+0x74/0x15c)
+| (dput+0x74/0x15c) from (lookup_real+0x4c/0x50)
+| (lookup_real+0x4c/0x50) from (__lookup_hash+0x34/0x44)
+| (__lookup_hash+0x34/0x44) from (lookup_slow+0x38/0x98)
+| (lookup_slow+0x38/0x98) from (path_lookupat+0x208/0x7fc)
+| (path_lookupat+0x208/0x7fc) from (filename_lookup+0x20/0x60)
+| (filename_lookup+0x20/0x60) from (user_path_at_empty+0x50/0x7c)
+| (user_path_at_empty+0x50/0x7c) from (user_path_at+0x14/0x1c)
+| (user_path_at+0x14/0x1c) from (vfs_fstatat+0x48/0x94)
+| (vfs_fstatat+0x48/0x94) from (SyS_stat64+0x14/0x30)
+| (SyS_stat64+0x14/0x30) from (ret_fast_syscall+0x0/0x48)
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/delay.h |    6 ++++++
+ kernel/time/hrtimer.c |   19 +++++++++++++++++++
+ 2 files changed, 25 insertions(+)
+
+--- a/include/linux/delay.h
++++ b/include/linux/delay.h
+@@ -52,4 +52,10 @@ static inline void ssleep(unsigned int s
+       msleep(seconds * 1000);
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++extern void cpu_chill(void);
++#else
++# define cpu_chill()  cpu_relax()
++#endif
++
+ #endif /* defined(_LINUX_DELAY_H) */
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -1768,6 +1768,25 @@ SYSCALL_DEFINE2(nanosleep, struct timesp
+       return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++/*
++ * Sleep for 1 ms in hope whoever holds what we want will let it go.
++ */
++void cpu_chill(void)
++{
++      struct timespec tu = {
++              .tv_nsec = NSEC_PER_MSEC,
++      };
++      unsigned int freeze_flag = current->flags & PF_NOFREEZE;
++
++      current->flags |= PF_NOFREEZE;
++      hrtimer_nanosleep(&tu, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
++      if (!freeze_flag)
++              current->flags &= ~PF_NOFREEZE;
++}
++EXPORT_SYMBOL(cpu_chill);
++#endif
++
+ /*
+  * Functions related to boot-time initialization:
+  */
diff --git a/patches/features/all/rt/rt-local-irq-lock.patch b/patches/features/all/rt/rt-local-irq-lock.patch
new file mode 100644 (file)
index 0000000..5bbffb0
--- /dev/null
@@ -0,0 +1,326 @@
+Subject: rt: Add local irq locks
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 20 Jun 2011 09:03:47 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Introduce locallock. For !RT this maps to preempt_disable()/
+local_irq_disable() so there is not much that changes. For RT this will
+map to a spinlock. This makes preemption possible and locked "ressource"
+gets the lockdep anotation it wouldn't have otherwise. The locks are
+recursive for owner == current. Also, all locks user migrate_disable()
+which ensures that the task is not migrated to another CPU while the lock
+is held and the owner is preempted.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/locallock.h |  266 ++++++++++++++++++++++++++++++++++++++++++++++
+ include/linux/percpu.h    |   29 +++++
+ 2 files changed, 295 insertions(+)
+
+--- /dev/null
++++ b/include/linux/locallock.h
+@@ -0,0 +1,266 @@
++#ifndef _LINUX_LOCALLOCK_H
++#define _LINUX_LOCALLOCK_H
++
++#include <linux/percpu.h>
++#include <linux/spinlock.h>
++
++#ifdef CONFIG_PREEMPT_RT_BASE
++
++#ifdef CONFIG_DEBUG_SPINLOCK
++# define LL_WARN(cond)        WARN_ON(cond)
++#else
++# define LL_WARN(cond)        do { } while (0)
++#endif
++
++/*
++ * per cpu lock based substitute for local_irq_*()
++ */
++struct local_irq_lock {
++      spinlock_t              lock;
++      struct task_struct      *owner;
++      int                     nestcnt;
++      unsigned long           flags;
++};
++
++#define DEFINE_LOCAL_IRQ_LOCK(lvar)                                   \
++      DEFINE_PER_CPU(struct local_irq_lock, lvar) = {                 \
++              .lock = __SPIN_LOCK_UNLOCKED((lvar).lock) }
++
++#define DECLARE_LOCAL_IRQ_LOCK(lvar)                                  \
++      DECLARE_PER_CPU(struct local_irq_lock, lvar)
++
++#define local_irq_lock_init(lvar)                                     \
++      do {                                                            \
++              int __cpu;                                              \
++              for_each_possible_cpu(__cpu)                            \
++                      spin_lock_init(&per_cpu(lvar, __cpu).lock);     \
++      } while (0)
++
++/*
++ * spin_lock|trylock|unlock_local flavour that does not migrate disable
++ * used for __local_lock|trylock|unlock where get_local_var/put_local_var
++ * already takes care of the migrate_disable/enable
++ * for CONFIG_PREEMPT_BASE map to the normal spin_* calls.
++ */
++# define spin_lock_local(lock)                        spin_lock(lock)
++# define spin_trylock_local(lock)             spin_trylock(lock)
++# define spin_unlock_local(lock)              spin_unlock(lock)
++
++static inline void __local_lock(struct local_irq_lock *lv)
++{
++      if (lv->owner != current) {
++              spin_lock_local(&lv->lock);
++              LL_WARN(lv->owner);
++              LL_WARN(lv->nestcnt);
++              lv->owner = current;
++      }
++      lv->nestcnt++;
++}
++
++#define local_lock(lvar)                                      \
++      do { __local_lock(&get_local_var(lvar)); } while (0)
++
++static inline int __local_trylock(struct local_irq_lock *lv)
++{
++      if (lv->owner != current && spin_trylock_local(&lv->lock)) {
++              LL_WARN(lv->owner);
++              LL_WARN(lv->nestcnt);
++              lv->owner = current;
++              lv->nestcnt = 1;
++              return 1;
++      }
++      return 0;
++}
++
++#define local_trylock(lvar)                                           \
++      ({                                                              \
++              int __locked;                                           \
++              __locked = __local_trylock(&get_local_var(lvar));       \
++              if (!__locked)                                          \
++                      put_local_var(lvar);                            \
++              __locked;                                               \
++      })
++
++static inline void __local_unlock(struct local_irq_lock *lv)
++{
++      LL_WARN(lv->nestcnt == 0);
++      LL_WARN(lv->owner != current);
++      if (--lv->nestcnt)
++              return;
++
++      lv->owner = NULL;
++      spin_unlock_local(&lv->lock);
++}
++
++#define local_unlock(lvar)                                    \
++      do {                                                    \
++              __local_unlock(this_cpu_ptr(&lvar));            \
++              put_local_var(lvar);                            \
++      } while (0)
++
++static inline void __local_lock_irq(struct local_irq_lock *lv)
++{
++      spin_lock_irqsave(&lv->lock, lv->flags);
++      LL_WARN(lv->owner);
++      LL_WARN(lv->nestcnt);
++      lv->owner = current;
++      lv->nestcnt = 1;
++}
++
++#define local_lock_irq(lvar)                                          \
++      do { __local_lock_irq(&get_local_var(lvar)); } while (0)
++
++#define local_lock_irq_on(lvar, cpu)                                  \
++      do { __local_lock_irq(&per_cpu(lvar, cpu)); } while (0)
++
++static inline void __local_unlock_irq(struct local_irq_lock *lv)
++{
++      LL_WARN(!lv->nestcnt);
++      LL_WARN(lv->owner != current);
++      lv->owner = NULL;
++      lv->nestcnt = 0;
++      spin_unlock_irq(&lv->lock);
++}
++
++#define local_unlock_irq(lvar)                                                \
++      do {                                                            \
++              __local_unlock_irq(this_cpu_ptr(&lvar));                \
++              put_local_var(lvar);                                    \
++      } while (0)
++
++#define local_unlock_irq_on(lvar, cpu)                                        \
++      do {                                                            \
++              __local_unlock_irq(&per_cpu(lvar, cpu));                \
++      } while (0)
++
++static inline int __local_lock_irqsave(struct local_irq_lock *lv)
++{
++      if (lv->owner != current) {
++              __local_lock_irq(lv);
++              return 0;
++      } else {
++              lv->nestcnt++;
++              return 1;
++      }
++}
++
++#define local_lock_irqsave(lvar, _flags)                              \
++      do {                                                            \
++              if (__local_lock_irqsave(&get_local_var(lvar)))         \
++                      put_local_var(lvar);                            \
++              _flags = __this_cpu_read(lvar.flags);                   \
++      } while (0)
++
++#define local_lock_irqsave_on(lvar, _flags, cpu)                      \
++      do {                                                            \
++              __local_lock_irqsave(&per_cpu(lvar, cpu));              \
++              _flags = per_cpu(lvar, cpu).flags;                      \
++      } while (0)
++
++static inline int __local_unlock_irqrestore(struct local_irq_lock *lv,
++                                          unsigned long flags)
++{
++      LL_WARN(!lv->nestcnt);
++      LL_WARN(lv->owner != current);
++      if (--lv->nestcnt)
++              return 0;
++
++      lv->owner = NULL;
++      spin_unlock_irqrestore(&lv->lock, lv->flags);
++      return 1;
++}
++
++#define local_unlock_irqrestore(lvar, flags)                          \
++      do {                                                            \
++              if (__local_unlock_irqrestore(this_cpu_ptr(&lvar), flags)) \
++                      put_local_var(lvar);                            \
++      } while (0)
++
++#define local_unlock_irqrestore_on(lvar, flags, cpu)                  \
++      do {                                                            \
++              __local_unlock_irqrestore(&per_cpu(lvar, cpu), flags);  \
++      } while (0)
++
++#define local_spin_trylock_irq(lvar, lock)                            \
++      ({                                                              \
++              int __locked;                                           \
++              local_lock_irq(lvar);                                   \
++              __locked = spin_trylock(lock);                          \
++              if (!__locked)                                          \
++                      local_unlock_irq(lvar);                         \
++              __locked;                                               \
++      })
++
++#define local_spin_lock_irq(lvar, lock)                                       \
++      do {                                                            \
++              local_lock_irq(lvar);                                   \
++              spin_lock(lock);                                        \
++      } while (0)
++
++#define local_spin_unlock_irq(lvar, lock)                             \
++      do {                                                            \
++              spin_unlock(lock);                                      \
++              local_unlock_irq(lvar);                                 \
++      } while (0)
++
++#define local_spin_lock_irqsave(lvar, lock, flags)                    \
++      do {                                                            \
++              local_lock_irqsave(lvar, flags);                        \
++              spin_lock(lock);                                        \
++      } while (0)
++
++#define local_spin_unlock_irqrestore(lvar, lock, flags)                       \
++      do {                                                            \
++              spin_unlock(lock);                                      \
++              local_unlock_irqrestore(lvar, flags);                   \
++      } while (0)
++
++#define get_locked_var(lvar, var)                                     \
++      (*({                                                            \
++              local_lock(lvar);                                       \
++              this_cpu_ptr(&var);                                     \
++      }))
++
++#define put_locked_var(lvar, var)     local_unlock(lvar);
++
++#define local_lock_cpu(lvar)                                          \
++      ({                                                              \
++              local_lock(lvar);                                       \
++              smp_processor_id();                                     \
++      })
++
++#define local_unlock_cpu(lvar)                        local_unlock(lvar)
++
++#else /* PREEMPT_RT_BASE */
++
++#define DEFINE_LOCAL_IRQ_LOCK(lvar)           __typeof__(const int) lvar
++#define DECLARE_LOCAL_IRQ_LOCK(lvar)          extern __typeof__(const int) lvar
++
++static inline void local_irq_lock_init(int lvar) { }
++
++#define local_lock(lvar)                      preempt_disable()
++#define local_unlock(lvar)                    preempt_enable()
++#define local_lock_irq(lvar)                  local_irq_disable()
++#define local_lock_irq_on(lvar, cpu)          local_irq_disable()
++#define local_unlock_irq(lvar)                        local_irq_enable()
++#define local_unlock_irq_on(lvar, cpu)                local_irq_enable()
++#define local_lock_irqsave(lvar, flags)               local_irq_save(flags)
++#define local_unlock_irqrestore(lvar, flags)  local_irq_restore(flags)
++
++#define local_spin_trylock_irq(lvar, lock)    spin_trylock_irq(lock)
++#define local_spin_lock_irq(lvar, lock)               spin_lock_irq(lock)
++#define local_spin_unlock_irq(lvar, lock)     spin_unlock_irq(lock)
++#define local_spin_lock_irqsave(lvar, lock, flags)    \
++      spin_lock_irqsave(lock, flags)
++#define local_spin_unlock_irqrestore(lvar, lock, flags)       \
++      spin_unlock_irqrestore(lock, flags)
++
++#define get_locked_var(lvar, var)             get_cpu_var(var)
++#define put_locked_var(lvar, var)             put_cpu_var(var)
++
++#define local_lock_cpu(lvar)                  get_cpu()
++#define local_unlock_cpu(lvar)                        put_cpu()
++
++#endif
++
++#endif
+--- a/include/linux/percpu.h
++++ b/include/linux/percpu.h
+@@ -18,6 +18,35 @@
+ #define PERCPU_MODULE_RESERVE         0
+ #endif
++#ifdef CONFIG_PREEMPT_RT_FULL
++
++#define get_local_var(var) (*({       \
++      migrate_disable();      \
++      this_cpu_ptr(&var);     }))
++
++#define put_local_var(var) do {       \
++      (void)&(var);           \
++      migrate_enable();       \
++} while (0)
++
++# define get_local_ptr(var) ({        \
++      migrate_disable();      \
++      this_cpu_ptr(var);      })
++
++# define put_local_ptr(var) do {      \
++      (void)(var);                    \
++      migrate_enable();               \
++} while (0)
++
++#else
++
++#define get_local_var(var)    get_cpu_var(var)
++#define put_local_var(var)    put_cpu_var(var)
++#define get_local_ptr(var)    get_cpu_ptr(var)
++#define put_local_ptr(var)    put_cpu_ptr(var)
++
++#endif
++
+ /* minimum unit size, also is the maximum supported allocation size */
+ #define PCPU_MIN_UNIT_SIZE            PFN_ALIGN(32 << 10)
diff --git a/patches/features/all/rt/rt-locking-Reenable-migration-accross-schedule.patch b/patches/features/all/rt/rt-locking-Reenable-migration-accross-schedule.patch
new file mode 100644 (file)
index 0000000..76a9303
--- /dev/null
@@ -0,0 +1,112 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 8 Feb 2016 16:15:28 +0100
+Subject: rt/locking: Reenable migration accross schedule
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+We currently disable migration across lock acquisition. That includes the part
+where we block on the lock and schedule out. We cannot disable migration after
+taking the lock as that would cause a possible lock inversion.
+
+But we can be smart and enable migration when we block and schedule out. That
+allows the scheduler to place the task freely at least if this is the first
+migrate disable level. For nested locking this does not help at all.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/locking/rtmutex.c |   32 ++++++++++++++++++++------------
+ 1 file changed, 20 insertions(+), 12 deletions(-)
+
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -986,14 +986,19 @@ static int __try_to_take_rt_mutex(struct
+  * preemptible spin_lock functions:
+  */
+ static inline void rt_spin_lock_fastlock(struct rt_mutex *lock,
+-                                       void  (*slowfn)(struct rt_mutex *lock))
++                                       void  (*slowfn)(struct rt_mutex *lock,
++                                                       bool mg_off),
++                                       bool do_mig_dis)
+ {
+       might_sleep_no_state_check();
++      if (do_mig_dis)
++              migrate_disable();
++
+       if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
+               return;
+       else
+-              slowfn(lock);
++              slowfn(lock, do_mig_dis);
+ }
+ static inline void rt_spin_lock_fastunlock(struct rt_mutex *lock,
+@@ -1051,7 +1056,8 @@ static int task_blocks_on_rt_mutex(struc
+  * We store the current state under p->pi_lock in p->saved_state and
+  * the try_to_wake_up() code handles this accordingly.
+  */
+-static void  noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock)
++static void  noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock,
++                                                  bool mg_off)
+ {
+       struct task_struct *lock_owner, *self = current;
+       struct rt_mutex_waiter waiter, *top_waiter;
+@@ -1095,8 +1101,13 @@ static void  noinline __sched rt_spin_lo
+               debug_rt_mutex_print_deadlock(&waiter);
+-              if (top_waiter != &waiter || adaptive_wait(lock, lock_owner))
++              if (top_waiter != &waiter || adaptive_wait(lock, lock_owner)) {
++                      if (mg_off)
++                              migrate_enable();
+                       schedule();
++                      if (mg_off)
++                              migrate_disable();
++              }
+               raw_spin_lock_irqsave(&lock->wait_lock, flags);
+@@ -1165,38 +1176,35 @@ static void  noinline __sched rt_spin_lo
+ void __lockfunc rt_spin_lock__no_mg(spinlock_t *lock)
+ {
+-      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
++      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock, false);
+       spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
+ }
+ EXPORT_SYMBOL(rt_spin_lock__no_mg);
+ void __lockfunc rt_spin_lock(spinlock_t *lock)
+ {
+-      migrate_disable();
+-      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
++      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock, true);
+       spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
+ }
+ EXPORT_SYMBOL(rt_spin_lock);
+ void __lockfunc __rt_spin_lock(struct rt_mutex *lock)
+ {
+-      migrate_disable();
+-      rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock);
++      rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock, true);
+ }
+ EXPORT_SYMBOL(__rt_spin_lock);
+ void __lockfunc __rt_spin_lock__no_mg(struct rt_mutex *lock)
+ {
+-      rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock);
++      rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock, false);
+ }
+ EXPORT_SYMBOL(__rt_spin_lock__no_mg);
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+ void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass)
+ {
+-      migrate_disable();
+-      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
+       spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
++      rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock, true);
+ }
+ EXPORT_SYMBOL(rt_spin_lock_nested);
+ #endif
diff --git a/patches/features/all/rt/rt-preempt-base-config.patch b/patches/features/all/rt/rt-preempt-base-config.patch
new file mode 100644 (file)
index 0000000..ecbcba2
--- /dev/null
@@ -0,0 +1,54 @@
+Subject: rt: Provide PREEMPT_RT_BASE config switch
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 17 Jun 2011 12:39:57 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Introduce PREEMPT_RT_BASE which enables parts of
+PREEMPT_RT_FULL. Forces interrupt threading and enables some of the RT
+substitutions for testing.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/Kconfig.preempt |   19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+--- a/kernel/Kconfig.preempt
++++ b/kernel/Kconfig.preempt
+@@ -1,3 +1,10 @@
++config PREEMPT
++      bool
++      select PREEMPT_COUNT
++
++config PREEMPT_RT_BASE
++      bool
++      select PREEMPT
+ choice
+       prompt "Preemption Model"
+@@ -33,9 +40,9 @@ config PREEMPT_VOLUNTARY
+         Select this if you are building a kernel for a desktop system.
+-config PREEMPT
++config PREEMPT__LL
+       bool "Preemptible Kernel (Low-Latency Desktop)"
+-      select PREEMPT_COUNT
++      select PREEMPT
+       select UNINLINE_SPIN_UNLOCK if !ARCH_INLINE_SPIN_UNLOCK
+       help
+         This option reduces the latency of the kernel by making
+@@ -52,6 +59,14 @@ config PREEMPT
+         embedded system with latency requirements in the milliseconds
+         range.
++config PREEMPT_RTB
++      bool "Preemptible Kernel (Basic RT)"
++      select PREEMPT_RT_BASE
++      help
++        This option is basically the same as (Low-Latency Desktop) but
++        enables changes which are preliminary for the full preemptible
++        RT kernel.
++
+ endchoice
+ config PREEMPT_COUNT
diff --git a/patches/features/all/rt/rt-serial-warn-fix.patch b/patches/features/all/rt/rt-serial-warn-fix.patch
new file mode 100644 (file)
index 0000000..b2d8bd8
--- /dev/null
@@ -0,0 +1,38 @@
+Subject: rt: Improve the serial console PASS_LIMIT
+From: Ingo Molnar <mingo@elte.hu>
+Date: Wed Dec 14 13:05:54 CET 2011
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Beyond the warning:
+
+ drivers/tty/serial/8250/8250.c:1613:6: warning: unused variable ‘pass_counter’ [-Wunused-variable]
+
+the solution of just looping infinitely was ugly - up it to 1 million to
+give it a chance to continue in some really ugly situation.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/tty/serial/8250/8250_core.c |   11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+--- a/drivers/tty/serial/8250/8250_core.c
++++ b/drivers/tty/serial/8250/8250_core.c
+@@ -58,7 +58,16 @@ static struct uart_driver serial8250_reg
+ static unsigned int skip_txen_test; /* force skip of txen test at init time */
+-#define PASS_LIMIT    512
++/*
++ * On -rt we can have a more delays, and legitimately
++ * so - so don't drop work spuriously and spam the
++ * syslog:
++ */
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define PASS_LIMIT   1000000
++#else
++# define PASS_LIMIT   512
++#endif
+ #include <asm/serial.h>
+ /*
diff --git a/patches/features/all/rt/rtmutex--Handle-non-enqueued-waiters-gracefully.patch b/patches/features/all/rt/rtmutex--Handle-non-enqueued-waiters-gracefully.patch
new file mode 100644 (file)
index 0000000..67db568
--- /dev/null
@@ -0,0 +1,33 @@
+Subject: rtmutex: Handle non enqueued waiters gracefully
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 06 Nov 2015 18:51:03 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Yimin debugged that in case of a PI wakeup in progress when
+rt_mutex_start_proxy_lock() calls task_blocks_on_rt_mutex() the latter
+returns -EAGAIN and in consequence the remove_waiter() call runs into
+a BUG_ON() because there is nothing to remove.
+
+Guard it with rt_mutex_has_waiters(). This is a quick fix which is
+easy to backport. The proper fix is to have a central check in
+remove_waiter() so we can call it unconditionally.
+
+Reported-and-debugged-by: Yimin Deng <yimin11.deng@gmail.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: stable-rt@vger.kernel.org
+
+---
+ kernel/locking/rtmutex.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1682,7 +1682,7 @@ int __rt_mutex_start_proxy_lock(struct r
+               ret = 0;
+       }
+-      if (unlikely(ret))
++      if (ret && rt_mutex_has_waiters(lock))
+               remove_waiter(lock, waiter);
+       debug_rt_mutex_print_deadlock(waiter);
diff --git a/patches/features/all/rt/rtmutex-Make-lock_killable-work.patch b/patches/features/all/rt/rtmutex-Make-lock_killable-work.patch
new file mode 100644 (file)
index 0000000..0b0e327
--- /dev/null
@@ -0,0 +1,45 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 1 Apr 2017 12:50:59 +0200
+Subject: [PATCH] rtmutex: Make lock_killable work
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Locking an rt mutex killable does not work because signal handling is
+restricted to TASK_INTERRUPTIBLE.
+
+Use signal_pending_state() unconditionaly.
+
+Cc: rt-stable@vger.kernel.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/locking/rtmutex.c |   19 +++++++------------
+ 1 file changed, 7 insertions(+), 12 deletions(-)
+
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1206,18 +1206,13 @@ static int __sched
+               if (try_to_take_rt_mutex(lock, current, waiter))
+                       break;
+-              /*
+-               * TASK_INTERRUPTIBLE checks for signals and
+-               * timeout. Ignored otherwise.
+-               */
+-              if (unlikely(state == TASK_INTERRUPTIBLE)) {
+-                      /* Signal pending? */
+-                      if (signal_pending(current))
+-                              ret = -EINTR;
+-                      if (timeout && !timeout->task)
+-                              ret = -ETIMEDOUT;
+-                      if (ret)
+-                              break;
++              if (timeout && !timeout->task) {
++                      ret = -ETIMEDOUT;
++                      break;
++              }
++              if (signal_pending_state(state, current)) {
++                      ret = -EINTR;
++                      break;
+               }
+               raw_spin_unlock_irq(&lock->wait_lock);
diff --git a/patches/features/all/rt/rtmutex-Provide-locked-slowpath.patch b/patches/features/all/rt/rtmutex-Provide-locked-slowpath.patch
new file mode 100644 (file)
index 0000000..be36085
--- /dev/null
@@ -0,0 +1,150 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 1 Apr 2017 12:51:01 +0200
+Subject: [PATCH] rtmutex: Provide locked slowpath
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The new rt rwsem implementation needs rtmutex::wait_lock to protect struct
+rw_semaphore. Dropping the lock and reaquiring it for locking the rtmutex
+would open a race window.
+
+Split out the inner workings of the locked slowpath so it can be called with
+wait_lock held.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/locking/rtmutex.c        |   72 +++++++++++++++++++++++-----------------
+ kernel/locking/rtmutex_common.h |    9 +++++
+ 2 files changed, 51 insertions(+), 30 deletions(-)
+
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1750,36 +1750,18 @@ static void ww_mutex_account_lock(struct
+ }
+ #endif
+-/*
+- * Slow path lock function:
+- */
+-static int __sched
+-rt_mutex_slowlock(struct rt_mutex *lock, int state,
+-                struct hrtimer_sleeper *timeout,
+-                enum rtmutex_chainwalk chwalk,
+-                struct ww_acquire_ctx *ww_ctx)
++int __sched rt_mutex_slowlock_locked(struct rt_mutex *lock, int state,
++                                   struct hrtimer_sleeper *timeout,
++                                   enum rtmutex_chainwalk chwalk,
++                                   struct ww_acquire_ctx *ww_ctx,
++                                   struct rt_mutex_waiter *waiter)
+ {
+-      struct rt_mutex_waiter waiter;
+-      unsigned long flags;
+-      int ret = 0;
+-
+-      rt_mutex_init_waiter(&waiter, false);
+-
+-      /*
+-       * Technically we could use raw_spin_[un]lock_irq() here, but this can
+-       * be called in early boot if the cmpxchg() fast path is disabled
+-       * (debug, no architecture support). In this case we will acquire the
+-       * rtmutex with lock->wait_lock held. But we cannot unconditionally
+-       * enable interrupts in that early boot case. So we need to use the
+-       * irqsave/restore variants.
+-       */
+-      raw_spin_lock_irqsave(&lock->wait_lock, flags);
++      int ret;
+       /* Try to acquire the lock again: */
+       if (try_to_take_rt_mutex(lock, current, NULL)) {
+               if (ww_ctx)
+                       ww_mutex_account_lock(lock, ww_ctx);
+-              raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
+               return 0;
+       }
+@@ -1789,13 +1771,13 @@ rt_mutex_slowlock(struct rt_mutex *lock,
+       if (unlikely(timeout))
+               hrtimer_start_expires(&timeout->timer, HRTIMER_MODE_ABS);
+-      ret = task_blocks_on_rt_mutex(lock, &waiter, current, chwalk);
++      ret = task_blocks_on_rt_mutex(lock, waiter, current, chwalk);
+-      if (likely(!ret))
++      if (likely(!ret)) {
+               /* sleep on the mutex */
+-              ret = __rt_mutex_slowlock(lock, state, timeout, &waiter,
++              ret = __rt_mutex_slowlock(lock, state, timeout, waiter,
+                                         ww_ctx);
+-      else if (ww_ctx) {
++      } else if (ww_ctx) {
+               /* ww_mutex received EDEADLK, let it become EALREADY */
+               ret = __mutex_lock_check_stamp(lock, ww_ctx);
+               BUG_ON(!ret);
+@@ -1804,10 +1786,10 @@ rt_mutex_slowlock(struct rt_mutex *lock,
+       if (unlikely(ret)) {
+               __set_current_state(TASK_RUNNING);
+               if (rt_mutex_has_waiters(lock))
+-                      remove_waiter(lock, &waiter);
++                      remove_waiter(lock, waiter);
+               /* ww_mutex want to report EDEADLK/EALREADY, let them */
+               if (!ww_ctx)
+-                      rt_mutex_handle_deadlock(ret, chwalk, &waiter);
++                      rt_mutex_handle_deadlock(ret, chwalk, waiter);
+       } else if (ww_ctx) {
+               ww_mutex_account_lock(lock, ww_ctx);
+       }
+@@ -1817,6 +1799,36 @@ rt_mutex_slowlock(struct rt_mutex *lock,
+        * unconditionally. We might have to fix that up.
+        */
+       fixup_rt_mutex_waiters(lock);
++      return ret;
++}
++
++/*
++ * Slow path lock function:
++ */
++static int __sched
++rt_mutex_slowlock(struct rt_mutex *lock, int state,
++                struct hrtimer_sleeper *timeout,
++                enum rtmutex_chainwalk chwalk,
++                struct ww_acquire_ctx *ww_ctx)
++{
++      struct rt_mutex_waiter waiter;
++      unsigned long flags;
++      int ret = 0;
++
++      rt_mutex_init_waiter(&waiter, false);
++
++      /*
++       * Technically we could use raw_spin_[un]lock_irq() here, but this can
++       * be called in early boot if the cmpxchg() fast path is disabled
++       * (debug, no architecture support). In this case we will acquire the
++       * rtmutex with lock->wait_lock held. But we cannot unconditionally
++       * enable interrupts in that early boot case. So we need to use the
++       * irqsave/restore variants.
++       */
++      raw_spin_lock_irqsave(&lock->wait_lock, flags);
++
++      ret = rt_mutex_slowlock_locked(lock, state, timeout, chwalk, ww_ctx,
++                                     &waiter);
+       raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -129,6 +129,15 @@ extern bool __rt_mutex_futex_unlock(stru
+ extern void rt_mutex_adjust_prio(struct task_struct *task);
++/* RW semaphore special interface */
++struct ww_acquire_ctx;
++
++int __sched rt_mutex_slowlock_locked(struct rt_mutex *lock, int state,
++                                   struct hrtimer_sleeper *timeout,
++                                   enum rtmutex_chainwalk chwalk,
++                                   struct ww_acquire_ctx *ww_ctx,
++                                   struct rt_mutex_waiter *waiter);
++
+ #ifdef CONFIG_DEBUG_RT_MUTEXES
+ # include "rtmutex-debug.h"
+ #else
diff --git a/patches/features/all/rt/rtmutex-Provide-rt_mutex_lock_state.patch b/patches/features/all/rt/rtmutex-Provide-rt_mutex_lock_state.patch
new file mode 100644 (file)
index 0000000..47af3a2
--- /dev/null
@@ -0,0 +1,112 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 1 Apr 2017 12:51:00 +0200
+Subject: [PATCH] rtmutex: Provide rt_mutex_lock_state()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Allow rtmutex to be locked with arbitrary states. Preparatory patch for the
+rt rwsem rework.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/rtmutex.h  |    1 +
+ kernel/locking/rtmutex.c |   44 +++++++++++++++++++++++++-------------------
+ 2 files changed, 26 insertions(+), 19 deletions(-)
+
+--- a/include/linux/rtmutex.h
++++ b/include/linux/rtmutex.h
+@@ -105,6 +105,7 @@ extern void __rt_mutex_init(struct rt_mu
+ extern void rt_mutex_destroy(struct rt_mutex *lock);
+ extern void rt_mutex_lock(struct rt_mutex *lock);
++extern int rt_mutex_lock_state(struct rt_mutex *lock, int state);
+ extern int rt_mutex_lock_interruptible(struct rt_mutex *lock);
+ extern int rt_mutex_lock_killable(struct rt_mutex *lock);
+ extern int rt_mutex_timed_lock(struct rt_mutex *lock,
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -2003,21 +2003,32 @@ rt_mutex_fastunlock(struct rt_mutex *loc
+ }
+ /**
++ * rt_mutex_lock_state - lock a rt_mutex with a given state
++ *
++ * @lock:     The rt_mutex to be locked
++ * @state:    The state to set when blocking on the rt_mutex
++ */
++int __sched rt_mutex_lock_state(struct rt_mutex *lock, int state)
++{
++      might_sleep();
++
++      return rt_mutex_fastlock(lock, state, NULL, rt_mutex_slowlock);
++}
++
++/**
+  * rt_mutex_lock - lock a rt_mutex
+  *
+  * @lock: the rt_mutex to be locked
+  */
+ void __sched rt_mutex_lock(struct rt_mutex *lock)
+ {
+-      might_sleep();
+-
+-      rt_mutex_fastlock(lock, TASK_UNINTERRUPTIBLE, NULL, rt_mutex_slowlock);
++      rt_mutex_lock_state(lock, TASK_UNINTERRUPTIBLE);
+ }
+ EXPORT_SYMBOL_GPL(rt_mutex_lock);
+ /**
+  * rt_mutex_lock_interruptible - lock a rt_mutex interruptible
+- *
++ **
+  * @lock:             the rt_mutex to be locked
+  *
+  * Returns:
+@@ -2026,20 +2037,10 @@ EXPORT_SYMBOL_GPL(rt_mutex_lock);
+  */
+ int __sched rt_mutex_lock_interruptible(struct rt_mutex *lock)
+ {
+-      might_sleep();
+-
+-      return rt_mutex_fastlock(lock, TASK_INTERRUPTIBLE, NULL, rt_mutex_slowlock);
++      return rt_mutex_lock_state(lock, TASK_INTERRUPTIBLE);
+ }
+ EXPORT_SYMBOL_GPL(rt_mutex_lock_interruptible);
+-/*
+- * Futex variant, must not use fastpath.
+- */
+-int __sched rt_mutex_futex_trylock(struct rt_mutex *lock)
+-{
+-      return rt_mutex_slowtrylock(lock);
+-}
+-
+ /**
+  * rt_mutex_lock_killable - lock a rt_mutex killable
+  *
+@@ -2049,16 +2050,21 @@ int __sched rt_mutex_futex_trylock(struc
+  * Returns:
+  *  0          on success
+  * -EINTR      when interrupted by a signal
+- * -EDEADLK    when the lock would deadlock (when deadlock detection is on)
+  */
+ int __sched rt_mutex_lock_killable(struct rt_mutex *lock)
+ {
+-      might_sleep();
+-
+-      return rt_mutex_fastlock(lock, TASK_KILLABLE, NULL, rt_mutex_slowlock);
++      return rt_mutex_lock_state(lock, TASK_KILLABLE);
+ }
+ EXPORT_SYMBOL_GPL(rt_mutex_lock_killable);
++/*
++ * Futex variant, must not use fastpath.
++ */
++int __sched rt_mutex_futex_trylock(struct rt_mutex *lock)
++{
++      return rt_mutex_slowtrylock(lock);
++}
++
+ /**
+  * rt_mutex_timed_lock - lock a rt_mutex interruptible
+  *                    the timeout structure is provided
diff --git a/patches/features/all/rt/rtmutex-add-a-first-shot-of-ww_mutex.patch b/patches/features/all/rt/rtmutex-add-a-first-shot-of-ww_mutex.patch
new file mode 100644 (file)
index 0000000..c01461e
--- /dev/null
@@ -0,0 +1,412 @@
+From: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
+Date: Mon, 28 Oct 2013 09:36:37 +0100
+Subject: rtmutex: Add RT aware ww locks
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+lockdep says:
+| --------------------------------------------------------------------------
+| | Wound/wait tests |
+| ---------------------
+|                 ww api failures:  ok  |  ok  |  ok  |
+|              ww contexts mixing:  ok  |  ok  |
+|            finishing ww context:  ok  |  ok  |  ok  |  ok  |
+|              locking mismatches:  ok  |  ok  |  ok  |
+|                EDEADLK handling:  ok  |  ok  |  ok  |  ok  |  ok  |  ok  |  ok  |  ok  |  ok  |  ok  |
+|          spinlock nest unlocked:  ok  |
+| -----------------------------------------------------
+|                                |block | try  |context|
+| -----------------------------------------------------
+|                         context:  ok  |  ok  |  ok  |
+|                             try:  ok  |  ok  |  ok  |
+|                           block:  ok  |  ok  |  ok  |
+|                        spinlock:  ok  |  ok  |  ok  |
+
+Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
+---
+ kernel/locking/rtmutex.c |  248 ++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 224 insertions(+), 24 deletions(-)
+
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -21,6 +21,7 @@
+ #include <linux/sched/rt.h>
+ #include <linux/sched/deadline.h>
+ #include <linux/timer.h>
++#include <linux/ww_mutex.h>
+ #include "rtmutex_common.h"
+@@ -1317,6 +1318,40 @@ EXPORT_SYMBOL(__rt_spin_lock_init);
+ #endif /* PREEMPT_RT_FULL */
++#ifdef CONFIG_PREEMPT_RT_FULL
++      static inline int __sched
++__mutex_lock_check_stamp(struct rt_mutex *lock, struct ww_acquire_ctx *ctx)
++{
++      struct ww_mutex *ww = container_of(lock, struct ww_mutex, base.lock);
++      struct ww_acquire_ctx *hold_ctx = ACCESS_ONCE(ww->ctx);
++
++      if (!hold_ctx)
++              return 0;
++
++      if (unlikely(ctx == hold_ctx))
++              return -EALREADY;
++
++      if (ctx->stamp - hold_ctx->stamp <= LONG_MAX &&
++          (ctx->stamp != hold_ctx->stamp || ctx > hold_ctx)) {
++#ifdef CONFIG_DEBUG_MUTEXES
++              DEBUG_LOCKS_WARN_ON(ctx->contending_lock);
++              ctx->contending_lock = ww;
++#endif
++              return -EDEADLK;
++      }
++
++      return 0;
++}
++#else
++      static inline int __sched
++__mutex_lock_check_stamp(struct rt_mutex *lock, struct ww_acquire_ctx *ctx)
++{
++      BUG();
++      return 0;
++}
++
++#endif
++
+ static inline int
+ try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task,
+                    struct rt_mutex_waiter *waiter)
+@@ -1580,7 +1615,8 @@ void rt_mutex_init_waiter(struct rt_mute
+ static int __sched
+ __rt_mutex_slowlock(struct rt_mutex *lock, int state,
+                   struct hrtimer_sleeper *timeout,
+-                  struct rt_mutex_waiter *waiter)
++                  struct rt_mutex_waiter *waiter,
++                  struct ww_acquire_ctx *ww_ctx)
+ {
+       int ret = 0;
+@@ -1598,6 +1634,12 @@ static int __sched
+                       break;
+               }
++              if (ww_ctx && ww_ctx->acquired > 0) {
++                      ret = __mutex_lock_check_stamp(lock, ww_ctx);
++                      if (ret)
++                              break;
++              }
++
+               raw_spin_unlock_irq(&lock->wait_lock);
+               debug_rt_mutex_print_deadlock(waiter);
+@@ -1632,13 +1674,90 @@ static void rt_mutex_handle_deadlock(int
+       }
+ }
++static __always_inline void ww_mutex_lock_acquired(struct ww_mutex *ww,
++                                                 struct ww_acquire_ctx *ww_ctx)
++{
++#ifdef CONFIG_DEBUG_MUTEXES
++      /*
++       * If this WARN_ON triggers, you used ww_mutex_lock to acquire,
++       * but released with a normal mutex_unlock in this call.
++       *
++       * This should never happen, always use ww_mutex_unlock.
++       */
++      DEBUG_LOCKS_WARN_ON(ww->ctx);
++
++      /*
++       * Not quite done after calling ww_acquire_done() ?
++       */
++      DEBUG_LOCKS_WARN_ON(ww_ctx->done_acquire);
++
++      if (ww_ctx->contending_lock) {
++              /*
++               * After -EDEADLK you tried to
++               * acquire a different ww_mutex? Bad!
++               */
++              DEBUG_LOCKS_WARN_ON(ww_ctx->contending_lock != ww);
++
++              /*
++               * You called ww_mutex_lock after receiving -EDEADLK,
++               * but 'forgot' to unlock everything else first?
++               */
++              DEBUG_LOCKS_WARN_ON(ww_ctx->acquired > 0);
++              ww_ctx->contending_lock = NULL;
++      }
++
++      /*
++       * Naughty, using a different class will lead to undefined behavior!
++       */
++      DEBUG_LOCKS_WARN_ON(ww_ctx->ww_class != ww->ww_class);
++#endif
++      ww_ctx->acquired++;
++}
++
++#ifdef CONFIG_PREEMPT_RT_FULL
++static void ww_mutex_account_lock(struct rt_mutex *lock,
++                                struct ww_acquire_ctx *ww_ctx)
++{
++      struct ww_mutex *ww = container_of(lock, struct ww_mutex, base.lock);
++      struct rt_mutex_waiter *waiter, *n;
++
++      /*
++       * This branch gets optimized out for the common case,
++       * and is only important for ww_mutex_lock.
++       */
++      ww_mutex_lock_acquired(ww, ww_ctx);
++      ww->ctx = ww_ctx;
++
++      /*
++       * Give any possible sleeping processes the chance to wake up,
++       * so they can recheck if they have to back off.
++       */
++      rbtree_postorder_for_each_entry_safe(waiter, n, &lock->waiters,
++                                           tree_entry) {
++              /* XXX debug rt mutex waiter wakeup */
++
++              BUG_ON(waiter->lock != lock);
++              rt_mutex_wake_waiter(waiter);
++      }
++}
++
++#else
++
++static void ww_mutex_account_lock(struct rt_mutex *lock,
++                                struct ww_acquire_ctx *ww_ctx)
++{
++      BUG();
++}
++#endif
++
+ /*
+  * Slow path lock function:
+  */
+ static int __sched
+ rt_mutex_slowlock(struct rt_mutex *lock, int state,
+                 struct hrtimer_sleeper *timeout,
+-                enum rtmutex_chainwalk chwalk)
++                enum rtmutex_chainwalk chwalk,
++                struct ww_acquire_ctx *ww_ctx)
+ {
+       struct rt_mutex_waiter waiter;
+       unsigned long flags;
+@@ -1658,6 +1777,8 @@ rt_mutex_slowlock(struct rt_mutex *lock,
+       /* Try to acquire the lock again: */
+       if (try_to_take_rt_mutex(lock, current, NULL)) {
++              if (ww_ctx)
++                      ww_mutex_account_lock(lock, ww_ctx);
+               raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
+               return 0;
+       }
+@@ -1672,13 +1793,23 @@ rt_mutex_slowlock(struct rt_mutex *lock,
+       if (likely(!ret))
+               /* sleep on the mutex */
+-              ret = __rt_mutex_slowlock(lock, state, timeout, &waiter);
++              ret = __rt_mutex_slowlock(lock, state, timeout, &waiter,
++                                        ww_ctx);
++      else if (ww_ctx) {
++              /* ww_mutex received EDEADLK, let it become EALREADY */
++              ret = __mutex_lock_check_stamp(lock, ww_ctx);
++              BUG_ON(!ret);
++      }
+       if (unlikely(ret)) {
+               __set_current_state(TASK_RUNNING);
+               if (rt_mutex_has_waiters(lock))
+                       remove_waiter(lock, &waiter);
+-              rt_mutex_handle_deadlock(ret, chwalk, &waiter);
++              /* ww_mutex want to report EDEADLK/EALREADY, let them */
++              if (!ww_ctx)
++                      rt_mutex_handle_deadlock(ret, chwalk, &waiter);
++      } else if (ww_ctx) {
++              ww_mutex_account_lock(lock, ww_ctx);
+       }
+       /*
+@@ -1809,29 +1940,33 @@ static bool __sched rt_mutex_slowunlock(
+  */
+ static inline int
+ rt_mutex_fastlock(struct rt_mutex *lock, int state,
++                struct ww_acquire_ctx *ww_ctx,
+                 int (*slowfn)(struct rt_mutex *lock, int state,
+                               struct hrtimer_sleeper *timeout,
+-                              enum rtmutex_chainwalk chwalk))
++                              enum rtmutex_chainwalk chwalk,
++                              struct ww_acquire_ctx *ww_ctx))
+ {
+       if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
+               return 0;
+-      return slowfn(lock, state, NULL, RT_MUTEX_MIN_CHAINWALK);
++      return slowfn(lock, state, NULL, RT_MUTEX_MIN_CHAINWALK, ww_ctx);
+ }
+ static inline int
+ rt_mutex_timed_fastlock(struct rt_mutex *lock, int state,
+                       struct hrtimer_sleeper *timeout,
+                       enum rtmutex_chainwalk chwalk,
++                      struct ww_acquire_ctx *ww_ctx,
+                       int (*slowfn)(struct rt_mutex *lock, int state,
+                                     struct hrtimer_sleeper *timeout,
+-                                    enum rtmutex_chainwalk chwalk))
++                                    enum rtmutex_chainwalk chwalk,
++                                    struct ww_acquire_ctx *ww_ctx))
+ {
+       if (chwalk == RT_MUTEX_MIN_CHAINWALK &&
+           likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
+               return 0;
+-      return slowfn(lock, state, timeout, chwalk);
++      return slowfn(lock, state, timeout, chwalk, ww_ctx);
+ }
+ static inline int
+@@ -1876,7 +2011,7 @@ void __sched rt_mutex_lock(struct rt_mut
+ {
+       might_sleep();
+-      rt_mutex_fastlock(lock, TASK_UNINTERRUPTIBLE, rt_mutex_slowlock);
++      rt_mutex_fastlock(lock, TASK_UNINTERRUPTIBLE, NULL, rt_mutex_slowlock);
+ }
+ EXPORT_SYMBOL_GPL(rt_mutex_lock);
+@@ -1893,7 +2028,7 @@ int __sched rt_mutex_lock_interruptible(
+ {
+       might_sleep();
+-      return rt_mutex_fastlock(lock, TASK_INTERRUPTIBLE, rt_mutex_slowlock);
++      return rt_mutex_fastlock(lock, TASK_INTERRUPTIBLE, NULL, rt_mutex_slowlock);
+ }
+ EXPORT_SYMBOL_GPL(rt_mutex_lock_interruptible);
+@@ -1920,7 +2055,7 @@ int __sched rt_mutex_lock_killable(struc
+ {
+       might_sleep();
+-      return rt_mutex_fastlock(lock, TASK_KILLABLE, rt_mutex_slowlock);
++      return rt_mutex_fastlock(lock, TASK_KILLABLE, NULL, rt_mutex_slowlock);
+ }
+ EXPORT_SYMBOL_GPL(rt_mutex_lock_killable);
+@@ -1944,6 +2079,7 @@ rt_mutex_timed_lock(struct rt_mutex *loc
+       return rt_mutex_timed_fastlock(lock, TASK_INTERRUPTIBLE, timeout,
+                                      RT_MUTEX_MIN_CHAINWALK,
++                                     NULL,
+                                      rt_mutex_slowlock);
+ }
+ EXPORT_SYMBOL_GPL(rt_mutex_timed_lock);
+@@ -2225,7 +2361,7 @@ int rt_mutex_wait_proxy_lock(struct rt_m
+       set_current_state(TASK_INTERRUPTIBLE);
+       /* sleep on the mutex */
+-      ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter);
++      ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter, NULL);
+       raw_spin_unlock_irq(&lock->wait_lock);
+@@ -2278,24 +2414,88 @@ bool rt_mutex_cleanup_proxy_lock(struct
+       return cleanup;
+ }
+-#ifdef CONFIG_PREEMPT_RT_FULL
+-struct ww_mutex {
+-};
+-struct ww_acquire_ctx {
+-};
+-int __ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ww_ctx)
++static inline int
++ww_mutex_deadlock_injection(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
+ {
+-      BUG();
++#ifdef CONFIG_DEBUG_WW_MUTEX_SLOWPATH
++      unsigned tmp;
++
++      if (ctx->deadlock_inject_countdown-- == 0) {
++              tmp = ctx->deadlock_inject_interval;
++              if (tmp > UINT_MAX/4)
++                      tmp = UINT_MAX;
++              else
++                      tmp = tmp*2 + tmp + tmp/2;
++
++              ctx->deadlock_inject_interval = tmp;
++              ctx->deadlock_inject_countdown = tmp;
++              ctx->contending_lock = lock;
++
++              ww_mutex_unlock(lock);
++
++              return -EDEADLK;
++      }
++#endif
++
++      return 0;
+ }
+-EXPORT_SYMBOL_GPL(__ww_mutex_lock);
+-int __ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ww_ctx)
++
++#ifdef CONFIG_PREEMPT_RT_FULL
++int __sched
++__ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ww_ctx)
+ {
+-      BUG();
++      int ret;
++
++      might_sleep();
++
++      mutex_acquire_nest(&lock->base.dep_map, 0, 0, &ww_ctx->dep_map, _RET_IP_);
++      ret = rt_mutex_slowlock(&lock->base.lock, TASK_INTERRUPTIBLE, NULL, 0, ww_ctx);
++      if (ret)
++              mutex_release(&lock->base.dep_map, 1, _RET_IP_);
++      else if (!ret && ww_ctx->acquired > 1)
++              return ww_mutex_deadlock_injection(lock, ww_ctx);
++
++      return ret;
+ }
+ EXPORT_SYMBOL_GPL(__ww_mutex_lock_interruptible);
++
++int __sched
++__ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ww_ctx)
++{
++      int ret;
++
++      might_sleep();
++
++      mutex_acquire_nest(&lock->base.dep_map, 0, 0, &ww_ctx->dep_map, _RET_IP_);
++      ret = rt_mutex_slowlock(&lock->base.lock, TASK_UNINTERRUPTIBLE, NULL, 0, ww_ctx);
++      if (ret)
++              mutex_release(&lock->base.dep_map, 1, _RET_IP_);
++      else if (!ret && ww_ctx->acquired > 1)
++              return ww_mutex_deadlock_injection(lock, ww_ctx);
++
++      return ret;
++}
++EXPORT_SYMBOL_GPL(__ww_mutex_lock);
++
+ void __sched ww_mutex_unlock(struct ww_mutex *lock)
+ {
+-      BUG();
++      int nest = !!lock->ctx;
++
++      /*
++       * The unlocking fastpath is the 0->1 transition from 'locked'
++       * into 'unlocked' state:
++       */
++      if (nest) {
++#ifdef CONFIG_DEBUG_MUTEXES
++              DEBUG_LOCKS_WARN_ON(!lock->ctx->acquired);
++#endif
++              if (lock->ctx->acquired > 0)
++                      lock->ctx->acquired--;
++              lock->ctx = NULL;
++      }
++
++      mutex_release(&lock->base.dep_map, nest, _RET_IP_);
++      rt_mutex_unlock(&lock->base.lock);
+ }
+-EXPORT_SYMBOL_GPL(ww_mutex_unlock);
++EXPORT_SYMBOL(ww_mutex_unlock);
+ #endif
diff --git a/patches/features/all/rt/rtmutex-avoid-include-hell.patch b/patches/features/all/rt/rtmutex-avoid-include-hell.patch
new file mode 100644 (file)
index 0000000..bd20494
--- /dev/null
@@ -0,0 +1,24 @@
+Subject: rtmutex: Avoid include hell
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 29 Jun 2011 20:06:39 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Include only the required raw types. This avoids pulling in the
+complete spinlock header which in turn requires rtmutex.h at some point.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/rtmutex.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/linux/rtmutex.h
++++ b/include/linux/rtmutex.h
+@@ -14,7 +14,7 @@
+ #include <linux/linkage.h>
+ #include <linux/rbtree.h>
+-#include <linux/spinlock_types.h>
++#include <linux/spinlock_types_raw.h>
+ extern int max_lock_depth; /* for sysctl */
diff --git a/patches/features/all/rt/rtmutex-futex-prepare-rt.patch b/patches/features/all/rt/rtmutex-futex-prepare-rt.patch
new file mode 100644 (file)
index 0000000..a5a15a4
--- /dev/null
@@ -0,0 +1,245 @@
+Subject: rtmutex: Handle the various new futex race conditions
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 10 Jun 2011 11:04:15 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+RT opens a few new interesting race conditions in the rtmutex/futex
+combo due to futex hash bucket lock being a 'sleeping' spinlock and
+therefor not disabling preemption.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/futex.c                  |   77 ++++++++++++++++++++++++++++++++--------
+ kernel/locking/rtmutex.c        |   36 +++++++++++++++---
+ kernel/locking/rtmutex_common.h |    2 +
+ 3 files changed, 94 insertions(+), 21 deletions(-)
+
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -2009,6 +2009,16 @@ static int futex_requeue(u32 __user *uad
+                               requeue_pi_wake_futex(this, &key2, hb2);
+                               drop_count++;
+                               continue;
++                      } else if (ret == -EAGAIN) {
++                              /*
++                               * Waiter was woken by timeout or
++                               * signal and has set pi_blocked_on to
++                               * PI_WAKEUP_INPROGRESS before we
++                               * tried to enqueue it on the rtmutex.
++                               */
++                              this->pi_state = NULL;
++                              put_pi_state(pi_state);
++                              continue;
+                       } else if (ret) {
+                               /*
+                                * rt_mutex_start_proxy_lock() detected a
+@@ -2992,7 +3002,7 @@ static int futex_wait_requeue_pi(u32 __u
+       struct hrtimer_sleeper timeout, *to = NULL;
+       struct futex_pi_state *pi_state = NULL;
+       struct rt_mutex_waiter rt_waiter;
+-      struct futex_hash_bucket *hb;
++      struct futex_hash_bucket *hb, *hb2;
+       union futex_key key2 = FUTEX_KEY_INIT;
+       struct futex_q q = futex_q_init;
+       int res, ret;
+@@ -3048,20 +3058,55 @@ static int futex_wait_requeue_pi(u32 __u
+       /* Queue the futex_q, drop the hb lock, wait for wakeup. */
+       futex_wait_queue_me(hb, &q, to);
+-      spin_lock(&hb->lock);
+-      ret = handle_early_requeue_pi_wakeup(hb, &q, &key2, to);
+-      spin_unlock(&hb->lock);
+-      if (ret)
+-              goto out_put_keys;
++      /*
++       * On RT we must avoid races with requeue and trying to block
++       * on two mutexes (hb->lock and uaddr2's rtmutex) by
++       * serializing access to pi_blocked_on with pi_lock.
++       */
++      raw_spin_lock_irq(&current->pi_lock);
++      if (current->pi_blocked_on) {
++              /*
++               * We have been requeued or are in the process of
++               * being requeued.
++               */
++              raw_spin_unlock_irq(&current->pi_lock);
++      } else {
++              /*
++               * Setting pi_blocked_on to PI_WAKEUP_INPROGRESS
++               * prevents a concurrent requeue from moving us to the
++               * uaddr2 rtmutex. After that we can safely acquire
++               * (and possibly block on) hb->lock.
++               */
++              current->pi_blocked_on = PI_WAKEUP_INPROGRESS;
++              raw_spin_unlock_irq(&current->pi_lock);
++
++              spin_lock(&hb->lock);
++
++              /*
++               * Clean up pi_blocked_on. We might leak it otherwise
++               * when we succeeded with the hb->lock in the fast
++               * path.
++               */
++              raw_spin_lock_irq(&current->pi_lock);
++              current->pi_blocked_on = NULL;
++              raw_spin_unlock_irq(&current->pi_lock);
++
++              ret = handle_early_requeue_pi_wakeup(hb, &q, &key2, to);
++              spin_unlock(&hb->lock);
++              if (ret)
++                      goto out_put_keys;
++      }
+       /*
+-       * In order for us to be here, we know our q.key == key2, and since
+-       * we took the hb->lock above, we also know that futex_requeue() has
+-       * completed and we no longer have to concern ourselves with a wakeup
+-       * race with the atomic proxy lock acquisition by the requeue code. The
+-       * futex_requeue dropped our key1 reference and incremented our key2
+-       * reference count.
++       * In order to be here, we have either been requeued, are in
++       * the process of being requeued, or requeue successfully
++       * acquired uaddr2 on our behalf.  If pi_blocked_on was
++       * non-null above, we may be racing with a requeue.  Do not
++       * rely on q->lock_ptr to be hb2->lock until after blocking on
++       * hb->lock or hb2->lock. The futex_requeue dropped our key1
++       * reference and incremented our key2 reference count.
+        */
++      hb2 = hash_futex(&key2);
+       /* Check if the requeue code acquired the second futex for us. */
+       if (!q.rt_waiter) {
+@@ -3070,7 +3115,8 @@ static int futex_wait_requeue_pi(u32 __u
+                * did a lock-steal - fix up the PI-state in that case.
+                */
+               if (q.pi_state && (q.pi_state->owner != current)) {
+-                      spin_lock(q.lock_ptr);
++                      spin_lock(&hb2->lock);
++                      BUG_ON(&hb2->lock != q.lock_ptr);
+                       ret = fixup_pi_state_owner(uaddr2, &q, current);
+                       if (ret && rt_mutex_owner(&q.pi_state->pi_mutex) == current) {
+                               pi_state = q.pi_state;
+@@ -3081,7 +3127,7 @@ static int futex_wait_requeue_pi(u32 __u
+                        * the requeue_pi() code acquired for us.
+                        */
+                       put_pi_state(q.pi_state);
+-                      spin_unlock(q.lock_ptr);
++                      spin_unlock(&hb2->lock);
+               }
+       } else {
+               struct rt_mutex *pi_mutex;
+@@ -3095,7 +3141,8 @@ static int futex_wait_requeue_pi(u32 __u
+               pi_mutex = &q.pi_state->pi_mutex;
+               ret = rt_mutex_wait_proxy_lock(pi_mutex, to, &rt_waiter);
+-              spin_lock(q.lock_ptr);
++              spin_lock(&hb2->lock);
++              BUG_ON(&hb2->lock != q.lock_ptr);
+               if (ret && !rt_mutex_cleanup_proxy_lock(pi_mutex, &rt_waiter))
+                       ret = 0;
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -133,6 +133,11 @@ static void fixup_rt_mutex_waiters(struc
+               WRITE_ONCE(*p, owner & ~RT_MUTEX_HAS_WAITERS);
+ }
++static int rt_mutex_real_waiter(struct rt_mutex_waiter *waiter)
++{
++      return waiter && waiter != PI_WAKEUP_INPROGRESS;
++}
++
+ /*
+  * We can speed up the acquire/release, if there's no debugging state to be
+  * set up.
+@@ -421,7 +426,8 @@ int max_lock_depth = 1024;
+ static inline struct rt_mutex *task_blocked_on_lock(struct task_struct *p)
+ {
+-      return p->pi_blocked_on ? p->pi_blocked_on->lock : NULL;
++      return rt_mutex_real_waiter(p->pi_blocked_on) ?
++              p->pi_blocked_on->lock : NULL;
+ }
+ /*
+@@ -557,7 +563,7 @@ static int rt_mutex_adjust_prio_chain(st
+        * reached or the state of the chain has changed while we
+        * dropped the locks.
+        */
+-      if (!waiter)
++      if (!rt_mutex_real_waiter(waiter))
+               goto out_unlock_pi;
+       /*
+@@ -969,6 +975,23 @@ static int task_blocks_on_rt_mutex(struc
+               return -EDEADLK;
+       raw_spin_lock(&task->pi_lock);
++
++      /*
++       * In the case of futex requeue PI, this will be a proxy
++       * lock. The task will wake unaware that it is enqueueed on
++       * this lock. Avoid blocking on two locks and corrupting
++       * pi_blocked_on via the PI_WAKEUP_INPROGRESS
++       * flag. futex_wait_requeue_pi() sets this when it wakes up
++       * before requeue (due to a signal or timeout). Do not enqueue
++       * the task if PI_WAKEUP_INPROGRESS is set.
++       */
++      if (task != current && task->pi_blocked_on == PI_WAKEUP_INPROGRESS) {
++              raw_spin_unlock(&task->pi_lock);
++              return -EAGAIN;
++      }
++
++      BUG_ON(rt_mutex_real_waiter(task->pi_blocked_on));
++
+       __rt_mutex_adjust_prio(task);
+       waiter->task = task;
+       waiter->lock = lock;
+@@ -992,7 +1015,7 @@ static int task_blocks_on_rt_mutex(struc
+               rt_mutex_enqueue_pi(owner, waiter);
+               __rt_mutex_adjust_prio(owner);
+-              if (owner->pi_blocked_on)
++              if (rt_mutex_real_waiter(owner->pi_blocked_on))
+                       chain_walk = 1;
+       } else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) {
+               chain_walk = 1;
+@@ -1076,7 +1099,7 @@ static void remove_waiter(struct rt_mute
+ {
+       bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock));
+       struct task_struct *owner = rt_mutex_owner(lock);
+-      struct rt_mutex *next_lock;
++      struct rt_mutex *next_lock = NULL;
+       raw_spin_lock(&current->pi_lock);
+       rt_mutex_dequeue(lock, waiter);
+@@ -1100,7 +1123,8 @@ static void remove_waiter(struct rt_mute
+       __rt_mutex_adjust_prio(owner);
+       /* Store the lock on which owner is blocked or NULL */
+-      next_lock = task_blocked_on_lock(owner);
++      if (rt_mutex_real_waiter(owner->pi_blocked_on))
++              next_lock = task_blocked_on_lock(owner);
+       raw_spin_unlock(&owner->pi_lock);
+@@ -1136,7 +1160,7 @@ void rt_mutex_adjust_pi(struct task_stru
+       raw_spin_lock_irqsave(&task->pi_lock, flags);
+       waiter = task->pi_blocked_on;
+-      if (!waiter || (waiter->prio == task->prio &&
++      if (!rt_mutex_real_waiter(waiter) || (waiter->prio == task->prio &&
+                       !dl_prio(task->prio))) {
+               raw_spin_unlock_irqrestore(&task->pi_lock, flags);
+               return;
+--- a/kernel/locking/rtmutex_common.h
++++ b/kernel/locking/rtmutex_common.h
+@@ -98,6 +98,8 @@ enum rtmutex_chainwalk {
+ /*
+  * PI-futex support (proxy locking functions, etc.):
+  */
++#define PI_WAKEUP_INPROGRESS  ((struct rt_mutex_waiter *) 1)
++
+ extern struct task_struct *rt_mutex_next_owner(struct rt_mutex *lock);
+ extern void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
+                                      struct task_struct *proxy_owner);
diff --git a/patches/features/all/rt/rtmutex-lock-killable.patch b/patches/features/all/rt/rtmutex-lock-killable.patch
new file mode 100644 (file)
index 0000000..95ea34d
--- /dev/null
@@ -0,0 +1,52 @@
+Subject: rtmutex: Add rtmutex_lock_killable()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 09 Jun 2011 11:43:52 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Add "killable" type to rtmutex. We need this since rtmutex are used as
+"normal" mutexes which do use this type.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/rtmutex.h  |    1 +
+ kernel/locking/rtmutex.c |   19 +++++++++++++++++++
+ 2 files changed, 20 insertions(+)
+
+--- a/include/linux/rtmutex.h
++++ b/include/linux/rtmutex.h
+@@ -91,6 +91,7 @@ extern void rt_mutex_destroy(struct rt_m
+ extern void rt_mutex_lock(struct rt_mutex *lock);
+ extern int rt_mutex_lock_interruptible(struct rt_mutex *lock);
++extern int rt_mutex_lock_killable(struct rt_mutex *lock);
+ extern int rt_mutex_timed_lock(struct rt_mutex *lock,
+                              struct hrtimer_sleeper *timeout);
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1524,6 +1524,25 @@ int __sched rt_mutex_futex_trylock(struc
+ }
+ /**
++ * rt_mutex_lock_killable - lock a rt_mutex killable
++ *
++ * @lock:              the rt_mutex to be locked
++ * @detect_deadlock:   deadlock detection on/off
++ *
++ * Returns:
++ *  0          on success
++ * -EINTR      when interrupted by a signal
++ * -EDEADLK    when the lock would deadlock (when deadlock detection is on)
++ */
++int __sched rt_mutex_lock_killable(struct rt_mutex *lock)
++{
++      might_sleep();
++
++      return rt_mutex_fastlock(lock, TASK_KILLABLE, rt_mutex_slowlock);
++}
++EXPORT_SYMBOL_GPL(rt_mutex_lock_killable);
++
++/**
+  * rt_mutex_timed_lock - lock a rt_mutex interruptible
+  *                    the timeout structure is provided
+  *                    by the caller
diff --git a/patches/features/all/rt/rtmutex-trylock-is-okay-on-RT.patch b/patches/features/all/rt/rtmutex-trylock-is-okay-on-RT.patch
new file mode 100644 (file)
index 0000000..37278af
--- /dev/null
@@ -0,0 +1,28 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed 02 Dec 2015 11:34:07 +0100
+Subject: rtmutex: trylock is okay on -RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+non-RT kernel could deadlock on rt_mutex_trylock() in softirq context. On
+-RT we don't run softirqs in IRQ context but in thread context so it is
+not a issue here.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/locking/rtmutex.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -1535,7 +1535,11 @@ EXPORT_SYMBOL_GPL(rt_mutex_timed_lock);
+  */
+ int __sched rt_mutex_trylock(struct rt_mutex *lock)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      if (WARN_ON_ONCE(in_irq() || in_nmi()))
++#else
+       if (WARN_ON_ONCE(in_irq() || in_nmi() || in_serving_softirq()))
++#endif
+               return 0;
+       return rt_mutex_fasttrylock(lock, rt_mutex_slowtrylock);
diff --git a/patches/features/all/rt/rtmutex_dont_include_rcu.patch b/patches/features/all/rt/rtmutex_dont_include_rcu.patch
new file mode 100644 (file)
index 0000000..1f066f5
--- /dev/null
@@ -0,0 +1,159 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Subject: rbtree: don't include the rcu header
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The RCU header pulls in spinlock.h and fails due not yet defined types:
+
+|In file included from include/linux/spinlock.h:275:0,
+|                 from include/linux/rcupdate.h:38,
+|                 from include/linux/rbtree.h:34,
+|                 from include/linux/rtmutex.h:17,
+|                 from include/linux/spinlock_types.h:18,
+|                 from kernel/bounds.c:13:
+|include/linux/rwlock_rt.h:16:38: error: unknown type name ‘rwlock_t’
+| extern void __lockfunc rt_write_lock(rwlock_t *rwlock);
+|                                      ^
+
+This patch moves the required RCU function from the rcupdate.h header file into
+a new header file which can be included by both users.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/rbtree.h             |    2 -
+ include/linux/rcu_assign_pointer.h |   54 +++++++++++++++++++++++++++++++++++++
+ include/linux/rcupdate.h           |   49 ---------------------------------
+ 3 files changed, 56 insertions(+), 49 deletions(-)
+
+--- a/include/linux/rbtree.h
++++ b/include/linux/rbtree.h
+@@ -31,7 +31,7 @@
+ #include <linux/kernel.h>
+ #include <linux/stddef.h>
+-#include <linux/rcupdate.h>
++#include <linux/rcu_assign_pointer.h>
+ struct rb_node {
+       unsigned long  __rb_parent_color;
+--- /dev/null
++++ b/include/linux/rcu_assign_pointer.h
+@@ -0,0 +1,54 @@
++#ifndef __LINUX_RCU_ASSIGN_POINTER_H__
++#define __LINUX_RCU_ASSIGN_POINTER_H__
++#include <linux/compiler.h>
++#include <asm/barrier.h>
++
++/**
++ * RCU_INITIALIZER() - statically initialize an RCU-protected global variable
++ * @v: The value to statically initialize with.
++ */
++#define RCU_INITIALIZER(v) (typeof(*(v)) __force __rcu *)(v)
++
++/**
++ * rcu_assign_pointer() - assign to RCU-protected pointer
++ * @p: pointer to assign to
++ * @v: value to assign (publish)
++ *
++ * Assigns the specified value to the specified RCU-protected
++ * pointer, ensuring that any concurrent RCU readers will see
++ * any prior initialization.
++ *
++ * Inserts memory barriers on architectures that require them
++ * (which is most of them), and also prevents the compiler from
++ * reordering the code that initializes the structure after the pointer
++ * assignment.  More importantly, this call documents which pointers
++ * will be dereferenced by RCU read-side code.
++ *
++ * In some special cases, you may use RCU_INIT_POINTER() instead
++ * of rcu_assign_pointer().  RCU_INIT_POINTER() is a bit faster due
++ * to the fact that it does not constrain either the CPU or the compiler.
++ * That said, using RCU_INIT_POINTER() when you should have used
++ * rcu_assign_pointer() is a very bad thing that results in
++ * impossible-to-diagnose memory corruption.  So please be careful.
++ * See the RCU_INIT_POINTER() comment header for details.
++ *
++ * Note that rcu_assign_pointer() evaluates each of its arguments only
++ * once, appearances notwithstanding.  One of the "extra" evaluations
++ * is in typeof() and the other visible only to sparse (__CHECKER__),
++ * neither of which actually execute the argument.  As with most cpp
++ * macros, this execute-arguments-only-once property is important, so
++ * please be careful when making changes to rcu_assign_pointer() and the
++ * other macros that it invokes.
++ */
++#define rcu_assign_pointer(p, v)                                            \
++({                                                                          \
++      uintptr_t _r_a_p__v = (uintptr_t)(v);                                 \
++                                                                            \
++      if (__builtin_constant_p(v) && (_r_a_p__v) == (uintptr_t)NULL)        \
++              WRITE_ONCE((p), (typeof(p))(_r_a_p__v));                      \
++      else                                                                  \
++              smp_store_release(&p, RCU_INITIALIZER((typeof(p))_r_a_p__v)); \
++      _r_a_p__v;                                                            \
++})
++
++#endif
+--- a/include/linux/rcupdate.h
++++ b/include/linux/rcupdate.h
+@@ -46,6 +46,7 @@
+ #include <linux/compiler.h>
+ #include <linux/ktime.h>
+ #include <linux/irqflags.h>
++#include <linux/rcu_assign_pointer.h>
+ #include <asm/barrier.h>
+@@ -633,54 +634,6 @@ static inline void rcu_preempt_sleep_che
+ })
+ /**
+- * RCU_INITIALIZER() - statically initialize an RCU-protected global variable
+- * @v: The value to statically initialize with.
+- */
+-#define RCU_INITIALIZER(v) (typeof(*(v)) __force __rcu *)(v)
+-
+-/**
+- * rcu_assign_pointer() - assign to RCU-protected pointer
+- * @p: pointer to assign to
+- * @v: value to assign (publish)
+- *
+- * Assigns the specified value to the specified RCU-protected
+- * pointer, ensuring that any concurrent RCU readers will see
+- * any prior initialization.
+- *
+- * Inserts memory barriers on architectures that require them
+- * (which is most of them), and also prevents the compiler from
+- * reordering the code that initializes the structure after the pointer
+- * assignment.  More importantly, this call documents which pointers
+- * will be dereferenced by RCU read-side code.
+- *
+- * In some special cases, you may use RCU_INIT_POINTER() instead
+- * of rcu_assign_pointer().  RCU_INIT_POINTER() is a bit faster due
+- * to the fact that it does not constrain either the CPU or the compiler.
+- * That said, using RCU_INIT_POINTER() when you should have used
+- * rcu_assign_pointer() is a very bad thing that results in
+- * impossible-to-diagnose memory corruption.  So please be careful.
+- * See the RCU_INIT_POINTER() comment header for details.
+- *
+- * Note that rcu_assign_pointer() evaluates each of its arguments only
+- * once, appearances notwithstanding.  One of the "extra" evaluations
+- * is in typeof() and the other visible only to sparse (__CHECKER__),
+- * neither of which actually execute the argument.  As with most cpp
+- * macros, this execute-arguments-only-once property is important, so
+- * please be careful when making changes to rcu_assign_pointer() and the
+- * other macros that it invokes.
+- */
+-#define rcu_assign_pointer(p, v)                                            \
+-({                                                                          \
+-      uintptr_t _r_a_p__v = (uintptr_t)(v);                                 \
+-                                                                            \
+-      if (__builtin_constant_p(v) && (_r_a_p__v) == (uintptr_t)NULL)        \
+-              WRITE_ONCE((p), (typeof(p))(_r_a_p__v));                      \
+-      else                                                                  \
+-              smp_store_release(&p, RCU_INITIALIZER((typeof(p))_r_a_p__v)); \
+-      _r_a_p__v;                                                            \
+-})
+-
+-/**
+  * rcu_access_pointer() - fetch RCU pointer with no dereferencing
+  * @p: The pointer to read
+  *
diff --git a/patches/features/all/rt/rwsem-rt-Lift-single-reader-restriction.patch b/patches/features/all/rt/rwsem-rt-Lift-single-reader-restriction.patch
new file mode 100644 (file)
index 0000000..267cfe1
--- /dev/null
@@ -0,0 +1,741 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 1 Apr 2017 12:51:02 +0200
+Subject: [PATCH] rwsem/rt: Lift single reader restriction
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The RT specific R/W semaphore implementation restricts the number of readers
+to one because a writer cannot block on multiple readers and inherit its
+priority or budget.
+
+The single reader restricting is painful in various ways:
+
+ - Performance bottleneck for multi-threaded applications in the page fault
+   path (mmap sem)
+
+ - Progress blocker for drivers which are carefully crafted to avoid the
+   potential reader/writer deadlock in mainline.
+
+The analysis of the writer code pathes shows, that properly written RT tasks
+should not take them. Syscalls like mmap(), file access which take mmap sem
+write locked have unbound latencies which are completely unrelated to mmap
+sem. Other R/W sem users like graphics drivers are not suitable for RT tasks
+either.
+
+So there is little risk to hurt RT tasks when the RT rwsem implementation is
+changed in the following way:
+
+ - Allow concurrent readers
+
+ - Make writers block until the last reader left the critical section. This
+   blocking is not subject to priority/budget inheritance.
+
+ - Readers blocked on a writer inherit their priority/budget in the normal
+   way.
+
+There is a drawback with this scheme. R/W semaphores become writer unfair
+though the applications which have triggered writer starvation (mostly on
+mmap_sem) in the past are not really the typical workloads running on a RT
+system. So while it's unlikely to hit writer starvation, it's possible. If
+there are unexpected workloads on RT systems triggering it, we need to rethink
+the approach.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/rwsem.h     |    9 +
+ include/linux/rwsem_rt.h  |  166 +++++-----------------------
+ kernel/locking/Makefile   |    4 
+ kernel/locking/rt.c       |  167 ----------------------------
+ kernel/locking/rwsem-rt.c |  268 ++++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 310 insertions(+), 304 deletions(-)
+ create mode 100644 kernel/locking/rwsem-rt.c
+
+--- a/include/linux/rwsem.h
++++ b/include/linux/rwsem.h
+@@ -110,6 +110,13 @@ static inline int rwsem_is_contended(str
+       return !list_empty(&sem->wait_list);
+ }
++#endif /* !PREEMPT_RT_FULL */
++
++/*
++ * The functions below are the same for all rwsem implementations including
++ * the RT specific variant.
++ */
++
+ /*
+  * lock for reading
+  */
+@@ -188,6 +195,4 @@ extern void up_read_non_owner(struct rw_
+ # define up_read_non_owner(sem)                       up_read(sem)
+ #endif
+-#endif /* !PREEMPT_RT_FULL */
+-
+ #endif /* _LINUX_RWSEM_H */
+--- a/include/linux/rwsem_rt.h
++++ b/include/linux/rwsem_rt.h
+@@ -5,163 +5,63 @@
+ #error "Include rwsem.h"
+ #endif
+-/*
+- * RW-semaphores are a spinlock plus a reader-depth count.
+- *
+- * Note that the semantics are different from the usual
+- * Linux rw-sems, in PREEMPT_RT mode we do not allow
+- * multiple readers to hold the lock at once, we only allow
+- * a read-lock owner to read-lock recursively. This is
+- * better for latency, makes the implementation inherently
+- * fair and makes it simpler as well.
+- */
+-
+ #include <linux/rtmutex.h>
++#include <linux/swait.h>
++
++#define READER_BIAS           (1U << 31)
++#define WRITER_BIAS           (1U << 30)
+ struct rw_semaphore {
+-      struct rt_mutex         lock;
+-      int                     read_depth;
++      atomic_t                readers;
++      struct rt_mutex         rtmutex;
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+       struct lockdep_map      dep_map;
+ #endif
+ };
+-#define __RWSEM_INITIALIZER(name) \
+-      { .lock = __RT_MUTEX_INITIALIZER(name.lock), \
+-        RW_DEP_MAP_INIT(name) }
++#define __RWSEM_INITIALIZER(name)                             \
++{                                                             \
++      .readers = ATOMIC_INIT(READER_BIAS),                    \
++      .rtmutex = __RT_MUTEX_INITIALIZER(name.rtmutex),        \
++      RW_DEP_MAP_INIT(name)                                   \
++}
+ #define DECLARE_RWSEM(lockname) \
+       struct rw_semaphore lockname = __RWSEM_INITIALIZER(lockname)
+-extern void  __rt_rwsem_init(struct rw_semaphore *rwsem, const char *name,
+-                                   struct lock_class_key *key);
+-
+-#define __rt_init_rwsem(sem, name, key)                       \
+-      do {                                            \
+-              rt_mutex_init(&(sem)->lock);            \
+-              __rt_rwsem_init((sem), (name), (key));\
+-      } while (0)
++extern void  __rwsem_init(struct rw_semaphore *rwsem, const char *name,
++                        struct lock_class_key *key);
+-#define __init_rwsem(sem, name, key) __rt_init_rwsem(sem, name, key)
++#define __init_rwsem(sem, name, key)                  \
++do {                                                  \
++              rt_mutex_init(&(sem)->rtmutex);         \
++              __rwsem_init((sem), (name), (key));     \
++} while (0)
+-# define rt_init_rwsem(sem)                           \
++#define init_rwsem(sem)                                       \
+ do {                                                  \
+       static struct lock_class_key __key;             \
+                                                       \
+-      __rt_init_rwsem((sem), #sem, &__key);           \
++      __init_rwsem((sem), #sem, &__key);              \
+ } while (0)
+-extern void rt_down_write(struct rw_semaphore *rwsem);
+-extern int  rt_down_write_killable(struct rw_semaphore *rwsem);
+-extern void rt_down_read_nested(struct rw_semaphore *rwsem, int subclass);
+-extern void rt_down_write_nested(struct rw_semaphore *rwsem, int subclass);
+-extern int  rt_down_write_killable_nested(struct rw_semaphore *rwsem,
+-                                        int subclass);
+-extern void rt_down_write_nested_lock(struct rw_semaphore *rwsem,
+-                                    struct lockdep_map *nest);
+-extern void rt__down_read(struct rw_semaphore *rwsem);
+-extern void rt_down_read(struct rw_semaphore *rwsem);
+-extern int  rt_down_write_trylock(struct rw_semaphore *rwsem);
+-extern int  rt__down_read_trylock(struct rw_semaphore *rwsem);
+-extern int  rt_down_read_trylock(struct rw_semaphore *rwsem);
+-extern void __rt_up_read(struct rw_semaphore *rwsem);
+-extern void rt_up_read(struct rw_semaphore *rwsem);
+-extern void rt_up_write(struct rw_semaphore *rwsem);
+-extern void rt_downgrade_write(struct rw_semaphore *rwsem);
+-
+-#define init_rwsem(sem)               rt_init_rwsem(sem)
+-#define rwsem_is_locked(s)    rt_mutex_is_locked(&(s)->lock)
+-
+-static inline int rwsem_is_contended(struct rw_semaphore *sem)
+-{
+-      /* rt_mutex_has_waiters() */
+-      return !RB_EMPTY_ROOT(&sem->lock.waiters);
+-}
+-
+-static inline void __down_read(struct rw_semaphore *sem)
+-{
+-      rt__down_read(sem);
+-}
+-
+-static inline void down_read(struct rw_semaphore *sem)
+-{
+-      rt_down_read(sem);
+-}
+-
+-static inline int __down_read_trylock(struct rw_semaphore *sem)
+-{
+-      return rt__down_read_trylock(sem);
+-}
+-
+-static inline int down_read_trylock(struct rw_semaphore *sem)
+-{
+-      return rt_down_read_trylock(sem);
+-}
+-
+-static inline void down_write(struct rw_semaphore *sem)
+-{
+-      rt_down_write(sem);
+-}
+-
+-static inline int down_write_killable(struct rw_semaphore *sem)
+-{
+-      return rt_down_write_killable(sem);
+-}
+-
+-static inline int down_write_trylock(struct rw_semaphore *sem)
+-{
+-      return rt_down_write_trylock(sem);
+-}
+-
+-static inline void __up_read(struct rw_semaphore *sem)
+-{
+-      __rt_up_read(sem);
+-}
+-
+-static inline void up_read(struct rw_semaphore *sem)
+-{
+-      rt_up_read(sem);
+-}
+-
+-static inline void up_write(struct rw_semaphore *sem)
+-{
+-      rt_up_write(sem);
+-}
+-
+-static inline void downgrade_write(struct rw_semaphore *sem)
++static inline int rwsem_is_locked(struct rw_semaphore *sem)
+ {
+-      rt_downgrade_write(sem);
++      return atomic_read(&sem->readers) != READER_BIAS;
+ }
+-static inline void down_read_nested(struct rw_semaphore *sem, int subclass)
+-{
+-      return rt_down_read_nested(sem, subclass);
+-}
+-
+-static inline void down_write_nested(struct rw_semaphore *sem, int subclass)
+-{
+-      rt_down_write_nested(sem, subclass);
+-}
+-
+-static inline int down_write_killable_nested(struct rw_semaphore *sem,
+-                                           int subclass)
+-{
+-      return rt_down_write_killable_nested(sem, subclass);
+-}
+-
+-#ifdef CONFIG_DEBUG_LOCK_ALLOC
+-static inline void down_write_nest_lock(struct rw_semaphore *sem,
+-              struct rw_semaphore *nest_lock)
++static inline int rwsem_is_contended(struct rw_semaphore *sem)
+ {
+-      rt_down_write_nested_lock(sem, &nest_lock->dep_map);
++      return atomic_read(&sem->readers) > 0;
+ }
+-#else
++extern void __down_read(struct rw_semaphore *sem);
++extern int __down_read_trylock(struct rw_semaphore *sem);
++extern void __down_write(struct rw_semaphore *sem);
++extern int __must_check __down_write_killable(struct rw_semaphore *sem);
++extern int __down_write_trylock(struct rw_semaphore *sem);
++extern void __up_read(struct rw_semaphore *sem);
++extern void __up_write(struct rw_semaphore *sem);
++extern void __downgrade_write(struct rw_semaphore *sem);
+-static inline void down_write_nest_lock(struct rw_semaphore *sem,
+-              struct rw_semaphore *nest_lock)
+-{
+-      rt_down_write_nested_lock(sem, NULL);
+-}
+-#endif
+ #endif
+--- a/kernel/locking/Makefile
++++ b/kernel/locking/Makefile
+@@ -14,8 +14,8 @@ endif
+ ifneq ($(CONFIG_PREEMPT_RT_FULL),y)
+ obj-y += mutex.o
+ obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o
+-obj-y += rwsem.o
+ endif
++obj-y += rwsem.o
+ obj-$(CONFIG_LOCKDEP) += lockdep.o
+ ifeq ($(CONFIG_PROC_FS),y)
+ obj-$(CONFIG_LOCKDEP) += lockdep_proc.o
+@@ -32,6 +32,6 @@ ifneq ($(CONFIG_PREEMPT_RT_FULL),y)
+ obj-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
+ obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem-xadd.o
+ endif
+-obj-$(CONFIG_PREEMPT_RT_FULL) += rt.o
++obj-$(CONFIG_PREEMPT_RT_FULL) += rt.o rwsem-rt.o
+ obj-$(CONFIG_QUEUED_RWLOCKS) += qrwlock.o
+ obj-$(CONFIG_LOCK_TORTURE_TEST) += locktorture.o
+--- a/kernel/locking/rt.c
++++ b/kernel/locking/rt.c
+@@ -306,173 +306,6 @@ void __rt_rwlock_init(rwlock_t *rwlock,
+ }
+ EXPORT_SYMBOL(__rt_rwlock_init);
+-/*
+- * rw_semaphores
+- */
+-
+-void  rt_up_write(struct rw_semaphore *rwsem)
+-{
+-      rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
+-      rt_mutex_unlock(&rwsem->lock);
+-}
+-EXPORT_SYMBOL(rt_up_write);
+-
+-void __rt_up_read(struct rw_semaphore *rwsem)
+-{
+-      if (--rwsem->read_depth == 0)
+-              rt_mutex_unlock(&rwsem->lock);
+-}
+-
+-void  rt_up_read(struct rw_semaphore *rwsem)
+-{
+-      rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
+-      __rt_up_read(rwsem);
+-}
+-EXPORT_SYMBOL(rt_up_read);
+-
+-/*
+- * downgrade a write lock into a read lock
+- * - just wake up any readers at the front of the queue
+- */
+-void  rt_downgrade_write(struct rw_semaphore *rwsem)
+-{
+-      BUG_ON(rt_mutex_owner(&rwsem->lock) != current);
+-      rwsem->read_depth = 1;
+-}
+-EXPORT_SYMBOL(rt_downgrade_write);
+-
+-int  rt_down_write_trylock(struct rw_semaphore *rwsem)
+-{
+-      int ret = rt_mutex_trylock(&rwsem->lock);
+-
+-      if (ret)
+-              rwsem_acquire(&rwsem->dep_map, 0, 1, _RET_IP_);
+-      return ret;
+-}
+-EXPORT_SYMBOL(rt_down_write_trylock);
+-
+-void  rt_down_write(struct rw_semaphore *rwsem)
+-{
+-      rwsem_acquire(&rwsem->dep_map, 0, 0, _RET_IP_);
+-      rt_mutex_lock(&rwsem->lock);
+-}
+-EXPORT_SYMBOL(rt_down_write);
+-
+-int rt_down_write_killable(struct rw_semaphore *rwsem)
+-{
+-      int ret;
+-
+-      rwsem_acquire(&rwsem->dep_map, 0, 0, _RET_IP_);
+-      ret = rt_mutex_lock_killable(&rwsem->lock);
+-      if (ret)
+-              rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
+-      return ret;
+-}
+-EXPORT_SYMBOL(rt_down_write_killable);
+-
+-int rt_down_write_killable_nested(struct rw_semaphore *rwsem, int subclass)
+-{
+-      int ret;
+-
+-      rwsem_acquire(&rwsem->dep_map, subclass, 0, _RET_IP_);
+-      ret = rt_mutex_lock_killable(&rwsem->lock);
+-      if (ret)
+-              rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
+-      return ret;
+-}
+-EXPORT_SYMBOL(rt_down_write_killable_nested);
+-
+-void  rt_down_write_nested(struct rw_semaphore *rwsem, int subclass)
+-{
+-      rwsem_acquire(&rwsem->dep_map, subclass, 0, _RET_IP_);
+-      rt_mutex_lock(&rwsem->lock);
+-}
+-EXPORT_SYMBOL(rt_down_write_nested);
+-
+-void rt_down_write_nested_lock(struct rw_semaphore *rwsem,
+-                             struct lockdep_map *nest)
+-{
+-      rwsem_acquire_nest(&rwsem->dep_map, 0, 0, nest, _RET_IP_);
+-      rt_mutex_lock(&rwsem->lock);
+-}
+-EXPORT_SYMBOL(rt_down_write_nested_lock);
+-
+-int rt__down_read_trylock(struct rw_semaphore *rwsem)
+-{
+-      struct rt_mutex *lock = &rwsem->lock;
+-      int ret = 1;
+-
+-      /*
+-       * recursive read locks succeed when current owns the rwsem,
+-       * but not when read_depth == 0 which means that the rwsem is
+-       * write locked.
+-       */
+-      if (rt_mutex_owner(lock) != current)
+-              ret = rt_mutex_trylock(&rwsem->lock);
+-      else if (!rwsem->read_depth)
+-              ret = 0;
+-
+-      if (ret)
+-              rwsem->read_depth++;
+-      return ret;
+-
+-}
+-
+-int  rt_down_read_trylock(struct rw_semaphore *rwsem)
+-{
+-      int ret;
+-
+-      ret = rt__down_read_trylock(rwsem);
+-      if (ret)
+-              rwsem_acquire(&rwsem->dep_map, 0, 1, _RET_IP_);
+-
+-      return ret;
+-}
+-EXPORT_SYMBOL(rt_down_read_trylock);
+-
+-void rt__down_read(struct rw_semaphore *rwsem)
+-{
+-      struct rt_mutex *lock = &rwsem->lock;
+-
+-      if (rt_mutex_owner(lock) != current)
+-              rt_mutex_lock(&rwsem->lock);
+-      rwsem->read_depth++;
+-}
+-EXPORT_SYMBOL(rt__down_read);
+-
+-static void __rt_down_read(struct rw_semaphore *rwsem, int subclass)
+-{
+-      rwsem_acquire_read(&rwsem->dep_map, subclass, 0, _RET_IP_);
+-      rt__down_read(rwsem);
+-}
+-
+-void  rt_down_read(struct rw_semaphore *rwsem)
+-{
+-      __rt_down_read(rwsem, 0);
+-}
+-EXPORT_SYMBOL(rt_down_read);
+-
+-void  rt_down_read_nested(struct rw_semaphore *rwsem, int subclass)
+-{
+-      __rt_down_read(rwsem, subclass);
+-}
+-EXPORT_SYMBOL(rt_down_read_nested);
+-
+-void  __rt_rwsem_init(struct rw_semaphore *rwsem, const char *name,
+-                            struct lock_class_key *key)
+-{
+-#ifdef CONFIG_DEBUG_LOCK_ALLOC
+-      /*
+-       * Make sure we are not reinitializing a held lock:
+-       */
+-      debug_check_no_locks_freed((void *)rwsem, sizeof(*rwsem));
+-      lockdep_init_map(&rwsem->dep_map, name, key, 0);
+-#endif
+-      rwsem->read_depth = 0;
+-      rwsem->lock.save_state = 0;
+-}
+-EXPORT_SYMBOL(__rt_rwsem_init);
+-
+ /**
+  * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0
+  * @cnt: the atomic which we are to dec
+--- /dev/null
++++ b/kernel/locking/rwsem-rt.c
+@@ -0,0 +1,268 @@
++/*
++ */
++#include <linux/rwsem.h>
++#include <linux/sched.h>
++#include <linux/export.h>
++
++#include "rtmutex_common.h"
++
++/*
++ * RT-specific reader/writer semaphores
++ *
++ * down_write()
++ *  1) Lock sem->rtmutex
++ *  2) Remove the reader BIAS to force readers into the slow path
++ *  3) Wait until all readers have left the critical region
++ *  4) Mark it write locked
++ *
++ * up_write()
++ *  1) Remove the write locked marker
++ *  2) Set the reader BIAS so readers can use the fast path again
++ *  3) Unlock sem->rtmutex to release blocked readers
++ *
++ * down_read()
++ *  1) Try fast path acquisition (reader BIAS is set)
++ *  2) Take sem->rtmutex.wait_lock which protects the writelocked flag
++ *  3) If !writelocked, acquire it for read
++ *  4) If writelocked, block on sem->rtmutex
++ *  5) unlock sem->rtmutex, goto 1)
++ *
++ * up_read()
++ *  1) Try fast path release (reader count != 1)
++ *  2) Wake the writer waiting in down_write()#3
++ *
++ * down_read()#3 has the consequence, that rw semaphores on RT are not writer
++ * fair, but writers, which should be avoided in RT tasks (think mmap_sem),
++ * are subject to the rtmutex priority/DL inheritance mechanism.
++ *
++ * It's possible to make the rw semaphores writer fair by keeping a list of
++ * active readers. A blocked writer would force all newly incoming readers to
++ * block on the rtmutex, but the rtmutex would have to be proxy locked for one
++ * reader after the other. We can't use multi-reader inheritance because there
++ * is no way to support that with SCHED_DEADLINE. Implementing the one by one
++ * reader boosting/handover mechanism is a major surgery for a very dubious
++ * value.
++ *
++ * The risk of writer starvation is there, but the pathological use cases
++ * which trigger it are not necessarily the typical RT workloads.
++ */
++
++void __rwsem_init(struct rw_semaphore *sem, const char *name,
++                struct lock_class_key *key)
++{
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      /*
++       * Make sure we are not reinitializing a held semaphore:
++       */
++      debug_check_no_locks_freed((void *)sem, sizeof(*sem));
++      lockdep_init_map(&sem->dep_map, name, key, 0);
++#endif
++      atomic_set(&sem->readers, READER_BIAS);
++}
++EXPORT_SYMBOL(__rwsem_init);
++
++int __down_read_trylock(struct rw_semaphore *sem)
++{
++      int r, old;
++
++      /*
++       * Increment reader count, if sem->readers < 0, i.e. READER_BIAS is
++       * set.
++       */
++      for (r = atomic_read(&sem->readers); r < 0;) {
++              old = atomic_cmpxchg(&sem->readers, r, r + 1);
++              if (likely(old == r))
++                      return 1;
++              r = old;
++      }
++      return 0;
++}
++
++void __sched __down_read(struct rw_semaphore *sem)
++{
++      struct rt_mutex *m = &sem->rtmutex;
++      struct rt_mutex_waiter waiter;
++
++      if (__down_read_trylock(sem))
++              return;
++
++      might_sleep();
++      raw_spin_lock_irq(&m->wait_lock);
++      /*
++       * Allow readers as long as the writer has not completely
++       * acquired the semaphore for write.
++       */
++      if (atomic_read(&sem->readers) != WRITER_BIAS) {
++              atomic_inc(&sem->readers);
++              raw_spin_unlock_irq(&m->wait_lock);
++              return;
++      }
++
++      /*
++       * Call into the slow lock path with the rtmutex->wait_lock
++       * held, so this can't result in the following race:
++       *
++       * Reader1              Reader2         Writer
++       *                      down_read()
++       *                                      down_write()
++       *                                      rtmutex_lock(m)
++       *                                      swait()
++       * down_read()
++       * unlock(m->wait_lock)
++       *                      up_read()
++       *                      swake()
++       *                                      lock(m->wait_lock)
++       *                                      sem->writelocked=true
++       *                                      unlock(m->wait_lock)
++       *
++       *                                      up_write()
++       *                                      sem->writelocked=false
++       *                                      rtmutex_unlock(m)
++       *                      down_read()
++       *                                      down_write()
++       *                                      rtmutex_lock(m)
++       *                                      swait()
++       * rtmutex_lock(m)
++       *
++       * That would put Reader1 behind the writer waiting on
++       * Reader2 to call up_read() which might be unbound.
++       */
++      rt_mutex_init_waiter(&waiter, false);
++      rt_mutex_slowlock_locked(m, TASK_UNINTERRUPTIBLE, NULL,
++                               RT_MUTEX_MIN_CHAINWALK, NULL,
++                               &waiter);
++      /*
++       * The slowlock() above is guaranteed to return with the rtmutex is
++       * now held, so there can't be a writer active. Increment the reader
++       * count and immediately drop the rtmutex again.
++       */
++      atomic_inc(&sem->readers);
++      raw_spin_unlock_irq(&m->wait_lock);
++      rt_mutex_unlock(m);
++
++      debug_rt_mutex_free_waiter(&waiter);
++}
++
++void __up_read(struct rw_semaphore *sem)
++{
++      struct rt_mutex *m = &sem->rtmutex;
++      struct task_struct *tsk;
++
++      /*
++       * sem->readers can only hit 0 when a writer is waiting for the
++       * active readers to leave the critical region.
++       */
++      if (!atomic_dec_and_test(&sem->readers))
++              return;
++
++      might_sleep();
++      raw_spin_lock_irq(&m->wait_lock);
++      /*
++       * Wake the writer, i.e. the rtmutex owner. It might release the
++       * rtmutex concurrently in the fast path (due to a signal), but to
++       * clean up the rwsem it needs to acquire m->wait_lock. The worst
++       * case which can happen is a spurious wakeup.
++       */
++      tsk = rt_mutex_owner(m);
++      if (tsk)
++              wake_up_process(tsk);
++
++      raw_spin_unlock_irq(&m->wait_lock);
++}
++
++static void __up_write_unlock(struct rw_semaphore *sem, int bias,
++                            unsigned long flags)
++{
++      struct rt_mutex *m = &sem->rtmutex;
++
++      atomic_add(READER_BIAS - bias, &sem->readers);
++      raw_spin_unlock_irqrestore(&m->wait_lock, flags);
++      rt_mutex_unlock(m);
++}
++
++static int __sched __down_write_common(struct rw_semaphore *sem, int state)
++{
++      struct rt_mutex *m = &sem->rtmutex;
++      unsigned long flags;
++
++      /* Take the rtmutex as a first step */
++      if (rt_mutex_lock_state(m, state))
++              return -EINTR;
++
++      /* Force readers into slow path */
++      atomic_sub(READER_BIAS, &sem->readers);
++      might_sleep();
++
++      set_current_state(state);
++      for (;;) {
++              raw_spin_lock_irqsave(&m->wait_lock, flags);
++              /* Have all readers left the critical region? */
++              if (!atomic_read(&sem->readers)) {
++                      atomic_set(&sem->readers, WRITER_BIAS);
++                      __set_current_state(TASK_RUNNING);
++                      raw_spin_unlock_irqrestore(&m->wait_lock, flags);
++                      return 0;
++              }
++
++              if (signal_pending_state(state, current)) {
++                      __set_current_state(TASK_RUNNING);
++                      __up_write_unlock(sem, 0, flags);
++                      return -EINTR;
++              }
++              raw_spin_unlock_irqrestore(&m->wait_lock, flags);
++
++              if (atomic_read(&sem->readers) != 0) {
++                      schedule();
++                      set_current_state(state);
++              }
++      }
++}
++
++void __sched __down_write(struct rw_semaphore *sem)
++{
++      __down_write_common(sem, TASK_UNINTERRUPTIBLE);
++}
++
++int __sched __down_write_killable(struct rw_semaphore *sem)
++{
++      return __down_write_common(sem, TASK_KILLABLE);
++}
++
++int __down_write_trylock(struct rw_semaphore *sem)
++{
++      struct rt_mutex *m = &sem->rtmutex;
++      unsigned long flags;
++
++      if (!rt_mutex_trylock(m))
++              return 0;
++
++      atomic_sub(READER_BIAS, &sem->readers);
++
++      raw_spin_lock_irqsave(&m->wait_lock, flags);
++      if (!atomic_read(&sem->readers)) {
++              atomic_set(&sem->readers, WRITER_BIAS);
++              raw_spin_unlock_irqrestore(&m->wait_lock, flags);
++              return 1;
++      }
++      __up_write_unlock(sem, 0, flags);
++      return 0;
++}
++
++void __up_write(struct rw_semaphore *sem)
++{
++      struct rt_mutex *m = &sem->rtmutex;
++      unsigned long flags;
++
++      raw_spin_lock_irqsave(&m->wait_lock, flags);
++      __up_write_unlock(sem, WRITER_BIAS, flags);
++}
++
++void __downgrade_write(struct rw_semaphore *sem)
++{
++      struct rt_mutex *m = &sem->rtmutex;
++      unsigned long flags;
++
++      raw_spin_lock_irqsave(&m->wait_lock, flags);
++      /* Release it and account current as reader */
++      __up_write_unlock(sem, WRITER_BIAS - 1, flags);
++}
diff --git a/patches/features/all/rt/rxrpc-remove-unused-static-variables.patch b/patches/features/all/rt/rxrpc-remove-unused-static-variables.patch
new file mode 100644 (file)
index 0000000..56be550
--- /dev/null
@@ -0,0 +1,27 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 21 Oct 2016 10:54:50 +0200
+Subject: [PATCH] rxrpc: remove unused static variables
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The rxrpc_security_methods and rxrpc_security_sem user has been removed
+in 648af7fca159 ("rxrpc: Absorb the rxkad security module"). This was
+noticed by kbuild test robot for the -RT tree but is also true for !RT.
+
+Reported-by: kbuild test robot <fengguang.wu@intel.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ net/rxrpc/security.c |    3 ---
+ 1 file changed, 3 deletions(-)
+
+--- a/net/rxrpc/security.c
++++ b/net/rxrpc/security.c
+@@ -19,9 +19,6 @@
+ #include <keys/rxrpc-type.h>
+ #include "ar-internal.h"
+-static LIST_HEAD(rxrpc_security_methods);
+-static DECLARE_RWSEM(rxrpc_security_sem);
+-
+ static const struct rxrpc_security *rxrpc_security_types[] = {
+       [RXRPC_SECURITY_NONE]   = &rxrpc_no_security,
+ #ifdef CONFIG_RXKAD
diff --git a/patches/features/all/rt/sas-ata-isci-dont-t-disable-interrupts-in-qc_issue-h.patch b/patches/features/all/rt/sas-ata-isci-dont-t-disable-interrupts-in-qc_issue-h.patch
new file mode 100644 (file)
index 0000000..e54594b
--- /dev/null
@@ -0,0 +1,79 @@
+From: Paul Gortmaker <paul.gortmaker@windriver.com>
+Date: Sat, 14 Feb 2015 11:01:16 -0500
+Subject: sas-ata/isci: dont't disable interrupts in qc_issue handler
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On 3.14-rt we see the following trace on Canoe Pass for
+SCSI_ISCI "Intel(R) C600 Series Chipset SAS Controller"
+when the sas qc_issue handler is run:
+
+ BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:905
+ in_atomic(): 0, irqs_disabled(): 1, pid: 432, name: udevd
+ CPU: 11 PID: 432 Comm: udevd Not tainted 3.14.28-rt22 #2
+ Hardware name: Intel Corporation S2600CP/S2600CP, BIOS SE5C600.86B.02.01.0002.082220131453 08/22/2013
+ ffff880fab500000 ffff880fa9f239c0 ffffffff81a2d273 0000000000000000
+ ffff880fa9f239d8 ffffffff8107f023 ffff880faac23dc0 ffff880fa9f239f0
+ ffffffff81a33cc0 ffff880faaeb1400 ffff880fa9f23a40 ffffffff815de891
+ Call Trace:
+ [<ffffffff81a2d273>] dump_stack+0x4e/0x7a
+ [<ffffffff8107f023>] __might_sleep+0xe3/0x160
+ [<ffffffff81a33cc0>] rt_spin_lock+0x20/0x50
+ [<ffffffff815de891>] isci_task_execute_task+0x171/0x2f0  <-----
+ [<ffffffff815cfecb>] sas_ata_qc_issue+0x25b/0x2a0
+ [<ffffffff81606363>] ata_qc_issue+0x1f3/0x370
+ [<ffffffff8160c600>] ? ata_scsi_invalid_field+0x40/0x40
+ [<ffffffff8160c8f5>] ata_scsi_translate+0xa5/0x1b0
+ [<ffffffff8160efc6>] ata_sas_queuecmd+0x86/0x280
+ [<ffffffff815ce446>] sas_queuecommand+0x196/0x230
+ [<ffffffff81081fad>] ? get_parent_ip+0xd/0x50
+ [<ffffffff815b05a4>] scsi_dispatch_cmd+0xb4/0x210
+ [<ffffffff815b7744>] scsi_request_fn+0x314/0x530
+
+and gdb shows:
+
+(gdb) list * isci_task_execute_task+0x171
+0xffffffff815ddfb1 is in isci_task_execute_task (drivers/scsi/isci/task.c:138).
+133             dev_dbg(&ihost->pdev->dev, "%s: num=%d\n", __func__, num);
+134
+135             for_each_sas_task(num, task) {
+136                     enum sci_status status = SCI_FAILURE;
+137
+138                     spin_lock_irqsave(&ihost->scic_lock, flags);    <-----
+139                     idev = isci_lookup_device(task->dev);
+140                     io_ready = isci_device_io_ready(idev, task);
+141                     tag = isci_alloc_tag(ihost);
+142                     spin_unlock_irqrestore(&ihost->scic_lock, flags);
+(gdb)
+
+In addition to the scic_lock, the function also contains locking of
+the task_state_lock -- which is clearly not a candidate for raw lock
+conversion.  As can be seen by the comment nearby, we really should
+be running the qc_issue code with interrupts enabled anyway.
+
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/scsi/libsas/sas_ata.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/scsi/libsas/sas_ata.c
++++ b/drivers/scsi/libsas/sas_ata.c
+@@ -190,7 +190,7 @@ static unsigned int sas_ata_qc_issue(str
+       /* TODO: audit callers to ensure they are ready for qc_issue to
+        * unconditionally re-enable interrupts
+        */
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       spin_unlock(ap->lock);
+       /* If the device fell off, no sense in issuing commands */
+@@ -252,7 +252,7 @@ static unsigned int sas_ata_qc_issue(str
+  out:
+       spin_lock(ap->lock);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+       return ret;
+ }
diff --git a/patches/features/all/rt/sched-deadline-dl_task_timer-has-to-be-irqsafe.patch b/patches/features/all/rt/sched-deadline-dl_task_timer-has-to-be-irqsafe.patch
new file mode 100644 (file)
index 0000000..f4778b2
--- /dev/null
@@ -0,0 +1,23 @@
+From: Juri Lelli <juri.lelli@gmail.com>
+Date: Tue, 13 May 2014 15:30:20 +0200
+Subject: sched/deadline: dl_task_timer has to be irqsafe
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+As for rt_period_timer, dl_task_timer has to be irqsafe.
+
+Signed-off-by: Juri Lelli <juri.lelli@gmail.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/sched/deadline.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/kernel/sched/deadline.c
++++ b/kernel/sched/deadline.c
+@@ -687,6 +687,7 @@ void init_dl_task_timer(struct sched_dl_
+       hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+       timer->function = dl_task_timer;
++      timer->irqsafe = 1;
+ }
+ static
diff --git a/patches/features/all/rt/sched-delay-put-task.patch b/patches/features/all/rt/sched-delay-put-task.patch
new file mode 100644 (file)
index 0000000..f8f62f1
--- /dev/null
@@ -0,0 +1,82 @@
+Subject: sched: Move task_struct cleanup to RCU
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 31 May 2011 16:59:16 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+__put_task_struct() does quite some expensive work. We don't want to
+burden random tasks with that.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/sched.h |   13 +++++++++++++
+ kernel/fork.c         |   15 ++++++++++++++-
+ 2 files changed, 27 insertions(+), 1 deletion(-)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1962,6 +1962,9 @@ struct task_struct {
+       unsigned int    sequential_io;
+       unsigned int    sequential_io_avg;
+ #endif
++#ifdef CONFIG_PREEMPT_RT_BASE
++      struct rcu_head put_rcu;
++#endif
+ #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
+       unsigned long   task_state_change;
+ #endif
+@@ -2219,6 +2222,15 @@ extern struct pid *cad_pid;
+ extern void free_task(struct task_struct *tsk);
+ #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
++#ifdef CONFIG_PREEMPT_RT_BASE
++extern void __put_task_struct_cb(struct rcu_head *rhp);
++
++static inline void put_task_struct(struct task_struct *t)
++{
++      if (atomic_dec_and_test(&t->usage))
++              call_rcu(&t->put_rcu, __put_task_struct_cb);
++}
++#else
+ extern void __put_task_struct(struct task_struct *t);
+ static inline void put_task_struct(struct task_struct *t)
+@@ -2226,6 +2238,7 @@ static inline void put_task_struct(struc
+       if (atomic_dec_and_test(&t->usage))
+               __put_task_struct(t);
+ }
++#endif
+ struct task_struct *task_rcu_dereference(struct task_struct **ptask);
+ struct task_struct *try_get_task_struct(struct task_struct **ptask);
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -376,7 +376,9 @@ static inline void put_signal_struct(str
+       if (atomic_dec_and_test(&sig->sigcnt))
+               free_signal_struct(sig);
+ }
+-
++#ifdef CONFIG_PREEMPT_RT_BASE
++static
++#endif
+ void __put_task_struct(struct task_struct *tsk)
+ {
+       WARN_ON(!tsk->exit_state);
+@@ -393,7 +395,18 @@ void __put_task_struct(struct task_struc
+       if (!profile_handoff_task(tsk))
+               free_task(tsk);
+ }
++#ifndef CONFIG_PREEMPT_RT_BASE
+ EXPORT_SYMBOL_GPL(__put_task_struct);
++#else
++void __put_task_struct_cb(struct rcu_head *rhp)
++{
++      struct task_struct *tsk = container_of(rhp, struct task_struct, put_rcu);
++
++      __put_task_struct(tsk);
++
++}
++EXPORT_SYMBOL_GPL(__put_task_struct_cb);
++#endif
+ void __init __weak arch_task_cache_init(void) { }
diff --git a/patches/features/all/rt/sched-disable-rt-group-sched-on-rt.patch b/patches/features/all/rt/sched-disable-rt-group-sched-on-rt.patch
new file mode 100644 (file)
index 0000000..23f71fe
--- /dev/null
@@ -0,0 +1,29 @@
+Subject: sched: Disable CONFIG_RT_GROUP_SCHED on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 18 Jul 2011 17:03:52 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Carsten reported problems when running:
+
+  taskset 01 chrt -f 1 sleep 1
+
+from within rc.local on a F15 machine. The task stays running and
+never gets on the run queue because some of the run queues have
+rt_throttled=1 which does not go away. Works nice from a ssh login
+shell. Disabling CONFIG_RT_GROUP_SCHED solves that as well.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ init/Kconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -1051,6 +1051,7 @@ config CFS_BANDWIDTH
+ config RT_GROUP_SCHED
+       bool "Group scheduling for SCHED_RR/FIFO"
+       depends on CGROUP_SCHED
++      depends on !PREEMPT_RT_FULL
+       default n
+       help
+         This feature lets you explicitly allocate real CPU bandwidth
diff --git a/patches/features/all/rt/sched-disable-ttwu-queue.patch b/patches/features/all/rt/sched-disable-ttwu-queue.patch
new file mode 100644 (file)
index 0000000..12d41b7
--- /dev/null
@@ -0,0 +1,32 @@
+Subject: sched: Disable TTWU_QUEUE on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 13 Sep 2011 16:42:35 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The queued remote wakeup mechanism can introduce rather large
+latencies if the number of migrated tasks is high. Disable it for RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/sched/features.h |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/kernel/sched/features.h
++++ b/kernel/sched/features.h
+@@ -45,11 +45,16 @@ SCHED_FEAT(LB_BIAS, true)
+  */
+ SCHED_FEAT(NONTASK_CAPACITY, true)
++#ifdef CONFIG_PREEMPT_RT_FULL
++SCHED_FEAT(TTWU_QUEUE, false)
++#else
++
+ /*
+  * Queue remote wakeups on the target CPU and process them
+  * using the scheduler IPI. Reduces rq->lock contention/bounces.
+  */
+ SCHED_FEAT(TTWU_QUEUE, true)
++#endif
+ #ifdef HAVE_RT_PUSH_IPI
+ /*
diff --git a/patches/features/all/rt/sched-limit-nr-migrate.patch b/patches/features/all/rt/sched-limit-nr-migrate.patch
new file mode 100644 (file)
index 0000000..d7e9c3f
--- /dev/null
@@ -0,0 +1,27 @@
+Subject: sched: Limit the number of task migrations per batch
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 06 Jun 2011 12:12:51 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Put an upper limit on the number of tasks which are migrated per batch
+to avoid large latencies.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/sched/core.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -129,7 +129,11 @@ const_debug unsigned int sysctl_sched_fe
+  * Number of tasks to iterate in a single balance run.
+  * Limited because this is done with IRQs disabled.
+  */
++#ifndef CONFIG_PREEMPT_RT_FULL
+ const_debug unsigned int sysctl_sched_nr_migrate = 32;
++#else
++const_debug unsigned int sysctl_sched_nr_migrate = 8;
++#endif
+ /*
+  * period over which we average the RT time consumption, measured
diff --git a/patches/features/all/rt/sched-might-sleep-do-not-account-rcu-depth.patch b/patches/features/all/rt/sched-might-sleep-do-not-account-rcu-depth.patch
new file mode 100644 (file)
index 0000000..a9eda0e
--- /dev/null
@@ -0,0 +1,48 @@
+Subject: sched: Do not account rcu_preempt_depth on RT in might_sleep()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 07 Jun 2011 09:19:06 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+RT changes the rcu_preempt_depth semantics, so we cannot check for it
+in might_sleep().
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/rcupdate.h |    7 +++++++
+ kernel/sched/core.c      |    2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+--- a/include/linux/rcupdate.h
++++ b/include/linux/rcupdate.h
+@@ -301,6 +301,11 @@ void synchronize_rcu(void);
+  * types of kernel builds, the rcu_read_lock() nesting depth is unknowable.
+  */
+ #define rcu_preempt_depth() (current->rcu_read_lock_nesting)
++#ifndef CONFIG_PREEMPT_RT_FULL
++#define sched_rcu_preempt_depth()     rcu_preempt_depth()
++#else
++static inline int sched_rcu_preempt_depth(void) { return 0; }
++#endif
+ #else /* #ifdef CONFIG_PREEMPT_RCU */
+@@ -326,6 +331,8 @@ static inline int rcu_preempt_depth(void
+       return 0;
+ }
++#define sched_rcu_preempt_depth()     rcu_preempt_depth()
++
+ #endif /* #else #ifdef CONFIG_PREEMPT_RCU */
+ /* Internal to kernel */
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -7820,7 +7820,7 @@ void __init sched_init(void)
+ #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
+ static inline int preempt_count_equals(int preempt_offset)
+ {
+-      int nested = preempt_count() + rcu_preempt_depth();
++      int nested = preempt_count() + sched_rcu_preempt_depth();
+       return (nested == preempt_offset);
+ }
diff --git a/patches/features/all/rt/sched-mmdrop-delayed.patch b/patches/features/all/rt/sched-mmdrop-delayed.patch
new file mode 100644 (file)
index 0000000..5ccbb9c
--- /dev/null
@@ -0,0 +1,128 @@
+Subject: sched: Move mmdrop to RCU on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 06 Jun 2011 12:20:33 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Takes sleeping locks and calls into the memory allocator, so nothing
+we want to do in task switch and oder atomic contexts.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/mm_types.h |    4 ++++
+ include/linux/sched.h    |   11 +++++++++++
+ kernel/fork.c            |   13 +++++++++++++
+ kernel/sched/core.c      |   19 +++++++++++++++++--
+ 4 files changed, 45 insertions(+), 2 deletions(-)
+
+--- a/include/linux/mm_types.h
++++ b/include/linux/mm_types.h
+@@ -11,6 +11,7 @@
+ #include <linux/completion.h>
+ #include <linux/cpumask.h>
+ #include <linux/uprobes.h>
++#include <linux/rcupdate.h>
+ #include <linux/page-flags-layout.h>
+ #include <linux/workqueue.h>
+ #include <asm/page.h>
+@@ -509,6 +510,9 @@ struct mm_struct {
+       bool tlb_flush_pending;
+ #endif
+       struct uprobes_state uprobes_state;
++#ifdef CONFIG_PREEMPT_RT_BASE
++      struct rcu_head delayed_drop;
++#endif
+ #ifdef CONFIG_X86_INTEL_MPX
+       /* address of the bounds directory */
+       void __user *bd_addr;
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -2906,6 +2906,17 @@ static inline void mmdrop(struct mm_stru
+               __mmdrop(mm);
+ }
++#ifdef CONFIG_PREEMPT_RT_BASE
++extern void __mmdrop_delayed(struct rcu_head *rhp);
++static inline void mmdrop_delayed(struct mm_struct *mm)
++{
++      if (atomic_dec_and_test(&mm->mm_count))
++              call_rcu(&mm->delayed_drop, __mmdrop_delayed);
++}
++#else
++# define mmdrop_delayed(mm)   mmdrop(mm)
++#endif
++
+ static inline void mmdrop_async_fn(struct work_struct *work)
+ {
+       struct mm_struct *mm = container_of(work, struct mm_struct, async_put_work);
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -865,6 +865,19 @@ void __mmdrop(struct mm_struct *mm)
+ }
+ EXPORT_SYMBOL_GPL(__mmdrop);
++#ifdef CONFIG_PREEMPT_RT_BASE
++/*
++ * RCU callback for delayed mm drop. Not strictly rcu, but we don't
++ * want another facility to make this work.
++ */
++void __mmdrop_delayed(struct rcu_head *rhp)
++{
++      struct mm_struct *mm = container_of(rhp, struct mm_struct, delayed_drop);
++
++      __mmdrop(mm);
++}
++#endif
++
+ static inline void __mmput(struct mm_struct *mm)
+ {
+       VM_BUG_ON(atomic_read(&mm->mm_users));
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -2785,8 +2785,12 @@ static struct rq *finish_task_switch(str
+       finish_arch_post_lock_switch();
+       fire_sched_in_preempt_notifiers(current);
++      /*
++       * We use mmdrop_delayed() here so we don't have to do the
++       * full __mmdrop() when we are the last user.
++       */
+       if (mm)
+-              mmdrop(mm);
++              mmdrop_delayed(mm);
+       if (unlikely(prev_state == TASK_DEAD)) {
+               if (prev->sched_class->task_dead)
+                       prev->sched_class->task_dead(prev);
+@@ -5545,6 +5549,8 @@ void sched_setnuma(struct task_struct *p
+ #endif /* CONFIG_NUMA_BALANCING */
+ #ifdef CONFIG_HOTPLUG_CPU
++static DEFINE_PER_CPU(struct mm_struct *, idle_last_mm);
++
+ /*
+  * Ensures that the idle task is using init_mm right before its cpu goes
+  * offline.
+@@ -5559,7 +5565,12 @@ void idle_task_exit(void)
+               switch_mm_irqs_off(mm, &init_mm, current);
+               finish_arch_post_lock_switch();
+       }
+-      mmdrop(mm);
++      /*
++       * Defer the cleanup to an alive cpu. On RT we can neither
++       * call mmdrop() nor mmdrop_delayed() from here.
++       */
++      per_cpu(idle_last_mm, smp_processor_id()) = mm;
++
+ }
+ /*
+@@ -7505,6 +7516,10 @@ int sched_cpu_dying(unsigned int cpu)
+       update_max_interval();
+       nohz_balance_exit_idle(cpu);
+       hrtick_clear(rq);
++      if (per_cpu(idle_last_mm, cpu)) {
++              mmdrop_delayed(per_cpu(idle_last_mm, cpu));
++              per_cpu(idle_last_mm, cpu) = NULL;
++      }
+       return 0;
+ }
+ #endif
diff --git a/patches/features/all/rt/sched-rt-mutex-wakeup.patch b/patches/features/all/rt/sched-rt-mutex-wakeup.patch
new file mode 100644 (file)
index 0000000..1e5815e
--- /dev/null
@@ -0,0 +1,94 @@
+Subject: sched: Add saved_state for tasks blocked on sleeping locks
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 25 Jun 2011 09:21:04 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Spinlocks are state preserving in !RT. RT changes the state when a
+task gets blocked on a lock. So we need to remember the state before
+the lock contention. If a regular wakeup (not a RTmutex related
+wakeup) happens, the saved_state is updated to running. When the lock
+sleep is done, the saved state is restored.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/sched.h |    2 ++
+ kernel/sched/core.c   |   31 ++++++++++++++++++++++++++++++-
+ kernel/sched/sched.h  |    1 +
+ 3 files changed, 33 insertions(+), 1 deletion(-)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1481,6 +1481,7 @@ struct task_struct {
+       struct thread_info thread_info;
+ #endif
+       volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */
++      volatile long saved_state; /* saved state for "spinlock sleepers" */
+       void *stack;
+       atomic_t usage;
+       unsigned int flags;     /* per process flags, defined below */
+@@ -2698,6 +2699,7 @@ extern void xtime_update(unsigned long t
+ extern int wake_up_state(struct task_struct *tsk, unsigned int state);
+ extern int wake_up_process(struct task_struct *tsk);
++extern int wake_up_lock_sleeper(struct task_struct * tsk);
+ extern void wake_up_new_task(struct task_struct *tsk);
+ #ifdef CONFIG_SMP
+  extern void kick_process(struct task_struct *tsk);
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -2033,8 +2033,25 @@ try_to_wake_up(struct task_struct *p, un
+        */
+       smp_mb__before_spinlock();
+       raw_spin_lock_irqsave(&p->pi_lock, flags);
+-      if (!(p->state & state))
++      if (!(p->state & state)) {
++              /*
++               * The task might be running due to a spinlock sleeper
++               * wakeup. Check the saved state and set it to running
++               * if the wakeup condition is true.
++               */
++              if (!(wake_flags & WF_LOCK_SLEEPER)) {
++                      if (p->saved_state & state)
++                              p->saved_state = TASK_RUNNING;
++              }
+               goto out;
++      }
++
++      /*
++       * If this is a regular wakeup, then we can unconditionally
++       * clear the saved state of a "lock sleeper".
++       */
++      if (!(wake_flags & WF_LOCK_SLEEPER))
++              p->saved_state = TASK_RUNNING;
+       trace_sched_waking(p);
+@@ -2181,6 +2198,18 @@ int wake_up_process(struct task_struct *
+ }
+ EXPORT_SYMBOL(wake_up_process);
++/**
++ * wake_up_lock_sleeper - Wake up a specific process blocked on a "sleeping lock"
++ * @p: The process to be woken up.
++ *
++ * Same as wake_up_process() above, but wake_flags=WF_LOCK_SLEEPER to indicate
++ * the nature of the wakeup.
++ */
++int wake_up_lock_sleeper(struct task_struct *p)
++{
++      return try_to_wake_up(p, TASK_ALL, WF_LOCK_SLEEPER);
++}
++
+ int wake_up_state(struct task_struct *p, unsigned int state)
+ {
+       return try_to_wake_up(p, state, 0);
+--- a/kernel/sched/sched.h
++++ b/kernel/sched/sched.h
+@@ -1163,6 +1163,7 @@ static inline void finish_lock_switch(st
+ #define WF_SYNC               0x01            /* waker goes to sleep after wakeup */
+ #define WF_FORK               0x02            /* child wakeup after fork */
+ #define WF_MIGRATED   0x4             /* internal use, task got migrated */
++#define WF_LOCK_SLEEPER       0x08            /* wakeup spinlock "sleeper" */
+ /*
+  * To aid in avoiding the subversion of "niceness" due to uneven distribution
diff --git a/patches/features/all/rt/sched-ttwu-ensure-success-return-is-correct.patch b/patches/features/all/rt/sched-ttwu-ensure-success-return-is-correct.patch
new file mode 100644 (file)
index 0000000..801ee0c
--- /dev/null
@@ -0,0 +1,35 @@
+Subject: sched: ttwu: Return success when only changing the saved_state value
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 13 Dec 2011 21:42:19 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When a task blocks on a rt lock, it saves the current state in
+p->saved_state, so a lock related wake up will not destroy the
+original state.
+
+When a real wakeup happens, while the task is running due to a lock
+wakeup already, we update p->saved_state to TASK_RUNNING, but we do
+not return success, which might cause another wakeup in the waitqueue
+code and the task remains in the waitqueue list. Return success in
+that case as well.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ kernel/sched/core.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -2040,8 +2040,10 @@ try_to_wake_up(struct task_struct *p, un
+                * if the wakeup condition is true.
+                */
+               if (!(wake_flags & WF_LOCK_SLEEPER)) {
+-                      if (p->saved_state & state)
++                      if (p->saved_state & state) {
+                               p->saved_state = TASK_RUNNING;
++                              success = 1;
++                      }
+               }
+               goto out;
+       }
diff --git a/patches/features/all/rt/sched-workqueue-Only-wake-up-idle-workers-if-not-blo.patch b/patches/features/all/rt/sched-workqueue-Only-wake-up-idle-workers-if-not-blo.patch
new file mode 100644 (file)
index 0000000..e49d2ab
--- /dev/null
@@ -0,0 +1,38 @@
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Mon, 18 Mar 2013 15:12:49 -0400
+Subject: sched/workqueue: Only wake up idle workers if not blocked on sleeping spin lock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+In -rt, most spin_locks() turn into mutexes. One of these spin_lock
+conversions is performed on the workqueue gcwq->lock. When the idle
+worker is worken, the first thing it will do is grab that same lock and
+it too will block, possibly jumping into the same code, but because
+nr_running would already be decremented it prevents an infinite loop.
+
+But this is still a waste of CPU cycles, and it doesn't follow the method
+of mainline, as new workers should only be woken when a worker thread is
+truly going to sleep, and not just blocked on a spin_lock().
+
+Check the saved_state too before waking up new workers.
+
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/sched/core.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -3477,8 +3477,10 @@ static void __sched notrace __schedule(b
+                        * If a worker went to sleep, notify and ask workqueue
+                        * whether it wants to wake up a task to maintain
+                        * concurrency.
++                       * Only call wake up if prev isn't blocked on a sleeping
++                       * spin lock.
+                        */
+-                      if (prev->flags & PF_WQ_WORKER) {
++                      if (prev->flags & PF_WQ_WORKER && !prev->saved_state) {
+                               struct task_struct *to_wakeup;
+                               to_wakeup = wq_worker_sleeping(prev);
diff --git a/patches/features/all/rt/scsi-fcoe-rt-aware.patch b/patches/features/all/rt/scsi-fcoe-rt-aware.patch
new file mode 100644 (file)
index 0000000..9d51edf
--- /dev/null
@@ -0,0 +1,106 @@
+Subject: scsi/fcoe: Make RT aware.
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 12 Nov 2011 14:00:48 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Do not disable preemption while taking sleeping locks. All user look safe
+for migrate_diable() only.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/scsi/fcoe/fcoe.c      |   16 ++++++++--------
+ drivers/scsi/fcoe/fcoe_ctlr.c |    4 ++--
+ drivers/scsi/libfc/fc_exch.c  |    4 ++--
+ 3 files changed, 12 insertions(+), 12 deletions(-)
+
+--- a/drivers/scsi/fcoe/fcoe.c
++++ b/drivers/scsi/fcoe/fcoe.c
+@@ -1455,11 +1455,11 @@ static int fcoe_rcv(struct sk_buff *skb,
+ static int fcoe_alloc_paged_crc_eof(struct sk_buff *skb, int tlen)
+ {
+       struct fcoe_percpu_s *fps;
+-      int rc;
++      int rc, cpu = get_cpu_light();
+-      fps = &get_cpu_var(fcoe_percpu);
++      fps = &per_cpu(fcoe_percpu, cpu);
+       rc = fcoe_get_paged_crc_eof(skb, tlen, fps);
+-      put_cpu_var(fcoe_percpu);
++      put_cpu_light();
+       return rc;
+ }
+@@ -1646,11 +1646,11 @@ static inline int fcoe_filter_frames(str
+               return 0;
+       }
+-      stats = per_cpu_ptr(lport->stats, get_cpu());
++      stats = per_cpu_ptr(lport->stats, get_cpu_light());
+       stats->InvalidCRCCount++;
+       if (stats->InvalidCRCCount < 5)
+               printk(KERN_WARNING "fcoe: dropping frame with CRC error\n");
+-      put_cpu();
++      put_cpu_light();
+       return -EINVAL;
+ }
+@@ -1693,7 +1693,7 @@ static void fcoe_recv_frame(struct sk_bu
+        */
+       hp = (struct fcoe_hdr *) skb_network_header(skb);
+-      stats = per_cpu_ptr(lport->stats, get_cpu());
++      stats = per_cpu_ptr(lport->stats, get_cpu_light());
+       if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) {
+               if (stats->ErrorFrames < 5)
+                       printk(KERN_WARNING "fcoe: FCoE version "
+@@ -1725,13 +1725,13 @@ static void fcoe_recv_frame(struct sk_bu
+               goto drop;
+       if (!fcoe_filter_frames(lport, fp)) {
+-              put_cpu();
++              put_cpu_light();
+               fc_exch_recv(lport, fp);
+               return;
+       }
+ drop:
+       stats->ErrorFrames++;
+-      put_cpu();
++      put_cpu_light();
+       kfree_skb(skb);
+ }
+--- a/drivers/scsi/fcoe/fcoe_ctlr.c
++++ b/drivers/scsi/fcoe/fcoe_ctlr.c
+@@ -834,7 +834,7 @@ static unsigned long fcoe_ctlr_age_fcfs(
+       INIT_LIST_HEAD(&del_list);
+-      stats = per_cpu_ptr(fip->lp->stats, get_cpu());
++      stats = per_cpu_ptr(fip->lp->stats, get_cpu_light());
+       list_for_each_entry_safe(fcf, next, &fip->fcfs, list) {
+               deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2;
+@@ -870,7 +870,7 @@ static unsigned long fcoe_ctlr_age_fcfs(
+                               sel_time = fcf->time;
+               }
+       }
+-      put_cpu();
++      put_cpu_light();
+       list_for_each_entry_safe(fcf, next, &del_list, list) {
+               /* Removes fcf from current list */
+--- a/drivers/scsi/libfc/fc_exch.c
++++ b/drivers/scsi/libfc/fc_exch.c
+@@ -814,10 +814,10 @@ static struct fc_exch *fc_exch_em_alloc(
+       }
+       memset(ep, 0, sizeof(*ep));
+-      cpu = get_cpu();
++      cpu = get_cpu_light();
+       pool = per_cpu_ptr(mp->pool, cpu);
+       spin_lock_bh(&pool->lock);
+-      put_cpu();
++      put_cpu_light();
+       /* peek cache of free slot */
+       if (pool->left != FC_XID_UNKNOWN) {
diff --git a/patches/features/all/rt/scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch b/patches/features/all/rt/scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch
new file mode 100644 (file)
index 0000000..da4ed4c
--- /dev/null
@@ -0,0 +1,48 @@
+Subject: scsi: qla2xxx: Use local_irq_save_nort() in qla2x00_poll
+From: John Kacur <jkacur@redhat.com>
+Date: Fri, 27 Apr 2012 12:48:46 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+RT triggers the following:
+
+[   11.307652]  [<ffffffff81077b27>] __might_sleep+0xe7/0x110
+[   11.307663]  [<ffffffff8150e524>] rt_spin_lock+0x24/0x60
+[   11.307670]  [<ffffffff8150da78>] ? rt_spin_lock_slowunlock+0x78/0x90
+[   11.307703]  [<ffffffffa0272d83>] qla24xx_intr_handler+0x63/0x2d0 [qla2xxx]
+[   11.307736]  [<ffffffffa0262307>] qla2x00_poll+0x67/0x90 [qla2xxx]
+
+Function qla2x00_poll does local_irq_save() before calling qla24xx_intr_handler
+which has a spinlock. Since spinlocks are sleepable on rt, it is not allowed
+to call them with interrupts disabled. Therefore we use local_irq_save_nort()
+instead which saves flags without disabling interrupts.
+
+This fix needs to be applied to v3.0-rt, v3.2-rt and v3.4-rt
+
+Suggested-by: Thomas Gleixner
+Signed-off-by: John Kacur <jkacur@redhat.com>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Cc: David Sommerseth <davids@redhat.com>
+Link: http://lkml.kernel.org/r/1335523726-10024-1-git-send-email-jkacur@redhat.com
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/scsi/qla2xxx/qla_inline.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/scsi/qla2xxx/qla_inline.h
++++ b/drivers/scsi/qla2xxx/qla_inline.h
+@@ -59,12 +59,12 @@ qla2x00_poll(struct rsp_que *rsp)
+ {
+       unsigned long flags;
+       struct qla_hw_data *ha = rsp->hw;
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       if (IS_P3P_TYPE(ha))
+               qla82xx_poll(0, rsp);
+       else
+               ha->isp_ops->intr_handler(0, rsp);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+ }
+ static inline uint8_t *
diff --git a/patches/features/all/rt/seqlock-prevent-rt-starvation.patch b/patches/features/all/rt/seqlock-prevent-rt-starvation.patch
new file mode 100644 (file)
index 0000000..edc719c
--- /dev/null
@@ -0,0 +1,191 @@
+Subject: seqlock: Prevent rt starvation
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 22 Feb 2012 12:03:30 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+If a low prio writer gets preempted while holding the seqlock write
+locked, a high prio reader spins forever on RT.
+
+To prevent this let the reader grab the spinlock, so it blocks and
+eventually boosts the writer. This way the writer can proceed and
+endless spinning is prevented.
+
+For seqcount writers we disable preemption over the update code
+path. Thanks to Al Viro for distangling some VFS code to make that
+possible.
+
+Nicholas Mc Guire:
+- spin_lock+unlock => spin_unlock_wait
+- __write_seqcount_begin => __raw_write_seqcount_begin
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+
+---
+ include/linux/seqlock.h |   56 +++++++++++++++++++++++++++++++++++++-----------
+ include/net/dst.h       |    2 -
+ include/net/neighbour.h |    4 +--
+ 3 files changed, 47 insertions(+), 15 deletions(-)
+
+--- a/include/linux/seqlock.h
++++ b/include/linux/seqlock.h
+@@ -220,20 +220,30 @@ static inline int read_seqcount_retry(co
+       return __read_seqcount_retry(s, start);
+ }
+-
+-
+-static inline void raw_write_seqcount_begin(seqcount_t *s)
++static inline void __raw_write_seqcount_begin(seqcount_t *s)
+ {
+       s->sequence++;
+       smp_wmb();
+ }
+-static inline void raw_write_seqcount_end(seqcount_t *s)
++static inline void raw_write_seqcount_begin(seqcount_t *s)
++{
++      preempt_disable_rt();
++      __raw_write_seqcount_begin(s);
++}
++
++static inline void __raw_write_seqcount_end(seqcount_t *s)
+ {
+       smp_wmb();
+       s->sequence++;
+ }
++static inline void raw_write_seqcount_end(seqcount_t *s)
++{
++      __raw_write_seqcount_end(s);
++      preempt_enable_rt();
++}
++
+ /**
+  * raw_write_seqcount_barrier - do a seq write barrier
+  * @s: pointer to seqcount_t
+@@ -428,10 +438,32 @@ typedef struct {
+ /*
+  * Read side functions for starting and finalizing a read side section.
+  */
++#ifndef CONFIG_PREEMPT_RT_FULL
+ static inline unsigned read_seqbegin(const seqlock_t *sl)
+ {
+       return read_seqcount_begin(&sl->seqcount);
+ }
++#else
++/*
++ * Starvation safe read side for RT
++ */
++static inline unsigned read_seqbegin(seqlock_t *sl)
++{
++      unsigned ret;
++
++repeat:
++      ret = ACCESS_ONCE(sl->seqcount.sequence);
++      if (unlikely(ret & 1)) {
++              /*
++               * Take the lock and let the writer proceed (i.e. evtl
++               * boost it), otherwise we could loop here forever.
++               */
++              spin_unlock_wait(&sl->lock);
++              goto repeat;
++      }
++      return ret;
++}
++#endif
+ static inline unsigned read_seqretry(const seqlock_t *sl, unsigned start)
+ {
+@@ -446,36 +478,36 @@ static inline unsigned read_seqretry(con
+ static inline void write_seqlock(seqlock_t *sl)
+ {
+       spin_lock(&sl->lock);
+-      write_seqcount_begin(&sl->seqcount);
++      __raw_write_seqcount_begin(&sl->seqcount);
+ }
+ static inline void write_sequnlock(seqlock_t *sl)
+ {
+-      write_seqcount_end(&sl->seqcount);
++      __raw_write_seqcount_end(&sl->seqcount);
+       spin_unlock(&sl->lock);
+ }
+ static inline void write_seqlock_bh(seqlock_t *sl)
+ {
+       spin_lock_bh(&sl->lock);
+-      write_seqcount_begin(&sl->seqcount);
++      __raw_write_seqcount_begin(&sl->seqcount);
+ }
+ static inline void write_sequnlock_bh(seqlock_t *sl)
+ {
+-      write_seqcount_end(&sl->seqcount);
++      __raw_write_seqcount_end(&sl->seqcount);
+       spin_unlock_bh(&sl->lock);
+ }
+ static inline void write_seqlock_irq(seqlock_t *sl)
+ {
+       spin_lock_irq(&sl->lock);
+-      write_seqcount_begin(&sl->seqcount);
++      __raw_write_seqcount_begin(&sl->seqcount);
+ }
+ static inline void write_sequnlock_irq(seqlock_t *sl)
+ {
+-      write_seqcount_end(&sl->seqcount);
++      __raw_write_seqcount_end(&sl->seqcount);
+       spin_unlock_irq(&sl->lock);
+ }
+@@ -484,7 +516,7 @@ static inline unsigned long __write_seql
+       unsigned long flags;
+       spin_lock_irqsave(&sl->lock, flags);
+-      write_seqcount_begin(&sl->seqcount);
++      __raw_write_seqcount_begin(&sl->seqcount);
+       return flags;
+ }
+@@ -494,7 +526,7 @@ static inline unsigned long __write_seql
+ static inline void
+ write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)
+ {
+-      write_seqcount_end(&sl->seqcount);
++      __raw_write_seqcount_end(&sl->seqcount);
+       spin_unlock_irqrestore(&sl->lock, flags);
+ }
+--- a/include/net/dst.h
++++ b/include/net/dst.h
+@@ -446,7 +446,7 @@ static inline void dst_confirm(struct ds
+ static inline int dst_neigh_output(struct dst_entry *dst, struct neighbour *n,
+                                  struct sk_buff *skb)
+ {
+-      const struct hh_cache *hh;
++      struct hh_cache *hh;
+       if (dst->pending_confirm) {
+               unsigned long now = jiffies;
+--- a/include/net/neighbour.h
++++ b/include/net/neighbour.h
+@@ -446,7 +446,7 @@ static inline int neigh_hh_bridge(struct
+ }
+ #endif
+-static inline int neigh_hh_output(const struct hh_cache *hh, struct sk_buff *skb)
++static inline int neigh_hh_output(struct hh_cache *hh, struct sk_buff *skb)
+ {
+       unsigned int seq;
+       int hh_len;
+@@ -501,7 +501,7 @@ struct neighbour_cb {
+ #define NEIGH_CB(skb) ((struct neighbour_cb *)(skb)->cb)
+-static inline void neigh_ha_snapshot(char *dst, const struct neighbour *n,
++static inline void neigh_ha_snapshot(char *dst, struct neighbour *n,
+                                    const struct net_device *dev)
+ {
+       unsigned int seq;
diff --git a/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch b/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch
new file mode 100644 (file)
index 0000000..1fb20f5
--- /dev/null
@@ -0,0 +1,39 @@
+Subject: signal: Make __lock_task_sighand() RT aware
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 22 Jul 2011 08:07:08 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+local_irq_save() + spin_lock(&sighand->siglock) does not work on
+-RT. Use the nort variants.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/signal.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/kernel/signal.c
++++ b/kernel/signal.c
+@@ -1276,12 +1276,12 @@ struct sighand_struct *__lock_task_sigha
+                * Disable interrupts early to avoid deadlocks.
+                * See rcu_read_unlock() comment header for details.
+                */
+-              local_irq_save(*flags);
++              local_irq_save_nort(*flags);
+               rcu_read_lock();
+               sighand = rcu_dereference(tsk->sighand);
+               if (unlikely(sighand == NULL)) {
+                       rcu_read_unlock();
+-                      local_irq_restore(*flags);
++                      local_irq_restore_nort(*flags);
+                       break;
+               }
+               /*
+@@ -1302,7 +1302,7 @@ struct sighand_struct *__lock_task_sigha
+               }
+               spin_unlock(&sighand->siglock);
+               rcu_read_unlock();
+-              local_irq_restore(*flags);
++              local_irq_restore_nort(*flags);
+       }
+       return sighand;
diff --git a/patches/features/all/rt/signal-revert-ptrace-preempt-magic.patch b/patches/features/all/rt/signal-revert-ptrace-preempt-magic.patch
new file mode 100644 (file)
index 0000000..c0efaa2
--- /dev/null
@@ -0,0 +1,32 @@
+Subject: signal: Revert ptrace preempt magic
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 21 Sep 2011 19:57:12 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Upstream commit '53da1d9456fe7f8 fix ptrace slowness' is nothing more
+than a bandaid around the ptrace design trainwreck. It's not a
+correctness issue, it's merily a cosmetic bandaid.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/signal.c |    8 --------
+ 1 file changed, 8 deletions(-)
+
+--- a/kernel/signal.c
++++ b/kernel/signal.c
+@@ -1846,15 +1846,7 @@ static void ptrace_stop(int exit_code, i
+               if (gstop_done && ptrace_reparented(current))
+                       do_notify_parent_cldstop(current, false, why);
+-              /*
+-               * Don't want to allow preemption here, because
+-               * sys_ptrace() needs this task to be inactive.
+-               *
+-               * XXX: implement read_unlock_no_resched().
+-               */
+-              preempt_disable();
+               read_unlock(&tasklist_lock);
+-              preempt_enable_no_resched();
+               freezable_schedule();
+       } else {
+               /*
diff --git a/patches/features/all/rt/signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch b/patches/features/all/rt/signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch
new file mode 100644 (file)
index 0000000..f27d0b1
--- /dev/null
@@ -0,0 +1,199 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 3 Jul 2009 08:44:56 -0500
+Subject: signals: Allow rt tasks to cache one sigqueue struct
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+To avoid allocation allow rt tasks to cache one sigqueue struct in
+task struct.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/sched.h  |    1 
+ include/linux/signal.h |    1 
+ kernel/exit.c          |    2 -
+ kernel/fork.c          |    1 
+ kernel/signal.c        |   69 ++++++++++++++++++++++++++++++++++++++++++++++---
+ 5 files changed, 69 insertions(+), 5 deletions(-)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1685,6 +1685,7 @@ struct task_struct {
+ /* signal handlers */
+       struct signal_struct *signal;
+       struct sighand_struct *sighand;
++      struct sigqueue *sigqueue_cache;
+       sigset_t blocked, real_blocked;
+       sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */
+--- a/include/linux/signal.h
++++ b/include/linux/signal.h
+@@ -233,6 +233,7 @@ static inline void init_sigpending(struc
+ }
+ extern void flush_sigqueue(struct sigpending *queue);
++extern void flush_task_sigqueue(struct task_struct *tsk);
+ /* Test if 'sig' is valid signal. Use this instead of testing _NSIG directly */
+ static inline int valid_signal(unsigned long sig)
+--- a/kernel/exit.c
++++ b/kernel/exit.c
+@@ -143,7 +143,7 @@ static void __exit_signal(struct task_st
+        * Do this under ->siglock, we can race with another thread
+        * doing sigqueue_free() if we have SIGQUEUE_PREALLOC signals.
+        */
+-      flush_sigqueue(&tsk->pending);
++      flush_task_sigqueue(tsk);
+       tsk->sighand = NULL;
+       spin_unlock(&sighand->siglock);
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -1552,6 +1552,7 @@ static __latent_entropy struct task_stru
+       spin_lock_init(&p->alloc_lock);
+       init_sigpending(&p->pending);
++      p->sigqueue_cache = NULL;
+       p->utime = p->stime = p->gtime = 0;
+       p->utimescaled = p->stimescaled = 0;
+--- a/kernel/signal.c
++++ b/kernel/signal.c
+@@ -14,6 +14,7 @@
+ #include <linux/export.h>
+ #include <linux/init.h>
+ #include <linux/sched.h>
++#include <linux/sched/rt.h>
+ #include <linux/fs.h>
+ #include <linux/tty.h>
+ #include <linux/binfmts.h>
+@@ -352,13 +353,30 @@ static bool task_participate_group_stop(
+       return false;
+ }
++static inline struct sigqueue *get_task_cache(struct task_struct *t)
++{
++      struct sigqueue *q = t->sigqueue_cache;
++
++      if (cmpxchg(&t->sigqueue_cache, q, NULL) != q)
++              return NULL;
++      return q;
++}
++
++static inline int put_task_cache(struct task_struct *t, struct sigqueue *q)
++{
++      if (cmpxchg(&t->sigqueue_cache, NULL, q) == NULL)
++              return 0;
++      return 1;
++}
++
+ /*
+  * allocate a new signal queue record
+  * - this may be called without locks if and only if t == current, otherwise an
+  *   appropriate lock must be held to stop the target task from exiting
+  */
+ static struct sigqueue *
+-__sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimit)
++__sigqueue_do_alloc(int sig, struct task_struct *t, gfp_t flags,
++                  int override_rlimit, int fromslab)
+ {
+       struct sigqueue *q = NULL;
+       struct user_struct *user;
+@@ -375,7 +393,10 @@ static struct sigqueue *
+       if (override_rlimit ||
+           atomic_read(&user->sigpending) <=
+                       task_rlimit(t, RLIMIT_SIGPENDING)) {
+-              q = kmem_cache_alloc(sigqueue_cachep, flags);
++              if (!fromslab)
++                      q = get_task_cache(t);
++              if (!q)
++                      q = kmem_cache_alloc(sigqueue_cachep, flags);
+       } else {
+               print_dropped_signal(sig);
+       }
+@@ -392,6 +413,13 @@ static struct sigqueue *
+       return q;
+ }
++static struct sigqueue *
++__sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags,
++               int override_rlimit)
++{
++      return __sigqueue_do_alloc(sig, t, flags, override_rlimit, 0);
++}
++
+ static void __sigqueue_free(struct sigqueue *q)
+ {
+       if (q->flags & SIGQUEUE_PREALLOC)
+@@ -401,6 +429,21 @@ static void __sigqueue_free(struct sigqu
+       kmem_cache_free(sigqueue_cachep, q);
+ }
++static void sigqueue_free_current(struct sigqueue *q)
++{
++      struct user_struct *up;
++
++      if (q->flags & SIGQUEUE_PREALLOC)
++              return;
++
++      up = q->user;
++      if (rt_prio(current->normal_prio) && !put_task_cache(current, q)) {
++              atomic_dec(&up->sigpending);
++              free_uid(up);
++      } else
++                __sigqueue_free(q);
++}
++
+ void flush_sigqueue(struct sigpending *queue)
+ {
+       struct sigqueue *q;
+@@ -414,6 +457,21 @@ void flush_sigqueue(struct sigpending *q
+ }
+ /*
++ * Called from __exit_signal. Flush tsk->pending and
++ * tsk->sigqueue_cache
++ */
++void flush_task_sigqueue(struct task_struct *tsk)
++{
++      struct sigqueue *q;
++
++      flush_sigqueue(&tsk->pending);
++
++      q = get_task_cache(tsk);
++      if (q)
++              kmem_cache_free(sigqueue_cachep, q);
++}
++
++/*
+  * Flush all pending signals for this kthread.
+  */
+ void flush_signals(struct task_struct *t)
+@@ -525,7 +583,7 @@ static void collect_signal(int sig, stru
+ still_pending:
+               list_del_init(&first->list);
+               copy_siginfo(info, &first->info);
+-              __sigqueue_free(first);
++              sigqueue_free_current(first);
+       } else {
+               /*
+                * Ok, it wasn't in the queue.  This must be
+@@ -560,6 +618,8 @@ int dequeue_signal(struct task_struct *t
+ {
+       int signr;
++      WARN_ON_ONCE(tsk != current);
++
+       /* We only dequeue private signals from ourselves, we don't let
+        * signalfd steal them
+        */
+@@ -1485,7 +1545,8 @@ EXPORT_SYMBOL(kill_pid);
+  */
+ struct sigqueue *sigqueue_alloc(void)
+ {
+-      struct sigqueue *q = __sigqueue_alloc(-1, current, GFP_KERNEL, 0);
++      /* Preallocated sigqueue objects always from the slabcache ! */
++      struct sigqueue *q = __sigqueue_do_alloc(-1, current, GFP_KERNEL, 0, 1);
+       if (q)
+               q->flags |= SIGQUEUE_PREALLOC;
diff --git a/patches/features/all/rt/skbufhead-raw-lock.patch b/patches/features/all/rt/skbufhead-raw-lock.patch
new file mode 100644 (file)
index 0000000..0713db3
--- /dev/null
@@ -0,0 +1,158 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 12 Jul 2011 15:38:34 +0200
+Subject: net: Use skbufhead with raw lock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use the rps lock as rawlock so we can keep irq-off regions. It looks low
+latency. However we can't kfree() from this context therefore we defer this
+to the softirq and use the tofree_queue list for it (similar to process_queue).
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/netdevice.h |    1 +
+ include/linux/skbuff.h    |    7 +++++++
+ net/core/dev.c            |   31 ++++++++++++++++++++++++-------
+ 3 files changed, 32 insertions(+), 7 deletions(-)
+
+--- a/include/linux/netdevice.h
++++ b/include/linux/netdevice.h
+@@ -2855,6 +2855,7 @@ struct softnet_data {
+       unsigned int            dropped;
+       struct sk_buff_head     input_pkt_queue;
+       struct napi_struct      backlog;
++      struct sk_buff_head     tofree_queue;
+ };
+--- a/include/linux/skbuff.h
++++ b/include/linux/skbuff.h
+@@ -284,6 +284,7 @@ struct sk_buff_head {
+       __u32           qlen;
+       spinlock_t      lock;
++      raw_spinlock_t  raw_lock;
+ };
+ struct sk_buff;
+@@ -1573,6 +1574,12 @@ static inline void skb_queue_head_init(s
+       __skb_queue_head_init(list);
+ }
++static inline void skb_queue_head_init_raw(struct sk_buff_head *list)
++{
++      raw_spin_lock_init(&list->raw_lock);
++      __skb_queue_head_init(list);
++}
++
+ static inline void skb_queue_head_init_class(struct sk_buff_head *list,
+               struct lock_class_key *class)
+ {
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -211,14 +211,14 @@ static inline struct hlist_head *dev_ind
+ static inline void rps_lock(struct softnet_data *sd)
+ {
+ #ifdef CONFIG_RPS
+-      spin_lock(&sd->input_pkt_queue.lock);
++      raw_spin_lock(&sd->input_pkt_queue.raw_lock);
+ #endif
+ }
+ static inline void rps_unlock(struct softnet_data *sd)
+ {
+ #ifdef CONFIG_RPS
+-      spin_unlock(&sd->input_pkt_queue.lock);
++      raw_spin_unlock(&sd->input_pkt_queue.raw_lock);
+ #endif
+ }
+@@ -4337,7 +4337,7 @@ static void flush_backlog(struct work_st
+       skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) {
+               if (skb->dev->reg_state == NETREG_UNREGISTERING) {
+                       __skb_unlink(skb, &sd->input_pkt_queue);
+-                      kfree_skb(skb);
++                      __skb_queue_tail(&sd->tofree_queue, skb);
+                       input_queue_head_incr(sd);
+               }
+       }
+@@ -4347,11 +4347,14 @@ static void flush_backlog(struct work_st
+       skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
+               if (skb->dev->reg_state == NETREG_UNREGISTERING) {
+                       __skb_unlink(skb, &sd->process_queue);
+-                      kfree_skb(skb);
++                      __skb_queue_tail(&sd->tofree_queue, skb);
+                       input_queue_head_incr(sd);
+               }
+       }
++      if (!skb_queue_empty(&sd->tofree_queue))
++              raise_softirq_irqoff(NET_RX_SOFTIRQ);
+       local_bh_enable();
++
+ }
+ static void flush_all_backlogs(void)
+@@ -4876,7 +4879,9 @@ static int process_backlog(struct napi_s
+       while (again) {
+               struct sk_buff *skb;
++              local_irq_disable();
+               while ((skb = __skb_dequeue(&sd->process_queue))) {
++                      local_irq_enable();
+                       rcu_read_lock();
+                       __netif_receive_skb(skb);
+                       rcu_read_unlock();
+@@ -4884,9 +4889,9 @@ static int process_backlog(struct napi_s
+                       if (++work >= quota)
+                               return work;
++                      local_irq_disable();
+               }
+-              local_irq_disable();
+               rps_lock(sd);
+               if (skb_queue_empty(&sd->input_pkt_queue)) {
+                       /*
+@@ -5228,13 +5233,21 @@ static __latent_entropy void net_rx_acti
+       struct softnet_data *sd = this_cpu_ptr(&softnet_data);
+       unsigned long time_limit = jiffies + 2;
+       int budget = netdev_budget;
++      struct sk_buff_head tofree_q;
++      struct sk_buff *skb;
+       LIST_HEAD(list);
+       LIST_HEAD(repoll);
++      __skb_queue_head_init(&tofree_q);
++
+       local_irq_disable();
++      skb_queue_splice_init(&sd->tofree_queue, &tofree_q);
+       list_splice_init(&sd->poll_list, &list);
+       local_irq_enable();
++      while ((skb = __skb_dequeue(&tofree_q)))
++              kfree_skb(skb);
++
+       for (;;) {
+               struct napi_struct *n;
+@@ -8037,6 +8050,9 @@ static int dev_cpu_callback(struct notif
+               netif_rx_ni(skb);
+               input_queue_head_incr(oldsd);
+       }
++      while ((skb = __skb_dequeue(&oldsd->tofree_queue))) {
++              kfree_skb(skb);
++      }
+       return NOTIFY_OK;
+ }
+@@ -8341,8 +8357,9 @@ static int __init net_dev_init(void)
+               INIT_WORK(flush, flush_backlog);
+-              skb_queue_head_init(&sd->input_pkt_queue);
+-              skb_queue_head_init(&sd->process_queue);
++              skb_queue_head_init_raw(&sd->input_pkt_queue);
++              skb_queue_head_init_raw(&sd->process_queue);
++              skb_queue_head_init_raw(&sd->tofree_queue);
+               INIT_LIST_HEAD(&sd->poll_list);
+               sd->output_queue_tailp = &sd->output_queue;
+ #ifdef CONFIG_RPS
diff --git a/patches/features/all/rt/slub-disable-SLUB_CPU_PARTIAL.patch b/patches/features/all/rt/slub-disable-SLUB_CPU_PARTIAL.patch
new file mode 100644 (file)
index 0000000..a5dd61c
--- /dev/null
@@ -0,0 +1,48 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 15 Apr 2015 19:00:47 +0200
+Subject: slub: Disable SLUB_CPU_PARTIAL
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+|BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:915
+|in_atomic(): 1, irqs_disabled(): 0, pid: 87, name: rcuop/7
+|1 lock held by rcuop/7/87:
+| #0:  (rcu_callback){......}, at: [<ffffffff8112c76a>] rcu_nocb_kthread+0x1ca/0x5d0
+|Preemption disabled at:[<ffffffff811eebd9>] put_cpu_partial+0x29/0x220
+|
+|CPU: 0 PID: 87 Comm: rcuop/7 Tainted: G        W       4.0.0-rt0+ #477
+|Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.7.5-20140531_083030-gandalf 04/01/2014
+| 000000000007a9fc ffff88013987baf8 ffffffff817441c7 0000000000000007
+| 0000000000000000 ffff88013987bb18 ffffffff810eee51 0000000000000000
+| ffff88013fc10200 ffff88013987bb48 ffffffff8174a1c4 000000000007a9fc
+|Call Trace:
+| [<ffffffff817441c7>] dump_stack+0x4f/0x90
+| [<ffffffff810eee51>] ___might_sleep+0x121/0x1b0
+| [<ffffffff8174a1c4>] rt_spin_lock+0x24/0x60
+| [<ffffffff811a689a>] __free_pages_ok+0xaa/0x540
+| [<ffffffff811a729d>] __free_pages+0x1d/0x30
+| [<ffffffff811eddd5>] __free_slab+0xc5/0x1e0
+| [<ffffffff811edf46>] free_delayed+0x56/0x70
+| [<ffffffff811eecfd>] put_cpu_partial+0x14d/0x220
+| [<ffffffff811efc98>] __slab_free+0x158/0x2c0
+| [<ffffffff811f0021>] kmem_cache_free+0x221/0x2d0
+| [<ffffffff81204d0c>] file_free_rcu+0x2c/0x40
+| [<ffffffff8112c7e3>] rcu_nocb_kthread+0x243/0x5d0
+| [<ffffffff810e951c>] kthread+0xfc/0x120
+| [<ffffffff8174abc8>] ret_from_fork+0x58/0x90
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ init/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -1799,7 +1799,7 @@ config SLAB_FREELIST_RANDOM
+ config SLUB_CPU_PARTIAL
+       default y
+-      depends on SLUB && SMP
++      depends on SLUB && SMP && !PREEMPT_RT_FULL
+       bool "SLUB per cpu partial cache"
+       help
+         Per cpu partial caches accellerate objects allocation and freeing
diff --git a/patches/features/all/rt/slub-enable-irqs-for-no-wait.patch b/patches/features/all/rt/slub-enable-irqs-for-no-wait.patch
new file mode 100644 (file)
index 0000000..ebb6554
--- /dev/null
@@ -0,0 +1,48 @@
+Subject: slub: Enable irqs for __GFP_WAIT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 09 Jan 2013 12:08:15 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+SYSTEM_RUNNING might be too late for enabling interrupts. Allocations
+with GFP_WAIT can happen before that. So use this as an indicator.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ mm/slub.c |   13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+--- a/mm/slub.c
++++ b/mm/slub.c
+@@ -1533,14 +1533,17 @@ static struct page *allocate_slab(struct
+       void *start, *p;
+       int idx, order;
+       bool shuffle;
++      bool enableirqs = false;
+       flags &= gfp_allowed_mask;
++      if (gfpflags_allow_blocking(flags))
++              enableirqs = true;
+ #ifdef CONFIG_PREEMPT_RT_FULL
+       if (system_state == SYSTEM_RUNNING)
+-#else
+-      if (gfpflags_allow_blocking(flags))
++              enableirqs = true;
+ #endif
++      if (enableirqs)
+               local_irq_enable();
+       flags |= s->allocflags;
+@@ -1615,11 +1618,7 @@ static struct page *allocate_slab(struct
+       page->frozen = 1;
+ out:
+-#ifdef CONFIG_PREEMPT_RT_FULL
+-      if (system_state == SYSTEM_RUNNING)
+-#else
+-      if (gfpflags_allow_blocking(flags))
+-#endif
++      if (enableirqs)
+               local_irq_disable();
+       if (!page)
+               return NULL;
diff --git a/patches/features/all/rt/snd-pcm-fix-snd_pcm_stream_lock-irqs_disabled-splats.patch b/patches/features/all/rt/snd-pcm-fix-snd_pcm_stream_lock-irqs_disabled-splats.patch
new file mode 100644 (file)
index 0000000..8a1b1cf
--- /dev/null
@@ -0,0 +1,70 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Wed, 18 Feb 2015 15:09:23 +0100
+Subject: snd/pcm: fix snd_pcm_stream_lock*() irqs_disabled() splats
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Locking functions previously using read_lock_irq()/read_lock_irqsave() were
+changed to local_irq_disable/save(), leading to gripes.  Use nort variants.
+
+|BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:915
+|in_atomic(): 0, irqs_disabled(): 1, pid: 5947, name: alsa-sink-ALC88
+|CPU: 5 PID: 5947 Comm: alsa-sink-ALC88 Not tainted 3.18.7-rt1 #9
+|Hardware name: MEDION MS-7848/MS-7848, BIOS M7848W08.404 11/06/2014
+| ffff880409316240 ffff88040866fa38 ffffffff815bdeb5 0000000000000002
+| 0000000000000000 ffff88040866fa58 ffffffff81073c86 ffffffffa03b2640
+| ffff88040239ec00 ffff88040866fa78 ffffffff815c3d34 ffffffffa03b2640
+|Call Trace:
+| [<ffffffff815bdeb5>] dump_stack+0x4f/0x9e
+| [<ffffffff81073c86>] __might_sleep+0xe6/0x150
+| [<ffffffff815c3d34>] __rt_spin_lock+0x24/0x50
+| [<ffffffff815c4044>] rt_read_lock+0x34/0x40
+| [<ffffffffa03a2979>] snd_pcm_stream_lock+0x29/0x70 [snd_pcm]
+| [<ffffffffa03a355d>] snd_pcm_playback_poll+0x5d/0x120 [snd_pcm]
+| [<ffffffff811937a2>] do_sys_poll+0x322/0x5b0
+| [<ffffffff81193d48>] SyS_ppoll+0x1a8/0x1c0
+| [<ffffffff815c4556>] system_call_fastpath+0x16/0x1b
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ sound/core/pcm_native.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/sound/core/pcm_native.c
++++ b/sound/core/pcm_native.c
+@@ -135,7 +135,7 @@ EXPORT_SYMBOL_GPL(snd_pcm_stream_unlock)
+ void snd_pcm_stream_lock_irq(struct snd_pcm_substream *substream)
+ {
+       if (!substream->pcm->nonatomic)
+-              local_irq_disable();
++              local_irq_disable_nort();
+       snd_pcm_stream_lock(substream);
+ }
+ EXPORT_SYMBOL_GPL(snd_pcm_stream_lock_irq);
+@@ -150,7 +150,7 @@ void snd_pcm_stream_unlock_irq(struct sn
+ {
+       snd_pcm_stream_unlock(substream);
+       if (!substream->pcm->nonatomic)
+-              local_irq_enable();
++              local_irq_enable_nort();
+ }
+ EXPORT_SYMBOL_GPL(snd_pcm_stream_unlock_irq);
+@@ -158,7 +158,7 @@ unsigned long _snd_pcm_stream_lock_irqsa
+ {
+       unsigned long flags = 0;
+       if (!substream->pcm->nonatomic)
+-              local_irq_save(flags);
++              local_irq_save_nort(flags);
+       snd_pcm_stream_lock(substream);
+       return flags;
+ }
+@@ -176,7 +176,7 @@ void snd_pcm_stream_unlock_irqrestore(st
+ {
+       snd_pcm_stream_unlock(substream);
+       if (!substream->pcm->nonatomic)
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+ }
+ EXPORT_SYMBOL_GPL(snd_pcm_stream_unlock_irqrestore);
diff --git a/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch b/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch
new file mode 100644 (file)
index 0000000..4444241
--- /dev/null
@@ -0,0 +1,157 @@
+Subject: softirq: Disable softirq stacks for RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 18 Jul 2011 13:59:17 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Disable extra stacks for softirqs. We want to preempt softirqs and
+having them on special IRQ-stack does not make this easier.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/powerpc/kernel/irq.c     |    2 ++
+ arch/powerpc/kernel/misc_32.S |    2 ++
+ arch/powerpc/kernel/misc_64.S |    2 ++
+ arch/sh/kernel/irq.c          |    2 ++
+ arch/sparc/kernel/irq_64.c    |    2 ++
+ arch/x86/entry/entry_64.S     |    2 ++
+ arch/x86/kernel/irq_32.c      |    2 ++
+ include/linux/interrupt.h     |    2 +-
+ 8 files changed, 15 insertions(+), 1 deletion(-)
+
+--- a/arch/powerpc/kernel/irq.c
++++ b/arch/powerpc/kernel/irq.c
+@@ -638,6 +638,7 @@ void irq_ctx_init(void)
+       }
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
+ void do_softirq_own_stack(void)
+ {
+       struct thread_info *curtp, *irqtp;
+@@ -655,6 +656,7 @@ void do_softirq_own_stack(void)
+       if (irqtp->flags)
+               set_bits(irqtp->flags, &curtp->flags);
+ }
++#endif
+ irq_hw_number_t virq_to_hw(unsigned int virq)
+ {
+--- a/arch/powerpc/kernel/misc_32.S
++++ b/arch/powerpc/kernel/misc_32.S
+@@ -41,6 +41,7 @@
+  * We store the saved ksp_limit in the unused part
+  * of the STACK_FRAME_OVERHEAD
+  */
++#ifndef CONFIG_PREEMPT_RT_FULL
+ _GLOBAL(call_do_softirq)
+       mflr    r0
+       stw     r0,4(r1)
+@@ -57,6 +58,7 @@
+       stw     r10,THREAD+KSP_LIMIT(r2)
+       mtlr    r0
+       blr
++#endif
+ /*
+  * void call_do_irq(struct pt_regs *regs, struct thread_info *irqtp);
+--- a/arch/powerpc/kernel/misc_64.S
++++ b/arch/powerpc/kernel/misc_64.S
+@@ -31,6 +31,7 @@
+       .text
++#ifndef CONFIG_PREEMPT_RT_FULL
+ _GLOBAL(call_do_softirq)
+       mflr    r0
+       std     r0,16(r1)
+@@ -41,6 +42,7 @@
+       ld      r0,16(r1)
+       mtlr    r0
+       blr
++#endif
+ _GLOBAL(call_do_irq)
+       mflr    r0
+--- a/arch/sh/kernel/irq.c
++++ b/arch/sh/kernel/irq.c
+@@ -147,6 +147,7 @@ void irq_ctx_exit(int cpu)
+       hardirq_ctx[cpu] = NULL;
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
+ void do_softirq_own_stack(void)
+ {
+       struct thread_info *curctx;
+@@ -174,6 +175,7 @@ void do_softirq_own_stack(void)
+                 "r5", "r6", "r7", "r8", "r9", "r15", "t", "pr"
+       );
+ }
++#endif
+ #else
+ static inline void handle_one_irq(unsigned int irq)
+ {
+--- a/arch/sparc/kernel/irq_64.c
++++ b/arch/sparc/kernel/irq_64.c
+@@ -854,6 +854,7 @@ void __irq_entry handler_irq(int pil, st
+       set_irq_regs(old_regs);
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
+ void do_softirq_own_stack(void)
+ {
+       void *orig_sp, *sp = softirq_stack[smp_processor_id()];
+@@ -868,6 +869,7 @@ void do_softirq_own_stack(void)
+       __asm__ __volatile__("mov %0, %%sp"
+                            : : "r" (orig_sp));
+ }
++#endif
+ #ifdef CONFIG_HOTPLUG_CPU
+ void fixup_irqs(void)
+--- a/arch/x86/entry/entry_64.S
++++ b/arch/x86/entry/entry_64.S
+@@ -894,6 +894,7 @@ EXPORT_SYMBOL(native_load_gs_index)
+       jmp     2b
+       .previous
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /* Call softirq on interrupt stack. Interrupts are off. */
+ ENTRY(do_softirq_own_stack)
+       pushq   %rbp
+@@ -906,6 +907,7 @@ ENTRY(do_softirq_own_stack)
+       decl    PER_CPU_VAR(irq_count)
+       ret
+ END(do_softirq_own_stack)
++#endif
+ #ifdef CONFIG_XEN
+ idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0
+--- a/arch/x86/kernel/irq_32.c
++++ b/arch/x86/kernel/irq_32.c
+@@ -127,6 +127,7 @@ void irq_ctx_init(int cpu)
+              cpu, per_cpu(hardirq_stack, cpu),  per_cpu(softirq_stack, cpu));
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
+ void do_softirq_own_stack(void)
+ {
+       struct irq_stack *irqstk;
+@@ -143,6 +144,7 @@ void do_softirq_own_stack(void)
+       call_on_stack(__do_softirq, isp);
+ }
++#endif
+ bool handle_irq(struct irq_desc *desc, struct pt_regs *regs)
+ {
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -472,7 +472,7 @@ struct softirq_action
+ asmlinkage void do_softirq(void);
+ asmlinkage void __do_softirq(void);
+-#ifdef __ARCH_HAS_DO_SOFTIRQ
++#if defined(__ARCH_HAS_DO_SOFTIRQ) && !defined(CONFIG_PREEMPT_RT_FULL)
+ void do_softirq_own_stack(void);
+ #else
+ static inline void do_softirq_own_stack(void)
diff --git a/patches/features/all/rt/softirq-preempt-fix-3-re.patch b/patches/features/all/rt/softirq-preempt-fix-3-re.patch
new file mode 100644 (file)
index 0000000..4e753c7
--- /dev/null
@@ -0,0 +1,170 @@
+Subject: softirq: Check preemption after reenabling interrupts
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 13 Nov 2011 17:17:09 +0100 (CET)
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+raise_softirq_irqoff() disables interrupts and wakes the softirq
+daemon, but after reenabling interrupts there is no preemption check,
+so the execution of the softirq thread might be delayed arbitrarily.
+
+In principle we could add that check to local_irq_enable/restore, but
+that's overkill as the rasie_softirq_irqoff() sections are the only
+ones which show this behaviour.
+
+Reported-by: Carsten Emde <cbe@osadl.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ block/blk-softirq.c     |    3 +++
+ include/linux/preempt.h |    3 +++
+ lib/irq_poll.c          |    5 +++++
+ net/core/dev.c          |    7 +++++++
+ 4 files changed, 18 insertions(+)
+
+--- a/block/blk-softirq.c
++++ b/block/blk-softirq.c
+@@ -51,6 +51,7 @@ static void trigger_softirq(void *data)
+               raise_softirq_irqoff(BLOCK_SOFTIRQ);
+       local_irq_restore(flags);
++      preempt_check_resched_rt();
+ }
+ /*
+@@ -89,6 +90,7 @@ static int blk_softirq_cpu_dead(unsigned
+                        this_cpu_ptr(&blk_cpu_done));
+       raise_softirq_irqoff(BLOCK_SOFTIRQ);
+       local_irq_enable();
++      preempt_check_resched_rt();
+       return 0;
+ }
+@@ -141,6 +143,7 @@ void __blk_complete_request(struct reque
+               goto do_local;
+       local_irq_restore(flags);
++      preempt_check_resched_rt();
+ }
+ /**
+--- a/include/linux/preempt.h
++++ b/include/linux/preempt.h
+@@ -160,8 +160,10 @@ do { \
+ #ifdef CONFIG_PREEMPT_RT_BASE
+ # define preempt_enable_no_resched() sched_preempt_enable_no_resched()
++# define preempt_check_resched_rt() preempt_check_resched()
+ #else
+ # define preempt_enable_no_resched() preempt_enable()
++# define preempt_check_resched_rt() barrier();
+ #endif
+ #define preemptible() (preempt_count() == 0 && !irqs_disabled())
+@@ -232,6 +234,7 @@ do { \
+ #define preempt_disable_notrace()             barrier()
+ #define preempt_enable_no_resched_notrace()   barrier()
+ #define preempt_enable_notrace()              barrier()
++#define preempt_check_resched_rt()            barrier()
+ #define preemptible()                         0
+ #endif /* CONFIG_PREEMPT_COUNT */
+--- a/lib/irq_poll.c
++++ b/lib/irq_poll.c
+@@ -36,6 +36,7 @@ void irq_poll_sched(struct irq_poll *iop
+       list_add_tail(&iop->list, this_cpu_ptr(&blk_cpu_iopoll));
+       __raise_softirq_irqoff(IRQ_POLL_SOFTIRQ);
+       local_irq_restore(flags);
++      preempt_check_resched_rt();
+ }
+ EXPORT_SYMBOL(irq_poll_sched);
+@@ -71,6 +72,7 @@ void irq_poll_complete(struct irq_poll *
+       local_irq_save(flags);
+       __irq_poll_complete(iop);
+       local_irq_restore(flags);
++      preempt_check_resched_rt();
+ }
+ EXPORT_SYMBOL(irq_poll_complete);
+@@ -95,6 +97,7 @@ static void __latent_entropy irq_poll_so
+               }
+               local_irq_enable();
++              preempt_check_resched_rt();
+               /* Even though interrupts have been re-enabled, this
+                * access is safe because interrupts can only add new
+@@ -132,6 +135,7 @@ static void __latent_entropy irq_poll_so
+               __raise_softirq_irqoff(IRQ_POLL_SOFTIRQ);
+       local_irq_enable();
++      preempt_check_resched_rt();
+ }
+ /**
+@@ -195,6 +199,7 @@ static int irq_poll_cpu_dead(unsigned in
+                        this_cpu_ptr(&blk_cpu_iopoll));
+       __raise_softirq_irqoff(IRQ_POLL_SOFTIRQ);
+       local_irq_enable();
++      preempt_check_resched_rt();
+       return 0;
+ }
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -2285,6 +2285,7 @@ static void __netif_reschedule(struct Qd
+       sd->output_queue_tailp = &q->next_sched;
+       raise_softirq_irqoff(NET_TX_SOFTIRQ);
+       local_irq_restore(flags);
++      preempt_check_resched_rt();
+ }
+ void __netif_schedule(struct Qdisc *q)
+@@ -2366,6 +2367,7 @@ void __dev_kfree_skb_irq(struct sk_buff
+       __this_cpu_write(softnet_data.completion_queue, skb);
+       raise_softirq_irqoff(NET_TX_SOFTIRQ);
+       local_irq_restore(flags);
++      preempt_check_resched_rt();
+ }
+ EXPORT_SYMBOL(__dev_kfree_skb_irq);
+@@ -3785,6 +3787,7 @@ static int enqueue_to_backlog(struct sk_
+       rps_unlock(sd);
+       local_irq_restore(flags);
++      preempt_check_resched_rt();
+       atomic_long_inc(&skb->dev->rx_dropped);
+       kfree_skb(skb);
+@@ -4831,6 +4834,7 @@ static void net_rps_action_and_irq_enabl
+               sd->rps_ipi_list = NULL;
+               local_irq_enable();
++              preempt_check_resched_rt();
+               /* Send pending IPI's to kick RPS processing on remote cpus. */
+               while (remsd) {
+@@ -4844,6 +4848,7 @@ static void net_rps_action_and_irq_enabl
+       } else
+ #endif
+               local_irq_enable();
++      preempt_check_resched_rt();
+ }
+ static bool sd_has_rps_ipi_waiting(struct softnet_data *sd)
+@@ -4921,6 +4926,7 @@ void __napi_schedule(struct napi_struct
+       local_irq_save(flags);
+       ____napi_schedule(this_cpu_ptr(&softnet_data), n);
+       local_irq_restore(flags);
++      preempt_check_resched_rt();
+ }
+ EXPORT_SYMBOL(__napi_schedule);
+@@ -8022,6 +8028,7 @@ static int dev_cpu_callback(struct notif
+       raise_softirq_irqoff(NET_TX_SOFTIRQ);
+       local_irq_enable();
++      preempt_check_resched_rt();
+       /* Process offline CPU's input_pkt_queue */
+       while ((skb = __skb_dequeue(&oldsd->process_queue))) {
diff --git a/patches/features/all/rt/softirq-split-locks.patch b/patches/features/all/rt/softirq-split-locks.patch
new file mode 100644 (file)
index 0000000..7db04c8
--- /dev/null
@@ -0,0 +1,833 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 04 Oct 2012 14:20:47 +0100
+Subject: softirq: Split softirq locks
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The 3.x RT series removed the split softirq implementation in favour
+of pushing softirq processing into the context of the thread which
+raised it. Though this prevents us from handling the various softirqs
+at different priorities. Now instead of reintroducing the split
+softirq threads we split the locks which serialize the softirq
+processing.
+
+If a softirq is raised in context of a thread, then the softirq is
+noted on a per thread field, if the thread is in a bh disabled
+region. If the softirq is raised from hard interrupt context, then the
+bit is set in the flag field of ksoftirqd and ksoftirqd is invoked.
+When a thread leaves a bh disabled region, then it tries to execute
+the softirqs which have been raised in its own context. It acquires
+the per softirq / per cpu lock for the softirq and then checks,
+whether the softirq is still pending in the per cpu
+local_softirq_pending() field. If yes, it runs the softirq. If no,
+then some other task executed it already. This allows for zero config
+softirq elevation in the context of user space tasks or interrupt
+threads.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/bottom_half.h |   34 +++
+ include/linux/interrupt.h   |   15 +
+ include/linux/preempt.h     |   15 +
+ include/linux/sched.h       |    3 
+ init/main.c                 |    1 
+ kernel/softirq.c            |  492 +++++++++++++++++++++++++++++++++++++-------
+ kernel/time/tick-sched.c    |    9 
+ net/core/dev.c              |    6 
+ 8 files changed, 480 insertions(+), 95 deletions(-)
+
+--- a/include/linux/bottom_half.h
++++ b/include/linux/bottom_half.h
+@@ -3,6 +3,39 @@
+ #include <linux/preempt.h>
++#ifdef CONFIG_PREEMPT_RT_FULL
++
++extern void __local_bh_disable(void);
++extern void _local_bh_enable(void);
++extern void __local_bh_enable(void);
++
++static inline void local_bh_disable(void)
++{
++      __local_bh_disable();
++}
++
++static inline void __local_bh_disable_ip(unsigned long ip, unsigned int cnt)
++{
++      __local_bh_disable();
++}
++
++static inline void local_bh_enable(void)
++{
++      __local_bh_enable();
++}
++
++static inline void __local_bh_enable_ip(unsigned long ip, unsigned int cnt)
++{
++      __local_bh_enable();
++}
++
++static inline void local_bh_enable_ip(unsigned long ip)
++{
++      __local_bh_enable();
++}
++
++#else
++
+ #ifdef CONFIG_TRACE_IRQFLAGS
+ extern void __local_bh_disable_ip(unsigned long ip, unsigned int cnt);
+ #else
+@@ -30,5 +63,6 @@ static inline void local_bh_enable(void)
+ {
+       __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET);
+ }
++#endif
+ #endif /* _LINUX_BH_H */
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -469,10 +469,11 @@ struct softirq_action
+       void    (*action)(struct softirq_action *);
+ };
++#ifndef CONFIG_PREEMPT_RT_FULL
+ asmlinkage void do_softirq(void);
+ asmlinkage void __do_softirq(void);
+-
+-#if defined(__ARCH_HAS_DO_SOFTIRQ) && !defined(CONFIG_PREEMPT_RT_FULL)
++static inline void thread_do_softirq(void) { do_softirq(); }
++#ifdef __ARCH_HAS_DO_SOFTIRQ
+ void do_softirq_own_stack(void);
+ #else
+ static inline void do_softirq_own_stack(void)
+@@ -480,6 +481,9 @@ static inline void do_softirq_own_stack(
+       __do_softirq();
+ }
+ #endif
++#else
++extern void thread_do_softirq(void);
++#endif
+ extern void open_softirq(int nr, void (*action)(struct softirq_action *));
+ extern void softirq_init(void);
+@@ -487,6 +491,7 @@ extern void __raise_softirq_irqoff(unsig
+ extern void raise_softirq_irqoff(unsigned int nr);
+ extern void raise_softirq(unsigned int nr);
++extern void softirq_check_pending_idle(void);
+ DECLARE_PER_CPU(struct task_struct *, ksoftirqd);
+@@ -644,6 +649,12 @@ void tasklet_hrtimer_cancel(struct taskl
+       tasklet_kill(&ttimer->tasklet);
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++extern void softirq_early_init(void);
++#else
++static inline void softirq_early_init(void) { }
++#endif
++
+ /*
+  * Autoprobing for irqs:
+  *
+--- a/include/linux/preempt.h
++++ b/include/linux/preempt.h
+@@ -50,7 +50,11 @@
+ #define HARDIRQ_OFFSET        (1UL << HARDIRQ_SHIFT)
+ #define NMI_OFFSET    (1UL << NMI_SHIFT)
+-#define SOFTIRQ_DISABLE_OFFSET        (2 * SOFTIRQ_OFFSET)
++#ifndef CONFIG_PREEMPT_RT_FULL
++# define SOFTIRQ_DISABLE_OFFSET               (2 * SOFTIRQ_OFFSET)
++#else
++# define SOFTIRQ_DISABLE_OFFSET               (0)
++#endif
+ /* We use the MSB mostly because its available */
+ #define PREEMPT_NEED_RESCHED  0x80000000
+@@ -59,9 +63,15 @@
+ #include <asm/preempt.h>
+ #define hardirq_count()       (preempt_count() & HARDIRQ_MASK)
+-#define softirq_count()       (preempt_count() & SOFTIRQ_MASK)
+ #define irq_count()   (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK \
+                                | NMI_MASK))
++#ifndef CONFIG_PREEMPT_RT_FULL
++# define softirq_count()      (preempt_count() & SOFTIRQ_MASK)
++# define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET)
++#else
++# define softirq_count()      (0UL)
++extern int in_serving_softirq(void);
++#endif
+ /*
+  * Are we doing bottom half or hardware interrupt processing?
+@@ -72,7 +82,6 @@
+ #define in_irq()              (hardirq_count())
+ #define in_softirq()          (softirq_count())
+ #define in_interrupt()                (irq_count())
+-#define in_serving_softirq()  (softirq_count() & SOFTIRQ_OFFSET)
+ /*
+  * Are we in NMI context?
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1965,6 +1965,8 @@ struct task_struct {
+ #endif
+ #ifdef CONFIG_PREEMPT_RT_BASE
+       struct rcu_head put_rcu;
++      int softirq_nestcnt;
++      unsigned int softirqs_raised;
+ #endif
+ #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
+       unsigned long   task_state_change;
+@@ -2281,6 +2283,7 @@ extern void thread_group_cputime_adjuste
+ /*
+  * Per process flags
+  */
++#define PF_IN_SOFTIRQ 0x00000001      /* Task is serving softirq */
+ #define PF_EXITING    0x00000004      /* getting shut down */
+ #define PF_EXITPIDONE 0x00000008      /* pi exit done on shut down */
+ #define PF_VCPU               0x00000010      /* I'm a virtual CPU */
+--- a/init/main.c
++++ b/init/main.c
+@@ -507,6 +507,7 @@ asmlinkage __visible void __init start_k
+       setup_command_line(command_line);
+       setup_nr_cpu_ids();
+       setup_per_cpu_areas();
++      softirq_early_init();
+       boot_cpu_state_init();
+       smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -26,6 +26,7 @@
+ #include <linux/smp.h>
+ #include <linux/smpboot.h>
+ #include <linux/tick.h>
++#include <linux/locallock.h>
+ #include <linux/irq.h>
+ #define CREATE_TRACE_POINTS
+@@ -63,6 +64,98 @@ const char * const softirq_to_name[NR_SO
+       "TASKLET", "SCHED", "HRTIMER", "RCU"
+ };
++#ifdef CONFIG_NO_HZ_COMMON
++# ifdef CONFIG_PREEMPT_RT_FULL
++
++struct softirq_runner {
++      struct task_struct *runner[NR_SOFTIRQS];
++};
++
++static DEFINE_PER_CPU(struct softirq_runner, softirq_runners);
++
++static inline void softirq_set_runner(unsigned int sirq)
++{
++      struct softirq_runner *sr = this_cpu_ptr(&softirq_runners);
++
++      sr->runner[sirq] = current;
++}
++
++static inline void softirq_clr_runner(unsigned int sirq)
++{
++      struct softirq_runner *sr = this_cpu_ptr(&softirq_runners);
++
++      sr->runner[sirq] = NULL;
++}
++
++/*
++ * On preempt-rt a softirq running context might be blocked on a
++ * lock. There might be no other runnable task on this CPU because the
++ * lock owner runs on some other CPU. So we have to go into idle with
++ * the pending bit set. Therefor we need to check this otherwise we
++ * warn about false positives which confuses users and defeats the
++ * whole purpose of this test.
++ *
++ * This code is called with interrupts disabled.
++ */
++void softirq_check_pending_idle(void)
++{
++      static int rate_limit;
++      struct softirq_runner *sr = this_cpu_ptr(&softirq_runners);
++      u32 warnpending;
++      int i;
++
++      if (rate_limit >= 10)
++              return;
++
++      warnpending = local_softirq_pending() & SOFTIRQ_STOP_IDLE_MASK;
++      for (i = 0; i < NR_SOFTIRQS; i++) {
++              struct task_struct *tsk = sr->runner[i];
++
++              /*
++               * The wakeup code in rtmutex.c wakes up the task
++               * _before_ it sets pi_blocked_on to NULL under
++               * tsk->pi_lock. So we need to check for both: state
++               * and pi_blocked_on.
++               */
++              if (tsk) {
++                      raw_spin_lock(&tsk->pi_lock);
++                      if (tsk->pi_blocked_on || tsk->state == TASK_RUNNING) {
++                              /* Clear all bits pending in that task */
++                              warnpending &= ~(tsk->softirqs_raised);
++                              warnpending &= ~(1 << i);
++                      }
++                      raw_spin_unlock(&tsk->pi_lock);
++              }
++      }
++
++      if (warnpending) {
++              printk(KERN_ERR "NOHZ: local_softirq_pending %02x\n",
++                     warnpending);
++              rate_limit++;
++      }
++}
++# else
++/*
++ * On !PREEMPT_RT we just printk rate limited:
++ */
++void softirq_check_pending_idle(void)
++{
++      static int rate_limit;
++
++      if (rate_limit < 10 &&
++                      (local_softirq_pending() & SOFTIRQ_STOP_IDLE_MASK)) {
++              printk(KERN_ERR "NOHZ: local_softirq_pending %02x\n",
++                     local_softirq_pending());
++              rate_limit++;
++      }
++}
++# endif
++
++#else /* !CONFIG_NO_HZ_COMMON */
++static inline void softirq_set_runner(unsigned int sirq) { }
++static inline void softirq_clr_runner(unsigned int sirq) { }
++#endif
++
+ /*
+  * we cannot loop indefinitely here to avoid userspace starvation,
+  * but we also don't want to introduce a worst case 1/HZ latency
+@@ -78,6 +171,26 @@ static void wakeup_softirqd(void)
+               wake_up_process(tsk);
+ }
++static void handle_softirq(unsigned int vec_nr)
++{
++      struct softirq_action *h = softirq_vec + vec_nr;
++      int prev_count;
++
++      prev_count = preempt_count();
++
++      kstat_incr_softirqs_this_cpu(vec_nr);
++
++      trace_softirq_entry(vec_nr);
++      h->action(h);
++      trace_softirq_exit(vec_nr);
++      if (unlikely(prev_count != preempt_count())) {
++              pr_err("huh, entered softirq %u %s %p with preempt_count %08x, exited with %08x?\n",
++                     vec_nr, softirq_to_name[vec_nr], h->action,
++                     prev_count, preempt_count());
++              preempt_count_set(prev_count);
++      }
++}
++
+ /*
+  * If ksoftirqd is scheduled, we do not want to process pending softirqs
+  * right now. Let ksoftirqd handle this at its own rate, to get fairness.
+@@ -89,6 +202,48 @@ static bool ksoftirqd_running(void)
+       return tsk && (tsk->state == TASK_RUNNING);
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
++static inline int ksoftirqd_softirq_pending(void)
++{
++      return local_softirq_pending();
++}
++
++static void handle_pending_softirqs(u32 pending)
++{
++      struct softirq_action *h = softirq_vec;
++      int softirq_bit;
++
++      local_irq_enable();
++
++      h = softirq_vec;
++
++      while ((softirq_bit = ffs(pending))) {
++              unsigned int vec_nr;
++
++              h += softirq_bit - 1;
++              vec_nr = h - softirq_vec;
++              handle_softirq(vec_nr);
++
++              h++;
++              pending >>= softirq_bit;
++      }
++
++      rcu_bh_qs();
++      local_irq_disable();
++}
++
++static void run_ksoftirqd(unsigned int cpu)
++{
++      local_irq_disable();
++      if (ksoftirqd_softirq_pending()) {
++              __do_softirq();
++              local_irq_enable();
++              cond_resched_rcu_qs();
++              return;
++      }
++      local_irq_enable();
++}
++
+ /*
+  * preempt_count and SOFTIRQ_OFFSET usage:
+  * - preempt_count is changed by SOFTIRQ_OFFSET on entering or leaving
+@@ -244,10 +399,8 @@ asmlinkage __visible void __softirq_entr
+       unsigned long end = jiffies + MAX_SOFTIRQ_TIME;
+       unsigned long old_flags = current->flags;
+       int max_restart = MAX_SOFTIRQ_RESTART;
+-      struct softirq_action *h;
+       bool in_hardirq;
+       __u32 pending;
+-      int softirq_bit;
+       /*
+        * Mask out PF_MEMALLOC s current task context is borrowed for the
+@@ -266,36 +419,7 @@ asmlinkage __visible void __softirq_entr
+       /* Reset the pending bitmask before enabling irqs */
+       set_softirq_pending(0);
+-      local_irq_enable();
+-
+-      h = softirq_vec;
+-
+-      while ((softirq_bit = ffs(pending))) {
+-              unsigned int vec_nr;
+-              int prev_count;
+-
+-              h += softirq_bit - 1;
+-
+-              vec_nr = h - softirq_vec;
+-              prev_count = preempt_count();
+-
+-              kstat_incr_softirqs_this_cpu(vec_nr);
+-
+-              trace_softirq_entry(vec_nr);
+-              h->action(h);
+-              trace_softirq_exit(vec_nr);
+-              if (unlikely(prev_count != preempt_count())) {
+-                      pr_err("huh, entered softirq %u %s %p with preempt_count %08x, exited with %08x?\n",
+-                             vec_nr, softirq_to_name[vec_nr], h->action,
+-                             prev_count, preempt_count());
+-                      preempt_count_set(prev_count);
+-              }
+-              h++;
+-              pending >>= softirq_bit;
+-      }
+-
+-      rcu_bh_qs();
+-      local_irq_disable();
++      handle_pending_softirqs(pending);
+       pending = local_softirq_pending();
+       if (pending) {
+@@ -332,6 +456,246 @@ asmlinkage __visible void do_softirq(voi
+ }
+ /*
++ * This function must run with irqs disabled!
++ */
++void raise_softirq_irqoff(unsigned int nr)
++{
++      __raise_softirq_irqoff(nr);
++
++      /*
++       * If we're in an interrupt or softirq, we're done
++       * (this also catches softirq-disabled code). We will
++       * actually run the softirq once we return from
++       * the irq or softirq.
++       *
++       * Otherwise we wake up ksoftirqd to make sure we
++       * schedule the softirq soon.
++       */
++      if (!in_interrupt())
++              wakeup_softirqd();
++}
++
++void __raise_softirq_irqoff(unsigned int nr)
++{
++      trace_softirq_raise(nr);
++      or_softirq_pending(1UL << nr);
++}
++
++static inline void local_bh_disable_nort(void) { local_bh_disable(); }
++static inline void _local_bh_enable_nort(void) { _local_bh_enable(); }
++static void ksoftirqd_set_sched_params(unsigned int cpu) { }
++static void ksoftirqd_clr_sched_params(unsigned int cpu, bool online) { }
++
++#else /* !PREEMPT_RT_FULL */
++
++/*
++ * On RT we serialize softirq execution with a cpu local lock per softirq
++ */
++static DEFINE_PER_CPU(struct local_irq_lock [NR_SOFTIRQS], local_softirq_locks);
++
++void __init softirq_early_init(void)
++{
++      int i;
++
++      for (i = 0; i < NR_SOFTIRQS; i++)
++              local_irq_lock_init(local_softirq_locks[i]);
++}
++
++static void lock_softirq(int which)
++{
++      local_lock(local_softirq_locks[which]);
++}
++
++static void unlock_softirq(int which)
++{
++      local_unlock(local_softirq_locks[which]);
++}
++
++static void do_single_softirq(int which)
++{
++      unsigned long old_flags = current->flags;
++
++      current->flags &= ~PF_MEMALLOC;
++      vtime_account_irq_enter(current);
++      current->flags |= PF_IN_SOFTIRQ;
++      lockdep_softirq_enter();
++      local_irq_enable();
++      handle_softirq(which);
++      local_irq_disable();
++      lockdep_softirq_exit();
++      current->flags &= ~PF_IN_SOFTIRQ;
++      vtime_account_irq_enter(current);
++      tsk_restore_flags(current, old_flags, PF_MEMALLOC);
++}
++
++/*
++ * Called with interrupts disabled. Process softirqs which were raised
++ * in current context (or on behalf of ksoftirqd).
++ */
++static void do_current_softirqs(void)
++{
++      while (current->softirqs_raised) {
++              int i = __ffs(current->softirqs_raised);
++              unsigned int pending, mask = (1U << i);
++
++              current->softirqs_raised &= ~mask;
++              local_irq_enable();
++
++              /*
++               * If the lock is contended, we boost the owner to
++               * process the softirq or leave the critical section
++               * now.
++               */
++              lock_softirq(i);
++              local_irq_disable();
++              softirq_set_runner(i);
++              /*
++               * Check with the local_softirq_pending() bits,
++               * whether we need to process this still or if someone
++               * else took care of it.
++               */
++              pending = local_softirq_pending();
++              if (pending & mask) {
++                      set_softirq_pending(pending & ~mask);
++                      do_single_softirq(i);
++              }
++              softirq_clr_runner(i);
++              unlock_softirq(i);
++              WARN_ON(current->softirq_nestcnt != 1);
++      }
++}
++
++void __local_bh_disable(void)
++{
++      if (++current->softirq_nestcnt == 1)
++              migrate_disable();
++}
++EXPORT_SYMBOL(__local_bh_disable);
++
++void __local_bh_enable(void)
++{
++      if (WARN_ON(current->softirq_nestcnt == 0))
++              return;
++
++      local_irq_disable();
++      if (current->softirq_nestcnt == 1 && current->softirqs_raised)
++              do_current_softirqs();
++      local_irq_enable();
++
++      if (--current->softirq_nestcnt == 0)
++              migrate_enable();
++}
++EXPORT_SYMBOL(__local_bh_enable);
++
++int in_serving_softirq(void)
++{
++      return current->flags & PF_IN_SOFTIRQ;
++}
++EXPORT_SYMBOL(in_serving_softirq);
++
++/* Called with preemption disabled */
++static void run_ksoftirqd(unsigned int cpu)
++{
++      local_irq_disable();
++      current->softirq_nestcnt++;
++
++      do_current_softirqs();
++      current->softirq_nestcnt--;
++      local_irq_enable();
++      cond_resched_rcu_qs();
++}
++
++/*
++ * Called from netif_rx_ni(). Preemption enabled, but migration
++ * disabled. So the cpu can't go away under us.
++ */
++void thread_do_softirq(void)
++{
++      if (!in_serving_softirq() && current->softirqs_raised) {
++              current->softirq_nestcnt++;
++              do_current_softirqs();
++              current->softirq_nestcnt--;
++      }
++}
++
++static void do_raise_softirq_irqoff(unsigned int nr)
++{
++      trace_softirq_raise(nr);
++      or_softirq_pending(1UL << nr);
++
++      /*
++       * If we are not in a hard interrupt and inside a bh disabled
++       * region, we simply raise the flag on current. local_bh_enable()
++       * will make sure that the softirq is executed. Otherwise we
++       * delegate it to ksoftirqd.
++       */
++      if (!in_irq() && current->softirq_nestcnt)
++              current->softirqs_raised |= (1U << nr);
++      else if (__this_cpu_read(ksoftirqd))
++              __this_cpu_read(ksoftirqd)->softirqs_raised |= (1U << nr);
++}
++
++void __raise_softirq_irqoff(unsigned int nr)
++{
++      do_raise_softirq_irqoff(nr);
++      if (!in_irq() && !current->softirq_nestcnt)
++              wakeup_softirqd();
++}
++
++/*
++ * This function must run with irqs disabled!
++ */
++void raise_softirq_irqoff(unsigned int nr)
++{
++      do_raise_softirq_irqoff(nr);
++
++      /*
++       * If we're in an hard interrupt we let irq return code deal
++       * with the wakeup of ksoftirqd.
++       */
++      if (in_irq())
++              return;
++      /*
++       * If we are in thread context but outside of a bh disabled
++       * region, we need to wake ksoftirqd as well.
++       *
++       * CHECKME: Some of the places which do that could be wrapped
++       * into local_bh_disable/enable pairs. Though it's unclear
++       * whether this is worth the effort. To find those places just
++       * raise a WARN() if the condition is met.
++       */
++      if (!current->softirq_nestcnt)
++              wakeup_softirqd();
++}
++
++static inline int ksoftirqd_softirq_pending(void)
++{
++      return current->softirqs_raised;
++}
++
++static inline void local_bh_disable_nort(void) { }
++static inline void _local_bh_enable_nort(void) { }
++
++static inline void ksoftirqd_set_sched_params(unsigned int cpu)
++{
++      struct sched_param param = { .sched_priority = 1 };
++
++      sched_setscheduler(current, SCHED_FIFO, &param);
++      /* Take over all pending softirqs when starting */
++      local_irq_disable();
++      current->softirqs_raised = local_softirq_pending();
++      local_irq_enable();
++}
++
++static inline void ksoftirqd_clr_sched_params(unsigned int cpu, bool online)
++{
++      struct sched_param param = { .sched_priority = 0 };
++
++      sched_setscheduler(current, SCHED_NORMAL, &param);
++}
++
++#endif /* PREEMPT_RT_FULL */
++/*
+  * Enter an interrupt context.
+  */
+ void irq_enter(void)
+@@ -342,9 +706,9 @@ void irq_enter(void)
+                * Prevent raise_softirq from needlessly waking up ksoftirqd
+                * here, as softirq will be serviced on return from interrupt.
+                */
+-              local_bh_disable();
++              local_bh_disable_nort();
+               tick_irq_enter();
+-              _local_bh_enable();
++              _local_bh_enable_nort();
+       }
+       __irq_enter();
+@@ -352,9 +716,13 @@ void irq_enter(void)
+ static inline void invoke_softirq(void)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++      unsigned long flags;
++#endif
++
+       if (ksoftirqd_running())
+               return;
+-
++#ifndef CONFIG_PREEMPT_RT_FULL
+       if (!force_irqthreads) {
+ #ifdef CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK
+               /*
+@@ -374,6 +742,14 @@ static inline void invoke_softirq(void)
+       } else {
+               wakeup_softirqd();
+       }
++#else /* PREEMPT_RT_FULL */
++
++      local_irq_save(flags);
++      if (__this_cpu_read(ksoftirqd) &&
++                      __this_cpu_read(ksoftirqd)->softirqs_raised)
++              wakeup_softirqd();
++      local_irq_restore(flags);
++#endif
+ }
+ static inline void tick_irq_exit(void)
+@@ -410,26 +786,6 @@ void irq_exit(void)
+       trace_hardirq_exit(); /* must be last! */
+ }
+-/*
+- * This function must run with irqs disabled!
+- */
+-inline void raise_softirq_irqoff(unsigned int nr)
+-{
+-      __raise_softirq_irqoff(nr);
+-
+-      /*
+-       * If we're in an interrupt or softirq, we're done
+-       * (this also catches softirq-disabled code). We will
+-       * actually run the softirq once we return from
+-       * the irq or softirq.
+-       *
+-       * Otherwise we wake up ksoftirqd to make sure we
+-       * schedule the softirq soon.
+-       */
+-      if (!in_interrupt())
+-              wakeup_softirqd();
+-}
+-
+ void raise_softirq(unsigned int nr)
+ {
+       unsigned long flags;
+@@ -439,12 +795,6 @@ void raise_softirq(unsigned int nr)
+       local_irq_restore(flags);
+ }
+-void __raise_softirq_irqoff(unsigned int nr)
+-{
+-      trace_softirq_raise(nr);
+-      or_softirq_pending(1UL << nr);
+-}
+-
+ void open_softirq(int nr, void (*action)(struct softirq_action *))
+ {
+       softirq_vec[nr].action = action;
+@@ -747,23 +1097,7 @@ EXPORT_SYMBOL(tasklet_unlock_wait);
+ static int ksoftirqd_should_run(unsigned int cpu)
+ {
+-      return local_softirq_pending();
+-}
+-
+-static void run_ksoftirqd(unsigned int cpu)
+-{
+-      local_irq_disable();
+-      if (local_softirq_pending()) {
+-              /*
+-               * We can safely run softirq on inline stack, as we are not deep
+-               * in the task stack here.
+-               */
+-              __do_softirq();
+-              local_irq_enable();
+-              cond_resched_rcu_qs();
+-              return;
+-      }
+-      local_irq_enable();
++      return ksoftirqd_softirq_pending();
+ }
+ #ifdef CONFIG_HOTPLUG_CPU
+@@ -830,6 +1164,8 @@ static int takeover_tasklets(unsigned in
+ static struct smp_hotplug_thread softirq_threads = {
+       .store                  = &ksoftirqd,
++      .setup                  = ksoftirqd_set_sched_params,
++      .cleanup                = ksoftirqd_clr_sched_params,
+       .thread_should_run      = ksoftirqd_should_run,
+       .thread_fn              = run_ksoftirqd,
+       .thread_comm            = "ksoftirqd/%u",
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -882,14 +882,7 @@ static bool can_stop_idle_tick(int cpu,
+               return false;
+       if (unlikely(local_softirq_pending() && cpu_online(cpu))) {
+-              static int ratelimit;
+-
+-              if (ratelimit < 10 &&
+-                  (local_softirq_pending() & SOFTIRQ_STOP_IDLE_MASK)) {
+-                      pr_warn("NOHZ: local_softirq_pending %02x\n",
+-                              (unsigned int) local_softirq_pending());
+-                      ratelimit++;
+-              }
++              softirq_check_pending_idle();
+               return false;
+       }
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -3856,11 +3856,9 @@ int netif_rx_ni(struct sk_buff *skb)
+       trace_netif_rx_ni_entry(skb);
+-      preempt_disable();
++      local_bh_disable();
+       err = netif_rx_internal(skb);
+-      if (local_softirq_pending())
+-              do_softirq();
+-      preempt_enable();
++      local_bh_enable();
+       return err;
+ }
diff --git a/patches/features/all/rt/softirq-split-timer-softirqs-out-of-ksoftirqd.patch b/patches/features/all/rt/softirq-split-timer-softirqs-out-of-ksoftirqd.patch
new file mode 100644 (file)
index 0000000..2425f69
--- /dev/null
@@ -0,0 +1,208 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 20 Jan 2016 16:34:17 +0100
+Subject: softirq: split timer softirqs out of ksoftirqd
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The softirqd runs in -RT with SCHED_FIFO (prio 1) and deals mostly with
+timer wakeup which can not happen in hardirq context. The prio has been
+risen from the normal SCHED_OTHER so the timer wakeup does not happen
+too late.
+With enough networking load it is possible that the system never goes
+idle and schedules ksoftirqd and everything else with a higher priority.
+One of the tasks left behind is one of RCU's threads and so we see stalls
+and eventually run out of memory.
+This patch moves the TIMER and HRTIMER softirqs out of the `ksoftirqd`
+thread into its own `ktimersoftd`. The former can now run SCHED_OTHER
+(same as mainline) and the latter at SCHED_FIFO due to the wakeups.
+
+From networking point of view: The NAPI callback runs after the network
+interrupt thread completes. If its run time takes too long the NAPI code
+itself schedules the `ksoftirqd`. Here in the thread it can run at
+SCHED_OTHER priority and it won't defer RCU anymore.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/softirq.c |   85 +++++++++++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 73 insertions(+), 12 deletions(-)
+
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -58,6 +58,10 @@ EXPORT_SYMBOL(irq_stat);
+ static struct softirq_action softirq_vec[NR_SOFTIRQS] __cacheline_aligned_in_smp;
+ DEFINE_PER_CPU(struct task_struct *, ksoftirqd);
++#ifdef CONFIG_PREEMPT_RT_FULL
++#define TIMER_SOFTIRQS ((1 << TIMER_SOFTIRQ) | (1 << HRTIMER_SOFTIRQ))
++DEFINE_PER_CPU(struct task_struct *, ktimer_softirqd);
++#endif
+ const char * const softirq_to_name[NR_SOFTIRQS] = {
+       "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "IRQ_POLL",
+@@ -171,6 +175,17 @@ static void wakeup_softirqd(void)
+               wake_up_process(tsk);
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
++static void wakeup_timer_softirqd(void)
++{
++      /* Interrupts are disabled: no need to stop preemption */
++      struct task_struct *tsk = __this_cpu_read(ktimer_softirqd);
++
++      if (tsk && tsk->state != TASK_RUNNING)
++              wake_up_process(tsk);
++}
++#endif
++
+ static void handle_softirq(unsigned int vec_nr)
+ {
+       struct softirq_action *h = softirq_vec + vec_nr;
+@@ -484,7 +499,6 @@ void __raise_softirq_irqoff(unsigned int
+ static inline void local_bh_disable_nort(void) { local_bh_disable(); }
+ static inline void _local_bh_enable_nort(void) { _local_bh_enable(); }
+ static void ksoftirqd_set_sched_params(unsigned int cpu) { }
+-static void ksoftirqd_clr_sched_params(unsigned int cpu, bool online) { }
+ #else /* !PREEMPT_RT_FULL */
+@@ -631,8 +645,12 @@ void thread_do_softirq(void)
+ static void do_raise_softirq_irqoff(unsigned int nr)
+ {
++      unsigned int mask;
++
++      mask = 1UL << nr;
++
+       trace_softirq_raise(nr);
+-      or_softirq_pending(1UL << nr);
++      or_softirq_pending(mask);
+       /*
+        * If we are not in a hard interrupt and inside a bh disabled
+@@ -641,16 +659,29 @@ static void do_raise_softirq_irqoff(unsi
+        * delegate it to ksoftirqd.
+        */
+       if (!in_irq() && current->softirq_nestcnt)
+-              current->softirqs_raised |= (1U << nr);
+-      else if (__this_cpu_read(ksoftirqd))
+-              __this_cpu_read(ksoftirqd)->softirqs_raised |= (1U << nr);
++              current->softirqs_raised |= mask;
++      else if (!__this_cpu_read(ksoftirqd) || !__this_cpu_read(ktimer_softirqd))
++              return;
++
++      if (mask & TIMER_SOFTIRQS)
++              __this_cpu_read(ktimer_softirqd)->softirqs_raised |= mask;
++      else
++              __this_cpu_read(ksoftirqd)->softirqs_raised |= mask;
++}
++
++static void wakeup_proper_softirq(unsigned int nr)
++{
++      if ((1UL << nr) & TIMER_SOFTIRQS)
++              wakeup_timer_softirqd();
++      else
++              wakeup_softirqd();
+ }
+ void __raise_softirq_irqoff(unsigned int nr)
+ {
+       do_raise_softirq_irqoff(nr);
+       if (!in_irq() && !current->softirq_nestcnt)
+-              wakeup_softirqd();
++              wakeup_proper_softirq(nr);
+ }
+ /*
+@@ -676,7 +707,7 @@ void raise_softirq_irqoff(unsigned int n
+        * raise a WARN() if the condition is met.
+        */
+       if (!current->softirq_nestcnt)
+-              wakeup_softirqd();
++              wakeup_proper_softirq(nr);
+ }
+ static inline int ksoftirqd_softirq_pending(void)
+@@ -689,22 +720,37 @@ static inline void _local_bh_enable_nort
+ static inline void ksoftirqd_set_sched_params(unsigned int cpu)
+ {
++      /* Take over all but timer pending softirqs when starting */
++      local_irq_disable();
++      current->softirqs_raised = local_softirq_pending() & ~TIMER_SOFTIRQS;
++      local_irq_enable();
++}
++
++static inline void ktimer_softirqd_set_sched_params(unsigned int cpu)
++{
+       struct sched_param param = { .sched_priority = 1 };
+       sched_setscheduler(current, SCHED_FIFO, &param);
+-      /* Take over all pending softirqs when starting */
++
++      /* Take over timer pending softirqs when starting */
+       local_irq_disable();
+-      current->softirqs_raised = local_softirq_pending();
++      current->softirqs_raised = local_softirq_pending() & TIMER_SOFTIRQS;
+       local_irq_enable();
+ }
+-static inline void ksoftirqd_clr_sched_params(unsigned int cpu, bool online)
++static inline void ktimer_softirqd_clr_sched_params(unsigned int cpu,
++                                                  bool online)
+ {
+       struct sched_param param = { .sched_priority = 0 };
+       sched_setscheduler(current, SCHED_NORMAL, &param);
+ }
++static int ktimer_softirqd_should_run(unsigned int cpu)
++{
++      return current->softirqs_raised;
++}
++
+ #endif /* PREEMPT_RT_FULL */
+ /*
+  * Enter an interrupt context.
+@@ -759,6 +805,9 @@ static inline void invoke_softirq(void)
+       if (__this_cpu_read(ksoftirqd) &&
+                       __this_cpu_read(ksoftirqd)->softirqs_raised)
+               wakeup_softirqd();
++      if (__this_cpu_read(ktimer_softirqd) &&
++                      __this_cpu_read(ktimer_softirqd)->softirqs_raised)
++              wakeup_timer_softirqd();
+       local_irq_restore(flags);
+ #endif
+ }
+@@ -1176,18 +1225,30 @@ static int takeover_tasklets(unsigned in
+ static struct smp_hotplug_thread softirq_threads = {
+       .store                  = &ksoftirqd,
+       .setup                  = ksoftirqd_set_sched_params,
+-      .cleanup                = ksoftirqd_clr_sched_params,
+       .thread_should_run      = ksoftirqd_should_run,
+       .thread_fn              = run_ksoftirqd,
+       .thread_comm            = "ksoftirqd/%u",
+ };
++#ifdef CONFIG_PREEMPT_RT_FULL
++static struct smp_hotplug_thread softirq_timer_threads = {
++      .store                  = &ktimer_softirqd,
++      .setup                  = ktimer_softirqd_set_sched_params,
++      .cleanup                = ktimer_softirqd_clr_sched_params,
++      .thread_should_run      = ktimer_softirqd_should_run,
++      .thread_fn              = run_ksoftirqd,
++      .thread_comm            = "ktimersoftd/%u",
++};
++#endif
++
+ static __init int spawn_ksoftirqd(void)
+ {
+       cpuhp_setup_state_nocalls(CPUHP_SOFTIRQ_DEAD, "softirq:dead", NULL,
+                                 takeover_tasklets);
+       BUG_ON(smpboot_register_percpu_thread(&softirq_threads));
+-
++#ifdef CONFIG_PREEMPT_RT_FULL
++      BUG_ON(smpboot_register_percpu_thread(&softirq_timer_threads));
++#endif
+       return 0;
+ }
+ early_initcall(spawn_ksoftirqd);
diff --git a/patches/features/all/rt/softirq-wake-the-timer-softirq-if-needed.patch b/patches/features/all/rt/softirq-wake-the-timer-softirq-if-needed.patch
new file mode 100644 (file)
index 0000000..280b564
--- /dev/null
@@ -0,0 +1,72 @@
+From: Mike Galbraith <efault@gmx.de>
+Date: Fri, 20 Jan 2017 18:10:20 +0100
+Subject: [PATCH] softirq: wake the timer softirq if needed
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The irq-exit path only checks the "normal"-softirq thread if it is
+running and ignores the state of the "timer"-softirq thread. It is possible
+that the timer-softirq thread is and has work pending which leads to the
+following warning:
+
+[   84.087571] NOHZ: local_softirq_pending 02
+[   84.087593] NOHZ: local_softirq_pending 02
+[   84.087598] NOHZ: local_softirq_pending 02
+[   84.087904] NOHZ: local_softirq_pending 02
+[   84.088526] NOHZ: local_softirq_pending 02
+[   84.088899] NOHZ: local_softirq_pending 02
+[   84.089463] NOHZ: local_softirq_pending 02
+[  115.013470] NOHZ: local_softirq_pending 02
+[  115.013601] NOHZ: local_softirq_pending 02
+[  115.013709] NOHZ: local_softirq_pending 02
+
+This was introduced during the timer-softirq split.
+
+Cc: stable-rt@vger.kernel.org
+Signed-off-by: Mike Galbraith <efault@gmx.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/softirq.c |   10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -206,6 +206,7 @@ static void handle_softirq(unsigned int
+       }
+ }
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+  * If ksoftirqd is scheduled, we do not want to process pending softirqs
+  * right now. Let ksoftirqd handle this at its own rate, to get fairness.
+@@ -217,7 +218,6 @@ static bool ksoftirqd_running(void)
+       return tsk && (tsk->state == TASK_RUNNING);
+ }
+-#ifndef CONFIG_PREEMPT_RT_FULL
+ static inline int ksoftirqd_softirq_pending(void)
+ {
+       return local_softirq_pending();
+@@ -773,13 +773,10 @@ void irq_enter(void)
+ static inline void invoke_softirq(void)
+ {
+-#ifdef CONFIG_PREEMPT_RT_FULL
+-      unsigned long flags;
+-#endif
+-
++#ifndef CONFIG_PREEMPT_RT_FULL
+       if (ksoftirqd_running())
+               return;
+-#ifndef CONFIG_PREEMPT_RT_FULL
++
+       if (!force_irqthreads) {
+ #ifdef CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK
+               /*
+@@ -800,6 +797,7 @@ static inline void invoke_softirq(void)
+               wakeup_softirqd();
+       }
+ #else /* PREEMPT_RT_FULL */
++      unsigned long flags;
+       local_irq_save(flags);
+       if (__this_cpu_read(ksoftirqd) &&
diff --git a/patches/features/all/rt/sparc64-use-generic-rwsem-spinlocks-rt.patch b/patches/features/all/rt/sparc64-use-generic-rwsem-spinlocks-rt.patch
new file mode 100644 (file)
index 0000000..07c203c
--- /dev/null
@@ -0,0 +1,28 @@
+From: Allen Pais <allen.pais@oracle.com>
+Date: Fri, 13 Dec 2013 09:44:41 +0530
+Subject: sparc64: use generic rwsem spinlocks rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Signed-off-by: Allen Pais <allen.pais@oracle.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/sparc/Kconfig |    6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+--- a/arch/sparc/Kconfig
++++ b/arch/sparc/Kconfig
+@@ -194,12 +194,10 @@ config NR_CPUS
+ source kernel/Kconfig.hz
+ config RWSEM_GENERIC_SPINLOCK
+-      bool
+-      default y if SPARC32
++      def_bool PREEMPT_RT_FULL
+ config RWSEM_XCHGADD_ALGORITHM
+-      bool
+-      default y if SPARC64
++      def_bool !RWSEM_GENERIC_SPINLOCK && !PREEMPT_RT_FULL
+ config GENERIC_HWEIGHT
+       bool
diff --git a/patches/features/all/rt/spinlock-types-separate-raw.patch b/patches/features/all/rt/spinlock-types-separate-raw.patch
new file mode 100644 (file)
index 0000000..df365f3
--- /dev/null
@@ -0,0 +1,209 @@
+Subject: spinlock: Split the lock types header
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 29 Jun 2011 19:34:01 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Split raw_spinlock into its own file and the remaining spinlock_t into
+its own non-RT header. The non-RT header will be replaced later by sleeping
+spinlocks.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/linux/rwlock_types.h        |    4 +
+ include/linux/spinlock_types.h      |   74 ------------------------------------
+ include/linux/spinlock_types_nort.h |   33 ++++++++++++++++
+ include/linux/spinlock_types_raw.h  |   56 +++++++++++++++++++++++++++
+ 4 files changed, 95 insertions(+), 72 deletions(-)
+
+--- a/include/linux/rwlock_types.h
++++ b/include/linux/rwlock_types.h
+@@ -1,6 +1,10 @@
+ #ifndef __LINUX_RWLOCK_TYPES_H
+ #define __LINUX_RWLOCK_TYPES_H
++#if !defined(__LINUX_SPINLOCK_TYPES_H)
++# error "Do not include directly, include spinlock_types.h"
++#endif
++
+ /*
+  * include/linux/rwlock_types.h - generic rwlock type definitions
+  *                              and initializers
+--- a/include/linux/spinlock_types.h
++++ b/include/linux/spinlock_types.h
+@@ -9,79 +9,9 @@
+  * Released under the General Public License (GPL).
+  */
+-#if defined(CONFIG_SMP)
+-# include <asm/spinlock_types.h>
+-#else
+-# include <linux/spinlock_types_up.h>
+-#endif
++#include <linux/spinlock_types_raw.h>
+-#include <linux/lockdep.h>
+-
+-typedef struct raw_spinlock {
+-      arch_spinlock_t raw_lock;
+-#ifdef CONFIG_GENERIC_LOCKBREAK
+-      unsigned int break_lock;
+-#endif
+-#ifdef CONFIG_DEBUG_SPINLOCK
+-      unsigned int magic, owner_cpu;
+-      void *owner;
+-#endif
+-#ifdef CONFIG_DEBUG_LOCK_ALLOC
+-      struct lockdep_map dep_map;
+-#endif
+-} raw_spinlock_t;
+-
+-#define SPINLOCK_MAGIC                0xdead4ead
+-
+-#define SPINLOCK_OWNER_INIT   ((void *)-1L)
+-
+-#ifdef CONFIG_DEBUG_LOCK_ALLOC
+-# define SPIN_DEP_MAP_INIT(lockname)  .dep_map = { .name = #lockname }
+-#else
+-# define SPIN_DEP_MAP_INIT(lockname)
+-#endif
+-
+-#ifdef CONFIG_DEBUG_SPINLOCK
+-# define SPIN_DEBUG_INIT(lockname)            \
+-      .magic = SPINLOCK_MAGIC,                \
+-      .owner_cpu = -1,                        \
+-      .owner = SPINLOCK_OWNER_INIT,
+-#else
+-# define SPIN_DEBUG_INIT(lockname)
+-#endif
+-
+-#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \
+-      {                                       \
+-      .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED,  \
+-      SPIN_DEBUG_INIT(lockname)               \
+-      SPIN_DEP_MAP_INIT(lockname) }
+-
+-#define __RAW_SPIN_LOCK_UNLOCKED(lockname)    \
+-      (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
+-
+-#define DEFINE_RAW_SPINLOCK(x)        raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
+-
+-typedef struct spinlock {
+-      union {
+-              struct raw_spinlock rlock;
+-
+-#ifdef CONFIG_DEBUG_LOCK_ALLOC
+-# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
+-              struct {
+-                      u8 __padding[LOCK_PADSIZE];
+-                      struct lockdep_map dep_map;
+-              };
+-#endif
+-      };
+-} spinlock_t;
+-
+-#define __SPIN_LOCK_INITIALIZER(lockname) \
+-      { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
+-
+-#define __SPIN_LOCK_UNLOCKED(lockname) \
+-      (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
+-
+-#define DEFINE_SPINLOCK(x)    spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
++#include <linux/spinlock_types_nort.h>
+ #include <linux/rwlock_types.h>
+--- /dev/null
++++ b/include/linux/spinlock_types_nort.h
+@@ -0,0 +1,33 @@
++#ifndef __LINUX_SPINLOCK_TYPES_NORT_H
++#define __LINUX_SPINLOCK_TYPES_NORT_H
++
++#ifndef __LINUX_SPINLOCK_TYPES_H
++#error "Do not include directly. Include spinlock_types.h instead"
++#endif
++
++/*
++ * The non RT version maps spinlocks to raw_spinlocks
++ */
++typedef struct spinlock {
++      union {
++              struct raw_spinlock rlock;
++
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
++              struct {
++                      u8 __padding[LOCK_PADSIZE];
++                      struct lockdep_map dep_map;
++              };
++#endif
++      };
++} spinlock_t;
++
++#define __SPIN_LOCK_INITIALIZER(lockname) \
++      { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
++
++#define __SPIN_LOCK_UNLOCKED(lockname) \
++      (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
++
++#define DEFINE_SPINLOCK(x)    spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
++
++#endif
+--- /dev/null
++++ b/include/linux/spinlock_types_raw.h
+@@ -0,0 +1,56 @@
++#ifndef __LINUX_SPINLOCK_TYPES_RAW_H
++#define __LINUX_SPINLOCK_TYPES_RAW_H
++
++#if defined(CONFIG_SMP)
++# include <asm/spinlock_types.h>
++#else
++# include <linux/spinlock_types_up.h>
++#endif
++
++#include <linux/lockdep.h>
++
++typedef struct raw_spinlock {
++      arch_spinlock_t raw_lock;
++#ifdef CONFIG_GENERIC_LOCKBREAK
++      unsigned int break_lock;
++#endif
++#ifdef CONFIG_DEBUG_SPINLOCK
++      unsigned int magic, owner_cpu;
++      void *owner;
++#endif
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++      struct lockdep_map dep_map;
++#endif
++} raw_spinlock_t;
++
++#define SPINLOCK_MAGIC                0xdead4ead
++
++#define SPINLOCK_OWNER_INIT   ((void *)-1L)
++
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
++# define SPIN_DEP_MAP_INIT(lockname)  .dep_map = { .name = #lockname }
++#else
++# define SPIN_DEP_MAP_INIT(lockname)
++#endif
++
++#ifdef CONFIG_DEBUG_SPINLOCK
++# define SPIN_DEBUG_INIT(lockname)            \
++      .magic = SPINLOCK_MAGIC,                \
++      .owner_cpu = -1,                        \
++      .owner = SPINLOCK_OWNER_INIT,
++#else
++# define SPIN_DEBUG_INIT(lockname)
++#endif
++
++#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \
++      {                                       \
++      .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED,  \
++      SPIN_DEBUG_INIT(lockname)               \
++      SPIN_DEP_MAP_INIT(lockname) }
++
++#define __RAW_SPIN_LOCK_UNLOCKED(lockname)    \
++      (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
++
++#define DEFINE_RAW_SPINLOCK(x)        raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
++
++#endif
diff --git a/patches/features/all/rt/stop-machine-raw-lock.patch b/patches/features/all/rt/stop-machine-raw-lock.patch
new file mode 100644 (file)
index 0000000..d9e5ed7
--- /dev/null
@@ -0,0 +1,116 @@
+Subject: stop_machine: Use raw spinlocks
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 29 Jun 2011 11:01:51 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use raw-locks in stomp_machine() to allow locking in irq-off regions.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/stop_machine.c |   34 +++++++++++++---------------------
+ 1 file changed, 13 insertions(+), 21 deletions(-)
+
+--- a/kernel/stop_machine.c
++++ b/kernel/stop_machine.c
+@@ -36,7 +36,7 @@ struct cpu_stop_done {
+ struct cpu_stopper {
+       struct task_struct      *thread;
+-      spinlock_t              lock;
++      raw_spinlock_t          lock;
+       bool                    enabled;        /* is this stopper enabled? */
+       struct list_head        works;          /* list of pending works */
+@@ -78,14 +78,14 @@ static bool cpu_stop_queue_work(unsigned
+       unsigned long flags;
+       bool enabled;
+-      spin_lock_irqsave(&stopper->lock, flags);
++      raw_spin_lock_irqsave(&stopper->lock, flags);
+       enabled = stopper->enabled;
+       if (enabled)
+               __cpu_stop_queue_work(stopper, work);
+       else if (work->done)
+               cpu_stop_signal_done(work->done);
+-      spin_unlock_irqrestore(&stopper->lock, flags);
++      raw_spin_unlock_irqrestore(&stopper->lock, flags);
+       return enabled;
+ }
+@@ -231,8 +231,8 @@ static int cpu_stop_queue_two_works(int
+       struct cpu_stopper *stopper2 = per_cpu_ptr(&cpu_stopper, cpu2);
+       int err;
+ retry:
+-      spin_lock_irq(&stopper1->lock);
+-      spin_lock_nested(&stopper2->lock, SINGLE_DEPTH_NESTING);
++      raw_spin_lock_irq(&stopper1->lock);
++      raw_spin_lock_nested(&stopper2->lock, SINGLE_DEPTH_NESTING);
+       err = -ENOENT;
+       if (!stopper1->enabled || !stopper2->enabled)
+@@ -255,8 +255,8 @@ static int cpu_stop_queue_two_works(int
+       __cpu_stop_queue_work(stopper1, work1);
+       __cpu_stop_queue_work(stopper2, work2);
+ unlock:
+-      spin_unlock(&stopper2->lock);
+-      spin_unlock_irq(&stopper1->lock);
++      raw_spin_unlock(&stopper2->lock);
++      raw_spin_unlock_irq(&stopper1->lock);
+       if (unlikely(err == -EDEADLK)) {
+               while (stop_cpus_in_progress)
+@@ -448,9 +448,9 @@ static int cpu_stop_should_run(unsigned
+       unsigned long flags;
+       int run;
+-      spin_lock_irqsave(&stopper->lock, flags);
++      raw_spin_lock_irqsave(&stopper->lock, flags);
+       run = !list_empty(&stopper->works);
+-      spin_unlock_irqrestore(&stopper->lock, flags);
++      raw_spin_unlock_irqrestore(&stopper->lock, flags);
+       return run;
+ }
+@@ -461,13 +461,13 @@ static void cpu_stopper_thread(unsigned
+ repeat:
+       work = NULL;
+-      spin_lock_irq(&stopper->lock);
++      raw_spin_lock_irq(&stopper->lock);
+       if (!list_empty(&stopper->works)) {
+               work = list_first_entry(&stopper->works,
+                                       struct cpu_stop_work, list);
+               list_del_init(&work->list);
+       }
+-      spin_unlock_irq(&stopper->lock);
++      raw_spin_unlock_irq(&stopper->lock);
+       if (work) {
+               cpu_stop_fn_t fn = work->fn;
+@@ -475,15 +475,7 @@ static void cpu_stopper_thread(unsigned
+               struct cpu_stop_done *done = work->done;
+               int ret;
+-              /*
+-               * Wait until the stopper finished scheduling on all
+-               * cpus
+-               */
+-              lg_global_lock(&stop_cpus_lock);
+-              /*
+-               * Let other cpu threads continue as well
+-               */
+-              lg_global_unlock(&stop_cpus_lock);
++              /* XXX */
+               /* cpu stop callbacks must not sleep, make in_atomic() == T */
+               preempt_count_inc();
+@@ -551,7 +543,7 @@ static int __init cpu_stop_init(void)
+       for_each_possible_cpu(cpu) {
+               struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
+-              spin_lock_init(&stopper->lock);
++              raw_spin_lock_init(&stopper->lock);
+               INIT_LIST_HEAD(&stopper->works);
+       }
diff --git a/patches/features/all/rt/stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch b/patches/features/all/rt/stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
new file mode 100644 (file)
index 0000000..80ed18b
--- /dev/null
@@ -0,0 +1,35 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:30:27 -0500
+Subject: stop_machine: convert stop_machine_run() to PREEMPT_RT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Instead of playing with non-preemption, introduce explicit
+startup serialization. This is more robust and cleaner as
+well.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+[bigeasy: XXX: stopper_lock -> stop_cpus_lock]
+---
+ kernel/stop_machine.c |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/kernel/stop_machine.c
++++ b/kernel/stop_machine.c
+@@ -475,6 +475,16 @@ static void cpu_stopper_thread(unsigned
+               struct cpu_stop_done *done = work->done;
+               int ret;
++              /*
++               * Wait until the stopper finished scheduling on all
++               * cpus
++               */
++              lg_global_lock(&stop_cpus_lock);
++              /*
++               * Let other cpu threads continue as well
++               */
++              lg_global_unlock(&stop_cpus_lock);
++
+               /* cpu stop callbacks must not sleep, make in_atomic() == T */
+               preempt_count_inc();
+               ret = fn(arg);
diff --git a/patches/features/all/rt/sunrpc-make-svc_xprt_do_enqueue-use-get_cpu_light.patch b/patches/features/all/rt/sunrpc-make-svc_xprt_do_enqueue-use-get_cpu_light.patch
new file mode 100644 (file)
index 0000000..1c7e96f
--- /dev/null
@@ -0,0 +1,63 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Wed, 18 Feb 2015 16:05:28 +0100
+Subject: sunrpc: Make svc_xprt_do_enqueue() use get_cpu_light()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+|BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:915
+|in_atomic(): 1, irqs_disabled(): 0, pid: 3194, name: rpc.nfsd
+|Preemption disabled at:[<ffffffffa06bf0bb>] svc_xprt_received+0x4b/0xc0 [sunrpc]
+|CPU: 6 PID: 3194 Comm: rpc.nfsd Not tainted 3.18.7-rt1 #9
+|Hardware name: MEDION MS-7848/MS-7848, BIOS M7848W08.404 11/06/2014
+| ffff880409630000 ffff8800d9a33c78 ffffffff815bdeb5 0000000000000002
+| 0000000000000000 ffff8800d9a33c98 ffffffff81073c86 ffff880408dd6008
+| ffff880408dd6000 ffff8800d9a33cb8 ffffffff815c3d84 ffff88040b3ac000
+|Call Trace:
+| [<ffffffff815bdeb5>] dump_stack+0x4f/0x9e
+| [<ffffffff81073c86>] __might_sleep+0xe6/0x150
+| [<ffffffff815c3d84>] rt_spin_lock+0x24/0x50
+| [<ffffffffa06beec0>] svc_xprt_do_enqueue+0x80/0x230 [sunrpc]
+| [<ffffffffa06bf0bb>] svc_xprt_received+0x4b/0xc0 [sunrpc]
+| [<ffffffffa06c03ed>] svc_add_new_perm_xprt+0x6d/0x80 [sunrpc]
+| [<ffffffffa06b2693>] svc_addsock+0x143/0x200 [sunrpc]
+| [<ffffffffa072e69c>] write_ports+0x28c/0x340 [nfsd]
+| [<ffffffffa072d2ac>] nfsctl_transaction_write+0x4c/0x80 [nfsd]
+| [<ffffffff8117ee83>] vfs_write+0xb3/0x1d0
+| [<ffffffff8117f889>] SyS_write+0x49/0xb0
+| [<ffffffff815c4556>] system_call_fastpath+0x16/0x1b
+
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ net/sunrpc/svc_xprt.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/net/sunrpc/svc_xprt.c
++++ b/net/sunrpc/svc_xprt.c
+@@ -396,7 +396,7 @@ void svc_xprt_do_enqueue(struct svc_xprt
+               goto out;
+       }
+-      cpu = get_cpu();
++      cpu = get_cpu_light();
+       pool = svc_pool_for_cpu(xprt->xpt_server, cpu);
+       atomic_long_inc(&pool->sp_stats.packets);
+@@ -432,7 +432,7 @@ void svc_xprt_do_enqueue(struct svc_xprt
+               atomic_long_inc(&pool->sp_stats.threads_woken);
+               wake_up_process(rqstp->rq_task);
+-              put_cpu();
++              put_cpu_light();
+               goto out;
+       }
+       rcu_read_unlock();
+@@ -453,7 +453,7 @@ void svc_xprt_do_enqueue(struct svc_xprt
+               goto redo_search;
+       }
+       rqstp = NULL;
+-      put_cpu();
++      put_cpu_light();
+ out:
+       trace_svc_xprt_do_enqueue(xprt, rqstp);
+ }
diff --git a/patches/features/all/rt/suspend-prevernt-might-sleep-splats.patch b/patches/features/all/rt/suspend-prevernt-might-sleep-splats.patch
new file mode 100644 (file)
index 0000000..72750bf
--- /dev/null
@@ -0,0 +1,107 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 15 Jul 2010 10:29:00 +0200
+Subject: suspend: Prevent might sleep splats
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+timekeeping suspend/resume calls read_persistant_clock() which takes
+rtc_lock. That results in might sleep warnings because at that point
+we run with interrupts disabled.
+
+We cannot convert rtc_lock to a raw spinlock as that would trigger
+other might sleep warnings.
+
+As a temporary workaround we disable the might sleep warnings by
+setting system_state to SYSTEM_SUSPEND before calling sysdev_suspend()
+and restoring it to SYSTEM_RUNNING afer sysdev_resume().
+
+Needs to be revisited.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/kernel.h   |    1 +
+ kernel/power/hibernate.c |    7 +++++++
+ kernel/power/suspend.c   |    4 ++++
+ 3 files changed, 12 insertions(+)
+
+--- a/include/linux/kernel.h
++++ b/include/linux/kernel.h
+@@ -488,6 +488,7 @@ extern enum system_states {
+       SYSTEM_HALT,
+       SYSTEM_POWER_OFF,
+       SYSTEM_RESTART,
++      SYSTEM_SUSPEND,
+ } system_state;
+ #define TAINT_PROPRIETARY_MODULE      0
+--- a/kernel/power/hibernate.c
++++ b/kernel/power/hibernate.c
+@@ -286,6 +286,8 @@ static int create_image(int platform_mod
+       local_irq_disable();
++      system_state = SYSTEM_SUSPEND;
++
+       error = syscore_suspend();
+       if (error) {
+               printk(KERN_ERR "PM: Some system devices failed to power down, "
+@@ -317,6 +319,7 @@ static int create_image(int platform_mod
+       syscore_resume();
+  Enable_irqs:
++      system_state = SYSTEM_RUNNING;
+       local_irq_enable();
+  Enable_cpus:
+@@ -446,6 +449,7 @@ static int resume_target_kernel(bool pla
+               goto Enable_cpus;
+       local_irq_disable();
++      system_state = SYSTEM_SUSPEND;
+       error = syscore_suspend();
+       if (error)
+@@ -479,6 +483,7 @@ static int resume_target_kernel(bool pla
+       syscore_resume();
+  Enable_irqs:
++      system_state = SYSTEM_RUNNING;
+       local_irq_enable();
+  Enable_cpus:
+@@ -564,6 +569,7 @@ int hibernation_platform_enter(void)
+               goto Enable_cpus;
+       local_irq_disable();
++      system_state = SYSTEM_SUSPEND;
+       syscore_suspend();
+       if (pm_wakeup_pending()) {
+               error = -EAGAIN;
+@@ -576,6 +582,7 @@ int hibernation_platform_enter(void)
+  Power_up:
+       syscore_resume();
++      system_state = SYSTEM_RUNNING;
+       local_irq_enable();
+  Enable_cpus:
+--- a/kernel/power/suspend.c
++++ b/kernel/power/suspend.c
+@@ -369,6 +369,8 @@ static int suspend_enter(suspend_state_t
+       arch_suspend_disable_irqs();
+       BUG_ON(!irqs_disabled());
++      system_state = SYSTEM_SUSPEND;
++
+       error = syscore_suspend();
+       if (!error) {
+               *wakeup = pm_wakeup_pending();
+@@ -385,6 +387,8 @@ static int suspend_enter(suspend_state_t
+               syscore_resume();
+       }
++      system_state = SYSTEM_RUNNING;
++
+       arch_suspend_enable_irqs();
+       BUG_ON(irqs_disabled());
diff --git a/patches/features/all/rt/sysfs-realtime-entry.patch b/patches/features/all/rt/sysfs-realtime-entry.patch
new file mode 100644 (file)
index 0000000..115b2fd
--- /dev/null
@@ -0,0 +1,48 @@
+Subject: sysfs: Add /sys/kernel/realtime entry
+From: Clark Williams <williams@redhat.com>
+Date: Sat Jul 30 21:55:53 2011 -0500
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Add a /sys/kernel entry to indicate that the kernel is a
+realtime kernel.
+
+Clark says that he needs this for udev rules, udev needs to evaluate
+if its a PREEMPT_RT kernel a few thousand times and parsing uname
+output is too slow or so.
+
+Are there better solutions? Should it exist and return 0 on !-rt?
+
+Signed-off-by: Clark Williams <williams@redhat.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+---
+ kernel/ksysfs.c |   12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- a/kernel/ksysfs.c
++++ b/kernel/ksysfs.c
+@@ -136,6 +136,15 @@ KERNEL_ATTR_RO(vmcoreinfo);
+ #endif /* CONFIG_KEXEC_CORE */
++#if defined(CONFIG_PREEMPT_RT_FULL)
++static ssize_t  realtime_show(struct kobject *kobj,
++                            struct kobj_attribute *attr, char *buf)
++{
++      return sprintf(buf, "%d\n", 1);
++}
++KERNEL_ATTR_RO(realtime);
++#endif
++
+ /* whether file capabilities are enabled */
+ static ssize_t fscaps_show(struct kobject *kobj,
+                                 struct kobj_attribute *attr, char *buf)
+@@ -225,6 +234,9 @@ static struct attribute * kernel_attrs[]
+       &rcu_expedited_attr.attr,
+       &rcu_normal_attr.attr,
+ #endif
++#ifdef CONFIG_PREEMPT_RT_FULL
++      &realtime_attr.attr,
++#endif
+       NULL
+ };
diff --git a/patches/features/all/rt/tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch b/patches/features/all/rt/tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch
new file mode 100644 (file)
index 0000000..f5192a2
--- /dev/null
@@ -0,0 +1,392 @@
+Subject: tasklet: Prevent tasklets from going into infinite spin in RT
+From: Ingo Molnar <mingo@elte.hu>
+Date: Tue Nov 29 20:18:22 2011 -0500
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When CONFIG_PREEMPT_RT_FULL is enabled, tasklets run as threads,
+and spinlocks turn are mutexes. But this can cause issues with
+tasks disabling tasklets. A tasklet runs under ksoftirqd, and
+if a tasklets are disabled with tasklet_disable(), the tasklet
+count is increased. When a tasklet runs, it checks this counter
+and if it is set, it adds itself back on the softirq queue and
+returns.
+    
+The problem arises in RT because ksoftirq will see that a softirq
+is ready to run (the tasklet softirq just re-armed itself), and will
+not sleep, but instead run the softirqs again. The tasklet softirq
+will still see that the count is non-zero and will not execute
+the tasklet and requeue itself on the softirq again, which will
+cause ksoftirqd to run it again and again and again.
+    
+It gets worse because ksoftirqd runs as a real-time thread.
+If it preempted the task that disabled tasklets, and that task
+has migration disabled, or can't run for other reasons, the tasklet
+softirq will never run because the count will never be zero, and
+ksoftirqd will go into an infinite loop. As an RT task, it this
+becomes a big problem.
+    
+This is a hack solution to have tasklet_disable stop tasklets, and
+when a tasklet runs, instead of requeueing the tasklet softirqd
+it delays it. When tasklet_enable() is called, and tasklets are
+waiting, then the tasklet_enable() will kick the tasklets to continue.
+This prevents the lock up from ksoftirq going into an infinite loop.
+
+[ rostedt@goodmis.org: ported to 3.0-rt ]
+    
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/interrupt.h |   33 ++++---
+ kernel/softirq.c          |  201 ++++++++++++++++++++++++++++++++--------------
+ 2 files changed, 162 insertions(+), 72 deletions(-)
+
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -508,8 +508,9 @@ static inline struct task_struct *this_c
+      to be executed on some cpu at least once after this.
+    * If the tasklet is already scheduled, but its execution is still not
+      started, it will be executed only once.
+-   * If this tasklet is already running on another CPU (or schedule is called
+-     from tasklet itself), it is rescheduled for later.
++   * If this tasklet is already running on another CPU, it is rescheduled
++     for later.
++   * Schedule must not be called from the tasklet itself (a lockup occurs)
+    * Tasklet is strictly serialized wrt itself, but not
+      wrt another tasklets. If client needs some intertask synchronization,
+      he makes it with spinlocks.
+@@ -534,27 +535,36 @@ struct tasklet_struct name = { NULL, 0,
+ enum
+ {
+       TASKLET_STATE_SCHED,    /* Tasklet is scheduled for execution */
+-      TASKLET_STATE_RUN       /* Tasklet is running (SMP only) */
++      TASKLET_STATE_RUN,      /* Tasklet is running (SMP only) */
++      TASKLET_STATE_PENDING   /* Tasklet is pending */
+ };
+-#ifdef CONFIG_SMP
++#define TASKLET_STATEF_SCHED  (1 << TASKLET_STATE_SCHED)
++#define TASKLET_STATEF_RUN    (1 << TASKLET_STATE_RUN)
++#define TASKLET_STATEF_PENDING        (1 << TASKLET_STATE_PENDING)
++
++#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT_FULL)
+ static inline int tasklet_trylock(struct tasklet_struct *t)
+ {
+       return !test_and_set_bit(TASKLET_STATE_RUN, &(t)->state);
+ }
++static inline int tasklet_tryunlock(struct tasklet_struct *t)
++{
++      return cmpxchg(&t->state, TASKLET_STATEF_RUN, 0) == TASKLET_STATEF_RUN;
++}
++
+ static inline void tasklet_unlock(struct tasklet_struct *t)
+ {
+       smp_mb__before_atomic();
+       clear_bit(TASKLET_STATE_RUN, &(t)->state);
+ }
+-static inline void tasklet_unlock_wait(struct tasklet_struct *t)
+-{
+-      while (test_bit(TASKLET_STATE_RUN, &(t)->state)) { barrier(); }
+-}
++extern void tasklet_unlock_wait(struct tasklet_struct *t);
++
+ #else
+ #define tasklet_trylock(t) 1
++#define tasklet_tryunlock(t)  1
+ #define tasklet_unlock_wait(t) do { } while (0)
+ #define tasklet_unlock(t) do { } while (0)
+ #endif
+@@ -603,12 +613,7 @@ static inline void tasklet_disable(struc
+       smp_mb();
+ }
+-static inline void tasklet_enable(struct tasklet_struct *t)
+-{
+-      smp_mb__before_atomic();
+-      atomic_dec(&t->count);
+-}
+-
++extern void tasklet_enable(struct tasklet_struct *t);
+ extern void tasklet_kill(struct tasklet_struct *t);
+ extern void tasklet_kill_immediate(struct tasklet_struct *t, unsigned int cpu);
+ extern void tasklet_init(struct tasklet_struct *t,
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -21,6 +21,7 @@
+ #include <linux/freezer.h>
+ #include <linux/kthread.h>
+ #include <linux/rcupdate.h>
++#include <linux/delay.h>
+ #include <linux/ftrace.h>
+ #include <linux/smp.h>
+ #include <linux/smpboot.h>
+@@ -460,15 +461,45 @@ struct tasklet_head {
+ static DEFINE_PER_CPU(struct tasklet_head, tasklet_vec);
+ static DEFINE_PER_CPU(struct tasklet_head, tasklet_hi_vec);
++static void inline
++__tasklet_common_schedule(struct tasklet_struct *t, struct tasklet_head *head, unsigned int nr)
++{
++      if (tasklet_trylock(t)) {
++again:
++              /* We may have been preempted before tasklet_trylock
++               * and __tasklet_action may have already run.
++               * So double check the sched bit while the takslet
++               * is locked before adding it to the list.
++               */
++              if (test_bit(TASKLET_STATE_SCHED, &t->state)) {
++                      t->next = NULL;
++                      *head->tail = t;
++                      head->tail = &(t->next);
++                      raise_softirq_irqoff(nr);
++                      tasklet_unlock(t);
++              } else {
++                      /* This is subtle. If we hit the corner case above
++                       * It is possible that we get preempted right here,
++                       * and another task has successfully called
++                       * tasklet_schedule(), then this function, and
++                       * failed on the trylock. Thus we must be sure
++                       * before releasing the tasklet lock, that the
++                       * SCHED_BIT is clear. Otherwise the tasklet
++                       * may get its SCHED_BIT set, but not added to the
++                       * list
++                       */
++                      if (!tasklet_tryunlock(t))
++                              goto again;
++              }
++      }
++}
++
+ void __tasklet_schedule(struct tasklet_struct *t)
+ {
+       unsigned long flags;
+       local_irq_save(flags);
+-      t->next = NULL;
+-      *__this_cpu_read(tasklet_vec.tail) = t;
+-      __this_cpu_write(tasklet_vec.tail, &(t->next));
+-      raise_softirq_irqoff(TASKLET_SOFTIRQ);
++      __tasklet_common_schedule(t, this_cpu_ptr(&tasklet_vec), TASKLET_SOFTIRQ);
+       local_irq_restore(flags);
+ }
+ EXPORT_SYMBOL(__tasklet_schedule);
+@@ -478,10 +509,7 @@ void __tasklet_hi_schedule(struct taskle
+       unsigned long flags;
+       local_irq_save(flags);
+-      t->next = NULL;
+-      *__this_cpu_read(tasklet_hi_vec.tail) = t;
+-      __this_cpu_write(tasklet_hi_vec.tail,  &(t->next));
+-      raise_softirq_irqoff(HI_SOFTIRQ);
++      __tasklet_common_schedule(t, this_cpu_ptr(&tasklet_hi_vec), HI_SOFTIRQ);
+       local_irq_restore(flags);
+ }
+ EXPORT_SYMBOL(__tasklet_hi_schedule);
+@@ -490,82 +518,122 @@ void __tasklet_hi_schedule_first(struct
+ {
+       BUG_ON(!irqs_disabled());
+-      t->next = __this_cpu_read(tasklet_hi_vec.head);
+-      __this_cpu_write(tasklet_hi_vec.head, t);
+-      __raise_softirq_irqoff(HI_SOFTIRQ);
++      __tasklet_hi_schedule(t);
+ }
+ EXPORT_SYMBOL(__tasklet_hi_schedule_first);
+-static __latent_entropy void tasklet_action(struct softirq_action *a)
++void  tasklet_enable(struct tasklet_struct *t)
+ {
+-      struct tasklet_struct *list;
++      if (!atomic_dec_and_test(&t->count))
++              return;
++      if (test_and_clear_bit(TASKLET_STATE_PENDING, &t->state))
++              tasklet_schedule(t);
++}
++EXPORT_SYMBOL(tasklet_enable);
+-      local_irq_disable();
+-      list = __this_cpu_read(tasklet_vec.head);
+-      __this_cpu_write(tasklet_vec.head, NULL);
+-      __this_cpu_write(tasklet_vec.tail, this_cpu_ptr(&tasklet_vec.head));
+-      local_irq_enable();
++static void __tasklet_action(struct softirq_action *a,
++                           struct tasklet_struct *list)
++{
++      int loops = 1000000;
+       while (list) {
+               struct tasklet_struct *t = list;
+               list = list->next;
+-              if (tasklet_trylock(t)) {
+-                      if (!atomic_read(&t->count)) {
+-                              if (!test_and_clear_bit(TASKLET_STATE_SCHED,
+-                                                      &t->state))
+-                                      BUG();
+-                              t->func(t->data);
+-                              tasklet_unlock(t);
+-                              continue;
+-                      }
+-                      tasklet_unlock(t);
++              /*
++               * Should always succeed - after a tasklist got on the
++               * list (after getting the SCHED bit set from 0 to 1),
++               * nothing but the tasklet softirq it got queued to can
++               * lock it:
++               */
++              if (!tasklet_trylock(t)) {
++                      WARN_ON(1);
++                      continue;
+               }
+-              local_irq_disable();
+               t->next = NULL;
+-              *__this_cpu_read(tasklet_vec.tail) = t;
+-              __this_cpu_write(tasklet_vec.tail, &(t->next));
+-              __raise_softirq_irqoff(TASKLET_SOFTIRQ);
+-              local_irq_enable();
++
++              /*
++               * If we cannot handle the tasklet because it's disabled,
++               * mark it as pending. tasklet_enable() will later
++               * re-schedule the tasklet.
++               */
++              if (unlikely(atomic_read(&t->count))) {
++out_disabled:
++                      /* implicit unlock: */
++                      wmb();
++                      t->state = TASKLET_STATEF_PENDING;
++                      continue;
++              }
++
++              /*
++               * After this point on the tasklet might be rescheduled
++               * on another CPU, but it can only be added to another
++               * CPU's tasklet list if we unlock the tasklet (which we
++               * dont do yet).
++               */
++              if (!test_and_clear_bit(TASKLET_STATE_SCHED, &t->state))
++                      WARN_ON(1);
++
++again:
++              t->func(t->data);
++
++              /*
++               * Try to unlock the tasklet. We must use cmpxchg, because
++               * another CPU might have scheduled or disabled the tasklet.
++               * We only allow the STATE_RUN -> 0 transition here.
++               */
++              while (!tasklet_tryunlock(t)) {
++                      /*
++                       * If it got disabled meanwhile, bail out:
++                       */
++                      if (atomic_read(&t->count))
++                              goto out_disabled;
++                      /*
++                       * If it got scheduled meanwhile, re-execute
++                       * the tasklet function:
++                       */
++                      if (test_and_clear_bit(TASKLET_STATE_SCHED, &t->state))
++                              goto again;
++                      if (!--loops) {
++                              printk("hm, tasklet state: %08lx\n", t->state);
++                              WARN_ON(1);
++                              tasklet_unlock(t);
++                              break;
++                      }
++              }
+       }
+ }
++static void tasklet_action(struct softirq_action *a)
++{
++      struct tasklet_struct *list;
++
++      local_irq_disable();
++
++      list = __this_cpu_read(tasklet_vec.head);
++      __this_cpu_write(tasklet_vec.head, NULL);
++      __this_cpu_write(tasklet_vec.tail, this_cpu_ptr(&tasklet_vec.head));
++
++      local_irq_enable();
++
++      __tasklet_action(a, list);
++}
++
+ static __latent_entropy void tasklet_hi_action(struct softirq_action *a)
+ {
+       struct tasklet_struct *list;
+       local_irq_disable();
++
+       list = __this_cpu_read(tasklet_hi_vec.head);
+       __this_cpu_write(tasklet_hi_vec.head, NULL);
+       __this_cpu_write(tasklet_hi_vec.tail, this_cpu_ptr(&tasklet_hi_vec.head));
+-      local_irq_enable();
+-
+-      while (list) {
+-              struct tasklet_struct *t = list;
+-              list = list->next;
+-
+-              if (tasklet_trylock(t)) {
+-                      if (!atomic_read(&t->count)) {
+-                              if (!test_and_clear_bit(TASKLET_STATE_SCHED,
+-                                                      &t->state))
+-                                      BUG();
+-                              t->func(t->data);
+-                              tasklet_unlock(t);
+-                              continue;
+-                      }
+-                      tasklet_unlock(t);
+-              }
++      local_irq_enable();
+-              local_irq_disable();
+-              t->next = NULL;
+-              *__this_cpu_read(tasklet_hi_vec.tail) = t;
+-              __this_cpu_write(tasklet_hi_vec.tail, &(t->next));
+-              __raise_softirq_irqoff(HI_SOFTIRQ);
+-              local_irq_enable();
+-      }
++      __tasklet_action(a, list);
+ }
+ void tasklet_init(struct tasklet_struct *t,
+@@ -586,7 +654,7 @@ void tasklet_kill(struct tasklet_struct
+       while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) {
+               do {
+-                      yield();
++                      msleep(1);
+               } while (test_bit(TASKLET_STATE_SCHED, &t->state));
+       }
+       tasklet_unlock_wait(t);
+@@ -660,6 +728,23 @@ void __init softirq_init(void)
+       open_softirq(HI_SOFTIRQ, tasklet_hi_action);
+ }
++#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT_FULL)
++void tasklet_unlock_wait(struct tasklet_struct *t)
++{
++      while (test_bit(TASKLET_STATE_RUN, &(t)->state)) {
++              /*
++               * Hack for now to avoid this busy-loop:
++               */
++#ifdef CONFIG_PREEMPT_RT_FULL
++              msleep(1);
++#else
++              barrier();
++#endif
++      }
++}
++EXPORT_SYMBOL(tasklet_unlock_wait);
++#endif
++
+ static int ksoftirqd_should_run(unsigned int cpu)
+ {
+       return local_softirq_pending();
diff --git a/patches/features/all/rt/thermal-Defer-thermal-wakups-to-threads.patch b/patches/features/all/rt/thermal-Defer-thermal-wakups-to-threads.patch
new file mode 100644 (file)
index 0000000..3ce54fd
--- /dev/null
@@ -0,0 +1,133 @@
+From: Daniel Wagner <wagi@monom.org>
+Date: Tue, 17 Feb 2015 09:37:44 +0100
+Subject: thermal: Defer thermal wakups to threads
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+On RT the spin lock in pkg_temp_thermal_platfrom_thermal_notify will
+call schedule while we run in irq context.
+
+[<ffffffff816850ac>] dump_stack+0x4e/0x8f
+[<ffffffff81680f7d>] __schedule_bug+0xa6/0xb4
+[<ffffffff816896b4>] __schedule+0x5b4/0x700
+[<ffffffff8168982a>] schedule+0x2a/0x90
+[<ffffffff8168a8b5>] rt_spin_lock_slowlock+0xe5/0x2d0
+[<ffffffff8168afd5>] rt_spin_lock+0x25/0x30
+[<ffffffffa03a7b75>] pkg_temp_thermal_platform_thermal_notify+0x45/0x134 [x86_pkg_temp_thermal]
+[<ffffffff8103d4db>] ? therm_throt_process+0x1b/0x160
+[<ffffffff8103d831>] intel_thermal_interrupt+0x211/0x250
+[<ffffffff8103d8c1>] smp_thermal_interrupt+0x21/0x40
+[<ffffffff8169415d>] thermal_interrupt+0x6d/0x80
+
+Let's defer the work to a kthread.
+
+Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
+[bigeasy: reoder init/denit position. TODO: flush swork on exit]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/thermal/x86_pkg_temp_thermal.c |   50 +++++++++++++++++++++++++++++++--
+ 1 file changed, 47 insertions(+), 3 deletions(-)
+
+--- a/drivers/thermal/x86_pkg_temp_thermal.c
++++ b/drivers/thermal/x86_pkg_temp_thermal.c
+@@ -29,6 +29,7 @@
+ #include <linux/pm.h>
+ #include <linux/thermal.h>
+ #include <linux/debugfs.h>
++#include <linux/swork.h>
+ #include <asm/cpu_device_id.h>
+ #include <asm/mce.h>
+@@ -353,7 +354,7 @@ static void pkg_temp_thermal_threshold_w
+       }
+ }
+-static int pkg_temp_thermal_platform_thermal_notify(__u64 msr_val)
++static void platform_thermal_notify_work(struct swork_event *event)
+ {
+       unsigned long flags;
+       int cpu = smp_processor_id();
+@@ -370,7 +371,7 @@ static int pkg_temp_thermal_platform_the
+                       pkg_work_scheduled[phy_id]) {
+               disable_pkg_thres_interrupt();
+               spin_unlock_irqrestore(&pkg_work_lock, flags);
+-              return -EINVAL;
++              return;
+       }
+       pkg_work_scheduled[phy_id] = 1;
+       spin_unlock_irqrestore(&pkg_work_lock, flags);
+@@ -379,9 +380,48 @@ static int pkg_temp_thermal_platform_the
+       schedule_delayed_work_on(cpu,
+                               &per_cpu(pkg_temp_thermal_threshold_work, cpu),
+                               msecs_to_jiffies(notify_delay_ms));
++}
++
++#ifdef CONFIG_PREEMPT_RT_FULL
++static struct swork_event notify_work;
++
++static int thermal_notify_work_init(void)
++{
++      int err;
++
++      err = swork_get();
++      if (err)
++              return err;
++
++      INIT_SWORK(&notify_work, platform_thermal_notify_work);
+       return 0;
+ }
++static void thermal_notify_work_cleanup(void)
++{
++      swork_put();
++}
++
++static int pkg_temp_thermal_platform_thermal_notify(__u64 msr_val)
++{
++      swork_queue(&notify_work);
++      return 0;
++}
++
++#else  /* !CONFIG_PREEMPT_RT_FULL */
++
++static int thermal_notify_work_init(void) { return 0; }
++
++static void thermal_notify_work_cleanup(void) {  }
++
++static int pkg_temp_thermal_platform_thermal_notify(__u64 msr_val)
++{
++      platform_thermal_notify_work(NULL);
++
++      return 0;
++}
++#endif /* CONFIG_PREEMPT_RT_FULL */
++
+ static int find_siblings_cpu(int cpu)
+ {
+       int i;
+@@ -585,6 +625,9 @@ static int __init pkg_temp_thermal_init(
+       if (!x86_match_cpu(pkg_temp_thermal_ids))
+               return -ENODEV;
++      if (!thermal_notify_work_init())
++              return -ENODEV;
++
+       spin_lock_init(&pkg_work_lock);
+       platform_thermal_package_notify =
+                       pkg_temp_thermal_platform_thermal_notify;
+@@ -609,7 +652,7 @@ static int __init pkg_temp_thermal_init(
+       kfree(pkg_work_scheduled);
+       platform_thermal_package_notify = NULL;
+       platform_thermal_package_rate_control = NULL;
+-
++      thermal_notify_work_cleanup();
+       return -ENODEV;
+ }
+@@ -634,6 +677,7 @@ static void __exit pkg_temp_thermal_exit
+       mutex_unlock(&phy_dev_list_mutex);
+       platform_thermal_package_notify = NULL;
+       platform_thermal_package_rate_control = NULL;
++      thermal_notify_work_cleanup();
+       for_each_online_cpu(i)
+               cancel_delayed_work_sync(
+                       &per_cpu(pkg_temp_thermal_threshold_work, i));
diff --git a/patches/features/all/rt/tick-broadcast--Make-hrtimer-irqsafe.patch b/patches/features/all/rt/tick-broadcast--Make-hrtimer-irqsafe.patch
new file mode 100644 (file)
index 0000000..04840ed
--- /dev/null
@@ -0,0 +1,58 @@
+Subject: tick/broadcast: Make broadcast hrtimer irqsafe
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 27 Feb 2016 10:47:10 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Otherwise we end up with the following:
+
+|=================================
+|[ INFO: inconsistent lock state ]
+|4.4.2-rt7+ #5 Not tainted
+|---------------------------------
+|inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.
+|ktimersoftd/0/4 [HC0[0]:SC0[0]:HE1:SE1] takes:
+| (tick_broadcast_lock){?.....}, at: [<ffffffc000150db4>] tick_handle_oneshot_broadcast+0x58/0x27c
+|{IN-HARDIRQ-W} state was registered at:
+|  [<ffffffc000118198>] mark_lock+0x19c/0x6a0
+|  [<ffffffc000119728>] __lock_acquire+0xb1c/0x2100
+|  [<ffffffc00011b560>] lock_acquire+0xf8/0x230
+|  [<ffffffc00061bf08>] _raw_spin_lock_irqsave+0x50/0x68
+|  [<ffffffc000152188>] tick_broadcast_switch_to_oneshot+0x20/0x60
+|  [<ffffffc0001529f4>] tick_switch_to_oneshot+0x64/0xd8
+|  [<ffffffc000152b00>] tick_init_highres+0x1c/0x24
+|  [<ffffffc000141e58>] hrtimer_run_queues+0x78/0x100
+|  [<ffffffc00013f804>] update_process_times+0x38/0x74
+|  [<ffffffc00014fc5c>] tick_periodic+0x60/0x140
+|  [<ffffffc00014fd68>] tick_handle_periodic+0x2c/0x94
+|  [<ffffffc00052b878>] arch_timer_handler_phys+0x3c/0x48
+|  [<ffffffc00012d078>] handle_percpu_devid_irq+0x100/0x390
+|  [<ffffffc000127f34>] generic_handle_irq+0x34/0x4c
+|  [<ffffffc000128300>] __handle_domain_irq+0x90/0xf8
+|  [<ffffffc000082554>] gic_handle_irq+0x5c/0xa4
+|  [<ffffffc0000855ac>] el1_irq+0x6c/0xec
+|  [<ffffffc000112bec>] default_idle_call+0x2c/0x44
+|  [<ffffffc000113058>] cpu_startup_entry+0x3cc/0x410
+|  [<ffffffc0006169f8>] rest_init+0x158/0x168
+|  [<ffffffc000888954>] start_kernel+0x3a0/0x3b4
+|  [<0000000080621000>] 0x80621000
+|irq event stamp: 18723
+|hardirqs last  enabled at (18723): [<ffffffc00061c188>] _raw_spin_unlock_irq+0x38/0x80
+|hardirqs last disabled at (18722): [<ffffffc000140a4c>] run_hrtimer_softirq+0x2c/0x2f4
+|softirqs last  enabled at (0): [<ffffffc0000c4744>] copy_process.isra.50+0x300/0x16d4
+|softirqs last disabled at (0): [<          (null)>]           (null)
+
+Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/time/tick-broadcast-hrtimer.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/kernel/time/tick-broadcast-hrtimer.c
++++ b/kernel/time/tick-broadcast-hrtimer.c
+@@ -107,5 +107,6 @@ void tick_setup_hrtimer_broadcast(void)
+ {
+       hrtimer_init(&bctimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
+       bctimer.function = bc_handler;
++      bctimer.irqsafe = true;
+       clockevents_register_device(&ce_broadcast_hrtimer);
+ }
diff --git a/patches/features/all/rt/timekeeping-split-jiffies-lock.patch b/patches/features/all/rt/timekeeping-split-jiffies-lock.patch
new file mode 100644 (file)
index 0000000..35cd247
--- /dev/null
@@ -0,0 +1,157 @@
+Subject: timekeeping: Split jiffies seqlock
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 14 Feb 2013 22:36:59 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Replace jiffies_lock seqlock with a simple seqcounter and a rawlock so
+it can be taken in atomic context on RT.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/time/jiffies.c     |    7 ++++---
+ kernel/time/tick-common.c |   10 ++++++----
+ kernel/time/tick-sched.c  |   19 ++++++++++++-------
+ kernel/time/timekeeping.c |    6 ++++--
+ kernel/time/timekeeping.h |    3 ++-
+ 5 files changed, 28 insertions(+), 17 deletions(-)
+
+--- a/kernel/time/jiffies.c
++++ b/kernel/time/jiffies.c
+@@ -74,7 +74,8 @@ static struct clocksource clocksource_ji
+       .max_cycles     = 10,
+ };
+-__cacheline_aligned_in_smp DEFINE_SEQLOCK(jiffies_lock);
++__cacheline_aligned_in_smp DEFINE_RAW_SPINLOCK(jiffies_lock);
++__cacheline_aligned_in_smp seqcount_t jiffies_seq;
+ #if (BITS_PER_LONG < 64)
+ u64 get_jiffies_64(void)
+@@ -83,9 +84,9 @@ u64 get_jiffies_64(void)
+       u64 ret;
+       do {
+-              seq = read_seqbegin(&jiffies_lock);
++              seq = read_seqcount_begin(&jiffies_seq);
+               ret = jiffies_64;
+-      } while (read_seqretry(&jiffies_lock, seq));
++      } while (read_seqcount_retry(&jiffies_seq, seq));
+       return ret;
+ }
+ EXPORT_SYMBOL(get_jiffies_64);
+--- a/kernel/time/tick-common.c
++++ b/kernel/time/tick-common.c
+@@ -79,13 +79,15 @@ int tick_is_oneshot_available(void)
+ static void tick_periodic(int cpu)
+ {
+       if (tick_do_timer_cpu == cpu) {
+-              write_seqlock(&jiffies_lock);
++              raw_spin_lock(&jiffies_lock);
++              write_seqcount_begin(&jiffies_seq);
+               /* Keep track of the next tick event */
+               tick_next_period = ktime_add(tick_next_period, tick_period);
+               do_timer(1);
+-              write_sequnlock(&jiffies_lock);
++              write_seqcount_end(&jiffies_seq);
++              raw_spin_unlock(&jiffies_lock);
+               update_wall_time();
+       }
+@@ -157,9 +159,9 @@ void tick_setup_periodic(struct clock_ev
+               ktime_t next;
+               do {
+-                      seq = read_seqbegin(&jiffies_lock);
++                      seq = read_seqcount_begin(&jiffies_seq);
+                       next = tick_next_period;
+-              } while (read_seqretry(&jiffies_lock, seq));
++              } while (read_seqcount_retry(&jiffies_seq, seq));
+               clockevents_switch_state(dev, CLOCK_EVT_STATE_ONESHOT);
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -62,7 +62,8 @@ static void tick_do_update_jiffies64(kti
+               return;
+       /* Reevaluate with jiffies_lock held */
+-      write_seqlock(&jiffies_lock);
++      raw_spin_lock(&jiffies_lock);
++      write_seqcount_begin(&jiffies_seq);
+       delta = ktime_sub(now, last_jiffies_update);
+       if (delta.tv64 >= tick_period.tv64) {
+@@ -85,10 +86,12 @@ static void tick_do_update_jiffies64(kti
+               /* Keep the tick_next_period variable up to date */
+               tick_next_period = ktime_add(last_jiffies_update, tick_period);
+       } else {
+-              write_sequnlock(&jiffies_lock);
++              write_seqcount_end(&jiffies_seq);
++              raw_spin_unlock(&jiffies_lock);
+               return;
+       }
+-      write_sequnlock(&jiffies_lock);
++      write_seqcount_end(&jiffies_seq);
++      raw_spin_unlock(&jiffies_lock);
+       update_wall_time();
+ }
+@@ -99,12 +102,14 @@ static ktime_t tick_init_jiffy_update(vo
+ {
+       ktime_t period;
+-      write_seqlock(&jiffies_lock);
++      raw_spin_lock(&jiffies_lock);
++      write_seqcount_begin(&jiffies_seq);
+       /* Did we start the jiffies update yet ? */
+       if (last_jiffies_update.tv64 == 0)
+               last_jiffies_update = tick_next_period;
+       period = last_jiffies_update;
+-      write_sequnlock(&jiffies_lock);
++      write_seqcount_end(&jiffies_seq);
++      raw_spin_unlock(&jiffies_lock);
+       return period;
+ }
+@@ -673,10 +678,10 @@ static ktime_t tick_nohz_stop_sched_tick
+       /* Read jiffies and the time when jiffies were updated last */
+       do {
+-              seq = read_seqbegin(&jiffies_lock);
++              seq = read_seqcount_begin(&jiffies_seq);
+               basemono = last_jiffies_update.tv64;
+               basejiff = jiffies;
+-      } while (read_seqretry(&jiffies_lock, seq));
++      } while (read_seqcount_retry(&jiffies_seq, seq));
+       ts->last_jiffies = basejiff;
+       if (rcu_needs_cpu(basemono, &next_rcu) ||
+--- a/kernel/time/timekeeping.c
++++ b/kernel/time/timekeeping.c
+@@ -2328,8 +2328,10 @@ EXPORT_SYMBOL(hardpps);
+  */
+ void xtime_update(unsigned long ticks)
+ {
+-      write_seqlock(&jiffies_lock);
++      raw_spin_lock(&jiffies_lock);
++      write_seqcount_begin(&jiffies_seq);
+       do_timer(ticks);
+-      write_sequnlock(&jiffies_lock);
++      write_seqcount_end(&jiffies_seq);
++      raw_spin_unlock(&jiffies_lock);
+       update_wall_time();
+ }
+--- a/kernel/time/timekeeping.h
++++ b/kernel/time/timekeeping.h
+@@ -19,7 +19,8 @@ extern void timekeeping_resume(void);
+ extern void do_timer(unsigned long ticks);
+ extern void update_wall_time(void);
+-extern seqlock_t jiffies_lock;
++extern raw_spinlock_t jiffies_lock;
++extern seqcount_t jiffies_seq;
+ #define CS_NAME_LEN   32
diff --git a/patches/features/all/rt/timer-delay-waking-softirqs-from-the-jiffy-tick.patch b/patches/features/all/rt/timer-delay-waking-softirqs-from-the-jiffy-tick.patch
new file mode 100644 (file)
index 0000000..f7f2d9b
--- /dev/null
@@ -0,0 +1,76 @@
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Fri, 21 Aug 2009 11:56:45 +0200
+Subject: timer: delay waking softirqs from the jiffy tick
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+People were complaining about broken balancing with the recent -rt
+series.
+
+A look at /proc/sched_debug yielded:
+
+cpu#0, 2393.874 MHz
+  .nr_running                    : 0
+  .load                          : 0
+  .cpu_load[0]                   : 177522
+  .cpu_load[1]                   : 177522
+  .cpu_load[2]                   : 177522
+  .cpu_load[3]                   : 177522
+  .cpu_load[4]                   : 177522
+cpu#1, 2393.874 MHz
+  .nr_running                    : 4
+  .load                          : 4096
+  .cpu_load[0]                   : 181618
+  .cpu_load[1]                   : 180850
+  .cpu_load[2]                   : 180274
+  .cpu_load[3]                   : 179938
+  .cpu_load[4]                   : 179758
+
+Which indicated the cpu_load computation was hosed, the 177522 value
+indicates that there is one RT task runnable. Initially I thought the
+old problem of calculating the cpu_load from a softirq had re-surfaced,
+however looking at the code shows its being done from scheduler_tick().
+
+[ we really should fix this RT/cfs interaction some day... ]
+
+A few trace_printk()s later:
+
+    sirq-timer/1-19    [001]   174.289744:     19: 50:S ==> [001]     0:140:R <idle>
+          <idle>-0     [001]   174.290724: enqueue_task_rt: adding task: 19/sirq-timer/1 with load: 177522
+          <idle>-0     [001]   174.290725:      0:140:R   + [001]    19: 50:S sirq-timer/1
+          <idle>-0     [001]   174.290730: scheduler_tick: current load: 177522
+          <idle>-0     [001]   174.290732: scheduler_tick: current: 0/swapper
+          <idle>-0     [001]   174.290736:      0:140:R ==> [001]    19: 50:R sirq-timer/1
+    sirq-timer/1-19    [001]   174.290741: dequeue_task_rt: removing task: 19/sirq-timer/1 with load: 177522
+    sirq-timer/1-19    [001]   174.290743:     19: 50:S ==> [001]     0:140:R <idle>
+
+We see that we always raise the timer softirq before doing the load
+calculation. Avoid this by re-ordering the scheduler_tick() call in
+update_process_times() to occur before we deal with timers.
+
+This lowers the load back to sanity and restores regular load-balancing
+behaviour.
+
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ kernel/time/timer.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -1641,13 +1641,13 @@ void update_process_times(int user_tick)
+       /* Note: this timer irq context must be accounted for as well. */
+       account_process_tick(p, user_tick);
++      scheduler_tick();
+       run_local_timers();
+       rcu_check_callbacks(user_tick);
+ #ifdef CONFIG_IRQ_WORK
+       if (in_irq())
+               irq_work_tick();
+ #endif
+-      scheduler_tick();
+       run_posix_cpu_timers(p);
+ }
diff --git a/patches/features/all/rt/timer-fd-avoid-live-lock.patch b/patches/features/all/rt/timer-fd-avoid-live-lock.patch
new file mode 100644 (file)
index 0000000..03b71ef
--- /dev/null
@@ -0,0 +1,31 @@
+Subject: timer-fd: Prevent live lock
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 25 Jan 2012 11:08:40 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+If hrtimer_try_to_cancel() requires a retry, then depending on the
+priority setting te retry loop might prevent timer callback completion
+on RT. Prevent that by waiting for completion on RT, no change for a
+non RT kernel.
+
+Reported-by: Sankara Muthukrishnan <sankara.m@gmail.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ fs/timerfd.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/fs/timerfd.c
++++ b/fs/timerfd.c
+@@ -460,7 +460,10 @@ static int do_timerfd_settime(int ufd, i
+                               break;
+               }
+               spin_unlock_irq(&ctx->wqh.lock);
+-              cpu_relax();
++              if (isalarm(ctx))
++                      hrtimer_wait_for_timer(&ctx->t.alarm.timer);
++              else
++                      hrtimer_wait_for_timer(&ctx->t.tmr);
+       }
+       /*
diff --git a/patches/features/all/rt/timer-hrtimer-check-properly-for-a-running-timer.patch b/patches/features/all/rt/timer-hrtimer-check-properly-for-a-running-timer.patch
new file mode 100644 (file)
index 0000000..499fd8b
--- /dev/null
@@ -0,0 +1,34 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 1 Mar 2017 16:30:49 +0100
+Subject: [PATCH] timer/hrtimer: check properly for a running timer
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+hrtimer_callback_running() checks only whether a timmer is running on a
+CPU in hardirq-context. This is okay for !RT. For RT environment we move
+most timers to the timer-softirq and therefore we therefore need to
+check if the timer is running in the softirq context.
+
+Cc: stable-rt@vger.kernel.org
+Reported-by: Alexander Gerasiov <gq@cs.msu.su>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/hrtimer.h |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/include/linux/hrtimer.h
++++ b/include/linux/hrtimer.h
+@@ -455,7 +455,13 @@ static inline int hrtimer_is_queued(stru
+  */
+ static inline int hrtimer_callback_running(const struct hrtimer *timer)
+ {
+-      return timer->base->cpu_base->running == timer;
++      if (timer->base->cpu_base->running == timer)
++              return 1;
++#ifdef CONFIG_PREEMPT_RT_BASE
++      if (timer->base->cpu_base->running_soft == timer)
++              return 1;
++#endif
++      return 0;
+ }
+ /* Forward a hrtimer so it expires after now: */
diff --git a/patches/features/all/rt/timer-make-the-base-lock-raw.patch b/patches/features/all/rt/timer-make-the-base-lock-raw.patch
new file mode 100644 (file)
index 0000000..c993e64
--- /dev/null
@@ -0,0 +1,181 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 13 Jul 2016 18:22:23 +0200
+Subject: [PATCH] timer: make the base lock raw
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The part where the base lock is held got more predictable / shorter after the
+timer rework. One reason is the lack of re-cascading.
+That means the lock can be made raw and held in IRQ context.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/time/timer.c |   48 ++++++++++++++++++++++++------------------------
+ 1 file changed, 24 insertions(+), 24 deletions(-)
+
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -193,7 +193,7 @@ EXPORT_SYMBOL(jiffies_64);
+ #endif
+ struct timer_base {
+-      spinlock_t              lock;
++      raw_spinlock_t          lock;
+       struct timer_list       *running_timer;
+       unsigned long           clk;
+       unsigned long           next_expiry;
+@@ -948,10 +948,10 @@ static struct timer_base *lock_timer_bas
+               if (!(tf & TIMER_MIGRATING)) {
+                       base = get_timer_base(tf);
+-                      spin_lock_irqsave(&base->lock, *flags);
++                      raw_spin_lock_irqsave(&base->lock, *flags);
+                       if (timer->flags == tf)
+                               return base;
+-                      spin_unlock_irqrestore(&base->lock, *flags);
++                      raw_spin_unlock_irqrestore(&base->lock, *flags);
+               }
+               cpu_relax();
+       }
+@@ -1023,9 +1023,9 @@ static inline int
+                       /* See the comment in lock_timer_base() */
+                       timer->flags |= TIMER_MIGRATING;
+-                      spin_unlock(&base->lock);
++                      raw_spin_unlock(&base->lock);
+                       base = new_base;
+-                      spin_lock(&base->lock);
++                      raw_spin_lock(&base->lock);
+                       WRITE_ONCE(timer->flags,
+                                  (timer->flags & ~TIMER_BASEMASK) | base->cpu);
+               }
+@@ -1050,7 +1050,7 @@ static inline int
+       }
+ out_unlock:
+-      spin_unlock_irqrestore(&base->lock, flags);
++      raw_spin_unlock_irqrestore(&base->lock, flags);
+       return ret;
+ }
+@@ -1144,16 +1144,16 @@ void add_timer_on(struct timer_list *tim
+       if (base != new_base) {
+               timer->flags |= TIMER_MIGRATING;
+-              spin_unlock(&base->lock);
++              raw_spin_unlock(&base->lock);
+               base = new_base;
+-              spin_lock(&base->lock);
++              raw_spin_lock(&base->lock);
+               WRITE_ONCE(timer->flags,
+                          (timer->flags & ~TIMER_BASEMASK) | cpu);
+       }
+       debug_activate(timer, timer->expires);
+       internal_add_timer(base, timer);
+-      spin_unlock_irqrestore(&base->lock, flags);
++      raw_spin_unlock_irqrestore(&base->lock, flags);
+ }
+ EXPORT_SYMBOL_GPL(add_timer_on);
+@@ -1180,7 +1180,7 @@ int del_timer(struct timer_list *timer)
+       if (timer_pending(timer)) {
+               base = lock_timer_base(timer, &flags);
+               ret = detach_if_pending(timer, base, true);
+-              spin_unlock_irqrestore(&base->lock, flags);
++              raw_spin_unlock_irqrestore(&base->lock, flags);
+       }
+       return ret;
+@@ -1208,7 +1208,7 @@ int try_to_del_timer_sync(struct timer_l
+               timer_stats_timer_clear_start_info(timer);
+               ret = detach_if_pending(timer, base, true);
+       }
+-      spin_unlock_irqrestore(&base->lock, flags);
++      raw_spin_unlock_irqrestore(&base->lock, flags);
+       return ret;
+ }
+@@ -1340,13 +1340,13 @@ static void expire_timers(struct timer_b
+               data = timer->data;
+               if (timer->flags & TIMER_IRQSAFE) {
+-                      spin_unlock(&base->lock);
++                      raw_spin_unlock(&base->lock);
+                       call_timer_fn(timer, fn, data);
+-                      spin_lock(&base->lock);
++                      raw_spin_lock(&base->lock);
+               } else {
+-                      spin_unlock_irq(&base->lock);
++                      raw_spin_unlock_irq(&base->lock);
+                       call_timer_fn(timer, fn, data);
+-                      spin_lock_irq(&base->lock);
++                      raw_spin_lock_irq(&base->lock);
+               }
+       }
+ }
+@@ -1515,7 +1515,7 @@ u64 get_next_timer_interrupt(unsigned lo
+       if (cpu_is_offline(smp_processor_id()))
+               return expires;
+-      spin_lock(&base->lock);
++      raw_spin_lock(&base->lock);
+       nextevt = __next_timer_interrupt(base);
+       is_max_delta = (nextevt == base->clk + NEXT_TIMER_MAX_DELTA);
+       base->next_expiry = nextevt;
+@@ -1543,7 +1543,7 @@ u64 get_next_timer_interrupt(unsigned lo
+               if ((expires - basem) > TICK_NSEC)
+                       base->is_idle = true;
+       }
+-      spin_unlock(&base->lock);
++      raw_spin_unlock(&base->lock);
+       return cmp_next_hrtimer_event(basem, expires);
+ }
+@@ -1630,7 +1630,7 @@ static inline void __run_timers(struct t
+       if (!time_after_eq(jiffies, base->clk))
+               return;
+-      spin_lock_irq(&base->lock);
++      raw_spin_lock_irq(&base->lock);
+       while (time_after_eq(jiffies, base->clk)) {
+@@ -1641,7 +1641,7 @@ static inline void __run_timers(struct t
+                       expire_timers(base, heads + levels);
+       }
+       base->running_timer = NULL;
+-      spin_unlock_irq(&base->lock);
++      raw_spin_unlock_irq(&base->lock);
+ }
+ /*
+@@ -1836,16 +1836,16 @@ int timers_dead_cpu(unsigned int cpu)
+                * The caller is globally serialized and nobody else
+                * takes two locks at once, deadlock is not possible.
+                */
+-              spin_lock_irq(&new_base->lock);
+-              spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
++              raw_spin_lock_irq(&new_base->lock);
++              raw_spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
+               BUG_ON(old_base->running_timer);
+               for (i = 0; i < WHEEL_SIZE; i++)
+                       migrate_timer_list(new_base, old_base->vectors + i);
+-              spin_unlock(&old_base->lock);
+-              spin_unlock_irq(&new_base->lock);
++              raw_spin_unlock(&old_base->lock);
++              raw_spin_unlock_irq(&new_base->lock);
+               put_cpu_ptr(&timer_bases);
+       }
+       return 0;
+@@ -1861,7 +1861,7 @@ static void __init init_timer_cpu(int cp
+       for (i = 0; i < NR_BASES; i++) {
+               base = per_cpu_ptr(&timer_bases[i], cpu);
+               base->cpu = cpu;
+-              spin_lock_init(&base->lock);
++              raw_spin_lock_init(&base->lock);
+               base->clk = jiffies;
+       }
+ }
diff --git a/patches/features/all/rt/timers-Don-t-wake-ktimersoftd-on-every-tick.patch b/patches/features/all/rt/timers-Don-t-wake-ktimersoftd-on-every-tick.patch
new file mode 100644 (file)
index 0000000..51207f3
--- /dev/null
@@ -0,0 +1,229 @@
+From: Haris Okanovic <haris.okanovic@ni.com>
+Date: Fri, 3 Feb 2017 17:26:44 +0100
+Subject: [PATCH] timers: Don't wake ktimersoftd on every tick
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+We recently upgraded from 4.1 to 4.6 and noticed a minor latency
+regression caused by an additional thread wakeup (ktimersoftd) in
+interrupt context on every tick. The wakeups are from
+run_local_timers() raising TIMER_SOFTIRQ. Both TIMER and SCHED softirq
+coalesced into one ksoftirqd wakeup prior to Sebastian's change to split
+timers into their own thread.
+
+There's already logic in run_local_timers() to avoid some unnecessary
+wakeups of ksoftirqd, but it doesn't seems to catch them all. In
+particular, I've seen many unnecessary wakeups when jiffies increments
+prior to run_local_timers().
+
+Change the way timers are collected per Julia and Thomas'
+recommendation: Expired timers are now collected in interrupt context
+and fired in ktimersoftd to avoid double-walk of `pending_map`.
+
+Collect expired timers in interrupt context to avoid overhead of waking
+ktimersoftd on every tick. ktimersoftd now wakes only when one or more
+timers are ready, which yields a minor reduction in small latency spikes.
+
+This is implemented by storing lists of expired timers in timer_base,
+updated on each tick. Any addition to the lists wakes ktimersoftd
+(softirq) to process those timers.
+
+Signed-off-by: Haris Okanovic <haris.okanovic@ni.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/time/timer.c |   96 ++++++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 67 insertions(+), 29 deletions(-)
+
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -206,6 +206,8 @@ struct timer_base {
+       bool                    is_idle;
+       DECLARE_BITMAP(pending_map, WHEEL_SIZE);
+       struct hlist_head       vectors[WHEEL_SIZE];
++      struct hlist_head       expired_lists[LVL_DEPTH];
++      int                     expired_count;
+ } ____cacheline_aligned;
+ static DEFINE_PER_CPU(struct timer_base, timer_bases[NR_BASES]);
+@@ -1353,7 +1355,8 @@ static void call_timer_fn(struct timer_l
+       }
+ }
+-static void expire_timers(struct timer_base *base, struct hlist_head *head)
++static inline void __expire_timers(struct timer_base *base,
++                                 struct hlist_head *head)
+ {
+       while (!hlist_empty(head)) {
+               struct timer_list *timer;
+@@ -1384,21 +1387,38 @@ static void expire_timers(struct timer_b
+       }
+ }
+-static int __collect_expired_timers(struct timer_base *base,
+-                                  struct hlist_head *heads)
++static void expire_timers(struct timer_base *base)
++{
++      struct hlist_head *head;
++
++      while (base->expired_count--) {
++              head = base->expired_lists + base->expired_count;
++              __expire_timers(base, head);
++      }
++      base->expired_count = 0;
++}
++
++static void __collect_expired_timers(struct timer_base *base)
+ {
+       unsigned long clk = base->clk;
+       struct hlist_head *vec;
+-      int i, levels = 0;
++      int i;
+       unsigned int idx;
++      /*
++       * expire_timers() must be called at least once before we can
++       * collect more timers
++       */
++      if (WARN_ON(base->expired_count))
++              return;
++
+       for (i = 0; i < LVL_DEPTH; i++) {
+               idx = (clk & LVL_MASK) + i * LVL_SIZE;
+               if (__test_and_clear_bit(idx, base->pending_map)) {
+                       vec = base->vectors + idx;
+-                      hlist_move_list(vec, heads++);
+-                      levels++;
++                      hlist_move_list(vec,
++                              &base->expired_lists[base->expired_count++]);
+               }
+               /* Is it time to look at the next level? */
+               if (clk & LVL_CLK_MASK)
+@@ -1406,7 +1426,6 @@ static int __collect_expired_timers(stru
+               /* Shift clock for the next level granularity */
+               clk >>= LVL_CLK_SHIFT;
+       }
+-      return levels;
+ }
+ #ifdef CONFIG_NO_HZ_COMMON
+@@ -1599,8 +1618,7 @@ void timer_clear_idle(void)
+       base->is_idle = false;
+ }
+-static int collect_expired_timers(struct timer_base *base,
+-                                struct hlist_head *heads)
++static void collect_expired_timers(struct timer_base *base)
+ {
+       /*
+        * NOHZ optimization. After a long idle sleep we need to forward the
+@@ -1617,20 +1635,49 @@ static int collect_expired_timers(struct
+               if (time_after(next, jiffies)) {
+                       /* The call site will increment clock! */
+                       base->clk = jiffies - 1;
+-                      return 0;
++                      return;
+               }
+               base->clk = next;
+       }
+-      return __collect_expired_timers(base, heads);
++      __collect_expired_timers(base);
+ }
+ #else
+-static inline int collect_expired_timers(struct timer_base *base,
+-                                       struct hlist_head *heads)
++static inline void collect_expired_timers(struct timer_base *base)
+ {
+-      return __collect_expired_timers(base, heads);
++      __collect_expired_timers(base);
+ }
+ #endif
++static int find_expired_timers(struct timer_base *base)
++{
++      const unsigned long int end_clk = jiffies;
++
++      while (!base->expired_count && time_after_eq(end_clk, base->clk)) {
++              collect_expired_timers(base);
++              base->clk++;
++      }
++
++      return base->expired_count;
++}
++
++/* Called from CPU tick routine to quickly collect expired timers */
++static int tick_find_expired(struct timer_base *base)
++{
++      int count;
++
++      raw_spin_lock(&base->lock);
++
++      if (unlikely(time_after(jiffies, base->clk + HZ))) {
++              /* defer to ktimersoftd; don't spend too long in irq context */
++              count = -1;
++      } else
++              count = find_expired_timers(base);
++
++      raw_spin_unlock(&base->lock);
++
++      return count;
++}
++
+ /*
+  * Called from the timer interrupt handler to charge one tick to the current
+  * process.  user_tick is 1 if the tick is user time, 0 for system.
+@@ -1657,22 +1704,11 @@ void update_process_times(int user_tick)
+  */
+ static inline void __run_timers(struct timer_base *base)
+ {
+-      struct hlist_head heads[LVL_DEPTH];
+-      int levels;
+-
+-      if (!time_after_eq(jiffies, base->clk))
+-              return;
+-
+       raw_spin_lock_irq(&base->lock);
+-      while (time_after_eq(jiffies, base->clk)) {
+-
+-              levels = collect_expired_timers(base, heads);
+-              base->clk++;
++      while (find_expired_timers(base))
++              expire_timers(base);
+-              while (levels--)
+-                      expire_timers(base, heads + levels);
+-      }
+       raw_spin_unlock_irq(&base->lock);
+       wakeup_timer_waiters(base);
+ }
+@@ -1698,12 +1734,12 @@ void run_local_timers(void)
+       hrtimer_run_queues();
+       /* Raise the softirq only if required. */
+-      if (time_before(jiffies, base->clk)) {
++      if (time_before(jiffies, base->clk) || !tick_find_expired(base)) {
+               if (!IS_ENABLED(CONFIG_NO_HZ_COMMON) || !base->nohz_active)
+                       return;
+               /* CPU is awake, so check the deferrable base. */
+               base++;
+-              if (time_before(jiffies, base->clk))
++              if (time_before(jiffies, base->clk) || !tick_find_expired(base))
+                       return;
+       }
+       raise_softirq(TIMER_SOFTIRQ);
+@@ -1873,6 +1909,7 @@ int timers_dead_cpu(unsigned int cpu)
+               raw_spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
+               BUG_ON(old_base->running_timer);
++              BUG_ON(old_base->expired_count);
+               for (i = 0; i < WHEEL_SIZE; i++)
+                       migrate_timer_list(new_base, old_base->vectors + i);
+@@ -1899,6 +1936,7 @@ static void __init init_timer_cpu(int cp
+ #ifdef CONFIG_PREEMPT_RT_FULL
+               init_swait_queue_head(&base->wait_for_running_timer);
+ #endif
++              base->expired_count = 0;
+       }
+ }
diff --git a/patches/features/all/rt/timers-prepare-for-full-preemption.patch b/patches/features/all/rt/timers-prepare-for-full-preemption.patch
new file mode 100644 (file)
index 0000000..21a0c7b
--- /dev/null
@@ -0,0 +1,159 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:34 -0500
+Subject: timers: Prepare for full preemption
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When softirqs can be preempted we need to make sure that cancelling
+the timer from the active thread can not deadlock vs. a running timer
+callback. Add a waitqueue to resolve that.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ include/linux/timer.h |    2 +-
+ kernel/sched/core.c   |    9 +++++++--
+ kernel/time/timer.c   |   44 ++++++++++++++++++++++++++++++++++++++++----
+ 3 files changed, 48 insertions(+), 7 deletions(-)
+
+--- a/include/linux/timer.h
++++ b/include/linux/timer.h
+@@ -241,7 +241,7 @@ extern void add_timer(struct timer_list
+ extern int try_to_del_timer_sync(struct timer_list *timer);
+-#ifdef CONFIG_SMP
++#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT_FULL)
+   extern int del_timer_sync(struct timer_list *timer);
+ #else
+ # define del_timer_sync(t)            del_timer(t)
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -525,11 +525,14 @@ void resched_cpu(int cpu)
+  */
+ int get_nohz_timer_target(void)
+ {
+-      int i, cpu = smp_processor_id();
++      int i, cpu;
+       struct sched_domain *sd;
++      preempt_disable_rt();
++      cpu = smp_processor_id();
++
+       if (!idle_cpu(cpu) && is_housekeeping_cpu(cpu))
+-              return cpu;
++              goto preempt_en_rt;
+       rcu_read_lock();
+       for_each_domain(cpu, sd) {
+@@ -548,6 +551,8 @@ int get_nohz_timer_target(void)
+               cpu = housekeeping_any_cpu();
+ unlock:
+       rcu_read_unlock();
++preempt_en_rt:
++      preempt_enable_rt();
+       return cpu;
+ }
+ /*
+--- a/kernel/time/timer.c
++++ b/kernel/time/timer.c
+@@ -195,6 +195,9 @@ EXPORT_SYMBOL(jiffies_64);
+ struct timer_base {
+       raw_spinlock_t          lock;
+       struct timer_list       *running_timer;
++#ifdef CONFIG_PREEMPT_RT_FULL
++      struct swait_queue_head wait_for_running_timer;
++#endif
+       unsigned long           clk;
+       unsigned long           next_expiry;
+       unsigned int            cpu;
+@@ -1157,6 +1160,33 @@ void add_timer_on(struct timer_list *tim
+ }
+ EXPORT_SYMBOL_GPL(add_timer_on);
++#ifdef CONFIG_PREEMPT_RT_FULL
++/*
++ * Wait for a running timer
++ */
++static void wait_for_running_timer(struct timer_list *timer)
++{
++      struct timer_base *base;
++      u32 tf = timer->flags;
++
++      if (tf & TIMER_MIGRATING)
++              return;
++
++      base = get_timer_base(tf);
++      swait_event(base->wait_for_running_timer,
++                 base->running_timer != timer);
++}
++
++# define wakeup_timer_waiters(b)      swake_up_all(&(b)->wait_for_running_timer)
++#else
++static inline void wait_for_running_timer(struct timer_list *timer)
++{
++      cpu_relax();
++}
++
++# define wakeup_timer_waiters(b)      do { } while (0)
++#endif
++
+ /**
+  * del_timer - deactive a timer.
+  * @timer: the timer to be deactivated
+@@ -1214,7 +1244,7 @@ int try_to_del_timer_sync(struct timer_l
+ }
+ EXPORT_SYMBOL(try_to_del_timer_sync);
+-#ifdef CONFIG_SMP
++#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT_FULL)
+ /**
+  * del_timer_sync - deactivate a timer and wait for the handler to finish.
+  * @timer: the timer to be deactivated
+@@ -1274,7 +1304,7 @@ int del_timer_sync(struct timer_list *ti
+               int ret = try_to_del_timer_sync(timer);
+               if (ret >= 0)
+                       return ret;
+-              cpu_relax();
++              wait_for_running_timer(timer);
+       }
+ }
+ EXPORT_SYMBOL(del_timer_sync);
+@@ -1339,13 +1369,16 @@ static void expire_timers(struct timer_b
+               fn = timer->function;
+               data = timer->data;
+-              if (timer->flags & TIMER_IRQSAFE) {
++              if (!IS_ENABLED(CONFIG_PREEMPT_RT_FULL) &&
++                  timer->flags & TIMER_IRQSAFE) {
+                       raw_spin_unlock(&base->lock);
+                       call_timer_fn(timer, fn, data);
++                      base->running_timer = NULL;
+                       raw_spin_lock(&base->lock);
+               } else {
+                       raw_spin_unlock_irq(&base->lock);
+                       call_timer_fn(timer, fn, data);
++                      base->running_timer = NULL;
+                       raw_spin_lock_irq(&base->lock);
+               }
+       }
+@@ -1640,8 +1673,8 @@ static inline void __run_timers(struct t
+               while (levels--)
+                       expire_timers(base, heads + levels);
+       }
+-      base->running_timer = NULL;
+       raw_spin_unlock_irq(&base->lock);
++      wakeup_timer_waiters(base);
+ }
+ /*
+@@ -1863,6 +1896,9 @@ static void __init init_timer_cpu(int cp
+               base->cpu = cpu;
+               raw_spin_lock_init(&base->lock);
+               base->clk = jiffies;
++#ifdef CONFIG_PREEMPT_RT_FULL
++              init_swait_queue_head(&base->wait_for_running_timer);
++#endif
+       }
+ }
diff --git a/patches/features/all/rt/trace-latency-hist-Consider-new-argument-when-probin.patch b/patches/features/all/rt/trace-latency-hist-Consider-new-argument-when-probin.patch
new file mode 100644 (file)
index 0000000..1a3f987
--- /dev/null
@@ -0,0 +1,38 @@
+From: Carsten Emde <C.Emde@osadl.org>
+Date: Tue, 5 Jan 2016 10:21:59 +0100
+Subject: trace/latency-hist: Consider new argument when probing the
+ sched_switch tracer
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The sched_switch tracer has got a new argument. Fix the latency tracer
+accordingly.
+
+Recently: c73464b1c843 ("sched/core: Fix trace_sched_switch()") since
+v4.4-rc1.
+
+Signed-off-by: Carsten Emde <C.Emde@osadl.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/trace/latency_hist.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/trace/latency_hist.c
++++ b/kernel/trace/latency_hist.c
+@@ -117,7 +117,7 @@ static char *wakeup_latency_hist_dir_sha
+ static notrace void probe_wakeup_latency_hist_start(void *v,
+       struct task_struct *p);
+ static notrace void probe_wakeup_latency_hist_stop(void *v,
+-      struct task_struct *prev, struct task_struct *next);
++      bool preempt, struct task_struct *prev, struct task_struct *next);
+ static notrace void probe_sched_migrate_task(void *,
+       struct task_struct *task, int cpu);
+ static struct enable_data wakeup_latency_enabled_data = {
+@@ -907,7 +907,7 @@ static notrace void probe_wakeup_latency
+ }
+ static notrace void probe_wakeup_latency_hist_stop(void *v,
+-      struct task_struct *prev, struct task_struct *next)
++      bool preempt, struct task_struct *prev, struct task_struct *next)
+ {
+       unsigned long flags;
+       int cpu = task_cpu(next);
diff --git a/patches/features/all/rt/trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch b/patches/features/all/rt/trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch
new file mode 100644 (file)
index 0000000..02709e8
--- /dev/null
@@ -0,0 +1,91 @@
+Subject: trace: Use rcuidle version for preemptoff_hist trace point
+From: Yang Shi <yang.shi@windriver.com>
+Date: Tue, 23 Feb 2016 13:23:23 -0800
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When running -rt kernel with both PREEMPT_OFF_HIST and LOCKDEP enabled,
+the below error is reported:
+
+ [ INFO: suspicious RCU usage. ]
+ 4.4.1-rt6 #1 Not tainted
+ include/trace/events/hist.h:31 suspicious rcu_dereference_check() usage!
+
+ other info that might help us debug this:
+
+ RCU used illegally from idle CPU!
+ rcu_scheduler_active = 1, debug_locks = 0
+ RCU used illegally from extended quiescent state!
+ no locks held by swapper/0/0.
+
+ stack backtrace:
+ CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.4.1-rt6-WR8.0.0.0_standard #1
+ Stack : 0000000000000006 0000000000000000 ffffffff81ca8c38 ffffffff81c8fc80
+    ffffffff811bdd68 ffffffff81cb0000 0000000000000000 ffffffff81cb0000
+    0000000000000000 0000000000000000 0000000000000004 0000000000000000
+    0000000000000004 ffffffff811bdf50 0000000000000000 ffffffff82b60000
+    0000000000000000 ffffffff812897ac ffffffff819f0000 000000000000000b
+    ffffffff811be460 ffffffff81b7c588 ffffffff81c8fc80 0000000000000000
+    0000000000000000 ffffffff81ec7f88 ffffffff81d70000 ffffffff81b70000
+    ffffffff81c90000 ffffffff81c3fb00 ffffffff81c3fc28 ffffffff815e6f98
+    0000000000000000 ffffffff81c8fa87 ffffffff81b70958 ffffffff811bf2c4
+    0707fe32e8d60ca5 ffffffff81126d60 0000000000000000 0000000000000000
+    ...
+ Call Trace:
+ [<ffffffff81126d60>] show_stack+0xe8/0x108
+ [<ffffffff815e6f98>] dump_stack+0x88/0xb0
+ [<ffffffff8124b88c>] time_hardirqs_off+0x204/0x300
+ [<ffffffff811aa5dc>] trace_hardirqs_off_caller+0x24/0xe8
+ [<ffffffff811a4ec4>] cpu_startup_entry+0x39c/0x508
+ [<ffffffff81d7dc68>] start_kernel+0x584/0x5a0
+
+Replace regular trace_preemptoff_hist to rcuidle version to avoid the error.
+
+Signed-off-by: Yang Shi <yang.shi@windriver.com>
+Cc: bigeasy@linutronix.de
+Cc: rostedt@goodmis.org
+Cc: linux-rt-users@vger.kernel.org
+Link: http://lkml.kernel.org/r/1456262603-10075-1-git-send-email-yang.shi@windriver.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+I recall the rcuidle version is used by 4.1-rt, but not sure why it is dropped
+in 4.4-rt. It looks such fix is still needed. 
+
+ kernel/trace/trace_irqsoff.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/kernel/trace/trace_irqsoff.c
++++ b/kernel/trace/trace_irqsoff.c
+@@ -425,13 +425,13 @@ void start_critical_timings(void)
+ {
+       if (preempt_trace() || irq_trace())
+               start_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
+-      trace_preemptirqsoff_hist(TRACE_START, 1);
++      trace_preemptirqsoff_hist_rcuidle(TRACE_START, 1);
+ }
+ EXPORT_SYMBOL_GPL(start_critical_timings);
+ void stop_critical_timings(void)
+ {
+-      trace_preemptirqsoff_hist(TRACE_STOP, 0);
++      trace_preemptirqsoff_hist_rcuidle(TRACE_STOP, 0);
+       if (preempt_trace() || irq_trace())
+               stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
+ }
+@@ -441,7 +441,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings)
+ #ifdef CONFIG_PROVE_LOCKING
+ void time_hardirqs_on(unsigned long a0, unsigned long a1)
+ {
+-      trace_preemptirqsoff_hist(IRQS_ON, 0);
++      trace_preemptirqsoff_hist_rcuidle(IRQS_ON, 0);
+       if (!preempt_trace() && irq_trace())
+               stop_critical_timing(a0, a1);
+ }
+@@ -450,7 +450,7 @@ void time_hardirqs_off(unsigned long a0,
+ {
+       if (!preempt_trace() && irq_trace())
+               start_critical_timing(a0, a1);
+-      trace_preemptirqsoff_hist(IRQS_OFF, 1);
++      trace_preemptirqsoff_hist_rcuidle(IRQS_OFF, 1);
+ }
+ #else /* !CONFIG_PROVE_LOCKING */
diff --git a/patches/features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch b/patches/features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch
new file mode 100644 (file)
index 0000000..9f925e9
--- /dev/null
@@ -0,0 +1,47 @@
+From: Steven Rostedt <rostedt@goodmis.org>
+Date: Thu, 29 Sep 2011 12:24:30 -0500
+Subject: tracing: Account for preempt off in preempt_schedule()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+The preempt_schedule() uses the preempt_disable_notrace() version
+because it can cause infinite recursion by the function tracer as
+the function tracer uses preempt_enable_notrace() which may call
+back into the preempt_schedule() code as the NEED_RESCHED is still
+set and the PREEMPT_ACTIVE has not been set yet.
+
+See commit: d1f74e20b5b064a130cd0743a256c2d3cfe84010 that made this
+change.
+
+The preemptoff and preemptirqsoff latency tracers require the first
+and last preempt count modifiers to enable tracing. But this skips
+the checks. Since we can not convert them back to the non notrace
+version, we can use the idle() hooks for the latency tracers here.
+That is, the start/stop_critical_timings() works well to manually
+start and stop the latency tracer for preempt off timings.
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Clark Williams <williams@redhat.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/sched/core.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -3583,7 +3583,16 @@ asmlinkage __visible void __sched notrac
+                * an infinite recursion.
+                */
+               prev_ctx = exception_enter();
++              /*
++               * The add/subtract must not be traced by the function
++               * tracer. But we still want to account for the
++               * preempt off latency tracer. Since the _notrace versions
++               * of add/subtract skip the accounting for latency tracer
++               * we must force it manually.
++               */
++              start_critical_timings();
+               __schedule(true);
++              stop_critical_timings();
+               exception_exit(prev_ctx);
+               preempt_latency_stop(1);
diff --git a/patches/features/all/rt/tty-serial-8250-don-t-take-the-trylock-during-oops.patch b/patches/features/all/rt/tty-serial-8250-don-t-take-the-trylock-during-oops.patch
new file mode 100644 (file)
index 0000000..560143e
--- /dev/null
@@ -0,0 +1,29 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 11 Apr 2016 16:55:02 +0200
+Subject: [PATCH] tty: serial: 8250: don't take the trylock during oops
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+An oops with irqs off (panic() from irqsafe hrtimer like the watchdog
+timer) will lead to a lockdep warning on each invocation and as such
+never completes.
+Therefore we skip the trylock in the oops case.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/tty/serial/8250/8250_port.c |    4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+--- a/drivers/tty/serial/8250/8250_port.c
++++ b/drivers/tty/serial/8250/8250_port.c
+@@ -3144,10 +3144,8 @@ void serial8250_console_write(struct uar
+       serial8250_rpm_get(up);
+-      if (port->sysrq)
++      if (port->sysrq || oops_in_progress)
+               locked = 0;
+-      else if (oops_in_progress)
+-              locked = spin_trylock_irqsave(&port->lock, flags);
+       else
+               spin_lock_irqsave(&port->lock, flags);
diff --git a/patches/features/all/rt/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch b/patches/features/all/rt/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch
new file mode 100644 (file)
index 0000000..4b0ce4c
--- /dev/null
@@ -0,0 +1,66 @@
+Subject: net: Remove preemption disabling in netif_rx()
+From: Priyanka Jain <Priyanka.Jain@freescale.com>
+Date: Thu, 17 May 2012 09:35:11 +0530
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+1)enqueue_to_backlog() (called from netif_rx) should be
+  bind to a particluar CPU. This can be achieved by
+  disabling migration. No need to disable preemption
+
+2)Fixes crash "BUG: scheduling while atomic: ksoftirqd"
+  in case of RT.
+  If preemption is disabled, enqueue_to_backog() is called
+  in atomic context. And if backlog exceeds its count,
+  kfree_skb() is called. But in RT, kfree_skb() might
+  gets scheduled out, so it expects non atomic context.
+
+3)When CONFIG_PREEMPT_RT_FULL is not defined,
+ migrate_enable(), migrate_disable() maps to
+ preempt_enable() and preempt_disable(), so no
+ change in functionality in case of non-RT.
+
+-Replace preempt_enable(), preempt_disable() with
+ migrate_enable(), migrate_disable() respectively
+-Replace get_cpu(), put_cpu() with get_cpu_light(),
+ put_cpu_light() respectively
+
+Signed-off-by: Priyanka Jain <Priyanka.Jain@freescale.com>
+Acked-by: Rajan Srivastava <Rajan.Srivastava@freescale.com>
+Cc: <rostedt@goodmis.orgn>
+Link: http://lkml.kernel.org/r/1337227511-2271-1-git-send-email-Priyanka.Jain@freescale.com
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ Testing: Tested successfully on p4080ds(8-core SMP system)  
+
+ net/core/dev.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -3811,7 +3811,7 @@ static int netif_rx_internal(struct sk_b
+               struct rps_dev_flow voidflow, *rflow = &voidflow;
+               int cpu;
+-              preempt_disable();
++              migrate_disable();
+               rcu_read_lock();
+               cpu = get_rps_cpu(skb->dev, skb, &rflow);
+@@ -3821,13 +3821,13 @@ static int netif_rx_internal(struct sk_b
+               ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
+               rcu_read_unlock();
+-              preempt_enable();
++              migrate_enable();
+       } else
+ #endif
+       {
+               unsigned int qtail;
+-              ret = enqueue_to_backlog(skb, get_cpu(), &qtail);
+-              put_cpu();
++              ret = enqueue_to_backlog(skb, get_cpu_light(), &qtail);
++              put_cpu_light();
+       }
+       return ret;
+ }
diff --git a/patches/features/all/rt/usb-use-_nort-in-giveback.patch b/patches/features/all/rt/usb-use-_nort-in-giveback.patch
new file mode 100644 (file)
index 0000000..2b5e118
--- /dev/null
@@ -0,0 +1,58 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 8 Nov 2013 17:34:54 +0100
+Subject: usb: Use _nort in giveback function
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Since commit 94dfd7ed ("USB: HCD: support giveback of URB in tasklet
+context") I see
+
+|BUG: sleeping function called from invalid context at kernel/rtmutex.c:673
+|in_atomic(): 0, irqs_disabled(): 1, pid: 109, name: irq/11-uhci_hcd
+|no locks held by irq/11-uhci_hcd/109.
+|irq event stamp: 440
+|hardirqs last  enabled at (439): [<ffffffff816a7555>] _raw_spin_unlock_irqrestore+0x75/0x90
+|hardirqs last disabled at (440): [<ffffffff81514906>] __usb_hcd_giveback_urb+0x46/0xc0
+|softirqs last  enabled at (0): [<ffffffff81081821>] copy_process.part.52+0x511/0x1510
+|softirqs last disabled at (0): [<          (null)>]           (null)
+|CPU: 3 PID: 109 Comm: irq/11-uhci_hcd Not tainted 3.12.0-rt0-rc1+ #13
+|Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
+| 0000000000000000 ffff8800db9ffbe0 ffffffff8169f064 0000000000000000
+| ffff8800db9ffbf8 ffffffff810b2122 ffff88020f03e888 ffff8800db9ffc18
+| ffffffff816a6944 ffffffff810b5748 ffff88020f03c000 ffff8800db9ffc50
+|Call Trace:
+| [<ffffffff8169f064>] dump_stack+0x4e/0x8f
+| [<ffffffff810b2122>] __might_sleep+0x112/0x190
+| [<ffffffff816a6944>] rt_spin_lock+0x24/0x60
+| [<ffffffff8158435b>] hid_ctrl+0x3b/0x190
+| [<ffffffff8151490f>] __usb_hcd_giveback_urb+0x4f/0xc0
+| [<ffffffff81514aaf>] usb_hcd_giveback_urb+0x3f/0x140
+| [<ffffffff815346af>] uhci_giveback_urb+0xaf/0x280
+| [<ffffffff8153666a>] uhci_scan_schedule+0x47a/0xb10
+| [<ffffffff81537336>] uhci_irq+0xa6/0x1a0
+| [<ffffffff81513c48>] usb_hcd_irq+0x28/0x40
+| [<ffffffff810c8ba3>] irq_forced_thread_fn+0x23/0x70
+| [<ffffffff810c918f>] irq_thread+0x10f/0x150
+| [<ffffffff810a6fad>] kthread+0xcd/0xe0
+| [<ffffffff816a842c>] ret_from_fork+0x7c/0xb0
+
+on -RT we run threaded so no need to disable interrupts.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ drivers/usb/core/hcd.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/core/hcd.c
++++ b/drivers/usb/core/hcd.c
+@@ -1761,9 +1761,9 @@ static void __usb_hcd_giveback_urb(struc
+        * and no one may trigger the above deadlock situation when
+        * running complete() in tasklet.
+        */
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       urb->complete(urb);
+-      local_irq_restore(flags);
++      local_irq_restore_nort(flags);
+       usb_anchor_resume_wakeups(anchor);
+       atomic_dec(&urb->use_count);
diff --git a/patches/features/all/rt/user-use-local-irq-nort.patch b/patches/features/all/rt/user-use-local-irq-nort.patch
new file mode 100644 (file)
index 0000000..9faad4a
--- /dev/null
@@ -0,0 +1,30 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Tue, 21 Jul 2009 23:06:05 +0200
+Subject: core: Do not disable interrupts on RT in kernel/users.c
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use the local_irq_*_nort variants to reduce latencies in RT. The code
+is serialized by the locks. No need to disable interrupts.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ kernel/user.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/user.c
++++ b/kernel/user.c
+@@ -161,11 +161,11 @@ void free_uid(struct user_struct *up)
+       if (!up)
+               return;
+-      local_irq_save(flags);
++      local_irq_save_nort(flags);
+       if (atomic_dec_and_lock(&up->__count, &uidhash_lock))
+               free_user(up, flags);
+       else
+-              local_irq_restore(flags);
++              local_irq_restore_nort(flags);
+ }
+ struct user_struct *alloc_uid(kuid_t uid)
diff --git a/patches/features/all/rt/wait.h-include-atomic.h.patch b/patches/features/all/rt/wait.h-include-atomic.h.patch
new file mode 100644 (file)
index 0000000..1ffd9ba
--- /dev/null
@@ -0,0 +1,33 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 28 Oct 2013 12:19:57 +0100
+Subject: wait.h: include atomic.h
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+|  CC      init/main.o
+|In file included from include/linux/mmzone.h:9:0,
+|                 from include/linux/gfp.h:4,
+|                 from include/linux/kmod.h:22,
+|                 from include/linux/module.h:13,
+|                 from init/main.c:15:
+|include/linux/wait.h: In function ‘wait_on_atomic_t’:
+|include/linux/wait.h:982:2: error: implicit declaration of function ‘atomic_read’ [-Werror=implicit-function-declaration]
+|  if (atomic_read(val) == 0)
+|  ^
+
+This pops up on ARM. Non-RT gets its atomic.h include from spinlock.h
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/wait.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/include/linux/wait.h
++++ b/include/linux/wait.h
+@@ -8,6 +8,7 @@
+ #include <linux/spinlock.h>
+ #include <asm/current.h>
+ #include <uapi/linux/wait.h>
++#include <linux/atomic.h>
+ typedef struct __wait_queue wait_queue_t;
+ typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, void *key);
diff --git a/patches/features/all/rt/work-queue-work-around-irqsafe-timer-optimization.patch b/patches/features/all/rt/work-queue-work-around-irqsafe-timer-optimization.patch
new file mode 100644 (file)
index 0000000..52a43e3
--- /dev/null
@@ -0,0 +1,133 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 01 Jul 2013 11:02:42 +0200
+Subject: workqueue: Prevent workqueue versus ata-piix livelock
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+An Intel i7 system regularly detected rcu_preempt stalls after the kernel
+was upgraded from 3.6-rt to 3.8-rt. When the stall happened, disk I/O was no
+longer possible, unless the system was restarted.
+
+The kernel message was:
+INFO: rcu_preempt self-detected stall on CPU { 6}
+[..]
+NMI backtrace for cpu 6
+CPU 6
+Pid: 119, comm: irq/19-ata_piix Not tainted 3.8.13-rt13 #11 Shuttle Inc. SX58/SX58
+RIP: 0010:[<ffffffff8124ca60>]  [<ffffffff8124ca60>] ip_compute_csum+0x30/0x30
+RSP: 0018:ffff880333303cb0  EFLAGS: 00000002
+RAX: 0000000000000006 RBX: 00000000000003e9 RCX: 0000000000000034
+RDX: 0000000000000000 RSI: ffffffff81aa16d0 RDI: 0000000000000001
+RBP: ffff880333303ce8 R08: ffffffff81aa16d0 R09: ffffffff81c1b8cc
+R10: 0000000000000000 R11: 0000000000000000 R12: 000000000005161f
+R13: 0000000000000006 R14: ffffffff81aa16d0 R15: 0000000000000002
+FS:  0000000000000000(0000) GS:ffff880333300000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
+CR2: 0000003c1b2bb420 CR3: 0000000001a0f000 CR4: 00000000000007e0
+DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
+Process irq/19-ata_piix (pid: 119, threadinfo ffff88032d88a000, task ffff88032df80000)
+Stack:
+ffffffff8124cb32 000000000005161e 00000000000003e9 0000000000001000
+0000000000009022 ffffffff81aa16d0 0000000000000002 ffff880333303cf8
+ffffffff8124caa9 ffff880333303d08 ffffffff8124cad2 ffff880333303d28
+Call Trace:
+<IRQ>
+[<ffffffff8124cb32>] ? delay_tsc+0x33/0xe3
+[<ffffffff8124caa9>] __delay+0xf/0x11
+[<ffffffff8124cad2>] __const_udelay+0x27/0x29
+[<ffffffff8102d1fa>] native_safe_apic_wait_icr_idle+0x39/0x45
+[<ffffffff8102dc9b>] __default_send_IPI_dest_field.constprop.0+0x1e/0x58
+[<ffffffff8102dd1e>] default_send_IPI_mask_sequence_phys+0x49/0x7d
+[<ffffffff81030326>] physflat_send_IPI_all+0x17/0x19
+[<ffffffff8102de53>] arch_trigger_all_cpu_backtrace+0x50/0x79
+[<ffffffff810b21d0>] rcu_check_callbacks+0x1cb/0x568
+[<ffffffff81048c9c>] ? raise_softirq+0x2e/0x35
+[<ffffffff81086be0>] ? tick_sched_do_timer+0x38/0x38
+[<ffffffff8104f653>] update_process_times+0x44/0x55
+[<ffffffff81086866>] tick_sched_handle+0x4a/0x59
+[<ffffffff81086c1c>] tick_sched_timer+0x3c/0x5b
+[<ffffffff81062845>] __run_hrtimer+0x9b/0x158
+[<ffffffff810631d8>] hrtimer_interrupt+0x172/0x2aa
+[<ffffffff8102d498>] smp_apic_timer_interrupt+0x76/0x89
+[<ffffffff814d881d>] apic_timer_interrupt+0x6d/0x80
+<EOI>
+[<ffffffff81057cd2>] ? __local_lock_irqsave+0x17/0x4a
+[<ffffffff81059336>] try_to_grab_pending+0x42/0x17e
+[<ffffffff8105a699>] mod_delayed_work_on+0x32/0x88
+[<ffffffff8105a70b>] mod_delayed_work+0x1c/0x1e
+[<ffffffff8122ae84>] blk_run_queue_async+0x37/0x39
+[<ffffffff81230985>] flush_end_io+0xf1/0x107
+[<ffffffff8122e0da>] blk_finish_request+0x21e/0x264
+[<ffffffff8122e162>] blk_end_bidi_request+0x42/0x60
+[<ffffffff8122e1ba>] blk_end_request+0x10/0x12
+[<ffffffff8132de46>] scsi_io_completion+0x1bf/0x492
+[<ffffffff81335cec>] ? sd_done+0x298/0x2ef
+[<ffffffff81325a02>] scsi_finish_command+0xe9/0xf2
+[<ffffffff8132dbcb>] scsi_softirq_done+0x106/0x10f
+[<ffffffff812333d3>] blk_done_softirq+0x77/0x87
+[<ffffffff8104826f>] do_current_softirqs+0x172/0x2e1
+[<ffffffff810aa820>] ? irq_thread_fn+0x3a/0x3a
+[<ffffffff81048466>] local_bh_enable+0x43/0x72
+[<ffffffff810aa866>] irq_forced_thread_fn+0x46/0x52
+[<ffffffff810ab089>] irq_thread+0x8c/0x17c
+[<ffffffff810ab179>] ? irq_thread+0x17c/0x17c
+[<ffffffff810aaffd>] ? wake_threads_waitq+0x44/0x44
+[<ffffffff8105eb18>] kthread+0x8d/0x95
+[<ffffffff8105ea8b>] ? __kthread_parkme+0x65/0x65
+[<ffffffff814d7b7c>] ret_from_fork+0x7c/0xb0
+[<ffffffff8105ea8b>] ? __kthread_parkme+0x65/0x65
+
+The state of softirqd of this CPU at the time of the crash was:
+ksoftirqd/6     R  running task        0    53      2 0x00000000
+ffff88032fc39d18 0000000000000046 ffff88033330c4c0 ffff8803303f4710
+ffff88032fc39fd8 ffff88032fc39fd8 0000000000000000 0000000000062500
+ffff88032df88000 ffff8803303f4710 0000000000000000 ffff88032fc38000
+Call Trace:
+[<ffffffff8105a3ae>] ? __queue_work+0x27c/0x27c
+[<ffffffff814d178c>] preempt_schedule+0x61/0x76
+[<ffffffff8106cccf>] migrate_enable+0xe5/0x1df
+[<ffffffff8105a3ae>] ? __queue_work+0x27c/0x27c
+[<ffffffff8104ef52>] run_timer_softirq+0x161/0x1d6
+[<ffffffff8104826f>] do_current_softirqs+0x172/0x2e1
+[<ffffffff8104840b>] run_ksoftirqd+0x2d/0x45
+[<ffffffff8106658a>] smpboot_thread_fn+0x2ea/0x308
+[<ffffffff810662a0>] ? test_ti_thread_flag+0xc/0xc
+[<ffffffff810662a0>] ? test_ti_thread_flag+0xc/0xc
+[<ffffffff8105eb18>] kthread+0x8d/0x95
+[<ffffffff8105ea8b>] ? __kthread_parkme+0x65/0x65
+[<ffffffff814d7afc>] ret_from_fork+0x7c/0xb0
+[<ffffffff8105ea8b>] ? __kthread_parkme+0x65/0x65
+
+Apparently, the softirq demon and the ata_piix IRQ handler were waiting
+for each other to finish ending up in a livelock. After the below patch
+was applied, the system no longer crashes.
+
+Reported-by: Carsten Emde <C.Emde@osadl.org>
+Proposed-by: Thomas Gleixner <tglx@linutronix.de>
+Tested by: Carsten Emde <C.Emde@osadl.org>
+Signed-off-by: Carsten Emde <C.Emde@osadl.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/workqueue.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -49,6 +49,7 @@
+ #include <linux/moduleparam.h>
+ #include <linux/uaccess.h>
+ #include <linux/locallock.h>
++#include <linux/delay.h>
+ #include "workqueue_internal.h"
+@@ -1279,7 +1280,7 @@ static int try_to_grab_pending(struct wo
+       local_unlock_irqrestore(pendingb_lock, *flags);
+       if (work_is_canceling(work))
+               return -ENOENT;
+-      cpu_relax();
++      cpu_chill();
+       return -EAGAIN;
+ }
diff --git a/patches/features/all/rt/work-simple-Simple-work-queue-implemenation.patch b/patches/features/all/rt/work-simple-Simple-work-queue-implemenation.patch
new file mode 100644 (file)
index 0000000..03f6319
--- /dev/null
@@ -0,0 +1,232 @@
+From: Daniel Wagner <daniel.wagner@bmw-carit.de>
+Date: Fri, 11 Jul 2014 15:26:11 +0200
+Subject: work-simple: Simple work queue implemenation
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Provides a framework for enqueuing callbacks from irq context
+PREEMPT_RT_FULL safe. The callbacks are executed in kthread context.
+
+Bases on wait-simple.
+
+Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
+---
+ include/linux/swork.h |   24 ++++++
+ kernel/sched/Makefile |    2 
+ kernel/sched/swork.c  |  173 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 198 insertions(+), 1 deletion(-)
+
+--- /dev/null
++++ b/include/linux/swork.h
+@@ -0,0 +1,24 @@
++#ifndef _LINUX_SWORK_H
++#define _LINUX_SWORK_H
++
++#include <linux/list.h>
++
++struct swork_event {
++      struct list_head item;
++      unsigned long flags;
++      void (*func)(struct swork_event *);
++};
++
++static inline void INIT_SWORK(struct swork_event *event,
++                            void (*func)(struct swork_event *))
++{
++      event->flags = 0;
++      event->func = func;
++}
++
++bool swork_queue(struct swork_event *sev);
++
++int swork_get(void);
++void swork_put(void);
++
++#endif /* _LINUX_SWORK_H */
+--- a/kernel/sched/Makefile
++++ b/kernel/sched/Makefile
+@@ -17,7 +17,7 @@ endif
+ obj-y += core.o loadavg.o clock.o cputime.o
+ obj-y += idle_task.o fair.o rt.o deadline.o stop_task.o
+-obj-y += wait.o swait.o completion.o idle.o
++obj-y += wait.o swait.o swork.o completion.o idle.o
+ obj-$(CONFIG_SMP) += cpupri.o cpudeadline.o
+ obj-$(CONFIG_SCHED_AUTOGROUP) += auto_group.o
+ obj-$(CONFIG_SCHEDSTATS) += stats.o
+--- /dev/null
++++ b/kernel/sched/swork.c
+@@ -0,0 +1,173 @@
++/*
++ * Copyright (C) 2014 BMW Car IT GmbH, Daniel Wagner daniel.wagner@bmw-carit.de
++ *
++ * Provides a framework for enqueuing callbacks from irq context
++ * PREEMPT_RT_FULL safe. The callbacks are executed in kthread context.
++ */
++
++#include <linux/swait.h>
++#include <linux/swork.h>
++#include <linux/kthread.h>
++#include <linux/slab.h>
++#include <linux/spinlock.h>
++#include <linux/export.h>
++
++#define SWORK_EVENT_PENDING     (1 << 0)
++
++static DEFINE_MUTEX(worker_mutex);
++static struct sworker *glob_worker;
++
++struct sworker {
++      struct list_head events;
++      struct swait_queue_head wq;
++
++      raw_spinlock_t lock;
++
++      struct task_struct *task;
++      int refs;
++};
++
++static bool swork_readable(struct sworker *worker)
++{
++      bool r;
++
++      if (kthread_should_stop())
++              return true;
++
++      raw_spin_lock_irq(&worker->lock);
++      r = !list_empty(&worker->events);
++      raw_spin_unlock_irq(&worker->lock);
++
++      return r;
++}
++
++static int swork_kthread(void *arg)
++{
++      struct sworker *worker = arg;
++
++      for (;;) {
++              swait_event_interruptible(worker->wq,
++                                      swork_readable(worker));
++              if (kthread_should_stop())
++                      break;
++
++              raw_spin_lock_irq(&worker->lock);
++              while (!list_empty(&worker->events)) {
++                      struct swork_event *sev;
++
++                      sev = list_first_entry(&worker->events,
++                                      struct swork_event, item);
++                      list_del(&sev->item);
++                      raw_spin_unlock_irq(&worker->lock);
++
++                      WARN_ON_ONCE(!test_and_clear_bit(SWORK_EVENT_PENDING,
++                                                       &sev->flags));
++                      sev->func(sev);
++                      raw_spin_lock_irq(&worker->lock);
++              }
++              raw_spin_unlock_irq(&worker->lock);
++      }
++      return 0;
++}
++
++static struct sworker *swork_create(void)
++{
++      struct sworker *worker;
++
++      worker = kzalloc(sizeof(*worker), GFP_KERNEL);
++      if (!worker)
++              return ERR_PTR(-ENOMEM);
++
++      INIT_LIST_HEAD(&worker->events);
++      raw_spin_lock_init(&worker->lock);
++      init_swait_queue_head(&worker->wq);
++
++      worker->task = kthread_run(swork_kthread, worker, "kswork");
++      if (IS_ERR(worker->task)) {
++              kfree(worker);
++              return ERR_PTR(-ENOMEM);
++      }
++
++      return worker;
++}
++
++static void swork_destroy(struct sworker *worker)
++{
++      kthread_stop(worker->task);
++
++      WARN_ON(!list_empty(&worker->events));
++      kfree(worker);
++}
++
++/**
++ * swork_queue - queue swork
++ *
++ * Returns %false if @work was already on a queue, %true otherwise.
++ *
++ * The work is queued and processed on a random CPU
++ */
++bool swork_queue(struct swork_event *sev)
++{
++      unsigned long flags;
++
++      if (test_and_set_bit(SWORK_EVENT_PENDING, &sev->flags))
++              return false;
++
++      raw_spin_lock_irqsave(&glob_worker->lock, flags);
++      list_add_tail(&sev->item, &glob_worker->events);
++      raw_spin_unlock_irqrestore(&glob_worker->lock, flags);
++
++      swake_up(&glob_worker->wq);
++      return true;
++}
++EXPORT_SYMBOL_GPL(swork_queue);
++
++/**
++ * swork_get - get an instance of the sworker
++ *
++ * Returns an negative error code if the initialization if the worker did not
++ * work, %0 otherwise.
++ *
++ */
++int swork_get(void)
++{
++      struct sworker *worker;
++
++      mutex_lock(&worker_mutex);
++      if (!glob_worker) {
++              worker = swork_create();
++              if (IS_ERR(worker)) {
++                      mutex_unlock(&worker_mutex);
++                      return -ENOMEM;
++              }
++
++              glob_worker = worker;
++      }
++
++      glob_worker->refs++;
++      mutex_unlock(&worker_mutex);
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(swork_get);
++
++/**
++ * swork_put - puts an instance of the sworker
++ *
++ * Will destroy the sworker thread. This function must not be called until all
++ * queued events have been completed.
++ */
++void swork_put(void)
++{
++      mutex_lock(&worker_mutex);
++
++      glob_worker->refs--;
++      if (glob_worker->refs > 0)
++              goto out;
++
++      swork_destroy(glob_worker);
++      glob_worker = NULL;
++out:
++      mutex_unlock(&worker_mutex);
++}
++EXPORT_SYMBOL_GPL(swork_put);
diff --git a/patches/features/all/rt/workqueue-distangle-from-rq-lock.patch b/patches/features/all/rt/workqueue-distangle-from-rq-lock.patch
new file mode 100644 (file)
index 0000000..f0d215e
--- /dev/null
@@ -0,0 +1,270 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed Jun 22 19:47:03 2011 +0200
+Subject: sched: Distangle worker accounting from rqlock
+    
+The worker accounting for cpu bound workers is plugged into the core
+scheduler code and the wakeup code. This is not a hard requirement and
+can be avoided by keeping track of the state in the workqueue code
+itself.
+    
+Keep track of the sleeping state in the worker itself and call the
+notifier before entering the core scheduler. There might be false
+positives when the task is woken between that call and actually
+scheduling, but that's not really different from scheduling and being
+woken immediately after switching away. There is also no harm from
+updating nr_running when the task returns from scheduling instead of
+accounting it in the wakeup code.
+    
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Jens Axboe <axboe@kernel.dk>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Link: http://lkml.kernel.org/r/20110622174919.135236139@linutronix.de
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+---
+ kernel/sched/core.c         |   81 ++++++++------------------------------------
+ kernel/workqueue.c          |   52 ++++++++++++----------------
+ kernel/workqueue_internal.h |    5 +-
+ 3 files changed, 41 insertions(+), 97 deletions(-)
+
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -1711,10 +1711,6 @@ static inline void ttwu_activate(struct
+ {
+       activate_task(rq, p, en_flags);
+       p->on_rq = TASK_ON_RQ_QUEUED;
+-
+-      /* if a worker is waking up, notify workqueue */
+-      if (p->flags & PF_WQ_WORKER)
+-              wq_worker_waking_up(p, cpu_of(rq));
+ }
+ /*
+@@ -2152,53 +2148,6 @@ try_to_wake_up(struct task_struct *p, un
+ }
+ /**
+- * try_to_wake_up_local - try to wake up a local task with rq lock held
+- * @p: the thread to be awakened
+- * @cookie: context's cookie for pinning
+- *
+- * Put @p on the run-queue if it's not already there. The caller must
+- * ensure that this_rq() is locked, @p is bound to this_rq() and not
+- * the current task.
+- */
+-static void try_to_wake_up_local(struct task_struct *p, struct pin_cookie cookie)
+-{
+-      struct rq *rq = task_rq(p);
+-
+-      if (WARN_ON_ONCE(rq != this_rq()) ||
+-          WARN_ON_ONCE(p == current))
+-              return;
+-
+-      lockdep_assert_held(&rq->lock);
+-
+-      if (!raw_spin_trylock(&p->pi_lock)) {
+-              /*
+-               * This is OK, because current is on_cpu, which avoids it being
+-               * picked for load-balance and preemption/IRQs are still
+-               * disabled avoiding further scheduler activity on it and we've
+-               * not yet picked a replacement task.
+-               */
+-              lockdep_unpin_lock(&rq->lock, cookie);
+-              raw_spin_unlock(&rq->lock);
+-              raw_spin_lock(&p->pi_lock);
+-              raw_spin_lock(&rq->lock);
+-              lockdep_repin_lock(&rq->lock, cookie);
+-      }
+-
+-      if (!(p->state & TASK_NORMAL))
+-              goto out;
+-
+-      trace_sched_waking(p);
+-
+-      if (!task_on_rq_queued(p))
+-              ttwu_activate(rq, p, ENQUEUE_WAKEUP);
+-
+-      ttwu_do_wakeup(rq, p, 0, cookie);
+-      ttwu_stat(p, smp_processor_id(), 0);
+-out:
+-      raw_spin_unlock(&p->pi_lock);
+-}
+-
+-/**
+  * wake_up_process - Wake up a specific process
+  * @p: The process to be woken up.
+  *
+@@ -3494,21 +3443,6 @@ static void __sched notrace __schedule(b
+               } else {
+                       deactivate_task(rq, prev, DEQUEUE_SLEEP);
+                       prev->on_rq = 0;
+-
+-                      /*
+-                       * If a worker went to sleep, notify and ask workqueue
+-                       * whether it wants to wake up a task to maintain
+-                       * concurrency.
+-                       * Only call wake up if prev isn't blocked on a sleeping
+-                       * spin lock.
+-                       */
+-                      if (prev->flags & PF_WQ_WORKER && !prev->saved_state) {
+-                              struct task_struct *to_wakeup;
+-
+-                              to_wakeup = wq_worker_sleeping(prev);
+-                              if (to_wakeup)
+-                                      try_to_wake_up_local(to_wakeup, cookie);
+-                      }
+               }
+               switch_count = &prev->nvcsw;
+       }
+@@ -3567,6 +3501,14 @@ static inline void sched_submit_work(str
+ {
+       if (!tsk->state || tsk_is_pi_blocked(tsk))
+               return;
++
++      /*
++       * If a worker went to sleep, notify and ask workqueue whether
++       * it wants to wake up a task to maintain concurrency.
++       */
++      if (tsk->flags & PF_WQ_WORKER)
++              wq_worker_sleeping(tsk);
++
+       /*
+        * If we are going to sleep and we have plugged IO queued,
+        * make sure to submit it to avoid deadlocks.
+@@ -3575,6 +3517,12 @@ static inline void sched_submit_work(str
+               blk_schedule_flush_plug(tsk);
+ }
++static void sched_update_worker(struct task_struct *tsk)
++{
++      if (tsk->flags & PF_WQ_WORKER)
++              wq_worker_running(tsk);
++}
++
+ asmlinkage __visible void __sched schedule(void)
+ {
+       struct task_struct *tsk = current;
+@@ -3585,6 +3533,7 @@ asmlinkage __visible void __sched schedu
+               __schedule(false);
+               sched_preempt_enable_no_resched();
+       } while (need_resched());
++      sched_update_worker(tsk);
+ }
+ EXPORT_SYMBOL(schedule);
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -841,43 +841,32 @@ static void wake_up_worker(struct worker
+ }
+ /**
+- * wq_worker_waking_up - a worker is waking up
++ * wq_worker_running - a worker is running again
+  * @task: task waking up
+- * @cpu: CPU @task is waking up to
+  *
+- * This function is called during try_to_wake_up() when a worker is
+- * being awoken.
+- *
+- * CONTEXT:
+- * spin_lock_irq(rq->lock)
++ * This function is called when a worker returns from schedule()
+  */
+-void wq_worker_waking_up(struct task_struct *task, int cpu)
++void wq_worker_running(struct task_struct *task)
+ {
+       struct worker *worker = kthread_data(task);
+-      if (!(worker->flags & WORKER_NOT_RUNNING)) {
+-              WARN_ON_ONCE(worker->pool->cpu != cpu);
++      if (!worker->sleeping)
++              return;
++      if (!(worker->flags & WORKER_NOT_RUNNING))
+               atomic_inc(&worker->pool->nr_running);
+-      }
++      worker->sleeping = 0;
+ }
+ /**
+  * wq_worker_sleeping - a worker is going to sleep
+  * @task: task going to sleep
+  *
+- * This function is called during schedule() when a busy worker is
+- * going to sleep.  Worker on the same cpu can be woken up by
+- * returning pointer to its task.
+- *
+- * CONTEXT:
+- * spin_lock_irq(rq->lock)
+- *
+- * Return:
+- * Worker task on @cpu to wake up, %NULL if none.
++ * This function is called from schedule() when a busy worker is
++ * going to sleep.
+  */
+-struct task_struct *wq_worker_sleeping(struct task_struct *task)
++void wq_worker_sleeping(struct task_struct *task)
+ {
+-      struct worker *worker = kthread_data(task), *to_wakeup = NULL;
++      struct worker *next, *worker = kthread_data(task);
+       struct worker_pool *pool;
+       /*
+@@ -886,13 +875,15 @@ struct task_struct *wq_worker_sleeping(s
+        * checking NOT_RUNNING.
+        */
+       if (worker->flags & WORKER_NOT_RUNNING)
+-              return NULL;
++              return;
+       pool = worker->pool;
+-      /* this can only happen on the local cpu */
+-      if (WARN_ON_ONCE(pool->cpu != raw_smp_processor_id()))
+-              return NULL;
++      if (WARN_ON_ONCE(worker->sleeping))
++              return;
++
++      worker->sleeping = 1;
++      spin_lock_irq(&pool->lock);
+       /*
+        * The counterpart of the following dec_and_test, implied mb,
+@@ -906,9 +897,12 @@ struct task_struct *wq_worker_sleeping(s
+        * lock is safe.
+        */
+       if (atomic_dec_and_test(&pool->nr_running) &&
+-          !list_empty(&pool->worklist))
+-              to_wakeup = first_idle_worker(pool);
+-      return to_wakeup ? to_wakeup->task : NULL;
++          !list_empty(&pool->worklist)) {
++              next = first_idle_worker(pool);
++              if (next)
++                      wake_up_process(next->task);
++      }
++      spin_unlock_irq(&pool->lock);
+ }
+ /**
+--- a/kernel/workqueue_internal.h
++++ b/kernel/workqueue_internal.h
+@@ -43,6 +43,7 @@ struct worker {
+       unsigned long           last_active;    /* L: last active timestamp */
+       unsigned int            flags;          /* X: flags */
+       int                     id;             /* I: worker id */
++      int                     sleeping;       /* None */
+       /*
+        * Opaque string set with work_set_desc().  Printed out with task
+@@ -68,7 +69,7 @@ static inline struct worker *current_wq_
+  * Scheduler hooks for concurrency managed workqueue.  Only to be used from
+  * sched/core.c and workqueue.c.
+  */
+-void wq_worker_waking_up(struct task_struct *task, int cpu);
+-struct task_struct *wq_worker_sleeping(struct task_struct *task);
++void wq_worker_running(struct task_struct *task);
++void wq_worker_sleeping(struct task_struct *task);
+ #endif /* _KERNEL_WORKQUEUE_INTERNAL_H */
diff --git a/patches/features/all/rt/workqueue-prevent-deadlock-stall.patch b/patches/features/all/rt/workqueue-prevent-deadlock-stall.patch
new file mode 100644 (file)
index 0000000..b733f99
--- /dev/null
@@ -0,0 +1,201 @@
+Subject: workqueue: Prevent deadlock/stall on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 27 Jun 2014 16:24:52 +0200 (CEST)
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Austin reported a XFS deadlock/stall on RT where scheduled work gets
+never exececuted and tasks are waiting for each other for ever.
+
+The underlying problem is the modification of the RT code to the
+handling of workers which are about to go to sleep. In mainline a
+worker thread which goes to sleep wakes an idle worker if there is
+more work to do. This happens from the guts of the schedule()
+function. On RT this must be outside and the accessed data structures
+are not protected against scheduling due to the spinlock to rtmutex
+conversion. So the naive solution to this was to move the code outside
+of the scheduler and protect the data structures by the pool
+lock. That approach turned out to be a little naive as we cannot call
+into that code when the thread blocks on a lock, as it is not allowed
+to block on two locks in parallel. So we dont call into the worker
+wakeup magic when the worker is blocked on a lock, which causes the
+deadlock/stall observed by Austin and Mike.
+
+Looking deeper into that worker code it turns out that the only
+relevant data structure which needs to be protected is the list of
+idle workers which can be woken up.
+
+So the solution is to protect the list manipulation operations with
+preempt_enable/disable pairs on RT and call unconditionally into the
+worker code even when the worker is blocked on a lock. The preemption
+protection is safe as there is nothing which can fiddle with the list
+outside of thread context.
+
+Reported-and_tested-by: Austin Schuh <austin@peloton-tech.com>
+Reported-and_tested-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Link: http://vger.kernel.org/r/alpine.DEB.2.10.1406271249510.5170@nanos
+Cc: Richard Weinberger <richard.weinberger@gmail.com>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+
+---
+ kernel/sched/core.c |    7 ++++--
+ kernel/workqueue.c  |   60 ++++++++++++++++++++++++++++++++++++++++------------
+ 2 files changed, 52 insertions(+), 15 deletions(-)
+
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -3615,9 +3615,8 @@ void __noreturn do_task_dead(void)
+ static inline void sched_submit_work(struct task_struct *tsk)
+ {
+-      if (!tsk->state || tsk_is_pi_blocked(tsk))
++      if (!tsk->state)
+               return;
+-
+       /*
+        * If a worker went to sleep, notify and ask workqueue whether
+        * it wants to wake up a task to maintain concurrency.
+@@ -3625,6 +3624,10 @@ static inline void sched_submit_work(str
+       if (tsk->flags & PF_WQ_WORKER)
+               wq_worker_sleeping(tsk);
++
++      if (tsk_is_pi_blocked(tsk))
++              return;
++
+       /*
+        * If we are going to sleep and we have plugged IO queued,
+        * make sure to submit it to avoid deadlocks.
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -123,6 +123,11 @@ enum {
+  *    cpu or grabbing pool->lock is enough for read access.  If
+  *    POOL_DISASSOCIATED is set, it's identical to L.
+  *
++ *    On RT we need the extra protection via rt_lock_idle_list() for
++ *    the list manipulations against read access from
++ *    wq_worker_sleeping(). All other places are nicely serialized via
++ *    pool->lock.
++ *
+  * A: pool->attach_mutex protected.
+  *
+  * PL: wq_pool_mutex protected.
+@@ -428,6 +433,31 @@ static void workqueue_sysfs_unregister(s
+               if (({ assert_rcu_or_wq_mutex(wq); false; })) { }       \
+               else
++#ifdef CONFIG_PREEMPT_RT_BASE
++static inline void rt_lock_idle_list(struct worker_pool *pool)
++{
++      preempt_disable();
++}
++static inline void rt_unlock_idle_list(struct worker_pool *pool)
++{
++      preempt_enable();
++}
++static inline void sched_lock_idle_list(struct worker_pool *pool) { }
++static inline void sched_unlock_idle_list(struct worker_pool *pool) { }
++#else
++static inline void rt_lock_idle_list(struct worker_pool *pool) { }
++static inline void rt_unlock_idle_list(struct worker_pool *pool) { }
++static inline void sched_lock_idle_list(struct worker_pool *pool)
++{
++      spin_lock_irq(&pool->lock);
++}
++static inline void sched_unlock_idle_list(struct worker_pool *pool)
++{
++      spin_unlock_irq(&pool->lock);
++}
++#endif
++
++
+ #ifdef CONFIG_DEBUG_OBJECTS_WORK
+ static struct debug_obj_descr work_debug_descr;
+@@ -834,10 +864,16 @@ static struct worker *first_idle_worker(
+  */
+ static void wake_up_worker(struct worker_pool *pool)
+ {
+-      struct worker *worker = first_idle_worker(pool);
++      struct worker *worker;
++
++      rt_lock_idle_list(pool);
++
++      worker = first_idle_worker(pool);
+       if (likely(worker))
+               wake_up_process(worker->task);
++
++      rt_unlock_idle_list(pool);
+ }
+ /**
+@@ -866,7 +902,7 @@ void wq_worker_running(struct task_struc
+  */
+ void wq_worker_sleeping(struct task_struct *task)
+ {
+-      struct worker *next, *worker = kthread_data(task);
++      struct worker *worker = kthread_data(task);
+       struct worker_pool *pool;
+       /*
+@@ -883,26 +919,18 @@ void wq_worker_sleeping(struct task_stru
+               return;
+       worker->sleeping = 1;
+-      spin_lock_irq(&pool->lock);
+       /*
+        * The counterpart of the following dec_and_test, implied mb,
+        * worklist not empty test sequence is in insert_work().
+        * Please read comment there.
+-       *
+-       * NOT_RUNNING is clear.  This means that we're bound to and
+-       * running on the local cpu w/ rq lock held and preemption
+-       * disabled, which in turn means that none else could be
+-       * manipulating idle_list, so dereferencing idle_list without pool
+-       * lock is safe.
+        */
+       if (atomic_dec_and_test(&pool->nr_running) &&
+           !list_empty(&pool->worklist)) {
+-              next = first_idle_worker(pool);
+-              if (next)
+-                      wake_up_process(next->task);
++              sched_lock_idle_list(pool);
++              wake_up_worker(pool);
++              sched_unlock_idle_list(pool);
+       }
+-      spin_unlock_irq(&pool->lock);
+ }
+ /**
+@@ -1631,7 +1659,9 @@ static void worker_enter_idle(struct wor
+       worker->last_active = jiffies;
+       /* idle_list is LIFO */
++      rt_lock_idle_list(pool);
+       list_add(&worker->entry, &pool->idle_list);
++      rt_unlock_idle_list(pool);
+       if (too_many_workers(pool) && !timer_pending(&pool->idle_timer))
+               mod_timer(&pool->idle_timer, jiffies + IDLE_WORKER_TIMEOUT);
+@@ -1664,7 +1694,9 @@ static void worker_leave_idle(struct wor
+               return;
+       worker_clr_flags(worker, WORKER_IDLE);
+       pool->nr_idle--;
++      rt_lock_idle_list(pool);
+       list_del_init(&worker->entry);
++      rt_unlock_idle_list(pool);
+ }
+ static struct worker *alloc_worker(int node)
+@@ -1830,7 +1862,9 @@ static void destroy_worker(struct worker
+       pool->nr_workers--;
+       pool->nr_idle--;
++      rt_lock_idle_list(pool);
+       list_del_init(&worker->entry);
++      rt_unlock_idle_list(pool);
+       worker->flags |= WORKER_DIE;
+       wake_up_process(worker->task);
+ }
diff --git a/patches/features/all/rt/workqueue-use-locallock.patch b/patches/features/all/rt/workqueue-use-locallock.patch
new file mode 100644 (file)
index 0000000..42e748e
--- /dev/null
@@ -0,0 +1,147 @@
+Subject: workqueue: Use local irq lock instead of irq disable regions
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 17 Jul 2011 21:42:26 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Use a local_irq_lock as a replacement for irq off regions. We keep the
+semantic of irq-off in regard to the pool->lock and remain preemptible.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/workqueue.c |   33 +++++++++++++++++++--------------
+ 1 file changed, 19 insertions(+), 14 deletions(-)
+
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -48,6 +48,7 @@
+ #include <linux/nodemask.h>
+ #include <linux/moduleparam.h>
+ #include <linux/uaccess.h>
++#include <linux/locallock.h>
+ #include "workqueue_internal.h"
+@@ -348,6 +349,8 @@ EXPORT_SYMBOL_GPL(system_power_efficient
+ struct workqueue_struct *system_freezable_power_efficient_wq __read_mostly;
+ EXPORT_SYMBOL_GPL(system_freezable_power_efficient_wq);
++static DEFINE_LOCAL_IRQ_LOCK(pendingb_lock);
++
+ static int worker_thread(void *__worker);
+ static void workqueue_sysfs_unregister(struct workqueue_struct *wq);
+@@ -1101,9 +1104,11 @@ static void put_pwq_unlocked(struct pool
+                * As both pwqs and pools are RCU protected, the
+                * following lock operations are safe.
+                */
+-              spin_lock_irq(&pwq->pool->lock);
++              rcu_read_lock();
++              local_spin_lock_irq(pendingb_lock, &pwq->pool->lock);
+               put_pwq(pwq);
+-              spin_unlock_irq(&pwq->pool->lock);
++              local_spin_unlock_irq(pendingb_lock, &pwq->pool->lock);
++              rcu_read_unlock();
+       }
+ }
+@@ -1207,7 +1212,7 @@ static int try_to_grab_pending(struct wo
+       struct worker_pool *pool;
+       struct pool_workqueue *pwq;
+-      local_irq_save(*flags);
++      local_lock_irqsave(pendingb_lock, *flags);
+       /* try to steal the timer if it exists */
+       if (is_dwork) {
+@@ -1271,7 +1276,7 @@ static int try_to_grab_pending(struct wo
+       spin_unlock(&pool->lock);
+ fail:
+       rcu_read_unlock();
+-      local_irq_restore(*flags);
++      local_unlock_irqrestore(pendingb_lock, *flags);
+       if (work_is_canceling(work))
+               return -ENOENT;
+       cpu_relax();
+@@ -1376,7 +1381,7 @@ static void __queue_work(int cpu, struct
+        * queued or lose PENDING.  Grabbing PENDING and queueing should
+        * happen with IRQ disabled.
+        */
+-      WARN_ON_ONCE(!irqs_disabled());
++      WARN_ON_ONCE_NONRT(!irqs_disabled());
+       debug_work_activate(work);
+@@ -1482,14 +1487,14 @@ bool queue_work_on(int cpu, struct workq
+       bool ret = false;
+       unsigned long flags;
+-      local_irq_save(flags);
++      local_lock_irqsave(pendingb_lock,flags);
+       if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) {
+               __queue_work(cpu, wq, work);
+               ret = true;
+       }
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pendingb_lock, flags);
+       return ret;
+ }
+ EXPORT_SYMBOL(queue_work_on);
+@@ -1556,14 +1561,14 @@ bool queue_delayed_work_on(int cpu, stru
+       unsigned long flags;
+       /* read the comment in __queue_work() */
+-      local_irq_save(flags);
++      local_lock_irqsave(pendingb_lock, flags);
+       if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) {
+               __queue_delayed_work(cpu, wq, dwork, delay);
+               ret = true;
+       }
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pendingb_lock, flags);
+       return ret;
+ }
+ EXPORT_SYMBOL(queue_delayed_work_on);
+@@ -1598,7 +1603,7 @@ bool mod_delayed_work_on(int cpu, struct
+       if (likely(ret >= 0)) {
+               __queue_delayed_work(cpu, wq, dwork, delay);
+-              local_irq_restore(flags);
++              local_unlock_irqrestore(pendingb_lock, flags);
+       }
+       /* -ENOENT from try_to_grab_pending() becomes %true */
+@@ -2916,7 +2921,7 @@ static bool __cancel_work_timer(struct w
+       /* tell other tasks trying to grab @work to back off */
+       mark_work_canceling(work);
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pendingb_lock, flags);
+       flush_work(work);
+       clear_work_data(work);
+@@ -2971,10 +2976,10 @@ EXPORT_SYMBOL_GPL(cancel_work_sync);
+  */
+ bool flush_delayed_work(struct delayed_work *dwork)
+ {
+-      local_irq_disable();
++      local_lock_irq(pendingb_lock);
+       if (del_timer_sync(&dwork->timer))
+               __queue_work(dwork->cpu, dwork->wq, &dwork->work);
+-      local_irq_enable();
++      local_unlock_irq(pendingb_lock);
+       return flush_work(&dwork->work);
+ }
+ EXPORT_SYMBOL(flush_delayed_work);
+@@ -2992,7 +2997,7 @@ static bool __cancel_work(struct work_st
+               return false;
+       set_work_pool_and_clear_pending(work, get_work_pool_id(work));
+-      local_irq_restore(flags);
++      local_unlock_irqrestore(pendingb_lock, flags);
+       return ret;
+ }
diff --git a/patches/features/all/rt/workqueue-use-rcu.patch b/patches/features/all/rt/workqueue-use-rcu.patch
new file mode 100644 (file)
index 0000000..fadfb72
--- /dev/null
@@ -0,0 +1,354 @@
+Subject: workqueue: Use normal rcu
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 24 Jul 2013 15:26:54 +0200
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+There is no need for sched_rcu. The undocumented reason why sched_rcu
+is used is to avoid a few explicit rcu_read_lock()/unlock() pairs by
+abusing the fact that sched_rcu reader side critical sections are also
+protected by preempt or irq disabled regions.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/workqueue.c |   95 +++++++++++++++++++++++++++++------------------------
+ 1 file changed, 52 insertions(+), 43 deletions(-)
+
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -125,7 +125,7 @@ enum {
+  *
+  * PL: wq_pool_mutex protected.
+  *
+- * PR: wq_pool_mutex protected for writes.  Sched-RCU protected for reads.
++ * PR: wq_pool_mutex protected for writes.  RCU protected for reads.
+  *
+  * PW: wq_pool_mutex and wq->mutex protected for writes.  Either for reads.
+  *
+@@ -134,7 +134,7 @@ enum {
+  *
+  * WQ: wq->mutex protected.
+  *
+- * WR: wq->mutex protected for writes.  Sched-RCU protected for reads.
++ * WR: wq->mutex protected for writes.  RCU protected for reads.
+  *
+  * MD: wq_mayday_lock protected.
+  */
+@@ -185,7 +185,7 @@ struct worker_pool {
+       atomic_t                nr_running ____cacheline_aligned_in_smp;
+       /*
+-       * Destruction of pool is sched-RCU protected to allow dereferences
++       * Destruction of pool is RCU protected to allow dereferences
+        * from get_work_pool().
+        */
+       struct rcu_head         rcu;
+@@ -214,7 +214,7 @@ struct pool_workqueue {
+       /*
+        * Release of unbound pwq is punted to system_wq.  See put_pwq()
+        * and pwq_unbound_release_workfn() for details.  pool_workqueue
+-       * itself is also sched-RCU protected so that the first pwq can be
++       * itself is also RCU protected so that the first pwq can be
+        * determined without grabbing wq->mutex.
+        */
+       struct work_struct      unbound_release_work;
+@@ -355,20 +355,20 @@ static void workqueue_sysfs_unregister(s
+ #include <trace/events/workqueue.h>
+ #define assert_rcu_or_pool_mutex()                                    \
+-      RCU_LOCKDEP_WARN(!rcu_read_lock_sched_held() &&                 \
++      RCU_LOCKDEP_WARN(!rcu_read_lock_held() &&                       \
+                        !lockdep_is_held(&wq_pool_mutex),              \
+-                       "sched RCU or wq_pool_mutex should be held")
++                       "RCU or wq_pool_mutex should be held")
+ #define assert_rcu_or_wq_mutex(wq)                                    \
+-      RCU_LOCKDEP_WARN(!rcu_read_lock_sched_held() &&                 \
++      RCU_LOCKDEP_WARN(!rcu_read_lock_held() &&                       \
+                        !lockdep_is_held(&wq->mutex),                  \
+-                       "sched RCU or wq->mutex should be held")
++                       "RCU or wq->mutex should be held")
+ #define assert_rcu_or_wq_mutex_or_pool_mutex(wq)                      \
+-      RCU_LOCKDEP_WARN(!rcu_read_lock_sched_held() &&                 \
++      RCU_LOCKDEP_WARN(!rcu_read_lock_held() &&                       \
+                        !lockdep_is_held(&wq->mutex) &&                \
+                        !lockdep_is_held(&wq_pool_mutex),              \
+-                       "sched RCU, wq->mutex or wq_pool_mutex should be held")
++                       "RCU, wq->mutex or wq_pool_mutex should be held")
+ #define for_each_cpu_worker_pool(pool, cpu)                           \
+       for ((pool) = &per_cpu(cpu_worker_pools, cpu)[0];               \
+@@ -380,7 +380,7 @@ static void workqueue_sysfs_unregister(s
+  * @pool: iteration cursor
+  * @pi: integer used for iteration
+  *
+- * This must be called either with wq_pool_mutex held or sched RCU read
++ * This must be called either with wq_pool_mutex held or RCU read
+  * locked.  If the pool needs to be used beyond the locking in effect, the
+  * caller is responsible for guaranteeing that the pool stays online.
+  *
+@@ -412,7 +412,7 @@ static void workqueue_sysfs_unregister(s
+  * @pwq: iteration cursor
+  * @wq: the target workqueue
+  *
+- * This must be called either with wq->mutex held or sched RCU read locked.
++ * This must be called either with wq->mutex held or RCU read locked.
+  * If the pwq needs to be used beyond the locking in effect, the caller is
+  * responsible for guaranteeing that the pwq stays online.
+  *
+@@ -548,7 +548,7 @@ static int worker_pool_assign_id(struct
+  * @wq: the target workqueue
+  * @node: the node ID
+  *
+- * This must be called with any of wq_pool_mutex, wq->mutex or sched RCU
++ * This must be called with any of wq_pool_mutex, wq->mutex or RCU
+  * read locked.
+  * If the pwq needs to be used beyond the locking in effect, the caller is
+  * responsible for guaranteeing that the pwq stays online.
+@@ -692,8 +692,8 @@ static struct pool_workqueue *get_work_p
+  * @work: the work item of interest
+  *
+  * Pools are created and destroyed under wq_pool_mutex, and allows read
+- * access under sched-RCU read lock.  As such, this function should be
+- * called under wq_pool_mutex or with preemption disabled.
++ * access under RCU read lock.  As such, this function should be
++ * called under wq_pool_mutex or inside of a rcu_read_lock() region.
+  *
+  * All fields of the returned pool are accessible as long as the above
+  * mentioned locking is in effect.  If the returned pool needs to be used
+@@ -1098,7 +1098,7 @@ static void put_pwq_unlocked(struct pool
+ {
+       if (pwq) {
+               /*
+-               * As both pwqs and pools are sched-RCU protected, the
++               * As both pwqs and pools are RCU protected, the
+                * following lock operations are safe.
+                */
+               spin_lock_irq(&pwq->pool->lock);
+@@ -1226,6 +1226,7 @@ static int try_to_grab_pending(struct wo
+       if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)))
+               return 0;
++      rcu_read_lock();
+       /*
+        * The queueing is in progress, or it is already queued. Try to
+        * steal it from ->worklist without clearing WORK_STRUCT_PENDING.
+@@ -1264,10 +1265,12 @@ static int try_to_grab_pending(struct wo
+               set_work_pool_and_keep_pending(work, pool->id);
+               spin_unlock(&pool->lock);
++              rcu_read_unlock();
+               return 1;
+       }
+       spin_unlock(&pool->lock);
+ fail:
++      rcu_read_unlock();
+       local_irq_restore(*flags);
+       if (work_is_canceling(work))
+               return -ENOENT;
+@@ -1381,6 +1384,7 @@ static void __queue_work(int cpu, struct
+       if (unlikely(wq->flags & __WQ_DRAINING) &&
+           WARN_ON_ONCE(!is_chained_work(wq)))
+               return;
++      rcu_read_lock();
+ retry:
+       if (req_cpu == WORK_CPU_UNBOUND)
+               cpu = wq_select_unbound_cpu(raw_smp_processor_id());
+@@ -1437,10 +1441,8 @@ static void __queue_work(int cpu, struct
+       /* pwq determined, queue */
+       trace_workqueue_queue_work(req_cpu, pwq, work);
+-      if (WARN_ON(!list_empty(&work->entry))) {
+-              spin_unlock(&pwq->pool->lock);
+-              return;
+-      }
++      if (WARN_ON(!list_empty(&work->entry)))
++              goto out;
+       pwq->nr_in_flight[pwq->work_color]++;
+       work_flags = work_color_to_flags(pwq->work_color);
+@@ -1458,7 +1460,9 @@ static void __queue_work(int cpu, struct
+       insert_work(pwq, work, worklist, work_flags);
++out:
+       spin_unlock(&pwq->pool->lock);
++      rcu_read_unlock();
+ }
+ /**
+@@ -2785,14 +2789,14 @@ static bool start_flush_work(struct work
+       might_sleep();
+-      local_irq_disable();
++      rcu_read_lock();
+       pool = get_work_pool(work);
+       if (!pool) {
+-              local_irq_enable();
++              rcu_read_unlock();
+               return false;
+       }
+-      spin_lock(&pool->lock);
++      spin_lock_irq(&pool->lock);
+       /* see the comment in try_to_grab_pending() with the same code */
+       pwq = get_work_pwq(work);
+       if (pwq) {
+@@ -2821,10 +2825,11 @@ static bool start_flush_work(struct work
+       else
+               lock_map_acquire_read(&pwq->wq->lockdep_map);
+       lock_map_release(&pwq->wq->lockdep_map);
+-
++      rcu_read_unlock();
+       return true;
+ already_gone:
+       spin_unlock_irq(&pool->lock);
++      rcu_read_unlock();
+       return false;
+ }
+@@ -3245,7 +3250,7 @@ static void rcu_free_pool(struct rcu_hea
+  * put_unbound_pool - put a worker_pool
+  * @pool: worker_pool to put
+  *
+- * Put @pool.  If its refcnt reaches zero, it gets destroyed in sched-RCU
++ * Put @pool.  If its refcnt reaches zero, it gets destroyed in RCU
+  * safe manner.  get_unbound_pool() calls this function on its failure path
+  * and this function should be able to release pools which went through,
+  * successfully or not, init_worker_pool().
+@@ -3299,8 +3304,8 @@ static void put_unbound_pool(struct work
+       del_timer_sync(&pool->idle_timer);
+       del_timer_sync(&pool->mayday_timer);
+-      /* sched-RCU protected to allow dereferences from get_work_pool() */
+-      call_rcu_sched(&pool->rcu, rcu_free_pool);
++      /* RCU protected to allow dereferences from get_work_pool() */
++      call_rcu(&pool->rcu, rcu_free_pool);
+ }
+ /**
+@@ -3407,14 +3412,14 @@ static void pwq_unbound_release_workfn(s
+       put_unbound_pool(pool);
+       mutex_unlock(&wq_pool_mutex);
+-      call_rcu_sched(&pwq->rcu, rcu_free_pwq);
++      call_rcu(&pwq->rcu, rcu_free_pwq);
+       /*
+        * If we're the last pwq going away, @wq is already dead and no one
+        * is gonna access it anymore.  Schedule RCU free.
+        */
+       if (is_last)
+-              call_rcu_sched(&wq->rcu, rcu_free_wq);
++              call_rcu(&wq->rcu, rcu_free_wq);
+ }
+ /**
+@@ -4064,7 +4069,7 @@ void destroy_workqueue(struct workqueue_
+                * The base ref is never dropped on per-cpu pwqs.  Directly
+                * schedule RCU free.
+                */
+-              call_rcu_sched(&wq->rcu, rcu_free_wq);
++              call_rcu(&wq->rcu, rcu_free_wq);
+       } else {
+               /*
+                * We're the sole accessor of @wq at this point.  Directly
+@@ -4157,7 +4162,8 @@ bool workqueue_congested(int cpu, struct
+       struct pool_workqueue *pwq;
+       bool ret;
+-      rcu_read_lock_sched();
++      rcu_read_lock();
++      preempt_disable();
+       if (cpu == WORK_CPU_UNBOUND)
+               cpu = smp_processor_id();
+@@ -4168,7 +4174,8 @@ bool workqueue_congested(int cpu, struct
+               pwq = unbound_pwq_by_node(wq, cpu_to_node(cpu));
+       ret = !list_empty(&pwq->delayed_works);
+-      rcu_read_unlock_sched();
++      preempt_enable();
++      rcu_read_unlock();
+       return ret;
+ }
+@@ -4194,15 +4201,15 @@ unsigned int work_busy(struct work_struc
+       if (work_pending(work))
+               ret |= WORK_BUSY_PENDING;
+-      local_irq_save(flags);
++      rcu_read_lock();
+       pool = get_work_pool(work);
+       if (pool) {
+-              spin_lock(&pool->lock);
++              spin_lock_irqsave(&pool->lock, flags);
+               if (find_worker_executing_work(pool, work))
+                       ret |= WORK_BUSY_RUNNING;
+-              spin_unlock(&pool->lock);
++              spin_unlock_irqrestore(&pool->lock, flags);
+       }
+-      local_irq_restore(flags);
++      rcu_read_unlock();
+       return ret;
+ }
+@@ -4391,7 +4398,7 @@ void show_workqueue_state(void)
+       unsigned long flags;
+       int pi;
+-      rcu_read_lock_sched();
++      rcu_read_lock();
+       pr_info("Showing busy workqueues and worker pools:\n");
+@@ -4444,7 +4451,7 @@ void show_workqueue_state(void)
+               spin_unlock_irqrestore(&pool->lock, flags);
+       }
+-      rcu_read_unlock_sched();
++      rcu_read_unlock();
+ }
+ /*
+@@ -4782,16 +4789,16 @@ bool freeze_workqueues_busy(void)
+                * nr_active is monotonically decreasing.  It's safe
+                * to peek without lock.
+                */
+-              rcu_read_lock_sched();
++              rcu_read_lock();
+               for_each_pwq(pwq, wq) {
+                       WARN_ON_ONCE(pwq->nr_active < 0);
+                       if (pwq->nr_active) {
+                               busy = true;
+-                              rcu_read_unlock_sched();
++                              rcu_read_unlock();
+                               goto out_unlock;
+                       }
+               }
+-              rcu_read_unlock_sched();
++              rcu_read_unlock();
+       }
+ out_unlock:
+       mutex_unlock(&wq_pool_mutex);
+@@ -4981,7 +4988,8 @@ static ssize_t wq_pool_ids_show(struct d
+       const char *delim = "";
+       int node, written = 0;
+-      rcu_read_lock_sched();
++      get_online_cpus();
++      rcu_read_lock();
+       for_each_node(node) {
+               written += scnprintf(buf + written, PAGE_SIZE - written,
+                                    "%s%d:%d", delim, node,
+@@ -4989,7 +4997,8 @@ static ssize_t wq_pool_ids_show(struct d
+               delim = " ";
+       }
+       written += scnprintf(buf + written, PAGE_SIZE - written, "\n");
+-      rcu_read_unlock_sched();
++      rcu_read_unlock();
++      put_online_cpus();
+       return written;
+ }
diff --git a/patches/features/all/rt/x86-UV-raw_spinlock-conversion.patch b/patches/features/all/rt/x86-UV-raw_spinlock-conversion.patch
new file mode 100644 (file)
index 0000000..32254ba
--- /dev/null
@@ -0,0 +1,221 @@
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sun, 2 Nov 2014 08:31:37 +0100
+Subject: x86: UV: raw_spinlock conversion
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Shrug.  Lots of hobbyists have a beast in their basement, right?
+
+
+Signed-off-by: Mike Galbraith <mgalbraith@suse.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/x86/include/asm/uv/uv_bau.h |   14 +++++++-------
+ arch/x86/platform/uv/tlb_uv.c    |   26 +++++++++++++-------------
+ arch/x86/platform/uv/uv_time.c   |   21 +++++++++++++--------
+ 3 files changed, 33 insertions(+), 28 deletions(-)
+
+--- a/arch/x86/include/asm/uv/uv_bau.h
++++ b/arch/x86/include/asm/uv/uv_bau.h
+@@ -624,9 +624,9 @@ struct bau_control {
+       cycles_t                send_message;
+       cycles_t                period_end;
+       cycles_t                period_time;
+-      spinlock_t              uvhub_lock;
+-      spinlock_t              queue_lock;
+-      spinlock_t              disable_lock;
++      raw_spinlock_t          uvhub_lock;
++      raw_spinlock_t          queue_lock;
++      raw_spinlock_t          disable_lock;
+       /* tunables */
+       int                     max_concurr;
+       int                     max_concurr_const;
+@@ -815,15 +815,15 @@ static inline int atom_asr(short i, stru
+  * to be lowered below the current 'v'.  atomic_add_unless can only stop
+  * on equal.
+  */
+-static inline int atomic_inc_unless_ge(spinlock_t *lock, atomic_t *v, int u)
++static inline int atomic_inc_unless_ge(raw_spinlock_t *lock, atomic_t *v, int u)
+ {
+-      spin_lock(lock);
++      raw_spin_lock(lock);
+       if (atomic_read(v) >= u) {
+-              spin_unlock(lock);
++              raw_spin_unlock(lock);
+               return 0;
+       }
+       atomic_inc(v);
+-      spin_unlock(lock);
++      raw_spin_unlock(lock);
+       return 1;
+ }
+--- a/arch/x86/platform/uv/tlb_uv.c
++++ b/arch/x86/platform/uv/tlb_uv.c
+@@ -748,9 +748,9 @@ static void destination_plugged(struct b
+               quiesce_local_uvhub(hmaster);
+-              spin_lock(&hmaster->queue_lock);
++              raw_spin_lock(&hmaster->queue_lock);
+               reset_with_ipi(&bau_desc->distribution, bcp);
+-              spin_unlock(&hmaster->queue_lock);
++              raw_spin_unlock(&hmaster->queue_lock);
+               end_uvhub_quiesce(hmaster);
+@@ -770,9 +770,9 @@ static void destination_timeout(struct b
+               quiesce_local_uvhub(hmaster);
+-              spin_lock(&hmaster->queue_lock);
++              raw_spin_lock(&hmaster->queue_lock);
+               reset_with_ipi(&bau_desc->distribution, bcp);
+-              spin_unlock(&hmaster->queue_lock);
++              raw_spin_unlock(&hmaster->queue_lock);
+               end_uvhub_quiesce(hmaster);
+@@ -793,7 +793,7 @@ static void disable_for_period(struct ba
+       cycles_t tm1;
+       hmaster = bcp->uvhub_master;
+-      spin_lock(&hmaster->disable_lock);
++      raw_spin_lock(&hmaster->disable_lock);
+       if (!bcp->baudisabled) {
+               stat->s_bau_disabled++;
+               tm1 = get_cycles();
+@@ -806,7 +806,7 @@ static void disable_for_period(struct ba
+                       }
+               }
+       }
+-      spin_unlock(&hmaster->disable_lock);
++      raw_spin_unlock(&hmaster->disable_lock);
+ }
+ static void count_max_concurr(int stat, struct bau_control *bcp,
+@@ -869,7 +869,7 @@ static void record_send_stats(cycles_t t
+  */
+ static void uv1_throttle(struct bau_control *hmaster, struct ptc_stats *stat)
+ {
+-      spinlock_t *lock = &hmaster->uvhub_lock;
++      raw_spinlock_t *lock = &hmaster->uvhub_lock;
+       atomic_t *v;
+       v = &hmaster->active_descriptor_count;
+@@ -1002,7 +1002,7 @@ static int check_enable(struct bau_contr
+       struct bau_control *hmaster;
+       hmaster = bcp->uvhub_master;
+-      spin_lock(&hmaster->disable_lock);
++      raw_spin_lock(&hmaster->disable_lock);
+       if (bcp->baudisabled && (get_cycles() >= bcp->set_bau_on_time)) {
+               stat->s_bau_reenabled++;
+               for_each_present_cpu(tcpu) {
+@@ -1014,10 +1014,10 @@ static int check_enable(struct bau_contr
+                               tbcp->period_giveups = 0;
+                       }
+               }
+-              spin_unlock(&hmaster->disable_lock);
++              raw_spin_unlock(&hmaster->disable_lock);
+               return 0;
+       }
+-      spin_unlock(&hmaster->disable_lock);
++      raw_spin_unlock(&hmaster->disable_lock);
+       return -1;
+ }
+@@ -1940,9 +1940,9 @@ static void __init init_per_cpu_tunables
+               bcp->cong_reps                  = congested_reps;
+               bcp->disabled_period            = sec_2_cycles(disabled_period);
+               bcp->giveup_limit               = giveup_limit;
+-              spin_lock_init(&bcp->queue_lock);
+-              spin_lock_init(&bcp->uvhub_lock);
+-              spin_lock_init(&bcp->disable_lock);
++              raw_spin_lock_init(&bcp->queue_lock);
++              raw_spin_lock_init(&bcp->uvhub_lock);
++              raw_spin_lock_init(&bcp->disable_lock);
+       }
+ }
+--- a/arch/x86/platform/uv/uv_time.c
++++ b/arch/x86/platform/uv/uv_time.c
+@@ -57,7 +57,7 @@ static DEFINE_PER_CPU(struct clock_event
+ /* There is one of these allocated per node */
+ struct uv_rtc_timer_head {
+-      spinlock_t      lock;
++      raw_spinlock_t  lock;
+       /* next cpu waiting for timer, local node relative: */
+       int             next_cpu;
+       /* number of cpus on this node: */
+@@ -177,7 +177,7 @@ static __init int uv_rtc_allocate_timers
+                               uv_rtc_deallocate_timers();
+                               return -ENOMEM;
+                       }
+-                      spin_lock_init(&head->lock);
++                      raw_spin_lock_init(&head->lock);
+                       head->ncpus = uv_blade_nr_possible_cpus(bid);
+                       head->next_cpu = -1;
+                       blade_info[bid] = head;
+@@ -231,7 +231,7 @@ static int uv_rtc_set_timer(int cpu, u64
+       unsigned long flags;
+       int next_cpu;
+-      spin_lock_irqsave(&head->lock, flags);
++      raw_spin_lock_irqsave(&head->lock, flags);
+       next_cpu = head->next_cpu;
+       *t = expires;
+@@ -243,12 +243,12 @@ static int uv_rtc_set_timer(int cpu, u64
+               if (uv_setup_intr(cpu, expires)) {
+                       *t = ULLONG_MAX;
+                       uv_rtc_find_next_timer(head, pnode);
+-                      spin_unlock_irqrestore(&head->lock, flags);
++                      raw_spin_unlock_irqrestore(&head->lock, flags);
+                       return -ETIME;
+               }
+       }
+-      spin_unlock_irqrestore(&head->lock, flags);
++      raw_spin_unlock_irqrestore(&head->lock, flags);
+       return 0;
+ }
+@@ -267,7 +267,7 @@ static int uv_rtc_unset_timer(int cpu, i
+       unsigned long flags;
+       int rc = 0;
+-      spin_lock_irqsave(&head->lock, flags);
++      raw_spin_lock_irqsave(&head->lock, flags);
+       if ((head->next_cpu == bcpu && uv_read_rtc(NULL) >= *t) || force)
+               rc = 1;
+@@ -279,7 +279,7 @@ static int uv_rtc_unset_timer(int cpu, i
+                       uv_rtc_find_next_timer(head, pnode);
+       }
+-      spin_unlock_irqrestore(&head->lock, flags);
++      raw_spin_unlock_irqrestore(&head->lock, flags);
+       return rc;
+ }
+@@ -299,13 +299,18 @@ static int uv_rtc_unset_timer(int cpu, i
+ static cycle_t uv_read_rtc(struct clocksource *cs)
+ {
+       unsigned long offset;
++      cycle_t cycles;
++      preempt_disable();
+       if (uv_get_min_hub_revision_id() == 1)
+               offset = 0;
+       else
+               offset = (uv_blade_processor_id() * L1_CACHE_BYTES) % PAGE_SIZE;
+-      return (cycle_t)uv_read_local_mmr(UVH_RTC | offset);
++      cycles = (cycle_t)uv_read_local_mmr(UVH_RTC | offset);
++      preempt_enable();
++
++      return cycles;
+ }
+ /*
diff --git a/patches/features/all/rt/x86-apic-get-rid-of-warning-acpi_ioapic_lock-defined.patch b/patches/features/all/rt/x86-apic-get-rid-of-warning-acpi_ioapic_lock-defined.patch
new file mode 100644 (file)
index 0000000..929568d
--- /dev/null
@@ -0,0 +1,44 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 21 Oct 2016 10:29:11 +0200
+Subject: [PATCH] x86/apic: get rid of "warning: 'acpi_ioapic_lock' defined but
+ not used"
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+kbuild test robot reported this against the -RT tree:
+
+|   In file included from include/linux/mutex.h:30:0,
+|                    from include/linux/notifier.h:13,
+|                    from include/linux/memory_hotplug.h:6,
+|                    from include/linux/mmzone.h:777,
+|                    from include/linux/gfp.h:5,
+|                    from include/linux/slab.h:14,
+|                    from include/linux/resource_ext.h:19,
+|                    from include/linux/acpi.h:26,
+|                    from arch/x86/kernel/acpi/boot.c:27:
+|>> arch/x86/kernel/acpi/boot.c:90:21: warning: 'acpi_ioapic_lock' defined but not used [-Wunused-variable]
+|    static DEFINE_MUTEX(acpi_ioapic_lock);
+|                        ^
+|   include/linux/mutex_rt.h:27:15: note: in definition of macro 'DEFINE_MUTEX'
+|     struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
+                  ^~~~~~~~~
+which is also true (as in non-used) for !RT but the compiler does not
+emit a warning.
+
+Reported-by: kbuild test robot <fengguang.wu@intel.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/x86/kernel/acpi/boot.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/x86/kernel/acpi/boot.c
++++ b/arch/x86/kernel/acpi/boot.c
+@@ -87,7 +87,9 @@ static u64 acpi_lapic_addr __initdata =
+  *            ->ioapic_mutex
+  *                    ->ioapic_lock
+  */
++#ifdef CONFIG_X86_IO_APIC
+ static DEFINE_MUTEX(acpi_ioapic_lock);
++#endif
+ /* --------------------------------------------------------------------------
+                               Boot-time Configuration
diff --git a/patches/features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch b/patches/features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch
new file mode 100644 (file)
index 0000000..2404f55
--- /dev/null
@@ -0,0 +1,113 @@
+Subject: x86: crypto: Reduce preempt disabled regions
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Mon, 14 Nov 2011 18:19:27 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Restrict the preempt disabled regions to the actual floating point
+operations and enable preemption for the administrative actions.
+
+This is necessary on RT to avoid that kfree and other operations are
+called with preemption disabled.
+
+Reported-and-tested-by: Carsten Emde <cbe@osadl.org>
+Signed-off-by: Peter Zijlstra <peterz@infradead.org>
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/x86/crypto/aesni-intel_glue.c |   24 +++++++++++++-----------
+ 1 file changed, 13 insertions(+), 11 deletions(-)
+
+--- a/arch/x86/crypto/aesni-intel_glue.c
++++ b/arch/x86/crypto/aesni-intel_glue.c
+@@ -372,14 +372,14 @@ static int ecb_encrypt(struct blkcipher_
+       err = blkcipher_walk_virt(desc, &walk);
+       desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+-      kernel_fpu_begin();
+       while ((nbytes = walk.nbytes)) {
++              kernel_fpu_begin();
+               aesni_ecb_enc(ctx, walk.dst.virt.addr, walk.src.virt.addr,
+-                            nbytes & AES_BLOCK_MASK);
++                              nbytes & AES_BLOCK_MASK);
++              kernel_fpu_end();
+               nbytes &= AES_BLOCK_SIZE - 1;
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+-      kernel_fpu_end();
+       return err;
+ }
+@@ -396,14 +396,14 @@ static int ecb_decrypt(struct blkcipher_
+       err = blkcipher_walk_virt(desc, &walk);
+       desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+-      kernel_fpu_begin();
+       while ((nbytes = walk.nbytes)) {
++              kernel_fpu_begin();
+               aesni_ecb_dec(ctx, walk.dst.virt.addr, walk.src.virt.addr,
+                             nbytes & AES_BLOCK_MASK);
++              kernel_fpu_end();
+               nbytes &= AES_BLOCK_SIZE - 1;
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+-      kernel_fpu_end();
+       return err;
+ }
+@@ -420,14 +420,14 @@ static int cbc_encrypt(struct blkcipher_
+       err = blkcipher_walk_virt(desc, &walk);
+       desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+-      kernel_fpu_begin();
+       while ((nbytes = walk.nbytes)) {
++              kernel_fpu_begin();
+               aesni_cbc_enc(ctx, walk.dst.virt.addr, walk.src.virt.addr,
+                             nbytes & AES_BLOCK_MASK, walk.iv);
++              kernel_fpu_end();
+               nbytes &= AES_BLOCK_SIZE - 1;
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+-      kernel_fpu_end();
+       return err;
+ }
+@@ -444,14 +444,14 @@ static int cbc_decrypt(struct blkcipher_
+       err = blkcipher_walk_virt(desc, &walk);
+       desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+-      kernel_fpu_begin();
+       while ((nbytes = walk.nbytes)) {
++              kernel_fpu_begin();
+               aesni_cbc_dec(ctx, walk.dst.virt.addr, walk.src.virt.addr,
+                             nbytes & AES_BLOCK_MASK, walk.iv);
++              kernel_fpu_end();
+               nbytes &= AES_BLOCK_SIZE - 1;
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+-      kernel_fpu_end();
+       return err;
+ }
+@@ -503,18 +503,20 @@ static int ctr_crypt(struct blkcipher_de
+       err = blkcipher_walk_virt_block(desc, &walk, AES_BLOCK_SIZE);
+       desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+-      kernel_fpu_begin();
+       while ((nbytes = walk.nbytes) >= AES_BLOCK_SIZE) {
++              kernel_fpu_begin();
+               aesni_ctr_enc_tfm(ctx, walk.dst.virt.addr, walk.src.virt.addr,
+                                     nbytes & AES_BLOCK_MASK, walk.iv);
++              kernel_fpu_end();
+               nbytes &= AES_BLOCK_SIZE - 1;
+               err = blkcipher_walk_done(desc, &walk, nbytes);
+       }
+       if (walk.nbytes) {
++              kernel_fpu_begin();
+               ctr_crypt_final(ctx, &walk);
++              kernel_fpu_end();
+               err = blkcipher_walk_done(desc, &walk, 0);
+       }
+-      kernel_fpu_end();
+       return err;
+ }
diff --git a/patches/features/all/rt/x86-highmem-add-a-already-used-pte-check.patch b/patches/features/all/rt/x86-highmem-add-a-already-used-pte-check.patch
new file mode 100644 (file)
index 0000000..a34253f
--- /dev/null
@@ -0,0 +1,23 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 11 Mar 2013 17:09:55 +0100
+Subject: x86/highmem: Add a "already used pte" check
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+This is a copy from kmap_atomic_prot().
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/x86/mm/iomap_32.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/x86/mm/iomap_32.c
++++ b/arch/x86/mm/iomap_32.c
+@@ -66,6 +66,8 @@ void *kmap_atomic_prot_pfn(unsigned long
+       type = kmap_atomic_idx_push();
+       idx = type + KM_TYPE_NR * smp_processor_id();
+       vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
++      WARN_ON(!pte_none(*(kmap_pte - idx)));
++
+ #ifdef CONFIG_PREEMPT_RT_FULL
+       current->kmap_pte[type] = pte;
+ #endif
diff --git a/patches/features/all/rt/x86-io-apic-migra-no-unmask.patch b/patches/features/all/rt/x86-io-apic-migra-no-unmask.patch
new file mode 100644 (file)
index 0000000..736d8e3
--- /dev/null
@@ -0,0 +1,28 @@
+From: Ingo Molnar <mingo@elte.hu>
+Date: Fri, 3 Jul 2009 08:29:27 -0500
+Subject: x86/ioapic: Do not unmask io_apic when interrupt is in progress
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+With threaded interrupts we might see an interrupt in progress on
+migration. Do not unmask it when this is the case.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+xXx
+ arch/x86/kernel/apic/io_apic.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/kernel/apic/io_apic.c
++++ b/arch/x86/kernel/apic/io_apic.c
+@@ -1712,7 +1712,8 @@ static bool io_apic_level_ack_pending(st
+ static inline bool ioapic_irqd_mask(struct irq_data *data)
+ {
+       /* If we are moving the irq we need to mask it */
+-      if (unlikely(irqd_is_setaffinity_pending(data))) {
++      if (unlikely(irqd_is_setaffinity_pending(data) &&
++                   !irqd_irq_inprogress(data))) {
+               mask_ioapic_irq(data);
+               return true;
+       }
diff --git a/patches/features/all/rt/x86-kvm-require-const-tsc-for-rt.patch b/patches/features/all/rt/x86-kvm-require-const-tsc-for-rt.patch
new file mode 100644 (file)
index 0000000..6ae2705
--- /dev/null
@@ -0,0 +1,31 @@
+Subject: x86: kvm Require const tsc for RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 06 Nov 2011 12:26:18 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Non constant TSC is a nightmare on bare metal already, but with
+virtualization it becomes a complete disaster because the workarounds
+are horrible latency wise. That's also a preliminary for running RT in
+a guest on top of a RT host.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/x86/kvm/x86.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -5933,6 +5933,13 @@ int kvm_arch_init(void *opaque)
+               goto out;
+       }
++#ifdef CONFIG_PREEMPT_RT_FULL
++      if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) {
++              printk(KERN_ERR "RT requires X86_FEATURE_CONSTANT_TSC\n");
++              return -EOPNOTSUPP;
++      }
++#endif
++
+       r = kvm_mmu_module_init();
+       if (r)
+               goto out_free_percpu;
diff --git a/patches/features/all/rt/x86-mce-timer-hrtimer.patch b/patches/features/all/rt/x86-mce-timer-hrtimer.patch
new file mode 100644 (file)
index 0000000..0a1fc99
--- /dev/null
@@ -0,0 +1,180 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Mon, 13 Dec 2010 16:33:39 +0100
+Subject: x86: Convert mce timer to hrtimer
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+mce_timer is started in atomic contexts of cpu bringup. This results
+in might_sleep() warnings on RT. Convert mce_timer to a hrtimer to
+avoid this.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+fold in:
+|From: Mike Galbraith <bitbucket@online.de>
+|Date: Wed, 29 May 2013 13:52:13 +0200
+|Subject: [PATCH] x86/mce: fix mce timer interval
+|
+|Seems mce timer fire at the wrong frequency in -rt kernels since roughly
+|forever due to 32 bit overflow.  3.8-rt is also missing a multiplier.
+|
+|Add missing us -> ns conversion and 32 bit overflow prevention.
+|
+|Signed-off-by: Mike Galbraith <bitbucket@online.de>
+|[bigeasy: use ULL instead of u64 cast]
+|Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/x86/kernel/cpu/mcheck/mce.c |   52 +++++++++++++++------------------------
+ 1 file changed, 20 insertions(+), 32 deletions(-)
+
+--- a/arch/x86/kernel/cpu/mcheck/mce.c
++++ b/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -41,6 +41,7 @@
+ #include <linux/debugfs.h>
+ #include <linux/irq_work.h>
+ #include <linux/export.h>
++#include <linux/jiffies.h>
+ #include <linux/jump_label.h>
+ #include <asm/processor.h>
+@@ -1317,7 +1318,7 @@ void mce_log_therm_throt_event(__u64 sta
+ static unsigned long check_interval = INITIAL_CHECK_INTERVAL;
+ static DEFINE_PER_CPU(unsigned long, mce_next_interval); /* in jiffies */
+-static DEFINE_PER_CPU(struct timer_list, mce_timer);
++static DEFINE_PER_CPU(struct hrtimer, mce_timer);
+ static unsigned long mce_adjust_timer_default(unsigned long interval)
+ {
+@@ -1326,32 +1327,18 @@ static unsigned long mce_adjust_timer_de
+ static unsigned long (*mce_adjust_timer)(unsigned long interval) = mce_adjust_timer_default;
+-static void __restart_timer(struct timer_list *t, unsigned long interval)
++static enum hrtimer_restart __restart_timer(struct hrtimer *timer, unsigned long interval)
+ {
+-      unsigned long when = jiffies + interval;
+-      unsigned long flags;
+-
+-      local_irq_save(flags);
+-
+-      if (timer_pending(t)) {
+-              if (time_before(when, t->expires))
+-                      mod_timer(t, when);
+-      } else {
+-              t->expires = round_jiffies(when);
+-              add_timer_on(t, smp_processor_id());
+-      }
+-
+-      local_irq_restore(flags);
++      if (!interval)
++              return HRTIMER_NORESTART;
++      hrtimer_forward_now(timer, ns_to_ktime(jiffies_to_nsecs(interval)));
++      return HRTIMER_RESTART;
+ }
+-static void mce_timer_fn(unsigned long data)
++static enum hrtimer_restart mce_timer_fn(struct hrtimer *timer)
+ {
+-      struct timer_list *t = this_cpu_ptr(&mce_timer);
+-      int cpu = smp_processor_id();
+       unsigned long iv;
+-      WARN_ON(cpu != data);
+-
+       iv = __this_cpu_read(mce_next_interval);
+       if (mce_available(this_cpu_ptr(&cpu_info))) {
+@@ -1374,7 +1361,7 @@ static void mce_timer_fn(unsigned long d
+ done:
+       __this_cpu_write(mce_next_interval, iv);
+-      __restart_timer(t, iv);
++      return __restart_timer(timer, iv);
+ }
+ /*
+@@ -1382,7 +1369,7 @@ static void mce_timer_fn(unsigned long d
+  */
+ void mce_timer_kick(unsigned long interval)
+ {
+-      struct timer_list *t = this_cpu_ptr(&mce_timer);
++      struct hrtimer *t = this_cpu_ptr(&mce_timer);
+       unsigned long iv = __this_cpu_read(mce_next_interval);
+       __restart_timer(t, interval);
+@@ -1397,7 +1384,7 @@ static void mce_timer_delete_all(void)
+       int cpu;
+       for_each_online_cpu(cpu)
+-              del_timer_sync(&per_cpu(mce_timer, cpu));
++              hrtimer_cancel(&per_cpu(mce_timer, cpu));
+ }
+ static void mce_do_trigger(struct work_struct *work)
+@@ -1732,7 +1719,7 @@ static void __mcheck_cpu_clear_vendor(st
+       }
+ }
+-static void mce_start_timer(unsigned int cpu, struct timer_list *t)
++static void mce_start_timer(unsigned int cpu, struct hrtimer *t)
+ {
+       unsigned long iv = check_interval * HZ;
+@@ -1741,16 +1728,17 @@ static void mce_start_timer(unsigned int
+       per_cpu(mce_next_interval, cpu) = iv;
+-      t->expires = round_jiffies(jiffies + iv);
+-      add_timer_on(t, cpu);
++      hrtimer_start_range_ns(t, ns_to_ktime(jiffies_to_usecs(iv) * 1000ULL),
++                      0, HRTIMER_MODE_REL_PINNED);
+ }
+ static void __mcheck_cpu_init_timer(void)
+ {
+-      struct timer_list *t = this_cpu_ptr(&mce_timer);
++      struct hrtimer *t = this_cpu_ptr(&mce_timer);
+       unsigned int cpu = smp_processor_id();
+-      setup_pinned_timer(t, mce_timer_fn, cpu);
++      hrtimer_init(t, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
++      t->function = mce_timer_fn;
+       mce_start_timer(cpu, t);
+ }
+@@ -2475,6 +2463,8 @@ static void mce_disable_cpu(void *h)
+       if (!mce_available(raw_cpu_ptr(&cpu_info)))
+               return;
++      hrtimer_cancel(this_cpu_ptr(&mce_timer));
++
+       if (!(action & CPU_TASKS_FROZEN))
+               cmci_clear();
+@@ -2497,6 +2487,7 @@ static void mce_reenable_cpu(void *h)
+               if (b->init)
+                       wrmsrl(msr_ops.ctl(i), b->ctl);
+       }
++      __mcheck_cpu_init_timer();
+ }
+ /* Get notified when a cpu comes on/off. Be hotplug friendly. */
+@@ -2504,7 +2495,6 @@ static int
+ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
+ {
+       unsigned int cpu = (unsigned long)hcpu;
+-      struct timer_list *t = &per_cpu(mce_timer, cpu);
+       switch (action & ~CPU_TASKS_FROZEN) {
+       case CPU_ONLINE:
+@@ -2524,11 +2514,9 @@ mce_cpu_callback(struct notifier_block *
+               break;
+       case CPU_DOWN_PREPARE:
+               smp_call_function_single(cpu, mce_disable_cpu, &action, 1);
+-              del_timer_sync(t);
+               break;
+       case CPU_DOWN_FAILED:
+               smp_call_function_single(cpu, mce_reenable_cpu, &action, 1);
+-              mce_start_timer(cpu, t);
+               break;
+       }
diff --git a/patches/features/all/rt/x86-mce-use-swait-queue-for-mce-wakeups.patch b/patches/features/all/rt/x86-mce-use-swait-queue-for-mce-wakeups.patch
new file mode 100644 (file)
index 0000000..fdee753
--- /dev/null
@@ -0,0 +1,160 @@
+Subject: x86/mce: use swait queue for mce wakeups
+From: Steven Rostedt <rostedt@goodmis.org>
+Date:  Fri, 27 Feb 2015 15:20:37 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+We had a customer report a lockup on a 3.0-rt kernel that had the
+following backtrace:
+
+[ffff88107fca3e80] rt_spin_lock_slowlock at ffffffff81499113
+[ffff88107fca3f40] rt_spin_lock at ffffffff81499a56
+[ffff88107fca3f50] __wake_up at ffffffff81043379
+[ffff88107fca3f80] mce_notify_irq at ffffffff81017328
+[ffff88107fca3f90] intel_threshold_interrupt at ffffffff81019508
+[ffff88107fca3fa0] smp_threshold_interrupt at ffffffff81019fc1
+[ffff88107fca3fb0] threshold_interrupt at ffffffff814a1853
+
+It actually bugged because the lock was taken by the same owner that
+already had that lock. What happened was the thread that was setting
+itself on a wait queue had the lock when an MCE triggered. The MCE
+interrupt does a wake up on its wait list and grabs the same lock.
+
+NOTE: THIS IS NOT A BUG ON MAINLINE
+
+Sorry for yelling, but as I Cc'd mainline maintainers I want them to
+know that this is an PREEMPT_RT bug only. I only Cc'd them for advice.
+
+On PREEMPT_RT the wait queue locks are converted from normal
+"spin_locks" into an rt_mutex (see the rt_spin_lock_slowlock above).
+These are not to be taken by hard interrupt context. This usually isn't
+a problem as most all interrupts in PREEMPT_RT are converted into
+schedulable threads. Unfortunately that's not the case with the MCE irq.
+
+As wait queue locks are notorious for long hold times, we can not
+convert them to raw_spin_locks without causing issues with -rt. But
+Thomas has created a "simple-wait" structure that uses raw spin locks
+which may have been a good fit.
+
+Unfortunately, wait queues are not the only issue, as the mce_notify_irq
+also does a schedule_work(), which grabs the workqueue spin locks that
+have the exact same issue.
+
+Thus, this patch I'm proposing is to move the actual work of the MCE
+interrupt into a helper thread that gets woken up on the MCE interrupt
+and does the work in a schedulable context.
+
+NOTE: THIS PATCH ONLY CHANGES THE BEHAVIOR WHEN PREEMPT_RT IS SET
+
+Oops, sorry for yelling again, but I want to stress that I keep the same
+behavior of mainline when PREEMPT_RT is not set. Thus, this only changes
+the MCE behavior when PREEMPT_RT is configured.
+
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+[bigeasy@linutronix: make mce_notify_work() a proper prototype, use
+                    kthread_run()]
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+[wagi: use work-simple framework to defer work to a kthread]
+Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
+---
+ arch/x86/kernel/cpu/mcheck/mce.c |   68 ++++++++++++++++++++++++++++++++-------
+ 1 file changed, 56 insertions(+), 12 deletions(-)
+
+--- a/arch/x86/kernel/cpu/mcheck/mce.c
++++ b/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -42,6 +42,7 @@
+ #include <linux/irq_work.h>
+ #include <linux/export.h>
+ #include <linux/jiffies.h>
++#include <linux/swork.h>
+ #include <linux/jump_label.h>
+ #include <asm/processor.h>
+@@ -1394,6 +1395,56 @@ static void mce_do_trigger(struct work_s
+ static DECLARE_WORK(mce_trigger_work, mce_do_trigger);
++static void __mce_notify_work(struct swork_event *event)
++{
++      /* Not more than two messages every minute */
++      static DEFINE_RATELIMIT_STATE(ratelimit, 60*HZ, 2);
++
++      /* wake processes polling /dev/mcelog */
++      wake_up_interruptible(&mce_chrdev_wait);
++
++      /*
++       * There is no risk of missing notifications because
++       * work_pending is always cleared before the function is
++       * executed.
++       */
++      if (mce_helper[0] && !work_pending(&mce_trigger_work))
++              schedule_work(&mce_trigger_work);
++
++      if (__ratelimit(&ratelimit))
++              pr_info(HW_ERR "Machine check events logged\n");
++}
++
++#ifdef CONFIG_PREEMPT_RT_FULL
++static bool notify_work_ready __read_mostly;
++static struct swork_event notify_work;
++
++static int mce_notify_work_init(void)
++{
++      int err;
++
++      err = swork_get();
++      if (err)
++              return err;
++
++      INIT_SWORK(&notify_work, __mce_notify_work);
++      notify_work_ready = true;
++      return 0;
++}
++
++static void mce_notify_work(void)
++{
++      if (notify_work_ready)
++              swork_queue(&notify_work);
++}
++#else
++static void mce_notify_work(void)
++{
++      __mce_notify_work(NULL);
++}
++static inline int mce_notify_work_init(void) { return 0; }
++#endif
++
+ /*
+  * Notify the user(s) about new machine check events.
+  * Can be called from interrupt context, but not from machine check/NMI
+@@ -1401,19 +1452,8 @@ static DECLARE_WORK(mce_trigger_work, mc
+  */
+ int mce_notify_irq(void)
+ {
+-      /* Not more than two messages every minute */
+-      static DEFINE_RATELIMIT_STATE(ratelimit, 60*HZ, 2);
+-
+       if (test_and_clear_bit(0, &mce_need_notify)) {
+-              /* wake processes polling /dev/mcelog */
+-              wake_up_interruptible(&mce_chrdev_wait);
+-
+-              if (mce_helper[0])
+-                      schedule_work(&mce_trigger_work);
+-
+-              if (__ratelimit(&ratelimit))
+-                      pr_info(HW_ERR "Machine check events logged\n");
+-
++              mce_notify_work();
+               return 1;
+       }
+       return 0;
+@@ -2555,6 +2595,10 @@ static __init int mcheck_init_device(voi
+               goto err_out;
+       }
++      err = mce_notify_work_init();
++      if (err)
++              goto err_out;
++
+       if (!zalloc_cpumask_var(&mce_device_initialized, GFP_KERNEL)) {
+               err = -ENOMEM;
+               goto err_out;
diff --git a/patches/features/all/rt/x86-mm-cpa-avoid-wbinvd-for-PREEMPT.patch b/patches/features/all/rt/x86-mm-cpa-avoid-wbinvd-for-PREEMPT.patch
new file mode 100644 (file)
index 0000000..e025935
--- /dev/null
@@ -0,0 +1,39 @@
+From: John Ogness <john.ogness@linutronix.de>
+Date: Mon, 30 Jan 2017 09:41:21 +0100
+Subject: [PATCH] x86/mm/cpa: avoid wbinvd() for PREEMPT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Although wbinvd() is faster than flushing many individual pages, it
+blocks the memory bus for "long" periods of time (>100us), thus
+directly causing unusually large latencies on all CPUs, regardless
+of any CPU isolation features that may be active.
+
+For 1024 pages, flushing those pages individually can take up to
+2200us, but the task remains fully preemptible during that time.
+
+Cc: stable-rt@vger.kernel.org
+Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Signed-off-by: John Ogness <john.ogness@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/x86/mm/pageattr.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/arch/x86/mm/pageattr.c
++++ b/arch/x86/mm/pageattr.c
+@@ -214,7 +214,15 @@ static void cpa_flush_array(unsigned lon
+                           int in_flags, struct page **pages)
+ {
+       unsigned int i, level;
++#ifdef CONFIG_PREEMPT
++      /*
++       * Avoid wbinvd() because it causes latencies on all CPUs,
++       * regardless of any CPU isolation that may be in effect.
++       */
++      unsigned long do_wbinvd = 0;
++#else
+       unsigned long do_wbinvd = cache && numpages >= 1024; /* 4M threshold */
++#endif
+       BUG_ON(irqs_disabled());
diff --git a/patches/features/all/rt/x86-preempt-lazy.patch b/patches/features/all/rt/x86-preempt-lazy.patch
new file mode 100644 (file)
index 0000000..ab1339b
--- /dev/null
@@ -0,0 +1,221 @@
+Subject: x86: Support for lazy preemption
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 01 Nov 2012 11:03:47 +0100
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Implement the x86 pieces for lazy preempt.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ arch/x86/Kconfig                   |    1 +
+ arch/x86/entry/common.c            |    4 ++--
+ arch/x86/entry/entry_32.S          |   17 +++++++++++++++++
+ arch/x86/entry/entry_64.S          |   16 ++++++++++++++++
+ arch/x86/include/asm/preempt.h     |   31 ++++++++++++++++++++++++++++++-
+ arch/x86/include/asm/thread_info.h |   11 +++++++++++
+ arch/x86/kernel/asm-offsets.c      |    2 ++
+ 7 files changed, 79 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -17,6 +17,7 @@ config X86_64
+ ### Arch settings
+ config X86
+       def_bool y
++      select HAVE_PREEMPT_LAZY
+       select ACPI_LEGACY_TABLES_LOOKUP        if ACPI
+       select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI
+       select ANON_INODES
+--- a/arch/x86/entry/common.c
++++ b/arch/x86/entry/common.c
+@@ -129,7 +129,7 @@ static long syscall_trace_enter(struct p
+ #define EXIT_TO_USERMODE_LOOP_FLAGS                           \
+       (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_UPROBE |   \
+-       _TIF_NEED_RESCHED | _TIF_USER_RETURN_NOTIFY)
++       _TIF_NEED_RESCHED_MASK | _TIF_USER_RETURN_NOTIFY)
+ static void exit_to_usermode_loop(struct pt_regs *regs, u32 cached_flags)
+ {
+@@ -145,7 +145,7 @@ static void exit_to_usermode_loop(struct
+               /* We have work to do. */
+               local_irq_enable();
+-              if (cached_flags & _TIF_NEED_RESCHED)
++              if (cached_flags & _TIF_NEED_RESCHED_MASK)
+                       schedule();
+ #ifdef ARCH_RT_DELAYS_SIGNAL_SEND
+--- a/arch/x86/entry/entry_32.S
++++ b/arch/x86/entry/entry_32.S
+@@ -308,8 +308,25 @@ END(ret_from_exception)
+ ENTRY(resume_kernel)
+       DISABLE_INTERRUPTS(CLBR_ANY)
+ need_resched:
++      # preempt count == 0 + NEED_RS set?
+       cmpl    $0, PER_CPU_VAR(__preempt_count)
++#ifndef CONFIG_PREEMPT_LAZY
+       jnz     restore_all
++#else
++      jz test_int_off
++
++      # atleast preempt count == 0 ?
++      cmpl $_PREEMPT_ENABLED,PER_CPU_VAR(__preempt_count)
++      jne restore_all
++
++      movl    PER_CPU_VAR(current_task), %ebp
++      cmpl $0,TASK_TI_preempt_lazy_count(%ebp)        # non-zero preempt_lazy_count ?
++      jnz restore_all
++
++      testl $_TIF_NEED_RESCHED_LAZY, TASK_TI_flags(%ebp)
++      jz restore_all
++test_int_off:
++#endif
+       testl   $X86_EFLAGS_IF, PT_EFLAGS(%esp) # interrupts off (exception path) ?
+       jz      restore_all
+       call    preempt_schedule_irq
+--- a/arch/x86/entry/entry_64.S
++++ b/arch/x86/entry/entry_64.S
+@@ -546,7 +546,23 @@ GLOBAL(retint_user)
+       bt      $9, EFLAGS(%rsp)                /* were interrupts off? */
+       jnc     1f
+ 0:    cmpl    $0, PER_CPU_VAR(__preempt_count)
++#ifndef CONFIG_PREEMPT_LAZY
+       jnz     1f
++#else
++      jz      do_preempt_schedule_irq
++
++      # atleast preempt count == 0 ?
++      cmpl $_PREEMPT_ENABLED,PER_CPU_VAR(__preempt_count)
++      jnz     1f
++
++      movq    PER_CPU_VAR(current_task), %rcx
++      cmpl    $0, TASK_TI_preempt_lazy_count(%rcx)
++      jnz     1f
++
++      bt      $TIF_NEED_RESCHED_LAZY,TASK_TI_flags(%rcx)
++      jnc     1f
++do_preempt_schedule_irq:
++#endif
+       call    preempt_schedule_irq
+       jmp     0b
+ 1:
+--- a/arch/x86/include/asm/preempt.h
++++ b/arch/x86/include/asm/preempt.h
+@@ -79,17 +79,46 @@ static __always_inline void __preempt_co
+  * a decrement which hits zero means we have no preempt_count and should
+  * reschedule.
+  */
+-static __always_inline bool __preempt_count_dec_and_test(void)
++static __always_inline bool ____preempt_count_dec_and_test(void)
+ {
+       GEN_UNARY_RMWcc("decl", __preempt_count, __percpu_arg(0), e);
+ }
++static __always_inline bool __preempt_count_dec_and_test(void)
++{
++      if (____preempt_count_dec_and_test())
++              return true;
++#ifdef CONFIG_PREEMPT_LAZY
++      if (current_thread_info()->preempt_lazy_count)
++              return false;
++      return test_thread_flag(TIF_NEED_RESCHED_LAZY);
++#else
++      return false;
++#endif
++}
++
+ /*
+  * Returns true when we need to resched and can (barring IRQ state).
+  */
+ static __always_inline bool should_resched(int preempt_offset)
+ {
++#ifdef CONFIG_PREEMPT_LAZY
++      u32 tmp;
++
++      tmp = raw_cpu_read_4(__preempt_count);
++      if (tmp == preempt_offset)
++              return true;
++
++      /* preempt count == 0 ? */
++      tmp &= ~PREEMPT_NEED_RESCHED;
++      if (tmp)
++              return false;
++      if (current_thread_info()->preempt_lazy_count)
++              return false;
++      return test_thread_flag(TIF_NEED_RESCHED_LAZY);
++#else
+       return unlikely(raw_cpu_read_4(__preempt_count) == preempt_offset);
++#endif
+ }
+ #ifdef CONFIG_PREEMPT
+--- a/arch/x86/include/asm/thread_info.h
++++ b/arch/x86/include/asm/thread_info.h
+@@ -54,11 +54,14 @@ struct task_struct;
+ struct thread_info {
+       unsigned long           flags;          /* low level flags */
++      int                     preempt_lazy_count;     /* 0 => lazy preemptable
++                                                         <0 => BUG */
+ };
+ #define INIT_THREAD_INFO(tsk)                 \
+ {                                             \
+       .flags          = 0,                    \
++      .preempt_lazy_count = 0,                \
+ }
+ #define init_stack            (init_thread_union.stack)
+@@ -67,6 +70,10 @@ struct thread_info {
+ #include <asm/asm-offsets.h>
++#define GET_THREAD_INFO(reg) \
++      _ASM_MOV PER_CPU_VAR(cpu_current_top_of_stack),reg ; \
++      _ASM_SUB $(THREAD_SIZE),reg ;
++
+ #endif
+ /*
+@@ -85,6 +92,7 @@ struct thread_info {
+ #define TIF_SYSCALL_EMU               6       /* syscall emulation active */
+ #define TIF_SYSCALL_AUDIT     7       /* syscall auditing active */
+ #define TIF_SECCOMP           8       /* secure computing */
++#define TIF_NEED_RESCHED_LAZY 9       /* lazy rescheduling necessary */
+ #define TIF_USER_RETURN_NOTIFY        11      /* notify kernel of userspace return */
+ #define TIF_UPROBE            12      /* breakpointed or singlestepping */
+ #define TIF_NOTSC             16      /* TSC is not accessible in userland */
+@@ -108,6 +116,7 @@ struct thread_info {
+ #define _TIF_SYSCALL_EMU      (1 << TIF_SYSCALL_EMU)
+ #define _TIF_SYSCALL_AUDIT    (1 << TIF_SYSCALL_AUDIT)
+ #define _TIF_SECCOMP          (1 << TIF_SECCOMP)
++#define _TIF_NEED_RESCHED_LAZY        (1 << TIF_NEED_RESCHED_LAZY)
+ #define _TIF_USER_RETURN_NOTIFY       (1 << TIF_USER_RETURN_NOTIFY)
+ #define _TIF_UPROBE           (1 << TIF_UPROBE)
+ #define _TIF_NOTSC            (1 << TIF_NOTSC)
+@@ -143,6 +152,8 @@ struct thread_info {
+ #define _TIF_WORK_CTXSW_PREV (_TIF_WORK_CTXSW|_TIF_USER_RETURN_NOTIFY)
+ #define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW)
++#define _TIF_NEED_RESCHED_MASK        (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)
++
+ #define STACK_WARN            (THREAD_SIZE/8)
+ /*
+--- a/arch/x86/kernel/asm-offsets.c
++++ b/arch/x86/kernel/asm-offsets.c
+@@ -36,6 +36,7 @@ void common(void) {
+       BLANK();
+       OFFSET(TASK_TI_flags, task_struct, thread_info.flags);
++      OFFSET(TASK_TI_preempt_lazy_count, task_struct, thread_info.preempt_lazy_count);
+       OFFSET(TASK_addr_limit, task_struct, thread.addr_limit);
+       BLANK();
+@@ -91,4 +92,5 @@ void common(void) {
+       BLANK();
+       DEFINE(PTREGS_SIZE, sizeof(struct pt_regs));
++      DEFINE(_PREEMPT_ENABLED, PREEMPT_ENABLED);
+ }
diff --git a/patches/features/all/rt/x86-signal-delay-calling-signals-on-32bit.patch b/patches/features/all/rt/x86-signal-delay-calling-signals-on-32bit.patch
new file mode 100644 (file)
index 0000000..a60e3f6
--- /dev/null
@@ -0,0 +1,43 @@
+From: Yang Shi <yang.shi@linaro.org>
+Date: Thu, 10 Dec 2015 10:58:51 -0800
+Subject: x86/signal: delay calling signals on 32bit
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+When running some ptrace single step tests on x86-32 machine, the below problem
+is triggered:
+
+BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917
+in_atomic(): 1, irqs_disabled(): 0, pid: 1041, name: dummy2
+Preemption disabled at:[<c100326f>] do_debug+0x1f/0x1a0
+
+CPU: 10 PID: 1041 Comm: dummy2 Tainted: G        W       4.1.13-rt13 #1
+Call Trace:
+ [<c1aa8306>] dump_stack+0x46/0x5c
+ [<c1080517>] ___might_sleep+0x137/0x220
+ [<c1ab0eff>] rt_spin_lock+0x1f/0x80
+ [<c1064b5a>] do_force_sig_info+0x2a/0xc0
+ [<c106567d>] force_sig_info+0xd/0x10
+ [<c1010cff>] send_sigtrap+0x6f/0x80
+ [<c10033b1>] do_debug+0x161/0x1a0
+ [<c1ab2921>] debug_stack_correct+0x2e/0x35
+
+This happens since 959274753857 ("x86, traps: Track entry into and exit
+from IST context") which was merged in v4.1-rc1.
+
+Signed-off-by: Yang Shi <yang.shi@linaro.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/x86/include/asm/signal.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/include/asm/signal.h
++++ b/arch/x86/include/asm/signal.h
+@@ -36,7 +36,7 @@ typedef struct {
+  * TIF_NOTIFY_RESUME and set up the signal to be sent on exit of the
+  * trap.
+  */
+-#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_X86_64)
++#if defined(CONFIG_PREEMPT_RT_FULL)
+ #define ARCH_RT_DELAYS_SIGNAL_SEND
+ #endif
diff --git a/patches/features/all/rt/x86-stackprot-no-random-on-rt.patch b/patches/features/all/rt/x86-stackprot-no-random-on-rt.patch
new file mode 100644 (file)
index 0000000..f174fb3
--- /dev/null
@@ -0,0 +1,47 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 16 Dec 2010 14:25:18 +0100
+Subject: x86: stackprotector: Avoid random pool on rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+CPU bringup calls into the random pool to initialize the stack
+canary. During boot that works nicely even on RT as the might sleep
+checks are disabled. During CPU hotplug the might sleep checks
+trigger. Making the locks in random raw is a major PITA, so avoid the
+call on RT is the only sensible solution. This is basically the same
+randomness which we get during boot where the random pool has no
+entropy and we rely on the TSC randomnness.
+
+Reported-by: Carsten Emde <carsten.emde@osadl.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ arch/x86/include/asm/stackprotector.h |    9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/include/asm/stackprotector.h
++++ b/arch/x86/include/asm/stackprotector.h
+@@ -59,7 +59,7 @@
+  */
+ static __always_inline void boot_init_stack_canary(void)
+ {
+-      u64 canary;
++      u64 uninitialized_var(canary);
+       u64 tsc;
+ #ifdef CONFIG_X86_64
+@@ -70,8 +70,15 @@ static __always_inline void boot_init_st
+        * of randomness. The TSC only matters for very early init,
+        * there it already has some randomness on most systems. Later
+        * on during the bootup the random pool has true entropy too.
++       *
++       * For preempt-rt we need to weaken the randomness a bit, as
++       * we can't call into the random generator from atomic context
++       * due to locking constraints. We just leave canary
++       * uninitialized and use the TSC based randomness on top of it.
+        */
++#ifndef CONFIG_PREEMPT_RT_FULL
+       get_random_bytes(&canary, sizeof(canary));
++#endif
+       tsc = rdtsc();
+       canary += tsc + (tsc << 32UL);
diff --git a/patches/features/all/rt/x86-use-gen-rwsem-spinlocks-rt.patch b/patches/features/all/rt/x86-use-gen-rwsem-spinlocks-rt.patch
new file mode 100644 (file)
index 0000000..a039203
--- /dev/null
@@ -0,0 +1,29 @@
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 26 Jul 2009 02:21:32 +0200
+Subject: x86: Use generic rwsem_spinlocks on -rt
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patches-4.9.20-rt16.tar.xz
+
+Simplifies the separation of anon_rw_semaphores and rw_semaphores for
+-rt.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+
+---
+ arch/x86/Kconfig |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -232,8 +232,11 @@ config ARCH_MAY_HAVE_PC_FDC
+       def_bool y
+       depends on ISA_DMA_API
++config RWSEM_GENERIC_SPINLOCK
++      def_bool PREEMPT_RT_FULL
++
+ config RWSEM_XCHGADD_ALGORITHM
+-      def_bool y
++      def_bool !RWSEM_GENERIC_SPINLOCK && !PREEMPT_RT_FULL
+ config GENERIC_CALIBRATE_DELAY
+       def_bool y
diff --git a/patches/features/all/securelevel/acpi-disable-acpi-table-override-if-securelevel-is-s.patch b/patches/features/all/securelevel/acpi-disable-acpi-table-override-if-securelevel-is-s.patch
new file mode 100644 (file)
index 0000000..0491b2f
--- /dev/null
@@ -0,0 +1,74 @@
+From: Linn Crosetto <linn@hpe.com>
+Date: Fri, 4 Mar 2016 16:08:24 -0700
+Subject: [16/18] acpi: Disable ACPI table override if securelevel is set
+Origin: https://github.com/mjg59/linux/commit/a4a5ed2835e8ea042868b7401dced3f517cafa76
+
+From the kernel documentation (initrd_table_override.txt):
+
+  If the ACPI_INITRD_TABLE_OVERRIDE compile option is true, it is possible
+  to override nearly any ACPI table provided by the BIOS with an
+  instrumented, modified one.
+
+When securelevel is set, the kernel should disallow any unauthenticated
+changes to kernel space. ACPI tables contain code invoked by the kernel, so
+do not allow ACPI tables to be overridden if securelevel is set.
+
+Signed-off-by: Linn Crosetto <linn@hpe.com>
+[bwh: Forward-ported to 4.7: ACPI override code moved to drivers/acpi/tables.c]
+[bwh: Forward-ported to 4.9: adjust context]
+---
+ arch/x86/kernel/setup.c | 12 ++++++------
+ drivers/acpi/tables.c   |  6 ++++++
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -1153,6 +1153,12 @@ void __init setup_arch(char **cmdline_p)
+       /* Allocate bigger log buffer */
+       setup_log_buf(1);
++#ifdef CONFIG_EFI_SECURE_BOOT_SECURELEVEL
++      if (boot_params.secure_boot) {
++              set_securelevel(1);
++      }
++#endif
++
+       reserve_initrd();
+       acpi_table_upgrade();
+@@ -1161,12 +1167,6 @@ void __init setup_arch(char **cmdline_p)
+       io_delay_init();
+-#ifdef CONFIG_EFI_SECURE_BOOT_SECURELEVEL
+-      if (boot_params.secure_boot) {
+-              set_securelevel(1);
+-      }
+-#endif
+-
+       /*
+        * Parse the ACPI tables for possible boot-time SMP configuration.
+        */
+--- a/drivers/acpi/tables.c
++++ b/drivers/acpi/tables.c
+@@ -35,6 +35,7 @@
+ #include <linux/earlycpio.h>
+ #include <linux/memblock.h>
+ #include <linux/initrd.h>
++#include <linux/security.h>
+ #include "internal.h"
+ #ifdef CONFIG_ACPI_CUSTOM_DSDT
+@@ -545,6 +546,12 @@ void __init acpi_table_upgrade(void)
+       if (table_nr == 0)
+               return;
++      if (get_securelevel() > 0) {
++              pr_notice(PREFIX
++                      "securelevel enabled, ignoring table override\n");
++              return;
++      }
++
+       acpi_tables_addr =
+               memblock_find_in_range(0, ACPI_TABLE_UPGRADE_MAX_PHYS,
+                                      all_tables_size, PAGE_SIZE);
diff --git a/patches/features/all/securelevel/acpi-disable-apei-error-injection-if-securelevel-is-.patch b/patches/features/all/securelevel/acpi-disable-apei-error-injection-if-securelevel-is-.patch
new file mode 100644 (file)
index 0000000..2ae1100
--- /dev/null
@@ -0,0 +1,45 @@
+From: Linn Crosetto <linn@hpe.com>
+Date: Wed, 16 Mar 2016 14:43:33 -0600
+Subject: [17/18] acpi: Disable APEI error injection if securelevel is set
+Origin: https://github.com/mjg59/linux/commit/d7a6be58edc01b1c66ecd8fcc91236bfbce0a420
+
+ACPI provides an error injection mechanism, EINJ, for debugging and testing
+the ACPI Platform Error Interface (APEI) and other RAS features. If
+supported by the firmware, ACPI specification 5.0 and later provide for a
+way to specify a physical memory address to which to inject the error.
+
+Injecting errors through EINJ can produce errors which to the platform are
+indistinguishable from real hardware errors. This can have undesirable
+side-effects, such as causing the platform to mark hardware as needing
+replacement.
+
+While it does not provide a method to load unauthenticated privileged code,
+the effect of these errors may persist across reboots and affect trust in
+the underlying hardware, so disable error injection through EINJ if
+securelevel is set.
+
+Signed-off-by: Linn Crosetto <linn@hpe.com>
+---
+ drivers/acpi/apei/einj.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/acpi/apei/einj.c
++++ b/drivers/acpi/apei/einj.c
+@@ -29,6 +29,7 @@
+ #include <linux/nmi.h>
+ #include <linux/delay.h>
+ #include <linux/mm.h>
++#include <linux/security.h>
+ #include <asm/unaligned.h>
+ #include "apei-internal.h"
+@@ -521,6 +522,9 @@ static int einj_error_inject(u32 type, u
+       int rc;
+       u64 base_addr, size;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       /* If user manually set "flags", make sure it is legal */
+       if (flags && (flags &
+               ~(SETWA_FLAGS_APICID|SETWA_FLAGS_MEM|SETWA_FLAGS_PCIE_SBDF)))
diff --git a/patches/features/all/securelevel/acpi-ignore-acpi_rsdp-kernel-parameter-when-securele.patch b/patches/features/all/securelevel/acpi-ignore-acpi_rsdp-kernel-parameter-when-securele.patch
new file mode 100644 (file)
index 0000000..8a26e52
--- /dev/null
@@ -0,0 +1,36 @@
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Mon, 25 Jun 2012 19:57:30 -0400
+Subject: [07/18] acpi: Ignore acpi_rsdp kernel parameter when securelevel is
+ set
+Origin: https://github.com/mjg59/linux/commit/9524fadac774fbe85e2ac6abe7b957b1750c7e36
+
+This option allows userspace to pass the RSDP address to the kernel, which
+makes it possible for a user to execute arbitrary code in the kernel.
+Disable this when securelevel is set.
+
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
+---
+ drivers/acpi/osl.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
+index 814d5f83b75e..242ca81bb606 100644
+--- a/drivers/acpi/osl.c
++++ b/drivers/acpi/osl.c
+@@ -40,6 +40,7 @@
+ #include <linux/list.h>
+ #include <linux/jiffies.h>
+ #include <linux/semaphore.h>
++#include <linux/security.h>
+ #include <asm/io.h>
+ #include <asm/uaccess.h>
+@@ -254,7 +255,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
+ acpi_physical_address __init acpi_os_get_root_pointer(void)
+ {
+ #ifdef CONFIG_KEXEC
+-      if (acpi_rsdp)
++      if (acpi_rsdp && (get_securelevel() <= 0))
+               return acpi_rsdp;
+ #endif
diff --git a/patches/features/all/securelevel/acpi-limit-access-to-custom_method-if-securelevel-is.patch b/patches/features/all/securelevel/acpi-limit-access-to-custom_method-if-securelevel-is.patch
new file mode 100644 (file)
index 0000000..97c0b1b
--- /dev/null
@@ -0,0 +1,36 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Fri, 9 Mar 2012 08:39:37 -0500
+Subject: [06/18] acpi: Limit access to custom_method if securelevel is set
+Origin: https://github.com/mjg59/linux/commit/3cdc48db6b6d1b3cc1412d428389889f74cafe83
+
+custom_method effectively allows arbitrary access to system memory, making
+it possible for an attacker to modify the kernel at runtime. Prevent this
+if securelevel has been set.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ drivers/acpi/custom_method.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c
+index c68e72414a67..359f45d54543 100644
+--- a/drivers/acpi/custom_method.c
++++ b/drivers/acpi/custom_method.c
+@@ -8,6 +8,7 @@
+ #include <linux/uaccess.h>
+ #include <linux/debugfs.h>
+ #include <linux/acpi.h>
++#include <linux/security.h>
+ #include "internal.h"
+@@ -29,6 +30,9 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
+       struct acpi_table_header table;
+       acpi_status status;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (!(*ppos)) {
+               /* parse the table header to get the table length */
+               if (count <= sizeof(struct acpi_table_header))
diff --git a/patches/features/all/securelevel/add-bsd-style-securelevel-support.patch b/patches/features/all/securelevel/add-bsd-style-securelevel-support.patch
new file mode 100644 (file)
index 0000000..15e636c
--- /dev/null
@@ -0,0 +1,208 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Fri, 9 Aug 2013 17:58:15 -0400
+Subject: [01/18] Add BSD-style securelevel support
+Origin: https://github.com/mjg59/linux/commit/058b8ddfe86dc90268f6dbe0ffed29ec46f1fafa
+
+Provide a coarse-grained runtime configuration option for restricting
+userspace's ability to modify the running kernel.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ Documentation/security/securelevel.txt |  23 +++++++
+ include/linux/security.h               |   8 +++
+ security/Kconfig                       |   8 +++
+ security/Makefile                      |   1 +
+ security/securelevel.c                 | 116 +++++++++++++++++++++++++++++++++
+ 5 files changed, 156 insertions(+)
+ create mode 100644 Documentation/security/securelevel.txt
+ create mode 100644 security/securelevel.c
+
+--- /dev/null
++++ b/Documentation/security/securelevel.txt
+@@ -0,0 +1,23 @@
++Linux securelevel interface
++---------------------------
++
++The Linux securelevel interface (inspired by the BSD securelevel interface)
++is a runtime mechanism for configuring coarse-grained kernel-level security
++restrictions. It provides a runtime configuration variable at
++/sys/kernel/security/securelevel which can be written to by root. The
++following values are supported:
++
++-1: Permanently insecure mode. This level is equivalent to level 0, but once
++    set cannot be changed.
++
++0:  Insecure mode (default). This level imposes no additional kernel
++    restrictions.
++
++1:  Secure mode. If set, userspace will be unable to perform direct access
++    to PCI devices, port IO access, access system memory directly via
++    /dev/mem and /dev/kmem, perform kexec_load(), use the userspace
++    software suspend mechanism, insert new ACPI code at runtime via the
++    custom_method interface or modify CPU MSRs (on x86). Certain drivers
++    may also limit additional interfaces.
++
++Once the securelevel value is increased, it may not be decreased.
+--- a/include/linux/security.h
++++ b/include/linux/security.h
+@@ -1589,6 +1589,14 @@ static inline void security_audit_rule_f
+ #endif /* CONFIG_SECURITY */
+ #endif /* CONFIG_AUDIT */
++#ifdef CONFIG_SECURITY_SECURELEVEL
++extern int get_securelevel(void);
++extern int set_securelevel(int new_securelevel);
++#else
++static inline int get_securelevel(void) { return 0; }
++static inline int set_securelevel(int new_securelevel) { return 0; }
++#endif /* CONFIG_SECURELEVEL */
++
+ #ifdef CONFIG_SECURITYFS
+ extern struct dentry *securityfs_create_file(const char *name, umode_t mode,
+--- a/security/Kconfig
++++ b/security/Kconfig
+@@ -93,6 +93,14 @@ config SECURITY_PATH
+         implement pathname based access controls.
+         If you are unsure how to answer this question, answer N.
++config SECURITY_SECURELEVEL
++        bool "Securelevel kernel restriction interface"
++      depends on SECURITY
++      help
++        This enables support for adding a set of additional kernel security
++        restrictions at runtime. See Documentation/security/securelevel.txt
++        for further information.
++
+ config INTEL_TXT
+       bool "Enable Intel(R) Trusted Execution Technology (Intel(R) TXT)"
+       depends on HAVE_INTEL_TXT
+--- a/security/Makefile
++++ b/security/Makefile
+@@ -16,6 +16,7 @@ obj-$(CONFIG_MMU)                    += min_addr.o
+ # Object file lists
+ obj-$(CONFIG_SECURITY)                        += security.o
+ obj-$(CONFIG_SECURITYFS)              += inode.o
++obj-$(CONFIG_SECURITY_SECURELEVEL)    += securelevel.o
+ obj-$(CONFIG_SECURITY_SELINUX)                += selinux/
+ obj-$(CONFIG_SECURITY_SMACK)          += smack/
+ obj-$(CONFIG_AUDIT)                   += lsm_audit.o
+--- /dev/null
++++ b/security/securelevel.c
+@@ -0,0 +1,116 @@
++/*
++ *  securelevel.c - support for generic kernel lockdown
++ *
++ *  Copyright Nebula, Inc <mjg59@srcf.ucam.org>
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License version 2 as
++ *  published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/fs.h>
++#include <linux/init.h>
++#include <linux/security.h>
++#include <linux/uaccess.h>
++
++static int securelevel;
++
++static DEFINE_SPINLOCK(securelevel_lock);
++
++#define MAX_SECURELEVEL 1
++
++int get_securelevel(void)
++{
++      return securelevel;
++}
++EXPORT_SYMBOL(get_securelevel);
++
++int set_securelevel(int new_securelevel)
++{
++      int ret = 0;
++
++      spin_lock(&securelevel_lock);
++
++      if ((securelevel == -1) || (new_securelevel < securelevel) ||
++          (new_securelevel > MAX_SECURELEVEL)) {
++              ret = -EINVAL;
++              goto out;
++      }
++
++      securelevel = new_securelevel;
++out:
++      spin_unlock(&securelevel_lock);
++      return ret;
++}
++EXPORT_SYMBOL(set_securelevel);
++
++static ssize_t securelevel_read(struct file *filp, char __user *buf,
++                              size_t count, loff_t *ppos)
++{
++      char tmpbuf[12];
++      ssize_t length;
++
++      length = scnprintf(tmpbuf, sizeof(tmpbuf), "%d", securelevel);
++      return simple_read_from_buffer(buf, count, ppos, tmpbuf, length);
++}
++
++static ssize_t securelevel_write(struct file *file, const char __user *buf,
++                               size_t count, loff_t *ppos)
++{
++      char *page = NULL;
++      ssize_t length;
++      int new_securelevel;
++
++      length = -ENOMEM;
++      if (count >= PAGE_SIZE)
++              goto out;
++
++      length = -EINVAL;
++      if (*ppos != 0)
++              goto out;
++
++      length = -ENOMEM;
++      page = (char *)get_zeroed_page(GFP_KERNEL);
++      if (!page)
++              goto out;
++
++      length = -EFAULT;
++      if (copy_from_user(page, buf, count))
++              goto out;
++
++      length = -EINVAL;
++      if (sscanf(page, "%d", &new_securelevel) != 1)
++              goto out;
++
++      length = set_securelevel(new_securelevel);
++      if (length)
++              goto out;
++
++      length = count;
++out:
++      free_page((unsigned long) page);
++      return length;
++}
++
++static const struct file_operations securelevel_fops = {
++      .read   = securelevel_read,
++      .write  = securelevel_write,
++      .llseek = generic_file_llseek,
++};
++
++static __init int setup_securelevel(void)
++{
++      struct dentry *securelevel_file;
++
++      securelevel_file = securityfs_create_file("securelevel",
++                                                S_IWUSR | S_IRUGO,
++                                                NULL, NULL,
++                                                &securelevel_fops);
++
++      if (IS_ERR(securelevel_file))
++              return PTR_ERR(securelevel_file);
++
++      return 0;
++}
++late_initcall(setup_securelevel);
diff --git a/patches/features/all/securelevel/add-option-to-automatically-set-securelevel-when-in-.patch b/patches/features/all/securelevel/add-option-to-automatically-set-securelevel-when-in-.patch
new file mode 100644 (file)
index 0000000..c76d6ed
--- /dev/null
@@ -0,0 +1,148 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Fri, 9 Aug 2013 18:36:30 -0400
+Subject: [12/18] Add option to automatically set securelevel when in Secure
+ Boot mode
+Origin: https://github.com/mjg59/linux/commit/e324de2d053295670f3ba8ef67289835d663aae5
+
+UEFI Secure Boot provides a mechanism for ensuring that the firmware will
+only load signed bootloaders and kernels. Certain use cases may also
+require that the kernel prevent userspace from inserting untrusted kernel
+code at runtime. Add a configuration option that enforces this automatically
+when enabled.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ Documentation/x86/zero-page.txt       |  2 ++
+ arch/x86/Kconfig                      | 13 +++++++++++++
+ arch/x86/boot/compressed/eboot.c      | 36 +++++++++++++++++++++++++++++++++++
+ arch/x86/include/uapi/asm/bootparam.h |  3 ++-
+ arch/x86/kernel/setup.c               |  7 +++++++
+ 5 files changed, 60 insertions(+), 1 deletion(-)
+
+--- a/Documentation/x86/zero-page.txt
++++ b/Documentation/x86/zero-page.txt
+@@ -31,6 +31,8 @@ Offset       Proto   Name            Meaning
+ 1E9/001       ALL     eddbuf_entries  Number of entries in eddbuf (below)
+ 1EA/001       ALL     edd_mbr_sig_buf_entries Number of entries in edd_mbr_sig_buffer
+                               (below)
++1EB/001       ALL     kbd_status      Numlock is enabled
++1EC/001       ALL     secure_boot     Secure boot is enabled in the firmware
+ 1EF/001       ALL     sentinel        Used to detect broken bootloaders
+ 290/040       ALL     edd_mbr_sig_buffer EDD MBR signatures
+ 2D0/A00       ALL     e820_map        E820 memory map table
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -1754,6 +1754,19 @@ config EFI_MIXED
+          If unsure, say N.
++config EFI_SECURE_BOOT_SECURELEVEL
++        def_bool n
++      depends on SECURITY_SECURELEVEL
++      depends on EFI
++      prompt "Automatically set securelevel when UEFI Secure Boot is enabled"
++      ---help---
++        UEFI Secure Boot provides a mechanism for ensuring that the
++        firmware will only load signed bootloaders and kernels. Certain
++        use cases may also require that the kernel restrict any userspace
++        mechanism that could insert untrusted code into the kernel.
++        Say Y here to automatically enable securelevel enforcement
++        when a system boots with UEFI Secure Boot enabled.
++
+ config SECCOMP
+       def_bool y
+       prompt "Enable seccomp to safely compute untrusted bytecode"
+--- a/arch/x86/boot/compressed/eboot.c
++++ b/arch/x86/boot/compressed/eboot.c
+@@ -12,6 +12,7 @@
+ #include <asm/efi.h>
+ #include <asm/setup.h>
+ #include <asm/desc.h>
++#include <asm/bootparam_utils.h>
+ #include "../string.h"
+ #include "eboot.h"
+@@ -1050,6 +1051,37 @@ void setup_graphics(struct boot_params *
+       }
+ }
++static int get_secure_boot(void)
++{
++      u8 sb, setup;
++      unsigned long datasize = sizeof(sb);
++      efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
++      efi_status_t status;
++
++      status = efi_early->call((unsigned long)sys_table->runtime->get_variable,
++                               L"SecureBoot", &var_guid, NULL, &datasize, &sb);
++
++      if (status != EFI_SUCCESS)
++              return 0;
++
++      if (sb == 0)
++              return 0;
++
++
++      status = efi_early->call((unsigned long)sys_table->runtime->get_variable,
++                              L"SetupMode", &var_guid, NULL, &datasize,
++                              &setup);
++
++      if (status != EFI_SUCCESS)
++              return 0;
++
++      if (setup == 1)
++              return 0;
++
++      return 1;
++}
++
++
+ /*
+  * Because the x86 boot code expects to be passed a boot_params we
+  * need to create one ourselves (usually the bootloader would create
+@@ -1432,6 +1464,10 @@ struct boot_params *efi_main(struct efi_
+       else
+               setup_boot_services32(efi_early);
++      sanitize_boot_params(boot_params);
++
++      boot_params->secure_boot = get_secure_boot();
++
+       setup_graphics(boot_params);
+       setup_efi_pci(boot_params);
+--- a/arch/x86/include/uapi/asm/bootparam.h
++++ b/arch/x86/include/uapi/asm/bootparam.h
+@@ -134,7 +134,8 @@ struct boot_params {
+       __u8  eddbuf_entries;                           /* 0x1e9 */
+       __u8  edd_mbr_sig_buf_entries;                  /* 0x1ea */
+       __u8  kbd_status;                               /* 0x1eb */
+-      __u8  _pad5[3];                                 /* 0x1ec */
++      __u8  secure_boot;                              /* 0x1ec */
++      __u8  _pad5[2];                                 /* 0x1ed */
+       /*
+        * The sentinel is set to a nonzero value (0xff) in header.S.
+        *
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -50,6 +50,7 @@
+ #include <linux/init_ohci1394_dma.h>
+ #include <linux/kvm_para.h>
+ #include <linux/dma-contiguous.h>
++#include <linux/security.h>
+ #include <linux/errno.h>
+ #include <linux/kernel.h>
+@@ -1145,6 +1146,12 @@ void __init setup_arch(char **cmdline_p)
+       io_delay_init();
++#ifdef CONFIG_EFI_SECURE_BOOT_SECURELEVEL
++      if (boot_params.secure_boot) {
++              set_securelevel(1);
++      }
++#endif
++
+       /*
+        * Parse the ACPI tables for possible boot-time SMP configuration.
+        */
diff --git a/patches/features/all/securelevel/arm64-add-kernel-config-option-to-set-securelevel-wh.patch b/patches/features/all/securelevel/arm64-add-kernel-config-option-to-set-securelevel-wh.patch
new file mode 100644 (file)
index 0000000..761838b
--- /dev/null
@@ -0,0 +1,130 @@
+From: Linn Crosetto <linn@hpe.com>
+Date: Tue, 30 Aug 2016 11:54:38 -0600
+Subject: arm64: add kernel config option to set securelevel when in Secure Boot mode
+Bug-Debian: https://bugs.debian.org/831827
+Forwarded: no
+
+Add a kernel configuration option to enable securelevel, to restrict
+userspace's ability to modify the running kernel when UEFI Secure Boot is
+enabled. Based on the x86 patch by Matthew Garrett.
+
+Determine the state of Secure Boot in the EFI stub and pass this to the
+kernel using the FDT.
+
+Signed-off-by: Linn Crosetto <linn@hpe.com>
+---
+v2:
+
+ - Add cpu_to_fdt32() when setting Secure Boot flag in FDT (Ben Hutchings)
+
+ arch/arm64/Kconfig                      | 13 +++++++++++++
+ drivers/firmware/efi/arm-init.c         |  7 +++++++
+ drivers/firmware/efi/efi.c              |  3 ++-
+ drivers/firmware/efi/libstub/arm-stub.c |  2 +-
+ drivers/firmware/efi/libstub/efistub.h  |  1 +
+ drivers/firmware/efi/libstub/fdt.c      |  7 +++++++
+ include/linux/efi.h                     |  1 +
+ 7 files changed, 32 insertions(+), 2 deletions(-)
+
+--- a/arch/arm64/Kconfig
++++ b/arch/arm64/Kconfig
+@@ -972,6 +972,19 @@ config EFI
+         allow the kernel to be booted as an EFI application. This
+         is only useful on systems that have UEFI firmware.
++config EFI_SECURE_BOOT_SECURELEVEL
++      def_bool n
++      depends on SECURITY_SECURELEVEL
++      depends on EFI
++      prompt "Automatically set securelevel when UEFI Secure Boot is enabled"
++      ---help---
++        UEFI Secure Boot provides a mechanism for ensuring that the
++        firmware will only load signed bootloaders and kernels. Certain
++        use cases may also require that the kernel restrict any userspace
++        mechanism that could insert untrusted code into the kernel.
++        Say Y here to automatically enable securelevel enforcement
++        when a system boots with UEFI Secure Boot enabled.
++
+ config DMI
+       bool "Enable support for SMBIOS (DMI) tables"
+       depends on EFI
+--- a/drivers/firmware/efi/arm-init.c
++++ b/drivers/firmware/efi/arm-init.c
+@@ -21,6 +21,7 @@
+ #include <linux/of_fdt.h>
+ #include <linux/platform_device.h>
+ #include <linux/screen_info.h>
++#include <linux/security.h>
+ #include <asm/efi.h>
+@@ -243,6 +244,12 @@ void __init efi_init(void)
+            "Unexpected EFI_MEMORY_DESCRIPTOR version %ld",
+             efi.memmap.desc_version);
++#ifdef CONFIG_EFI_SECURE_BOOT_SECURELEVEL
++      if (params.secure_boot > 0) {
++              set_securelevel(1);
++      }
++#endif
++
+       if (uefi_init() < 0)
+               return;
+--- a/drivers/firmware/efi/efi.c
++++ b/drivers/firmware/efi/efi.c
+@@ -580,7 +580,8 @@ static __initdata struct params fdt_para
+       UEFI_PARAM("MemMap Address", "linux,uefi-mmap-start", mmap),
+       UEFI_PARAM("MemMap Size", "linux,uefi-mmap-size", mmap_size),
+       UEFI_PARAM("MemMap Desc. Size", "linux,uefi-mmap-desc-size", desc_size),
+-      UEFI_PARAM("MemMap Desc. Version", "linux,uefi-mmap-desc-ver", desc_ver)
++      UEFI_PARAM("MemMap Desc. Version", "linux,uefi-mmap-desc-ver", desc_ver),
++      UEFI_PARAM("Secure Boot Enabled", "linux,uefi-secure-boot", secure_boot)
+ };
+ static __initdata struct params xen_fdt_params[] = {
+--- a/drivers/firmware/efi/libstub/arm-stub.c
++++ b/drivers/firmware/efi/libstub/arm-stub.c
+@@ -20,7 +20,7 @@
+ bool __nokaslr;
+-static int efi_get_secureboot(efi_system_table_t *sys_table_arg)
++int efi_get_secureboot(efi_system_table_t *sys_table_arg)
+ {
+       static efi_char16_t const sb_var_name[] = {
+               'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0 };
+--- a/drivers/firmware/efi/libstub/efistub.h
++++ b/drivers/firmware/efi/libstub/efistub.h
+@@ -62,4 +62,5 @@ efi_status_t efi_random_alloc(efi_system
+ efi_status_t check_platform_features(efi_system_table_t *sys_table_arg);
++int efi_get_secureboot(efi_system_table_t *sys_table_arg);
+ #endif
+--- a/drivers/firmware/efi/libstub/fdt.c
++++ b/drivers/firmware/efi/libstub/fdt.c
+@@ -139,6 +139,13 @@ efi_status_t update_fdt(efi_system_table
+                       return efi_status;
+               }
+       }
++
++      fdt_val32 = cpu_to_fdt32(efi_get_secureboot(sys_table));
++      status = fdt_setprop(fdt, node, "linux,uefi-secure-boot",
++                           &fdt_val32, sizeof(fdt_val32));
++      if (status)
++              goto fdt_set_fail;
++
+       return EFI_SUCCESS;
+ fdt_set_fail:
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -687,6 +687,7 @@ struct efi_fdt_params {
+       u32 mmap_size;
+       u32 desc_size;
+       u32 desc_ver;
++      u32 secure_boot;
+ };
+ typedef struct {
diff --git a/patches/features/all/securelevel/arm64-efi-disable-secure-boot-if-shim-is-in-insecure.patch b/patches/features/all/securelevel/arm64-efi-disable-secure-boot-if-shim-is-in-insecure.patch
new file mode 100644 (file)
index 0000000..0430f0c
--- /dev/null
@@ -0,0 +1,61 @@
+From: Linn Crosetto <linn@hpe.com>
+Date: Mon, 22 Feb 2016 12:54:37 -0700
+Subject: arm64/efi: Disable secure boot if shim is in insecure mode
+Bug-Debian: https://bugs.debian.org/831827
+Forwarded: no
+
+Port to arm64 a patch originally written by Josh Boyer for the x86 EFI
+stub.
+
+A user can manually tell the shim boot loader to disable validation of
+images it loads.  When a user does this, it creates a UEFI variable called
+MokSBState that does not have the runtime attribute set.  Given that the
+user explicitly disabled validation, we can honor that and not enable
+secure boot mode if that variable is set.
+
+Signed-off-by: Linn Crosetto <linn@hpe.com>
+Cc: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ drivers/firmware/efi/libstub/arm-stub.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+--- a/drivers/firmware/efi/libstub/arm-stub.c
++++ b/drivers/firmware/efi/libstub/arm-stub.c
+@@ -26,11 +26,14 @@ static int efi_get_secureboot(efi_system
+               'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0 };
+       static efi_char16_t const sm_var_name[] = {
+               'S', 'e', 't', 'u', 'p', 'M', 'o', 'd', 'e', 0 };
++      static efi_char16_t const mk_var_name[] = {
++              'M', 'o', 'k', 'S', 'B', 'S', 't', 'a', 't', 'e', 0 };
+       efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
+       efi_get_variable_t *f_getvar = sys_table_arg->runtime->get_variable;
+       u8 val;
+       unsigned long size = sizeof(val);
++      u32 attr;
+       efi_status_t status;
+       status = f_getvar((efi_char16_t *)sb_var_name, (efi_guid_t *)&var_guid,
+@@ -51,6 +54,22 @@ static int efi_get_secureboot(efi_system
+       if (val == 1)
+               return 0;
++      /* See if a user has put shim into insecure_mode.  If so, and the variable
++       * doesn't have the runtime attribute set, we might as well honor that.
++       */
++      var_guid = EFI_SHIM_LOCK_GUID;
++      status = f_getvar((efi_char16_t *)mk_var_name, (efi_guid_t *)&var_guid,
++                              &attr, &size, &val);
++
++      /* If it fails, we don't care why.  Default to secure */
++      if (status != EFI_SUCCESS)
++              return 1;
++
++      if (!(attr & EFI_VARIABLE_RUNTIME_ACCESS)) {
++              if (val == 1)
++                      return 0;
++      }
++
+       return 1;
+ out_efi_err:
diff --git a/patches/features/all/securelevel/asus-wmi-restrict-debugfs-interface-when-securelevel.patch b/patches/features/all/securelevel/asus-wmi-restrict-debugfs-interface-when-securelevel.patch
new file mode 100644 (file)
index 0000000..08afb52
--- /dev/null
@@ -0,0 +1,57 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Fri, 9 Mar 2012 08:46:50 -0500
+Subject: [11/18] asus-wmi: Restrict debugfs interface when securelevel is set
+Origin: https://github.com/mjg59/linux/commit/f6e21827205ffcbfcce4b13d3a233427c3e742e0
+
+We have no way of validating what all of the Asus WMI methods do on a
+given machine, and there's a risk that some will allow hardware state to
+be manipulated in such a way that arbitrary code can be executed in the
+kernel. Prevent that if securelevel is set.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ drivers/platform/x86/asus-wmi.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
+index a96630d52346..93943e480a67 100644
+--- a/drivers/platform/x86/asus-wmi.c
++++ b/drivers/platform/x86/asus-wmi.c
+@@ -45,6 +45,7 @@
+ #include <linux/seq_file.h>
+ #include <linux/platform_device.h>
+ #include <linux/thermal.h>
++#include <linux/security.h>
+ #include <linux/acpi.h>
+ #include <linux/dmi.h>
+ #include <acpi/video.h>
+@@ -1867,6 +1868,9 @@ static int show_dsts(struct seq_file *m, void *data)
+       int err;
+       u32 retval = -1;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
+       if (err < 0)
+@@ -1883,6 +1887,9 @@ static int show_devs(struct seq_file *m, void *data)
+       int err;
+       u32 retval = -1;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
+                                   &retval);
+@@ -1907,6 +1914,9 @@ static int show_call(struct seq_file *m, void *data)
+       union acpi_object *obj;
+       acpi_status status;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID,
+                                    1, asus->debug.method_id,
+                                    &input, &output);
diff --git a/patches/features/all/securelevel/efi-disable-secure-boot-if-shim-is-in-insecure-mode.patch b/patches/features/all/securelevel/efi-disable-secure-boot-if-shim-is-in-insecure-mode.patch
new file mode 100644 (file)
index 0000000..98cd43c
--- /dev/null
@@ -0,0 +1,66 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Tue, 5 Feb 2013 19:25:05 -0500
+Subject: [13/18] efi: Disable secure boot if shim is in insecure mode
+Origin: https://github.com/mjg59/linux/commit/f444a5ecb0ab09d6cf661b4520dd8e6fffacb8be
+
+A user can manually tell the shim boot loader to disable validation of
+images it loads.  When a user does this, it creates a UEFI variable called
+MokSBState that does not have the runtime attribute set.  Given that the
+user explicitly disabled validation, we can honor that and not enable
+secure boot mode if that variable is set.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ arch/x86/boot/compressed/eboot.c | 20 +++++++++++++++++++-
+ include/linux/efi.h              |  3 +++
+ 2 files changed, 22 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/boot/compressed/eboot.c
++++ b/arch/x86/boot/compressed/eboot.c
+@@ -1053,8 +1053,9 @@ void setup_graphics(struct boot_params *
+ static int get_secure_boot(void)
+ {
+-      u8 sb, setup;
++      u8 sb, setup, moksbstate;
+       unsigned long datasize = sizeof(sb);
++      u32 attr;
+       efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
+       efi_status_t status;
+@@ -1078,6 +1079,23 @@ static int get_secure_boot(void)
+       if (setup == 1)
+               return 0;
++      /* See if a user has put shim into insecure_mode.  If so, and the variable
++       * doesn't have the runtime attribute set, we might as well honor that.
++       */
++      var_guid = EFI_SHIM_LOCK_GUID;
++      status = efi_early->call((unsigned long)sys_table->runtime->get_variable,
++                              L"MokSBState", &var_guid, &attr, &datasize,
++                              &moksbstate);
++
++      /* If it fails, we don't care why.  Default to secure */
++      if (status != EFI_SUCCESS)
++              return 1;
++
++      if (!(attr & EFI_VARIABLE_RUNTIME_ACCESS)) {
++              if (moksbstate == 1)
++                      return 0;
++      }
++
+       return 1;
+ }
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -629,6 +629,9 @@ typedef struct {
+ #define EFI_1_10_SYSTEM_TABLE_REVISION  ((1 << 16) | (10))
+ #define EFI_1_02_SYSTEM_TABLE_REVISION  ((1 << 16) | (02))
++#define EFI_SHIM_LOCK_GUID \
++    EFI_GUID(  0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 )
++
+ typedef struct {
+       efi_table_hdr_t hdr;
+       u64 fw_vendor;  /* physical addr of CHAR16 vendor string */
diff --git a/patches/features/all/securelevel/enable-cold-boot-attack-mitigation.patch b/patches/features/all/securelevel/enable-cold-boot-attack-mitigation.patch
new file mode 100644 (file)
index 0000000..14d5a3b
--- /dev/null
@@ -0,0 +1,49 @@
+From: Matthew Garrett <mjg59@coreos.com>
+Date: Tue, 12 Jan 2016 12:51:27 -0800
+Subject: [18/18] Enable cold boot attack mitigation
+Origin: https://github.com/mjg59/linux/commit/02d999574936dd234a508c0112a0200c135a5c34
+
+---
+ arch/x86/boot/compressed/eboot.c | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
+index 28c24d80d0a0..b0413ba639af 100644
+--- a/arch/x86/boot/compressed/eboot.c
++++ b/arch/x86/boot/compressed/eboot.c
+@@ -1051,6 +1051,22 @@ void setup_graphics(struct boot_params *boot_params)
+       }
+ }
++#define MEMORY_ONLY_RESET_CONTROL_GUID \
++      EFI_GUID (0xe20939be, 0x32d4, 0x41be, 0xa1, 0x50, 0x89, 0x7f, 0x85, 0xd4, 0x98, 0x29)
++
++static void enable_reset_attack_mitigation(void)
++{
++      u8 val = 1;
++      efi_guid_t var_guid = MEMORY_ONLY_RESET_CONTROL_GUID;
++
++      /* Ignore the return value here - there's not really a lot we can do */
++      efi_early->call((unsigned long)sys_table->runtime->set_variable,
++                      L"MemoryOverwriteRequestControl", &var_guid,
++                      EFI_VARIABLE_NON_VOLATILE |
++                      EFI_VARIABLE_BOOTSERVICE_ACCESS |
++                      EFI_VARIABLE_RUNTIME_ACCESS, sizeof(val), val);
++}
++
+ static int get_secure_boot(void)
+ {
+       u8 sb, setup, moksbstate;
+@@ -1482,6 +1498,12 @@ struct boot_params *efi_main(struct efi_config *c,
+       else
+               setup_boot_services32(efi_early);
++      /*
++       * Ask the firmware to clear memory if we don't have a clean
++       * shutdown
++       */
++      enable_reset_attack_mitigation();
++
+       sanitize_boot_params(boot_params);
+       boot_params->secure_boot = get_secure_boot();
diff --git a/patches/features/all/securelevel/enforce-module-signatures-when-securelevel-is-greate.patch b/patches/features/all/securelevel/enforce-module-signatures-when-securelevel-is-greate.patch
new file mode 100644 (file)
index 0000000..f6a2959
--- /dev/null
@@ -0,0 +1,24 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Mon, 9 Sep 2013 08:46:52 -0400
+Subject: [02/18] Enforce module signatures when securelevel is greater than 0
+Origin: https://github.com/mjg59/linux/commit/90e0fa532b145d1bb76c368277a3a3e3b3eb5c94
+
+If securelevel has been set to 1 or greater, require that all modules have
+valid signatures.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ kernel/module.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -2616,7 +2616,7 @@ static int module_sig_check(struct load_
+       }
+       /* Not having a signature is only an error if we're strict. */
+-      if (err == -ENOKEY && !sig_enforce)
++      if ((err == -ENOKEY && !sig_enforce) && (get_securelevel() <= 0))
+               err = 0;
+       return err;
diff --git a/patches/features/all/securelevel/hibernate-disable-when-securelevel-is-set.patch b/patches/features/all/securelevel/hibernate-disable-when-securelevel-is-set.patch
new file mode 100644 (file)
index 0000000..3f22314
--- /dev/null
@@ -0,0 +1,36 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Fri, 20 Jun 2014 08:53:24 -0400
+Subject: [14/18] hibernate: Disable when securelevel is set
+Origin: https://github.com/mjg59/linux/commit/500a87278c5c0608ba88ed8af7a35fcfa955c492
+
+There is currently no way to verify the resume image when returning
+from hibernate.  This might compromise the securelevel trust model,
+so until we can work with signed hibernate images we disable it in
+a secure modules environment.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ kernel/power/hibernate.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
+index fca9254280ee..7bf7f723a27f 100644
+--- a/kernel/power/hibernate.c
++++ b/kernel/power/hibernate.c
+@@ -29,6 +29,7 @@
+ #include <linux/ctype.h>
+ #include <linux/genhd.h>
+ #include <linux/ktime.h>
++#include <linux/security.h>
+ #include <trace/events/power.h>
+ #include "power.h"
+@@ -66,7 +67,7 @@ static const struct platform_hibernation_ops *hibernation_ops;
+ bool hibernation_available(void)
+ {
+-      return (nohibernate == 0);
++      return ((nohibernate == 0) && (get_securelevel() <= 0));
+ }
+ /**
diff --git a/patches/features/all/securelevel/kexec-disable-at-runtime-if-securelevel-has-been-set.patch b/patches/features/all/securelevel/kexec-disable-at-runtime-if-securelevel-has-been-set.patch
new file mode 100644 (file)
index 0000000..3969a8e
--- /dev/null
@@ -0,0 +1,36 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Fri, 9 Aug 2013 03:33:56 -0400
+Subject: [08/18] kexec: Disable at runtime if securelevel has been set.
+Origin: https://github.com/mjg59/linux/commit/ec87b6aac76fd553578cec2c05674e22b79afe3e
+
+kexec permits the loading and execution of arbitrary code in ring 0, which
+permits the modification of the running kernel. Prevent this if securelevel
+has been set.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ kernel/kexec.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/kernel/kexec.c b/kernel/kexec.c
+index ee70aef5cd81..542655ea297c 100644
+--- a/kernel/kexec.c
++++ b/kernel/kexec.c
+@@ -17,6 +17,7 @@
+ #include <linux/syscalls.h>
+ #include <linux/vmalloc.h>
+ #include <linux/slab.h>
++#include <linux/security.h>
+ #include "kexec_internal.h"
+@@ -134,6 +135,9 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
+       if (!capable(CAP_SYS_BOOT) || kexec_load_disabled)
+               return -EPERM;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       /*
+        * Verify we have a legal set of flags
+        * This leaves us room for future extensions.
diff --git a/patches/features/all/securelevel/kexec-uefi-copy-secure_boot-flag-in-boot-params-acro.patch b/patches/features/all/securelevel/kexec-uefi-copy-secure_boot-flag-in-boot-params-acro.patch
new file mode 100644 (file)
index 0000000..445aa63
--- /dev/null
@@ -0,0 +1,32 @@
+From: Dave Young <dyoung@redhat.com>
+Date: Tue, 6 Oct 2015 13:31:31 +0100
+Subject: [15/18] kexec/uefi: copy secure_boot flag in boot params across kexec
+ reboot
+Origin: https://github.com/mjg59/linux/commit/4b2b64d5a6ebc84214755ebccd599baef7c1b798
+
+Kexec reboot in case secure boot being enabled does not keep the secure
+boot mode in new kernel, so later one can load unsigned kernel via legacy
+kexec_load.  In this state, the system is missing the protections provided
+by secure boot. Adding a patch to fix this by retain the secure_boot flag
+in original kernel.
+
+secure_boot flag in boot_params is set in EFI stub, but kexec bypasses the
+stub. Fixing this issue by copying secure_boot flag across kexec reboot.
+
+Signed-off-by: Dave Young <dyoung@redhat.com>
+---
+ arch/x86/kernel/kexec-bzimage64.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c
+index 2af478e3fd4e..61827eeb6881 100644
+--- a/arch/x86/kernel/kexec-bzimage64.c
++++ b/arch/x86/kernel/kexec-bzimage64.c
+@@ -180,6 +180,7 @@ setup_efi_state(struct boot_params *params, unsigned long params_load_addr,
+       if (efi_enabled(EFI_OLD_MEMMAP))
+               return 0;
++      params->secure_boot = boot_params.secure_boot;
+       ei->efi_loader_signature = current_ei->efi_loader_signature;
+       ei->efi_systab = current_ei->efi_systab;
+       ei->efi_systab_hi = current_ei->efi_systab_hi;
diff --git a/patches/features/all/securelevel/mtd-disable-slram-and-phram-when-securelevel-is-enabled.patch b/patches/features/all/securelevel/mtd-disable-slram-and-phram-when-securelevel-is-enabled.patch
new file mode 100644 (file)
index 0000000..40adb44
--- /dev/null
@@ -0,0 +1,53 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 03 Jun 2016 00:48:39 +0100
+Subject: mtd: Disable slram and phram when securelevel is enabled
+Forwarded: no
+
+The slram and phram drivers both allow mapping regions of physical
+address space such that they can then be read and written by userland
+through the MTD interface.  This is probably usable to manipulate
+hardware into overwriting kernel code on many systems.  Prevent that
+if securelevel is set.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/drivers/mtd/devices/phram.c
++++ b/drivers/mtd/devices/phram.c
+@@ -25,6 +25,7 @@
+ #include <linux/moduleparam.h>
+ #include <linux/slab.h>
+ #include <linux/mtd/mtd.h>
++#include <linux/security.h>
+ struct phram_mtd_list {
+       struct mtd_info mtd;
+@@ -226,6 +227,9 @@ static int phram_setup(const char *val)
+       uint64_t len;
+       int i, ret;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (strnlen(val, sizeof(buf)) >= sizeof(buf))
+               parse_err("parameter too long\n");
+--- a/drivers/mtd/devices/slram.c
++++ b/drivers/mtd/devices/slram.c
+@@ -42,6 +42,7 @@
+ #include <linux/ioctl.h>
+ #include <linux/init.h>
+ #include <linux/io.h>
++#include <linux/security.h>
+ #include <linux/mtd/mtd.h>
+@@ -230,6 +231,9 @@ static int parse_cmdline(char *devname,
+       unsigned long devstart;
+       unsigned long devlength;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if ((!devname) || (!szstart) || (!szlength)) {
+               unregister_devices();
+               return(-EINVAL);
diff --git a/patches/features/all/securelevel/pci-lock-down-bar-access-when-securelevel-is-enabled.patch b/patches/features/all/securelevel/pci-lock-down-bar-access-when-securelevel-is-enabled.patch
new file mode 100644 (file)
index 0000000..06e2136
--- /dev/null
@@ -0,0 +1,108 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Thu, 8 Mar 2012 10:10:38 -0500
+Subject: [03/18] PCI: Lock down BAR access when securelevel is enabled
+Origin: https://github.com/mjg59/linux/commit/2533a3844cf8c43bf58b653334f8925cd1e7d405
+
+Any hardware that can potentially generate DMA has to be locked down from
+userspace in order to avoid it being possible for an attacker to modify
+kernel code. This should be prevented if securelevel has been set. Default
+to paranoid - in future we can potentially relax this for sufficiently
+IOMMU-isolated devices.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ drivers/pci/pci-sysfs.c | 9 +++++++++
+ drivers/pci/proc.c      | 9 ++++++++-
+ drivers/pci/syscall.c   | 3 ++-
+ 3 files changed, 19 insertions(+), 2 deletions(-)
+
+--- a/drivers/pci/pci-sysfs.c
++++ b/drivers/pci/pci-sysfs.c
+@@ -716,6 +716,9 @@ static ssize_t pci_write_config(struct f
+       loff_t init_off = off;
+       u8 *data = (u8 *) buf;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (off > dev->cfg_size)
+               return 0;
+       if (off + count > dev->cfg_size) {
+@@ -1007,6 +1010,9 @@ static int pci_mmap_resource(struct kobj
+       resource_size_t start, end;
+       int i;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       for (i = 0; i < PCI_ROM_RESOURCE; i++)
+               if (res == &pdev->resource[i])
+                       break;
+@@ -1106,6 +1112,9 @@ static ssize_t pci_write_resource_io(str
+                                    struct bin_attribute *attr, char *buf,
+                                    loff_t off, size_t count)
+ {
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       return pci_resource_io(filp, kobj, attr, buf, off, count, true);
+ }
+--- a/drivers/pci/proc.c
++++ b/drivers/pci/proc.c
+@@ -11,6 +11,7 @@
+ #include <linux/proc_fs.h>
+ #include <linux/seq_file.h>
+ #include <linux/capability.h>
++#include <linux/security.h>
+ #include <asm/uaccess.h>
+ #include <asm/byteorder.h>
+ #include "pci.h"
+@@ -116,6 +117,9 @@ static ssize_t proc_bus_pci_write(struct
+       int size = dev->cfg_size;
+       int cnt;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (pos >= size)
+               return 0;
+       if (nbytes >= size)
+@@ -195,6 +199,9 @@ static long proc_bus_pci_ioctl(struct fi
+ #endif /* HAVE_PCI_MMAP */
+       int ret = 0;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       switch (cmd) {
+       case PCIIOC_CONTROLLER:
+               ret = pci_domain_nr(dev->bus);
+@@ -233,7 +240,7 @@ static int proc_bus_pci_mmap(struct file
+       struct pci_filp_private *fpriv = file->private_data;
+       int i, ret, write_combine;
+-      if (!capable(CAP_SYS_RAWIO))
++      if (!capable(CAP_SYS_RAWIO) || (get_securelevel() > 0))
+               return -EPERM;
+       /* Make sure the caller is mapping a real resource for this device */
+--- a/drivers/pci/syscall.c
++++ b/drivers/pci/syscall.c
+@@ -10,6 +10,7 @@
+ #include <linux/errno.h>
+ #include <linux/pci.h>
+ #include <linux/syscalls.h>
++#include <linux/security.h>
+ #include <asm/uaccess.h>
+ #include "pci.h"
+@@ -92,7 +93,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigne
+       u32 dword;
+       int err = 0;
+-      if (!capable(CAP_SYS_ADMIN))
++      if (!capable(CAP_SYS_ADMIN) || (get_securelevel() > 0))
+               return -EPERM;
+       dev = pci_get_bus_and_slot(bus, dfn);
diff --git a/patches/features/all/securelevel/restrict-dev-mem-and-dev-kmem-when-securelevel-is-se.patch b/patches/features/all/securelevel/restrict-dev-mem-and-dev-kmem-when-securelevel-is-se.patch
new file mode 100644 (file)
index 0000000..b36cd7f
--- /dev/null
@@ -0,0 +1,37 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Fri, 9 Mar 2012 09:28:15 -0500
+Subject: [05/18] Restrict /dev/mem and /dev/kmem when securelevel is set.
+Origin: https://github.com/mjg59/linux/commit/401996625d478c814fe9e736ca9e6c5c5f055f06
+
+Allowing users to write to address space provides mechanisms that may permit
+modification of the kernel at runtime. Prevent this if securelevel has been
+set.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+[bwh: Forward-ported to 4.9: adjust context]
+---
+ drivers/char/mem.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/char/mem.c
++++ b/drivers/char/mem.c
+@@ -164,6 +164,9 @@ static ssize_t write_mem(struct file *fi
+       if (p != *ppos)
+               return -EFBIG;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (!valid_phys_addr_range(p, count))
+               return -EFAULT;
+@@ -514,6 +517,9 @@ static ssize_t write_kmem(struct file *f
+       char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
+       int err = 0;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (p < (unsigned long) high_memory) {
+               unsigned long to_write = min_t(unsigned long, count,
+                                              (unsigned long)high_memory - p);
diff --git a/patches/features/all/securelevel/uswsusp-disable-when-securelevel-is-set.patch b/patches/features/all/securelevel/uswsusp-disable-when-securelevel-is-set.patch
new file mode 100644 (file)
index 0000000..88129ec
--- /dev/null
@@ -0,0 +1,36 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Tue, 3 Sep 2013 11:23:29 -0400
+Subject: [09/18] uswsusp: Disable when securelevel is set
+Origin: https://github.com/mjg59/linux/commit/504f45f7cc9b4265a4d89728c4f8254295e81977
+
+uswsusp allows a user process to dump and then restore kernel state, which
+makes it possible to modify the running kernel. Disable this if securelevel
+has been set.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ kernel/power/user.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/kernel/power/user.c b/kernel/power/user.c
+index 526e8911460a..40618bf41620 100644
+--- a/kernel/power/user.c
++++ b/kernel/power/user.c
+@@ -24,6 +24,7 @@
+ #include <linux/console.h>
+ #include <linux/cpu.h>
+ #include <linux/freezer.h>
++#include <linux/security.h>
+ #include <asm/uaccess.h>
+@@ -52,6 +53,9 @@ static int snapshot_open(struct inode *inode, struct file *filp)
+       if (!hibernation_available())
+               return -EPERM;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       lock_system_sleep();
+       if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
diff --git a/patches/features/all/securelevel/x86-lock-down-io-port-access-when-securelevel-is-ena.patch b/patches/features/all/securelevel/x86-lock-down-io-port-access-when-securelevel-is-ena.patch
new file mode 100644 (file)
index 0000000..8201450
--- /dev/null
@@ -0,0 +1,74 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Thu, 8 Mar 2012 10:35:59 -0500
+Subject: [04/18] x86: Lock down IO port access when securelevel is enabled
+Origin: https://github.com/mjg59/linux/commit/2ad64f6ea1f1164c8b552860faa27392d9da9928
+
+IO port access would permit users to gain access to PCI configuration
+registers, which in turn (on a lot of hardware) give access to MMIO register
+space. This would potentially permit root to trigger arbitrary DMA, so lock
+it down when securelevel is set.
+
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ arch/x86/kernel/ioport.c | 5 +++--
+ drivers/char/mem.c       | 7 +++++++
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/kernel/ioport.c
++++ b/arch/x86/kernel/ioport.c
+@@ -15,6 +15,7 @@
+ #include <linux/thread_info.h>
+ #include <linux/syscalls.h>
+ #include <linux/bitmap.h>
++#include <linux/security.h>
+ #include <asm/syscalls.h>
+ /*
+@@ -28,7 +29,7 @@ asmlinkage long sys_ioperm(unsigned long
+       if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
+               return -EINVAL;
+-      if (turn_on && !capable(CAP_SYS_RAWIO))
++      if (turn_on && (!capable(CAP_SYS_RAWIO) || (get_securelevel() > 0)))
+               return -EPERM;
+       /*
+@@ -108,7 +109,7 @@ SYSCALL_DEFINE1(iopl, unsigned int, leve
+               return -EINVAL;
+       /* Trying to gain more privileges? */
+       if (level > old) {
+-              if (!capable(CAP_SYS_RAWIO))
++              if (!capable(CAP_SYS_RAWIO) || (get_securelevel() > 0))
+                       return -EPERM;
+       }
+       regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) |
+--- a/drivers/char/mem.c
++++ b/drivers/char/mem.c
+@@ -27,6 +27,7 @@
+ #include <linux/export.h>
+ #include <linux/io.h>
+ #include <linux/uio.h>
++#include <linux/security.h>
+ #include <linux/uaccess.h>
+@@ -559,6 +560,9 @@ static ssize_t read_port(struct file *fi
+       unsigned long i = *ppos;
+       char __user *tmp = buf;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (!access_ok(VERIFY_WRITE, buf, count))
+               return -EFAULT;
+       while (count-- > 0 && i < 65536) {
+@@ -577,6 +581,9 @@ static ssize_t write_port(struct file *f
+       unsigned long i = *ppos;
+       const char __user *tmp = buf;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (!access_ok(VERIFY_READ, buf, count))
+               return -EFAULT;
+       while (count-- > 0 && i < 65536) {
diff --git a/patches/features/all/securelevel/x86-restrict-msr-access-when-securelevel-is-set.patch b/patches/features/all/securelevel/x86-restrict-msr-access-when-securelevel-is-set.patch
new file mode 100644 (file)
index 0000000..40263e1
--- /dev/null
@@ -0,0 +1,46 @@
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Fri, 8 Feb 2013 11:12:13 -0800
+Subject: [10/18] x86: Restrict MSR access when securelevel is set
+Origin: https://github.com/mjg59/linux/commit/c6ad37822699967e60fae57a64ae89676f543182
+
+Permitting write access to MSRs allows userspace to modify the running
+kernel. Prevent this if securelevel has been set. Based on a patch by Kees
+Cook.
+
+Cc: Kees Cook <keescook@chromium.org>
+Signed-off-by: Matthew Garrett <mjg59@srcf.ucam.org>
+---
+ arch/x86/kernel/msr.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/arch/x86/kernel/msr.c
++++ b/arch/x86/kernel/msr.c
+@@ -39,6 +39,7 @@
+ #include <linux/notifier.h>
+ #include <linux/uaccess.h>
+ #include <linux/gfp.h>
++#include <linux/security.h>
+ #include <asm/cpufeature.h>
+ #include <asm/msr.h>
+@@ -83,6 +84,9 @@ static ssize_t msr_write(struct file *fi
+       int err = 0;
+       ssize_t bytes = 0;
++      if (get_securelevel() > 0)
++              return -EPERM;
++
+       if (count % 8)
+               return -EINVAL; /* Invalid chunk size */
+@@ -130,6 +134,10 @@ static long msr_ioctl(struct file *file,
+                       err = -EBADF;
+                       break;
+               }
++              if (get_securelevel() > 0) {
++                      err = -EPERM;
++                      break;
++              }
+               if (copy_from_user(&regs, uregs, sizeof regs)) {
+                       err = -EFAULT;
+                       break;
diff --git a/patches/features/all/security-perf-allow-further-restriction-of-perf_event_open.patch b/patches/features/all/security-perf-allow-further-restriction-of-perf_event_open.patch
new file mode 100644 (file)
index 0000000..6acd429
--- /dev/null
@@ -0,0 +1,75 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Mon, 11 Jan 2016 15:23:55 +0000
+Subject: security,perf: Allow further restriction of perf_event_open
+Forwarded: https://lkml.org/lkml/2016/1/11/587
+
+When kernel.perf_event_open is set to 3 (or greater), disallow all
+access to performance events by users without CAP_SYS_ADMIN.
+Add a Kconfig symbol CONFIG_SECURITY_PERF_EVENTS_RESTRICT that
+makes this value the default.
+
+This is based on a similar feature in grsecurity
+(CONFIG_GRKERNSEC_PERF_HARDEN).  This version doesn't include making
+the variable read-only.  It also allows enabling further restriction
+at run-time regardless of whether the default is changed.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+--- a/include/linux/perf_event.h
++++ b/include/linux/perf_event.h
+@@ -1145,6 +1145,11 @@ extern int perf_cpu_time_max_percent_han
+ int perf_event_max_stack_handler(struct ctl_table *table, int write,
+                                void __user *buffer, size_t *lenp, loff_t *ppos);
++static inline bool perf_paranoid_any(void)
++{
++      return sysctl_perf_event_paranoid > 2;
++}
++
+ static inline bool perf_paranoid_tracepoint_raw(void)
+ {
+       return sysctl_perf_event_paranoid > -1;
+--- a/kernel/events/core.c
++++ b/kernel/events/core.c
+@@ -389,8 +389,13 @@ static struct srcu_struct pmus_srcu;
+  *   0 - disallow raw tracepoint access for unpriv
+  *   1 - disallow cpu events for unpriv
+  *   2 - disallow kernel profiling for unpriv
++ *   3 - disallow all unpriv perf event use
+  */
++#ifdef CONFIG_SECURITY_PERF_EVENTS_RESTRICT
++int sysctl_perf_event_paranoid __read_mostly = 3;
++#else
+ int sysctl_perf_event_paranoid __read_mostly = 2;
++#endif
+ /* Minimum for 512 kiB + 1 user control page */
+ int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
+@@ -9395,6 +9400,9 @@ SYSCALL_DEFINE5(perf_event_open,
+       if (flags & ~PERF_FLAG_ALL)
+               return -EINVAL;
++      if (perf_paranoid_any() && !capable(CAP_SYS_ADMIN))
++              return -EACCES;
++
+       err = perf_copy_attr(attr_uptr, &attr);
+       if (err)
+               return err;
+--- a/security/Kconfig
++++ b/security/Kconfig
+@@ -18,6 +18,15 @@ config SECURITY_DMESG_RESTRICT
+         If you are unsure how to answer this question, answer N.
++config SECURITY_PERF_EVENTS_RESTRICT
++      bool "Restrict unprivileged use of performance events"
++      depends on PERF_EVENTS
++      help
++        If you say Y here, the kernel.perf_event_paranoid sysctl
++        will be set to 3 by default, and no unprivileged use of the
++        perf_event_open syscall will be permitted unless it is
++        changed.
++
+ config SECURITY
+       bool "Enable different security models"
+       depends on SYSFS
diff --git a/patches/features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch b/patches/features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch
new file mode 100644 (file)
index 0000000..babf877
--- /dev/null
@@ -0,0 +1,207 @@
+From: Ashley Hughes <ashley.hughes@blueyonder.co.uk>
+Date: Sat, 19 Nov 2016 08:10:27 +0100
+Subject: [PATCH] ARM: dts: orion5x: convert ls-chl to FDT
+Origin: https://git.kernel.org/linus/f94f268979a2aaeb5842c5b24ed7d44497f7753c
+
+This patch converts my orion5x ls-chl Linkstation device to device tree.
+
+[gregory.clement@free-electrons.com: fix title, add back the commit log,
+move the removal of the platform in an other patch]
+Signed-off-by: Ashley Hughes <ashley.hughes@blueyonder.co.uk>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+---
+ arch/arm/boot/dts/Makefile          |   1 +
+ arch/arm/boot/dts/orion5x-lschl.dts | 171 ++++++++++++++++++++++++++++++++++++
+ 2 files changed, 172 insertions(+)
+ create mode 100644 arch/arm/boot/dts/orion5x-lschl.dts
+
+diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
+index befcd2619902..485304914916 100644
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -597,6 +597,7 @@ dtb-$(CONFIG_ARCH_ORION5X) += \
+       orion5x-lacie-ethernet-disk-mini-v2.dtb \
+       orion5x-linkstation-lsgl.dtb \
+       orion5x-linkstation-lswtgl.dtb \
++      orion5x-lschl.dtb \
+       orion5x-lswsgl.dtb \
+       orion5x-maxtor-shared-storage-2.dtb \
+       orion5x-netgear-wnr854t.dtb \
+diff --git a/arch/arm/boot/dts/orion5x-lschl.dts b/arch/arm/boot/dts/orion5x-lschl.dts
+new file mode 100644
+index 000000000000..947409252845
+--- /dev/null
++++ b/arch/arm/boot/dts/orion5x-lschl.dts
+@@ -0,0 +1,171 @@
++/*
++ * Device Tree file for Buffalo Linkstation LS-CHLv3
++ *
++ * Copyright (C) 2016 Ash Hughes <ashley.hughes@blueyonder.co.uk>
++ * Copyright (C) 2015, 2016
++ * Roger Shimizu <rogershimizu@gmail.com>
++ *
++ * This file is dual-licensed: you can use it either under the terms
++ * of the GPL or the X11 license, at your option. Note that this dual
++ * licensing only applies to this file, and not this project as a
++ * whole.
++ *
++ *  a) This file 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 file 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.
++ *
++ * Or, alternatively
++ *
++ *  b) 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 , 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.
++ */
++
++/dts-v1/;
++
++#include "orion5x-linkstation.dtsi"
++#include "mvebu-linkstation-gpio-simple.dtsi"
++#include "mvebu-linkstation-fan.dtsi"
++#include <dt-bindings/gpio/gpio.h>
++
++/ {
++      model = "Buffalo Linkstation Live v3 (LS-CHL)";
++      compatible = "buffalo,lschl", "marvell,orion5x-88f5182", "marvell,orion5x";
++
++      memory { /* 128 MB */
++              device_type = "memory";
++              reg = <0x00000000 0x8000000>;
++      };
++
++      gpio_keys {
++              func {
++                      label = "Function Button";
++                      linux,code = <KEY_OPTION>;
++                      gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
++              };
++
++              power-on-switch {
++                      gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
++              };
++
++              power-auto-switch {
++                      gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
++              };
++      };
++
++      gpio_leds {
++              pinctrl-0 = <&pmx_led_power &pmx_led_alarm &pmx_led_info &pmx_led_func>;
++              blue-power-led {
++                      gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
++              };
++
++              red-alarm-led {
++                      gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
++              };
++
++              amber-info-led {
++                      gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
++              };
++
++              func {
++                      label = "lschl:func:blue:top";
++                      gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
++              };
++      };
++
++      gpio_fan {
++              gpios = <&gpio0 14 GPIO_ACTIVE_LOW
++                       &gpio0 16 GPIO_ACTIVE_LOW>;
++
++              alarm-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
++      };
++};
++
++&pinctrl {
++      pmx_led_power: pmx-leds {
++              marvell,pins = "mpp0";
++              marvell,function = "gpio";
++      };
++
++      pmx_power_hdd: pmx-power-hdd {
++              marvell,pins = "mpp1";
++              marvell,function = "gpio";
++      };
++
++      pmx_led_alarm: pmx-leds {
++              marvell,pins = "mpp2";
++              marvell,function = "gpio";
++      };
++
++      pmx_led_info: pmx-leds {
++              marvell,pins = "mpp3";
++              marvell,function = "gpio";
++      };
++
++      pmx_fan_lock: pmx-fan-lock {
++              marvell,pins = "mpp6";
++              marvell,function = "gpio";
++      };
++
++      pmx_power_switch: pmx-power-switch {
++              marvell,pins = "mpp8", "mpp10", "mpp15";
++              marvell,function = "gpio";
++      };
++
++      pmx_power_usb: pmx-power-usb {
++              marvell,pins = "mpp9";
++              marvell,function = "gpio";
++      };
++
++      pmx_fan_high: pmx-fan-high {
++              marvell,pins = "mpp14";
++              marvell,function = "gpio";
++      };
++
++      pmx_fan_low: pmx-fan-low {
++              marvell,pins = "mpp16";
++              marvell,function = "gpio";
++      };
++
++      pmx_led_func: pmx-leds {
++              marvell,pins = "mpp17";
++              marvell,function = "gpio";
++      };
++
++      pmx_sw_init: pmx-sw-init {
++              marvell,pins = "mpp7";
++              marvell,function = "gpio";
++      };
++};
++
++&hdd_power {
++      gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
++};
++
++&usb_power {
++      gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
++};
++
diff --git a/patches/features/arm/ARM-dts-orion5x-lschl-Fix-model-name.patch b/patches/features/arm/ARM-dts-orion5x-lschl-Fix-model-name.patch
new file mode 100644 (file)
index 0000000..c7a62ad
--- /dev/null
@@ -0,0 +1,43 @@
+From: Roger Shimizu <rogershimizu@gmail.com>
+Date: Mon, 30 Jan 2017 20:07:29 +0900
+Subject: [PATCH 1/2] ARM: dts: orion5x-lschl: Fix model name
+Origin: https://git.kernel.org/linus/81917bad86a66f2bdcb12b4c10ab1bf333ed25ec
+
+Model name should be consistent with legacy device file, so that user
+can migrate their system from legacy device support to device-tree
+safely.
+
+Legacy device file is currently removed, but it can be found on 4.8
+or previous version of linux:
+  arch/arm/mach-orion5x/ls-chl-setup.c
+
+Fixes: f94f268979a2 ("ARM: dts: orion5x: convert ls-chl to FDT")
+Cc: Ashley Hughes <ashley.hughes@blueyonder.co.uk>
+Signed-off-by: Roger Shimizu <rogershimizu@gmail.com>
+Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+---
+ arch/arm/boot/dts/orion5x-lschl.dts | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/orion5x-lschl.dts b/arch/arm/boot/dts/orion5x-lschl.dts
+index 7c999b092e06..ee751995c8d0 100644
+--- a/arch/arm/boot/dts/orion5x-lschl.dts
++++ b/arch/arm/boot/dts/orion5x-lschl.dts
+@@ -2,7 +2,7 @@
+  * Device Tree file for Buffalo Linkstation LS-CHLv3
+  *
+  * Copyright (C) 2016 Ash Hughes <ashley.hughes@blueyonder.co.uk>
+- * Copyright (C) 2015, 2016
++ * Copyright (C) 2015-2017
+  * Roger Shimizu <rogershimizu@gmail.com>
+  *
+  * This file is dual-licensed: you can use it either under the terms
+@@ -52,7 +52,7 @@
+ #include <dt-bindings/gpio/gpio.h>
+ / {
+-      model = "Buffalo Linkstation Live v3 (LS-CHL)";
++      model = "Buffalo Linkstation LiveV3 (LS-CHL)";
+       compatible = "buffalo,lschl", "marvell,orion5x-88f5182", "marvell,orion5x";
+       memory { /* 128 MB */
diff --git a/patches/features/arm/ARM-dts-orion5x-lschl-More-consistent-naming-on-link.patch b/patches/features/arm/ARM-dts-orion5x-lschl-More-consistent-naming-on-link.patch
new file mode 100644 (file)
index 0000000..a83af0d
--- /dev/null
@@ -0,0 +1,383 @@
+From: Roger Shimizu <rogershimizu@gmail.com>
+Date: Mon, 30 Jan 2017 20:07:30 +0900
+Subject: [PATCH 2/2] ARM: dts: orion5x-lschl: More consistent naming on
+ linkstation series
+Origin: https://git.kernel.org/linus/6cfd3cd8d8365cf78db1d25cd276d3d900eb8541
+
+DTS files, which includes orion5x-linkstation.dtsi, are named:
+  orion5x-linkstation-*.dts
+
+So we rename the file below:
+  arch/arm/boot/dts/orion5x-lschl.dts
+to the new name:
+  arch/arm/boot/dts/orion5x-linkstation-lschl.dts
+
+Because DTS conversion of this device was just introduced in 4.9, Debian
+is still using legacy device support, other distros are the same,
+so here we won't expect any impact actually.
+
+Fixes: f94f268979a2 ("ARM: dts: orion5x: convert ls-chl to FDT")
+Cc: Ashley Hughes <ashley.hughes@blueyonder.co.uk>
+Signed-off-by: Roger Shimizu <rogershimizu@gmail.com>
+Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+---
+ arch/arm/boot/dts/orion5x-linkstation-lschl.dts | 171 ++++++++++++++++++++++++
+ arch/arm/boot/dts/orion5x-lschl.dts             | 171 ------------------------
+ 2 files changed, 171 insertions(+), 171 deletions(-)
+ create mode 100644 arch/arm/boot/dts/orion5x-linkstation-lschl.dts
+ delete mode 100644 arch/arm/boot/dts/orion5x-lschl.dts
+
+diff --git a/arch/arm/boot/dts/orion5x-linkstation-lschl.dts b/arch/arm/boot/dts/orion5x-linkstation-lschl.dts
+new file mode 100644
+index 000000000000..ea6c881634b9
+--- /dev/null
++++ b/arch/arm/boot/dts/orion5x-linkstation-lschl.dts
+@@ -0,0 +1,171 @@
++/*
++ * Device Tree file for Buffalo Linkstation LS-CHLv3
++ *
++ * Copyright (C) 2016 Ash Hughes <ashley.hughes@blueyonder.co.uk>
++ * Copyright (C) 2015-2017
++ * Roger Shimizu <rogershimizu@gmail.com>
++ *
++ * This file is dual-licensed: you can use it either under the terms
++ * of the GPL or the X11 license, at your option. Note that this dual
++ * licensing only applies to this file, and not this project as a
++ * whole.
++ *
++ *  a) This file 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 file 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.
++ *
++ * Or, alternatively
++ *
++ *  b) 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 , 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.
++ */
++
++/dts-v1/;
++
++#include "orion5x-linkstation.dtsi"
++#include "mvebu-linkstation-gpio-simple.dtsi"
++#include "mvebu-linkstation-fan.dtsi"
++#include <dt-bindings/gpio/gpio.h>
++
++/ {
++      model = "Buffalo Linkstation LiveV3 (LS-CHL)";
++      compatible = "buffalo,lschl", "marvell,orion5x-88f5182", "marvell,orion5x";
++
++      memory { /* 128 MB */
++              device_type = "memory";
++              reg = <0x00000000 0x8000000>;
++      };
++
++      gpio_keys {
++              func {
++                      label = "Function Button";
++                      linux,code = <KEY_OPTION>;
++                      gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
++              };
++
++              power-on-switch {
++                      gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
++              };
++
++              power-auto-switch {
++                      gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
++              };
++      };
++
++      gpio_leds {
++              pinctrl-0 = <&pmx_led_power &pmx_led_alarm &pmx_led_info &pmx_led_func>;
++              blue-power-led {
++                      gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
++              };
++
++              red-alarm-led {
++                      gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
++              };
++
++              amber-info-led {
++                      gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
++              };
++
++              func {
++                      label = "lschl:func:blue:top";
++                      gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
++              };
++      };
++
++      gpio_fan {
++              gpios = <&gpio0 14 GPIO_ACTIVE_LOW
++                       &gpio0 16 GPIO_ACTIVE_LOW>;
++
++              alarm-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
++      };
++};
++
++&pinctrl {
++      pmx_led_power: pmx-leds {
++              marvell,pins = "mpp0";
++              marvell,function = "gpio";
++      };
++
++      pmx_power_hdd: pmx-power-hdd {
++              marvell,pins = "mpp1";
++              marvell,function = "gpio";
++      };
++
++      pmx_led_alarm: pmx-leds {
++              marvell,pins = "mpp2";
++              marvell,function = "gpio";
++      };
++
++      pmx_led_info: pmx-leds {
++              marvell,pins = "mpp3";
++              marvell,function = "gpio";
++      };
++
++      pmx_fan_lock: pmx-fan-lock {
++              marvell,pins = "mpp6";
++              marvell,function = "gpio";
++      };
++
++      pmx_power_switch: pmx-power-switch {
++              marvell,pins = "mpp8", "mpp10", "mpp15";
++              marvell,function = "gpio";
++      };
++
++      pmx_power_usb: pmx-power-usb {
++              marvell,pins = "mpp9";
++              marvell,function = "gpio";
++      };
++
++      pmx_fan_high: pmx-fan-high {
++              marvell,pins = "mpp14";
++              marvell,function = "gpio";
++      };
++
++      pmx_fan_low: pmx-fan-low {
++              marvell,pins = "mpp16";
++              marvell,function = "gpio";
++      };
++
++      pmx_led_func: pmx-leds {
++              marvell,pins = "mpp17";
++              marvell,function = "gpio";
++      };
++
++      pmx_sw_init: pmx-sw-init {
++              marvell,pins = "mpp7";
++              marvell,function = "gpio";
++      };
++};
++
++&hdd_power {
++      gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
++};
++
++&usb_power {
++      gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
++};
++
+diff --git a/arch/arm/boot/dts/orion5x-lschl.dts b/arch/arm/boot/dts/orion5x-lschl.dts
+deleted file mode 100644
+index ea6c881634b9..000000000000
+--- a/arch/arm/boot/dts/orion5x-lschl.dts
++++ /dev/null
+@@ -1,171 +0,0 @@
+-/*
+- * Device Tree file for Buffalo Linkstation LS-CHLv3
+- *
+- * Copyright (C) 2016 Ash Hughes <ashley.hughes@blueyonder.co.uk>
+- * Copyright (C) 2015-2017
+- * Roger Shimizu <rogershimizu@gmail.com>
+- *
+- * This file is dual-licensed: you can use it either under the terms
+- * of the GPL or the X11 license, at your option. Note that this dual
+- * licensing only applies to this file, and not this project as a
+- * whole.
+- *
+- *  a) This file 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 file 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.
+- *
+- * Or, alternatively
+- *
+- *  b) 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 , 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.
+- */
+-
+-/dts-v1/;
+-
+-#include "orion5x-linkstation.dtsi"
+-#include "mvebu-linkstation-gpio-simple.dtsi"
+-#include "mvebu-linkstation-fan.dtsi"
+-#include <dt-bindings/gpio/gpio.h>
+-
+-/ {
+-      model = "Buffalo Linkstation LiveV3 (LS-CHL)";
+-      compatible = "buffalo,lschl", "marvell,orion5x-88f5182", "marvell,orion5x";
+-
+-      memory { /* 128 MB */
+-              device_type = "memory";
+-              reg = <0x00000000 0x8000000>;
+-      };
+-
+-      gpio_keys {
+-              func {
+-                      label = "Function Button";
+-                      linux,code = <KEY_OPTION>;
+-                      gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
+-              };
+-
+-              power-on-switch {
+-                      gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
+-              };
+-
+-              power-auto-switch {
+-                      gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
+-              };
+-      };
+-
+-      gpio_leds {
+-              pinctrl-0 = <&pmx_led_power &pmx_led_alarm &pmx_led_info &pmx_led_func>;
+-              blue-power-led {
+-                      gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
+-              };
+-
+-              red-alarm-led {
+-                      gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
+-              };
+-
+-              amber-info-led {
+-                      gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
+-              };
+-
+-              func {
+-                      label = "lschl:func:blue:top";
+-                      gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
+-              };
+-      };
+-
+-      gpio_fan {
+-              gpios = <&gpio0 14 GPIO_ACTIVE_LOW
+-                       &gpio0 16 GPIO_ACTIVE_LOW>;
+-
+-              alarm-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
+-      };
+-};
+-
+-&pinctrl {
+-      pmx_led_power: pmx-leds {
+-              marvell,pins = "mpp0";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_power_hdd: pmx-power-hdd {
+-              marvell,pins = "mpp1";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_led_alarm: pmx-leds {
+-              marvell,pins = "mpp2";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_led_info: pmx-leds {
+-              marvell,pins = "mpp3";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_fan_lock: pmx-fan-lock {
+-              marvell,pins = "mpp6";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_power_switch: pmx-power-switch {
+-              marvell,pins = "mpp8", "mpp10", "mpp15";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_power_usb: pmx-power-usb {
+-              marvell,pins = "mpp9";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_fan_high: pmx-fan-high {
+-              marvell,pins = "mpp14";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_fan_low: pmx-fan-low {
+-              marvell,pins = "mpp16";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_led_func: pmx-leds {
+-              marvell,pins = "mpp17";
+-              marvell,function = "gpio";
+-      };
+-
+-      pmx_sw_init: pmx-sw-init {
+-              marvell,pins = "mpp7";
+-              marvell,function = "gpio";
+-      };
+-};
+-
+-&hdd_power {
+-      gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
+-};
+-
+-&usb_power {
+-      gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
+-};
+-
diff --git a/patches/features/arm/ARM-orion5x-fix-Makefile-for-linkstation-lschl.dtb.patch b/patches/features/arm/ARM-orion5x-fix-Makefile-for-linkstation-lschl.dtb.patch
new file mode 100644 (file)
index 0000000..f9be940
--- /dev/null
@@ -0,0 +1,29 @@
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Thu, 2 Feb 2017 12:38:33 +0100
+Subject: [PATCH] ARM: orion5x: fix Makefile for linkstation-lschl.dtb
+Origin: https://git.kernel.org/linus/1a902f6b70c55171ca2419d946b85274e35c9757
+
+The rename of orion5x-lschl.dts needs to be reflected in the Makefile:
+
+make[3]: *** No rule to make target 'arch/arm/boot/dts/orion5x-lschl.dtb', needed by '__build'.
+
+Fixes: 6cfd3cd8d836 ("ARM: dts: orion5x-lschl: More consistent naming on linkstation series")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+---
+ arch/arm/boot/dts/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
+index cccdbcb557b6..20fe4a54ee5e 100644
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -616,7 +616,7 @@ dtb-$(CONFIG_ARCH_ORION5X) += \
+       orion5x-lacie-ethernet-disk-mini-v2.dtb \
+       orion5x-linkstation-lsgl.dtb \
+       orion5x-linkstation-lswtgl.dtb \
+-      orion5x-lschl.dtb \
++      orion5x-linkstation-lschl.dtb \
+       orion5x-lswsgl.dtb \
+       orion5x-maxtor-shared-storage-2.dtb \
+       orion5x-netgear-wnr854t.dtb \
diff --git a/patches/features/arm/arm-dts-add-support-for-turris-omnia.patch b/patches/features/arm/arm-dts-add-support-for-turris-omnia.patch
new file mode 100644 (file)
index 0000000..b743e4c
--- /dev/null
@@ -0,0 +1,376 @@
+From: Uwe Kleine-König <uwe@kleine-koenig.org>
+Date: Fri, 25 Nov 2016 15:26:58 +0100
+Subject: ARM: dts: add support for Turris Omnia
+Origin: https://git.kernel.org/linus/26ca8b52d6e18c10109cabda0f775dd9345bbfdf
+
+This machine is an open hardware router by cz.nic driven by a
+Marvell Armada 385.
+
+Signed-off-by: Uwe Kleine-König <uwe@kleine-koenig.org>
+Signed-off-by: Tomas Hlavacek <tmshlvck@gmail.com>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+---
+ arch/arm/boot/dts/Makefile                    |   1 +
+ arch/arm/boot/dts/armada-385-turris-omnia.dts | 340 ++++++++++++++++++++++++++
+ 2 files changed, 341 insertions(+)
+ create mode 100644 arch/arm/boot/dts/armada-385-turris-omnia.dts
+
+diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
+index 485304914916..9a3f07e86a5a 100644
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -921,6 +921,7 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \
+       armada-385-db-ap.dtb \
+       armada-385-linksys-caiman.dtb \
+       armada-385-linksys-cobra.dtb \
++      armada-385-turris-omnia.dtb \
+       armada-388-clearfog.dtb \
+       armada-388-db.dtb \
+       armada-388-gp.dtb \
+diff --git a/arch/arm/boot/dts/armada-385-turris-omnia.dts b/arch/arm/boot/dts/armada-385-turris-omnia.dts
+new file mode 100644
+index 000000000000..ab49acb2d452
+--- /dev/null
++++ b/arch/arm/boot/dts/armada-385-turris-omnia.dts
+@@ -0,0 +1,340 @@
++/*
++ * Device Tree file for the Turris Omnia
++ *
++ * Copyright (C) 2016 Uwe Kleine-König <uwe@kleine-koenig.org>
++ * Copyright (C) 2016 Tomas Hlavacek <tmshlvkc@gmail.com>
++ *
++ * This file is dual-licensed: you can use it either under the terms
++ * of the GPL or the X11 license, at your option. Note that this dual
++ * licensing only applies to this file, and not this project as a
++ * whole.
++ *
++ *  a) This file is licensed under the terms of the GNU General Public
++ *     License version 2.  This program is licensed "as is" without
++ *     any warranty of any kind, whether express or implied.
++ *
++ * Or, alternatively,
++ *
++ *  b) 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.
++ */
++
++/*
++ * Schematic available at https://www.turris.cz/doc/_media/rtrom01-schema.pdf
++ */
++
++/dts-v1/;
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include "armada-385.dtsi"
++
++/ {
++      model = "Turris Omnia";
++      compatible = "cznic,turris-omnia", "marvell,armada385", "marvell,armada380";
++
++      chosen {
++              stdout-path = &uart0;
++      };
++
++      memory {
++              device_type = "memory";
++              reg = <0x00000000 0x40000000>; /* 1024 MB */
++      };
++
++      soc {
++              ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
++                        MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000
++                        MBUS_ID(0x09, 0x19) 0 0xf1100000 0x10000
++                        MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000>;
++
++              internal-regs {
++
++                      /* USB part of the PCIe2/USB 2.0 port */
++                      usb@58000 {
++                              status = "okay";
++                      };
++
++                      sata@a8000 {
++                              status = "okay";
++                      };
++
++                      sdhci@d8000 {
++                              pinctrl-names = "default";
++                              pinctrl-0 = <&sdhci_pins>;
++                              status = "okay";
++
++                              bus-width = <8>;
++                              no-1-8-v;
++                              non-removable;
++                      };
++
++                      usb3@f0000 {
++                              status = "okay";
++                      };
++
++                      usb3@f8000 {
++                              status = "okay";
++                      };
++              };
++
++              pcie-controller {
++                      status = "okay";
++
++                      pcie@1,0 {
++                              /* Port 0, Lane 0 */
++                              status = "okay";
++                      };
++
++                      pcie@2,0 {
++                              /* Port 1, Lane 0 */
++                              status = "okay";
++                      };
++
++                      pcie@3,0 {
++                              /* Port 2, Lane 0 */
++                              status = "okay";
++                      };
++              };
++      };
++};
++
++/* Connected to 88E6176 switch, port 6 */
++&eth0 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&ge0_rgmii_pins>;
++      status = "okay";
++      phy-mode = "rgmii-id";
++
++      fixed-link {
++              speed = <1000>;
++              full-duplex;
++      };
++};
++
++/* Connected to 88E6176 switch, port 5 */
++&eth1 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&ge1_rgmii_pins>;
++      status = "okay";
++      phy-mode = "rgmii-id";
++
++      fixed-link {
++              speed = <1000>;
++              full-duplex;
++      };
++};
++
++/* WAN port */
++&eth2 {
++      status = "okay";
++      phy-mode = "sgmii";
++      phy = <&phy1>;
++};
++
++&i2c0 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&i2c0_pins>;
++      status = "okay";
++
++      i2cmux@70 {
++              compatible = "nxp,pca9547";
++              #address-cells = <1>;
++              #size-cells = <0>;
++              reg = <0x70>;
++              status = "okay";
++
++              i2c@0 {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++                      reg = <0>;
++
++                      /* STM32F0 command interface at address 0x2a */
++                      /* leds device (in STM32F0) at address 0x2b */
++
++                      eeprom@54 {
++                              compatible = "at,24c64";
++                              reg = <0x54>;
++
++                              /* The EEPROM contains data for bootloader.
++                               * Contents:
++                               *      struct omnia_eeprom {
++                               *              u32 magic; (=0x0341a034 in LE)
++                               *              u32 ramsize; (in GiB)
++                               *              char regdomain[4];
++                               *              u32 crc32;
++                               *      };
++                               */
++                      };
++              };
++
++              i2c@1 {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++                      reg = <1>;
++
++                      /* routed to PCIe0/mSATA connector (CN7A) */
++              };
++
++              i2c@2 {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++                      reg = <2>;
++
++                      /* routed to PCIe1/USB2 connector (CN61A) */
++              };
++
++              i2c@3 {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++                      reg = <3>;
++
++                      /* routed to PCIe2 connector (CN62A) */
++              };
++
++              i2c@4 {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++                      reg = <4>;
++
++                      /* routed to SFP+ */
++              };
++
++              i2c@5 {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++                      reg = <5>;
++
++                      /* ATSHA204A at address 0x64 */
++              };
++
++              i2c@6 {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++                      reg = <6>;
++
++                      /* exposed on pin header */
++              };
++
++              i2c@7 {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++                      reg = <7>;
++
++                      pcawan: gpio@71 {
++                              /*
++                               * GPIO expander for SFP+ signals and
++                               * and phy irq
++                               */
++                              compatible = "nxp,pca9538";
++                              reg = <0x71>;
++
++                              pinctrl-names = "default";
++                              pinctrl-0 = <&pcawan_pins>;
++
++                              interrupt-parent = <&gpio1>;
++                              interrupts = <14 IRQ_TYPE_LEVEL_LOW>;
++
++                              gpio-controller;
++                              #gpio-cells = <2>;
++                      };
++              };
++      };
++};
++
++&mdio {
++      pinctrl-names = "default";
++      pinctrl-0 = <&mdio_pins>;
++      status = "okay";
++
++      phy1: phy@1 {
++              status = "okay";
++              compatible = "ethernet-phy-id0141.0DD1", "ethernet-phy-ieee802.3-c22";
++              reg = <1>;
++
++              /* irq is connected to &pcawan pin 7 */
++      };
++
++      /* Switch MV88E7176 at address 0x10 */
++};
++
++&pinctrl {
++      pcawan_pins: pcawan-pins {
++              marvell,pins = "mpp46";
++              marvell,function = "gpio";
++      };
++
++      spi0cs0_pins: spi0cs0-pins {
++              marvell,pins = "mpp25";
++              marvell,function = "spi0";
++      };
++
++      spi0cs1_pins: spi0cs1-pins {
++              marvell,pins = "mpp26";
++              marvell,function = "spi0";
++      };
++};
++
++&spi0 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&spi0_pins &spi0cs0_pins>;
++      status = "okay";
++
++      spi-nor@0 {
++              compatible = "spansion,s25fl164k", "jedec,spi-nor";
++              #address-cells = <1>;
++              #size-cells = <1>;
++              reg = <0>;
++              spi-max-frequency = <40000000>;
++
++              partitions {
++                      compatible = "fixed-partitions";
++                      #address-cells = <1>;
++                      #size-cells = <1>;
++
++                      partition@0 {
++                              reg = <0x0 0x00100000>;
++                              label = "U-Boot";
++                      };
++
++                      partition@100000 {
++                              reg = <0x00100000 0x00700000>;
++                              label = "Rescue system";
++                      };
++              };
++      };
++
++      /* MISO, MOSI, SCLK and CS1 are routed to pin header CN11 */
++};
++
++&uart0 {
++      /* Pin header CN10 */
++      pinctrl-names = "default";
++      pinctrl-0 = <&uart0_pins>;
++      status = "okay";
++};
++
++&uart1 {
++      /* Pin header CN11 */
++      pinctrl-names = "default";
++      pinctrl-0 = <&uart1_pins>;
++      status = "okay";
++};
diff --git a/patches/features/arm/arm-dts-turris-omnia-add-support-for-ethernet-switch.patch b/patches/features/arm/arm-dts-turris-omnia-add-support-for-ethernet-switch.patch
new file mode 100644 (file)
index 0000000..332a2ac
--- /dev/null
@@ -0,0 +1,102 @@
+From: Uwe Kleine-König <uwe@kleine-koenig.org>
+Date: Tue, 3 Jan 2017 20:35:01 +0100
+Subject: [PATCH] ARM: dts: turris-omnia: add support for ethernet switch
+Origin: https://git.kernel.org/linus/7b7db5ab33d2292d9b037cda0c41a795b094d940
+
+The Turris Omnia features a Marvell MV88E6176 ethernet switch. Add it to
+the dts.
+
+Signed-off-by: Uwe Kleine-König <uwe@kleine-koenig.org>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Tested-by: Andreas Färber <afaerber@suse.de>
+Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+---
+ arch/arm/boot/dts/armada-385-turris-omnia.dts | 58 +++++++++++++++++++++++++--
+ 1 file changed, 55 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/boot/dts/armada-385-turris-omnia.dts b/arch/arm/boot/dts/armada-385-turris-omnia.dts
+index ab49acb2d452..28eede180e4f 100644
+--- a/arch/arm/boot/dts/armada-385-turris-omnia.dts
++++ b/arch/arm/boot/dts/armada-385-turris-omnia.dts
+@@ -122,7 +122,7 @@
+       pinctrl-names = "default";
+       pinctrl-0 = <&ge0_rgmii_pins>;
+       status = "okay";
+-      phy-mode = "rgmii-id";
++      phy-mode = "rgmii";
+       fixed-link {
+               speed = <1000>;
+@@ -135,7 +135,7 @@
+       pinctrl-names = "default";
+       pinctrl-0 = <&ge1_rgmii_pins>;
+       status = "okay";
+-      phy-mode = "rgmii-id";
++      phy-mode = "rgmii";
+       fixed-link {
+               speed = <1000>;
+@@ -273,7 +273,59 @@
+               /* irq is connected to &pcawan pin 7 */
+       };
+-      /* Switch MV88E7176 at address 0x10 */
++      /* Switch MV88E6176 at address 0x10 */
++      switch@10 {
++              compatible = "marvell,mv88e6085";
++              #address-cells = <1>;
++              #size-cells = <0>;
++              dsa,member = <0 0>;
++
++              reg = <0x10>;
++
++              ports {
++                      #address-cells = <1>;
++                      #size-cells = <0>;
++
++                      ports@0 {
++                              reg = <0>;
++                              label = "lan0";
++                      };
++
++                      ports@1 {
++                              reg = <1>;
++                              label = "lan1";
++                      };
++
++                      ports@2 {
++                              reg = <2>;
++                              label = "lan2";
++                      };
++
++                      ports@3 {
++                              reg = <3>;
++                              label = "lan3";
++                      };
++
++                      ports@4 {
++                              reg = <4>;
++                              label = "lan4";
++                      };
++
++                      ports@5 {
++                              reg = <5>;
++                              label = "cpu";
++                              ethernet = <&eth1>;
++                              phy-mode = "rgmii-id";
++
++                              fixed-link {
++                                      speed = <1000>;
++                                      full-duplex;
++                              };
++                      };
++
++                      /* port 6 is connected to eth0 */
++              };
++      };
+ };
+ &pinctrl {
+-- 
+2.11.0
+
diff --git a/patches/features/arm64/dts-meson-gx-add-firmware-reserved-memory-zone.patch b/patches/features/arm64/dts-meson-gx-add-firmware-reserved-memory-zone.patch
new file mode 100644 (file)
index 0000000..b8c0bd5
--- /dev/null
@@ -0,0 +1,63 @@
+From: Neil Armstrong <narmstrong@baylibre.com>
+Date: Wed, 18 Jan 2017 17:50:45 +0100
+Subject: ARM64: dts: meson-gx: Add firmware reserved memory zones
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Origin: https://git.kernel.org/linus/bba8e3f42736cf7f974968a818e53b128286ad1d
+Bug-Debian: https://bugs.debian.org/852132
+
+The Amlogic Meson GXBB/GXL/GXM secure monitor uses part of the memory space,
+this patch adds these reserved zones.
+
+Without such reserved memory zones, running the following stress command :
+$ stress-ng --vm 16 --vm-bytes 128M --timeout 10s
+multiple times:
+
+Could lead to the following kernel crashes :
+[   46.937975] Bad mode in Error handler detected on CPU1, code 0xbf000000 -- SError
+...
+[   47.058536] Internal error: Attempting to execute userspace memory: 8600000f [#3] PREEMPT SMP
+...
+Instead of the OOM killer.
+
+Fixes: 4f24eda8401f ("ARM64: dts: Prepare configs for Amlogic Meson GXBaby")
+Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
+Reviewed-by: Andreas Färber <afaerber@suse.de>
+[khilman: added Fixes tag, added _reserved and unit addresses]
+Signed-off-by: Kevin Hilman <khilman@baylibre.com>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+[bwh: Backported to 4.9: adjust filename]
+---
+ arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
+index eada0b58ba1c..0cbe24b49710 100644
+--- a/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
++++ b/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
+@@ -55,6 +55,24 @@
+       #address-cells = <2>;
+       #size-cells = <2>;
++      reserved-memory {
++              #address-cells = <2>;
++              #size-cells = <2>;
++              ranges;
++
++              /* 16 MiB reserved for Hardware ROM Firmware */
++              hwrom_reserved: hwrom@0 {
++                      reg = <0x0 0x0 0x0 0x1000000>;
++                      no-map;
++              };
++
++              /* 2 MiB reserved for ARM Trusted Firmware (BL31) */
++              secmon_reserved: secmon@10000000 {
++                      reg = <0x0 0x10000000 0x0 0x200000>;
++                      no-map;
++              };
++      };
++
+       cpus {
+               #address-cells = <0x2>;
+               #size-cells = <0x0>;
diff --git a/patches/features/mips/MIPS-Loongson-3-Add-Loongson-LS3A-RS780E-1-way-machi.patch b/patches/features/mips/MIPS-Loongson-3-Add-Loongson-LS3A-RS780E-1-way-machi.patch
new file mode 100644 (file)
index 0000000..a40d273
--- /dev/null
@@ -0,0 +1,57 @@
+From: Aurelien Jarno <aurelien@aurel32.net>
+Date: Sun, 20 Jul 2014 19:16:31 +0200
+Subject: MIPS: Loongson 3: Add Loongson LS3A RS780E 1-way machine definition
+Forwarded: no
+
+Add a Loongson LS3A RS780E 1-way machine definition, which only differs
+from other Loongson 3 based machines by the UART base clock speed.
+
+Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
+[bwh: Forward-ported to 4.2]
+---
+ arch/mips/include/asm/bootinfo.h        | 1 +
+ arch/mips/loongson64/common/machtype.c  | 1 +
+ arch/mips/loongson64/common/serial.c    | 1 +
+ arch/mips/loongson64/common/uart_base.c | 1 +
+ 4 files changed, 4 insertions(+)
+
+--- a/arch/mips/include/asm/bootinfo.h
++++ b/arch/mips/include/asm/bootinfo.h
+@@ -71,6 +71,7 @@ enum loongson_machine_type {
+       MACH_LEMOTE_NAS,
+       MACH_LEMOTE_LL2F,
+       MACH_LOONGSON_GENERIC,
++      MACH_LOONGSON_3A780E1W,
+       MACH_LOONGSON_END
+ };
+--- a/arch/mips/loongson64/common/machtype.c
++++ b/arch/mips/loongson64/common/machtype.c
+@@ -28,6 +28,7 @@ static const char *system_types[] = {
+       [MACH_LEMOTE_NAS]       = "lemote-nas-2f",
+       [MACH_LEMOTE_LL2F]      = "lemote-lynloong-2f",
+       [MACH_LOONGSON_GENERIC] = "generic-loongson-machine",
++      [MACH_LOONGSON_3A780E1W] = "loongson-ls3a-rs780e-1w",
+       [MACH_LOONGSON_END]     = NULL,
+ };
+--- a/arch/mips/loongson64/common/serial.c
++++ b/arch/mips/loongson64/common/serial.c
+@@ -48,6 +48,7 @@ static struct plat_serial8250_port uart8
+       [MACH_LEMOTE_NAS]       = {PORT_M(3, 3686400), {} },
+       [MACH_LEMOTE_LL2F]      = {PORT(3, 1843200), {} },
+       [MACH_LOONGSON_GENERIC] = {PORT_M(2, 25000000), {} },
++      [MACH_LOONGSON_3A780E1W] = {PORT_M(2, 33177600), {} },
+       [MACH_LOONGSON_END]     = {},
+ };
+--- a/arch/mips/loongson64/common/uart_base.c
++++ b/arch/mips/loongson64/common/uart_base.c
+@@ -25,6 +25,7 @@ void prom_init_loongson_uart_base(void)
+ {
+       switch (mips_machtype) {
+       case MACH_LOONGSON_GENERIC:
++      case MACH_LOONGSON_3A780E1W:
+               /* The CPU provided serial port (CPU) */
+               loongson_uart_base[0] = LOONGSON_REG_BASE + 0x1e0;
+               break;
diff --git a/patches/features/mips/MIPS-increase-MAX-PHYSMEM-BITS-on-Loongson-3-only.patch b/patches/features/mips/MIPS-increase-MAX-PHYSMEM-BITS-on-Loongson-3-only.patch
new file mode 100644 (file)
index 0000000..320c651
--- /dev/null
@@ -0,0 +1,29 @@
+From: Aurelien Jarno <aurelien@aurel32.net>
+Subject: MIPS: increase MAX_PHYSMEM_BITS on Loongson 3 only
+Bug-Debian: https://bugs.debian.org/764223
+Forwarded: no
+
+Commit c4617318 broke Loongson-2 support and maybe even more by increasing
+the value of MAX_PHYSMEM_BITS. At it is currently only needed on
+Loongson-3, define it conditionally.
+
+Note: this should be replace by upstream fix when available.
+
+diff --git a/arch/mips/include/asm/sparsemem.h b/arch/mips/include/asm/sparsemem.h
+index b1071c1..778dca7 100644
+--- a/arch/mips/include/asm/sparsemem.h
++++ b/arch/mips/include/asm/sparsemem.h
+@@ -11,7 +11,12 @@
+ #else
+ # define SECTION_SIZE_BITS    28
+ #endif
+-#define MAX_PHYSMEM_BITS      48
++
++#if defined(CONFIG_CPU_LOONGSON3)
++# define MAX_PHYSMEM_BITS     48
++#else
++# define MAX_PHYSMEM_BITS     35
++#endif
+ #endif /* CONFIG_SPARSEMEM */
+ #endif /* _MIPS_SPARSEMEM_H */
diff --git a/patches/features/x86/x86-make-x32-syscall-support-conditional.patch b/patches/features/x86/x86-make-x32-syscall-support-conditional.patch
new file mode 100644 (file)
index 0000000..d606fbf
--- /dev/null
@@ -0,0 +1,212 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 25 Jul 2014 01:16:15 +0100
+Subject: x86: Make x32 syscall support conditional on a kernel parameter
+Bug-Debian: https://bugs.debian.org/708070
+Forwarded: http://mid.gmane.org/1415245982.3398.53.camel@decadent.org.uk
+
+Enabling x32 in the standard amd64 kernel would increase its attack
+surface while provide no benefit to the vast majority of its users.
+No-one seems interested in regularly checking for vulnerabilities
+specific to x32 (at least no-one with a white hat).
+
+Still, adding another flavour just to turn on x32 seems wasteful.  And
+the only differences on syscall entry are two instructions (mask out
+the x32 flag and compare the syscall number).
+
+So pad the standard comparison with a nop and add a kernel parameter
+"syscall.x32" which controls whether this is replaced with the x32
+version at boot time.  Add a Kconfig parameter to set the default.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ Documentation/kernel-parameters.txt |  4 ++++
+ arch/x86/Kconfig                    |  8 +++++++
+ arch/x86/include/asm/elf.h          |  8 ++++++-
+ arch/x86/entry/entry_64.S           | 36 ++++++++++++++++++++++---------
+ arch/x86/entry/syscall_64.c         | 43 +++++++++++++++++++++++++++++++++++++
+ 5 files changed, 88 insertions(+), 11 deletions(-)
+
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -4005,6 +4005,10 @@ bytes respectively. Such letter suffixes
+       switches=       [HW,M68k]
++      syscall.x32=    [KNL,x86_64] Enable/disable use of x32 syscalls on
++                      an x86_64 kernel where CONFIG_X86_X32 is enabled.
++                      Default depends on CONFIG_X86_X32_DISABLED.
++
+       sysfs.deprecated=0|1 [KNL]
+                       Enable/disable old style sysfs layout for old udev
+                       on older distributions. When this option is enabled
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -2721,6 +2721,14 @@ config X86_X32
+         elf32_x86_64 support enabled to compile a kernel with this
+         option set.
++config X86_X32_DISABLED
++      bool "x32 ABI disabled by default"
++      depends on X86_X32
++      default n
++      help
++        Disable the x32 ABI unless explicitly enabled using the
++        kernel paramter "syscall.x32=y".
++
+ config COMPAT
+       def_bool y
+       depends on IA32_EMULATION || X86_X32
+--- a/arch/x86/include/asm/elf.h
++++ b/arch/x86/include/asm/elf.h
+@@ -9,6 +9,7 @@
+ #include <asm/ptrace.h>
+ #include <asm/user.h>
+ #include <asm/auxvec.h>
++#include <asm/syscall.h>
+ typedef unsigned long elf_greg_t;
+@@ -162,7 +163,7 @@ do {                                               \
+ #define compat_elf_check_arch(x)                                      \
+       (elf_check_arch_ia32(x) ||                                      \
+-       (IS_ENABLED(CONFIG_X86_X32_ABI) && (x)->e_machine == EM_X86_64))
++       (x32_enabled && (x)->e_machine == EM_X86_64))
+ #if __USER32_DS != __USER_DS
+ # error "The following code assumes __USER32_DS == __USER_DS"
+--- a/arch/x86/entry/entry_64.S
++++ b/arch/x86/entry/entry_64.S
+@@ -195,8 +195,12 @@ entry_SYSCALL_64_fastpath:
+ #if __SYSCALL_MASK == ~0
+       cmpq    $__NR_syscall_max, %rax
+ #else
+-      andl    $__SYSCALL_MASK, %eax
+-      cmpl    $__NR_syscall_max, %eax
++.global system_call_fast_compare
++.global system_call_fast_compare_end
++system_call_fast_compare:
++      cmpq    $511, %rax                      /* x32 syscalls start at 512 */
++      .byte   P6_NOP4
++system_call_fast_compare_end:
+ #endif
+       ja      1f                              /* return -ENOSYS (already in pt_regs->ax) */
+       movq    %r10, %rcx
+@@ -331,6 +335,16 @@ opportunistic_sysret_failed:
+       jmp     restore_c_regs_and_iret
+ END(entry_SYSCALL_64)
++#if __SYSCALL_MASK != ~0
++      /* This replaces the usual comparisons if syscall.x32 is set */
++.global system_call_mask_compare
++.global system_call_mask_compare_end
++system_call_mask_compare:
++      andl    $__SYSCALL_MASK, %eax
++      cmpl    $__NR_syscall_max, %eax
++system_call_mask_compare_end:
++#endif
++
+ ENTRY(stub_ptregs_64)
+       /*
+        * Syscalls marked as needing ptregs land here.
+--- a/arch/x86/entry/syscall_64.c
++++ b/arch/x86/entry/syscall_64.c
+@@ -3,8 +3,14 @@
+ #include <linux/linkage.h>
+ #include <linux/sys.h>
+ #include <linux/cache.h>
++#include <linux/moduleparam.h>
++#undef MODULE_PARAM_PREFIX
++#define MODULE_PARAM_PREFIX "syscall."
++#include <linux/bug.h>
++#include <linux/init.h>
+ #include <asm/asm-offsets.h>
+ #include <asm/syscall.h>
++#include <asm/text-patching.h>
+ #define __SYSCALL_64_QUAL_(sym) sym
+ #define __SYSCALL_64_QUAL_ptregs(sym) ptregs_##sym
+@@ -25,3 +31,36 @@ asmlinkage const sys_call_ptr_t sys_call
+       [0 ... __NR_syscall_max] = &sys_ni_syscall,
+ #include <asm/syscalls_64.h>
+ };
++
++#ifdef CONFIG_X86_X32_ABI
++
++/* Maybe enable x32 syscalls */
++
++bool x32_enabled = !IS_ENABLED(CONFIG_X86_X32_DISABLED);
++module_param_named(x32, x32_enabled, bool, 0444);
++
++extern char system_call_fast_compare_end[], system_call_fast_compare[],
++      system_call_mask_compare_end[], system_call_mask_compare[];
++
++static int __init x32_enable(void)
++{
++      BUG_ON(system_call_fast_compare_end - system_call_fast_compare != 10);
++      BUG_ON(system_call_mask_compare_end - system_call_mask_compare != 10);
++
++      if (x32_enabled) {
++              text_poke_early(system_call_fast_compare,
++                              system_call_mask_compare, 10);
++#ifdef CONFIG_X86_X32_DISABLED
++              pr_info("Enabled x32 syscalls\n");
++#endif
++      }
++#ifndef CONFIG_X86_X32_DISABLED
++      else
++              pr_info("Disabled x32 syscalls\n");
++#endif
++
++      return 0;
++}
++late_initcall(x32_enable);
++
++#endif
+--- a/arch/x86/entry/common.c
++++ b/arch/x86/entry/common.c
+@@ -264,6 +264,7 @@ __visible void do_syscall_64(struct pt_r
+ {
+       struct thread_info *ti = current_thread_info();
+       unsigned long nr = regs->orig_ax;
++      unsigned int syscall_mask, nr_syscalls_enabled;
+       enter_from_user_mode();
+       local_irq_enable();
+@@ -276,8 +277,19 @@ __visible void do_syscall_64(struct pt_r
+        * table.  The only functional difference is the x32 bit in
+        * regs->orig_ax, which changes the behavior of some syscalls.
+        */
+-      if (likely((nr & __SYSCALL_MASK) < NR_syscalls)) {
+-              regs->ax = sys_call_table[nr & __SYSCALL_MASK](
++      if (__SYSCALL_MASK == ~0U || x32_enabled) {
++              syscall_mask = __SYSCALL_MASK;
++              nr_syscalls_enabled = NR_syscalls;
++      } else {
++              /*
++               * x32 syscalls present but not enabled.  Don't mask out
++               * the x32 flag and don't enable any x32-specific calls.
++               */
++              syscall_mask = ~0U;
++              nr_syscalls_enabled = 512;
++      }
++      if (likely((nr & syscall_mask) < nr_syscalls_enabled)) {
++              regs->ax = sys_call_table[nr & syscall_mask](
+                       regs->di, regs->si, regs->dx,
+                       regs->r10, regs->r8, regs->r9);
+       }
+--- a/arch/x86/include/asm/syscall.h
++++ b/arch/x86/include/asm/syscall.h
+@@ -35,6 +35,12 @@ extern const sys_call_ptr_t sys_call_tab
+ extern const sys_call_ptr_t ia32_sys_call_table[];
+ #endif
++#if defined(CONFIG_X86_X32_ABI)
++extern bool x32_enabled;
++#else
++#define x32_enabled 0
++#endif
++
+ /*
+  * Only the low 32 bits of orig_ax are meaningful, so we return int.
+  * This importantly ignores the high bits on 64-bit, so comparisons
diff --git a/patches/features/x86/x86-memtest-WARN-if-bad-RAM-found.patch b/patches/features/x86/x86-memtest-WARN-if-bad-RAM-found.patch
new file mode 100644 (file)
index 0000000..7a79520
--- /dev/null
@@ -0,0 +1,28 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Mon, 5 Dec 2011 04:00:58 +0000
+Subject: x86: memtest: WARN if bad RAM found
+Bug-Debian: https://bugs.debian.org/613321
+Forwarded: http://thread.gmane.org/gmane.linux.kernel/1286471
+
+Since this is not a particularly thorough test, if we find any bad
+bits of RAM then there is a fair chance that there are other bad bits
+we fail to detect.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/memtest.c |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+--- a/mm/memtest.c
++++ b/mm/memtest.c
+@@ -26,6 +26,10 @@ static u64 patterns[] __initdata = {
+ static void __init reserve_bad_mem(u64 pattern, phys_addr_t start_bad, phys_addr_t end_bad)
+ {
++#ifdef CONFIG_X86
++      WARN_ONCE(1, "Bad RAM detected. Use memtest86+ to perform a thorough test\n"
++                "and the memmap= parameter to reserve the bad areas.");
++#endif
+       pr_info("  %016llx bad mem addr %pa - %pa reserved\n",
+               cpu_to_be64(pattern), &start_bad, &end_bad);
+       memblock_reserve(start_bad, end_bad - start_bad);
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..a5922a9
--- /dev/null
@@ -0,0 +1,152 @@
+# Changes to support package build system
+debian/version.patch
+debian/uname-version-timestamp.patch
+debian/kernelvariables.patch
+debian/gitignore.patch
+debian/mips-disable-werror.patch
+debian/arch-sh4-fix-uimage-build.patch
+debian/powerpcspe-omit-uimage.patch
+features/all/Kbuild-kconfig-Verbose-version-of-listnewconfig.patch
+debian/modpost-symbol-prefix.patch
+debian/tools-perf-version.patch
+debian/tools-perf-install.patch
+
+# Fixes/improvements to firmware loading
+features/all/drivers-media-dvb-usb-af9005-request_firmware.patch
+debian/iwlwifi-do-not-request-unreleased-firmware.patch
+bugfix/all/firmware_class-log-every-success-and-failure.patch
+bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
+bugfix/all/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch
+
+# Patches from aufs4 repository, imported with
+# debian/patches/features/all/aufs4/gen-patch.  These are only the
+# changes needed to allow aufs to be built out-of-tree.
+features/all/aufs4/aufs4-base.patch
+features/all/aufs4/aufs4-mmap.patch
+features/all/aufs4/aufs4-standalone.patch
+
+# Change some defaults for security reasons
+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
+debian/dccp-disable-auto-loading-as-mitigation-against-local-exploits.patch
+debian/fs-enable-link-security-restrictions-by-default.patch
+
+# Set various features runtime-disabled by default
+debian/sched-autogroup-disabled.patch
+debian/yama-disable-by-default.patch
+debian/add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by-default.patch
+features/all/security-perf-allow-further-restriction-of-perf_event_open.patch
+
+# Disable autoloading/probing of various drivers by default
+debian/cdc_ncm-cdc_mbim-use-ncm-by-default.patch
+debian/snd-pcsp-disable-autoload.patch
+bugfix/x86/viafb-autoload-on-olpc-xo1.5-only.patch
+debian/fjes-disable-autoload.patch
+
+# Taint if dangerous features are used
+debian/fanotify-taint-on-use-of-fanotify_access_permissions.patch
+
+# Reduce noise for bug #852324
+debian/amd64-don-t-warn-about-expected-w+x-pages-on-xen.patch
+
+# Arch bug fixes
+bugfix/arm/arm-dts-kirkwood-fix-sata-pinmux-ing-for-ts419.patch
+
+# Arch features
+features/mips/MIPS-increase-MAX-PHYSMEM-BITS-on-Loongson-3-only.patch
+features/mips/MIPS-Loongson-3-Add-Loongson-LS3A-RS780E-1-way-machi.patch
+features/x86/x86-memtest-WARN-if-bad-RAM-found.patch
+features/x86/x86-make-x32-syscall-support-conditional.patch
+features/arm/arm-dts-add-support-for-turris-omnia.patch
+features/arm/arm-dts-turris-omnia-add-support-for-ethernet-switch.patch
+features/arm/ARM-dts-orion5x-convert-ls-chl-to-FDT.patch
+features/arm64/dts-meson-gx-add-firmware-reserved-memory-zone.patch
+features/arm/ARM-dts-orion5x-lschl-Fix-model-name.patch
+features/arm/ARM-dts-orion5x-lschl-More-consistent-naming-on-link.patch
+features/arm/ARM-orion5x-fix-Makefile-for-linkstation-lschl.dtb.patch
+
+# Miscellaneous bug fixes
+bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch
+bugfix/all/disable-some-marvell-phys.patch
+bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch
+bugfix/all/kbuild-do-not-use-hyphen-in-exported-variable-name.patch
+bugfix/all/partially-revert-usb-kconfig-using-select-for-usb_co.patch
+bugfix/all/media-dvb-usb-dibusb-mc-common-add-module_license.patch
+bugfix/all/kbuild-include-addtree-remove-quotes-before-matching-path.patch
+
+# Miscellaneous features
+features/all/netfilter-nft_ct-add-notrack-support.patch
+
+# Securelevel patchset from mjg59
+features/all/securelevel/add-bsd-style-securelevel-support.patch
+features/all/securelevel/enforce-module-signatures-when-securelevel-is-greate.patch
+features/all/securelevel/pci-lock-down-bar-access-when-securelevel-is-enabled.patch
+features/all/securelevel/x86-lock-down-io-port-access-when-securelevel-is-ena.patch
+features/all/securelevel/restrict-dev-mem-and-dev-kmem-when-securelevel-is-se.patch
+features/all/securelevel/acpi-limit-access-to-custom_method-if-securelevel-is.patch
+features/all/securelevel/acpi-ignore-acpi_rsdp-kernel-parameter-when-securele.patch
+features/all/securelevel/kexec-disable-at-runtime-if-securelevel-has-been-set.patch
+features/all/securelevel/uswsusp-disable-when-securelevel-is-set.patch
+features/all/securelevel/x86-restrict-msr-access-when-securelevel-is-set.patch
+features/all/securelevel/asus-wmi-restrict-debugfs-interface-when-securelevel.patch
+features/all/securelevel/add-option-to-automatically-set-securelevel-when-in-.patch
+features/all/securelevel/efi-disable-secure-boot-if-shim-is-in-insecure-mode.patch
+features/all/securelevel/hibernate-disable-when-securelevel-is-set.patch
+features/all/securelevel/kexec-uefi-copy-secure_boot-flag-in-boot-params-acro.patch
+features/all/securelevel/acpi-disable-acpi-table-override-if-securelevel-is-s.patch
+features/all/securelevel/acpi-disable-apei-error-injection-if-securelevel-is-.patch
+features/all/securelevel/enable-cold-boot-attack-mitigation.patch
+features/all/securelevel/mtd-disable-slram-and-phram-when-securelevel-is-enabled.patch
+# same for arm64
+features/all/securelevel/arm64-efi-disable-secure-boot-if-shim-is-in-insecure.patch
+features/all/securelevel/arm64-add-kernel-config-option-to-set-securelevel-wh.patch
+
+# Security fixes
+debian/i386-686-pae-pci-set-pci-nobios-by-default.patch
+debian/time-mark-timer_stats-as-broken.patch
+bugfix/all/net-packet-fix-overflow-in-check-for-tp_frame_nr.patch
+bugfix/all/net-packet-fix-overflow-in-check-for-tp_reserve.patch
+bugfix/all/ping-implement-proper-locking.patch
+bugfix/all/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch
+bugfix/all/macsec-dynamically-allocate-space-for-sglist.patch
+bugfix/all/nfsd-check-for-oversized-NFSv2-v3-arguments.patch
+bugfix/all/nfsd4-minor-NFSv2-v3-write-decoding-cleanup.patch
+bugfix/all/nfsd-stricter-decoding-of-write-like-NFSv2-v3-ops.patch
+
+# Fix exported symbol versions
+bugfix/ia64/revert-ia64-move-exports-to-definitions.patch
+bugfix/sparc/revert-sparc-move-exports-to-definitions.patch
+bugfix/s390/revert-s390-move-exports-to-definitions.patch
+bugfix/m68k/revert-m68k-move-exports-to-definitions.patch
+bugfix/alpha/revert-alpha-move-exports-to-actual-definitions.patch
+bugfix/powerpc/powerpc-remove-mac-on-linux-hooks.patch
+bugfix/powerpc/powerpc-fix-missing-crcs-add-yet-more-asm-prototypes.patch
+bugfix/all/module-disable-matching-missing-version-crc.patch
+
+# ABI maintenance
+
+# Tools bug fixes
+bugfix/all/usbip-document-tcp-wrappers.patch
+bugfix/all/kbuild-fix-recordmcount-dependency.patch
+bugfix/all/tools-perf-man-date.patch
+bugfix/all/lockdep-fix-oot-build.patch
+bugfix/all/lockdep-fix-soname.patch
+bugfix/all/tools-perf-remove-shebangs.patch
+bugfix/all/tools-lib-traceevent-use-ldflags.patch
+bugfix/all/tools-lib-lockdep-use-ldflags.patch
+bugfix/x86/tools-hv-fix-fortify-format-warning.patch
+bugfix/x86/revert-perf-build-fix-libunwind-feature-detection-on.patch
+bugfix/alpha/alpha-uapi-add-support-for-__sane_userspace_types__.patch
+bugfix/all/tools-build-remove-bpf-run-time-check-at-build-time.patch
+bugfix/all/tools-lib-traceevent-fix-use-of-uninitialized-variables.patch
+bugfix/all/cpupower-bump-soname-version.patch
+bugfix/all/cpupower-fix-checks-for-cpu-existence.patch
+bugfix/all/liblockdep-fix-undefined-symbol-prandom_u32.patch
+bugfix/all/liblockdep-reduce-max_lock_depth-to-avoid-overflowin.patch
+bugfix/all/liblockdep-define-the-array_size-macro.patch
+bugfix/all/liblockdep-enable-wall-by-default.patch
+bugfix/all/liblockdep-fix-unused-value-warnings.patch
+bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch
+bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch
+bugfix/x86/cpupower-fix-turbo-frequency-reporting-for-pre-sandy.patch
diff --git a/patches/series-orig b/patches/series-orig
new file mode 100644 (file)
index 0000000..3294794
--- /dev/null
@@ -0,0 +1,7 @@
++ debian/dfsg/arch-powerpc-platforms-8xx-ucode-disable.patch
++ debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch
++ debian/dfsg/vs6624-disable.patch
++ debian/dfsg/drivers-net-appletalk-cops.patch
++ debian/dfsg/video-remove-nvidiafb-and-rivafb.patch
++ debian/dfsg/firmware-cleanup.patch
+X debian/dfsg/files-1
diff --git a/patches/series-rt b/patches/series-rt
new file mode 100644 (file)
index 0000000..2c4ee85
--- /dev/null
@@ -0,0 +1,600 @@
+###########################################################
+# DELTA against a known Linus release
+###########################################################
+
+############################################################
+# UPSTREAM changes queued
+############################################################
+
+############################################################
+# UPSTREAM FIXES, patches pending
+############################################################
+features/all/rt/timer-make-the-base-lock-raw.patch
+
+############################################################
+# Stuff broken upstream, patches submitted
+############################################################
+features/all/rt/lockdep-Handle-statically-initialized-PER_CPU-locks-.patch
+features/all/rt/lockdep-Fix-compilation-error-for-CONFIG_MODULES-and.patch
+features/all/rt/lockdep-Fix-per-cpu-static-objects.patch
+
+features/all/rt/0001-futex-Cleanup-variable-names-for-futex_top_waiter.patch
+features/all/rt/0002-futex-Use-smp_store_release-in-mark_wake_futex.patch
+features/all/rt/0003-futex-Remove-rt_mutex_deadlock_account_.patch
+features/all/rt/0004-futex-rt_mutex-Provide-futex-specific-rt_mutex-API.patch
+features/all/rt/0005-futex-Change-locking-rules.patch
+features/all/rt/0006-futex-Cleanup-refcounting.patch
+features/all/rt/0007-futex-Rework-inconsistent-rt_mutex-futex_q-state.patch
+features/all/rt/0008-futex-Pull-rt_mutex_futex_unlock-out-from-under-hb-l.patch
+features/all/rt/0009-futex-rt_mutex-Introduce-rt_mutex_init_waiter.patch
+features/all/rt/0010-futex-rt_mutex-Restructure-rt_mutex_finish_proxy_loc.patch
+features/all/rt/0011-futex-Rework-futex_lock_pi-to-use-rt_mutex_-_proxy_l.patch
+features/all/rt/0012-futex-Futex_unlock_pi-determinism.patch
+features/all/rt/0013-futex-Drop-hb-lock-before-enqueueing-on-the-rtmutex.patch
+
+# Those two should vanish soon (not use PIT during bootup)
+features/all/rt/at91_dont_enable_disable_clock.patch
+
+############################################################
+# Stuff which needs addressing upstream, but requires more
+# information
+############################################################
+features/all/rt/rfc-arm-smp-__cpu_disable-fix-sleeping-function-called-from-invalid-context.patch
+
+############################################################
+# Stuff broken upstream, need to be sent
+############################################################
+features/all/rt/rtmutex--Handle-non-enqueued-waiters-gracefully.patch
+features/all/rt/fs-dcache-include-wait.h.patch
+features/all/rt/rbtree-include-rcu.h-because-we-use-it.patch
+features/all/rt/fs-dcache-init-in_lookup_hashtable.patch
+features/all/rt/iommu-iova-don-t-disable-preempt-around-this_cpu_ptr.patch
+features/all/rt/iommu-vt-d-don-t-disable-preemption-while-accessing-.patch
+features/all/rt/x86-apic-get-rid-of-warning-acpi_ioapic_lock-defined.patch
+features/all/rt/rxrpc-remove-unused-static-variables.patch
+features/all/rt/rcu-update-make-RCU_EXPEDITE_BOOT-default.patch
+features/all/rt/locking-percpu-rwsem-use-swait-for-the-wating-writer.patch
+features/all/rt/pinctrl-qcom-Use-raw-spinlock-variants.patch
+features/all/rt/x86-mm-cpa-avoid-wbinvd-for-PREEMPT.patch
+
+# Wants a different fix for upstream
+features/all/rt/NFSv4-replace-seqcount_t-with-a-seqlock_t.patch
+
+############################################################
+# Submitted on LKML
+############################################################
+
+# SPARC part of erly printk consolidation
+features/all/rt/sparc64-use-generic-rwsem-spinlocks-rt.patch
+
+# SRCU
+features/all/rt/kernel-SRCU-provide-a-static-initializer.patch
+
+############################################################
+# Submitted to mips ML
+############################################################
+
+############################################################
+# Submitted to ARM ML
+############################################################
+
+############################################################
+# Submitted to PPC ML
+############################################################
+
+############################################################
+# Submitted on LKML
+############################################################
+
+############################################################
+# Submitted to net-dev
+############################################################
+
+############################################################
+# Pending in tip
+############################################################
+
+############################################################
+# Stuff which should go upstream ASAP
+############################################################
+
+# SCHED BLOCK/WQ
+features/all/rt/block-shorten-interrupt-disabled-regions.patch
+
+# Timekeeping split jiffies lock. Needs a good argument :)
+features/all/rt/timekeeping-split-jiffies-lock.patch
+
+# Tracing
+features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch
+
+# PTRACE/SIGNAL crap
+features/all/rt/signal-revert-ptrace-preempt-magic.patch
+
+# ARM lock annotation
+features/all/rt/arm-convert-boot-lock-to-raw.patch
+features/all/rt/arm-kprobe-replace-patch_lock-to-raw-lock.patch
+
+# PREEMPT_ENABLE_NO_RESCHED
+
+# SIGNALS / POSIXTIMERS
+features/all/rt/posix-timers-no-broadcast.patch
+features/all/rt/signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch
+
+# SCHED
+
+# GENERIC CMPXCHG
+
+# SHORTEN PREEMPT DISABLED
+features/all/rt/drivers-random-reduce-preempt-disabled-region.patch
+
+# CLOCKSOURCE
+features/all/rt/arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch
+features/all/rt/clockevents-drivers-timer-atmel-pit-fix-double-free_.patch
+features/all/rt/clocksource-tclib-allow-higher-clockrates.patch
+
+# DRIVERS NET
+features/all/rt/drivers-net-8139-disable-irq-nosync.patch
+
+# PREEMPT
+
+# PM
+features/all/rt/suspend-prevernt-might-sleep-splats.patch
+
+# NETWORKING
+features/all/rt/net-prevent-abba-deadlock.patch
+features/all/rt/net-sched-dev_deactivate_many-use-msleep-1-instead-o.patch
+
+# X86
+features/all/rt/x86-io-apic-migra-no-unmask.patch
+
+# RCU
+
+# LOCKING INIT FIXES
+
+# PCI
+features/all/rt/pci-access-use-__wake_up_all_locked.patch
+
+# WORKQUEUE
+
+
+#####################################################
+# Stuff which should go mainline, but wants some care
+#####################################################
+
+# SEQLOCK
+
+# ANON RW SEMAPHORES
+
+# TRACING
+features/all/rt/latencyhist-disable-jump-labels.patch
+features/all/rt/latency-hist.patch
+features/all/rt/latency_hist-update-sched_wakeup-probe.patch
+features/all/rt/trace-latency-hist-Consider-new-argument-when-probin.patch
+features/all/rt/trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch
+
+##################################################
+# REAL RT STUFF starts here
+##################################################
+
+# PRINTK
+features/all/rt/printk-kill.patch
+features/all/rt/printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch
+
+# Enable RT CONFIG
+features/all/rt/rt-preempt-base-config.patch
+features/all/rt/kconfig-disable-a-few-options-rt.patch
+features/all/rt/kconfig-preempt-rt-full.patch
+
+# WARN/BUG_ON_RT
+features/all/rt/bug-rt-dependend-variants.patch
+features/all/rt/iommu-amd--Use-WARN_ON_NORT.patch
+
+# LOCAL_IRQ_RT/NON_RT
+features/all/rt/local-irq-rt-depending-variants.patch
+
+# PREEMPT NORT
+features/all/rt/preempt-nort-rt-variants.patch
+
+# local locks & migrate disable
+features/all/rt/introduce_migrate_disable_cpu_light.patch
+features/all/rt/futex-workaround-migrate_disable-enable-in-different.patch
+features/all/rt/rt-local-irq-lock.patch
+features/all/rt/locallock-add-local_lock_on.patch
+
+# ANNOTATE local_irq_disable sites
+features/all/rt/ata-disable-interrupts-if-non-rt.patch
+features/all/rt/ide-use-nort-local-irq-variants.patch
+features/all/rt/infiniband-mellanox-ib-use-nort-irq.patch
+features/all/rt/inpt-gameport-use-local-irq-nort.patch
+features/all/rt/user-use-local-irq-nort.patch
+features/all/rt/usb-use-_nort-in-giveback.patch
+features/all/rt/mm-scatterlist-dont-disable-irqs-on-RT.patch
+features/all/rt/mm-workingset-do-not-protect-workingset_shadow_nodes.patch
+
+# Sigh
+features/all/rt/signal-fix-up-rcu-wreckage.patch
+features/all/rt/oleg-signal-rt-fix.patch
+features/all/rt/x86-signal-delay-calling-signals-on-32bit.patch
+
+# ANNOTATE BUG/WARNON
+features/all/rt/net-wireless-warn-nort.patch
+
+# BIT SPINLOCKS - SIGH
+features/all/rt/fs-replace-bh_uptodate_lock-for-rt.patch
+features/all/rt/fs-jbd-replace-bh_state-lock.patch
+
+# GENIRQ
+features/all/rt/list_bl.h-make-list-head-locking-RT-safe.patch
+features/all/rt/list_bl-fixup-bogus-lockdep-warning.patch
+features/all/rt/genirq-disable-irqpoll-on-rt.patch
+features/all/rt/genirq-force-threading.patch
+
+# DRIVERS NET
+features/all/rt/drivers-net-vortex-fix-locking-issues.patch
+
+# MM PAGE_ALLOC
+features/all/rt/mm-page_alloc-rt-friendly-per-cpu-pages.patch
+features/all/rt/mm-page_alloc-reduce-lock-sections-further.patch
+
+# MM SWAP
+features/all/rt/mm-convert-swap-to-percpu-locked.patch
+features/all/rt/mm-perform-lru_add_drain_all-remotely.patch
+
+# MM vmstat
+features/all/rt/mm-make-vmstat-rt-aware.patch
+
+# MM memory
+features/all/rt/re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch
+
+# MM bounce
+features/all/rt/mm-bounce-local-irq-save-nort.patch
+
+# MM SLxB
+features/all/rt/mm-disable-sloub-rt.patch
+features/all/rt/mm-enable-slub.patch
+features/all/rt/slub-enable-irqs-for-no-wait.patch
+features/all/rt/slub-disable-SLUB_CPU_PARTIAL.patch
+
+# MM
+features/all/rt/mm-page-alloc-use-local-lock-on-target-cpu.patch
+features/all/rt/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch
+features/all/rt/mm-memcontrol-do_not_disable_irq.patch
+features/all/rt/mm-memcontrol-mem_cgroup_migrate-replace-another-loc.patch
+features/all/rt/mm-backing-dev-don-t-disable-IRQs-in-wb_congested_pu.patch
+features/all/rt/mm_zsmalloc_copy_with_get_cpu_var_and_locking.patch
+
+# RADIX TREE
+features/all/rt/radix-tree-use-local-locks.patch
+
+# PANIC
+features/all/rt/panic-disable-random-on-rt.patch
+
+# TIMERS
+features/all/rt/timers-prepare-for-full-preemption.patch
+features/all/rt/timer-delay-waking-softirqs-from-the-jiffy-tick.patch
+
+# HRTIMERS
+features/all/rt/hrtimers-prepare-full-preemption.patch
+features/all/rt/hrtimer-enfore-64byte-alignment.patch
+features/all/rt/hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
+features/all/rt/sched-deadline-dl_task_timer-has-to-be-irqsafe.patch
+features/all/rt/timer-fd-avoid-live-lock.patch
+features/all/rt/tick-broadcast--Make-hrtimer-irqsafe.patch
+features/all/rt/timer-hrtimer-check-properly-for-a-running-timer.patch
+
+# POSIX-CPU-TIMERS
+features/all/rt/posix-timers-thread-posix-cpu-timers-on-rt.patch
+
+# SCHEDULER
+features/all/rt/sched-delay-put-task.patch
+features/all/rt/sched-limit-nr-migrate.patch
+features/all/rt/sched-mmdrop-delayed.patch
+features/all/rt/kernel-sched-move-stack-kprobe-clean-up-to-__put_tas.patch
+features/all/rt/sched-rt-mutex-wakeup.patch
+features/all/rt/sched-might-sleep-do-not-account-rcu-depth.patch
+features/all/rt/cond-resched-softirq-rt.patch
+features/all/rt/cond-resched-lock-rt-tweak.patch
+features/all/rt/sched-disable-ttwu-queue.patch
+features/all/rt/sched-disable-rt-group-sched-on-rt.patch
+features/all/rt/sched-ttwu-ensure-success-return-is-correct.patch
+features/all/rt/sched-workqueue-Only-wake-up-idle-workers-if-not-blo.patch
+
+# STOP MACHINE
+features/all/rt/stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
+features/all/rt/stop-machine-raw-lock.patch
+
+# MIGRATE DISABLE AND PER CPU
+features/all/rt/hotplug-light-get-online-cpus.patch
+features/all/rt/hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch
+features/all/rt/re-migrate_disable-race-with-cpu-hotplug-3f.patch
+features/all/rt/ftrace-migrate-disable-tracing.patch
+features/all/rt/hotplug-use-migrate-disable.patch
+
+# NOHZ
+
+# LOCKDEP
+features/all/rt/lockdep-no-softirq-accounting-on-rt.patch
+
+# SOFTIRQ
+features/all/rt/mutex-no-spin-on-rt.patch
+features/all/rt/tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch
+features/all/rt/softirq-preempt-fix-3-re.patch
+features/all/rt/softirq-disable-softirq-stacks-for-rt.patch
+features/all/rt/softirq-split-locks.patch
+features/all/rt/kernel-softirq-unlock-with-irqs-on.patch
+features/all/rt/kernel-migrate_disable-do-fastpath-in-atomic-irqs-of.patch
+features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch
+features/all/rt/softirq-split-timer-softirqs-out-of-ksoftirqd.patch
+features/all/rt/softirq-wake-the-timer-softirq-if-needed.patch
+features/all/rt/timers-Don-t-wake-ktimersoftd-on-every-tick.patch
+features/all/rt/rtmutex-trylock-is-okay-on-RT.patch
+
+# compile fix due to rtmutex locks
+features/all/rt/gpu_don_t_check_for_the_lock_owner.patch
+features/all/rt/fs-nfs-turn-rmdir_sem-into-a-semaphore.patch
+
+# FUTEX/RTMUTEX
+features/all/rt/rtmutex-futex-prepare-rt.patch
+features/all/rt/futex-requeue-pi-fix.patch
+features/all/rt/futex-Ensure-lock-unlock-symetry-versus-pi_lock-and-.patch
+
+# RTMUTEX
+features/all/rt/pid.h-include-atomic.h.patch
+features/all/rt/arm-include-definition-for-cpumask_t.patch
+features/all/rt/locking-locktorture-Do-NOT-include-rwlock.h-directly.patch
+features/all/rt/rtmutex-lock-killable.patch
+features/all/rt/rtmutex-Make-lock_killable-work.patch
+features/all/rt/spinlock-types-separate-raw.patch
+features/all/rt/rtmutex-avoid-include-hell.patch
+features/all/rt/rtmutex_dont_include_rcu.patch
+features/all/rt/rt-add-rt-locks.patch
+features/all/rt/rt-drop_mutex_disable_on_not_debug.patch
+features/all/rt/rtmutex-add-a-first-shot-of-ww_mutex.patch
+features/all/rt/rtmutex-Provide-rt_mutex_lock_state.patch
+features/all/rt/rtmutex-Provide-locked-slowpath.patch
+features/all/rt/rwsem-rt-Lift-single-reader-restriction.patch
+features/all/rt/ptrace-fix-ptrace-vs-tasklist_lock-race.patch
+
+# RCU
+features/all/rt/peter_zijlstra-frob-rcu.patch
+features/all/rt/rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch
+features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch
+features/all/rt/rcutree-rcu_bh_qs-disable-irq-while-calling-rcu_pree.patch
+
+# DRIVERS SERIAL
+features/all/rt/drivers-tty-fix-omap-lock-crap.patch
+features/all/rt/drivers-tty-pl011-irq-disable-madness.patch
+features/all/rt/rt-serial-warn-fix.patch
+features/all/rt/tty-serial-8250-don-t-take-the-trylock-during-oops.patch
+
+# SIMPLE WAITQUEUE
+features/all/rt/wait.h-include-atomic.h.patch
+features/all/rt/work-simple-Simple-work-queue-implemenation.patch
+features/all/rt/completion-use-simple-wait-queues.patch
+features/all/rt/fs-aio-simple-simple-work.patch
+features/all/rt/genirq-do-not-invoke-the-affinity-callback-via-a-wor.patch
+features/all/rt/hrtimer-Move-schedule_work-call-to-helper-thread.patch
+
+# FS
+features/all/rt/peterz-percpu-rwsem-rt.patch
+features/all/rt/fs-namespace-preemption-fix.patch
+features/all/rt/mm-protect-activate-switch-mm.patch
+features/all/rt/fs-block-rt-support.patch
+features/all/rt/fs-ntfs-disable-interrupt-non-rt.patch
+features/all/rt/fs-jbd2-pull-your-plug-when-waiting-for-space.patch
+
+# X86
+features/all/rt/x86-mce-timer-hrtimer.patch
+features/all/rt/x86-mce-use-swait-queue-for-mce-wakeups.patch
+features/all/rt/x86-stackprot-no-random-on-rt.patch
+features/all/rt/x86-use-gen-rwsem-spinlocks-rt.patch
+features/all/rt/x86-UV-raw_spinlock-conversion.patch
+features/all/rt/thermal-Defer-thermal-wakups-to-threads.patch
+
+# CPU get light
+features/all/rt/epoll-use-get-cpu-light.patch
+features/all/rt/mm-vmalloc-use-get-cpu-light.patch
+features/all/rt/block-mq-use-cpu_light.patch
+features/all/rt/block-mq-drop-preempt-disable.patch
+features/all/rt/block-mq-don-t-complete-requests-via-IPI.patch
+features/all/rt/md-raid5-percpu-handling-rt-aware.patch
+
+# CPU CHILL
+features/all/rt/rt-introduce-cpu-chill.patch
+features/all/rt/cpu_chill-Add-a-UNINTERRUPTIBLE-hrtimer_nanosleep.patch
+
+# block
+features/all/rt/block-blk-mq-use-swait.patch
+
+# BLOCK LIVELOCK PREVENTION
+features/all/rt/block-use-cpu-chill.patch
+
+# FS LIVELOCK PREVENTION
+features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch
+features/all/rt/net-use-cpu-chill.patch
+features/all/rt/fs-dcache-use-swait_queue-instead-of-waitqueue.patch
+
+# WORKQUEUE more fixes
+features/all/rt/workqueue-use-rcu.patch
+features/all/rt/workqueue-use-locallock.patch
+features/all/rt/work-queue-work-around-irqsafe-timer-optimization.patch
+features/all/rt/workqueue-distangle-from-rq-lock.patch
+
+# IDR
+features/all/rt/idr-use-local-lock-for-protection.patch
+features/all/rt/percpu_ida-use-locklocks.patch
+
+# DEBUGOBJECTS
+features/all/rt/debugobjects-rt.patch
+
+# JUMPLABEL
+features/all/rt/jump-label-rt.patch
+
+# SEQLOCKS
+features/all/rt/seqlock-prevent-rt-starvation.patch
+
+# NETWORKING
+features/all/rt/sunrpc-make-svc_xprt_do_enqueue-use-get_cpu_light.patch
+features/all/rt/skbufhead-raw-lock.patch
+features/all/rt/net-core-cpuhotplug-drain-input_pkt_queue-lockless.patch
+features/all/rt/net-move-xmit_recursion-to-per-task-variable-on-RT.patch
+features/all/rt/net-provide-a-way-to-delegate-processing-a-softirq-t.patch
+features/all/rt/net-dev-always-take-qdisc-s-busylock-in-__dev_xmit_s.patch
+features/all/rt/net-Qdisc-use-a-seqlock-instead-seqcount.patch
+features/all/rt/net-add-back-the-missing-serialization-in-ip_send_un.patch
+features/all/rt/net-add-a-lock-around-icmp_sk.patch
+features/all/rt/net-Have-__napi_schedule_irqoff-disable-interrupts-o.patch
+
+# NETWORK DEBUGGING AID
+features/all/rt/ping-sysrq.patch
+
+# irqwork
+features/all/rt/irqwork-push_most_work_into_softirq_context.patch
+features/all/rt/irqwork-Move-irq-safe-work-to-irq-context.patch
+
+# Sound
+features/all/rt/snd-pcm-fix-snd_pcm_stream_lock-irqs_disabled-splats.patch
+
+# CONSOLE. NEEDS more thought !!!
+features/all/rt/printk-rt-aware.patch
+features/all/rt/kernel-printk-Don-t-try-to-print-from-IRQ-NMI-region.patch
+features/all/rt/HACK-printk-drop-the-logbuf_lock-more-often.patch
+
+# POWERC
+features/all/rt/power-use-generic-rwsem-on-rt.patch
+features/all/rt/powerpc-kvm-Disable-in-kernel-MPIC-emulation-for-PRE.patch
+features/all/rt/powerpc-ps3-device-init.c-adapt-to-completions-using.patch
+
+# ARM
+features/all/rt/arm-at91-tclib-default-to-tclib-timer-for-rt.patch
+features/all/rt/arm-unwind-use_raw_lock.patch
+features/all/rt/ARM-enable-irq-in-translation-section-permission-fau.patch
+features/all/rt/genirq-update-irq_set_irqchip_state-documentation.patch
+features/all/rt/KVM-arm-arm64-downgrade-preempt_disable-d-region-to-.patch
+
+# ARM64
+features/all/rt/arm64-xen--Make-XEN-depend-on-non-rt.patch
+
+# KGDB
+features/all/rt/kgb-serial-hackaround.patch
+
+# SYSFS - RT indicator
+features/all/rt/sysfs-realtime-entry.patch
+
+# KMAP/HIGHMEM
+features/all/rt/power-disable-highmem-on-rt.patch
+features/all/rt/mips-disable-highmem-on-rt.patch
+features/all/rt/mm-rt-kmap-atomic-scheduling.patch
+features/all/rt/mm--rt--Fix-generic-kmap_atomic-for-RT.patch
+features/all/rt/x86-highmem-add-a-already-used-pte-check.patch
+features/all/rt/arm-highmem-flush-tlb-on-unmap.patch
+features/all/rt/arm-enable-highmem-for-rt.patch
+
+# IPC
+features/all/rt/ipc-sem-rework-semaphore-wakeups.patch
+
+# SYSRQ
+
+# KVM require constant freq TSC (smp function call -> cpufreq)
+features/all/rt/x86-kvm-require-const-tsc-for-rt.patch
+features/all/rt/KVM-lapic-mark-LAPIC-timer-handler-as-irqsafe.patch
+
+# SCSI/FCOE
+features/all/rt/scsi-fcoe-rt-aware.patch
+features/all/rt/sas-ata-isci-dont-t-disable-interrupts-in-qc_issue-h.patch
+
+# X86 crypto
+features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch
+features/all/rt/crypto-Reduce-preempt-disabled-regions-more-algos.patch
+
+# Device mapper
+features/all/rt/dm-make-rt-aware.patch
+
+# ACPI
+features/all/rt/acpi-rt-Convert-acpi_gbl_hardware-lock-back-to-a-raw.patch
+
+# CPUMASK OFFSTACK
+features/all/rt/cpumask-disable-offstack-on-rt.patch
+
+# RANDOM
+features/all/rt/random-make-it-work-on-rt.patch
+
+# HOTPLUG
+features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch
+features/all/rt/cpu-rt-rework-cpu-down.patch
+features/all/rt/cpu-hotplug-Document-why-PREEMPT_RT-uses-a-spinlock.patch
+features/all/rt/kernel-cpu-fix-cpu-down-problem-if-kthread-s-cpu-is-.patch
+features/all/rt/kernel-hotplug-restore-original-cpu-mask-oncpu-down.patch
+features/all/rt/cpu_down_move_migrate_enable_back.patch
+features/all/rt/hotplug-Use-set_cpus_allowed_ptr-in-sync_unplug_thre.patch
+
+features/all/rt/rt-locking-Reenable-migration-accross-schedule.patch
+
+# SCSCI QLA2xxx
+features/all/rt/scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch
+
+# NET
+features/all/rt/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch
+features/all/rt/net-another-local-irq-disable-alloc-atomic-headache.patch
+features/all/rt/net-core-protect-users-of-napi_alloc_cache-against-r.patch
+features/all/rt/net-fix-iptable-xt-write-recseq-begin-rt-fallout.patch
+features/all/rt/net-make-devnet_rename_seq-a-mutex.patch
+
+# CRYPTO
+features/all/rt/peterz-srcu-crypto-chain.patch
+
+# LOCKDEP
+features/all/rt/lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch
+features/all/rt/lockdep-selftest-fix-warnings-due-to-missing-PREEMPT.patch
+
+# PERF
+features/all/rt/perf-make-swevent-hrtimer-irqsafe.patch
+features/all/rt/kernel-perf-mark-perf_cpu_context-s-timer-as-irqsafe.patch
+
+# RCU
+features/all/rt/rcu-disable-rcu-fast-no-hz-on-rt.patch
+features/all/rt/rcu-Eliminate-softirq-processing-from-rcutree.patch
+features/all/rt/rcu-make-RCU_BOOST-default-on-RT.patch
+features/all/rt/rcu-enable-rcu_normal_after_boot-by-default-for-RT.patch
+
+# PREEMPT LAZY
+features/all/rt/preempt-lazy-support.patch
+features/all/rt/ftrace-Fix-trace-header-alignment.patch
+features/all/rt/x86-preempt-lazy.patch
+features/all/rt/arm-preempt-lazy-support.patch
+features/all/rt/powerpc-preempt-lazy-support.patch
+features/all/rt/arch-arm64-Add-lazy-preempt-support.patch
+
+# LEDS
+features/all/rt/leds-trigger-disable-CPU-trigger-on-RT.patch
+
+# DRIVERS
+features/all/rt/mmci-remove-bogus-irq-save.patch
+features/all/rt/cpufreq-drop-K8-s-driver-from-beeing-selected.patch
+features/all/rt/connector-cn_proc-Protect-send_msg-with-a-local-lock.patch
+features/all/rt/drivers-block-zram-Replace-bit-spinlocks-with-rtmute.patch
+features/all/rt/drivers-zram-Don-t-disable-preemption-in-zcomp_strea.patch
+
+# I915
+features/all/rt/drm-i915-drop-trace_i915_gem_ring_dispatch-onrt.patch
+features/all/rt/i915-bogus-warning-from-i915-when-running-on-PREEMPT.patch
+features/all/rt/drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch
+features/all/rt/drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch
+
+# CGROUPS
+features/all/rt/cgroups-use-simple-wait-in-css_release.patch
+features/all/rt/cgroups-scheduling-while-atomic-in-cgroup-code.patch
+features/all/rt/cpuset-Convert-callback_lock-to-raw_spinlock_t.patch
+
+# New stuff
+# Revisit: We need this in other places as well
+features/all/rt/move_sched_delayed_work_to_helper.patch
+
+# MD
+features/all/rt/md-disable-bcache.patch
+
+# WORKQUEUE SIGH
+features/all/rt/workqueue-prevent-deadlock-stall.patch
+
+# Add RT to version
+features/all/rt/localversion.patch
diff --git a/rules b/rules
new file mode 100755 (executable)
index 0000000..8ee38b6
--- /dev/null
+++ b/rules
@@ -0,0 +1,119 @@
+#!/usr/bin/make -f
+
+SHELL    := sh -e
+DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)
+SOURCE := $(shell dpkg-parsechangelog -SSource)
+VERSION := $(shell dpkg-parsechangelog -SVersion)
+VERSION_UPSTREAM := $(shell echo "$(VERSION)" | sed -e 's,-[^-]*$$,,')
+VERSION_BINNMU := $(shell echo "$(VERSION)" | sed -rne 's,.*\+b([0-9]+)$$,\1,p')
+
+include debian/rules.defs
+
+ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+  DEBIAN_KERNEL_JOBS := $(subst parallel=,,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+endif
+ifdef DEBIAN_KERNEL_JOBS
+  MAKEFLAGS += -j$(DEBIAN_KERNEL_JOBS)
+endif
+BUILD_STAGE1 := $(filter stage1,$(DEB_BUILD_PROFILES))
+ifneq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+# This only disables building the linux-doc and linux-manual packages.
+# The rules for tools packages check separately for the 'nodoc' profile.
+  MAKEFLAGS += DO_DOCS=False
+endif
+ifneq (,$(filter pkg.linux.notools,$(DEB_BUILD_PROFILES)))
+  MAKEFLAGS += DO_TOOLS=False
+endif
+
+.NOTPARALLEL:
+
+source: debian/control
+       dh_testdir
+       $(MAKE) -f debian/rules.gen source
+
+setup: debian/control
+       dh_testdir
+       $(MAKE) -f debian/rules.gen setup_$(DEB_HOST_ARCH)
+
+build: build-arch build-indep
+
+build-arch: debian/control
+       dh_testdir
+ifndef BUILD_STAGE1
+       $(MAKE) -f debian/rules.gen build-arch_$(DEB_HOST_ARCH)
+endif
+
+build-indep: debian/control
+       dh_testdir
+ifndef BUILD_STAGE1
+       $(MAKE) -f debian/rules.gen build-indep
+endif
+
+binary:        binary-indep binary-arch
+
+binary-arch:
+       dh_testdir
+ifdef BUILD_STAGE1
+       $(MAKE) -f debian/rules.gen binary-libc-dev_$(DEB_HOST_ARCH)
+else
+       $(MAKE) -f debian/rules.gen binary-arch_$(DEB_HOST_ARCH)
+endif
+
+binary-indep:
+       dh_testdir
+ifndef BUILD_STAGE1
+       $(MAKE) -f debian/rules.gen binary-indep
+endif
+
+DIR_ORIG = ../orig/$(SOURCE)-$(VERSION_UPSTREAM)
+TAR_ORIG_NAME = $(SOURCE)_$(VERSION_UPSTREAM).orig.tar.xz
+TAR_ORIG = $(firstword $(wildcard ../$(TAR_ORIG_NAME)) $(wildcard ../orig/$(TAR_ORIG_NAME)))
+
+orig: $(DIR_ORIG)
+       rsync --delete --exclude /debian --exclude .svk --exclude .svn --exclude .git --link-dest=$(DIR_ORIG)/ -a $(DIR_ORIG)/ .
+       QUILT_PATCHES='$(CURDIR)/debian/patches' QUILT_PC=.pc quilt push --quiltrc - -a -q --fuzz=0
+
+$(DIR_ORIG):
+ifeq ($(TAR_ORIG),)
+       $(error Cannot find orig tarball $(TAR_ORIG_NAME))
+else
+       mkdir -p ../orig
+       tar -C ../orig -xaf $(TAR_ORIG)
+endif
+
+maintainerclean:
+       rm -f debian/config.defines.dump debian/control debian/control.md5sum debian/linux-headers-* debian/linux-image-* debian/rules.gen
+       rm -rf $(filter-out debian .svk .svn .git, $(wildcard * .[^.]*))
+
+clean: debian/control
+       dh_testdir
+       rm -rf $(BUILD_DIR) $(STAMPS_DIR) debian/lib/python/debian_linux/*.pyc debian/lib/python/debian_linux/__pycache__ $$(find debian -maxdepth 1 -type d -name 'linux-*') debian/*-modules-*-di* debian/kernel-image-*-di* debian/xen-linux-system-* debian/*-tmp
+       dh_clean
+
+CONTROL_FILES = debian/changelog $(wildcard debian/templates/*.in)
+CONTROL_FILES += debian/config/defines $(wildcard debian/config/*/defines) $(wildcard debian/config/*/*/defines)
+CONTROL_FILES += $(wildcard debian/installer/*/kernel-versions) $(wildcard debian/installer/*/package-list) debian/installer/package-list
+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)
+# Hash randomisation makes the pickled config unreproducible
+       PYTHONHASHSEED=0 $<
+       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
diff --git a/rules.d/Makefile b/rules.d/Makefile
new file mode 100644 (file)
index 0000000..c7506d3
--- /dev/null
@@ -0,0 +1,17 @@
+DATA = \
+       Kbuild \
+       Makefile \
+
+SUBDIRS = \
+       scripts \
+       tools
+
+include $(top_rulesdir)/Makefile.inc
+
+# Build userland headers first
+unexport VERSION
+all-local:
+       mkdir -p headers-tools
+       $(MAKE) -C $(top_srcdir) ARCH=$(KERNEL_ARCH) O=$(CURDIR)/headers-tools \
+               INSTALL_HDR_PATH=$(CURDIR) headers_install
+all-recursive: all-local
diff --git a/rules.d/Makefile.inc b/rules.d/Makefile.inc
new file mode 100644 (file)
index 0000000..48f8c2e
--- /dev/null
@@ -0,0 +1,57 @@
+# Normalise OUTDIR to avoid triggering rebuilds
+override OUTDIR := $(patsubst ./%,%,$(OUTDIR))
+
+VPATH = $(top_rulesdir)/$(OUTDIR) $(top_srcdir)/$(OUTDIR)
+
+SHELL = /bin/sh -e
+
+CC = $(CROSS_COMPILE)gcc
+CXX = $(CROSS_COMPILE)g++
+CFLAGS := $(shell dpkg-buildflags --get CFLAGS) -Wall
+CPPFLAGS := $(shell dpkg-buildflags --get CPPFLAGS) \
+       -I$(top_srcdir)/$(OUTDIR) \
+       -I$(top_srcdir)/debian/build/build-tools/$(OUTDIR) \
+       -isystem $(top_srcdir)/debian/build/build-tools/include
+CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) -Wall
+LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)
+
+installdir ?= $(prefix)/$(OUTDIR)
+
+all: all-local all-recursive
+clean: clean-recursive
+install: install-local install-recursive
+
+%-recursive:
+       +@list='$(SUBDIRS)'; \
+       for subdir in $$list; do \
+         echo "Making $* in $$subdir"; \
+         mkdir -p $$subdir; \
+         $(MAKE) -C $$subdir -f $(top_rulesdir)/$(OUTDIR)/$$subdir/Makefile OUTDIR=$(OUTDIR)/$$subdir $*; \
+       done
+
+all-local: $(PROGS)
+
+install-local: install-local-progs install-local-scripts install-local-data
+
+install-local-progs: $(PROGS)
+       @for p in $^; do \
+         echo " install -m755 '$$p' '$(DESTDIR)/$(installdir)'"; \
+         install -D -m755 "$$p" "$(DESTDIR)/$(installdir)/$$(basename $$p)"; \
+       done
+
+SCRIPTS_REAL = $(wildcard $(addprefix $(top_srcdir)/$(OUTDIR)/,$(SCRIPTS)))
+
+install-local-scripts: $(SCRIPTS_REAL)
+       @for p in $^; do \
+         echo " install -m755 '$$p' '$(DESTDIR)/$(installdir)'"; \
+         install -D -m755 "$$p" "$(DESTDIR)/$(installdir)/$$(basename $$p)"; \
+       done
+
+DATA_REAL = $(wildcard $(addprefix $(top_srcdir)/$(OUTDIR)/,$(DATA)))
+
+install-local-data: $(DATA_REAL)
+       @for p in $^; do \
+         echo " install -m644 '$$p' '$(DESTDIR)/$(installdir)'"; \
+         install -D -m644 "$$p" "$(DESTDIR)/$(installdir)/$$(basename $$p)"; \
+       done
+
diff --git a/rules.d/scripts/Makefile b/rules.d/scripts/Makefile
new file mode 100644 (file)
index 0000000..fc8c681
--- /dev/null
@@ -0,0 +1,44 @@
+PROGS = \
+       conmakehash \
+       extract-cert \
+       kallsyms \
+       pnmtologo \
+       recordmcount \
+       sign-file \
+       unifdef
+
+DATA = \
+       Kbuild.include \
+       Makefile.* \
+       mkversion \
+       module-common.lds
+
+SCRIPTS =  \
+       checkincludes.pl \
+       checkstack.pl \
+       checkversion.pl \
+       depmod.sh \
+       gcc-*.sh \
+       gen_initramfs_list.sh \
+       headers_install.sh \
+       kernel-doc \
+       Lindent \
+       makelst \
+       mksysmap \
+       mkuboot.sh \
+       namespace.pl \
+       patch-kernel \
+       recordmcount.pl \
+       setlocalversion \
+       ver_linux
+
+SUBDIRS = \
+       basic \
+       genksyms \
+       kconfig \
+       mod
+
+include $(top_rulesdir)/Makefile.inc
+
+CPPFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+extract-cert sign-file: LDLIBS += -lcrypto
diff --git a/rules.d/scripts/basic/Makefile b/rules.d/scripts/basic/Makefile
new file mode 100644 (file)
index 0000000..86b86a8
--- /dev/null
@@ -0,0 +1,5 @@
+PROGS = \
+       bin2c \
+       fixdep
+
+include $(top_rulesdir)/Makefile.inc
diff --git a/rules.d/scripts/genksyms/Makefile b/rules.d/scripts/genksyms/Makefile
new file mode 100644 (file)
index 0000000..8e416da
--- /dev/null
@@ -0,0 +1,13 @@
+PROGS = genksyms
+
+include $(top_rulesdir)/Makefile.inc
+
+genksyms: genksyms.o parse.tab.o lex.lex.o
+
+lex.lex.o: keywords.hash.c parse.tab.h
+
+%.c: %.c_shipped
+       ln -s $< $@
+
+%.h: %.h_shipped
+       ln -s $< $@
diff --git a/rules.d/scripts/kconfig/Makefile b/rules.d/scripts/kconfig/Makefile
new file mode 100644 (file)
index 0000000..b6e2521
--- /dev/null
@@ -0,0 +1,13 @@
+PROGS = conf
+
+include $(top_rulesdir)/Makefile.inc
+
+conf: conf.o zconf.tab.o
+
+zconf.tab.c: zconf.hash.c zconf.lex.c
+
+%.c: %.c_shipped
+       ln -sf $< $@
+
+%.h: %.h_shipped
+       ln -sf $< $@
diff --git a/rules.d/scripts/mod/Makefile b/rules.d/scripts/mod/Makefile
new file mode 100644 (file)
index 0000000..e57e262
--- /dev/null
@@ -0,0 +1,22 @@
+PROGS = \
+       modpost \
+       modpost.real-lsb-32 \
+       modpost.real-lsb-64 \
+       modpost.real-msb-32 \
+       modpost.real-msb-64
+
+include $(top_rulesdir)/Makefile.inc
+
+wrapperdir = $(top_rulesdir)/$(OUTDIR)
+
+modpost.real-%:
+       $(MAKE) -f $(wrapperdir)/Makefile.real TYPE=$* SOURCEDIR=$(top_srcdir)/scripts/mod
+
+%: %.o
+       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
+
+modpost-opts.h: $(top_srcdir)/scripts/mod/modpost.c
+       python $(wrapperdir)/gendef.py $< > $@
+
+modpost.o: modpost.c modpost-opts.h
+       $(CC) $(CFLAGS) -I $(CURDIR) -c -o $@ $<
diff --git a/rules.d/scripts/mod/Makefile.real b/rules.d/scripts/mod/Makefile.real
new file mode 100644 (file)
index 0000000..489ea4f
--- /dev/null
@@ -0,0 +1,23 @@
+PROGS = modpost.real-$(TYPE)
+
+include $(top_rulesdir)/Makefile.inc
+
+wrapperdir = $(top_rulesdir)/$(OUTDIR)
+CFLAGS += -I $(CURDIR)/real-$(TYPE) -I $(wrapperdir)/real-$(TYPE)
+
+modpost.real-$(TYPE): file2alias.real-$(TYPE).o modpost.real-$(TYPE).o sumversion.real-$(TYPE).o
+       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
+
+%.real-$(TYPE).o: $(SOURCEDIR)/%.c real-$(TYPE)/devicetable-offsets.h
+       $(CC) $(CFLAGS) -c -o $@ $<
+
+real-$(TYPE)/devicetable-offsets.s: $(SOURCEDIR)/devicetable-offsets.c
+       mkdir -p real-$(TYPE)
+       $(CC) -include $(wrapperdir)/real-$(TYPE)/types.h $(CFLAGS) -nostdinc -I$(top_srcdir)/include -S -o $@ $<
+
+real-$(TYPE)/devicetable-offsets.h: real-$(TYPE)/devicetable-offsets.s
+       echo >$@ "#define __DEVICEVTABLE_OFFSETS_H__"
+       sed -ne "/^->/{s:->#\(.*\):/* \1 */:; \
+               s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
+               s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
+               s:->::; p;}" $< >>$@
diff --git a/rules.d/scripts/mod/elfconfig.h b/rules.d/scripts/mod/elfconfig.h
new file mode 100644 (file)
index 0000000..8c90ea6
--- /dev/null
@@ -0,0 +1,7 @@
+#include <endian.h>
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define HOST_ELFDATA ELFDATA2LSB
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define HOST_ELFDATA ELFDATA2MSB
+#endif
diff --git a/rules.d/scripts/mod/gendef.py b/rules.d/scripts/mod/gendef.py
new file mode 100755 (executable)
index 0000000..6e1bdf4
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+import re
+import sys
+
+for line in open(sys.argv[1]):
+    match = re.search('getopt\(argc, argv, "([\w:]*?)"\)', line)
+    if match:
+        options = match.group(1)
+        break
+else:
+    raise RuntimeError
+
+print '#define GETOPT_OPTIONS "%s"' % options
+
+print '#define GETOPT_CASE',
+for c in options:
+    if c == ':' or c == 'T':
+        continue
+    print "case '%c':" % c,
+print
diff --git a/rules.d/scripts/mod/modpost.c b/rules.d/scripts/mod/modpost.c
new file mode 100644 (file)
index 0000000..d574957
--- /dev/null
@@ -0,0 +1,136 @@
+#include <elf.h>
+#include <errno.h>
+#include <getopt.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "modpost-opts.h"
+
+int main (int argc, char *argv[])
+{
+  char const *data, *class;
+  char *list_name = NULL;
+  char *name = NULL;
+  char prog[1024];
+  unsigned char ei[EI_NIDENT];
+  int opt;
+  FILE *file;
+
+  while ((opt = getopt (argc, argv, GETOPT_OPTIONS)) != -1)
+  { 
+    switch(opt)
+    {
+      GETOPT_CASE
+        break;
+      case 'T':
+        list_name = optarg;
+        break;
+      default:
+        return EXIT_FAILURE;
+    }
+  }
+
+  if (optind != argc)
+  {
+    name = argv[optind];
+  }
+  else if (list_name)
+  {
+    size_t name_len;
+    int is_stdin = strcmp (list_name, "-") == 0;
+
+    /* Read first line of list file */
+    if (is_stdin)
+    {
+      file = stdin;
+      setvbuf(stdin, NULL, _IONBF, 0); /* don't over-read */
+    }
+    else
+    {
+      file = fopen (list_name, "r");
+      if (!file)
+      {
+        fprintf (stderr, "Can't open \"%s\"\n", list_name);
+        return EXIT_FAILURE;
+      }
+    }
+    if (getline (&name, &name_len, file) < 0)
+    {
+      if (errno)
+      {
+        fprintf (stderr, "Can't read \"%s\"\n", list_name);
+        return EXIT_FAILURE;
+      }
+      else
+      {
+        /* Empty list */
+        return EXIT_SUCCESS;
+      }
+    }
+    if (!is_stdin)
+      fclose(file);
+
+    /* Remove new-line */
+    name [strcspn (name, "\n")] = 0;
+
+    /* If this came from stdin, we need to add the first name to the
+     * arguments, because the upstream modpost can't read it again.
+     */
+    if (is_stdin)
+    {
+      char **new_argv = malloc (sizeof(*argv) * (argc + 2));
+      memcpy(new_argv, argv, sizeof(*argv) * argc);
+      new_argv [argc] = name;
+      new_argv [argc + 1] = NULL;
+      argv = new_argv;
+    }
+  }
+  else
+  {
+    /* Empty list */
+    return EXIT_SUCCESS;
+  }
+
+  if (!(file = fopen (name, "r")))
+  {
+    fprintf (stderr, "Can't open \"%s\"\n", name);
+    return EXIT_FAILURE;
+  }
+
+  if (fread (ei, 1, EI_NIDENT, file) != EI_NIDENT)
+  {
+    fprintf (stderr, "Error: input truncated\n");
+    return EXIT_FAILURE;
+  }
+
+  if (memcmp (ei, ELFMAG, SELFMAG) != 0)
+  {
+    fprintf (stderr, "Error: not ELF\n");
+    return EXIT_FAILURE;
+  }
+  switch (ei[EI_DATA]) {
+    case ELFDATA2LSB:
+      data = "lsb";
+      break;
+    case ELFDATA2MSB:
+      data = "msb";
+      break;
+    default:
+      return EXIT_FAILURE;
+  }
+  switch (ei[EI_CLASS]) {
+    case ELFCLASS32:
+      class = "32";
+      break;
+    case ELFCLASS64:
+      class = "64";
+      break;
+    default:
+      return EXIT_FAILURE;
+  }
+  snprintf (prog, sizeof prog, "%s.real-%s-%s", argv[0], data, class);
+
+  return execv (prog, argv);
+}
diff --git a/rules.d/scripts/mod/real-lsb-32/elfconfig.h b/rules.d/scripts/mod/real-lsb-32/elfconfig.h
new file mode 100644 (file)
index 0000000..1f7a732
--- /dev/null
@@ -0,0 +1,4 @@
+#define KERNEL_ELFCLASS ELFCLASS32
+#define KERNEL_ELFDATA ELFDATA2LSB
+#define MODULE_SYMBOL_PREFIX ""
+#include "../elfconfig.h"
diff --git a/rules.d/scripts/mod/real-lsb-32/types.h b/rules.d/scripts/mod/real-lsb-32/types.h
new file mode 100644 (file)
index 0000000..bad6dcc
--- /dev/null
@@ -0,0 +1,3 @@
+#include "../types.h"
+typedef __u32 kernel_ulong_t;
+#define BITS_PER_LONG 32
diff --git a/rules.d/scripts/mod/real-lsb-64/elfconfig.h b/rules.d/scripts/mod/real-lsb-64/elfconfig.h
new file mode 100644 (file)
index 0000000..e6f519f
--- /dev/null
@@ -0,0 +1,4 @@
+#define KERNEL_ELFCLASS ELFCLASS64
+#define KERNEL_ELFDATA ELFDATA2LSB
+#define MODULE_SYMBOL_PREFIX ""
+#include "../elfconfig.h"
diff --git a/rules.d/scripts/mod/real-lsb-64/types.h b/rules.d/scripts/mod/real-lsb-64/types.h
new file mode 100644 (file)
index 0000000..8d7b875
--- /dev/null
@@ -0,0 +1,3 @@
+#include "../types.h"
+typedef __u64 __attribute__((aligned(8))) kernel_ulong_t;
+#define BITS_PER_LONG 64
diff --git a/rules.d/scripts/mod/real-msb-32/elfconfig.h b/rules.d/scripts/mod/real-msb-32/elfconfig.h
new file mode 100644 (file)
index 0000000..a9ae561
--- /dev/null
@@ -0,0 +1,4 @@
+#define KERNEL_ELFCLASS ELFCLASS32
+#define KERNEL_ELFDATA ELFDATA2MSB
+#define MODULE_SYMBOL_PREFIX ""
+#include "../elfconfig.h"
diff --git a/rules.d/scripts/mod/real-msb-32/types.h b/rules.d/scripts/mod/real-msb-32/types.h
new file mode 100644 (file)
index 0000000..bad6dcc
--- /dev/null
@@ -0,0 +1,3 @@
+#include "../types.h"
+typedef __u32 kernel_ulong_t;
+#define BITS_PER_LONG 32
diff --git a/rules.d/scripts/mod/real-msb-64/elfconfig.h b/rules.d/scripts/mod/real-msb-64/elfconfig.h
new file mode 100644 (file)
index 0000000..844d22f
--- /dev/null
@@ -0,0 +1,4 @@
+#define KERNEL_ELFCLASS ELFCLASS64
+#define KERNEL_ELFDATA ELFDATA2MSB
+#define MODULE_SYMBOL_PREFIX ""
+#include "../elfconfig.h"
diff --git a/rules.d/scripts/mod/real-msb-64/types.h b/rules.d/scripts/mod/real-msb-64/types.h
new file mode 100644 (file)
index 0000000..8d7b875
--- /dev/null
@@ -0,0 +1,3 @@
+#include "../types.h"
+typedef __u64 __attribute__((aligned(8))) kernel_ulong_t;
+#define BITS_PER_LONG 64
diff --git a/rules.d/scripts/mod/types.h b/rules.d/scripts/mod/types.h
new file mode 100644 (file)
index 0000000..aba3827
--- /dev/null
@@ -0,0 +1,9 @@
+/* Minimal definitions for mod_devicetable.h and devicetable-offsets.c */
+typedef unsigned char __u8;
+typedef unsigned short __u16;
+typedef unsigned int __u32;
+typedef unsigned long long __u64;
+typedef struct {
+        __u8 b[16];
+} uuid_le;
+#define offsetof(a,b) __builtin_offsetof(a,b)
diff --git a/rules.d/tools/Makefile b/rules.d/tools/Makefile
new file mode 100644 (file)
index 0000000..787959c
--- /dev/null
@@ -0,0 +1,8 @@
+SUBDIRS = \
+       hv \
+       perf \
+       power \
+       usb/usbip
+#SUBDIRS += lib/lockdep
+
+include $(top_rulesdir)/Makefile.inc
diff --git a/rules.d/tools/hv/Makefile b/rules.d/tools/hv/Makefile
new file mode 100644 (file)
index 0000000..3393517
--- /dev/null
@@ -0,0 +1,22 @@
+ifeq ($(filter i386 amd64 x32,$(DEB_HOST_ARCH)),)
+
+# Build nothing
+include $(top_rulesdir)/Makefile.inc
+
+else
+
+PROGS = \
+       hv_fcopy_daemon \
+       hv_kvp_daemon \
+       hv_vss_daemon
+
+installdir = /usr/sbin
+
+include $(top_rulesdir)/Makefile.inc
+
+# Handle check-hyperv separately since it's installed in a different directory
+all-local: check-hyperv
+install-local:
+       install -D -m755 check-hyperv '$(DESTDIR)/lib/hyperv-daemons/check-hyperv'
+
+endif
diff --git a/rules.d/tools/hv/check-hyperv.c b/rules.d/tools/hv/check-hyperv.c
new file mode 100644 (file)
index 0000000..4d2b6f5
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * This program is derived from systemd.
+ *
+ * Copyright 2011 Lennart Poettering
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#define streq(a, b) (!strcmp(a, b))
+#define ELEMENTSOF(a) (sizeof(a) / sizeof((a)[0]))
+
+enum {
+       VIRTUALIZATION_NONE,
+       VIRTUALIZATION_VM_OTHER,
+       VIRTUALIZATION_MICROSOFT,
+};
+
+static int detect_vm_cpuid(void) {
+
+        static const struct {
+                const char *cpuid;
+                int id;
+        } cpuid_vendor_table[] = {
+                /* http://msdn.microsoft.com/en-us/library/ff542428.aspx */
+                { "Microsoft Hv", VIRTUALIZATION_MICROSOFT },
+        };
+
+        uint32_t eax, ecx;
+        bool hypervisor;
+
+        /* http://lwn.net/Articles/301888/ */
+
+#if defined (__i386__)
+#define REG_a "eax"
+#define REG_b "ebx"
+#elif defined (__amd64__)
+#define REG_a "rax"
+#define REG_b "rbx"
+#endif
+
+        /* First detect whether there is a hypervisor */
+        eax = 1;
+        __asm__ __volatile__ (
+                /* ebx/rbx is being used for PIC! */
+                "  push %%"REG_b"         \n\t"
+                "  cpuid                  \n\t"
+                "  pop %%"REG_b"          \n\t"
+
+                : "=a" (eax), "=c" (ecx)
+                : "0" (eax)
+        );
+
+        hypervisor = !!(ecx & 0x80000000U);
+
+        if (hypervisor) {
+                union {
+                        uint32_t sig32[3];
+                        char text[13];
+                } sig = {};
+                unsigned j;
+
+                /* There is a hypervisor, see what it is */
+                eax = 0x40000000U;
+                __asm__ __volatile__ (
+                        /* ebx/rbx is being used for PIC! */
+                        "  push %%"REG_b"         \n\t"
+                        "  cpuid                  \n\t"
+                        "  mov %%ebx, %1          \n\t"
+                        "  pop %%"REG_b"          \n\t"
+
+                        : "=a" (eax), "=r" (sig.sig32[0]), "=c" (sig.sig32[1]), "=d" (sig.sig32[2])
+                        : "0" (eax)
+                );
+
+                for (j = 0; j < ELEMENTSOF(cpuid_vendor_table); j ++)
+                        if (streq(sig.text, cpuid_vendor_table[j].cpuid))
+                                return cpuid_vendor_table[j].id;
+
+                return VIRTUALIZATION_VM_OTHER;
+        }
+
+        return VIRTUALIZATION_NONE;
+}
+
+int main(void)
+{
+       return detect_vm_cpuid() != VIRTUALIZATION_MICROSOFT;
+}
diff --git a/rules.d/tools/lib/lockdep/Makefile b/rules.d/tools/lib/lockdep/Makefile
new file mode 100644 (file)
index 0000000..cb8c122
--- /dev/null
@@ -0,0 +1,20 @@
+include $(top_rulesdir)/Makefile.inc
+
+DEB_HOST_MULTIARCH := $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+
+MAKE_LOCKDEP := +$(MAKE) -C $(top_srcdir)/$(OUTDIR) O=$(CURDIR) V=1 \
+       prefix=/usr libdir_relative=lib/$(DEB_HOST_MULTIARCH) \
+       LIBLOCKDEP_VERSION=$(VERSION) \
+       CONFIG_FLAGS='$(CFLAGS) $(filter -D%,$(CPPFLAGS))' LDFLAGS='$(LDFLAGS)'
+
+unexport CFLAGS
+
+all:
+       $(MAKE_LOCKDEP)
+
+install:
+       $(MAKE_LOCKDEP) install
+       mkdir -p $(DESTDIR)/usr/include
+       cp -R $(top_srcdir)/$(OUTDIR)/include/liblockdep $(DESTDIR)/usr/include/
+       ln -s liblockdep.so.$(VERSION) \
+               $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/liblockdep.so
diff --git a/rules.d/tools/lib/lockdep/lockdep.in b/rules.d/tools/lib/lockdep/lockdep.in
new file mode 100644 (file)
index 0000000..4a0d03a
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+LD_PRELOAD="liblockdep.so.@VERSION@ $LD_PRELOAD" exec "$@"
diff --git a/rules.d/tools/perf/Makefile b/rules.d/tools/perf/Makefile
new file mode 100644 (file)
index 0000000..ec0c9e9
--- /dev/null
@@ -0,0 +1,88 @@
+include $(top_rulesdir)/Makefile.inc
+
+ifeq ($(filter nopython,$(DEB_BUILD_PROFILES)),)
+
+DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
+
+ifeq ($(DEB_HOST_ARCH_CPU),alpha)
+  KERNEL_ARCH_PERF = alpha
+else ifeq ($(DEB_HOST_ARCH_CPU),arm)
+  KERNEL_ARCH_PERF = arm
+else ifeq ($(DEB_HOST_ARCH_CPU),arm64)
+  KERNEL_ARCH_PERF = arm64
+else ifneq ($(filter mips%,$(DEB_HOST_ARCH_CPU)),)
+  KERNEL_ARCH_PERF = mips
+else ifeq ($(DEB_HOST_ARCH_CPU),hppa)
+  KERNEL_ARCH_PERF = parisc
+else ifneq ($(filter powerpc% ppc%,$(DEB_HOST_ARCH_CPU)),)
+  KERNEL_ARCH_PERF = powerpc
+else ifneq ($(filter s390%,$(DEB_HOST_ARCH_CPU)),)
+  KERNEL_ARCH_PERF = s390
+else ifeq ($(DEB_HOST_ARCH_CPU),sh4)
+  KERNEL_ARCH_PERF = sh
+else ifneq ($(filter sparc%,$(DEB_HOST_ARCH_CPU)),)
+  KERNEL_ARCH_PERF = sparc
+else ifneq ($(filter amd64 i386,$(DEB_HOST_ARCH_CPU)),)
+  # But x32 isn't supported yet
+  ifneq ($(shell dpkg-architecture -qDEB_HOST_ARCH),x32)
+    KERNEL_ARCH_PERF = x86
+  endif
+endif
+
+MAKE_PERF := $(MAKE) O=$(CURDIR) prefix=/usr V=1 ARCH=$(KERNEL_ARCH_PERF) EXTRA_WARNINGS=-Wno-error EXTRA_CFLAGS='$(CFLAGS) $(CPPFLAGS)' LDFLAGS='$(LDFLAGS)'
+
+# Disable Gtk UI until it's more usable
+MAKE_PERF += NO_GTK2=1
+
+# Include version in all directory names
+MAKE_PERF += perfexecdir=lib/perf_$(VERSION)-core plugindir=/usr/lib/traceevent_$(VERSION)/plugins STRACE_GROUPS_DIR=share/perf_$(VERSION)-core/strace/groups tipdir=share/doc/linux-perf-$(VERSION)
+
+# perf can link against libbfd if available, but the result is
+# undistributable as they are licenced under GPL v2 and v3+
+# respectively.  Override detection of libbfd and insist that
+# cplus_demangle() can be found in libiberty (LGPL v2.1+).
+MAKE_PERF += feature-libbfd=0 HAVE_CPLUS_DEMANGLE_SUPPORT=1
+
+# perf can link against libcrypto if available, but the result is
+# undistributable as GPL v2 and OpenSSL are not compatible without
+# an explicit exception.  Override detection of libcrypto.
+MAKE_PERF += NO_LIBCRYPTO=1
+
+# Currently babeltrace support for `perf data' is not automatically detected.
+MAKE_PERF += LIBBABELTRACE=1
+
+all:
+ifdef KERNEL_ARCH_PERF
+# perf changes some default directories depending on whether DESTDIR is
+# set.  We must define it even when building to avoid a rebuild when we
+# run 'make install'.
+       +$(MAKE_PERF) -C $(top_srcdir)/tools/perf -f Makefile.perf all VERSION=$(VERSION) DESTDIR=dummy
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       +$(MAKE_PERF) -C $(top_srcdir)/tools/perf/Documentation man VERSION=$(VERSION)
+endif
+# Check that perf didn't get linked against libbfd or libcrypto
+       type ldd
+       ! ldd $(CURDIR)/perf | grep -E '\blib(bfd|crypto)'
+# Check that it includes cplus_demangle from libiberty
+       grep cplus_demangle $(CURDIR)/perf
+endif
+
+install:
+ifdef KERNEL_ARCH_PERF
+       +$(MAKE_PERF) -C $(top_srcdir)/tools/perf -f Makefile.perf install VERSION=$(VERSION)
+# Don't install a 'trace' alias yet:
+# - We need a wrapper for it anyway, so there's little point adding a
+#   versioned link
+# - It doesn't work out-of-the-box as non-root (it depends on debugfs),
+#   so it's less widely useful than strace
+# - 'perf trace' doesn't take much more typing
+       rm -f $(DESTDIR)/usr/bin/trace_$(VERSION)
+endif
+       mkdir -p $(DESTDIR)/usr/share/bash-completion/
+       mv $(DESTDIR)/etc/bash_completion.d \
+               $(DESTDIR)/usr/share/bash-completion/completions
+       rmdir --ignore-fail-on-non-empty $(DESTDIR)/etc
+# Check for unversioned files that are likely to result in file conflicts
+       ! find $(DESTDIR) -name '*perf*' \! -path '*[_-]$(VERSION)*' | grep .
+
+endif # !nopython
diff --git a/rules.d/tools/power/Makefile b/rules.d/tools/power/Makefile
new file mode 100644 (file)
index 0000000..c3fcc42
--- /dev/null
@@ -0,0 +1,8 @@
+SUBDIRS = \
+       cpupower
+
+ifneq ($(filter i386 amd64 x32,$(DEB_HOST_ARCH)),)
+SUBDIRS += x86
+endif
+
+include $(top_rulesdir)/Makefile.inc
diff --git a/rules.d/tools/power/cpupower/Makefile b/rules.d/tools/power/cpupower/Makefile
new file mode 100644 (file)
index 0000000..23193b5
--- /dev/null
@@ -0,0 +1,21 @@
+include $(top_rulesdir)/Makefile.inc
+
+MAKE_CPUPOWER := $(shell dpkg-buildflags --export=cmdline) $(MAKE) O=$(CURDIR) CPUFREQ_BENCH=false V=true mandir=/usr/share/man
+
+MAKE_CPUPOWER += DEBUG=$(if $(findstring nostrip,$(DEB_BUILD_OPTIONS)),true,)
+
+MAKE_CPUPOWER += CROSS='$(CROSS_COMPILE)'
+
+MAKE_CPUPOWER += PACKAGE_BUGREPORT='Debian\ \(reportbug\ linux-cpupower\)'
+
+all:
+       $(MAKE_CPUPOWER) -C $(top_srcdir)/tools/power/cpupower
+
+install:
+       $(MAKE_CPUPOWER) -C $(top_srcdir)/tools/power/cpupower install DESTDIR=$(DESTDIR)
+ifneq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       rm -rf $(DESTDIR)/usr/share/man
+endif
+
+clean:
+       $(MAKE_CPUPOWER) -C $(top_srcdir)/tools/power/cpupower clean
diff --git a/rules.d/tools/power/x86/Makefile b/rules.d/tools/power/x86/Makefile
new file mode 100644 (file)
index 0000000..2b9d773
--- /dev/null
@@ -0,0 +1,5 @@
+SUBDIRS = \
+       turbostat \
+       x86_energy_perf_policy
+
+include $(top_rulesdir)/Makefile.inc
diff --git a/rules.d/tools/power/x86/turbostat/Makefile b/rules.d/tools/power/x86/turbostat/Makefile
new file mode 100644 (file)
index 0000000..2cf6365
--- /dev/null
@@ -0,0 +1,7 @@
+PROGS = turbostat
+
+installdir = /usr/sbin
+
+include $(top_rulesdir)/Makefile.inc
+
+CPPFLAGS += -DMSRHEADER='<asm/msr-index.h>'
diff --git a/rules.d/tools/power/x86/x86_energy_perf_policy/Makefile b/rules.d/tools/power/x86/x86_energy_perf_policy/Makefile
new file mode 100644 (file)
index 0000000..6abb918
--- /dev/null
@@ -0,0 +1,5 @@
+PROGS = x86_energy_perf_policy
+
+installdir = /usr/sbin
+
+include $(top_rulesdir)/Makefile.inc
diff --git a/rules.d/tools/usb/usbip/Makefile b/rules.d/tools/usb/usbip/Makefile
new file mode 100644 (file)
index 0000000..f17ce56
--- /dev/null
@@ -0,0 +1,30 @@
+srcdir := $(top_srcdir)/tools/usb/usbip
+
+# Make sure we don't override top_srcdir in the sub-make.  'unexport
+# top_srcdir' is *not* sufficient; nor is adding 'MAKEFLAGS=' to the
+# sub-make command line.
+unexport MAKEFLAGS
+
+all: export CFLAGS := $(shell dpkg-buildflags --get CFLAGS)
+all: export CPPFLAGS := $(shell dpkg-buildflags --get CFLAGS) \
+       -isystem $(top_srcdir)/debian/build/build-tools/include
+all: export LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)
+all:
+       rsync -a $(srcdir)/ .
+       ./autogen.sh
+       ./configure \
+               --prefix=/usr \
+               --with-tcp-wrappers \
+               --with-usbids-dir=/usr/share/misc \
+               --disable-shared \
+               --host=$(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+       $(MAKE)
+
+install:
+       $(MAKE) install
+ifneq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       rm -rf $(DESTDIR)/usr/share/man
+endif
+
+clean:
+       rm -rf *
diff --git a/rules.defs b/rules.defs
new file mode 100644 (file)
index 0000000..1990ae9
--- /dev/null
@@ -0,0 +1,6 @@
+include /usr/share/dpkg/default.mk
+
+BUILD_DIR = debian/build
+STAMPS_DIR = debian/stamps
+
+-include debian/rules.defs.local
diff --git a/rules.gen b/rules.gen
new file mode 100644 (file)
index 0000000..2968fff
--- /dev/null
+++ b/rules.gen
@@ -0,0 +1,826 @@
+.NOTPARALLEL:
+binary-arch: binary-arch_alpha binary-arch_amd64 binary-arch_arm64 binary-arch_armel binary-arch_armhf binary-arch_hppa binary-arch_i386 binary-arch_m68k binary-arch_mips binary-arch_mips64 binary-arch_mips64el binary-arch_mipsel binary-arch_mipsn32 binary-arch_mipsn32el binary-arch_powerpc binary-arch_powerpcspe binary-arch_ppc64 binary-arch_ppc64el binary-arch_s390 binary-arch_s390x binary-arch_sh3 binary-arch_sh4 binary-arch_sparc binary-arch_sparc64 binary-arch_tilegx binary-arch_x32
+binary-arch_alpha:: binary-arch_alpha_none binary-arch_alpha_real
+binary-arch_alpha::
+       $(MAKE) -f debian/rules.real install-udeb_alpha ABINAME='4.9.0-3' ARCH='alpha' KERNEL_ARCH='alpha' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-alpha-generic-di nic-modules-4.9.0-3-alpha-generic-di nic-wireless-modules-4.9.0-3-alpha-generic-di nic-shared-modules-4.9.0-3-alpha-generic-di serial-modules-4.9.0-3-alpha-generic-di usb-serial-modules-4.9.0-3-alpha-generic-di ppp-modules-4.9.0-3-alpha-generic-di pata-modules-4.9.0-3-alpha-generic-di cdrom-core-modules-4.9.0-3-alpha-generic-di scsi-core-modules-4.9.0-3-alpha-generic-di scsi-modules-4.9.0-3-alpha-generic-di loop-modules-4.9.0-3-alpha-generic-di btrfs-modules-4.9.0-3-alpha-generic-di ext4-modules-4.9.0-3-alpha-generic-di isofs-modules-4.9.0-3-alpha-generic-di jfs-modules-4.9.0-3-alpha-generic-di xfs-modules-4.9.0-3-alpha-generic-di fat-modules-4.9.0-3-alpha-generic-di md-modules-4.9.0-3-alpha-generic-di multipath-modules-4.9.0-3-alpha-generic-di usb-modules-4.9.0-3-alpha-generic-di usb-storage-modules-4.9.0-3-alpha-generic-di fb-modules-4.9.0-3-alpha-generic-di input-modules-4.9.0-3-alpha-generic-di event-modules-4.9.0-3-alpha-generic-di mouse-modules-4.9.0-3-alpha-generic-di nic-pcmcia-modules-4.9.0-3-alpha-generic-di pcmcia-modules-4.9.0-3-alpha-generic-di nic-usb-modules-4.9.0-3-alpha-generic-di sata-modules-4.9.0-3-alpha-generic-di crc-modules-4.9.0-3-alpha-generic-di crypto-modules-4.9.0-3-alpha-generic-di crypto-dm-modules-4.9.0-3-alpha-generic-di ata-modules-4.9.0-3-alpha-generic-di nbd-modules-4.9.0-3-alpha-generic-di squashfs-modules-4.9.0-3-alpha-generic-di virtio-modules-4.9.0-3-alpha-generic-di zlib-modules-4.9.0-3-alpha-generic-di fuse-modules-4.9.0-3-alpha-generic-di srm-modules-4.9.0-3-alpha-generic-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_alpha_none: binary-arch_alpha_none_alpha-generic 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='4.9.0-3' ARCH='alpha' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='alpha-generic' IMAGE_FILE='arch/alpha/boot/vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-alpha-generic' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-generic' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-generic' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-generic' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+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='4.9.0-3' ARCH='alpha' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='alpha-smp' IMAGE_FILE='arch/alpha/boot/vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-alpha-smp' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_alpha_none_real:
+binary-arch_alpha_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='alpha' KERNEL_ARCH='alpha' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_amd64:: binary-arch_amd64_extra binary-arch_amd64_none binary-arch_amd64_real binary-arch_amd64_rt
+binary-arch_amd64::
+       $(MAKE) -f debian/rules.real install-udeb_amd64 ABINAME='4.9.0-3' ARCH='amd64' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-amd64-di nic-modules-4.9.0-3-amd64-di nic-wireless-modules-4.9.0-3-amd64-di nic-shared-modules-4.9.0-3-amd64-di serial-modules-4.9.0-3-amd64-di usb-serial-modules-4.9.0-3-amd64-di ppp-modules-4.9.0-3-amd64-di pata-modules-4.9.0-3-amd64-di cdrom-core-modules-4.9.0-3-amd64-di firewire-core-modules-4.9.0-3-amd64-di scsi-core-modules-4.9.0-3-amd64-di scsi-modules-4.9.0-3-amd64-di loop-modules-4.9.0-3-amd64-di btrfs-modules-4.9.0-3-amd64-di ext4-modules-4.9.0-3-amd64-di isofs-modules-4.9.0-3-amd64-di jfs-modules-4.9.0-3-amd64-di ntfs-modules-4.9.0-3-amd64-di xfs-modules-4.9.0-3-amd64-di fat-modules-4.9.0-3-amd64-di md-modules-4.9.0-3-amd64-di multipath-modules-4.9.0-3-amd64-di usb-modules-4.9.0-3-amd64-di usb-storage-modules-4.9.0-3-amd64-di pcmcia-storage-modules-4.9.0-3-amd64-di fb-modules-4.9.0-3-amd64-di input-modules-4.9.0-3-amd64-di event-modules-4.9.0-3-amd64-di mouse-modules-4.9.0-3-amd64-di nic-pcmcia-modules-4.9.0-3-amd64-di pcmcia-modules-4.9.0-3-amd64-di nic-usb-modules-4.9.0-3-amd64-di sata-modules-4.9.0-3-amd64-di acpi-modules-4.9.0-3-amd64-di i2c-modules-4.9.0-3-amd64-di crc-modules-4.9.0-3-amd64-di crypto-modules-4.9.0-3-amd64-di crypto-dm-modules-4.9.0-3-amd64-di efi-modules-4.9.0-3-amd64-di ata-modules-4.9.0-3-amd64-di mmc-core-modules-4.9.0-3-amd64-di mmc-modules-4.9.0-3-amd64-di nbd-modules-4.9.0-3-amd64-di squashfs-modules-4.9.0-3-amd64-di speakup-modules-4.9.0-3-amd64-di virtio-modules-4.9.0-3-amd64-di uinput-modules-4.9.0-3-amd64-di sound-modules-4.9.0-3-amd64-di hyperv-modules-4.9.0-3-amd64-di udf-modules-4.9.0-3-amd64-di fuse-modules-4.9.0-3-amd64-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_amd64_extra::
+       $(MAKE) -f debian/rules.real install-dummy ARCH='amd64' DH_OPTIONS='-plinux-compiler-gcc-6-x86'
+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='4.9.0-3' ARCH='amd64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='amd64' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/amd64/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_amd64_none_real:
+binary-arch_amd64_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='amd64' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_amd64_rt: binary-arch_amd64_rt_amd64 binary-arch_amd64_rt_real
+binary-arch_amd64_rt_amd64: binary-arch_amd64_rt_amd64_real
+binary-arch_amd64_rt_amd64_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='amd64' COMPILER='gcc-6' DEBUG='True' FEATURESET='rt' FLAVOUR='amd64' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-rt-amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/amd64/config debian/config/featureset-rt/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-rt-amd64' LOCALVERSION_HEADERS='-rt' LOCALVERSION_IMAGE='-rt-amd64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_amd64_rt_real:
+binary-arch_arm64:: binary-arch_arm64_none binary-arch_arm64_real
+binary-arch_arm64::
+       $(MAKE) -f debian/rules.real install-udeb_arm64 ABINAME='4.9.0-3' ARCH='arm64' KERNEL_ARCH='arm64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-arm64-di nic-modules-4.9.0-3-arm64-di nic-wireless-modules-4.9.0-3-arm64-di nic-shared-modules-4.9.0-3-arm64-di ppp-modules-4.9.0-3-arm64-di cdrom-core-modules-4.9.0-3-arm64-di scsi-core-modules-4.9.0-3-arm64-di scsi-modules-4.9.0-3-arm64-di loop-modules-4.9.0-3-arm64-di btrfs-modules-4.9.0-3-arm64-di ext4-modules-4.9.0-3-arm64-di isofs-modules-4.9.0-3-arm64-di jfs-modules-4.9.0-3-arm64-di xfs-modules-4.9.0-3-arm64-di fat-modules-4.9.0-3-arm64-di md-modules-4.9.0-3-arm64-di multipath-modules-4.9.0-3-arm64-di usb-modules-4.9.0-3-arm64-di usb-storage-modules-4.9.0-3-arm64-di fb-modules-4.9.0-3-arm64-di input-modules-4.9.0-3-arm64-di event-modules-4.9.0-3-arm64-di nic-usb-modules-4.9.0-3-arm64-di sata-modules-4.9.0-3-arm64-di i2c-modules-4.9.0-3-arm64-di crc-modules-4.9.0-3-arm64-di crypto-modules-4.9.0-3-arm64-di crypto-dm-modules-4.9.0-3-arm64-di efi-modules-4.9.0-3-arm64-di ata-modules-4.9.0-3-arm64-di mmc-modules-4.9.0-3-arm64-di nbd-modules-4.9.0-3-arm64-di squashfs-modules-4.9.0-3-arm64-di virtio-modules-4.9.0-3-arm64-di uinput-modules-4.9.0-3-arm64-di leds-modules-4.9.0-3-arm64-di udf-modules-4.9.0-3-arm64-di fuse-modules-4.9.0-3-arm64-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_arm64_none: binary-arch_arm64_none_arm64 binary-arch_arm64_none_real
+binary-arch_arm64_none_arm64: binary-arch_arm64_none_arm64_real
+binary-arch_arm64_none_arm64_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='arm64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='arm64' IMAGE_FILE='arch/arm64/boot/Image' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-arm64' KCONFIG='debian/config/config debian/config/arm64/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm64' LOCALVERSION='-arm64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-arm64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_arm64_none_real:
+binary-arch_arm64_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='arm64' KERNEL_ARCH='arm64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_armel:: binary-arch_armel_extra binary-arch_armel_none binary-arch_armel_real
+binary-arch_armel::
+       $(MAKE) -f debian/rules.real install-udeb_armel ABINAME='4.9.0-3' ARCH='armel' KERNEL_ARCH='arm' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-marvell-di nic-modules-4.9.0-3-marvell-di nic-shared-modules-4.9.0-3-marvell-di usb-serial-modules-4.9.0-3-marvell-di ppp-modules-4.9.0-3-marvell-di cdrom-core-modules-4.9.0-3-marvell-di scsi-core-modules-4.9.0-3-marvell-di loop-modules-4.9.0-3-marvell-di ipv6-modules-4.9.0-3-marvell-di btrfs-modules-4.9.0-3-marvell-di ext4-modules-4.9.0-3-marvell-di isofs-modules-4.9.0-3-marvell-di jffs2-modules-4.9.0-3-marvell-di jfs-modules-4.9.0-3-marvell-di fat-modules-4.9.0-3-marvell-di minix-modules-4.9.0-3-marvell-di md-modules-4.9.0-3-marvell-di multipath-modules-4.9.0-3-marvell-di usb-modules-4.9.0-3-marvell-di usb-storage-modules-4.9.0-3-marvell-di fb-modules-4.9.0-3-marvell-di input-modules-4.9.0-3-marvell-di event-modules-4.9.0-3-marvell-di mouse-modules-4.9.0-3-marvell-di nic-usb-modules-4.9.0-3-marvell-di sata-modules-4.9.0-3-marvell-di crc-modules-4.9.0-3-marvell-di crypto-modules-4.9.0-3-marvell-di crypto-dm-modules-4.9.0-3-marvell-di mmc-modules-4.9.0-3-marvell-di nbd-modules-4.9.0-3-marvell-di squashfs-modules-4.9.0-3-marvell-di uinput-modules-4.9.0-3-marvell-di zlib-modules-4.9.0-3-marvell-di leds-modules-4.9.0-3-marvell-di udf-modules-4.9.0-3-marvell-di fuse-modules-4.9.0-3-marvell-di mtd-modules-4.9.0-3-marvell-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_armel_extra::
+       $(MAKE) -f debian/rules.real install-dummy ARCH='armel' DH_OPTIONS='-plinux-compiler-gcc-6-arm'
+binary-arch_armel_none: binary-arch_armel_none_marvell binary-arch_armel_none_real
+binary-arch_armel_none_marvell: binary-arch_armel_none_marvell_real
+binary-arch_armel_none_marvell_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='armel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='marvell' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-marvell' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armel/config debian/config/armel/config.marvell' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-marvell' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-marvell' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_armel_none_real:
+binary-arch_armel_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='armel' KERNEL_ARCH='arm' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_armhf:: binary-arch_armhf_extra binary-arch_armhf_none binary-arch_armhf_real
+binary-arch_armhf::
+       $(MAKE) -f debian/rules.real install-udeb_armhf ABINAME='4.9.0-3' ARCH='armhf' KERNEL_ARCH='arm' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-armmp-di nic-modules-4.9.0-3-armmp-di nic-wireless-modules-4.9.0-3-armmp-di nic-shared-modules-4.9.0-3-armmp-di ppp-modules-4.9.0-3-armmp-di pata-modules-4.9.0-3-armmp-di scsi-core-modules-4.9.0-3-armmp-di scsi-modules-4.9.0-3-armmp-di loop-modules-4.9.0-3-armmp-di btrfs-modules-4.9.0-3-armmp-di ext4-modules-4.9.0-3-armmp-di isofs-modules-4.9.0-3-armmp-di jfs-modules-4.9.0-3-armmp-di fat-modules-4.9.0-3-armmp-di md-modules-4.9.0-3-armmp-di multipath-modules-4.9.0-3-armmp-di usb-modules-4.9.0-3-armmp-di usb-storage-modules-4.9.0-3-armmp-di fb-modules-4.9.0-3-armmp-di input-modules-4.9.0-3-armmp-di event-modules-4.9.0-3-armmp-di nic-usb-modules-4.9.0-3-armmp-di sata-modules-4.9.0-3-armmp-di crc-modules-4.9.0-3-armmp-di crypto-modules-4.9.0-3-armmp-di crypto-dm-modules-4.9.0-3-armmp-di efi-modules-4.9.0-3-armmp-di ata-modules-4.9.0-3-armmp-di mmc-modules-4.9.0-3-armmp-di nbd-modules-4.9.0-3-armmp-di squashfs-modules-4.9.0-3-armmp-di virtio-modules-4.9.0-3-armmp-di uinput-modules-4.9.0-3-armmp-di zlib-modules-4.9.0-3-armmp-di leds-modules-4.9.0-3-armmp-di udf-modules-4.9.0-3-armmp-di fuse-modules-4.9.0-3-armmp-di mtd-modules-4.9.0-3-armmp-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_armhf_extra::
+       $(MAKE) -f debian/rules.real install-dummy ARCH='armhf' DH_OPTIONS='-plinux-compiler-gcc-6-arm'
+binary-arch_armhf_none: binary-arch_armhf_none_armmp binary-arch_armhf_none_armmp-lpae binary-arch_armhf_none_real
+binary-arch_armhf_none_armmp: binary-arch_armhf_none_armmp_real
+binary-arch_armhf_none_armmp-lpae: binary-arch_armhf_none_armmp-lpae_real
+binary-arch_armhf_none_armmp-lpae_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='armhf' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='armmp-lpae' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-armmp-lpae' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armhf/config debian/config/armhf/config.armmp-lpae' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-armmp-lpae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-armmp-lpae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_armhf_none_armmp_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='armhf' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='armmp' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-armmp' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armhf/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-armmp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-armmp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_armhf_none_real:
+binary-arch_armhf_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='armhf' KERNEL_ARCH='arm' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_hppa:: binary-arch_hppa_none binary-arch_hppa_real
+binary-arch_hppa::
+       $(MAKE) -f debian/rules.real install-udeb_hppa ABINAME='4.9.0-3' ARCH='hppa' KERNEL_ARCH='parisc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-parisc-di nic-modules-4.9.0-3-parisc-di nic-shared-modules-4.9.0-3-parisc-di serial-modules-4.9.0-3-parisc-di usb-serial-modules-4.9.0-3-parisc-di ppp-modules-4.9.0-3-parisc-di pata-modules-4.9.0-3-parisc-di cdrom-core-modules-4.9.0-3-parisc-di scsi-core-modules-4.9.0-3-parisc-di scsi-modules-4.9.0-3-parisc-di loop-modules-4.9.0-3-parisc-di btrfs-modules-4.9.0-3-parisc-di ext4-modules-4.9.0-3-parisc-di isofs-modules-4.9.0-3-parisc-di jfs-modules-4.9.0-3-parisc-di xfs-modules-4.9.0-3-parisc-di fat-modules-4.9.0-3-parisc-di md-modules-4.9.0-3-parisc-di multipath-modules-4.9.0-3-parisc-di usb-modules-4.9.0-3-parisc-di usb-storage-modules-4.9.0-3-parisc-di input-modules-4.9.0-3-parisc-di event-modules-4.9.0-3-parisc-di mouse-modules-4.9.0-3-parisc-di nic-usb-modules-4.9.0-3-parisc-di sata-modules-4.9.0-3-parisc-di crc-modules-4.9.0-3-parisc-di crypto-modules-4.9.0-3-parisc-di crypto-dm-modules-4.9.0-3-parisc-di ata-modules-4.9.0-3-parisc-di nbd-modules-4.9.0-3-parisc-di squashfs-modules-4.9.0-3-parisc-di virtio-modules-4.9.0-3-parisc-di zlib-modules-4.9.0-3-parisc-di fuse-modules-4.9.0-3-parisc-di kernel-image-4.9.0-3-parisc64-smp-di nic-modules-4.9.0-3-parisc64-smp-di nic-shared-modules-4.9.0-3-parisc64-smp-di serial-modules-4.9.0-3-parisc64-smp-di usb-serial-modules-4.9.0-3-parisc64-smp-di ppp-modules-4.9.0-3-parisc64-smp-di pata-modules-4.9.0-3-parisc64-smp-di cdrom-core-modules-4.9.0-3-parisc64-smp-di scsi-core-modules-4.9.0-3-parisc64-smp-di scsi-modules-4.9.0-3-parisc64-smp-di loop-modules-4.9.0-3-parisc64-smp-di btrfs-modules-4.9.0-3-parisc64-smp-di ext4-modules-4.9.0-3-parisc64-smp-di isofs-modules-4.9.0-3-parisc64-smp-di jfs-modules-4.9.0-3-parisc64-smp-di xfs-modules-4.9.0-3-parisc64-smp-di fat-modules-4.9.0-3-parisc64-smp-di md-modules-4.9.0-3-parisc64-smp-di multipath-modules-4.9.0-3-parisc64-smp-di usb-modules-4.9.0-3-parisc64-smp-di usb-storage-modules-4.9.0-3-parisc64-smp-di fb-modules-4.9.0-3-parisc64-smp-di input-modules-4.9.0-3-parisc64-smp-di event-modules-4.9.0-3-parisc64-smp-di mouse-modules-4.9.0-3-parisc64-smp-di nic-usb-modules-4.9.0-3-parisc64-smp-di sata-modules-4.9.0-3-parisc64-smp-di crc-modules-4.9.0-3-parisc64-smp-di crypto-modules-4.9.0-3-parisc64-smp-di crypto-dm-modules-4.9.0-3-parisc64-smp-di ata-modules-4.9.0-3-parisc64-smp-di nbd-modules-4.9.0-3-parisc64-smp-di squashfs-modules-4.9.0-3-parisc64-smp-di virtio-modules-4.9.0-3-parisc64-smp-di zlib-modules-4.9.0-3-parisc64-smp-di fuse-modules-4.9.0-3-parisc64-smp-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_hppa_none: binary-arch_hppa_none_parisc 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_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='4.9.0-3' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='parisc64-smp' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-parisc64-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64-smp' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_hppa_none_parisc_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='hppa' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='parisc' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-parisc' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='parisc' LOCALVERSION='-parisc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_hppa_none_real:
+binary-arch_hppa_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='hppa' KERNEL_ARCH='parisc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_i386:: binary-arch_i386_extra binary-arch_i386_none binary-arch_i386_real binary-arch_i386_rt
+binary-arch_i386::
+       $(MAKE) -f debian/rules.real install-udeb_i386 ABINAME='4.9.0-3' ARCH='i386' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-686-di nic-modules-4.9.0-3-686-di nic-wireless-modules-4.9.0-3-686-di nic-shared-modules-4.9.0-3-686-di serial-modules-4.9.0-3-686-di usb-serial-modules-4.9.0-3-686-di ppp-modules-4.9.0-3-686-di pata-modules-4.9.0-3-686-di cdrom-core-modules-4.9.0-3-686-di firewire-core-modules-4.9.0-3-686-di scsi-core-modules-4.9.0-3-686-di scsi-modules-4.9.0-3-686-di loop-modules-4.9.0-3-686-di btrfs-modules-4.9.0-3-686-di ext4-modules-4.9.0-3-686-di isofs-modules-4.9.0-3-686-di jfs-modules-4.9.0-3-686-di ntfs-modules-4.9.0-3-686-di xfs-modules-4.9.0-3-686-di fat-modules-4.9.0-3-686-di md-modules-4.9.0-3-686-di multipath-modules-4.9.0-3-686-di usb-modules-4.9.0-3-686-di usb-storage-modules-4.9.0-3-686-di pcmcia-storage-modules-4.9.0-3-686-di fb-modules-4.9.0-3-686-di input-modules-4.9.0-3-686-di event-modules-4.9.0-3-686-di mouse-modules-4.9.0-3-686-di nic-pcmcia-modules-4.9.0-3-686-di pcmcia-modules-4.9.0-3-686-di nic-usb-modules-4.9.0-3-686-di sata-modules-4.9.0-3-686-di acpi-modules-4.9.0-3-686-di i2c-modules-4.9.0-3-686-di crc-modules-4.9.0-3-686-di crypto-modules-4.9.0-3-686-di crypto-dm-modules-4.9.0-3-686-di efi-modules-4.9.0-3-686-di ata-modules-4.9.0-3-686-di mmc-core-modules-4.9.0-3-686-di mmc-modules-4.9.0-3-686-di nbd-modules-4.9.0-3-686-di squashfs-modules-4.9.0-3-686-di speakup-modules-4.9.0-3-686-di virtio-modules-4.9.0-3-686-di uinput-modules-4.9.0-3-686-di sound-modules-4.9.0-3-686-di hyperv-modules-4.9.0-3-686-di udf-modules-4.9.0-3-686-di fuse-modules-4.9.0-3-686-di kernel-image-4.9.0-3-686-pae-di nic-modules-4.9.0-3-686-pae-di nic-wireless-modules-4.9.0-3-686-pae-di nic-shared-modules-4.9.0-3-686-pae-di serial-modules-4.9.0-3-686-pae-di usb-serial-modules-4.9.0-3-686-pae-di ppp-modules-4.9.0-3-686-pae-di pata-modules-4.9.0-3-686-pae-di cdrom-core-modules-4.9.0-3-686-pae-di firewire-core-modules-4.9.0-3-686-pae-di scsi-core-modules-4.9.0-3-686-pae-di scsi-modules-4.9.0-3-686-pae-di loop-modules-4.9.0-3-686-pae-di btrfs-modules-4.9.0-3-686-pae-di ext4-modules-4.9.0-3-686-pae-di isofs-modules-4.9.0-3-686-pae-di jfs-modules-4.9.0-3-686-pae-di ntfs-modules-4.9.0-3-686-pae-di xfs-modules-4.9.0-3-686-pae-di fat-modules-4.9.0-3-686-pae-di md-modules-4.9.0-3-686-pae-di multipath-modules-4.9.0-3-686-pae-di usb-modules-4.9.0-3-686-pae-di usb-storage-modules-4.9.0-3-686-pae-di pcmcia-storage-modules-4.9.0-3-686-pae-di fb-modules-4.9.0-3-686-pae-di input-modules-4.9.0-3-686-pae-di event-modules-4.9.0-3-686-pae-di mouse-modules-4.9.0-3-686-pae-di nic-pcmcia-modules-4.9.0-3-686-pae-di pcmcia-modules-4.9.0-3-686-pae-di nic-usb-modules-4.9.0-3-686-pae-di sata-modules-4.9.0-3-686-pae-di acpi-modules-4.9.0-3-686-pae-di i2c-modules-4.9.0-3-686-pae-di crc-modules-4.9.0-3-686-pae-di crypto-modules-4.9.0-3-686-pae-di crypto-dm-modules-4.9.0-3-686-pae-di efi-modules-4.9.0-3-686-pae-di ata-modules-4.9.0-3-686-pae-di mmc-core-modules-4.9.0-3-686-pae-di mmc-modules-4.9.0-3-686-pae-di nbd-modules-4.9.0-3-686-pae-di squashfs-modules-4.9.0-3-686-pae-di speakup-modules-4.9.0-3-686-pae-di virtio-modules-4.9.0-3-686-pae-di uinput-modules-4.9.0-3-686-pae-di sound-modules-4.9.0-3-686-pae-di hyperv-modules-4.9.0-3-686-pae-di udf-modules-4.9.0-3-686-pae-di fuse-modules-4.9.0-3-686-pae-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_i386_extra::
+       $(MAKE) -f debian/rules.real install-dummy ARCH='i386' DH_OPTIONS='-plinux-compiler-gcc-6-x86'
+binary-arch_i386_none: binary-arch_i386_none_686 binary-arch_i386_none_686-pae binary-arch_i386_none_real
+binary-arch_i386_none_686: binary-arch_i386_none_686_real
+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='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='686-pae' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686-pae' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686-pae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686-pae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_i386_none_686_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='686' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-686' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_i386_none_real:
+binary-arch_i386_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='i386' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_i386_rt: binary-arch_i386_rt_686-pae binary-arch_i386_rt_real
+binary-arch_i386_rt_686-pae: binary-arch_i386_rt_686-pae_real
+binary-arch_i386_rt_686-pae_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='rt' FLAVOUR='686-pae' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-rt-686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686-pae debian/config/featureset-rt/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-rt-686-pae' LOCALVERSION_HEADERS='-rt' LOCALVERSION_IMAGE='-rt-686-pae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_i386_rt_real:
+binary-arch_m68k:: binary-arch_m68k_none binary-arch_m68k_real
+binary-arch_m68k::
+       $(MAKE) -f debian/rules.real install-udeb_m68k ABINAME='4.9.0-3' ARCH='m68k' KERNEL_ARCH='m68k' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-m68k-di nic-shared-modules-4.9.0-3-m68k-di ppp-modules-4.9.0-3-m68k-di cdrom-core-modules-4.9.0-3-m68k-di scsi-modules-4.9.0-3-m68k-di btrfs-modules-4.9.0-3-m68k-di ext4-modules-4.9.0-3-m68k-di isofs-modules-4.9.0-3-m68k-di fat-modules-4.9.0-3-m68k-di md-modules-4.9.0-3-m68k-di crc-modules-4.9.0-3-m68k-di crypto-modules-4.9.0-3-m68k-di nbd-modules-4.9.0-3-m68k-di squashfs-modules-4.9.0-3-m68k-di zlib-modules-4.9.0-3-m68k-di udf-modules-4.9.0-3-m68k-di fuse-modules-4.9.0-3-m68k-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_m68k_none: binary-arch_m68k_none_m68k binary-arch_m68k_none_real
+binary-arch_m68k_none_m68k: binary-arch_m68k_none_m68k_real
+binary-arch_m68k_none_m68k_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='m68k' CFLAGS_KERNEL='-ffreestanding' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='m68k' IMAGE_FILE='vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-m68k' KCONFIG='debian/config/config debian/config/m68k/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='m68k' LOCALVERSION='-m68k' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-m68k' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_m68k_none_real:
+binary-arch_m68k_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='m68k' KERNEL_ARCH='m68k' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mips:: binary-arch_mips_none binary-arch_mips_real
+binary-arch_mips::
+       $(MAKE) -f debian/rules.real install-udeb_mips ABINAME='4.9.0-3' ARCH='mips' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-4kc-malta-di nic-modules-4.9.0-3-4kc-malta-di nic-wireless-modules-4.9.0-3-4kc-malta-di nic-shared-modules-4.9.0-3-4kc-malta-di usb-serial-modules-4.9.0-3-4kc-malta-di ppp-modules-4.9.0-3-4kc-malta-di pata-modules-4.9.0-3-4kc-malta-di cdrom-core-modules-4.9.0-3-4kc-malta-di scsi-core-modules-4.9.0-3-4kc-malta-di scsi-modules-4.9.0-3-4kc-malta-di loop-modules-4.9.0-3-4kc-malta-di btrfs-modules-4.9.0-3-4kc-malta-di ext4-modules-4.9.0-3-4kc-malta-di isofs-modules-4.9.0-3-4kc-malta-di jfs-modules-4.9.0-3-4kc-malta-di ntfs-modules-4.9.0-3-4kc-malta-di xfs-modules-4.9.0-3-4kc-malta-di fat-modules-4.9.0-3-4kc-malta-di hfs-modules-4.9.0-3-4kc-malta-di affs-modules-4.9.0-3-4kc-malta-di minix-modules-4.9.0-3-4kc-malta-di md-modules-4.9.0-3-4kc-malta-di multipath-modules-4.9.0-3-4kc-malta-di usb-modules-4.9.0-3-4kc-malta-di usb-storage-modules-4.9.0-3-4kc-malta-di input-modules-4.9.0-3-4kc-malta-di event-modules-4.9.0-3-4kc-malta-di mouse-modules-4.9.0-3-4kc-malta-di nic-usb-modules-4.9.0-3-4kc-malta-di sata-modules-4.9.0-3-4kc-malta-di i2c-modules-4.9.0-3-4kc-malta-di crc-modules-4.9.0-3-4kc-malta-di crypto-modules-4.9.0-3-4kc-malta-di crypto-dm-modules-4.9.0-3-4kc-malta-di ata-modules-4.9.0-3-4kc-malta-di mmc-core-modules-4.9.0-3-4kc-malta-di mmc-modules-4.9.0-3-4kc-malta-di nbd-modules-4.9.0-3-4kc-malta-di squashfs-modules-4.9.0-3-4kc-malta-di virtio-modules-4.9.0-3-4kc-malta-di sound-modules-4.9.0-3-4kc-malta-di zlib-modules-4.9.0-3-4kc-malta-di udf-modules-4.9.0-3-4kc-malta-di fuse-modules-4.9.0-3-4kc-malta-di kernel-image-4.9.0-3-octeon-di nic-modules-4.9.0-3-octeon-di nic-wireless-modules-4.9.0-3-octeon-di nic-shared-modules-4.9.0-3-octeon-di usb-serial-modules-4.9.0-3-octeon-di ppp-modules-4.9.0-3-octeon-di pata-modules-4.9.0-3-octeon-di cdrom-core-modules-4.9.0-3-octeon-di scsi-core-modules-4.9.0-3-octeon-di scsi-modules-4.9.0-3-octeon-di loop-modules-4.9.0-3-octeon-di btrfs-modules-4.9.0-3-octeon-di ext4-modules-4.9.0-3-octeon-di isofs-modules-4.9.0-3-octeon-di jfs-modules-4.9.0-3-octeon-di ntfs-modules-4.9.0-3-octeon-di xfs-modules-4.9.0-3-octeon-di fat-modules-4.9.0-3-octeon-di hfs-modules-4.9.0-3-octeon-di affs-modules-4.9.0-3-octeon-di minix-modules-4.9.0-3-octeon-di md-modules-4.9.0-3-octeon-di multipath-modules-4.9.0-3-octeon-di usb-modules-4.9.0-3-octeon-di usb-storage-modules-4.9.0-3-octeon-di input-modules-4.9.0-3-octeon-di event-modules-4.9.0-3-octeon-di nic-usb-modules-4.9.0-3-octeon-di sata-modules-4.9.0-3-octeon-di crc-modules-4.9.0-3-octeon-di crypto-modules-4.9.0-3-octeon-di crypto-dm-modules-4.9.0-3-octeon-di nbd-modules-4.9.0-3-octeon-di squashfs-modules-4.9.0-3-octeon-di rtc-modules-4.9.0-3-octeon-di virtio-modules-4.9.0-3-octeon-di sound-modules-4.9.0-3-octeon-di zlib-modules-4.9.0-3-octeon-di udf-modules-4.9.0-3-octeon-di fuse-modules-4.9.0-3-octeon-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_mips64:: binary-arch_mips64_none binary-arch_mips64_real
+binary-arch_mips64::
+       $(MAKE) -f debian/rules.real install-udeb_mips64 ABINAME='4.9.0-3' ARCH='mips64' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-5kc-malta-di nic-modules-4.9.0-3-5kc-malta-di nic-wireless-modules-4.9.0-3-5kc-malta-di nic-shared-modules-4.9.0-3-5kc-malta-di usb-serial-modules-4.9.0-3-5kc-malta-di ppp-modules-4.9.0-3-5kc-malta-di pata-modules-4.9.0-3-5kc-malta-di cdrom-core-modules-4.9.0-3-5kc-malta-di scsi-core-modules-4.9.0-3-5kc-malta-di scsi-modules-4.9.0-3-5kc-malta-di loop-modules-4.9.0-3-5kc-malta-di btrfs-modules-4.9.0-3-5kc-malta-di ext4-modules-4.9.0-3-5kc-malta-di isofs-modules-4.9.0-3-5kc-malta-di jfs-modules-4.9.0-3-5kc-malta-di ntfs-modules-4.9.0-3-5kc-malta-di xfs-modules-4.9.0-3-5kc-malta-di fat-modules-4.9.0-3-5kc-malta-di hfs-modules-4.9.0-3-5kc-malta-di affs-modules-4.9.0-3-5kc-malta-di minix-modules-4.9.0-3-5kc-malta-di md-modules-4.9.0-3-5kc-malta-di multipath-modules-4.9.0-3-5kc-malta-di usb-modules-4.9.0-3-5kc-malta-di usb-storage-modules-4.9.0-3-5kc-malta-di input-modules-4.9.0-3-5kc-malta-di event-modules-4.9.0-3-5kc-malta-di mouse-modules-4.9.0-3-5kc-malta-di nic-usb-modules-4.9.0-3-5kc-malta-di sata-modules-4.9.0-3-5kc-malta-di i2c-modules-4.9.0-3-5kc-malta-di crc-modules-4.9.0-3-5kc-malta-di crypto-modules-4.9.0-3-5kc-malta-di crypto-dm-modules-4.9.0-3-5kc-malta-di ata-modules-4.9.0-3-5kc-malta-di mmc-core-modules-4.9.0-3-5kc-malta-di mmc-modules-4.9.0-3-5kc-malta-di nbd-modules-4.9.0-3-5kc-malta-di squashfs-modules-4.9.0-3-5kc-malta-di virtio-modules-4.9.0-3-5kc-malta-di sound-modules-4.9.0-3-5kc-malta-di zlib-modules-4.9.0-3-5kc-malta-di udf-modules-4.9.0-3-5kc-malta-di fuse-modules-4.9.0-3-5kc-malta-di kernel-image-4.9.0-3-octeon-di nic-modules-4.9.0-3-octeon-di nic-wireless-modules-4.9.0-3-octeon-di nic-shared-modules-4.9.0-3-octeon-di usb-serial-modules-4.9.0-3-octeon-di ppp-modules-4.9.0-3-octeon-di pata-modules-4.9.0-3-octeon-di cdrom-core-modules-4.9.0-3-octeon-di scsi-core-modules-4.9.0-3-octeon-di scsi-modules-4.9.0-3-octeon-di loop-modules-4.9.0-3-octeon-di btrfs-modules-4.9.0-3-octeon-di ext4-modules-4.9.0-3-octeon-di isofs-modules-4.9.0-3-octeon-di jfs-modules-4.9.0-3-octeon-di ntfs-modules-4.9.0-3-octeon-di xfs-modules-4.9.0-3-octeon-di fat-modules-4.9.0-3-octeon-di hfs-modules-4.9.0-3-octeon-di affs-modules-4.9.0-3-octeon-di minix-modules-4.9.0-3-octeon-di md-modules-4.9.0-3-octeon-di multipath-modules-4.9.0-3-octeon-di usb-modules-4.9.0-3-octeon-di usb-storage-modules-4.9.0-3-octeon-di input-modules-4.9.0-3-octeon-di event-modules-4.9.0-3-octeon-di nic-usb-modules-4.9.0-3-octeon-di sata-modules-4.9.0-3-octeon-di crc-modules-4.9.0-3-octeon-di crypto-modules-4.9.0-3-octeon-di crypto-dm-modules-4.9.0-3-octeon-di nbd-modules-4.9.0-3-octeon-di squashfs-modules-4.9.0-3-octeon-di rtc-modules-4.9.0-3-octeon-di virtio-modules-4.9.0-3-octeon-di sound-modules-4.9.0-3-octeon-di zlib-modules-4.9.0-3-octeon-di udf-modules-4.9.0-3-octeon-di fuse-modules-4.9.0-3-octeon-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_mips64_none: binary-arch_mips64_none_5kc-malta binary-arch_mips64_none_octeon binary-arch_mips64_none_real
+binary-arch_mips64_none_5kc-malta: binary-arch_mips64_none_5kc-malta_real
+binary-arch_mips64_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='mips64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mips64_none_octeon: binary-arch_mips64_none_octeon_real
+binary-arch_mips64_none_octeon_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='mips64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mips64_none_real:
+binary-arch_mips64_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='mips64' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mips64el:: binary-arch_mips64el_none binary-arch_mips64el_real
+binary-arch_mips64el::
+       $(MAKE) -f debian/rules.real install-udeb_mips64el ABINAME='4.9.0-3' ARCH='mips64el' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-5kc-malta-di nic-modules-4.9.0-3-5kc-malta-di nic-wireless-modules-4.9.0-3-5kc-malta-di nic-shared-modules-4.9.0-3-5kc-malta-di usb-serial-modules-4.9.0-3-5kc-malta-di ppp-modules-4.9.0-3-5kc-malta-di pata-modules-4.9.0-3-5kc-malta-di cdrom-core-modules-4.9.0-3-5kc-malta-di scsi-core-modules-4.9.0-3-5kc-malta-di scsi-modules-4.9.0-3-5kc-malta-di loop-modules-4.9.0-3-5kc-malta-di btrfs-modules-4.9.0-3-5kc-malta-di ext4-modules-4.9.0-3-5kc-malta-di isofs-modules-4.9.0-3-5kc-malta-di jfs-modules-4.9.0-3-5kc-malta-di ntfs-modules-4.9.0-3-5kc-malta-di xfs-modules-4.9.0-3-5kc-malta-di fat-modules-4.9.0-3-5kc-malta-di hfs-modules-4.9.0-3-5kc-malta-di affs-modules-4.9.0-3-5kc-malta-di minix-modules-4.9.0-3-5kc-malta-di md-modules-4.9.0-3-5kc-malta-di multipath-modules-4.9.0-3-5kc-malta-di usb-modules-4.9.0-3-5kc-malta-di usb-storage-modules-4.9.0-3-5kc-malta-di input-modules-4.9.0-3-5kc-malta-di event-modules-4.9.0-3-5kc-malta-di mouse-modules-4.9.0-3-5kc-malta-di nic-usb-modules-4.9.0-3-5kc-malta-di sata-modules-4.9.0-3-5kc-malta-di i2c-modules-4.9.0-3-5kc-malta-di crc-modules-4.9.0-3-5kc-malta-di crypto-modules-4.9.0-3-5kc-malta-di crypto-dm-modules-4.9.0-3-5kc-malta-di ata-modules-4.9.0-3-5kc-malta-di mmc-core-modules-4.9.0-3-5kc-malta-di mmc-modules-4.9.0-3-5kc-malta-di nbd-modules-4.9.0-3-5kc-malta-di squashfs-modules-4.9.0-3-5kc-malta-di virtio-modules-4.9.0-3-5kc-malta-di sound-modules-4.9.0-3-5kc-malta-di zlib-modules-4.9.0-3-5kc-malta-di udf-modules-4.9.0-3-5kc-malta-di fuse-modules-4.9.0-3-5kc-malta-di kernel-image-4.9.0-3-loongson-3-di nic-modules-4.9.0-3-loongson-3-di nic-wireless-modules-4.9.0-3-loongson-3-di nic-shared-modules-4.9.0-3-loongson-3-di usb-serial-modules-4.9.0-3-loongson-3-di ppp-modules-4.9.0-3-loongson-3-di pata-modules-4.9.0-3-loongson-3-di cdrom-core-modules-4.9.0-3-loongson-3-di firewire-core-modules-4.9.0-3-loongson-3-di scsi-core-modules-4.9.0-3-loongson-3-di scsi-modules-4.9.0-3-loongson-3-di loop-modules-4.9.0-3-loongson-3-di btrfs-modules-4.9.0-3-loongson-3-di ext4-modules-4.9.0-3-loongson-3-di isofs-modules-4.9.0-3-loongson-3-di jfs-modules-4.9.0-3-loongson-3-di ntfs-modules-4.9.0-3-loongson-3-di xfs-modules-4.9.0-3-loongson-3-di fat-modules-4.9.0-3-loongson-3-di hfs-modules-4.9.0-3-loongson-3-di affs-modules-4.9.0-3-loongson-3-di minix-modules-4.9.0-3-loongson-3-di nfs-modules-4.9.0-3-loongson-3-di md-modules-4.9.0-3-loongson-3-di multipath-modules-4.9.0-3-loongson-3-di usb-modules-4.9.0-3-loongson-3-di usb-storage-modules-4.9.0-3-loongson-3-di fb-modules-4.9.0-3-loongson-3-di input-modules-4.9.0-3-loongson-3-di event-modules-4.9.0-3-loongson-3-di nic-usb-modules-4.9.0-3-loongson-3-di sata-modules-4.9.0-3-loongson-3-di crc-modules-4.9.0-3-loongson-3-di crypto-modules-4.9.0-3-loongson-3-di crypto-dm-modules-4.9.0-3-loongson-3-di ata-modules-4.9.0-3-loongson-3-di nbd-modules-4.9.0-3-loongson-3-di squashfs-modules-4.9.0-3-loongson-3-di speakup-modules-4.9.0-3-loongson-3-di virtio-modules-4.9.0-3-loongson-3-di sound-modules-4.9.0-3-loongson-3-di zlib-modules-4.9.0-3-loongson-3-di udf-modules-4.9.0-3-loongson-3-di fuse-modules-4.9.0-3-loongson-3-di kernel-image-4.9.0-3-octeon-di nic-modules-4.9.0-3-octeon-di nic-wireless-modules-4.9.0-3-octeon-di nic-shared-modules-4.9.0-3-octeon-di usb-serial-modules-4.9.0-3-octeon-di ppp-modules-4.9.0-3-octeon-di pata-modules-4.9.0-3-octeon-di cdrom-core-modules-4.9.0-3-octeon-di scsi-core-modules-4.9.0-3-octeon-di scsi-modules-4.9.0-3-octeon-di loop-modules-4.9.0-3-octeon-di btrfs-modules-4.9.0-3-octeon-di ext4-modules-4.9.0-3-octeon-di isofs-modules-4.9.0-3-octeon-di jfs-modules-4.9.0-3-octeon-di ntfs-modules-4.9.0-3-octeon-di xfs-modules-4.9.0-3-octeon-di fat-modules-4.9.0-3-octeon-di hfs-modules-4.9.0-3-octeon-di affs-modules-4.9.0-3-octeon-di minix-modules-4.9.0-3-octeon-di md-modules-4.9.0-3-octeon-di multipath-modules-4.9.0-3-octeon-di usb-modules-4.9.0-3-octeon-di usb-storage-modules-4.9.0-3-octeon-di input-modules-4.9.0-3-octeon-di event-modules-4.9.0-3-octeon-di nic-usb-modules-4.9.0-3-octeon-di sata-modules-4.9.0-3-octeon-di crc-modules-4.9.0-3-octeon-di crypto-modules-4.9.0-3-octeon-di crypto-dm-modules-4.9.0-3-octeon-di nbd-modules-4.9.0-3-octeon-di squashfs-modules-4.9.0-3-octeon-di rtc-modules-4.9.0-3-octeon-di virtio-modules-4.9.0-3-octeon-di sound-modules-4.9.0-3-octeon-di zlib-modules-4.9.0-3-octeon-di udf-modules-4.9.0-3-octeon-di fuse-modules-4.9.0-3-octeon-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_mips64el_none: binary-arch_mips64el_none_5kc-malta binary-arch_mips64el_none_loongson-3 binary-arch_mips64el_none_octeon binary-arch_mips64el_none_real
+binary-arch_mips64el_none_5kc-malta: binary-arch_mips64el_none_5kc-malta_real
+binary-arch_mips64el_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mips64el_none_loongson-3: binary-arch_mips64el_none_loongson-3_real
+binary-arch_mips64el_none_loongson-3_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='loongson-3' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-loongson-3' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.loongson-3' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-loongson-3' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-3' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mips64el_none_octeon: binary-arch_mips64el_none_octeon_real
+binary-arch_mips64el_none_octeon_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mips64el_none_real:
+binary-arch_mips64el_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='mips64el' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+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_real
+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='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='4kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-4kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips32r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+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='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+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='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mips_none_real:
+binary-arch_mips_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='mips' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mipsel:: binary-arch_mipsel_none binary-arch_mipsel_real
+binary-arch_mipsel::
+       $(MAKE) -f debian/rules.real install-udeb_mipsel ABINAME='4.9.0-3' ARCH='mipsel' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-4kc-malta-di nic-modules-4.9.0-3-4kc-malta-di nic-wireless-modules-4.9.0-3-4kc-malta-di nic-shared-modules-4.9.0-3-4kc-malta-di usb-serial-modules-4.9.0-3-4kc-malta-di ppp-modules-4.9.0-3-4kc-malta-di pata-modules-4.9.0-3-4kc-malta-di cdrom-core-modules-4.9.0-3-4kc-malta-di scsi-core-modules-4.9.0-3-4kc-malta-di scsi-modules-4.9.0-3-4kc-malta-di loop-modules-4.9.0-3-4kc-malta-di btrfs-modules-4.9.0-3-4kc-malta-di ext4-modules-4.9.0-3-4kc-malta-di isofs-modules-4.9.0-3-4kc-malta-di jfs-modules-4.9.0-3-4kc-malta-di ntfs-modules-4.9.0-3-4kc-malta-di xfs-modules-4.9.0-3-4kc-malta-di fat-modules-4.9.0-3-4kc-malta-di hfs-modules-4.9.0-3-4kc-malta-di affs-modules-4.9.0-3-4kc-malta-di minix-modules-4.9.0-3-4kc-malta-di md-modules-4.9.0-3-4kc-malta-di multipath-modules-4.9.0-3-4kc-malta-di usb-modules-4.9.0-3-4kc-malta-di usb-storage-modules-4.9.0-3-4kc-malta-di input-modules-4.9.0-3-4kc-malta-di event-modules-4.9.0-3-4kc-malta-di mouse-modules-4.9.0-3-4kc-malta-di nic-usb-modules-4.9.0-3-4kc-malta-di sata-modules-4.9.0-3-4kc-malta-di i2c-modules-4.9.0-3-4kc-malta-di crc-modules-4.9.0-3-4kc-malta-di crypto-modules-4.9.0-3-4kc-malta-di crypto-dm-modules-4.9.0-3-4kc-malta-di ata-modules-4.9.0-3-4kc-malta-di mmc-core-modules-4.9.0-3-4kc-malta-di mmc-modules-4.9.0-3-4kc-malta-di nbd-modules-4.9.0-3-4kc-malta-di squashfs-modules-4.9.0-3-4kc-malta-di virtio-modules-4.9.0-3-4kc-malta-di sound-modules-4.9.0-3-4kc-malta-di zlib-modules-4.9.0-3-4kc-malta-di udf-modules-4.9.0-3-4kc-malta-di fuse-modules-4.9.0-3-4kc-malta-di kernel-image-4.9.0-3-loongson-3-di nic-modules-4.9.0-3-loongson-3-di nic-wireless-modules-4.9.0-3-loongson-3-di nic-shared-modules-4.9.0-3-loongson-3-di usb-serial-modules-4.9.0-3-loongson-3-di ppp-modules-4.9.0-3-loongson-3-di pata-modules-4.9.0-3-loongson-3-di cdrom-core-modules-4.9.0-3-loongson-3-di firewire-core-modules-4.9.0-3-loongson-3-di scsi-core-modules-4.9.0-3-loongson-3-di scsi-modules-4.9.0-3-loongson-3-di loop-modules-4.9.0-3-loongson-3-di btrfs-modules-4.9.0-3-loongson-3-di ext4-modules-4.9.0-3-loongson-3-di isofs-modules-4.9.0-3-loongson-3-di jfs-modules-4.9.0-3-loongson-3-di ntfs-modules-4.9.0-3-loongson-3-di xfs-modules-4.9.0-3-loongson-3-di fat-modules-4.9.0-3-loongson-3-di hfs-modules-4.9.0-3-loongson-3-di affs-modules-4.9.0-3-loongson-3-di minix-modules-4.9.0-3-loongson-3-di nfs-modules-4.9.0-3-loongson-3-di md-modules-4.9.0-3-loongson-3-di multipath-modules-4.9.0-3-loongson-3-di usb-modules-4.9.0-3-loongson-3-di usb-storage-modules-4.9.0-3-loongson-3-di fb-modules-4.9.0-3-loongson-3-di input-modules-4.9.0-3-loongson-3-di event-modules-4.9.0-3-loongson-3-di nic-usb-modules-4.9.0-3-loongson-3-di sata-modules-4.9.0-3-loongson-3-di crc-modules-4.9.0-3-loongson-3-di crypto-modules-4.9.0-3-loongson-3-di crypto-dm-modules-4.9.0-3-loongson-3-di ata-modules-4.9.0-3-loongson-3-di nbd-modules-4.9.0-3-loongson-3-di squashfs-modules-4.9.0-3-loongson-3-di speakup-modules-4.9.0-3-loongson-3-di virtio-modules-4.9.0-3-loongson-3-di sound-modules-4.9.0-3-loongson-3-di zlib-modules-4.9.0-3-loongson-3-di udf-modules-4.9.0-3-loongson-3-di fuse-modules-4.9.0-3-loongson-3-di kernel-image-4.9.0-3-octeon-di nic-modules-4.9.0-3-octeon-di nic-wireless-modules-4.9.0-3-octeon-di nic-shared-modules-4.9.0-3-octeon-di usb-serial-modules-4.9.0-3-octeon-di ppp-modules-4.9.0-3-octeon-di pata-modules-4.9.0-3-octeon-di cdrom-core-modules-4.9.0-3-octeon-di scsi-core-modules-4.9.0-3-octeon-di scsi-modules-4.9.0-3-octeon-di loop-modules-4.9.0-3-octeon-di btrfs-modules-4.9.0-3-octeon-di ext4-modules-4.9.0-3-octeon-di isofs-modules-4.9.0-3-octeon-di jfs-modules-4.9.0-3-octeon-di ntfs-modules-4.9.0-3-octeon-di xfs-modules-4.9.0-3-octeon-di fat-modules-4.9.0-3-octeon-di hfs-modules-4.9.0-3-octeon-di affs-modules-4.9.0-3-octeon-di minix-modules-4.9.0-3-octeon-di md-modules-4.9.0-3-octeon-di multipath-modules-4.9.0-3-octeon-di usb-modules-4.9.0-3-octeon-di usb-storage-modules-4.9.0-3-octeon-di input-modules-4.9.0-3-octeon-di event-modules-4.9.0-3-octeon-di nic-usb-modules-4.9.0-3-octeon-di sata-modules-4.9.0-3-octeon-di crc-modules-4.9.0-3-octeon-di crypto-modules-4.9.0-3-octeon-di crypto-dm-modules-4.9.0-3-octeon-di nbd-modules-4.9.0-3-octeon-di squashfs-modules-4.9.0-3-octeon-di rtc-modules-4.9.0-3-octeon-di virtio-modules-4.9.0-3-octeon-di sound-modules-4.9.0-3-octeon-di zlib-modules-4.9.0-3-octeon-di udf-modules-4.9.0-3-octeon-di fuse-modules-4.9.0-3-octeon-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_mipsel_none: binary-arch_mipsel_none_4kc-malta binary-arch_mipsel_none_5kc-malta binary-arch_mipsel_none_loongson-3 binary-arch_mipsel_none_octeon binary-arch_mipsel_none_real
+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='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='4kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-4kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips32r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+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='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mipsel_none_loongson-3: binary-arch_mipsel_none_loongson-3_real
+binary-arch_mipsel_none_loongson-3_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='loongson-3' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-loongson-3' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.loongson-3' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-loongson-3' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-3' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mipsel_none_octeon: binary-arch_mipsel_none_octeon_real
+binary-arch_mipsel_none_octeon_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mipsel_none_real:
+binary-arch_mipsel_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='mipsel' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mipsn32: binary-arch_mipsn32_real
+binary-arch_mipsn32_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='mipsn32' DO_HEADERS_ALL='False' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_mipsn32el: binary-arch_mipsn32el_real
+binary-arch_mipsn32el_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='mipsn32el' DO_HEADERS_ALL='False' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_powerpc:: binary-arch_powerpc_none binary-arch_powerpc_real
+binary-arch_powerpc::
+       $(MAKE) -f debian/rules.real install-udeb_powerpc ABINAME='4.9.0-3' ARCH='powerpc' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-powerpc-di nic-modules-4.9.0-3-powerpc-di nic-shared-modules-4.9.0-3-powerpc-di serial-modules-4.9.0-3-powerpc-di usb-serial-modules-4.9.0-3-powerpc-di ppp-modules-4.9.0-3-powerpc-di pata-modules-4.9.0-3-powerpc-di cdrom-core-modules-4.9.0-3-powerpc-di firewire-core-modules-4.9.0-3-powerpc-di scsi-core-modules-4.9.0-3-powerpc-di scsi-modules-4.9.0-3-powerpc-di loop-modules-4.9.0-3-powerpc-di btrfs-modules-4.9.0-3-powerpc-di ext4-modules-4.9.0-3-powerpc-di isofs-modules-4.9.0-3-powerpc-di jfs-modules-4.9.0-3-powerpc-di xfs-modules-4.9.0-3-powerpc-di fat-modules-4.9.0-3-powerpc-di hfs-modules-4.9.0-3-powerpc-di affs-modules-4.9.0-3-powerpc-di md-modules-4.9.0-3-powerpc-di multipath-modules-4.9.0-3-powerpc-di usb-modules-4.9.0-3-powerpc-di usb-storage-modules-4.9.0-3-powerpc-di pcmcia-storage-modules-4.9.0-3-powerpc-di fb-modules-4.9.0-3-powerpc-di input-modules-4.9.0-3-powerpc-di event-modules-4.9.0-3-powerpc-di mouse-modules-4.9.0-3-powerpc-di nic-pcmcia-modules-4.9.0-3-powerpc-di pcmcia-modules-4.9.0-3-powerpc-di sata-modules-4.9.0-3-powerpc-di crc-modules-4.9.0-3-powerpc-di crypto-modules-4.9.0-3-powerpc-di crypto-dm-modules-4.9.0-3-powerpc-di ata-modules-4.9.0-3-powerpc-di nbd-modules-4.9.0-3-powerpc-di squashfs-modules-4.9.0-3-powerpc-di virtio-modules-4.9.0-3-powerpc-di uinput-modules-4.9.0-3-powerpc-di zlib-modules-4.9.0-3-powerpc-di udf-modules-4.9.0-3-powerpc-di fuse-modules-4.9.0-3-powerpc-di kernel-image-4.9.0-3-powerpc64-di nic-modules-4.9.0-3-powerpc64-di nic-shared-modules-4.9.0-3-powerpc64-di serial-modules-4.9.0-3-powerpc64-di usb-serial-modules-4.9.0-3-powerpc64-di ppp-modules-4.9.0-3-powerpc64-di pata-modules-4.9.0-3-powerpc64-di cdrom-core-modules-4.9.0-3-powerpc64-di firewire-core-modules-4.9.0-3-powerpc64-di scsi-core-modules-4.9.0-3-powerpc64-di scsi-modules-4.9.0-3-powerpc64-di loop-modules-4.9.0-3-powerpc64-di btrfs-modules-4.9.0-3-powerpc64-di ext4-modules-4.9.0-3-powerpc64-di isofs-modules-4.9.0-3-powerpc64-di jfs-modules-4.9.0-3-powerpc64-di xfs-modules-4.9.0-3-powerpc64-di fat-modules-4.9.0-3-powerpc64-di hfs-modules-4.9.0-3-powerpc64-di affs-modules-4.9.0-3-powerpc64-di md-modules-4.9.0-3-powerpc64-di multipath-modules-4.9.0-3-powerpc64-di usb-modules-4.9.0-3-powerpc64-di usb-storage-modules-4.9.0-3-powerpc64-di pcmcia-storage-modules-4.9.0-3-powerpc64-di input-modules-4.9.0-3-powerpc64-di event-modules-4.9.0-3-powerpc64-di mouse-modules-4.9.0-3-powerpc64-di nic-pcmcia-modules-4.9.0-3-powerpc64-di pcmcia-modules-4.9.0-3-powerpc64-di sata-modules-4.9.0-3-powerpc64-di crc-modules-4.9.0-3-powerpc64-di crypto-modules-4.9.0-3-powerpc64-di crypto-dm-modules-4.9.0-3-powerpc64-di ata-modules-4.9.0-3-powerpc64-di nbd-modules-4.9.0-3-powerpc64-di squashfs-modules-4.9.0-3-powerpc64-di virtio-modules-4.9.0-3-powerpc64-di uinput-modules-4.9.0-3-powerpc64-di udf-modules-4.9.0-3-powerpc64-di fuse-modules-4.9.0-3-powerpc64-di hypervisor-modules-4.9.0-3-powerpc64-di fancontrol-modules-4.9.0-3-powerpc64-di' UDEB_UNSIGNED_TEST_BUILD=False
+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='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc-smp' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc-smp' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpc/config.powerpc debian/config/powerpc/config.powerpc-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+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='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-be' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_powerpc_none_powerpc_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpc/config.powerpc' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_powerpc_none_real:
+binary-arch_powerpc_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='powerpc' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_powerpcspe: binary-arch_powerpcspe_none binary-arch_powerpcspe_real
+binary-arch_powerpcspe_none: binary-arch_powerpcspe_none_powerpcspe binary-arch_powerpcspe_none_real
+binary-arch_powerpcspe_none_powerpcspe: binary-arch_powerpcspe_none_powerpcspe_real
+binary-arch_powerpcspe_none_powerpcspe_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='powerpcspe' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpcspe' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpcspe' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpcspe/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpcspe' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpcspe' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_powerpcspe_none_real:
+binary-arch_powerpcspe_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='powerpcspe' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_ppc64:: binary-arch_ppc64_none binary-arch_ppc64_real
+binary-arch_ppc64::
+       $(MAKE) -f debian/rules.real install-udeb_ppc64 ABINAME='4.9.0-3' ARCH='ppc64' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-powerpc64-di nic-modules-4.9.0-3-powerpc64-di nic-shared-modules-4.9.0-3-powerpc64-di serial-modules-4.9.0-3-powerpc64-di usb-serial-modules-4.9.0-3-powerpc64-di ppp-modules-4.9.0-3-powerpc64-di pata-modules-4.9.0-3-powerpc64-di cdrom-core-modules-4.9.0-3-powerpc64-di firewire-core-modules-4.9.0-3-powerpc64-di scsi-core-modules-4.9.0-3-powerpc64-di scsi-modules-4.9.0-3-powerpc64-di loop-modules-4.9.0-3-powerpc64-di btrfs-modules-4.9.0-3-powerpc64-di ext4-modules-4.9.0-3-powerpc64-di isofs-modules-4.9.0-3-powerpc64-di jfs-modules-4.9.0-3-powerpc64-di xfs-modules-4.9.0-3-powerpc64-di fat-modules-4.9.0-3-powerpc64-di hfs-modules-4.9.0-3-powerpc64-di affs-modules-4.9.0-3-powerpc64-di md-modules-4.9.0-3-powerpc64-di multipath-modules-4.9.0-3-powerpc64-di usb-modules-4.9.0-3-powerpc64-di usb-storage-modules-4.9.0-3-powerpc64-di pcmcia-storage-modules-4.9.0-3-powerpc64-di input-modules-4.9.0-3-powerpc64-di event-modules-4.9.0-3-powerpc64-di mouse-modules-4.9.0-3-powerpc64-di nic-pcmcia-modules-4.9.0-3-powerpc64-di pcmcia-modules-4.9.0-3-powerpc64-di sata-modules-4.9.0-3-powerpc64-di crc-modules-4.9.0-3-powerpc64-di crypto-modules-4.9.0-3-powerpc64-di crypto-dm-modules-4.9.0-3-powerpc64-di ata-modules-4.9.0-3-powerpc64-di nbd-modules-4.9.0-3-powerpc64-di squashfs-modules-4.9.0-3-powerpc64-di virtio-modules-4.9.0-3-powerpc64-di uinput-modules-4.9.0-3-powerpc64-di udf-modules-4.9.0-3-powerpc64-di fuse-modules-4.9.0-3-powerpc64-di hypervisor-modules-4.9.0-3-powerpc64-di fancontrol-modules-4.9.0-3-powerpc64-di' UDEB_UNSIGNED_TEST_BUILD=False
+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='4.9.0-3' ARCH='ppc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-be' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_ppc64_none_real:
+binary-arch_ppc64_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='ppc64' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_ppc64el:: binary-arch_ppc64el_none binary-arch_ppc64el_real
+binary-arch_ppc64el::
+       $(MAKE) -f debian/rules.real install-udeb_ppc64el ABINAME='4.9.0-3' ARCH='ppc64el' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-powerpc64le-di nic-modules-4.9.0-3-powerpc64le-di nic-shared-modules-4.9.0-3-powerpc64le-di serial-modules-4.9.0-3-powerpc64le-di usb-serial-modules-4.9.0-3-powerpc64le-di ppp-modules-4.9.0-3-powerpc64le-di cdrom-core-modules-4.9.0-3-powerpc64le-di firewire-core-modules-4.9.0-3-powerpc64le-di scsi-core-modules-4.9.0-3-powerpc64le-di scsi-modules-4.9.0-3-powerpc64le-di loop-modules-4.9.0-3-powerpc64le-di btrfs-modules-4.9.0-3-powerpc64le-di ext4-modules-4.9.0-3-powerpc64le-di isofs-modules-4.9.0-3-powerpc64le-di jfs-modules-4.9.0-3-powerpc64le-di xfs-modules-4.9.0-3-powerpc64le-di fat-modules-4.9.0-3-powerpc64le-di md-modules-4.9.0-3-powerpc64le-di multipath-modules-4.9.0-3-powerpc64le-di usb-modules-4.9.0-3-powerpc64le-di usb-storage-modules-4.9.0-3-powerpc64le-di input-modules-4.9.0-3-powerpc64le-di event-modules-4.9.0-3-powerpc64le-di mouse-modules-4.9.0-3-powerpc64le-di sata-modules-4.9.0-3-powerpc64le-di crc-modules-4.9.0-3-powerpc64le-di crypto-modules-4.9.0-3-powerpc64le-di crypto-dm-modules-4.9.0-3-powerpc64le-di ata-modules-4.9.0-3-powerpc64le-di nbd-modules-4.9.0-3-powerpc64le-di squashfs-modules-4.9.0-3-powerpc64le-di virtio-modules-4.9.0-3-powerpc64le-di uinput-modules-4.9.0-3-powerpc64le-di udf-modules-4.9.0-3-powerpc64le-di fuse-modules-4.9.0-3-powerpc64le-di hypervisor-modules-4.9.0-3-powerpc64le-di fancontrol-modules-4.9.0-3-powerpc64le-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_ppc64el_none: binary-arch_ppc64el_none_powerpc64le binary-arch_ppc64el_none_real
+binary-arch_ppc64el_none_powerpc64le: binary-arch_ppc64el_none_powerpc64le_real
+binary-arch_ppc64el_none_powerpc64le_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='ppc64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64le' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64le' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-le' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64le' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64le' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_ppc64el_none_real:
+binary-arch_ppc64el_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='ppc64el' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_s390: binary-arch_s390_extra binary-arch_s390_real
+binary-arch_s390_extra::
+       $(MAKE) -f debian/rules.real install-dummy ARCH='s390' DH_OPTIONS='-plinux-compiler-gcc-6-s390'
+binary-arch_s390_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='s390' DO_HEADERS_ALL='False' KERNEL_ARCH='s390' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_s390x:: binary-arch_s390x_extra binary-arch_s390x_none binary-arch_s390x_real
+binary-arch_s390x::
+       $(MAKE) -f debian/rules.real install-udeb_s390x ABINAME='4.9.0-3' ARCH='s390x' KERNEL_ARCH='s390' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-s390x-di nic-modules-4.9.0-3-s390x-di scsi-core-modules-4.9.0-3-s390x-di scsi-modules-4.9.0-3-s390x-di loop-modules-4.9.0-3-s390x-di btrfs-modules-4.9.0-3-s390x-di ext4-modules-4.9.0-3-s390x-di isofs-modules-4.9.0-3-s390x-di xfs-modules-4.9.0-3-s390x-di fat-modules-4.9.0-3-s390x-di md-modules-4.9.0-3-s390x-di multipath-modules-4.9.0-3-s390x-di crc-modules-4.9.0-3-s390x-di crypto-modules-4.9.0-3-s390x-di crypto-dm-modules-4.9.0-3-s390x-di nbd-modules-4.9.0-3-s390x-di virtio-modules-4.9.0-3-s390x-di zlib-modules-4.9.0-3-s390x-di udf-modules-4.9.0-3-s390x-di fuse-modules-4.9.0-3-s390x-di dasd-modules-4.9.0-3-s390x-di dasd-extra-modules-4.9.0-3-s390x-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_s390x_extra::
+       $(MAKE) -f debian/rules.real install-dummy ARCH='s390x' DH_OPTIONS='-plinux-compiler-gcc-6-s390'
+binary-arch_s390x_none: binary-arch_s390x_none_real binary-arch_s390x_none_s390x
+binary-arch_s390x_none_real:
+binary-arch_s390x_none_s390x: binary-arch_s390x_none_s390x_real
+binary-arch_s390x_none_s390x_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='s390x' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='s390x' IMAGE_FILE='arch/s390/boot/image' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-s390x' KCONFIG='debian/config/config debian/config/s390x/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='s390' LOCALVERSION='-s390x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+binary-arch_s390x_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='s390x' KERNEL_ARCH='s390' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_sh3: binary-arch_sh3_real
+binary-arch_sh3_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='sh3' DO_HEADERS_ALL='False' KERNEL_ARCH='sh' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_sh4:: binary-arch_sh4_none binary-arch_sh4_real
+binary-arch_sh4::
+       $(MAKE) -f debian/rules.real install-udeb_sh4 ABINAME='4.9.0-3' ARCH='sh4' KERNEL_ARCH='sh' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-sh7751r-di nic-modules-4.9.0-3-sh7751r-di usb-serial-modules-4.9.0-3-sh7751r-di ppp-modules-4.9.0-3-sh7751r-di pata-modules-4.9.0-3-sh7751r-di cdrom-core-modules-4.9.0-3-sh7751r-di firewire-core-modules-4.9.0-3-sh7751r-di loop-modules-4.9.0-3-sh7751r-di btrfs-modules-4.9.0-3-sh7751r-di ext4-modules-4.9.0-3-sh7751r-di isofs-modules-4.9.0-3-sh7751r-di jfs-modules-4.9.0-3-sh7751r-di xfs-modules-4.9.0-3-sh7751r-di fat-modules-4.9.0-3-sh7751r-di minix-modules-4.9.0-3-sh7751r-di md-modules-4.9.0-3-sh7751r-di multipath-modules-4.9.0-3-sh7751r-di usb-storage-modules-4.9.0-3-sh7751r-di nic-usb-modules-4.9.0-3-sh7751r-di sata-modules-4.9.0-3-sh7751r-di i2c-modules-4.9.0-3-sh7751r-di crc-modules-4.9.0-3-sh7751r-di crypto-modules-4.9.0-3-sh7751r-di crypto-dm-modules-4.9.0-3-sh7751r-di nbd-modules-4.9.0-3-sh7751r-di squashfs-modules-4.9.0-3-sh7751r-di speakup-modules-4.9.0-3-sh7751r-di virtio-modules-4.9.0-3-sh7751r-di sound-modules-4.9.0-3-sh7751r-di zlib-modules-4.9.0-3-sh7751r-di udf-modules-4.9.0-3-sh7751r-di fuse-modules-4.9.0-3-sh7751r-di kernel-image-4.9.0-3-sh7785lcr-di nic-modules-4.9.0-3-sh7785lcr-di usb-serial-modules-4.9.0-3-sh7785lcr-di ppp-modules-4.9.0-3-sh7785lcr-di pata-modules-4.9.0-3-sh7785lcr-di cdrom-core-modules-4.9.0-3-sh7785lcr-di firewire-core-modules-4.9.0-3-sh7785lcr-di loop-modules-4.9.0-3-sh7785lcr-di btrfs-modules-4.9.0-3-sh7785lcr-di ext4-modules-4.9.0-3-sh7785lcr-di isofs-modules-4.9.0-3-sh7785lcr-di jfs-modules-4.9.0-3-sh7785lcr-di xfs-modules-4.9.0-3-sh7785lcr-di fat-modules-4.9.0-3-sh7785lcr-di minix-modules-4.9.0-3-sh7785lcr-di md-modules-4.9.0-3-sh7785lcr-di multipath-modules-4.9.0-3-sh7785lcr-di nic-usb-modules-4.9.0-3-sh7785lcr-di sata-modules-4.9.0-3-sh7785lcr-di crc-modules-4.9.0-3-sh7785lcr-di crypto-modules-4.9.0-3-sh7785lcr-di crypto-dm-modules-4.9.0-3-sh7785lcr-di nbd-modules-4.9.0-3-sh7785lcr-di squashfs-modules-4.9.0-3-sh7785lcr-di speakup-modules-4.9.0-3-sh7785lcr-di sound-modules-4.9.0-3-sh7785lcr-di zlib-modules-4.9.0-3-sh7785lcr-di udf-modules-4.9.0-3-sh7785lcr-di fuse-modules-4.9.0-3-sh7785lcr-di' UDEB_UNSIGNED_TEST_BUILD=False
+binary-arch_sh4_none: binary-arch_sh4_none_real binary-arch_sh4_none_sh7751r binary-arch_sh4_none_sh7785lcr
+binary-arch_sh4_none_real:
+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='4.9.0-3' ARCH='sh4' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sh7751r' IMAGE_FILE='arch/sh/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sh7751r' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7751r' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sh' LOCALVERSION='-sh7751r' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7751r' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+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='4.9.0-3' ARCH='sh4' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sh7785lcr' IMAGE_FILE='arch/sh/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sh7785lcr' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7785lcr' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sh' LOCALVERSION='-sh7785lcr' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7785lcr' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_sh4_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='sh4' KERNEL_ARCH='sh' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_sparc: binary-arch_sparc_real
+binary-arch_sparc64:: binary-arch_sparc64_none binary-arch_sparc64_real
+binary-arch_sparc64::
+       $(MAKE) -f debian/rules.real install-udeb_sparc64 ABINAME='4.9.0-3' ARCH='sparc64' KERNEL_ARCH='sparc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9' PACKAGE_NAMES='kernel-image-4.9.0-3-sparc64-di nic-modules-4.9.0-3-sparc64-di ppp-modules-4.9.0-3-sparc64-di pata-modules-4.9.0-3-sparc64-di cdrom-core-modules-4.9.0-3-sparc64-di scsi-core-modules-4.9.0-3-sparc64-di scsi-modules-4.9.0-3-sparc64-di btrfs-modules-4.9.0-3-sparc64-di ext4-modules-4.9.0-3-sparc64-di isofs-modules-4.9.0-3-sparc64-di jfs-modules-4.9.0-3-sparc64-di ufs-modules-4.9.0-3-sparc64-di xfs-modules-4.9.0-3-sparc64-di fat-modules-4.9.0-3-sparc64-di md-modules-4.9.0-3-sparc64-di multipath-modules-4.9.0-3-sparc64-di usb-modules-4.9.0-3-sparc64-di usb-storage-modules-4.9.0-3-sparc64-di input-modules-4.9.0-3-sparc64-di sata-modules-4.9.0-3-sparc64-di crc-modules-4.9.0-3-sparc64-di crypto-modules-4.9.0-3-sparc64-di crypto-dm-modules-4.9.0-3-sparc64-di ata-modules-4.9.0-3-sparc64-di nbd-modules-4.9.0-3-sparc64-di squashfs-modules-4.9.0-3-sparc64-di virtio-modules-4.9.0-3-sparc64-di zlib-modules-4.9.0-3-sparc64-di udf-modules-4.9.0-3-sparc64-di fuse-modules-4.9.0-3-sparc64-di' UDEB_UNSIGNED_TEST_BUILD=False
+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:
+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='4.9.0-3' ARCH='sparc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sparc64-smp' IMAGE_FILE='arch/sparc/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sparc64-smp' KCONFIG='debian/config/config debian/config/kernelarch-sparc/config debian/config/kernelarch-sparc/config-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_sparc64_none_sparc64_real::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ABINAME='4.9.0-3' ARCH='sparc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sparc64' IMAGE_FILE='arch/sparc/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sparc64' KCONFIG='debian/config/config debian/config/kernelarch-sparc/config debian/config/kernelarch-sparc/config-up' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_sparc64_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='sparc64' KERNEL_ARCH='sparc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_sparc_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='sparc' DO_HEADERS_ALL='False' KERNEL_ARCH='sparc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_tilegx: binary-arch_tilegx_real
+binary-arch_tilegx_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='tilegx' DO_HEADERS_ALL='False' KERNEL_ARCH='tile' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-arch_x32: binary-arch_x32_extra binary-arch_x32_real
+binary-arch_x32_extra::
+       $(MAKE) -f debian/rules.real install-dummy ARCH='x32' DH_OPTIONS='-plinux-compiler-gcc-6-x86'
+binary-arch_x32_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ABINAME='4.9.0-3' ARCH='x32' DO_HEADERS_ALL='False' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-indep:: binary-indep_none binary-indep_rt setup
+binary-indep::
+       $(MAKE) -f debian/rules.real binary-indep ABINAME='4.9.0-3' ALL_FEATURESETS='none rt' ALL_TRIPLETS='alpha_none_alpha-generic alpha_none_alpha-smp amd64_none_amd64 amd64_rt_amd64 arm64_none_arm64 armel_none_marvell armhf_none_armmp armhf_none_armmp-lpae hppa_none_parisc hppa_none_parisc64-smp i386_none_686 i386_none_686-pae i386_rt_686-pae m68k_none_m68k mips_none_4kc-malta mips_none_5kc-malta mips_none_octeon mipsel_none_4kc-malta mipsel_none_5kc-malta mipsel_none_loongson-3 mipsel_none_octeon mips64_none_5kc-malta mips64_none_octeon mips64el_none_5kc-malta mips64el_none_loongson-3 mips64el_none_octeon powerpc_none_powerpc powerpc_none_powerpc-smp powerpc_none_powerpc64 powerpcspe_none_powerpcspe ppc64_none_powerpc64 ppc64el_none_powerpc64le s390x_none_s390x sh4_none_sh7751r sh4_none_sh7785lcr sparc64_none_sparc64 sparc64_none_sparc64-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-indep_none: binary-indep_none_real
+binary-indep_none_real::
+       $(MAKE) -f debian/rules.real binary-indep-featureset ABINAME='4.9.0-3' ALL_KERNEL_ARCHES='alpha arm arm64 m68k mips parisc powerpc s390 sh sparc x86' FEATURESET='none' LOCALVERSION='' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-indep_rt: binary-indep_rt_real
+binary-indep_rt_real::
+       $(MAKE) -f debian/rules.real binary-indep-featureset ABINAME='4.9.0-3' ALL_KERNEL_ARCHES='x86' FEATURESET='rt' LOCALVERSION='-rt' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_alpha:: source_none_real
+binary-libc-dev_alpha::
+       $(MAKE) -f debian/rules.real install-libc-dev_alpha ABINAME='4.9.0-3' ARCH='alpha' KERNEL_ARCH='alpha' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_amd64:: source_none_real
+binary-libc-dev_amd64::
+       $(MAKE) -f debian/rules.real install-libc-dev_amd64 ABINAME='4.9.0-3' ARCH='amd64' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_arm64:: source_none_real
+binary-libc-dev_arm64::
+       $(MAKE) -f debian/rules.real install-libc-dev_arm64 ABINAME='4.9.0-3' ARCH='arm64' KERNEL_ARCH='arm64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_armel:: source_none_real
+binary-libc-dev_armel::
+       $(MAKE) -f debian/rules.real install-libc-dev_armel ABINAME='4.9.0-3' ARCH='armel' KERNEL_ARCH='arm' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_armhf:: source_none_real
+binary-libc-dev_armhf::
+       $(MAKE) -f debian/rules.real install-libc-dev_armhf ABINAME='4.9.0-3' ARCH='armhf' KERNEL_ARCH='arm' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_hppa:: source_none_real
+binary-libc-dev_hppa::
+       $(MAKE) -f debian/rules.real install-libc-dev_hppa ABINAME='4.9.0-3' ARCH='hppa' KERNEL_ARCH='parisc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_i386:: source_none_real
+binary-libc-dev_i386::
+       $(MAKE) -f debian/rules.real install-libc-dev_i386 ABINAME='4.9.0-3' ARCH='i386' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_m68k:: source_none_real
+binary-libc-dev_m68k::
+       $(MAKE) -f debian/rules.real install-libc-dev_m68k ABINAME='4.9.0-3' ARCH='m68k' KERNEL_ARCH='m68k' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_mips:: source_none_real
+binary-libc-dev_mips::
+       $(MAKE) -f debian/rules.real install-libc-dev_mips ABINAME='4.9.0-3' ARCH='mips' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_mips64:: source_none_real
+binary-libc-dev_mips64::
+       $(MAKE) -f debian/rules.real install-libc-dev_mips64 ABINAME='4.9.0-3' ARCH='mips64' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_mips64el:: source_none_real
+binary-libc-dev_mips64el::
+       $(MAKE) -f debian/rules.real install-libc-dev_mips64el ABINAME='4.9.0-3' ARCH='mips64el' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_mipsel:: source_none_real
+binary-libc-dev_mipsel::
+       $(MAKE) -f debian/rules.real install-libc-dev_mipsel ABINAME='4.9.0-3' ARCH='mipsel' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_mipsn32:: source_none_real
+binary-libc-dev_mipsn32::
+       $(MAKE) -f debian/rules.real install-libc-dev_mipsn32 ABINAME='4.9.0-3' ARCH='mipsn32' DO_HEADERS_ALL='False' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_mipsn32el:: source_none_real
+binary-libc-dev_mipsn32el::
+       $(MAKE) -f debian/rules.real install-libc-dev_mipsn32el ABINAME='4.9.0-3' ARCH='mipsn32el' DO_HEADERS_ALL='False' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_powerpc:: source_none_real
+binary-libc-dev_powerpc::
+       $(MAKE) -f debian/rules.real install-libc-dev_powerpc ABINAME='4.9.0-3' ARCH='powerpc' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_powerpcspe:: source_none_real
+binary-libc-dev_powerpcspe::
+       $(MAKE) -f debian/rules.real install-libc-dev_powerpcspe ABINAME='4.9.0-3' ARCH='powerpcspe' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_ppc64:: source_none_real
+binary-libc-dev_ppc64::
+       $(MAKE) -f debian/rules.real install-libc-dev_ppc64 ABINAME='4.9.0-3' ARCH='ppc64' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_ppc64el:: source_none_real
+binary-libc-dev_ppc64el::
+       $(MAKE) -f debian/rules.real install-libc-dev_ppc64el ABINAME='4.9.0-3' ARCH='ppc64el' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_s390:: source_none_real
+binary-libc-dev_s390::
+       $(MAKE) -f debian/rules.real install-libc-dev_s390 ABINAME='4.9.0-3' ARCH='s390' DO_HEADERS_ALL='False' KERNEL_ARCH='s390' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_s390x:: source_none_real
+binary-libc-dev_s390x::
+       $(MAKE) -f debian/rules.real install-libc-dev_s390x ABINAME='4.9.0-3' ARCH='s390x' KERNEL_ARCH='s390' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_sh3:: source_none_real
+binary-libc-dev_sh3::
+       $(MAKE) -f debian/rules.real install-libc-dev_sh3 ABINAME='4.9.0-3' ARCH='sh3' DO_HEADERS_ALL='False' KERNEL_ARCH='sh' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_sh4:: source_none_real
+binary-libc-dev_sh4::
+       $(MAKE) -f debian/rules.real install-libc-dev_sh4 ABINAME='4.9.0-3' ARCH='sh4' KERNEL_ARCH='sh' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_sparc:: source_none_real
+binary-libc-dev_sparc::
+       $(MAKE) -f debian/rules.real install-libc-dev_sparc ABINAME='4.9.0-3' ARCH='sparc' DO_HEADERS_ALL='False' KERNEL_ARCH='sparc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_sparc64:: source_none_real
+binary-libc-dev_sparc64::
+       $(MAKE) -f debian/rules.real install-libc-dev_sparc64 ABINAME='4.9.0-3' ARCH='sparc64' KERNEL_ARCH='sparc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_tilegx:: source_none_real
+binary-libc-dev_tilegx::
+       $(MAKE) -f debian/rules.real install-libc-dev_tilegx ABINAME='4.9.0-3' ARCH='tilegx' DO_HEADERS_ALL='False' KERNEL_ARCH='tile' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+binary-libc-dev_x32:: source_none_real
+binary-libc-dev_x32::
+       $(MAKE) -f debian/rules.real install-libc-dev_x32 ABINAME='4.9.0-3' ARCH='x32' DO_HEADERS_ALL='False' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch: build-arch_alpha build-arch_amd64 build-arch_arm64 build-arch_armel build-arch_armhf build-arch_hppa build-arch_i386 build-arch_m68k build-arch_mips build-arch_mips64 build-arch_mips64el build-arch_mipsel build-arch_mipsn32 build-arch_mipsn32el build-arch_powerpc build-arch_powerpcspe build-arch_ppc64 build-arch_ppc64el build-arch_s390 build-arch_s390x build-arch_sh3 build-arch_sh4 build-arch_sparc build-arch_sparc64 build-arch_tilegx build-arch_x32
+build-arch_alpha: build-arch_alpha_none build-arch_alpha_real
+build-arch_alpha_none: build-arch_alpha_none_alpha-generic build-arch_alpha_none_alpha-smp build-arch_alpha_none_real
+build-arch_alpha_none_alpha-generic: build-arch_alpha_none_alpha-generic_real
+build-arch_alpha_none_alpha-generic_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='alpha' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='alpha-generic' IMAGE_FILE='arch/alpha/boot/vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-alpha-generic' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-generic' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-generic' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-generic' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_alpha_none_alpha-smp: build-arch_alpha_none_alpha-smp_real
+build-arch_alpha_none_alpha-smp_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='alpha' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='alpha-smp' IMAGE_FILE='arch/alpha/boot/vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-alpha-smp' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_alpha_none_real:
+build-arch_alpha_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='alpha' KERNEL_ARCH='alpha' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_amd64: build-arch_amd64_none build-arch_amd64_real build-arch_amd64_rt
+build-arch_amd64_none: build-arch_amd64_none_amd64 build-arch_amd64_none_real
+build-arch_amd64_none_amd64: build-arch_amd64_none_amd64_real
+build-arch_amd64_none_amd64_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='amd64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='amd64' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/amd64/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_amd64_none_real:
+build-arch_amd64_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='amd64' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_amd64_rt: build-arch_amd64_rt_amd64 build-arch_amd64_rt_real
+build-arch_amd64_rt_amd64: build-arch_amd64_rt_amd64_real
+build-arch_amd64_rt_amd64_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='amd64' COMPILER='gcc-6' DEBUG='True' FEATURESET='rt' FLAVOUR='amd64' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-rt-amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/amd64/config debian/config/featureset-rt/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-rt-amd64' LOCALVERSION_HEADERS='-rt' LOCALVERSION_IMAGE='-rt-amd64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_amd64_rt_real:
+build-arch_arm64: build-arch_arm64_none build-arch_arm64_real
+build-arch_arm64_none: build-arch_arm64_none_arm64 build-arch_arm64_none_real
+build-arch_arm64_none_arm64: build-arch_arm64_none_arm64_real
+build-arch_arm64_none_arm64_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='arm64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='arm64' IMAGE_FILE='arch/arm64/boot/Image' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-arm64' KCONFIG='debian/config/config debian/config/arm64/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm64' LOCALVERSION='-arm64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-arm64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_arm64_none_real:
+build-arch_arm64_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='arm64' KERNEL_ARCH='arm64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_armel: build-arch_armel_none build-arch_armel_real
+build-arch_armel_none: build-arch_armel_none_marvell build-arch_armel_none_real
+build-arch_armel_none_marvell: build-arch_armel_none_marvell_real
+build-arch_armel_none_marvell_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='armel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='marvell' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-marvell' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armel/config debian/config/armel/config.marvell' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-marvell' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-marvell' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_armel_none_real:
+build-arch_armel_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='armel' KERNEL_ARCH='arm' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_armhf: build-arch_armhf_none build-arch_armhf_real
+build-arch_armhf_none: build-arch_armhf_none_armmp build-arch_armhf_none_armmp-lpae build-arch_armhf_none_real
+build-arch_armhf_none_armmp: build-arch_armhf_none_armmp_real
+build-arch_armhf_none_armmp-lpae: build-arch_armhf_none_armmp-lpae_real
+build-arch_armhf_none_armmp-lpae_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='armhf' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='armmp-lpae' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-armmp-lpae' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armhf/config debian/config/armhf/config.armmp-lpae' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-armmp-lpae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-armmp-lpae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_armhf_none_armmp_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='armhf' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='armmp' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-armmp' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armhf/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-armmp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-armmp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_armhf_none_real:
+build-arch_armhf_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='armhf' KERNEL_ARCH='arm' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_hppa: build-arch_hppa_none build-arch_hppa_real
+build-arch_hppa_none: build-arch_hppa_none_parisc build-arch_hppa_none_parisc64-smp build-arch_hppa_none_real
+build-arch_hppa_none_parisc: build-arch_hppa_none_parisc_real
+build-arch_hppa_none_parisc64-smp: build-arch_hppa_none_parisc64-smp_real
+build-arch_hppa_none_parisc64-smp_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='parisc64-smp' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-parisc64-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64-smp' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_hppa_none_parisc_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='hppa' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='parisc' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-parisc' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='parisc' LOCALVERSION='-parisc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_hppa_none_real:
+build-arch_hppa_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='hppa' KERNEL_ARCH='parisc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_i386: build-arch_i386_none build-arch_i386_real build-arch_i386_rt
+build-arch_i386_none: build-arch_i386_none_686 build-arch_i386_none_686-pae build-arch_i386_none_real
+build-arch_i386_none_686: build-arch_i386_none_686_real
+build-arch_i386_none_686-pae: build-arch_i386_none_686-pae_real
+build-arch_i386_none_686-pae_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='686-pae' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686-pae' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686-pae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686-pae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_i386_none_686_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='686' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-686' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_i386_none_real:
+build-arch_i386_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='i386' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_i386_rt: build-arch_i386_rt_686-pae build-arch_i386_rt_real
+build-arch_i386_rt_686-pae: build-arch_i386_rt_686-pae_real
+build-arch_i386_rt_686-pae_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='rt' FLAVOUR='686-pae' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-rt-686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686-pae debian/config/featureset-rt/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-rt-686-pae' LOCALVERSION_HEADERS='-rt' LOCALVERSION_IMAGE='-rt-686-pae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_i386_rt_real:
+build-arch_m68k: build-arch_m68k_none build-arch_m68k_real
+build-arch_m68k_none: build-arch_m68k_none_m68k build-arch_m68k_none_real
+build-arch_m68k_none_m68k: build-arch_m68k_none_m68k_real
+build-arch_m68k_none_m68k_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='m68k' CFLAGS_KERNEL='-ffreestanding' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='m68k' IMAGE_FILE='vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-m68k' KCONFIG='debian/config/config debian/config/m68k/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='m68k' LOCALVERSION='-m68k' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-m68k' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_m68k_none_real:
+build-arch_m68k_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='m68k' KERNEL_ARCH='m68k' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips: build-arch_mips_none build-arch_mips_real
+build-arch_mips64: build-arch_mips64_none build-arch_mips64_real
+build-arch_mips64_none: build-arch_mips64_none_5kc-malta build-arch_mips64_none_octeon build-arch_mips64_none_real
+build-arch_mips64_none_5kc-malta: build-arch_mips64_none_5kc-malta_real
+build-arch_mips64_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mips64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips64_none_octeon: build-arch_mips64_none_octeon_real
+build-arch_mips64_none_octeon_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mips64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips64_none_real:
+build-arch_mips64_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='mips64' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips64el: build-arch_mips64el_none build-arch_mips64el_real
+build-arch_mips64el_none: build-arch_mips64el_none_5kc-malta build-arch_mips64el_none_loongson-3 build-arch_mips64el_none_octeon build-arch_mips64el_none_real
+build-arch_mips64el_none_5kc-malta: build-arch_mips64el_none_5kc-malta_real
+build-arch_mips64el_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips64el_none_loongson-3: build-arch_mips64el_none_loongson-3_real
+build-arch_mips64el_none_loongson-3_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='loongson-3' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-loongson-3' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.loongson-3' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-loongson-3' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-3' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips64el_none_octeon: build-arch_mips64el_none_octeon_real
+build-arch_mips64el_none_octeon_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips64el_none_real:
+build-arch_mips64el_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='mips64el' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips_none: build-arch_mips_none_4kc-malta build-arch_mips_none_5kc-malta build-arch_mips_none_octeon build-arch_mips_none_real
+build-arch_mips_none_4kc-malta: build-arch_mips_none_4kc-malta_real
+build-arch_mips_none_4kc-malta_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='4kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-4kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips32r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips_none_5kc-malta: build-arch_mips_none_5kc-malta_real
+build-arch_mips_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips_none_octeon: build-arch_mips_none_octeon_real
+build-arch_mips_none_octeon_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mips_none_real:
+build-arch_mips_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='mips' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mipsel: build-arch_mipsel_none build-arch_mipsel_real
+build-arch_mipsel_none: build-arch_mipsel_none_4kc-malta build-arch_mipsel_none_5kc-malta build-arch_mipsel_none_loongson-3 build-arch_mipsel_none_octeon build-arch_mipsel_none_real
+build-arch_mipsel_none_4kc-malta: build-arch_mipsel_none_4kc-malta_real
+build-arch_mipsel_none_4kc-malta_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='4kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-4kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips32r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mipsel_none_5kc-malta: build-arch_mipsel_none_5kc-malta_real
+build-arch_mipsel_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mipsel_none_loongson-3: build-arch_mipsel_none_loongson-3_real
+build-arch_mipsel_none_loongson-3_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='loongson-3' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-loongson-3' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.loongson-3' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-loongson-3' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-3' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mipsel_none_octeon: build-arch_mipsel_none_octeon_real
+build-arch_mipsel_none_octeon_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mipsel_none_real:
+build-arch_mipsel_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='mipsel' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mipsn32: build-arch_mipsn32_real
+build-arch_mipsn32_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='mipsn32' DO_HEADERS_ALL='False' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_mipsn32el: build-arch_mipsn32el_real
+build-arch_mipsn32el_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='mipsn32el' DO_HEADERS_ALL='False' KERNEL_ARCH='mips' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_powerpc: build-arch_powerpc_none build-arch_powerpc_real
+build-arch_powerpc_none: build-arch_powerpc_none_powerpc build-arch_powerpc_none_powerpc-smp build-arch_powerpc_none_powerpc64 build-arch_powerpc_none_real
+build-arch_powerpc_none_powerpc: build-arch_powerpc_none_powerpc_real
+build-arch_powerpc_none_powerpc-smp: build-arch_powerpc_none_powerpc-smp_real
+build-arch_powerpc_none_powerpc-smp_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc-smp' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc-smp' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpc/config.powerpc debian/config/powerpc/config.powerpc-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_powerpc_none_powerpc64: build-arch_powerpc_none_powerpc64_real
+build-arch_powerpc_none_powerpc64_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-be' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_powerpc_none_powerpc_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpc/config.powerpc' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_powerpc_none_real:
+build-arch_powerpc_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='powerpc' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_powerpcspe: build-arch_powerpcspe_none build-arch_powerpcspe_real
+build-arch_powerpcspe_none: build-arch_powerpcspe_none_powerpcspe build-arch_powerpcspe_none_real
+build-arch_powerpcspe_none_powerpcspe: build-arch_powerpcspe_none_powerpcspe_real
+build-arch_powerpcspe_none_powerpcspe_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='powerpcspe' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpcspe' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpcspe' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpcspe/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpcspe' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpcspe' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_powerpcspe_none_real:
+build-arch_powerpcspe_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='powerpcspe' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_ppc64: build-arch_ppc64_none build-arch_ppc64_real
+build-arch_ppc64_none: build-arch_ppc64_none_powerpc64 build-arch_ppc64_none_real
+build-arch_ppc64_none_powerpc64: build-arch_ppc64_none_powerpc64_real
+build-arch_ppc64_none_powerpc64_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='ppc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-be' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_ppc64_none_real:
+build-arch_ppc64_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='ppc64' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_ppc64el: build-arch_ppc64el_none build-arch_ppc64el_real
+build-arch_ppc64el_none: build-arch_ppc64el_none_powerpc64le build-arch_ppc64el_none_real
+build-arch_ppc64el_none_powerpc64le: build-arch_ppc64el_none_powerpc64le_real
+build-arch_ppc64el_none_powerpc64le_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='ppc64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64le' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64le' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-le' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64le' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64le' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_ppc64el_none_real:
+build-arch_ppc64el_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='ppc64el' KERNEL_ARCH='powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_s390: build-arch_s390_real
+build-arch_s390_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='s390' DO_HEADERS_ALL='False' KERNEL_ARCH='s390' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_s390x: build-arch_s390x_none build-arch_s390x_real
+build-arch_s390x_none: build-arch_s390x_none_real build-arch_s390x_none_s390x
+build-arch_s390x_none_real:
+build-arch_s390x_none_s390x: build-arch_s390x_none_s390x_real
+build-arch_s390x_none_s390x_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='s390x' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='s390x' IMAGE_FILE='arch/s390/boot/image' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-s390x' KCONFIG='debian/config/config debian/config/s390x/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='s390' LOCALVERSION='-s390x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+build-arch_s390x_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='s390x' KERNEL_ARCH='s390' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_sh3: build-arch_sh3_real
+build-arch_sh3_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='sh3' DO_HEADERS_ALL='False' KERNEL_ARCH='sh' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_sh4: build-arch_sh4_none build-arch_sh4_real
+build-arch_sh4_none: build-arch_sh4_none_real build-arch_sh4_none_sh7751r build-arch_sh4_none_sh7785lcr
+build-arch_sh4_none_real:
+build-arch_sh4_none_sh7751r: build-arch_sh4_none_sh7751r_real
+build-arch_sh4_none_sh7751r_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='sh4' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sh7751r' IMAGE_FILE='arch/sh/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sh7751r' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7751r' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sh' LOCALVERSION='-sh7751r' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7751r' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_sh4_none_sh7785lcr: build-arch_sh4_none_sh7785lcr_real
+build-arch_sh4_none_sh7785lcr_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='sh4' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sh7785lcr' IMAGE_FILE='arch/sh/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sh7785lcr' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7785lcr' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sh' LOCALVERSION='-sh7785lcr' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7785lcr' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_sh4_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='sh4' KERNEL_ARCH='sh' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_sparc: build-arch_sparc_real
+build-arch_sparc64: build-arch_sparc64_none build-arch_sparc64_real
+build-arch_sparc64_none: build-arch_sparc64_none_real build-arch_sparc64_none_sparc64 build-arch_sparc64_none_sparc64-smp
+build-arch_sparc64_none_real:
+build-arch_sparc64_none_sparc64: build-arch_sparc64_none_sparc64_real
+build-arch_sparc64_none_sparc64-smp: build-arch_sparc64_none_sparc64-smp_real
+build-arch_sparc64_none_sparc64-smp_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='sparc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sparc64-smp' IMAGE_FILE='arch/sparc/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sparc64-smp' KCONFIG='debian/config/config debian/config/kernelarch-sparc/config debian/config/kernelarch-sparc/config-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_sparc64_none_sparc64_real::
+       $(MAKE) -f debian/rules.real build-arch-flavour ABINAME='4.9.0-3' ARCH='sparc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sparc64' IMAGE_FILE='arch/sparc/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sparc64' KCONFIG='debian/config/config debian/config/kernelarch-sparc/config debian/config/kernelarch-sparc/config-up' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_sparc64_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='sparc64' KERNEL_ARCH='sparc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_sparc_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='sparc' DO_HEADERS_ALL='False' KERNEL_ARCH='sparc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_tilegx: build-arch_tilegx_real
+build-arch_tilegx_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='tilegx' DO_HEADERS_ALL='False' KERNEL_ARCH='tile' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-arch_x32: build-arch_x32_real
+build-arch_x32_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ABINAME='4.9.0-3' ARCH='x32' DO_HEADERS_ALL='False' KERNEL_ARCH='x86' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-indep:: build-indep_none build-indep_rt
+build-indep::
+       $(MAKE) -f debian/rules.real build-indep ABINAME='4.9.0-3' ALL_FEATURESETS='none rt' ALL_TRIPLETS='alpha_none_alpha-generic alpha_none_alpha-smp amd64_none_amd64 amd64_rt_amd64 arm64_none_arm64 armel_none_marvell armhf_none_armmp armhf_none_armmp-lpae hppa_none_parisc hppa_none_parisc64-smp i386_none_686 i386_none_686-pae i386_rt_686-pae m68k_none_m68k mips_none_4kc-malta mips_none_5kc-malta mips_none_octeon mipsel_none_4kc-malta mipsel_none_5kc-malta mipsel_none_loongson-3 mipsel_none_octeon mips64_none_5kc-malta mips64_none_octeon mips64el_none_5kc-malta mips64el_none_loongson-3 mips64el_none_octeon powerpc_none_powerpc powerpc_none_powerpc-smp powerpc_none_powerpc64 powerpcspe_none_powerpcspe ppc64_none_powerpc64 ppc64el_none_powerpc64le s390x_none_s390x sh4_none_sh7751r sh4_none_sh7785lcr sparc64_none_sparc64 sparc64_none_sparc64-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+build-indep_none: build-indep_none_real
+build-indep_none_real:
+build-indep_rt: build-indep_rt_real
+build-indep_rt_real:
+setup: setup_alpha setup_amd64 setup_arm64 setup_armel setup_armhf setup_hppa setup_i386 setup_m68k setup_mips setup_mips64 setup_mips64el setup_mipsel setup_mipsn32 setup_mipsn32el setup_none setup_powerpc setup_powerpcspe setup_ppc64 setup_ppc64el setup_rt setup_s390 setup_s390x setup_sh3 setup_sh4 setup_sparc setup_sparc64 setup_tilegx setup_x32
+setup_alpha: setup_alpha_none setup_alpha_real
+setup_alpha_none: setup_alpha_none_alpha-generic 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-arch-flavour ABINAME='4.9.0-3' ARCH='alpha' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='alpha-generic' IMAGE_FILE='arch/alpha/boot/vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-alpha-generic' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-generic' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-generic' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-generic' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_alpha_none_alpha-smp: setup_alpha_none_alpha-smp_real
+setup_alpha_none_alpha-smp_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='alpha' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='alpha-smp' IMAGE_FILE='arch/alpha/boot/vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-alpha-smp' KCONFIG='debian/config/config debian/config/alpha/config debian/config/alpha/config.alpha-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='alpha' LOCALVERSION='-alpha-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-alpha-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_alpha_none_real:
+setup_alpha_real:
+setup_amd64: setup_amd64_none setup_amd64_real setup_amd64_rt
+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-arch-flavour ABINAME='4.9.0-3' ARCH='amd64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='amd64' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/amd64/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-amd64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-amd64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_amd64_none_real:
+setup_amd64_real:
+setup_amd64_rt: setup_amd64_rt_amd64 setup_amd64_rt_real
+setup_amd64_rt_amd64: setup_amd64_rt_amd64_real
+setup_amd64_rt_amd64_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='amd64' COMPILER='gcc-6' DEBUG='True' FEATURESET='rt' FLAVOUR='amd64' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-rt-amd64' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/amd64/config debian/config/featureset-rt/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-rt-amd64' LOCALVERSION_HEADERS='-rt' LOCALVERSION_IMAGE='-rt-amd64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_amd64_rt_real:
+setup_arm64: setup_arm64_none setup_arm64_real
+setup_arm64_none: setup_arm64_none_arm64 setup_arm64_none_real
+setup_arm64_none_arm64: setup_arm64_none_arm64_real
+setup_arm64_none_arm64_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='arm64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='arm64' IMAGE_FILE='arch/arm64/boot/Image' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-arm64' KCONFIG='debian/config/config debian/config/arm64/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm64' LOCALVERSION='-arm64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-arm64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_arm64_none_real:
+setup_arm64_real:
+setup_armel: setup_armel_none setup_armel_real
+setup_armel_none: setup_armel_none_marvell setup_armel_none_real
+setup_armel_none_marvell: setup_armel_none_marvell_real
+setup_armel_none_marvell_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='armel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='marvell' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-marvell' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armel/config debian/config/armel/config.marvell' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-marvell' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-marvell' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_armel_none_real:
+setup_armel_real:
+setup_armhf: setup_armhf_none setup_armhf_real
+setup_armhf_none: setup_armhf_none_armmp setup_armhf_none_armmp-lpae setup_armhf_none_real
+setup_armhf_none_armmp: setup_armhf_none_armmp_real
+setup_armhf_none_armmp-lpae: setup_armhf_none_armmp-lpae_real
+setup_armhf_none_armmp-lpae_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='armhf' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='armmp-lpae' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-armmp-lpae' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armhf/config debian/config/armhf/config.armmp-lpae' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-armmp-lpae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-armmp-lpae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_armhf_none_armmp_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='armhf' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='armmp' IMAGE_FILE='arch/arm/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-armmp' KCONFIG='debian/config/config debian/config/kernelarch-arm/config debian/config/armhf/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='arm' LOCALVERSION='-armmp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-armmp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+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_parisc64-smp setup_hppa_none_real
+setup_hppa_none_parisc: setup_hppa_none_parisc_real
+setup_hppa_none_parisc64-smp: setup_hppa_none_parisc64-smp_real
+setup_hppa_none_parisc64-smp_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='hppa' CFLAGS_KERNEL='-fno-cse-follow-jumps' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='parisc64-smp' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-parisc64-smp' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc64-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='parisc' LOCALVERSION='-parisc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc64-smp' OVERRIDE_HOST_TYPE='hppa64-linux-gnu' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_hppa_none_parisc_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='hppa' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='parisc' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-parisc' KCONFIG='debian/config/config debian/config/hppa/config debian/config/hppa/config.parisc' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='parisc' LOCALVERSION='-parisc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-parisc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_hppa_none_real:
+setup_hppa_real:
+setup_i386: setup_i386_none setup_i386_real setup_i386_rt
+setup_i386_none: setup_i386_none_686 setup_i386_none_686-pae setup_i386_none_real
+setup_i386_none_686: setup_i386_none_686_real
+setup_i386_none_686-pae: setup_i386_none_686-pae_real
+setup_i386_none_686-pae_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='686-pae' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686-pae' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686-pae' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686-pae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_i386_none_686_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='686' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-686' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-686' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-686' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_i386_none_real:
+setup_i386_real:
+setup_i386_rt: setup_i386_rt_686-pae setup_i386_rt_real
+setup_i386_rt_686-pae: setup_i386_rt_686-pae_real
+setup_i386_rt_686-pae_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='i386' COMPILER='gcc-6' DEBUG='True' FEATURESET='rt' FLAVOUR='686-pae' IMAGE_FILE='arch/x86/boot/bzImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-rt-686-pae' KCONFIG='debian/config/config debian/config/kernelarch-x86/config debian/config/i386/config debian/config/i386/config.686-pae debian/config/featureset-rt/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='x86' LOCALVERSION='-rt-686-pae' LOCALVERSION_HEADERS='-rt' LOCALVERSION_IMAGE='-rt-686-pae' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_i386_rt_real:
+setup_m68k: setup_m68k_none setup_m68k_real
+setup_m68k_none: setup_m68k_none_m68k setup_m68k_none_real
+setup_m68k_none_m68k: setup_m68k_none_m68k_real
+setup_m68k_none_m68k_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='m68k' CFLAGS_KERNEL='-ffreestanding' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='m68k' IMAGE_FILE='vmlinux.gz' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-m68k' KCONFIG='debian/config/config debian/config/m68k/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='m68k' LOCALVERSION='-m68k' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-m68k' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_m68k_none_real:
+setup_m68k_real:
+setup_mips: setup_mips_none setup_mips_real
+setup_mips64: setup_mips64_none setup_mips64_real
+setup_mips64_none: setup_mips64_none_5kc-malta setup_mips64_none_octeon setup_mips64_none_real
+setup_mips64_none_5kc-malta: setup_mips64_none_5kc-malta_real
+setup_mips64_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mips64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mips64_none_octeon: setup_mips64_none_octeon_real
+setup_mips64_none_octeon_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mips64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mips64_none_real:
+setup_mips64_real:
+setup_mips64el: setup_mips64el_none setup_mips64el_real
+setup_mips64el_none: setup_mips64el_none_5kc-malta setup_mips64el_none_loongson-3 setup_mips64el_none_octeon setup_mips64el_none_real
+setup_mips64el_none_5kc-malta: setup_mips64el_none_5kc-malta_real
+setup_mips64el_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mips64el_none_loongson-3: setup_mips64el_none_loongson-3_real
+setup_mips64el_none_loongson-3_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='loongson-3' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-loongson-3' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.loongson-3' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-loongson-3' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-3' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mips64el_none_octeon: setup_mips64el_none_octeon_real
+setup_mips64el_none_octeon_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mips64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips64el/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mips64el_none_real:
+setup_mips64el_real:
+setup_mips_none: setup_mips_none_4kc-malta setup_mips_none_5kc-malta setup_mips_none_octeon setup_mips_none_real
+setup_mips_none_4kc-malta: setup_mips_none_4kc-malta_real
+setup_mips_none_4kc-malta_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='4kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-4kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips32r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mips_none_5kc-malta: setup_mips_none_5kc-malta_real
+setup_mips_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mips_none_octeon: setup_mips_none_octeon_real
+setup_mips_none_octeon_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mips' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mips/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mips_none_real:
+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-3 setup_mipsel_none_octeon setup_mipsel_none_real
+setup_mipsel_none_4kc-malta: setup_mipsel_none_4kc-malta_real
+setup_mipsel_none_4kc-malta_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='4kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-4kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips32r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-4kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-4kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mipsel_none_5kc-malta: setup_mipsel_none_5kc-malta_real
+setup_mipsel_none_5kc-malta_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='5kc-malta' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-5kc-malta' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.malta debian/config/kernelarch-mips/config.mips64r2' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-5kc-malta' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-5kc-malta' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mipsel_none_loongson-3: setup_mipsel_none_loongson-3_real
+setup_mipsel_none_loongson-3_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='loongson-3' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-loongson-3' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.loongson-3' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-loongson-3' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-loongson-3' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mipsel_none_octeon: setup_mipsel_none_octeon_real
+setup_mipsel_none_octeon_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='mipsel' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='octeon' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-octeon' KCONFIG='debian/config/config debian/config/kernelarch-mips/config debian/config/mipsel/config debian/config/kernelarch-mips/config.octeon' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='mips' LOCALVERSION='-octeon' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-octeon' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_mipsel_none_real:
+setup_mipsel_real:
+setup_mipsn32: setup_mipsn32_real
+setup_mipsn32_real:
+setup_mipsn32el: setup_mipsn32el_real
+setup_mipsn32el_real:
+setup_none: setup_none_real
+setup_none_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-arch-flavour ABINAME='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc-smp' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc-smp' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpc/config.powerpc debian/config/powerpc/config.powerpc-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_powerpc_none_powerpc64: setup_powerpc_none_powerpc64_real
+setup_powerpc_none_powerpc64_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-be' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_powerpc_none_powerpc_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='powerpc' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpc/config.powerpc' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_powerpc_none_real:
+setup_powerpc_real:
+setup_powerpcspe: setup_powerpcspe_none setup_powerpcspe_real
+setup_powerpcspe_none: setup_powerpcspe_none_powerpcspe setup_powerpcspe_none_real
+setup_powerpcspe_none_powerpcspe: setup_powerpcspe_none_powerpcspe_real
+setup_powerpcspe_none_powerpcspe_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='powerpcspe' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpcspe' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpcspe' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/powerpcspe/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpcspe' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpcspe' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_powerpcspe_none_real:
+setup_powerpcspe_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-arch-flavour ABINAME='4.9.0-3' ARCH='ppc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-be' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_ppc64_none_real:
+setup_ppc64_real:
+setup_ppc64el: setup_ppc64el_none setup_ppc64el_real
+setup_ppc64el_none: setup_ppc64el_none_powerpc64le setup_ppc64el_none_real
+setup_ppc64el_none_powerpc64le: setup_ppc64el_none_powerpc64le_real
+setup_ppc64el_none_powerpc64le_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='ppc64el' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='powerpc64le' IMAGE_FILE='vmlinux' IMAGE_INSTALL_STEM='vmlinux' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-powerpc64le' KCONFIG='debian/config/config debian/config/kernelarch-powerpc/config debian/config/kernelarch-powerpc/config-arch-64 debian/config/kernelarch-powerpc/config-arch-64-le' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='powerpc' LOCALVERSION='-powerpc64le' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-powerpc64le' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_ppc64el_none_real:
+setup_ppc64el_real:
+setup_rt: setup_rt_real
+setup_rt_real:
+setup_s390: setup_s390_real
+setup_s390_real:
+setup_s390x: setup_s390x_none setup_s390x_real
+setup_s390x_none: setup_s390x_none_real setup_s390x_none_s390x
+setup_s390x_none_real:
+setup_s390x_none_s390x: setup_s390x_none_s390x_real
+setup_s390x_none_s390x_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='s390x' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='s390x' IMAGE_FILE='arch/s390/boot/image' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-s390x' KCONFIG='debian/config/config debian/config/s390x/config' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='s390' LOCALVERSION='-s390x' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-s390x' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VDSO='True' VERSION='4.9'
+setup_s390x_real:
+setup_sh3: setup_sh3_real
+setup_sh3_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-arch-flavour ABINAME='4.9.0-3' ARCH='sh4' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sh7751r' IMAGE_FILE='arch/sh/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sh7751r' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7751r' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sh' LOCALVERSION='-sh7751r' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7751r' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_sh4_none_sh7785lcr: setup_sh4_none_sh7785lcr_real
+setup_sh4_none_sh7785lcr_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='sh4' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sh7785lcr' IMAGE_FILE='arch/sh/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sh7785lcr' KCONFIG='debian/config/config debian/config/sh4/config debian/config/sh4/config.sh7785lcr' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sh' LOCALVERSION='-sh7785lcr' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sh7785lcr' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_sh4_real:
+setup_sparc: 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-arch-flavour ABINAME='4.9.0-3' ARCH='sparc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sparc64-smp' IMAGE_FILE='arch/sparc/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sparc64-smp' KCONFIG='debian/config/config debian/config/kernelarch-sparc/config debian/config/kernelarch-sparc/config-smp' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64-smp' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64-smp' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_sparc64_none_sparc64_real::
+       $(MAKE) -f debian/rules.real setup-arch-flavour ABINAME='4.9.0-3' ARCH='sparc64' COMPILER='gcc-6' DEBUG='True' FEATURESET='none' FLAVOUR='sparc64' IMAGE_FILE='arch/sparc/boot/zImage' IMAGE_INSTALL_STEM='vmlinuz' IMAGE_PACKAGE_NAME='linux-image-4.9.0-3-sparc64' KCONFIG='debian/config/config debian/config/kernelarch-sparc/config debian/config/kernelarch-sparc/config-up' KCONFIG_OPTIONS=' -o DEBUG_INFO=y' KERNEL_ARCH='sparc' LOCALVERSION='-sparc64' LOCALVERSION_HEADERS='' LOCALVERSION_IMAGE='-sparc64' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+setup_sparc64_real:
+setup_sparc_real:
+setup_tilegx: setup_tilegx_real
+setup_tilegx_real:
+setup_x32: setup_x32_real
+setup_x32_real:
+source: source_none source_rt
+source_none: source_none_real
+source_none_real::
+       $(MAKE) -f debian/rules.real source-featureset ABINAME='4.9.0-3' FEATURESET='none' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
+source_rt: source_rt_real
+source_rt_real::
+       $(MAKE) -f debian/rules.real source-featureset ABINAME='4.9.0-3' FEATURESET='rt' SOURCEVERSION='4.9.25-1' UPSTREAMVERSION='4.9' VERSION='4.9'
diff --git a/rules.real b/rules.real
new file mode 100644 (file)
index 0000000..37da264
--- /dev/null
@@ -0,0 +1,727 @@
+#
+# 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
+MAINTAINER := $(shell sed -ne 's,^Maintainer: .[^<]*<\([^>]*\)>,\1,p' debian/control)
+SOURCE_PACKAGE_NAME := $(shell dpkg-parsechangelog -SSource)
+DISTRIBUTION := $(shell dpkg-parsechangelog -SDistribution)
+SOURCE_DATE := $(shell dpkg-parsechangelog -SDate)
+SOURCE_DATE_UTC_ISO := $(shell date -u -d '$(SOURCE_DATE)' +%Y-%m-%d)
+
+DISTRIBUTOR := $(shell lsb_release -is 2>/dev/null)
+ifeq ($(DISTRIBUTOR),)
+DISTRIBUTOR := Debian
+endif
+
+ifdef OVERRIDE_HOST_TYPE
+  CROSS_COMPILE := $(OVERRIDE_HOST_TYPE)-
+else ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
+  CROSS_COMPILE := $(DEB_HOST_GNU_TYPE)-
+else
+  CROSS_COMPILE :=
+endif
+export CROSS_COMPILE
+
+export PYTHONPATH = $(CURDIR)/debian/lib/python
+export DH_OPTIONS
+export DEB_HOST_ARCH DEB_HOST_GNU_TYPE DEB_BUILD_ARCH
+export DEB_BUILD_PATH = $(CURDIR)  # for dpkg-buildflags
+export LC_ALL = C.UTF-8
+undefine LANGUAGE
+
+include debian/rules.defs
+
+stamp = [ -d $(dir $@) ] || mkdir $(dir $@); touch $@
+
+setup_env := env -u ABINAME -u ARCH -u FEATURESET -u FLAVOUR -u VERSION -u LOCALVERSION
+setup_env += DISTRIBUTION_OFFICIAL_BUILD=1 DISTRIBUTOR="$(DISTRIBUTOR)" DISTRIBUTION_VERSION="$(SOURCEVERSION)" KBUILD_BUILD_TIMESTAMP="$(SOURCE_DATE)" KBUILD_BUILD_VERSION_TIMESTAMP="$(DISTRIBUTOR) $(SOURCEVERSION) ($(SOURCE_DATE_UTC_ISO))" KBUILD_BUILD_USER="$(word 1,$(subst @, ,$(MAINTAINER)))" KBUILD_BUILD_HOST="$(word 2,$(subst @, ,$(MAINTAINER)))"
+
+MAKE_CLEAN = $(setup_env) $(MAKE) CFLAGS_KERNEL=-fdebug-prefix-map=$(CURDIR)=. CFLAGS_MODULE=-fdebug-prefix-map=$(CURDIR)=.
+MAKE_SELF := $(MAKE) -f debian/rules.real $(MAKEOVERRIDES)
+MAKEOVERRIDES =
+
+#
+# Targets
+#
+
+build-arch-arch:
+build-indep:
+binary-arch-arch:
+binary-indep:
+
+ifneq ($(DO_HEADERS_ALL),False)
+  binary-arch-arch: install-headers_$(ARCH)
+endif
+ifneq ($(DO_LIBC),False)
+  binary-arch-arch: install-libc-dev_$(ARCH)
+endif
+binary-arch-flavour: install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+ifeq ($(DEBUG),True)
+  binary-arch-flavour: install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+endif
+binary-arch-flavour: install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+
+ifneq ($(DO_DOCS),False)
+  binary-indep: install-doc
+  binary-indep: install-manual
+  build-indep: $(STAMPS_DIR)/build-doc
+endif
+binary-indep: install-source
+binary-indep: install-support
+
+ifneq ($(DO_TOOLS),False)
+  build-arch-arch: $(STAMPS_DIR)/build-tools
+  binary-arch-arch: install-kbuild install-usbip install-cpupower
+#  binary-arch-arch: install-liblockdep
+  ifneq ($(filter alpha amd64 arm64 armel armhf hppa i386 mips mips64 mips64el mipsel powerpc powerpcspe ppc64 ppc64el s390 s390x sh4 sparc sparc64,$(DEB_HOST_ARCH)),)
+    ifeq ($(filter nopython,$(DEB_BUILD_PROFILES)),)
+      binary-arch-arch: install-perf
+    endif
+  endif
+  ifneq ($(filter i386 amd64 x32,$(DEB_HOST_ARCH)),)
+    binary-arch-arch: install-hyperv-daemons
+  endif
+#  binary-indep: install-lockdep
+endif
+
+binary-indep-featureset: install-common-headers_$(FEATURESET)
+
+build-arch-flavour: $(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+
+setup-arch-flavour: $(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+
+source-featureset: $(STAMPS_DIR)/source_$(FEATURESET)
+
+$(BUILD_DIR)/config.$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(KCONFIG)
+       mkdir -p '$(dir $@)'
+       debian/bin/kconfig.py '$@' $(KCONFIG) $(KCONFIG_OPTIONS)
+
+define copy_source
+mkdir -p '$(1)'
+cp -al $(filter-out debian .pc .svk .svn .git, $(wildcard * .[^.]*)) '$(1)'
+endef
+
+$(BUILD_DIR)/$(SOURCE_PACKAGE_NAME)-source-$(UPSTREAMVERSION).tar.xz: DIR = $(BUILD_DIR)/$(SOURCE_PACKAGE_NAME)-source-$(UPSTREAMVERSION)
+$(BUILD_DIR)/$(SOURCE_PACKAGE_NAME)-source-$(UPSTREAMVERSION).tar.xz: $(STAMPS_DIR)/source
+       rm -rf '$@' '$(DIR)'
+       $(call copy_source,$(DIR))
+       chmod -R u+rw,go=rX '$(DIR)'
+       find '$(DIR)' -depth -newermt '$(SOURCE_DATE)' -print0 | \
+               xargs -0r touch --no-dereference --date='$(SOURCE_DATE)'
+       cd '$(BUILD_DIR)'; \
+       find '$(SOURCE_PACKAGE_NAME)-source-$(UPSTREAMVERSION)' \
+               -name '*.pyc' -prune -o \
+               -print0 | \
+               sort -z | \
+               tar --no-recursion --null -T - -caf '$(SOURCE_PACKAGE_NAME)-source-$(UPSTREAMVERSION).tar.xz'
+       rm -rf '$(DIR)'
+
+$(BUILD_DIR)/linux-patch-$(UPSTREAMVERSION)-%.patch.xz: $(STAMPS_DIR)/source_none $(STAMPS_DIR)/source_%
+       set -o pipefail;                                                \
+       (cd '$(BUILD_DIR)';                                             \
+        set +e;                                                        \
+         diff -urN -p -x debian -x .pc -x .svk -x .svn -x .git -x '*.pyc' source_none source_$*; \
+        test $$? -eq 1) |                                              \
+       filterdiff --remove-timestamps --strip=1 --addoldprefix=a/ --addnewprefix=b/ | \
+       xz -c >$@ ||                                                    \
+       (rm -f $@; exit 1)
+
+define patch_cmd
+cd '$(DIR)' && QUILT_PATCHES='$(CURDIR)/debian/patches' QUILT_SERIES=series-$(1) QUILT_PC=.pc quilt push --quiltrc - -a -q --fuzz=0
+endef
+
+$(STAMPS_DIR)/source:
+       test -d .pc
+       set +e; QUILT_PC=.pc quilt unapplied --quiltrc - >/dev/null && echo 'Patch series not fully applied'; test $$? -eq 1
+       @$(stamp)
+
+$(STAMPS_DIR)/source_%: SOURCE_DIR=$(BUILD_DIR)/source
+$(STAMPS_DIR)/source_%: DIR=$(BUILD_DIR)/source_$*
+$(STAMPS_DIR)/source_%: $(STAMPS_DIR)/source
+       mkdir -p '$(BUILD_DIR)'
+       rm -rf '$(DIR)'
+       $(call copy_source,$(DIR))
+       $(call patch_cmd,$*)
+       @$(stamp)
+.PRECIOUS: $(STAMPS_DIR)/source_%
+
+$(STAMPS_DIR)/source_none: DIR=$(BUILD_DIR)/source_none
+$(STAMPS_DIR)/source_none: $(STAMPS_DIR)/source
+       mkdir -p '$(BUILD_DIR)'
+       rm -f '$(DIR)'
+       ln -s '$(CURDIR)' '$(DIR)'
+       @$(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_$(FEATURESET)
+$(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DIR=$(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+$(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(STAMPS_DIR)/source_$(FEATURESET) $(BUILD_DIR)/config.$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+       rm -rf '$(DIR)'
+       mkdir '$(DIR)'
+       cp '$(CONFIG)' '$(DIR)/.config'
+       echo 'override ARCH = $(KERNEL_ARCH)' >> '$(DIR)/.kernelvariables'
+       echo 'override KERNELRELEASE = $(ABINAME)$(LOCALVERSION_IMAGE)' >> '$(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_KERNEL += $(CFLAGS_KERNEL)' >> '$(DIR)/.kernelvariables'
+       echo 'CFLAGS_MODULE += $(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
+       @$(stamp)
+
+$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DIR=$(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(STAMPS_DIR)/setup_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+
+$(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR):
+       +$(MAKE_CLEAN) -C '$(DIR)' $(BUILD_TARGET)
+       debian/bin/buildcheck.py $(DIR) $(ARCH) $(FEATURESET) $(FLAVOUR)
+       @$(stamp)
+
+$(STAMPS_DIR)/build-doc: DIR=$(BUILD_DIR)/build-doc
+$(STAMPS_DIR)/build-doc: $(STAMPS_DIR)/source
+       rm -rf $(DIR)
+       mkdir -p $(DIR)
+       +$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' xmldocs
+       +$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' htmldocs mandocs
+       @$(stamp)
+
+install-base:
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       dh_installdocs $(INSTALLDOCS_ARGS)
+endif
+       dh_installchangelogs
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_gencontrol -- $(GENCONTROL_ARGS)
+       dh_md5sums
+       dh_builddeb -- -Zxz $(BUILDDEB_ARGS)
+
+install-dummy:
+       dh_testdir
+       dh_testroot
+       dh_prep
+       +$(MAKE_SELF) install-base
+
+install-doc: PACKAGE_NAME = $(SOURCE_PACKAGE_NAME)-doc-$(VERSION)
+install-doc: DIR = $(BUILD_DIR)/build-doc
+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)
+       set -o pipefail; \
+       find CREDITS MAINTAINERS README REPORTING-BUGS Documentation \
+               -name '.gitignore' -prune -o -name DocBook -prune -o \
+               -name '*.rst' -prune -o -path Documentation/media -prune -o \
+               -path Documentation/sphinx -prune -o \
+               -name 'Makefile*' -prune -o \
+               -print | \
+       cpio -pd --preserve-modification-time '$(CURDIR)/$(OUT_DIR)'
+# Some HTML pages are generated by xmlto from DocBook XML and some by
+# Sphinx from reStructedText.  Unfortunately these each generate their
+# own top level index.html, so we put them in two separate
+# subdirectories until the conversion to RST is complete.
+       set -o pipefail; \
+       cd $(DIR)/Documentation/DocBook; \
+       find * -name '*.html' -print | \
+       cpio -pd --preserve-modification-time '$(CURDIR)/$(OUT_DIR)/html/oldstyle'
+       set -o pipefail; \
+       cd $(DIR)/Documentation/output; \
+       find * -name '*.rst' -prune -o -name objects.inv -prune \
+               -o -name xml -prune -o -print | \
+       cpio -pd --preserve-modification-time '$(CURDIR)/$(OUT_DIR)/html/newstyle'
+       gzip -9nqfr $(OUT_DIR)/Documentation
+       +$(MAKE_SELF) install-base
+
+install-manual: PACKAGE_NAME = $(SOURCE_PACKAGE_NAME)-manual-$(VERSION)
+install-manual: DIR=$(BUILD_DIR)/build-doc
+install-manual: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-manual: $(STAMPS_DIR)/build-doc
+       dh_prep
+# Some manual pages are generated multiple times with different
+# metadata, and need to be de-duplicated.  This matches what the
+# upstream installmandocs target does, except that we use
+# dh_installman.
+       set -o pipefail; \
+       find $(DIR)/Documentation/DocBook/man/ -name '*.9.gz' -printf '%h %f\n' | \
+               sort -k 2 -k 1 | uniq -f 1 | sed -e 's: :/:' | \
+               xargs dh_installman
+       +$(MAKE_SELF) install-base
+
+install-headers_$(ARCH): PACKAGE_NAMES = linux-headers-$(ABINAME)-all linux-headers-$(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-common-headers_$(FEATURESET): PACKAGE_NAME = linux-headers-$(ABINAME)-common$(LOCALVERSION)
+install-common-headers_$(FEATURESET): PACKAGE_NAME_KBUILD = linux-kbuild-$(VERSION)
+install-common-headers_$(FEATURESET): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-common-headers_$(FEATURESET): BASE_DIR = /usr/src/$(PACKAGE_NAME)
+install-common-headers_$(FEATURESET): SOURCE_DIR = $(BUILD_DIR)/source_$(FEATURESET)
+install-common-headers_$(FEATURESET): DIR = debian/$(PACKAGE_NAME)/$(BASE_DIR)
+install-common-headers_$(FEATURESET): $(STAMPS_DIR)/source_$(FEATURESET)
+       dh_testdir
+       dh_testroot
+       dh_prep
+
+       set -o pipefail; \
+       cd $(SOURCE_DIR); \
+       ( \
+               echo Makefile; \
+               for arch in $(ALL_KERNEL_ARCHES); do \
+                       find arch/$$arch -maxdepth 1 -name 'Makefile*' -print; \
+                       find arch/$$arch \( -name 'module.lds' -o -name 'Kbuild.platforms' -o -name 'Platform' \) -print; \
+                       find $$(find arch/$$arch \( -name include -o -name scripts \) -type d -print) -print; \
+               done; \
+               find include -print; \
+       ) \
+       | \
+       cpio -pd --preserve-modification-time '$(CURDIR)/$(DIR)'
+
+       dh_link /usr/lib/$(PACKAGE_NAME_KBUILD)/scripts $(BASE_DIR)/scripts
+
+       +$(MAKE_SELF) install-base
+
+install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): REAL_VERSION = $(ABINAME)$(LOCALVERSION)
+install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_NAME = linux-headers-$(REAL_VERSION)
+install-headers_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_NAME_COMMON = linux-headers-$(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_$(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)
+       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)/include $(DIR)/arch/$(KERNEL_ARCH)
+       find $(DIR) -name '*.cmd' -delete
+
+       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
+
+       @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
+       @echo '%/: 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
+
+       +$(MAKE_SELF) install-base INSTALLDOCS_ARGS="--link-doc=$(PACKAGE_NAME_COMMON)"
+
+install-libc-dev_$(ARCH): PACKAGE_NAME = linux-libc-dev
+install-libc-dev_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
+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 -p $(DIR)
+       +$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' headers_check ARCH=$(KERNEL_ARCH)
+       +$(MAKE_CLEAN) 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 {} +
+
+# Move include/asm to arch-specific directory
+       mkdir -p $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)
+       mv $(OUT_DIR)/include/asm $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)/
+       test ! -d $(OUT_DIR)/include/arch || \
+               mv $(OUT_DIR)/include/arch $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)/
+
+       +$(MAKE_SELF) install-base
+
+install-support: PACKAGE_NAME = $(SOURCE_PACKAGE_NAME)-support-$(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 -R debian/installer $(PACKAGE_DIR)$(PACKAGE_ROOT)/installer
+       cp debian/lib/python/debian_linux/*.py $(PACKAGE_DIR)$(PACKAGE_ROOT)/lib/python/debian_linux
+       dh_python3
+       dh_link $(PACKAGE_ROOT) /usr/src/$(PACKAGE_NAME)
+       +$(MAKE_SELF) install-base
+
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR): REAL_VERSION = $(ABINAME)$(LOCALVERSION)
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_NAME = $(IMAGE_PACKAGE_NAME)
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR): PACKAGE_DIR = debian/$(PACKAGE_NAME)
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR): INSTALL_DIR = $(PACKAGE_DIR)/boot
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DIR = $(BUILD_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(STAMPS_DIR)/build_$(ARCH)_$(FEATURESET)_$(FLAVOUR)
+
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR):
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_installdirs 'boot'
+ifeq ($(IMAGE_FILE),vmlinux)
+# This is the unprocessed ELF image, so we need to strip debug symbols
+       $(CROSS_COMPILE)objcopy --strip-debug '$(DIR)/vmlinux' $(INSTALL_DIR)/$(IMAGE_INSTALL_STEM)-$(REAL_VERSION)
+else
+       install -m644 '$(DIR)/$(IMAGE_FILE)' $(INSTALL_DIR)/$(IMAGE_INSTALL_STEM)-$(REAL_VERSION)
+endif
+       +$(MAKE_SELF) \
+         install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_dt \
+         DIR='$(DIR)' PACKAGE_DIR='$(PACKAGE_DIR)' REAL_VERSION='$(REAL_VERSION)'
+       +$(MAKE_CLEAN) -C $(DIR) modules_install DEPMOD='$(CURDIR)/debian/bin/no-depmod' INSTALL_MOD_PATH='$(CURDIR)'/$(PACKAGE_DIR) INSTALL_MOD_STRIP=1
+ifeq ($(DEBUG),True)
+       set -o pipefail; \
+       find $(PACKAGE_DIR) -name '*.ko' | sed 's|$(PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/kernel/||' | while read module ; do \
+         $(CROSS_COMPILE)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)
+       rm -f $(PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/build
+       rm -f $(PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/source
+       rm $(PACKAGE_DIR)/lib/firmware -rf
+       +$(MAKE_SELF) \
+         install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_bug \
+         PACKAGE_DIR='$(PACKAGE_DIR)' PACKAGE_NAME='$(PACKAGE_NAME)' REAL_VERSION='$(REAL_VERSION)'
+       dh_strip --no-automatic-dbgsym -Xvmlinux
+       +$(MAKE_SELF) install-base GENCONTROL_ARGS='-Vkernel:Recommends='"$$( \
+               if grep -q '^CONFIG_SMP=y' $(DIR)/.config; then \
+                       printf irqbalance,; \
+               fi)"
+
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_dt: DT_INSTALL_DIR = $(PACKAGE_DIR)/usr/lib/linux-image-$(REAL_VERSION)
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_dt:
+ifneq ($(filter arm64 armel armhf,$(ARCH)),)
+       +$(MAKE_CLEAN) -C $(DIR) dtbs
+       +$(MAKE_CLEAN) -C $(DIR) dtbs_install INSTALL_DTBS_PATH=$(CURDIR)/$(DT_INSTALL_DIR)
+endif
+ifneq ($(filter powerpc powerpcspe ppc64,$(ARCH)),)
+       +$(MAKE_CLEAN) -C '$(DIR)' bootwrapper_install \
+         WRAPPER_OBJDIR='$(CURDIR)/$(DT_INSTALL_DIR)' \
+         WRAPPER_DTSDIR='$(CURDIR)/$(DT_INSTALL_DIR)'/dts \
+         WRAPPER_BINDIR='$(CURDIR)/$(DT_INSTALL_DIR)'
+endif
+
+install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_bug:
+       dh_installdirs usr/share/bug/$(PACKAGE_NAME)
+       dh_install debian/templates/image.bug/* usr/share/bug/$(PACKAGE_NAME)
+       chmod 755 $(PACKAGE_DIR)/usr/share/bug/$(PACKAGE_NAME)/script
+       printf "RELEASE='$(REAL_VERSION)'\nDISTRIBUTOR='$(DISTRIBUTOR)'\nSOURCEVERSION='$(SOURCEVERSION)'\nPACKAGE_NAME='$(PACKAGE_NAME)'\nPACKAGE_VERSION='$(SOURCEVERSION)'" > $(PACKAGE_DIR)/usr/share/bug/$(PACKAGE_NAME)/info
+
+install-image-dbg_$(ARCH)_$(FEATURESET)_$(FLAVOUR): REAL_VERSION = $(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)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_installdirs usr/lib/debug usr/lib/debug/boot usr/share/lintian/overrides/
+       dh_lintian
+       install -m644 $(DIR)/vmlinux $(DEBUG_DIR)/boot/vmlinux-$(REAL_VERSION)
+       +$(MAKE_CLEAN) -C $(DIR) modules_install DEPMOD='$(CURDIR)/debian/bin/no-depmod' 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
+ifeq ($(VDSO),True)
+       +$(MAKE_CLEAN) -C $(DIR) vdso_install INSTALL_MOD_PATH='$(CURDIR)'/$(DEBUG_DIR)
+# Create .build-id links.  Some architectures already do so, but in the
+# wrong place, so delete those first.
+       rm -rf $(DEBUG_DIR)/lib/modules/$(REAL_VERSION)/vdso/.build-id
+       find $(DEBUG_DIR)/lib/modules/$(REAL_VERSION)/vdso/ -type f | while read vdso; do \
+               if buildid="$$(readelf -n "$$vdso" | sed -rne 's/^\s+Build ID: (.*)$$/\1/p')" && [ "$$buildid" ]; then \
+                       mkdir -p "$(DEBUG_DIR)/.build-id/$${buildid:0:2}"; \
+                       ln -s -r "$$vdso" "$(DEBUG_DIR)/.build-id/$${buildid:0:2}/$${buildid:2}.debug"; \
+               fi; \
+       done
+endif
+# Add symlinks to vmlinux from the locations expected by kdump-tools,
+# systemtap and others
+       ln -s boot/vmlinux-$(REAL_VERSION) $(DEBUG_DIR)/
+       mkdir -p $(DEBUG_DIR)/lib/modules/$(REAL_VERSION)
+       ln -s ../../../boot/vmlinux-$(REAL_VERSION) $(DEBUG_DIR)/lib/modules/$(REAL_VERSION)/vmlinux
+       +$(MAKE_SELF) install-base
+
+install-udeb_$(ARCH): export KW_DEFCONFIG_DIR=debian/installer
+install-udeb_$(ARCH): export KW_CONFIG_DIR=debian/installer/$(ARCH)
+install-udeb_$(ARCH): DH_OPTIONS=$(PACKAGE_NAMES:%=-p%)
+install-udeb_$(ARCH):
+       dh_testdir
+       dh_prep
+ifeq ($(UDEB_UNSIGNED_TEST_BUILD),True)
+# kernel-wedge doesn't expect a -unsigned suffix; work around that for now
+       while read flavour; do \
+               rm -f debian/linux-image-$(ABINAME)-$$flavour; \
+               ln -s linux-image-$(ABINAME)-$$flavour-unsigned \
+                       debian/linux-image-$(ABINAME)-$$flavour; \
+       done < <(awk '!/^#/ { print $$3 }' $(KW_CONFIG_DIR)/kernel-versions)
+endif
+       kernel-wedge install-files $(ABINAME)
+       kernel-wedge check $(PACKAGE_NAMES)
+       dh_fixperms
+ifeq ($(UDEB_UNSIGNED_TEST_BUILD),False)
+       dh_gencontrol
+       dh_builddeb
+endif
+
+install-source: PACKAGE_NAME = $(SOURCE_PACKAGE_NAME)-source-$(VERSION)
+install-source: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-source: $(BUILD_DIR)/$(SOURCE_PACKAGE_NAME)-source-$(UPSTREAMVERSION).tar.xz $(foreach FEATURESET,$(filter-out none,$(ALL_FEATURESETS)),$(BUILD_DIR)/linux-patch-$(UPSTREAMVERSION)-$(FEATURESET).patch.xz)
+       dh_testdir
+       dh_testroot
+       dh_installdirs /usr/src/linux-config-$(UPSTREAMVERSION)
+       dh_install '$^' /usr/src
+# Include our kernel config files, but with the module signing
+# configuration fixed to work for custom kernels.
+       for triplet in $(ALL_TRIPLETS); do \
+         sed '/CONFIG_\(MODULE_SIG_\(ALL\|KEY\)\|SYSTEM_TRUSTED_KEYS\)[ =]/d' $(BUILD_DIR)/build_$$triplet/.config | xz -c >debian/$(PACKAGE_NAME)/usr/src/linux-config-$(UPSTREAMVERSION)/config.$$triplet.xz; \
+       done
+# We don't want to recompress, but -Znone is not compatible with older
+# tools and is currently rejected by dak.  -Zgzip -z0 (uncompressed
+# data.tar.gz!) makes dpkg and dak happy, but is incomaptible with
+# other things (#725492).  So use the fastest real gzip mode.
+       +$(MAKE_SELF) install-base BUILDDEB_ARGS='-Zgzip -z1'
+
+define make-tools
++mkdir -p $(BUILD_DIR)/build-tools/$(1) && $(MAKE_CLEAN) -C $(BUILD_DIR)/build-tools/$(1) -f $(CURDIR)/debian/rules.d/$(1)/Makefile top_srcdir=$(CURDIR) top_rulesdir=$(CURDIR)/debian/rules.d OUTDIR=$(1) VERSION=$(VERSION)
+endef
+
+$(STAMPS_DIR)/build-tools:
+       $(call make-tools,.)
+       @$(stamp)
+
+install-kbuild: PACKAGE_NAME = linux-kbuild-$(VERSION)
+install-kbuild: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-kbuild: PREFIX_DIR = /usr/lib/$(PACKAGE_NAME)
+install-kbuild: DIR = $(CURDIR)/debian/$(PACKAGE_NAME)
+install-kbuild: $(STAMPS_DIR)/build-tools
+       dh_testdir
+       dh_testroot
+       dh_prep
+       $(call make-tools,scripts) install DESTDIR=$(DIR) prefix=$(PREFIX_DIR)
+       dh_link $(PREFIX_DIR) /usr/src/$(PACKAGE_NAME)
+       dh_installchangelogs
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       dh_installdocs
+endif
+       dh_strip
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+install-cpupower: DH_OPTIONS = -plinux-cpupower -plibcpupower1 -plibcpupower-dev
+install-cpupower: DIR = $(CURDIR)/debian/cpupower-tmp
+install-cpupower: $(STAMPS_DIR)/build-tools
+       dh_testdir
+       dh_testroot
+       dh_prep
+       $(call make-tools,tools/power/cpupower) install DESTDIR=$(DIR)
+ifneq ($(filter i386 amd64 x32,$(DEB_HOST_ARCH)),)
+       $(call make-tools,tools/power/x86) install DESTDIR=$(DIR)
+       echo >> debian/linux-cpupower.substvars 'cpupower:Arch-Description='\
+'The turbostat command reports topology, frequency, idle power-state$${Newline}'\
+'statistics, temperature and power consumption information as provided$${Newline}'\
+'by the CPU.$${Newline}'\
+'$${Newline}'\
+'The x86_energy_perf_policy command sets a general policy on some Intel$${Newline}'\
+'CPU models for the relative importance of performance versus energy$${Newline}'\
+'savings.'
+endif
+       dh_install --sourcedir=$(DIR)
+       dh_installchangelogs
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       dh_installdocs
+       dh_installman
+endif
+       dh_strip
+       dh_compress
+       dh_fixperms
+       dh_makeshlibs
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+install-perf: PACKAGE_NAME = linux-perf-$(VERSION)
+install-perf: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-perf: DIR = $(CURDIR)/debian/$(PACKAGE_NAME)
+install-perf: $(STAMPS_DIR)/build-tools
+       dh_testdir
+       dh_testroot
+       dh_prep
+       $(call make-tools,tools/perf) install DESTDIR=$(DIR)
+       dh_perl /usr/share/perf_$(VERSION)-core/scripts/perl/Perf-Trace-Util/lib/
+       dh_python2 /usr/share/perf_$(VERSION)-core/scripts/python/Perf-Trace-Util/lib/
+       dh_installchangelogs
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       dh_installdocs
+endif
+       dh_lintian
+       dh_strip
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_shlibdeps -Xperf-read-vdso
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+install-usbip: DH_OPTIONS = -plibusbip-dev -pusbip
+install-usbip: DIR = $(CURDIR)/debian/usbip-tmp
+install-usbip: $(STAMPS_DIR)/build-tools
+       dh_testdir
+       dh_testroot
+       dh_prep
+       $(call make-tools,tools/usb/usbip) install DESTDIR=$(DIR)
+       dh_install --sourcedir=$(DIR)
+       dh_installchangelogs
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       dh_installdocs
+       dh_installman
+endif
+       dh_lintian
+       dh_strip
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_shlibdeps
+       VERSION=$$(sed -ne 's,^#define PACKAGE_VERSION "\(.*\)"$$,\1,p' $(BUILD_DIR)/build-tools/tools/usb/usbip/config.h) && \
+       test -n "$$VERSION" -a -n "$(DEB_VERSION)" && \
+       dh_gencontrol -- -v$$VERSION+$(DEB_VERSION)
+       dh_md5sums
+       dh_builddeb
+
+install-hyperv-daemons: PACKAGE_NAME = hyperv-daemons
+install-hyperv-daemons: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-hyperv-daemons: DIR = $(CURDIR)/debian/$(PACKAGE_NAME)
+install-hyperv-daemons: $(STAMPS_DIR)/build-tools
+       dh_testdir
+       dh_testroot
+       dh_prep
+       $(call make-tools,tools/hv) install DESTDIR=$(DIR)
+       dh_install
+       for service in fcopy kvp vss; do \
+               install -D -m755 debian/hyperv-daemons.hv-$$service-daemon.init \
+                       $(DIR)/etc/init.d/hyperv-daemons.hv-$$service-daemon \
+                       || break; \
+       done
+       dh_installchangelogs
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       dh_installdocs
+endif
+       dh_systemd_enable
+       for service in fcopy kvp vss; do \
+               dh_installinit --name hyperv-daemons.hv-$$service-daemon \
+                       --onlyscripts \
+                       || break; \
+       done
+       dh_systemd_start
+       dh_lintian
+       dh_strip
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+install-liblockdep: DH_OPTIONS = -pliblockdep$(VERSION) -pliblockdep-dev
+install-liblockdep: DIR = $(CURDIR)/debian/liblockdep-tmp
+install-liblockdep: $(STAMPS_DIR)/build-tools
+       dh_testdir
+       dh_testroot
+       dh_prep
+       $(call make-tools,tools/lib/lockdep) install DESTDIR=$(DIR)
+       env -u DH_OPTIONS dh_install -pliblockdep$(VERSION) --sourcedir=$(DIR) \
+               'usr/lib/*/liblockdep.so.*'
+       dh_install --sourcedir=$(DIR)
+       dh_installchangelogs
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       dh_installdocs
+endif
+       dh_strip
+       dh_compress
+       dh_fixperms
+       env -u DH_OPTIONS dh_makeshlibs -pliblockdep$(VERSION) \
+               liblockdep$(VERSION)
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+install-lockdep: PACKAGE_NAME = lockdep
+install-lockdep: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-lockdep: DIR = $(CURDIR)/debian/$(PACKAGE_NAME)
+install-lockdep:
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_installdirs
+# Upstream lockdep preload script is not suitable for installation
+       sed 's/@VERSION@/$(VERSION)/' debian/rules.d/tools/lib/lockdep/lockdep.in \
+               > $(DIR)/usr/bin/lockdep
+       chmod 755 $(DIR)/usr/bin/lockdep
+       dh_installchangelogs
+ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
+       dh_installdocs
+endif
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+# vim: filetype=make
diff --git a/source/format b/source/format
new file mode 100644 (file)
index 0000000..c3d9f24
--- /dev/null
@@ -0,0 +1,2 @@
+3.0 (quilt)
+
diff --git a/source/include-binaries b/source/include-binaries
new file mode 100644 (file)
index 0000000..f9b9653
--- /dev/null
@@ -0,0 +1,2 @@
+debian/upstream/rt-signing-key.pgp
+debian/upstream/signing-key.pgp
diff --git a/source/options b/source/options
new file mode 100644 (file)
index 0000000..3badfe8
--- /dev/null
@@ -0,0 +1,2 @@
+compression = "xz"
+tar-ignore = debian/*.local
diff --git a/templates/control.docs.in b/templates/control.docs.in
new file mode 100644 (file)
index 0000000..9b16f09
--- /dev/null
@@ -0,0 +1,33 @@
+Package: @source_package@-doc-@version@
+Build-Profiles: <!stage1 !nodoc>
+Architecture: all
+Depends: ${misc:Depends}
+Section: doc
+Multi-Arch: foreign
+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: @source_package@-manual-@version@
+Build-Profiles: <!stage1 !nodoc>
+Architecture: all
+Depends: ${misc:Depends}
+Section: doc
+Provides: linux-manual
+Conflicts: linux-manual
+Replaces: linux-manual
+Multi-Arch: foreign
+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.
+
diff --git a/templates/control.extra.in b/templates/control.extra.in
new file mode 100644 (file)
index 0000000..b0f3e86
--- /dev/null
@@ -0,0 +1,26 @@
+Package: linux-compiler-gcc-6-arm
+Build-Profiles: <!stage1>
+Depends: gcc-6, ${misc:Depends}
+Architecture: armel armhf
+Multi-Arch: foreign
+Description: Compiler for Linux on ARM (meta-package)
+ This package depends on gcc 6 of the appropriate architecture for
+ Linux on armel and armhf.
+
+Package: linux-compiler-gcc-6-s390
+Build-Profiles: <!stage1>
+Depends: gcc-6, ${misc:Depends}
+Architecture: s390 s390x
+Multi-Arch: foreign
+Description: Compiler for Linux on IBM zSeries (meta-package)
+ This package depends on gcc 6 of the appropriate architecture for
+ Linux on s390 and s390x.
+
+Package: linux-compiler-gcc-6-x86
+Build-Profiles: <!stage1>
+Depends: gcc-6, ${misc:Depends}
+Architecture: amd64 i386 x32
+Multi-Arch: foreign
+Description: Compiler for Linux on x86 (meta-package)
+ This package depends on gcc 6 of the appropriate architecture for
+ Linux on amd64, i386 and x32.
diff --git a/templates/control.headers.arch.in b/templates/control.headers.arch.in
new file mode 100644 (file)
index 0000000..75bfd50
--- /dev/null
@@ -0,0 +1,16 @@
+Package: linux-headers-@abiname@-all
+Build-Profiles: <!stage1>
+Depends: linux-headers-@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-@abiname@-all-@arch@
+Build-Profiles: <!stage1>
+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.
+
diff --git a/templates/control.headers.featureset.in b/templates/control.headers.featureset.in
new file mode 100644 (file)
index 0000000..d9e52cb
--- /dev/null
@@ -0,0 +1,11 @@
+Package: linux-headers-@abiname@-common@localversion@
+Build-Profiles: <!stage1>
+Architecture: all
+Depends: ${misc:Depends}
+Multi-Arch: foreign
+Description: Common header files for Linux @abiname@@localversion@
+ This package provides the common kernel header files for Linux kernel
+ version @abiname@@featureset_desc@, generally used for building
+ out-of-tree kernel modules.  To obtain a complete set of headers you
+ also need to install the linux-headers-@abiname@-(flavour) package,
+ matching the flavour of the kernel you intend the build for.
diff --git a/templates/control.headers.in b/templates/control.headers.in
new file mode 100644 (file)
index 0000000..e399b8f
--- /dev/null
@@ -0,0 +1,10 @@
+Package: linux-headers-@abiname@@localversion@
+Build-Profiles: <!stage1>
+Depends: linux-headers-@abiname@-common@localversion_headers@ (= ${binary:Version}), linux-kbuild-@version@, ${misc:Depends}
+Description: Header files for Linux @abiname@@localversion@
+ This package provides the architecture-specific kernel header files
+ for Linux kernel @abiname@@localversion@, generally
+ used for building out-of-tree kernel modules.  These files are going to be
+ installed into /usr/src/linux-headers-@abiname@@localversion@, and can
+ be used for building modules that load into the kernel provided by the
+ linux-image-@abiname@@localversion@ package.
diff --git a/templates/control.image-dbg.in b/templates/control.image-dbg.in
new file mode 100644 (file)
index 0000000..7963f20
--- /dev/null
@@ -0,0 +1,8 @@
+Package: linux-image-@abiname@@localversion@-dbg
+Build-Profiles: <!stage1>
+Depends: ${misc:Depends}
+Section: debug
+Priority: extra
+Description: Debug symbols for linux-image-@abiname@@localversion@
+ This package provides the detached debug symbols for the Linux kernel
+ and modules in linux-image-@abiname@@localversion@.
diff --git a/templates/control.image-unsigned.in b/templates/control.image-unsigned.in
new file mode 100644 (file)
index 0000000..6a1fb1f
--- /dev/null
@@ -0,0 +1,10 @@
+Package: linux-image-@abiname@@localversion@-unsigned
+Build-Profiles: <!stage1>
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-@version@, debian-kernel-handbook
+Conflicts: linux-image-@abiname@@localversion@
+Replaces: linux-image-@abiname@@localversion@
+Provides: linux-image-@abiname@@localversion@
+Description: Linux @upstreamversion@ for @class@
+ The Linux kernel @upstreamversion@ and modules for use on @longclass@.
diff --git a/templates/control.image.in b/templates/control.image.in
new file mode 100644 (file)
index 0000000..266757f
--- /dev/null
@@ -0,0 +1,7 @@
+Package: linux-image-@abiname@@localversion@
+Build-Profiles: <!stage1>
+Depends: kmod, linux-base (>= 4.3~), ${misc:Depends}
+Recommends: firmware-linux-free, ${kernel:Recommends}
+Suggests: linux-doc-@version@, debian-kernel-handbook
+Description: Linux @upstreamversion@ for @class@
+ The Linux kernel @upstreamversion@ and modules for use on @longclass@.
diff --git a/templates/control.libc-dev.in b/templates/control.libc-dev.in
new file mode 100644 (file)
index 0000000..6e975e4
--- /dev/null
@@ -0,0 +1,9 @@
+Package: linux-libc-dev
+Section: devel
+Depends: ${misc:Depends}
+# Remove this Provides when #826519 is closed
+Provides: linux-kernel-headers
+Multi-Arch: same
+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 libc and other system libraries.
diff --git a/templates/control.main.in b/templates/control.main.in
new file mode 100644 (file)
index 0000000..80794db
--- /dev/null
@@ -0,0 +1,26 @@
+Package: @source_package@-source-@version@
+Build-Profiles: <!stage1>
+Architecture: all
+Section: kernel
+Depends: binutils, xz-utils, ${misc:Depends}
+Recommends: libc6-dev | libc-dev, gcc, make, bc
+Suggests: libncurses-dev | ncurses-dev, libqt4-dev, pkg-config
+Multi-Arch: foreign
+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: @source_package@-support-@abiname@
+Build-Profiles: <!stage1>
+Architecture: all
+Section: devel
+Depends: ${python3:Depends}, ${misc:Depends}
+Multi-Arch: foreign
+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.
+
diff --git a/templates/control.source.in b/templates/control.source.in
new file mode 100644 (file)
index 0000000..99ae415
--- /dev/null
@@ -0,0 +1,69 @@
+Section: kernel
+Priority: optional
+Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
+Uploaders: Bastian Blank <waldi@debian.org>, maximilian attems <maks@debian.org>, Ben Hutchings <ben@decadent.org.uk>, Salvatore Bonaccorso <carnil@debian.org>
+Standards-Version: 3.9.8
+Build-Depends:
+ debhelper (>= 10.1~), dh-exec,
+# used to run debian/bin/*.py
+ python3:any,
+# used by debian/rules.real to prepare the source
+ quilt,
+# used by debian/rules.real to build linux-doc and linux-headers
+ cpio <!stage1>,
+# used by upstream to compress kernel and by debian/rules.real to build linux-source
+ xz-utils <!stage1>,
+# used by debian/rules.real to build udebs
+ kernel-wedge (>= 2.93~) <!stage1>,
+# used by kernel-wedge (only on Linux, thus not declared as a dependency)
+ kmod <!stage1>,
+# used by upstream to build include/generated/timeconst.h
+ bc <!stage1>,
+# used by upstream to build signing tools and to process certificates
+# - libssl-dev arch-qualification is a workaround for #827628 and #827633
+ libssl-dev:native <!stage1>, libssl-dev [linux-any] <!stage1 !pkg.linux.notools cross>,
+# - openssl needs to run on the host; need :native for older versions that do
+#   not have M-A: allowed but need unqualified name for newer versions
+ openssl (>= 1.1.0-1~) <!stage1> | openssl:native <!stage1>,
+# used by upstream to build perf documentation
+ asciidoc-base <!stage1 !nodoc !pkg.linux.notools> | asciidoc <!stage1 !nodoc !pkg.linux.notools>,
+ xmlto <!stage1 !nodoc !pkg.linux.notools>,
+# used by upstream to build perf
+ bison <!stage1 !pkg.linux.notools !nopython>,
+# - flex needs to run on the host; we have the same problem as for openssl
+ flex (>= 2.6.1-1.1~) <!stage1 !pkg.linux.notools !nopython> | flex:native <!stage1 !pkg.linux.notools !nopython>,
+ gcc-multilib [amd64 ppc64 s390x sparc64] <!stage1 !pkg.linux.notools !nopython>,
+ libaudit-dev <!stage1 !pkg.linux.notools !nopython>,
+ libbabeltrace-dev (>= 1.5.0) <!stage1 !pkg.linux.notools !nopython>,
+ libbabeltrace-ctf-dev (>= 1.5.0) <!stage1 !pkg.linux.notools !nopython>,
+ libdw-dev <!stage1 !pkg.linux.notools !nopython>,
+ libelf-dev <!stage1 !pkg.linux.notools !nopython>,
+ libiberty-dev <!stage1 !pkg.linux.notools !nopython>,
+ libnewt-dev <!stage1 !pkg.linux.notools !nopython>,
+ libnuma-dev [amd64 arm64 hppa i386 mips mips64 mips64el mipsel mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el powerpc powerpcspe ppc64 ppc64el sparc x32] <!stage1 !pkg.linux.notools !nopython>,
+ libperl-dev <!stage1 !pkg.linux.notools !nopython>,
+ libunwind8-dev [amd64 armel armhf arm64 i386] <!stage1 !pkg.linux.notools !nopython>,
+ python-dev <!stage1 !pkg.linux.notools !nopython>,
+# used by upstream to build usbip
+ autoconf <!stage1 !pkg.linux.notools>,
+ automake <!stage1 !pkg.linux.notools>,
+ libtool <!stage1 !pkg.linux.notools>,
+ libglib2.0-dev <!stage1 !pkg.linux.notools>,
+ libudev-dev <!stage1 !pkg.linux.notools>,
+ libwrap0-dev <!stage1 !pkg.linux.notools>,
+# used by debian/rules.d/tools/usb/usbip to build usbip
+ rsync <!stage1 !pkg.linux.notools>,
+# used by upstream to build cpupower
+ libpci-dev <!stage1 !pkg.linux.notools>,
+# used by debian/rules.real to build linux-perf and linux-support
+ dh-python <!stage1>,
+Build-Depends-Indep:
+# used by debian/rules.real to build linux-source
+ patchutils <!stage1>,
+# used by upstream to build documentation
+ python-sphinx <!stage1 !nodoc>,
+ python-sphinx-rtd-theme <!stage1 !nodoc>,
+ xmlto <!stage1 !nodoc>,
+Vcs-Git: https://anonscm.debian.org/git/kernel/linux.git
+Vcs-Browser: https://anonscm.debian.org/cgit/kernel/linux.git
+Homepage: https://www.kernel.org/
diff --git a/templates/control.tools.in b/templates/control.tools.in
new file mode 100644 (file)
index 0000000..735c88c
--- /dev/null
@@ -0,0 +1,139 @@
+Package: linux-kbuild-@version@
+Build-Profiles: <!stage1 !pkg.linux.notools>
+Architecture: linux-any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Multi-Arch: foreign
+Description: Kbuild infrastructure for Linux @version@
+ This package provides the kbuild infrastructure for the headers packages for Linux kernel version @version@.
+
+Package: linux-cpupower
+Build-Profiles: <!stage1 !pkg.linux.notools>
+Section: admin
+Architecture: linux-any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: CPU power management tools for Linux
+ The cpupower command allows inspection and control of cpufreq and
+ cpuidle tunables for hardware that support these features.  It
+ replaces "cpufreq-info" and "cpufreq-set" in cpufrequtils.
+ .
+ ${cpupower:Arch-Description}
+
+Package: libcpupower1
+Build-Profiles: <!stage1 !pkg.linux.notools>
+Section: libs
+Architecture: linux-any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: CPU frequency and voltage scaling tools for Linux (libraries)
+ This package contains the shared library.
+
+Package: libcpupower-dev
+Build-Profiles: <!stage1 !pkg.linux.notools>
+Section: libdevel
+Architecture: linux-any
+Depends: ${shlibs:Depends}, ${misc:Depends}, libcpupower1 (= ${binary:Version})
+Provides: libcpufreq-dev
+Conflicts: libcpufreq-dev
+Replaces: libcpufreq-dev
+Description: CPU frequency and voltage scaling tools for Linux (development files)
+ This package contains the 'power/cpupower' headers and library shared objects.
+
+Package: linux-perf-@version@
+Build-Profiles: <!stage1 !pkg.linux.notools !nopython>
+Section: devel
+Architecture: alpha amd64 arm64 armel armhf hppa i386 mips mips64 mips64el mipsel mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el powerpc powerpcspe ppc64 ppc64el s390 s390x sh4 sparc sparc64
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ${python:Depends}
+Recommends: linux-base
+Provides: linux-tools-@version@
+Conflicts: linux-tools-@version@
+Replaces: linux-tools-@version@
+Suggests: linux-doc-@version@
+Description: Performance analysis tools for Linux @version@
+ This package contains the 'perf' performance analysis tools for Linux
+ kernel version @version@.
+ .
+ The linux-base package contains a 'perf' command which will invoke the
+ appropriate version for the running kernel.
+
+Package: libusbip-dev
+Build-Profiles: <!stage1 !pkg.linux.notools>
+Architecture: linux-any
+Depends: ${misc:Depends}
+Section: libdevel
+Description: USB device sharing system over IP network (development files)
+ USB/IP is a system for sharing USB devices over the network.
+ .
+ This package provides headers for the libusbip library and
+ the library itself for static linking.
+
+Package: usbip
+Build-Profiles: <!stage1 !pkg.linux.notools>
+Architecture: linux-any
+Depends: usbutils, ${shlibs:Depends}, ${misc:Depends}
+Section: admin
+Description: USB device sharing system over IP network
+ USB/IP is a system for sharing USB devices over the network.
+ .
+ To share USB devices between computers with their full
+ functionality, USB/IP encapsulates "USB requests" into IP
+ packets and transmits them between computers.
+ .
+ Original USB device drivers and applications can be used
+ for remote USB devices without any modification of them. A
+ computer can use remote USB devices as if they were
+ directly attached.
+ .
+ Currently USB/IP provides no access control or encryption.
+ It should only be used in trusted environments.
+ .
+ This package provides the server component 'usbipd' and the
+ client tool 'usbip'.
+
+Package: hyperv-daemons
+Build-Profiles: <!stage1 !pkg.linux.notools>
+Architecture: i386 amd64 x32
+Depends: lsb-base, ${shlibs:Depends}, ${misc:Depends}
+Section: admin
+Description: Support daemons for Linux running on Hyper-V
+ Suite of daemons for Linux guests running on Hyper-V, consisting of
+ hv_fcopy_daemon, hv_kvp_daemon and hv_vss_daemon.
+ .
+ hv_fcopy_daemon provides the file copy service, allowing the host to
+ copy files into the guest.
+ .
+ hv_kvp_daemon provides the key-value pair (KVP) service, allowing the
+ host to get and set the IP networking configuration of the guest.
+ (This requires helper scripts which are not currently included.)
+ .
+ hv_vss_daemon provides the volume shadow copy service (VSS), allowing
+ the host to freeze the guest filesystems while taking a snapshot.
+
+#Package: lockdep
+#Build-Profiles: <!stage1 !pkg.linux.notools>
+#Architecture: all
+#Depends: ${shlibs:Depends}, ${misc:Depends}, liblockdep@version@
+#Recommends: liblockdep-dev
+#Section: devel
+#Multi-Arch: allowed
+#Description: Runtime locking correctness validator
+# lockdep is a wrapper for programs that use the pthreads API, which detects
+# actual and potential deadlocks and other locking bugs.
+#
+#Package: liblockdep@version@
+#Build-Profiles: <!stage1 !pkg.linux.notools>
+#Architecture: linux-any
+#Depends: ${shlibs:Depends}, ${misc:Depends}
+#Section: libs
+#Multi-Arch: same
+#Description: Runtime locking correctness validator (shared library)
+# liblockdep is a library for programs that use the pthreads API, which can
+# be used to detect actual and potential deadlocks and other locking bugs.
+#
+#Package: liblockdep-dev
+#Build-Profiles: <!stage1 !pkg.linux.notools>
+#Architecture: linux-any
+#Depends: ${shlibs:Depends}, ${misc:Depends}, liblockdep@version@ (= ${binary:Version})
+#Section: libdevel
+#Multi-Arch: same
+#Description: Runtime locking correctness validator (development files)
+# liblockdep is a library for programs that use the pthreads API, which can
+# be used to detect actual and potential deadlocks and other locking bugs.
diff --git a/templates/headers.postinst.in b/templates/headers.postinst.in
new file mode 100644 (file)
index 0000000..c13e6dc
--- /dev/null
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+# Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+# 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  = "@abiname@@localversion@";
+
+if (-d "/etc/kernel/header_postinst.d") {
+  system ("run-parts --report --exit-on-error --arg=$version " .
+          "/etc/kernel/header_postinst.d") &&
+            die "Failed to process /etc/kernel/header_postinst.d";
+}
+
+exit 0;
+
+__END__
diff --git a/templates/image-dbg.lintian-override.in b/templates/image-dbg.lintian-override.in
new file mode 100644 (file)
index 0000000..3e1849d
--- /dev/null
@@ -0,0 +1,2 @@
+# Kernel dbg packages contain a full image with debug data
+linux-image-@abiname@@localversion@-dbg: dbg-package-missing-depends
diff --git a/templates/image.bug/control b/templates/image.bug/control
new file mode 100644 (file)
index 0000000..b60912c
--- /dev/null
@@ -0,0 +1,2 @@
+Submit-As: src:linux
+Package-Status: firmware-amd-graphics firmware-atheros firmware-bnx2 firmware-bnx2x firmware-brcm80211 firmware-cavium firmware-intelwimax firmware-intel-sound firmware-ipw2x00 firmware-ivtv firmware-iwlwifi firmware-libertas firmware-linux-nonfree firmware-misc-nonfree firmware-myricom firmware-netxen firmware-qlogic firmware-realtek firmware-samsung firmware-siano firmware-ti-connectivity xen-hypervisor
diff --git a/templates/image.bug/include-0version b/templates/image.bug/include-0version
new file mode 100644 (file)
index 0000000..b5b32bf
--- /dev/null
@@ -0,0 +1,9 @@
+add_0version() {
+  echo '** Version:' >&3
+  cat /proc/version >&3
+  echo >&3
+}
+
+ask_0version() {
+  true
+}
diff --git a/templates/image.bug/include-1cmdline b/templates/image.bug/include-1cmdline
new file mode 100644 (file)
index 0000000..3fcc940
--- /dev/null
@@ -0,0 +1,9 @@
+add_1cmdline() {
+  echo '** Command line:' >&3
+  cat /proc/cmdline >&3
+  echo >&3
+}
+
+ask_1cmdline() {
+  true
+}
diff --git a/templates/image.bug/include-1tainted b/templates/image.bug/include-1tainted
new file mode 100644 (file)
index 0000000..921922e
--- /dev/null
@@ -0,0 +1,55 @@
+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
+TAINT_UNSIGNED_MODULE=13
+TAINT_SOFTLOCKUP=14
+TAINT_LIVEPATCH=15
+
+_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.'
+    _check $TAINT_UNSIGNED_MODULE 'E' 'Unsigned module has been loaded.'
+    _check $TAINT_SOFTLOCKUP 'L' 'Kernel has detected soft lockup before.'
+    _check $TAINT_LIVEPATCH 'K' 'Live patch has been loaded.'
+    echo "** Tainted: $result_short ($tainted)" >&3
+    printf "$result_long" >&3
+  else
+    echo '** Not tainted' >&3
+  fi
+  echo >&3
+}
+
+ask_1tainted() {
+  true
+}
diff --git a/templates/image.bug/include-dmesg b/templates/image.bug/include-dmesg
new file mode 100644 (file)
index 0000000..634dc99
--- /dev/null
@@ -0,0 +1,21 @@
+add_dmesg() {
+  local got_log=
+  echo '** Kernel log:' >&3
+  if [ "$(cat /proc/sys/kernel/dmesg_restrict)" = 0 ]; then
+    dmesg > >(tail -n 100 >&3) && got_log=y
+  elif command -v sudo >/dev/null; then
+    yesno "Use sudo to read the kernel log? " yep
+    if [ "$REPLY" = yep ]; then
+      sudo dmesg > >(tail -n 100 >&3) && got_log=y
+    fi
+  fi
+  test "$got_log" || echo 'Unable to read kernel log; any relevant messages should be attached' >&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
+}
diff --git a/templates/image.bug/include-model b/templates/image.bug/include-model
new file mode 100644 (file)
index 0000000..9c6aedd
--- /dev/null
@@ -0,0 +1,60 @@
+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|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|ppc64le)
+    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
+
+  # Device Tree model
+  if [ -r /proc/device-tree/model ]; then
+    echo "Device Tree model:" $(cat /proc/device-tree/model)
+  fi
+}
+
+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
+}
diff --git a/templates/image.bug/include-modules b/templates/image.bug/include-modules
new file mode 100644 (file)
index 0000000..22271c9
--- /dev/null
@@ -0,0 +1,13 @@
+add_modules() {
+  echo '** Loaded modules:' >&3
+  # List modules along with any taint flags.
+  # We should be able to tell cut to use an empty output delimiter, but
+  # currently (coreutils 8.13-3) this results in null bytes in the output.
+  cut -d' ' -f1,7 /proc/modules | sed 's/ //' >&3
+  echo >&3
+}
+
+ask_modules() {
+  true
+}
+
diff --git a/templates/image.bug/include-network b/templates/image.bug/include-network
new file mode 100644 (file)
index 0000000..bd12def
--- /dev/null
@@ -0,0 +1,39 @@
+_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; }
+      ' </etc/network/interfaces >&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 >&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
+}
diff --git a/templates/image.bug/include-pci b/templates/image.bug/include-pci
new file mode 100644 (file)
index 0000000..8e6528e
--- /dev/null
@@ -0,0 +1,12 @@
+add_pci() {
+  echo '** PCI devices:' >&3
+  lspci -nnvv >&3 2>/dev/null || echo 'not available' >&3
+  echo >&3
+}
+
+ask_pci() {
+  # This information shouldn't vary much between kernel versions, so
+  # include it anyway.
+  test $same_system = nop || add_pci
+}
+
diff --git a/templates/image.bug/include-pstore b/templates/image.bug/include-pstore
new file mode 100644 (file)
index 0000000..43285bd
--- /dev/null
@@ -0,0 +1,77 @@
+_add_pstore_log() {
+  if [ $# -le 3 ]; then
+    return
+  fi
+
+  local backend="$1"
+  local event="$2"
+  local date="$3"
+
+  yesno "Include log of $event at $(date -d @$date +%c) stored by $backend?" yep
+  if [ $REPLY != yep ]; then
+    return
+  fi
+
+  echo >&3
+  echo "*** Log of $event at $(date -d @$date -Iseconds) from $backend" >&3
+
+  shift 3
+  for file in "$@"; do
+    tail -n +2 "$file" | sed 's/^<.>//' >&3
+  done
+}
+
+add_pstore() {
+  local backend
+  local i
+  local j
+  local file
+  local date
+  local head
+  local event
+  local log_files
+
+  if ! mountpoint -q /sys/fs/pstore; then
+    return 0
+  fi
+
+  set -- /sys/fs/pstore/dmesg-*-1
+  backend=${1#*/dmesg-}
+  backend=${backend%-1}
+  if [ "$backend" = '*' ]; then
+    return 0
+  fi
+
+  i=1
+  while [ -f /sys/fs/pstore/dmesg-$backend-$i ]; do
+    file=/sys/fs/pstore/dmesg-$backend-$i
+    head="$(head -1 "$file")"
+
+    # Is this the first part of a log?
+    if [ "x${head% Part1}" != "x$head" ]; then
+      # Flush previous log, if any
+      _add_pstore_log "$backend" "$event" "$date" $log_files
+
+      event="${head% Part1}"
+      date=$(stat -c %Y $file)
+      log_files=
+      j=1
+    fi
+
+    if [ "x$head" = "x$event Part$j" ]; then
+      # Each part is prepended to the list, because they're numbered
+      # backward in log history
+      log_files="$file $log_files"
+      j=$((j + 1))
+    fi
+
+    i=$((i + 1))
+  done
+
+  # Flush last log, if any
+  _add_pstore_log "$backend" "$event" "$date" $log_files
+}
+
+ask_pstore() {
+  add_pstore
+}
diff --git a/templates/image.bug/include-usb b/templates/image.bug/include-usb
new file mode 100644 (file)
index 0000000..e8eb67e
--- /dev/null
@@ -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 
+}
diff --git a/templates/image.bug/presubj b/templates/image.bug/presubj
new file mode 100644 (file)
index 0000000..59b891a
--- /dev/null
@@ -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.
diff --git a/templates/image.bug/script b/templates/image.bug/script
new file mode 100644 (file)
index 0000000..8e0b5d5
--- /dev/null
@@ -0,0 +1,46 @@
+#!/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
+  running_ver="$(uname -v)"
+  running_ver="${running_ver#* $DISTRIBUTOR }"
+  running_ver="${running_ver%% *}"
+  if [ "$running_ver" != "$SOURCEVERSION" ]; then
+    cat <<EOF
+You have installed version $PACKAGE_VERSION of
+$PACKAGE_NAME, but version $running_ver is currently
+running.
+
+You should reboot to complete the upgrade.  Until you do this, some
+modules may fail to load.  This is NOT a bug.
+
+If you have already rebooted, check your boot loader configuration.
+
+EOF
+    yesno "Do you still want to report a bug? " nop
+    if [ "$REPLY" = nop ]; then
+      exit 1
+    fi
+  fi
+  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
diff --git a/templates/image.postinst.in b/templates/image.postinst.in
new file mode 100755 (executable)
index 0000000..25e7dd6
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+
+version=@abiname@@localversion@
+image_path=/boot/@image-stem@-$version
+
+if [ "$1" != configure ]; then
+    exit 0
+fi
+
+depmod $version
+
+if [ -f /lib/modules/$version/.fresh-install ]; then
+    change=install
+else
+    change=upgrade
+fi
+linux-update-symlinks $change $version $image_path
+rm -f /lib/modules/$version/.fresh-install
+
+if [ -d /etc/kernel/postinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postinst.d
+fi
+
+exit 0
diff --git a/templates/image.postrm.in b/templates/image.postrm.in
new file mode 100755 (executable)
index 0000000..4298752
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh -e
+
+version=@abiname@@localversion@
+image_path=/boot/@image-stem@-$version
+
+rm -f /lib/modules/$version/.fresh-install
+
+if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
+    linux-update-symlinks remove $version $image_path
+fi
+
+if [ -d /etc/kernel/postrm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/postrm.d
+fi
+
+if [ "$1" = purge ]; then
+    for extra_file in 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 modules.ofmap \
+                      modules.seriomap modules.\*.bin \
+                     modules.softdep modules.devname; do
+       eval rm -f /lib/modules/$version/$extra_file
+    done
+    rmdir /lib/modules/$version || true
+fi
+
+exit 0
diff --git a/templates/image.preinst.in b/templates/image.preinst.in
new file mode 100755 (executable)
index 0000000..8a5658e
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+
+version=@abiname@@localversion@
+image_path=/boot/@image-stem@-$version
+
+if [ "$1" = abort-upgrade ]; then
+    exit 0
+fi
+
+if [ "$1" = install ]; then
+    # Create a flag file for postinst
+    mkdir -p /lib/modules/$version
+    touch /lib/modules/$version/.fresh-install
+fi
+
+if [ -d /etc/kernel/preinst.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/preinst.d
+fi
+
+exit 0
diff --git a/templates/image.prerm.in b/templates/image.prerm.in
new file mode 100755 (executable)
index 0000000..f1bde29
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -e
+
+version=@abiname@@localversion@
+image_path=/boot/@image-stem@-$version
+
+if [ "$1" != remove ]; then
+    exit 0
+fi
+
+linux-check-removal $version
+
+if [ -d /etc/kernel/prerm.d ]; then
+    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+             --arg=$image_path /etc/kernel/prerm.d
+fi
+
+exit 0
diff --git a/templates/lintian-overrides.perf.in b/templates/lintian-overrides.perf.in
new file mode 100644 (file)
index 0000000..858faa7
--- /dev/null
@@ -0,0 +1,3 @@
+# These executables are needed to handle processes running in compat mode
+linux-perf-@version@: binary-from-other-architecture usr/lib/perf_@version@-core/perf-read-vdso32
+linux-perf-@version@: binary-from-other-architecture usr/lib/perf_@version@-core/perf-read-vdsox32
diff --git a/templates/tests-control.main.in b/templates/tests-control.main.in
new file mode 100644 (file)
index 0000000..62497c6
--- /dev/null
@@ -0,0 +1,4 @@
+Tests: selftests
+Restrictions: breaks-testbed, needs-root, isolation-machine
+Depends: kexec-tools, python3, gcc, make, libpopt-dev, gcc-multilib [amd64], bc, fuse, libfuse-dev, pkg-config
+Classes: smp
diff --git a/tests/control b/tests/control
new file mode 100644 (file)
index 0000000..63535a8
--- /dev/null
@@ -0,0 +1,5 @@
+Tests: selftests
+Restrictions: breaks-testbed, needs-root, isolation-machine
+Depends: kexec-tools, python3, gcc, make, libpopt-dev, gcc-multilib [amd64], bc, fuse, libfuse-dev, pkg-config, linux-image-4.9.0-3-alpha-generic [alpha], linux-image-4.9.0-3-alpha-smp [alpha], linux-image-4.9.0-3-amd64 [amd64], linux-image-4.9.0-3-rt-amd64 [amd64], linux-image-4.9.0-3-arm64 [arm64], linux-image-4.9.0-3-marvell [armel], linux-image-4.9.0-3-armmp [armhf], linux-image-4.9.0-3-armmp-lpae [armhf], linux-image-4.9.0-3-parisc [hppa], linux-image-4.9.0-3-parisc64-smp [hppa], linux-image-4.9.0-3-686 [i386], linux-image-4.9.0-3-686-pae [i386], linux-image-4.9.0-3-rt-686-pae [i386], linux-image-4.9.0-3-m68k [m68k], linux-image-4.9.0-3-4kc-malta [mips mipsel], linux-image-4.9.0-3-5kc-malta [mips mipsel mips64 mips64el], linux-image-4.9.0-3-octeon [mips mipsel mips64 mips64el], linux-image-4.9.0-3-loongson-3 [mipsel mips64el], linux-image-4.9.0-3-powerpc [powerpc], linux-image-4.9.0-3-powerpc-smp [powerpc], linux-image-4.9.0-3-powerpc64 [powerpc ppc64], linux-image-4.9.0-3-powerpcspe [powerpcspe], linux-image-4.9.0-3-powerpc64le [ppc64el], linux-image-4.9.0-3-s390x [s390x], linux-image-4.9.0-3-sh7751r [sh4], linux-image-4.9.0-3-sh7785lcr [sh4], linux-image-4.9.0-3-sparc64 [sparc64], linux-image-4.9.0-3-sparc64-smp [sparc64]
+Classes: smp
+
diff --git a/tests/selftests b/tests/selftests
new file mode 100644 (file)
index 0000000..c19064c
--- /dev/null
@@ -0,0 +1,88 @@
+#!/bin/bash -eu
+
+PATH=/usr/sbin:/sbin:/usr/bin:/bin
+
+getconfig() {
+    debian/bin/getconfig.py "$@"
+}
+
+# Look up current ABI name and 'localversion' (featureset/flavour) suffixes
+abiname=$(getconfig version abiname)
+arch=$(dpkg --print-architecture)
+localversion=()
+for featureset in $(getconfig base $arch featuresets); do
+    if [ "$(getconfig base '' $featureset enabled || echo True)" = True ]; then
+       for flavour in $(getconfig base $arch $featureset flavours); do
+           if [ "$featureset" = none ]; then
+               localversion+=(-$flavour)
+           else
+               localversion+=(-$featureset-$flavour)
+           fi
+       done
+    fi
+done
+steps=${#localversion[*]}
+
+case "${ADT_REBOOT_MARK:-}" in
+    "")
+       step=-1
+       ;;
+    step*)
+       step=${ADT_REBOOT_MARK#step}
+       ;;
+esac
+
+if [ "$step" -ge 0 ]; then
+    ver=$abiname${localversion[$step]}
+
+    if [ "$(uname -r)" != "$ver" ]; then
+       echo >&2 "Should be running: $ver"
+       echo >&2 "Actually running: $(uname -r)"
+    else
+       cp -lR . $ADTTMP/build
+       cd $ADTTMP/build
+       make headers_install
+
+       # Ignore compiler warnings
+       {
+           make -C tools/testing/selftests &&
+           make -C tools/testing/selftests/memfd build_fuse
+       } 2>&1 || echo >&2 "Build failed"
+
+       # Enable testing CLONE_USERNS by unprivileged users
+       sysctl kernel.unprivileged_userns_clone=1
+
+       # Some tests will write to stderr despite being successful,
+       # and the exit code from make will be 0 even if tests failed.
+       # So we have to do some post-analysis...
+       set -o pipefail
+       {
+           make -C tools/testing/selftests quicktest=1 run_tests &&
+           make -C tools/testing/selftests/cpu-hotplug run_full_test &&
+           make -C tools/testing/selftests/memory-hotplug run_full_test &&
+           make -C tools/testing/selftests/memfd run_fuse &&
+           make -C tools/testing/selftests/timers run_destructive_tests
+       } 2>&1 | tee $ADTTMP/log
+       set +o pipefail
+       if grep -E '\[(FAIL|UNSUPPORTED)\]|recipe for target .run_tests. failed' $ADTTMP/log | \
+           grep -q -v \
+                -e '^selftests: fw_userhelper.sh \[FAIL\]' \
+                -e 'ftrace - function profiler with function tracing   \[UNSUPPORTED\]' \
+                -e '^selftests: ftracetest \[FAIL\]' \
+                -e '|| echo .*\[FAIL\]' \
+                ; then
+           echo >&2 "Unexpected failures found"
+       fi
+    fi
+fi
+
+step=$((step + 1))
+
+if [ "$step" -lt "$steps" ]; then
+    # Load the next kernel
+    ver=$abiname${localversion[$step]}
+    kexec -l /boot/vmlinuz-$ver --initrd /boot/initrd.img-$ver --reuse-cmdline
+    /tmp/autopkgtest-reboot step$step
+fi
+
+exit 0
diff --git a/upstream/rt-signing-key.pgp b/upstream/rt-signing-key.pgp
new file mode 100644 (file)
index 0000000..f55b064
Binary files /dev/null and b/upstream/rt-signing-key.pgp differ
diff --git a/upstream/signing-key.pgp b/upstream/signing-key.pgp
new file mode 100644 (file)
index 0000000..f832486
Binary files /dev/null and b/upstream/signing-key.pgp differ
diff --git a/usbip.install b/usbip.install
new file mode 100644 (file)
index 0000000..04a6ce5
--- /dev/null
@@ -0,0 +1,2 @@
+usr/sbin/usbip
+usr/sbin/usbipd
diff --git a/usbip.manpages b/usbip.manpages
new file mode 100644 (file)
index 0000000..ff94009
--- /dev/null
@@ -0,0 +1,2 @@
+tools/usb/usbip/doc/usbip.8
+tools/usb/usbip/doc/usbipd.8
diff --git a/watch b/watch
new file mode 100644 (file)
index 0000000..09e8e35
--- /dev/null
+++ b/watch
@@ -0,0 +1,4 @@
+# Find first non-rc tarball linked from kernel.org.
+# We need to DFSG-clean it, so use our own script instead of uupdate.
+version=3
+https://www.kernel.org/ .*/linux-([0-9.]+).tar.xz debian debian/bin/uscan-hook