rpms/kernel-xen-2.6/devel linux-2.6-blkcipher-depend-on-chainiv.patch, NONE, 1.1.2.1 linux-2.6-cve-2008-0600.patch, 1.1.2.1, 1.1.2.2 linux-2.6-drm-git-mm.patch, NONE, 1.1.2.1 linux-2.6-e1000-ich9.patch, NONE, 1.1.2.1 linux-2.6-hotfixes.patch, NONE, 1.1.2.1 linux-2.6-ppc-use-libgcc.patch, NONE, 1.1.2.1 linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_25.patch, NONE, 1.1.2.1 linux-2.6-xen-0066-xen-dom0-Don-t-use-fixmaps-for-ACPI-mappings-in-ISA.patch, NONE, 1.1.2.1 linux-2.6-xen-0067-x86-Do-not-scan-for-DMI-if-the-DMI-region-is-marked.patch, NONE, 1.1.2.1 linux-2.6-xen-0068-xen-dom0-Fix-DMI-scanning.patch, NONE, 1.1.2.1 linux-2.6-xen-0069-ata-scsi-Use-dma_alloc_coherent-for-ATAPI-drain-b.patch, NONE, 1.1.2.1 linux-2.6-xen-0070-xen-Make-hvc0-the-preferred-console-in-domU.patch, NONE, 1.1.2.1 patch-2.6.25-rc3-git1.bz2.sign, NONE, 1.1.2.1 patch-2.6.25-rc3.bz2.sign, NONE, 1.1.2.1 .cvsignore, 1.11.2.1, 1.11.2.2 .gitignore, 1.1.2.1, 1.1.2.2 Makefile, 1.2.6.1, 1.2.6.2 Makefile.config, 1.2.4.1, 1.2.4.2 config-debug, 1.2.4.1, 1.2.4.2 config-generic, 1.2.4.1, 1.2.4.2 config-i586, 1.2, 1.2.4.1 config-nodebug, 1.2.4.1, 1.2.4.2 config-powerpc-generic, 1.2.4.1, 1.2.4.2 config-powerpc64, 1.2.4.1, 1.2.4.2 config-s390x, 1.2.4.1, 1.2.4.2 config-sparc64-generic, 1.2.4.1, 1.2.4.2 config-x86-generic, 1.2.4.1, 1.2.4.2 config-x86_64-generic, 1.2.4.1, 1.2.4.2 kernel.spec, 1.11.2.8, 1.11.2.9 linux-2.6-acpi-eeepc-hotkey.patch, 1.1.2.1, 1.1.2.2 linux-2.6-at76.patch, 1.1.2.1, 1.1.2.2 linux-2.6-build-nonintconfig.patch, 1.1.22.1, 1.1.22.2 linux-2.6-compile-fix-gcc-43.patch, 1.1.2.1, 1.1.2.2 linux-2.6-crash-driver.patch, 1.2.8.1, 1.2.8.2 linux-2.6-debug-no-quiet.patch, 1.2, 1.2.8.1 linux-2.6-debug-sizeof-structs.patch, 1.2, 1.2.8.1 linux-2.6-debug-taint-vm.patch, 1.3.8.1, 1.3.8.2 linux-2.6-devmem.patch, 1.3.8.1, 1.3.8.2 linux-2.6-e1000-corrupt-eeprom-checksum.patch, 1.1.2.1, 1.1.2.2 linux-2.6-execshield.patch, 1.3.8.1, 1.3.8.2 linux-2.6-ext4-stable-queue.patch, 1.1.2.1, 1.1.2.2 linux-2.6-firewire-git-pending.patch, 1.1.2.1, 1.1.2.2 linux-2.6-firewire-git-update.patch, 1.1.2.1, 1.1.2.2 linux-2.6-input-kill-stupid-messages.patch, 1.1.22.1, 1.1.22.2 linux-2.6-lirc.patch, 1.1.2.1, 1.1.2.2 linux-2.6-silence-noise.patch, 1.3.8.1, 1.3.8.2 linux-2.6-squashfs.patch, 1.3.8.1, 1.3.8.2 linux-2.6-utrace-core.patch, 1.2.8.1, 1.2.8.2 linux-2.6-utrace-tracehook.patch, 1.2.8.1, 1.2.8.2 linux-2.6-wireless-pending.patch, 1.1.2.1, 1.1.2.2 linux-2.6-wireless.patch, 1.2.8.1, 1.2.8.2 linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch, 1.1.2.2, 1.1.2.3 linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch, 1.1.2.2, 1.1.2.3 linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch, 1.1.2.2, 1.1.2.3 linux-2.6-xen-0005-xen-Module-autoprobing-support-for-frontend-drivers.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0006-xen-Add-compatibility-aliases-for-frontend-drivers.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0007-xen-dom0-Make-hvc_xen-console-work-for-dom0.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0008-xen-dom0-Initialize-xenbus-for-dom0.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0009-xen-dom0-Set-up-basic-IO-permissions-for-dom0.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0010-xen-dom0-Add-set_fixmap-pv_mmu_ops.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0011-xen-dom0-Add-support-for-the-platform_ops-hypercall.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0012-xen-acpi-Enable-early-access-to-ACPI-tables.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0013-xen-dom0-Add-paravirt_ops-ioremap_page_range-for.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0014-MTRR-use-cpu_callout_map-instead-of-cpu_online_map.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0015-xen-mtrr-Add-mtrr_ops-support-for-Xen-mtrr.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0016-xen-mtrr-Don-t-enable-xen-mtrr-on-bare-metal.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0017-xen-mtrr-set-cpu-in-cpu_callout_map.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0018-xen-mtrr-Clean-up-the-num_var_ranges-CPU_UNKOWN-hac.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0019-xen-mtrr-Use-specific-cpu_has_foo-macros-instead-of.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0020-xen-mtrr-Kill-some-unneccessary-includes.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0021-xen-mtrr-No-need-to-explicitly-set-use_intel_if-0.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0022-xen-mtrr-Use-generic_validate_add_page.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0023-xen-mtrr-Implement-xen_get_free_region.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0024-xen-mtrr-Add-xen_-get-set-_mtrr-implementations.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0025-irq2.diff-from-Juan-Quintela.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0026-xen-dom0-Obvious-cpuid-fix-to-domU-handling.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0027-xen-debug-Diagnose-bind_virq_to_irq-errors.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0028-xen-traps-Revert-Juan-s-traps_32.c-changes-to-debug.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0029-xen-debug-Move-init_apic_mappings-after-trap-init.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0030-xen-debug-Trace-progress-in-trap_init-around-init.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0031-xen-apic-Disable-init_apic_mappings-when-under-CO.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0032-xen-debug-Log-entry-into-virtual-console-s-xen_init.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0033-xen-debug-Log-bind_virq_to_irq-events.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0034-xen-debug-Work-around-USB-issue-triggered-by-Xen-de.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0035-Remove-duplicated-dma_alloc-free_noncoherent-define.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0036-xem-dom0-Add-hypervisor-memory_exchange-descriptor.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0037-xen-dom0-add-virt_to_pfn-macro.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0038-xen-dom0-use-virt_to_pfn-where-appropriate.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0039-xen-dom0-Add-contiguous-region-support.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0040-xen-dom0-Don-t-mask-off-PCD-bits-from-pte-entries.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0041-xen-dom0-Remove-duplicate-xen_store_interface-assig.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0042-xen-dom0-Slightly-re-arrange-xenbus_probe_init-er.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0043-xen-dom0-Use-max_low_pfn-declaration-from-linux-boo.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0044-xen-dma-Add-dma_mapping_ops-indirection-for-32-bit.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0045-xen-dma-Remove-unused-32-bit-dma_ops-map_simple-me.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0046-xen-dma-Initial-commit-of-pci-xen.c-dma-mapping-fun.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0047-xen-dma-Add-calls-to-dma_ops-alloc-free_coherent-ho.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0048-xen-dma-Add-xen_alloc-free_coherent.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0049-xen-dma-Don-t-merge-bios-on-xen-pvops.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0050-xen-dom0-Minor-coding-style-issue-in-ISA-mapping-co.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0051-xen-dom0-Use-i-PAGE_SHIFT-instead-of-PAGE_DOWN-i.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0052-xen-dom0-Match-up-set_pte_mfn-prototype-with-the.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0053-xen-dom0-Reserve-ISA-address-space-earlier.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0054-xen-Add-empty-xenctrl-module.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0055-xen-dom0-Add-proc-xen-capabilities.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0056-xen-Add-proc-xen-privcmd.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0057-xen-dom0-Add-proc-xen-xsd_-port-kva.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0058-xen-Add-proc-xen-xenbus.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0059-xen-Add-dev-xen-evtchn.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0060-xen-Add-__init-__exit-notations-to-xenctrl-function.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0061-xen-Add-Xen-s-sys-hypervisor-interface.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0062-xen-dom0-Add-basic-proc-xen-balloon.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch, 1.1.2.1, 1.1.2.2 linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch, 1.1.2.1, 1.1.2.2 mirrors, 1.1.2.1, 1.1.2.2 nouveau-drm.patch, 1.2.8.1, 1.2.8.2 sources, 1.11.2.1, 1.11.2.2 upstream, 1.1.2.1, 1.1.2.2 linux-2.6-agp-mm.patch, 1.1.2.1, NONE linux-2.6-alsa-rc4-mm1.patch, 1.1.2.1, NONE linux-2.6-alsa-support-sis7019.patch, 1.1.2.1, NONE linux-2.6-ath5k-use-soft-wep.patch, 1.1.2.1, NONE linux-2.6-dcdbas-autoload.patch, 1.1.2.1, NONE linux-2.6-drm-mm.patch, 1.1.2.1, NONE linux-2.6-drm-radeon-update.patch, 1.1.2.1, NONE linux-2.6-epoll-lockdep-annotation.patch, 1.1.2.1, NONE linux-2.6-ext4-linus-git.patch, 1.1.2.1, NONE linux-2.6-gelic-fixups.patch, 1.1.2.1, NONE linux-2.6-gelic-wireless-fix.patch, 1.1.2.1, NONE linux-2.6-gelic-wireless-v2.patch, 1.1.2.1, NONE linux-2.6-git-initial-r500-drm.patch, 1.1.2.1, NONE linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch, 1.1.2.1, NONE linux-2.6-netdev-bonding-fix-null-deref.patch, 1.1.2.1, NONE linux-2.6-pasemi-for-2.6.25.patch, 1.1.2.1, NONE linux-2.6-pasemi-reserve-i2c.patch, 1.1.2.1, NONE linux-2.6-powerpc-bootwrapper.patch, 1.1.2.1, NONE linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch, 1.1.2.1, NONE linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch, 1.1.2.1, NONE linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch, 1.1.2.1, NONE linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch, 1.1.2.1, NONE linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch, 1.1.2.1, NONE linux-2.6-rndis_wlan.patch, 1.1.2.1, NONE linux-2.6-selinux-strip-leading-slashes.patch, 1.1.2.1, NONE linux-2.6-unexport-symbols.patch, 1.1.22.1, NONE linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_24.patch, 1.1.2.2, NONE linux-2.6-xfs-optimize-away-realtime-tests.patch, 1.1.2.1, NONE linux-2.6-xfs-setfattr-32bit-compat.patch, 1.1.2.1, NONE linux-2.6-xfs-xfs_mount-refactor.patch, 1.1.2.1, NONE

Mark McLoughlin (markmc) fedora-extras-commits at redhat.com
Fri Feb 29 19:00:10 UTC 2008


Author: markmc

Update of /cvs/pkgs/rpms/kernel-xen-2.6/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12209

Modified Files:
      Tag: private-markmc-pv-ops-branch
	.cvsignore .gitignore Makefile Makefile.config config-debug 
	config-generic config-i586 config-nodebug 
	config-powerpc-generic config-powerpc64 config-s390x 
	config-sparc64-generic config-x86-generic 
	config-x86_64-generic kernel.spec 
	linux-2.6-acpi-eeepc-hotkey.patch linux-2.6-at76.patch 
	linux-2.6-build-nonintconfig.patch 
	linux-2.6-compile-fix-gcc-43.patch 
	linux-2.6-crash-driver.patch linux-2.6-debug-no-quiet.patch 
	linux-2.6-debug-sizeof-structs.patch 
	linux-2.6-debug-taint-vm.patch linux-2.6-devmem.patch 
	linux-2.6-e1000-corrupt-eeprom-checksum.patch 
	linux-2.6-execshield.patch linux-2.6-ext4-stable-queue.patch 
	linux-2.6-firewire-git-pending.patch 
	linux-2.6-firewire-git-update.patch 
	linux-2.6-input-kill-stupid-messages.patch 
	linux-2.6-lirc.patch linux-2.6-silence-noise.patch 
	linux-2.6-squashfs.patch linux-2.6-utrace-core.patch 
	linux-2.6-utrace-tracehook.patch 
	linux-2.6-wireless-pending.patch linux-2.6-wireless.patch 
	linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch 
	linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch 
	linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch 
	linux-2.6-xen-0005-xen-Module-autoprobing-support-for-frontend-drivers.patch 
	linux-2.6-xen-0006-xen-Add-compatibility-aliases-for-frontend-drivers.patch 
	linux-2.6-xen-0007-xen-dom0-Make-hvc_xen-console-work-for-dom0.patch 
	linux-2.6-xen-0008-xen-dom0-Initialize-xenbus-for-dom0.patch 
	linux-2.6-xen-0009-xen-dom0-Set-up-basic-IO-permissions-for-dom0.patch 
	linux-2.6-xen-0010-xen-dom0-Add-set_fixmap-pv_mmu_ops.patch 
	linux-2.6-xen-0011-xen-dom0-Add-support-for-the-platform_ops-hypercall.patch 
	linux-2.6-xen-0012-xen-acpi-Enable-early-access-to-ACPI-tables.patch 
	linux-2.6-xen-0013-xen-dom0-Add-paravirt_ops-ioremap_page_range-for.patch 
	linux-2.6-xen-0014-MTRR-use-cpu_callout_map-instead-of-cpu_online_map.patch 
	linux-2.6-xen-0015-xen-mtrr-Add-mtrr_ops-support-for-Xen-mtrr.patch 
	linux-2.6-xen-0016-xen-mtrr-Don-t-enable-xen-mtrr-on-bare-metal.patch 
	linux-2.6-xen-0017-xen-mtrr-set-cpu-in-cpu_callout_map.patch 
	linux-2.6-xen-0018-xen-mtrr-Clean-up-the-num_var_ranges-CPU_UNKOWN-hac.patch 
	linux-2.6-xen-0019-xen-mtrr-Use-specific-cpu_has_foo-macros-instead-of.patch 
	linux-2.6-xen-0020-xen-mtrr-Kill-some-unneccessary-includes.patch 
	linux-2.6-xen-0021-xen-mtrr-No-need-to-explicitly-set-use_intel_if-0.patch 
	linux-2.6-xen-0022-xen-mtrr-Use-generic_validate_add_page.patch 
	linux-2.6-xen-0023-xen-mtrr-Implement-xen_get_free_region.patch 
	linux-2.6-xen-0024-xen-mtrr-Add-xen_-get-set-_mtrr-implementations.patch 
	linux-2.6-xen-0025-irq2.diff-from-Juan-Quintela.patch 
	linux-2.6-xen-0026-xen-dom0-Obvious-cpuid-fix-to-domU-handling.patch 
	linux-2.6-xen-0027-xen-debug-Diagnose-bind_virq_to_irq-errors.patch 
	linux-2.6-xen-0028-xen-traps-Revert-Juan-s-traps_32.c-changes-to-debug.patch 
	linux-2.6-xen-0029-xen-debug-Move-init_apic_mappings-after-trap-init.patch 
	linux-2.6-xen-0030-xen-debug-Trace-progress-in-trap_init-around-init.patch 
	linux-2.6-xen-0031-xen-apic-Disable-init_apic_mappings-when-under-CO.patch 
	linux-2.6-xen-0032-xen-debug-Log-entry-into-virtual-console-s-xen_init.patch 
	linux-2.6-xen-0033-xen-debug-Log-bind_virq_to_irq-events.patch 
	linux-2.6-xen-0034-xen-debug-Work-around-USB-issue-triggered-by-Xen-de.patch 
	linux-2.6-xen-0035-Remove-duplicated-dma_alloc-free_noncoherent-define.patch 
	linux-2.6-xen-0036-xem-dom0-Add-hypervisor-memory_exchange-descriptor.patch 
	linux-2.6-xen-0037-xen-dom0-add-virt_to_pfn-macro.patch 
	linux-2.6-xen-0038-xen-dom0-use-virt_to_pfn-where-appropriate.patch 
	linux-2.6-xen-0039-xen-dom0-Add-contiguous-region-support.patch 
	linux-2.6-xen-0040-xen-dom0-Don-t-mask-off-PCD-bits-from-pte-entries.patch 
	linux-2.6-xen-0041-xen-dom0-Remove-duplicate-xen_store_interface-assig.patch 
	linux-2.6-xen-0042-xen-dom0-Slightly-re-arrange-xenbus_probe_init-er.patch 
	linux-2.6-xen-0043-xen-dom0-Use-max_low_pfn-declaration-from-linux-boo.patch 
	linux-2.6-xen-0044-xen-dma-Add-dma_mapping_ops-indirection-for-32-bit.patch 
	linux-2.6-xen-0045-xen-dma-Remove-unused-32-bit-dma_ops-map_simple-me.patch 
	linux-2.6-xen-0046-xen-dma-Initial-commit-of-pci-xen.c-dma-mapping-fun.patch 
	linux-2.6-xen-0047-xen-dma-Add-calls-to-dma_ops-alloc-free_coherent-ho.patch 
	linux-2.6-xen-0048-xen-dma-Add-xen_alloc-free_coherent.patch 
	linux-2.6-xen-0049-xen-dma-Don-t-merge-bios-on-xen-pvops.patch 
	linux-2.6-xen-0050-xen-dom0-Minor-coding-style-issue-in-ISA-mapping-co.patch 
	linux-2.6-xen-0051-xen-dom0-Use-i-PAGE_SHIFT-instead-of-PAGE_DOWN-i.patch 
	linux-2.6-xen-0052-xen-dom0-Match-up-set_pte_mfn-prototype-with-the.patch 
	linux-2.6-xen-0053-xen-dom0-Reserve-ISA-address-space-earlier.patch 
	linux-2.6-xen-0054-xen-Add-empty-xenctrl-module.patch 
	linux-2.6-xen-0055-xen-dom0-Add-proc-xen-capabilities.patch 
	linux-2.6-xen-0056-xen-Add-proc-xen-privcmd.patch 
	linux-2.6-xen-0057-xen-dom0-Add-proc-xen-xsd_-port-kva.patch 
	linux-2.6-xen-0058-xen-Add-proc-xen-xenbus.patch 
	linux-2.6-xen-0059-xen-Add-dev-xen-evtchn.patch 
	linux-2.6-xen-0060-xen-Add-__init-__exit-notations-to-xenctrl-function.patch 
	linux-2.6-xen-0061-xen-Add-Xen-s-sys-hypervisor-interface.patch 
	linux-2.6-xen-0062-xen-dom0-Add-basic-proc-xen-balloon.patch 
	linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch 
	linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch 
	linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch mirrors 
	nouveau-drm.patch sources upstream 
Added Files:
      Tag: private-markmc-pv-ops-branch
	linux-2.6-blkcipher-depend-on-chainiv.patch 
	linux-2.6-cve-2008-0600.patch linux-2.6-drm-git-mm.patch 
	linux-2.6-e1000-ich9.patch linux-2.6-hotfixes.patch 
	linux-2.6-ppc-use-libgcc.patch 
	linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_25.patch 
	linux-2.6-xen-0066-xen-dom0-Don-t-use-fixmaps-for-ACPI-mappings-in-ISA.patch 
	linux-2.6-xen-0067-x86-Do-not-scan-for-DMI-if-the-DMI-region-is-marked.patch 
	linux-2.6-xen-0068-xen-dom0-Fix-DMI-scanning.patch 
	linux-2.6-xen-0069-ata-scsi-Use-dma_alloc_coherent-for-ATAPI-drain-b.patch 
	linux-2.6-xen-0070-xen-Make-hvc0-the-preferred-console-in-domU.patch 
	patch-2.6.25-rc3-git1.bz2.sign patch-2.6.25-rc3.bz2.sign 
Removed Files:
      Tag: private-markmc-pv-ops-branch
	linux-2.6-agp-mm.patch linux-2.6-alsa-rc4-mm1.patch 
	linux-2.6-alsa-support-sis7019.patch 
	linux-2.6-ath5k-use-soft-wep.patch 
	linux-2.6-dcdbas-autoload.patch linux-2.6-drm-mm.patch 
	linux-2.6-drm-radeon-update.patch 
	linux-2.6-epoll-lockdep-annotation.patch 
	linux-2.6-ext4-linus-git.patch linux-2.6-gelic-fixups.patch 
	linux-2.6-gelic-wireless-fix.patch 
	linux-2.6-gelic-wireless-v2.patch 
	linux-2.6-git-initial-r500-drm.patch 
	linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch 
	linux-2.6-netdev-bonding-fix-null-deref.patch 
	linux-2.6-pasemi-for-2.6.25.patch 
	linux-2.6-pasemi-reserve-i2c.patch 
	linux-2.6-powerpc-bootwrapper.patch 
	linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch 
	linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch 
	linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch 
	linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch 
	linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch 
	linux-2.6-rndis_wlan.patch 
	linux-2.6-selinux-strip-leading-slashes.patch 
	linux-2.6-unexport-symbols.patch 
	linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_24.patch 
	linux-2.6-xfs-optimize-away-realtime-tests.patch 
	linux-2.6-xfs-setfattr-32bit-compat.patch 
	linux-2.6-xfs-xfs_mount-refactor.patch 
Log Message:
* Fri Feb 29 2008 Mark McLoughlin <markmc at redhat.com>
- Re-base to kernel-2_6_25-0_78_rc3_git1_fc9


linux-2.6-blkcipher-depend-on-chainiv.patch:

--- NEW FILE linux-2.6-blkcipher-depend-on-chainiv.patch ---
diff --git a/crypto/Makefile b/crypto/Makefile
index 48c7583..13b8cf8 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -12,8 +12,8 @@ obj-$(CONFIG_CRYPTO_AEAD) += aead.o
 
 crypto_blkcipher-objs := ablkcipher.o
 crypto_blkcipher-objs += blkcipher.o
+crypto_blkcipher-objs += chainiv.o
 obj-$(CONFIG_CRYPTO_BLKCIPHER) += crypto_blkcipher.o
-obj-$(CONFIG_CRYPTO_BLKCIPHER) += chainiv.o
 obj-$(CONFIG_CRYPTO_BLKCIPHER) += eseqiv.o
 obj-$(CONFIG_CRYPTO_SEQIV) += seqiv.o
 
diff --git a/crypto/chainiv.c b/crypto/chainiv.c
index d17fa04..170e436 100644
--- a/crypto/chainiv.c
+++ b/crypto/chainiv.c
@@ -329,3 +329,4 @@ module_exit(chainiv_module_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Chain IV Generator");
+MODULE_ALIAS("chainiv");

linux-2.6-cve-2008-0600.patch:

Index: linux-2.6-cve-2008-0600.patch
===================================================================
RCS file: linux-2.6-cve-2008-0600.patch
diff -N linux-2.6-cve-2008-0600.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-cve-2008-0600.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -0,0 +1,37 @@
+From: Bastian Blank <bastian at waldi.eu.org>
+Date: Sun, 10 Feb 2008 14:47:57 +0000 (+0200)
+Subject: splice: fix user pointer access in get_iovec_page_array()
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=712a30e63c8066ed84385b12edbfb804f49cbc44
+
+splice: fix user pointer access in get_iovec_page_array()
+
+Commit 8811930dc74a503415b35c4a79d14fb0b408a361 ("splice: missing user
+pointer access verification") added the proper access_ok() calls to
+copy_from_user_mmap_sem() which ensures we can copy the struct iovecs
+from userspace to the kernel.
+
+But we also must check whether we can access the actual memory region
+pointed to by the struct iovec to fix the access checks properly.
+
+Signed-off-by: Bastian Blank <waldi at debian.org>
+Acked-by: Oliver Pinter <oliver.pntr at gmail.com>
+Cc: Jens Axboe <jens.axboe at oracle.com>
+Cc: Andrew Morton <akpm at linux-foundation.org>
+Signed-off-by: Pekka Enberg <penberg at cs.helsinki.fi>
+Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+---
+
+diff --git a/fs/splice.c b/fs/splice.c
+index 14e2262..9b559ee 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -1234,7 +1234,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
+ 		if (unlikely(!len))
+ 			break;
+ 		error = -EFAULT;
+-		if (unlikely(!base))
++		if (!access_ok(VERIFY_READ, base, len))
+ 			break;
+ 
+ 		/*
+

linux-2.6-drm-git-mm.patch:

--- NEW FILE linux-2.6-drm-git-mm.patch ---
commit 9ad1ccf9cff8aa911d965c94b83187b50c459d43
Author: Xiang, Haihao <haihao.xiang at intel.com>
Date:   Fri Feb 29 12:07:01 2008 +1000

    i915: i915_execbuffer ioctl32 routine, fix #13732
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit aa0e20c041614319ff66a40c5f70a9f7eae01fbc
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Fri Feb 29 12:05:48 2008 +1000

    drm/ttm: Add a compat kmap_atomic_prot_pfn to do quick kernel map / unmaps of PCI- or high memory.
    
    This is substantially more efficient than drm_bo_kmap, since the mapping only lives on a single processor.  Unmapping is done use kunmap_atomic(). Flushes only a single tlb() entry.
    
    Add a support utility int drm_bo_pfn_prot() that returns the pfn and desired page protection for a given bo offset.
    
    This is all intended for relocations in bound TTMS or vram.  Mapping-accessing-unmapping must be atomic, either using preempt_xx() macros or a spinlock.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 9c005b094ecada32e04e0b9ebdcfe3ab47fe86b7
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Fri Feb 29 11:53:45 2008 +1000

    drm/i915: relocation fixes.
    
    This fixes various problems in the relocations for i915.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 35c64f7d95512505400849241605d26b9a9801b4
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Fri Feb 29 11:49:39 2008 +1000

    drm/i915: Make the execbuffer code reasonably safe against errors.
    
    In particular -EAGAINs, which should be common during Xserver operation.
    Also handle the fence creation failure case.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit ae0806d80764d8ae63e74a5d7e3921a532d61d14
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Fri Feb 29 11:41:36 2008 +1000

    drm/fence: add a last queued sequence member
    
    Add an fence_class_manager::last_queued_sequence member, since a sequence number may actually turn up before the corresponding fence object has been queued on the ring.
    
    Fence drivers can use this member to determine whether a sequence number must be re-reported.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit e3d3d4c7421a2277be24254524f56e17419c1449
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Fri Feb 29 11:38:20 2008 +1000

    drm/i915: remove leading underscores and fixup sarea
    
    the sarea fix came from Alan Hourihane
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit e1a98c2e5dd333becd47e188cf66093e1a86f41b
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Fri Feb 29 11:35:21 2008 +1000

    drm/i915: Add a dri2 init path that gets the lock from the dri2 sarea.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 70a1de5ac59b59cb8f7c1d08ce455374785bca05
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Fri Feb 29 11:31:08 2008 +1000

    drm/i915: Only look up dev_priv->mmio_map if it's not already set up
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 047243f9c142c599d1ab82991a5a0a8dd0170bb8
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Fri Feb 29 11:30:26 2008 +1000

    drm/i915: Add I915_PARAM_CHIPSET_ID param to get chipset ID.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit b57dde526e116f14a5697b5c0d9697493baa2d5d
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Fri Feb 29 11:29:42 2008 +1000

    drm/i915: Make sarea_priv setup optional.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 3cb77dd7f3974fc64de6ec3859c970b9b9ddd1fc
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Fri Feb 29 11:27:30 2008 +1000

    drm/i915: Re-report breadcrumbs on poll to the fence manager,
    
    since a breadcrumb may actually turn up before a corresponding fence object
    has been placed on the fence ring.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 0f066ed26802ff65965f7b29346cec98921c2b29
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Fri Feb 29 11:02:23 2008 +1000

    drm/i915: Avoid calling drm_fence_flush_old excessively.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit e927ccfe2905d680b4217fc6af17c9c1ff86ebef
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Fri Feb 29 10:57:18 2008 +1000

    drm/fence: differentiate between flushes and waiting types.
    
    Add a "command_stream_barrier" method to the bo driver.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit ae0bdbd7e1d02e978323640256125f8a5391510a
Author: Nick Piggin <npiggin at suse.de>
Date:   Thu Feb 7 16:29:15 2008 +1000

    drm:  reimplement nopfn callers with fault
    
    Reimplement the existing nopfn handlers with ->fault so we can subsequently
    remove nopfn
    
    Signed-off-by: Nick Piggin <npiggin at suse.de>
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 29403da6adea71d155a4c3ad0923cd7c86f0bf9e
Author: Dave Airlie <airlied at redhat.com>
Date:   Thu Feb 7 16:21:57 2008 +1000

    drm: remove tlb flush call as no longer needed.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit b691c8da4038e0e01fb3beaa06bf21468c8dd0f0
Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Jan 25 11:36:39 2008 +1000

    drm/i915: final i915 interface change - make reloc use copy from user
    
    Life is a lot simpler especially with relocation avoidance code, if we
    simple store the relocations in a malloced buffer and copy from user
    instead of bring up a BO everytime.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 222a41948d2a1f454c7f978f3c3f18dc25061216
Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Jan 25 11:05:59 2008 +1000

    drm: whitespace and some label cleanups.
    
    Signed-off-by: Dave Airlie <airlied at linux.ie>

commit 046fd35ec86a5744b6a1073e47fd7fea1ab0c553
Author: Kyle McMartin <kyle at mcmartin.ca>
Date:   Thu Jan 24 16:48:24 2008 +1000

    i915: fix invalid opcode exception on cpus without clflush
    
    i915_flush_ttm was unconditionally executing a clflush instruction
    to (obviously) flush the cache. Instead, check if the cpu supports
    clflush, and if not, fall back to calling wbinvd to flush the entire
    cache.
    
    Signed-off-by: Kyle McMartin <kmcmartin at redhat.com>
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 9f32218d9b003af5206d9e0c280a2bcff19ee125
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Jan 24 16:47:28 2008 +1000

    drm: Add additional explanation of DRM_BO_FLAG_CACHED_MAPPED
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

commit 9149865182a2edf9e62ad290bbe93521f1c00372
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Thu Jan 24 16:44:25 2008 +1000

    drm/ttm:  Properly propagate the user-space fence flags.
    
    This avoids a sync flush when user-space has already programmed
    and MI_FLUSH in the batchbuffer.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

[...10737 lines suppressed...]
+	if (dev_priv->irq_enabled && (--dev_priv->user_irq_refcount == 0)) {
+		/*		dev_priv->irq_enable_reg &= ~USER_INT_FLAG;
+		  I915_WRITE16(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);*/
+	}
+	spin_unlock(&dev_priv->user_irq_lock);
+}
+
+
 static int i915_wait_irq(struct drm_device * dev, int irq_nr)
 {
 	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -308,19 +411,24 @@ static int i915_wait_irq(struct drm_device * dev, int irq_nr)
 
 	dev_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
 
+	i915_user_irq_on(dev_priv);
 	DRM_WAIT_ON(ret, dev_priv->irq_queue, 3 * DRM_HZ,
 		    READ_BREADCRUMB(dev_priv) >= irq_nr);
+	i915_user_irq_off(dev_priv);
 
 	if (ret == -EBUSY) {
 		DRM_ERROR("EBUSY -- rec: %d emitted: %d\n",
 			  READ_BREADCRUMB(dev_priv), (int)dev_priv->counter);
 	}
 
-	dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
+	if (dev_priv->sarea_priv)
+		dev_priv->sarea_priv->last_dispatch =
+			READ_BREADCRUMB(dev_priv);
 	return ret;
 }
 
-static int i915_driver_vblank_do_wait(struct drm_device *dev, unsigned int *sequence,
+static int i915_driver_vblank_do_wait(struct drm_device *dev,
+				      unsigned int *sequence,
 				      atomic_t *counter)
 {
 	drm_i915_private_t *dev_priv = dev->dev_private;
@@ -397,15 +505,15 @@ int i915_irq_wait(struct drm_device *dev, void *data,
 static void i915_enable_interrupt (struct drm_device *dev)
 {
 	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-	u16 flag;
 
-	flag = 0;
+	dev_priv->irq_enable_reg = USER_INT_FLAG;
 	if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_A)
-		flag |= VSYNC_PIPEA_FLAG;
+		dev_priv->irq_enable_reg |= VSYNC_PIPEA_FLAG;
 	if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_B)
-		flag |= VSYNC_PIPEB_FLAG;
+		dev_priv->irq_enable_reg |= VSYNC_PIPEB_FLAG;
 
-	I915_WRITE16(I915REG_INT_ENABLE_R, USER_INT_FLAG | flag);
+	I915_WRITE16(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
+	dev_priv->irq_enabled = 1;
 }
 
 /* Set the vblank monitor pipe
@@ -464,7 +572,7 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
 	drm_i915_private_t *dev_priv = dev->dev_private;
 	drm_i915_vblank_swap_t *swap = data;
 	drm_i915_vbl_swap_t *vbl_swap;
-	unsigned int pipe, seqtype, curseq;
+	unsigned int pipe, seqtype, curseq, plane;
 	unsigned long irqflags;
 	struct list_head *list;
 
@@ -473,18 +581,20 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
 		return -EINVAL;
 	}
 
-	if (dev_priv->sarea_priv->rotation) {
+	if (!dev_priv->sarea_priv || dev_priv->sarea_priv->rotation) {
 		DRM_DEBUG("Rotation not supported\n");
 		return -EINVAL;
 	}
 
 	if (swap->seqtype & ~(_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE |
-			     _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS)) {
+			     _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS |
+			     _DRM_VBLANK_FLIP)) {
 		DRM_ERROR("Invalid sequence type 0x%x\n", swap->seqtype);
 		return -EINVAL;
 	}
 
-	pipe = (swap->seqtype & _DRM_VBLANK_SECONDARY) ? 1 : 0;
+	plane = (swap->seqtype & _DRM_VBLANK_SECONDARY) ? 1 : 0;
+	pipe = i915_get_pipe(dev, plane);
 
 	seqtype = swap->seqtype & (_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE);
 
@@ -495,6 +605,11 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
 
 	spin_lock_irqsave(&dev->drw_lock, irqflags);
 
+	/* It makes no sense to schedule a swap for a drawable that doesn't have
+	 * valid information at this point. E.g. this could mean that the X
+	 * server is too old to push drawable information to the DRM, in which
+	 * case all such swaps would become ineffective.
+	 */
 	if (!drm_get_drawable_info(dev, swap->drawable)) {
 		spin_unlock_irqrestore(&dev->drw_lock, irqflags);
 		DRM_DEBUG("Invalid drawable ID %d\n", swap->drawable);
@@ -517,14 +632,43 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
 		}
 	}
 
+	if (swap->seqtype & _DRM_VBLANK_FLIP) {
+		swap->sequence--;
+
+		if ((curseq - swap->sequence) <= (1<<23)) {
+			struct drm_drawable_info *drw;
+
+			LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+			spin_lock_irqsave(&dev->drw_lock, irqflags);
+
+			drw = drm_get_drawable_info(dev, swap->drawable);
+
+			if (!drw) {
+				spin_unlock_irqrestore(&dev->drw_lock,
+				    irqflags);
+				DRM_DEBUG("Invalid drawable ID %d\n",
+					  swap->drawable);
+				return -EINVAL;
+			}
+
+			i915_dispatch_vsync_flip(dev, drw, plane);
+
+			spin_unlock_irqrestore(&dev->drw_lock, irqflags);
+
+			return 0;
+		}
+	}
+
 	spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
 
 	list_for_each(list, &dev_priv->vbl_swaps.head) {
 		vbl_swap = list_entry(list, drm_i915_vbl_swap_t, head);
 
 		if (vbl_swap->drw_id == swap->drawable &&
-		    vbl_swap->pipe == pipe &&
+		    vbl_swap->plane == plane &&
 		    vbl_swap->sequence == swap->sequence) {
+			vbl_swap->flip = (swap->seqtype & _DRM_VBLANK_FLIP);
 			spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
 			DRM_DEBUG("Already scheduled\n");
 			return 0;
@@ -548,8 +692,12 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
 	DRM_DEBUG("\n");
 
 	vbl_swap->drw_id = swap->drawable;
-	vbl_swap->pipe = pipe;
+	vbl_swap->plane = plane;
 	vbl_swap->sequence = swap->sequence;
+	vbl_swap->flip = (swap->seqtype & _DRM_VBLANK_FLIP);
+
+	if (vbl_swap->flip)
+		swap->sequence++;
 
 	spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
 
@@ -567,7 +715,7 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
 {
 	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
 
-	I915_WRITE16(I915REG_HWSTAM, 0xfffe);
+	I915_WRITE16(I915REG_HWSTAM, 0xeffe);
 	I915_WRITE16(I915REG_INT_MASK_R, 0x0);
 	I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);
 }
@@ -580,10 +728,17 @@ void i915_driver_irq_postinstall(struct drm_device * dev)
 	INIT_LIST_HEAD(&dev_priv->vbl_swaps.head);
 	dev_priv->swaps_pending = 0;
 
-	if (!dev_priv->vblank_pipe)
-		dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A;
+	spin_lock_init(&dev_priv->user_irq_lock);
+	dev_priv->user_irq_refcount = 0;
+
 	i915_enable_interrupt(dev);
 	DRM_INIT_WAITQUEUE(&dev_priv->irq_queue);
+
+	/*
+	 * Initialize the hardware status page IRQ location.
+	 */
+
+	I915_WRITE(I915REG_INSTPM, (1 << 5) | (1 << 21));
 }
 
 void i915_driver_irq_uninstall(struct drm_device * dev)
@@ -594,6 +749,7 @@ void i915_driver_irq_uninstall(struct drm_device * dev)
 	if (!dev_priv)
 		return;
 
+	dev_priv->irq_enabled = 0;
 	I915_WRITE16(I915REG_HWSTAM, 0xffff);
 	I915_WRITE16(I915REG_INT_MASK_R, 0xffff);
 	I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);

linux-2.6-e1000-ich9.patch:

--- NEW FILE linux-2.6-e1000-ich9.patch ---
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
index 8f8139d..22c49ec 100644
--- a/drivers/net/e1000e/ich8lan.c
+++ b/drivers/net/e1000e/ich8lan.c
@@ -209,6 +209,12 @@ static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
 
 	/* Verify phy id */
 	switch (phy->id) {
+	case 0x0:
+		if (hw->adapter->pdev->device == 0x10be)
+			hw_dbg(hw, "got 0 phy id, trying anyway");
+			/* Fall through to IGP03E1000 case below */
+		else
+			return -E1000_ERR_PHY;
 	case IGP03E1000_E_PHY_ID:
 		phy->type = e1000_phy_igp_3;
 		phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 3031d6d..932b4d8 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -4095,6 +4095,7 @@ static struct pci_device_id e1000_pci_tbl[] = {
 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE_G), board_ich9lan },
 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE_GT), board_ich9lan },
 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_AMT), board_ich9lan },
+	{ PCI_VDEVICE(INTEL, 0x10be), board_ich9lan },
 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_C), board_ich9lan },
 
 	{ }	/* terminate list */

linux-2.6-hotfixes.patch:

--- NEW FILE linux-2.6-hotfixes.patch ---

linux-2.6-ppc-use-libgcc.patch:

--- NEW FILE linux-2.6-ppc-use-libgcc.patch ---
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 4bb023f..63e68d2 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -23,3 +23,5 @@ obj-$(CONFIG_SMP)	+= locks.o
 endif
 
 obj-$(CONFIG_PPC_LIB_RHEAP) += rheap.o
+
+obj-y	+=	libgcc/
diff --git a/arch/powerpc/lib/libgcc/Makefile b/arch/powerpc/lib/libgcc/Makefile
new file mode 100644
index 0000000..36d8e1e
--- /dev/null
+++ b/arch/powerpc/lib/libgcc/Makefile
@@ -0,0 +1,2 @@
+obj-y	+=	__divdi3.o
+obj-y	+=	__udivmoddi4.o
diff --git a/arch/powerpc/lib/libgcc/__divdi3.c b/arch/powerpc/lib/libgcc/__divdi3.c
new file mode 100644
index 0000000..f23c6fe
--- /dev/null
+++ b/arch/powerpc/lib/libgcc/__divdi3.c
@@ -0,0 +1,23 @@
+#include "libgcc.h"
+
+s64 __divdi3(s64 num, s64 den)
+{
+	int minus = 0;
+	s64 v;
+
+	if (num < 0) {
+		num = -num;
+		minus = 1;
+	}
+	if (den < 0) {
+		den = -den;
+		minus ^= 1;
+	}
+
+	v = __udivmoddi4(num, den, NULL);
+	if (minus)
+		v = -v;
+
+	return v;
+}
+EXPORT_SYMBOL(__divdi3);
diff --git a/arch/powerpc/lib/libgcc/__udivmoddi4.c b/arch/powerpc/lib/libgcc/__udivmoddi4.c
new file mode 100644
index 0000000..2df0caa
--- /dev/null
+++ b/arch/powerpc/lib/libgcc/__udivmoddi4.c
@@ -0,0 +1,31 @@
+#include "libgcc.h"
+
+u64 __udivmoddi4(u64 num, u64 den, u64 * rem_p)
+{
+	u64 quot = 0, qbit = 1;
+
+	if (den == 0) {
+		BUG();
+	}
+
+	/* Left-justify denominator and count shift */
+	while ((s64) den >= 0) {
+		den <<= 1;
+		qbit <<= 1;
+	}
+
+	while (qbit) {
+		if (den <= num) {
+			num -= den;
+			quot += qbit;
+		}
+		den >>= 1;
+		qbit >>= 1;
+	}
+
+	if (rem_p)
+		*rem_p = num;
+
+	return quot;
+}
+EXPORT_SYMBOL(__udivmoddi4);
diff --git a/arch/powerpc/lib/libgcc/libgcc.h b/arch/powerpc/lib/libgcc/libgcc.h
new file mode 100644
index 0000000..4dd6a2e
--- /dev/null
+++ b/arch/powerpc/lib/libgcc/libgcc.h
@@ -0,0 +1,12 @@
+#ifndef _LIBGCC_H_
+#define _LIBGCC_H_
+
+#include <linux/types.h>
+#include <linux/module.h>
+
+/* Cribbed from klibc/libgcc/ */
+
+s64 __divdi3(s64 num, s64 den);
+u64 __udivmoddi4(u64 num, u64 den, u64 * rem_p);
+
+#endif /*_LIBGCC_H_*/

linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_25.patch:

--- NEW FILE linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_25.patch ---
>From 81a2be32be9add85cbd1bf035b4869295e8daeb3 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc at redhat.com>
Date: Fri, 29 Feb 2008 18:32:24 +0000
Subject: [PATCH] Revert linux-2.6-execshield.patch from kernel-2_6_25-0_78_rc3_git1_fc9

Signed-off-by: Mark McLoughlin <markmc at redhat.com>
---
 arch/x86/kernel/cpu/common.c  |   14 -----
 arch/x86/kernel/process_32.c  |   39 +--------------
 arch/x86/kernel/setup64.c     |   40 +++++++++++++++
 arch/x86/kernel/smp_32.c      |    3 -
 arch/x86/kernel/traps_32.c    |  106 +---------------------------------------
 arch/x86/mm/init_32.c         |   20 ++++----
 arch/x86/mm/mmap.c            |    4 +-
 arch/x86/vdso/vdso32-setup.c  |    2 +-
 fs/binfmt_elf.c               |   21 +-------
 fs/proc/array.c               |    8 +--
 include/asm-ia64/pgalloc.h    |    4 --
 include/asm-powerpc/pgalloc.h |    5 --
 include/asm-ppc/pgalloc.h     |    5 --
 include/asm-s390/pgalloc.h    |    4 --
 include/asm-sparc/pgalloc.h   |    4 --
 include/asm-sparc64/pgalloc.h |    4 --
 include/asm-x86/desc.h        |   16 ------
 include/asm-x86/elf.h         |    2 +
 include/asm-x86/mmu.h         |    6 --
 include/asm-x86/pgalloc_64.h  |    7 ---
 include/asm-x86/processor.h   |    6 --
 include/linux/mm.h            |    8 +---
 include/linux/mm_types.h      |    3 -
 include/linux/resource.h      |    5 +--
 include/linux/sched.h         |    7 ---
 kernel/sysctl.c               |   28 -----------
 mm/mmap.c                     |  107 +++-------------------------------------
 mm/mprotect.c                 |    9 +---
 mm/mremap.c                   |    4 +-
 29 files changed, 74 insertions(+), 417 deletions(-)

diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 53cb84e..a38aafa 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -478,20 +478,6 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
 	 * we do "generic changes."
 	 */
 
-	/*
-	 *  emulation of NX with segment limits unfortunately means
-	 *  we have to disable the fast system calls, due to the way that
-	 *  sysexit clears the segment limits on return.
-	 *  If we have either disabled exec-shield on the boot command line,
-	 *  or we have NX, then we don't need to do this.
-	 */
-	if (exec_shield != 0) {
-#ifdef CONFIG_X86_PAE
-		if (!test_bit(X86_FEATURE_NX, c->x86_capability))
-#endif
-			clear_bit(X86_FEATURE_SEP, c->x86_capability);
-	}
-
 	/* If the model name is still unset, do table lookup. */
 	if ( !c->x86_model_id[0] ) {
 		char *p;
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
index 971fdba..a7d50a5 100644
--- a/arch/x86/kernel/process_32.c
+++ b/arch/x86/kernel/process_32.c
@@ -677,8 +677,7 @@ struct task_struct * __switch_to(struct task_struct *prev_p, struct task_struct
 	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
 
 	__unlazy_fpu(prev_p);
-	if (next_p->mm)
-		load_user_cs_desc(cpu, next_p->mm);
+
 
 	/* we're going to use this soon, after a few expensive things */
 	if (next_p->fpu_counter > 5)
@@ -848,39 +847,3 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
 	unsigned long range_end = mm->brk + 0x02000000;
 	return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
 }
-
-static void modify_cs(struct mm_struct *mm, unsigned long limit)
-{
-	mm->context.exec_limit = limit;
-	set_user_cs(&mm->context.user_cs, limit);
-	if (mm == current->mm) {
-		preempt_disable();
-		load_user_cs_desc(smp_processor_id(), mm);
-		preempt_enable();
-	}
-}
-
-void arch_add_exec_range(struct mm_struct *mm, unsigned long limit)
-{
-	if (limit > mm->context.exec_limit)
-		modify_cs(mm, limit);
-}
-
-void arch_remove_exec_range(struct mm_struct *mm, unsigned long old_end)
-{
-	struct vm_area_struct *vma;
-	unsigned long limit = PAGE_SIZE;
-
-	if (old_end == mm->context.exec_limit) {
-		for (vma = mm->mmap; vma; vma = vma->vm_next)
-			if ((vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
-				limit = vma->vm_end;
-		modify_cs(mm, limit);
-	}
-}
-
-void arch_flush_exec_range(struct mm_struct *mm)
-{
-	mm->context.exec_limit = 0;
-	set_user_cs(&mm->context.user_cs, 0);
-}
diff --git a/arch/x86/kernel/setup64.c b/arch/x86/kernel/setup64.c
index 8a940dc..309366f 100644
--- a/arch/x86/kernel/setup64.c
+++ b/arch/x86/kernel/setup64.c
@@ -45,6 +45,46 @@ EXPORT_SYMBOL_GPL(__supported_pte_mask);
 
 static int do_not_nx __cpuinitdata = 0;
 
+/* noexec=on|off
+Control non executable mappings for 64bit processes.
+
+on	Enable(default)
+off	Disable
+*/ 
+static int __init nonx_setup(char *str)
+{
+	if (!str)
+		return -EINVAL;
+	if (!strncmp(str, "on", 2)) {
+                __supported_pte_mask |= _PAGE_NX; 
+ 		do_not_nx = 0; 
+	} else if (!strncmp(str, "off", 3)) {
+		do_not_nx = 1;
+		__supported_pte_mask &= ~_PAGE_NX;
+        }
+	return 0;
+} 
+early_param("noexec", nonx_setup);
+
+int force_personality32 = 0; 
+
+/* noexec32=on|off
+Control non executable heap for 32bit processes.
+To control the stack too use noexec=off
+
+on	PROT_READ does not imply PROT_EXEC for 32bit processes
+off	PROT_READ implies PROT_EXEC (default)
+*/
+static int __init nonx32_setup(char *str)
+{
+	if (!strcmp(str, "on"))
+		force_personality32 &= ~READ_IMPLIES_EXEC;
+	else if (!strcmp(str, "off"))
+		force_personality32 |= READ_IMPLIES_EXEC;
+	return 1;
+}
+__setup("noexec32=", nonx32_setup);
+
 /*
  * Copy data used in early init routines from the initial arrays to the
  * per cpu data areas.  These arrays then become expendable and the
diff --git a/arch/x86/kernel/smp_32.c b/arch/x86/kernel/smp_32.c
index cca75b4..dc0cde9 100644
--- a/arch/x86/kernel/smp_32.c
+++ b/arch/x86/kernel/smp_32.c
@@ -22,7 +22,6 @@
 
 #include <asm/mtrr.h>
 #include <asm/tlbflush.h>
-#include <asm/desc.h>
 #include <asm/mmu_context.h>
 #include <mach_apic.h>
 
@@ -317,8 +316,6 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
 	unsigned long cpu;
 
 	cpu = get_cpu();
-	if (current->active_mm)
-		load_user_cs_desc(cpu, current->active_mm);
 
 	if (!cpu_isset(cpu, flush_cpumask))
 		goto out;
diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
index 7865615..b22c01e 100644
--- a/arch/x86/kernel/traps_32.c
+++ b/arch/x86/kernel/traps_32.c
@@ -592,91 +592,7 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
 DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
 DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
 DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0, 0)
-
-/*
- * lazy-check for CS validity on exec-shield binaries:
- *
- * the original non-exec stack patch was written by
- * Solar Designer <solar at openwall.com>. Thanks!
- */
-static int
-check_lazy_exec_limit(int cpu, struct pt_regs *regs, long error_code)
-{
-	struct desc_struct *desc1, *desc2;
-	struct vm_area_struct *vma;
-	unsigned long limit;
-
-	if (current->mm == NULL)
-		return 0;
-
-	limit = -1UL;
-	if (current->mm->context.exec_limit != -1UL) {
-		limit = PAGE_SIZE;
-		spin_lock(&current->mm->page_table_lock);
-		for (vma = current->mm->mmap; vma; vma = vma->vm_next)
-			if ((vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
-				limit = vma->vm_end;
-		vma = get_gate_vma(current);
-		if (vma && (vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
-			limit = vma->vm_end;
-		spin_unlock(&current->mm->page_table_lock);
-		if (limit >= TASK_SIZE)
-			limit = -1UL;
-		current->mm->context.exec_limit = limit;
-	}
-	set_user_cs(&current->mm->context.user_cs, limit);
-
-	desc1 = &current->mm->context.user_cs;
-	desc2 = get_cpu_gdt_table(cpu) + GDT_ENTRY_DEFAULT_USER_CS;
-
-	if (desc1->a != desc2->a || desc1->b != desc2->b) {
-		/*
-		 * The CS was not in sync - reload it and retry the
-		 * instruction. If the instruction still faults then
-		 * we won't hit this branch next time around.
-		 */
-		if (print_fatal_signals >= 2) {
-			printk(KERN_ERR "#GPF fixup (%ld[seg:%lx]) at %08lx, CPU#%d.\n",
-				error_code, error_code/8, regs->ip, smp_processor_id());
-			printk(KERN_ERR "exec_limit: %08lx, user_cs: %08x/%08x, CPU_cs: %08x/%08x.\n",
-				current->mm->context.exec_limit, desc1->a, desc1->b, desc2->a, desc2->b);
-		}
-		load_user_cs_desc(cpu, current->mm);
-		return 1;
-	}
-
-	return 0;
-}
-
-/*
- * The fixup code for errors in iret jumps to here (iret_exc).  It loses
- * the original trap number and error code.  The bogus trap 32 and error
- * code 0 are what the vanilla kernel delivers via:
- * DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0, 1)
- *
- * NOTE: Because of the final "1" in the macro we need to enable interrupts.
- *
- * In case of a general protection fault in the iret instruction, we
- * need to check for a lazy CS update for exec-shield.
- */
-void do_iret_error(struct pt_regs *regs, long error_code)
-{
-	int ok;
-	local_irq_enable();
-	ok = check_lazy_exec_limit(get_cpu(), regs, error_code);
-	put_cpu();
-	if (!ok && notify_die(DIE_TRAP, "iret exception", regs,
-	    error_code, 32, SIGSEGV) != NOTIFY_STOP) {
-		siginfo_t info;
-		info.si_signo = SIGSEGV;
-		info.si_errno = 0;
-		info.si_code = ILL_BADSTK;
-		info.si_addr = 0;
-		do_trap(32, SIGSEGV, "iret exception", 0, regs, error_code,
-			&info);
-	}
-}
-
+DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0, 1)
 
 void __kprobes do_general_protection(struct pt_regs * regs,
 					      long error_code)
@@ -684,7 +600,6 @@ void __kprobes do_general_protection(struct pt_regs * regs,
 	int cpu = get_cpu();
 	struct tss_struct *tss = &per_cpu(init_tss, cpu);
 	struct thread_struct *thread = &current->thread;
-	int ok;
 
 	/*
 	 * Perform the lazy TSS's I/O bitmap copy. If the TSS has an
@@ -711,6 +626,7 @@ void __kprobes do_general_protection(struct pt_regs * regs,
 		put_cpu();
 		return;
 	}
+	put_cpu();
 
 	if (regs->flags & VM_MASK)
 		goto gp_in_vm86;
@@ -718,22 +634,6 @@ void __kprobes do_general_protection(struct pt_regs * regs,
 	if (!user_mode(regs))
 		goto gp_in_kernel;
 
-	ok = check_lazy_exec_limit(cpu, regs, error_code);
-
-	put_cpu();
-
-	if (ok)
-		return;
-
-	if (print_fatal_signals) {
-		printk(KERN_ERR "#GPF(%ld[seg:%lx]) at %08lx, CPU#%d.\n", error_code,
-			error_code/8, regs->ip, smp_processor_id());
-		printk(KERN_ERR "exec_limit: %08lx, user_cs: %08x/%08x.\n",
-			current->mm->context.exec_limit,
-			current->mm->context.user_cs.a,
-			current->mm->context.user_cs.b);
-	}
-
 	current->thread.error_code = error_code;
 	current->thread.trap_no = 13;
 	if (show_unhandled_signals && unhandled_signal(current, SIGSEGV) &&
@@ -750,13 +650,11 @@ void __kprobes do_general_protection(struct pt_regs * regs,
 	return;
 
 gp_in_vm86:
-	put_cpu();
 	local_irq_enable();
 	handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
 	return;
 
 gp_in_kernel:
-	put_cpu();
 	if (!fixup_exception(regs)) {
 		current->thread.error_code = error_code;
 		current->thread.trap_no = 13;
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index f5926ae..ee1091a 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -474,7 +474,7 @@ static int disable_nx __initdata;
  * Control non executable mappings.
  *
  * on      Enable
- * off     Disable (disables exec-shield too)
+ * off     Disable
  */
 static int __init noexec_setup(char *str)
 {
@@ -483,12 +483,14 @@ static int __init noexec_setup(char *str)
 			__supported_pte_mask |= _PAGE_NX;
 			disable_nx = 0;
 		}
-	} else if (!strcmp(str, "off")) {
-		disable_nx = 1;
-		__supported_pte_mask &= ~_PAGE_NX;
-		exec_shield = 0;
-	} else
-		return -EINVAL;
+	} else {
+		if (!strcmp(str, "off")) {
+			disable_nx = 1;
+			__supported_pte_mask &= ~_PAGE_NX;
+		} else {
+			return -EINVAL;
+		}
+	}
 
 	return 0;
 }
@@ -526,10 +528,6 @@ void __init paging_init(void)
 	if (nx_enabled)
 		printk(KERN_INFO "NX (Execute Disable) protection: active\n");
 #endif
-	if (exec_shield)
-		printk(KERN_INFO "Using x86 segment limits to approximate "
-			"NX protection\n");
-
 	pagetable_init();
 
 	load_cr3(swapper_pg_dir);
diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
index ec932ae..56fe712 100644
--- a/arch/x86/mm/mmap.c
+++ b/arch/x86/mm/mmap.c
@@ -111,15 +111,13 @@ static unsigned long mmap_legacy_base(void)
  */
 void arch_pick_mmap_layout(struct mm_struct *mm)
 {
-	if (!(2 & exec_shield) && mmap_is_legacy()) {
+	if (mmap_is_legacy()) {
 		mm->mmap_base = mmap_legacy_base();
 		mm->get_unmapped_area = arch_get_unmapped_area;
 		mm->unmap_area = arch_unmap_area;
 	} else {
 		mm->mmap_base = mmap_base();
 		mm->get_unmapped_area = arch_get_unmapped_area_topdown;
-		if (!(current->personality & READ_IMPLIES_EXEC))
-			mm->get_unmapped_exec_area = arch_get_unmapped_exec_area;
 		mm->unmap_area = arch_unmap_area_topdown;
 	}
 }
diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c
index 0bd5f44..348f134 100644
--- a/arch/x86/vdso/vdso32-setup.c
+++ b/arch/x86/vdso/vdso32-setup.c
@@ -336,7 +336,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack)
 	if (compat)
 		addr = VDSO_HIGH_BASE;
 	else {
-		addr = get_unmapped_area_prot(NULL, 0, PAGE_SIZE, 0, 0, 1);
+		addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0);
 		if (IS_ERR_VALUE(addr)) {
 			ret = addr;
 			goto up_fail;
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 7681532..41a958a 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -81,7 +81,7 @@ static struct linux_binfmt elf_format = {
 		.hasvdso	= 1
 };
 
-#define BAD_ADDR(x) IS_ERR_VALUE(x)
+#define BAD_ADDR(x) ((unsigned long)(x) >= TASK_SIZE)
 
 static int set_brk(unsigned long start, unsigned long end)
 {
@@ -709,11 +709,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
 			break;
 		}
 
-	if (current->personality == PER_LINUX && (exec_shield & 2)) {
-		executable_stack = EXSTACK_DISABLE_X;
-		current->flags |= PF_RANDOMIZE;
-	}
-
 	/* Some simple consistency checks for the interpreter */
 	if (elf_interpreter) {
 		retval = -ELIBBAD;
@@ -733,15 +728,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
 	if (retval)
 		goto out_free_dentry;
 
-#ifdef CONFIG_X86_32
-	/*
-	 * Turn off the CS limit completely if exec-shield disabled or
-	 * NX active:
-	 */
-	if (!exec_shield || executable_stack != EXSTACK_DISABLE_X || nx_enabled)
-		arch_add_exec_range(current->mm, -1);
-#endif
-
 	/* Discard our unneeded old files struct */
 	if (files) {
 		put_files_struct(files);
@@ -755,8 +741,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
 	/* Do this immediately, since STACK_TOP as used in setup_arg_pages
 	   may depend on the personality.  */
 	SET_PERSONALITY(loc->elf_ex, 0);
-	if (!(exec_shield & 2) &&
-			elf_read_implies_exec(loc->elf_ex, executable_stack))
+	if (elf_read_implies_exec(loc->elf_ex, executable_stack))
 		current->personality |= READ_IMPLIES_EXEC;
 
 	if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
@@ -921,7 +906,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
 					    interpreter,
 					    &interp_map_addr,
 					    load_bias);
-		if (!BAD_ADDR(elf_entry)) {
+		if (!IS_ERR((void *)elf_entry)) {
 			/*
 			 * load_elf_interp() returns relocation
 			 * adjustment
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 46adc3b..07d6c48 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -471,12 +471,8 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
 	}
 	rcu_read_unlock();
 
-	if (!whole || num_threads < 2) {
-		wchan = 0;
-		if (current->uid == task->uid || current->euid == task->uid ||
-			capable(CAP_SYS_NICE))
-				wchan = get_wchan(task);
-	}
+	if (!whole || num_threads < 2)
+		wchan = get_wchan(task);
 	if (!whole) {
 		min_flt = task->min_flt;
 		maj_flt = task->maj_flt;
diff --git a/include/asm-ia64/pgalloc.h b/include/asm-ia64/pgalloc.h
index 24f183a..b9ac1a6 100644
--- a/include/asm-ia64/pgalloc.h
+++ b/include/asm-ia64/pgalloc.h
@@ -1,10 +1,6 @@
 #ifndef _ASM_IA64_PGALLOC_H
 #define _ASM_IA64_PGALLOC_H
 
-#define arch_add_exec_range(mm, limit)		do { ; } while (0)
-#define arch_flush_exec_range(mm)		do { ; } while (0)
-#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
-
 /*
  * This file contains the functions and defines necessary to allocate
  * page tables.
diff --git a/include/asm-powerpc/pgalloc.h b/include/asm-powerpc/pgalloc.h
index 25068ae..b4505ed 100644
--- a/include/asm-powerpc/pgalloc.h
+++ b/include/asm-powerpc/pgalloc.h
@@ -2,11 +2,6 @@
 #define _ASM_POWERPC_PGALLOC_H
 #ifdef __KERNEL__
 
-/* Dummy functions since we don't support execshield on ppc */
-#define arch_add_exec_range(mm, limit) do { ; } while (0)
-#define arch_flush_exec_range(mm)      do { ; } while (0)
-#define arch_remove_exec_range(mm, limit) do { ; } while (0)
-
 #ifdef CONFIG_PPC64
 #include <asm/pgalloc-64.h>
 #else
diff --git a/include/asm-ppc/pgalloc.h b/include/asm-ppc/pgalloc.h
index de55ad5..fd4d1d7 100644
--- a/include/asm-ppc/pgalloc.h
+++ b/include/asm-ppc/pgalloc.h
@@ -41,10 +41,5 @@ extern void pte_free(struct mm_struct *mm, pgtable_t pte);
 
 #define check_pgt_cache()	do { } while (0)
 
-#define arch_add_exec_range(mm, limit)         do { ; } while (0)
-#define arch_flush_exec_range(mm)              do { ; } while (0)
-#define arch_remove_exec_range(mm, limit)      do { ; } while (0)
-
-
 #endif /* _PPC_PGALLOC_H */
 #endif /* __KERNEL__ */
diff --git a/include/asm-s390/pgalloc.h b/include/asm-s390/pgalloc.h
index a43f0ec..f5b2bf3 100644
--- a/include/asm-s390/pgalloc.h
+++ b/include/asm-s390/pgalloc.h
@@ -17,10 +17,6 @@
 #include <linux/gfp.h>
 #include <linux/mm.h>
 
-#define arch_add_exec_range(mm, limit) do { ; } while (0)
-#define arch_flush_exec_range(mm)      do { ; } while (0)
-#define arch_remove_exec_range(mm, limit) do { ; } while (0)
-
 #define check_pgt_cache()	do {} while (0)
 
 unsigned long *crst_table_alloc(struct mm_struct *, int);
diff --git a/include/asm-sparc/pgalloc.h b/include/asm-sparc/pgalloc.h
index 2632807..6292cd0 100644
--- a/include/asm-sparc/pgalloc.h
+++ b/include/asm-sparc/pgalloc.h
@@ -66,8 +66,4 @@ BTFIXUPDEF_CALL(void, pte_free, pgtable_t )
 #define pte_free(mm, pte)	BTFIXUP_CALL(pte_free)(pte)
 #define __pte_free_tlb(tlb, pte)	pte_free((tlb)->mm, pte)
 
-#define arch_add_exec_range(mm, limit)		do { ; } while (0)
-#define arch_flush_exec_range(mm)		do { ; } while (0)
-#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
-
 #endif /* _SPARC_PGALLOC_H */
diff --git a/include/asm-sparc64/pgalloc.h b/include/asm-sparc64/pgalloc.h
index c998da2..3ee2d40 100644
--- a/include/asm-sparc64/pgalloc.h
+++ b/include/asm-sparc64/pgalloc.h
@@ -79,8 +79,4 @@ static inline void check_pgt_cache(void)
 	quicklist_trim(0, NULL, 25, 16);
 }
 
-#define arch_add_exec_range(mm, limit)		do { ; } while (0)
-#define arch_flush_exec_range(mm)		do { ; } while (0)
-#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
-
 #endif /* _SPARC64_PGALLOC_H */
diff --git a/include/asm-x86/desc.h b/include/asm-x86/desc.h
index 7ad80b9..5b6a05d 100644
--- a/include/asm-x86/desc.h
+++ b/include/asm-x86/desc.h
@@ -353,22 +353,6 @@ static inline void set_system_gate_ist(int n, void *addr, unsigned ist)
 	_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS);
 }
 
-static inline void set_user_cs(struct desc_struct *desc, unsigned long limit)
-{
-	limit = (limit - 1) / PAGE_SIZE;
-	desc->a = limit & 0xffff;
-	desc->b = (limit & 0xf0000) | 0x00c0fb00;
-}
-
-#define load_user_cs_desc(cpu, mm) \
-	get_cpu_gdt_table(cpu)[GDT_ENTRY_DEFAULT_USER_CS] = (mm)->context.user_cs
-
-#ifdef CONFIG_X86_32
-extern void arch_add_exec_range(struct mm_struct *mm, unsigned long limit);
-extern void arch_remove_exec_range(struct mm_struct *mm, unsigned long limit);
-extern void arch_flush_exec_range(struct mm_struct *mm);
-#endif /* CONFIG_X86_32 */
-
 #else
 /*
  * GET_DESC_BASE reads the descriptor base of the specified segment.
diff --git a/include/asm-x86/elf.h b/include/asm-x86/elf.h
index 001b577..fb62f99 100644
--- a/include/asm-x86/elf.h
+++ b/include/asm-x86/elf.h
@@ -185,6 +185,7 @@ static inline void elf_common_init(struct thread_struct *t,
 			clear_thread_flag(TIF_ABI_PENDING);	\
 		else						\
 			set_thread_flag(TIF_ABI_PENDING);	\
+		current->personality |= force_personality32;	\
 	} while (0)
 #define COMPAT_ELF_PLATFORM			("i686")
 
@@ -229,6 +230,7 @@ static inline void elf_common_init(struct thread_struct *t,
 #define ELF_PLATFORM       ("x86_64")
 extern void set_personality_64bit(void);
 extern unsigned int sysctl_vsyscall32;
+extern int force_personality32;
 
 #endif /* !CONFIG_X86_32 */
 
diff --git a/include/asm-x86/mmu.h b/include/asm-x86/mmu.h
index db9b109..efa962c 100644
--- a/include/asm-x86/mmu.h
+++ b/include/asm-x86/mmu.h
@@ -9,8 +9,6 @@
  * we put the segment information here.
  *
  * cpu_vm_mask is used to optimize ldt flushing.
- * exec_limit is used to track the range PROT_EXEC
- * mappings span.
  */
 typedef struct { 
 	void *ldt;
@@ -20,10 +18,6 @@ typedef struct {
 	int size;
 	struct mutex lock;
 	void *vdso;
-#ifdef CONFIG_X86_32
-	struct desc_struct user_cs;
-	unsigned long exec_limit;
-#endif
 } mm_context_t;
 
 #ifdef CONFIG_SMP
diff --git a/include/asm-x86/pgalloc_64.h b/include/asm-x86/pgalloc_64.h
index 982e1cb..8d67223 100644
--- a/include/asm-x86/pgalloc_64.h
+++ b/include/asm-x86/pgalloc_64.h
@@ -5,13 +5,6 @@
 #include <linux/threads.h>
 #include <linux/mm.h>
 
-#define arch_add_exec_range(mm, limit) \
-		do { (void)(mm), (void)(limit); } while (0)
-#define arch_flush_exec_range(mm) \
-		do { (void)(mm); } while (0)
-#define arch_remove_exec_range(mm, limit) \
-		do { (void)(mm), (void)(limit); } while (0)
-
 #define pmd_populate_kernel(mm, pmd, pte) \
 		set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)))
 #define pud_populate(mm, pud, pmd) \
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h
index ef01196..45a2f0a 100644
--- a/include/asm-x86/processor.h
+++ b/include/asm-x86/processor.h
@@ -674,9 +674,6 @@ extern int bootloader_type;
 extern char ignore_fpu_irq;
 #define cache_line_size() (boot_cpu_data.x86_cache_alignment)
 
-#define __HAVE_ARCH_ALIGN_STACK
-extern unsigned long arch_align_stack(unsigned long sp);
-
 #define HAVE_ARCH_PICK_MMAP_LAYOUT 1
 #define ARCH_HAS_PREFETCHW
 #define ARCH_HAS_SPINLOCK_PREFETCH
@@ -754,9 +751,6 @@ static inline void prefetchw(const void *x)
 	regs->cs = __USER_CS;					\
 	regs->ip = new_eip;					\
 	regs->sp = new_esp;					\
-	preempt_disable();					\
-	load_user_cs_desc(smp_processor_id(), current->mm);	\
-	preempt_enable();					\
 } while (0)
 
 
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 4b74dc8..3f3ccfe 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1043,13 +1043,7 @@ extern int install_special_mapping(struct mm_struct *mm,
 				   unsigned long addr, unsigned long len,
 				   unsigned long flags, struct page **pages);
 
-extern unsigned long get_unmapped_area_prot(struct file *, unsigned long, unsigned long, unsigned long, unsigned long, int);
-
-static inline unsigned long get_unmapped_area(struct file *file, unsigned long addr,
-		unsigned long len, unsigned long pgoff, unsigned long flags)
-{
-	return get_unmapped_area_prot(file, addr, len, pgoff, flags, 0);
-}
+extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
 
 extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
 	unsigned long len, unsigned long prot,
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 30ec32f..bfee0bd 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -166,9 +166,6 @@ struct mm_struct {
 	unsigned long (*get_unmapped_area) (struct file *filp,
 				unsigned long addr, unsigned long len,
 				unsigned long pgoff, unsigned long flags);
-       unsigned long (*get_unmapped_exec_area) (struct file *filp,
-				unsigned long addr, unsigned long len,
-				unsigned long pgoff, unsigned long flags);
 	void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
 	unsigned long mmap_base;		/* base of mmap area */
 	unsigned long task_size;		/* size of task vm space */
diff --git a/include/linux/resource.h b/include/linux/resource.h
index 14757af..ae13db7 100644
--- a/include/linux/resource.h
+++ b/include/linux/resource.h
@@ -54,11 +54,8 @@ struct rlimit {
 /*
  * Limit the stack by to some sane default: root can always
  * increase this limit if needed..  8MB seems reasonable.
- *
- * (2MB more to cover randomization effects.)
  */
-#define _STK_LIM	(10*1024*1024)
-#define EXEC_STACK_BIAS	(2*1024*1024)
+#define _STK_LIM	(8*1024*1024)
 
 /*
  * GPG wants 32kB of mlocked memory, to make sure pass phrases
diff --git a/include/linux/sched.h b/include/linux/sched.h
index cf7f045..d61a5f4 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -98,9 +98,6 @@ struct futex_pi_state;
 struct robust_list_head;
 struct bio;
 
-extern int exec_shield;
-extern int print_fatal_signals;
-
 /*
  * List of flags we want to share for kernel threads,
  * if only because they are not used by them anyway.
@@ -346,10 +343,6 @@ extern int sysctl_max_map_count;
 extern unsigned long
 arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
 		       unsigned long, unsigned long);
-
-extern unsigned long
-arch_get_unmapped_exec_area(struct file *, unsigned long, unsigned long,
-		       unsigned long, unsigned long);
 extern unsigned long
 arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
 			  unsigned long len, unsigned long pgoff,
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index d6fe7d0..be6f0d8 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -82,26 +82,6 @@ extern int maps_protect;
 extern int sysctl_stat_interval;
 extern int latencytop_enabled;
 
-int exec_shield = (1<<0);
-/* exec_shield is a bitmask:
- * 0: off; vdso at STACK_TOP, 1 page below TASK_SIZE
- * (1<<0) 1: on [also on if !=0]
- * (1<<1) 2: force noexecstack regardless of PT_GNU_STACK
- * The old settings
- * (1<<2) 4: vdso just below .text of main (unless too low)
- * (1<<3) 8: vdso just below .text of PT_INTERP (unless too low)
- * are ignored because the vdso is placed completely randomly
- */
-
-static int __init setup_exec_shield(char *str)
-{
-	get_option(&str, &exec_shield);
-
-	return 1;
-}
-
-__setup("exec-shield=", setup_exec_shield);
-
 /* Constants used for minimum and  maximum */
 #if defined(CONFIG_DETECT_SOFTLOCKUP) || defined(CONFIG_HIGHMEM)
 static int one = 1;
@@ -404,14 +384,6 @@ static struct ctl_table kern_table[] = {
 		.proc_handler	= &proc_dointvec,
 	},
 	{
-		.ctl_name	= CTL_UNNUMBERED,
-		.procname	= "exec-shield",
-		.data		= &exec_shield,
-		.maxlen		= sizeof(int),
-		.mode		= 0644,
-		.proc_handler	= &proc_dointvec,
-	},
-	{
 		.ctl_name	= KERN_CORE_USES_PID,
 		.procname	= "core_uses_pid",
 		.data		= &core_uses_pid,
diff --git a/mm/mmap.c b/mm/mmap.c
index d7c2c9d..a32d28c 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -26,7 +26,6 @@
 #include <linux/mount.h>
 #include <linux/mempolicy.h>
 #include <linux/rmap.h>
-#include <linux/random.h>
 
 #include <asm/uaccess.h>
 #include <asm/cacheflush.h>
@@ -378,8 +377,6 @@ static inline void
 __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
 		struct vm_area_struct *prev, struct rb_node *rb_parent)
 {
-	if (vma->vm_flags & VM_EXEC)
-		arch_add_exec_range(mm, vma->vm_end);
 	if (prev) {
 		vma->vm_next = prev->vm_next;
 		prev->vm_next = vma;
@@ -483,8 +480,6 @@ __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
 	rb_erase(&vma->vm_rb, &mm->mm_rb);
 	if (mm->mmap_cache == vma)
 		mm->mmap_cache = prev;
-	if (vma->vm_flags & VM_EXEC)
-		arch_remove_exec_range(mm, vma->vm_end);
 }
 
 /*
@@ -790,8 +785,6 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
 		} else					/* cases 2, 5, 7 */
 			vma_adjust(prev, prev->vm_start,
 				end, prev->vm_pgoff, NULL);
-		if (prev->vm_flags & VM_EXEC)
-			arch_add_exec_range(mm, prev->vm_end);
 		return prev;
 	}
 
@@ -947,8 +940,7 @@ unsigned long do_mmap_pgoff(struct file * file, unsigned long addr,
 	/* Obtain the address to map to. we verify (or select) it and ensure
 	 * that it represents a valid section of the address space.
 	 */
-	addr = get_unmapped_area_prot(file, addr, len, pgoff, flags,
-		prot & PROT_EXEC);
+	addr = get_unmapped_area(file, addr, len, pgoff, flags);
 	if (addr & ~PAGE_MASK)
 		return addr;
 
@@ -1418,17 +1410,13 @@ void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr)
 }
 
 unsigned long
-get_unmapped_area_prot(struct file *file, unsigned long addr, unsigned long len,
-		unsigned long pgoff, unsigned long flags, int exec)
+get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
+		unsigned long pgoff, unsigned long flags)
 {
 	unsigned long (*get_area)(struct file *, unsigned long,
 				  unsigned long, unsigned long, unsigned long);
 
-	if (exec && current->mm->get_unmapped_exec_area)
-		get_area = current->mm->get_unmapped_exec_area;
-	else
-		get_area = current->mm->get_unmapped_area;
-
+	get_area = current->mm->get_unmapped_area;
 	if (file && file->f_op && file->f_op->get_unmapped_area)
 		get_area = file->f_op->get_unmapped_area;
 	addr = get_area(file, addr, len, pgoff, flags);
@@ -1442,74 +1430,8 @@ get_unmapped_area_prot(struct file *file, unsigned long addr, unsigned long len,
 
 	return arch_rebalance_pgtables(addr, len);
 }
-EXPORT_SYMBOL(get_unmapped_area_prot);
-
-#define SHLIB_BASE             0x00110000
-
-unsigned long arch_get_unmapped_exec_area(struct file *filp, unsigned long addr0,
-		unsigned long len0, unsigned long pgoff, unsigned long flags)
-{
-	unsigned long addr = addr0, len = len0;
-	struct mm_struct *mm = current->mm;
-	struct vm_area_struct *vma;
-	unsigned long tmp;
-
-	if (len > TASK_SIZE)
-		return -ENOMEM;
-
-	if (flags & MAP_FIXED)
-		return addr;
-
-	if (!addr) {
-		addr = randomize_range(SHLIB_BASE, 0x01000000, len);
-	} else {
-		addr = PAGE_ALIGN(addr);
-		vma = find_vma(mm, addr);
-		if (TASK_SIZE - len >= addr &&
-		    (!vma || addr + len <= vma->vm_start))
-			return addr;
-	}
-
-	addr = SHLIB_BASE;
-	for (vma = find_vma(mm, addr); ; vma = vma->vm_next) {
-		/* At this point:  (!vma || addr < vma->vm_end). */
-		if (TASK_SIZE - len < addr)
-			return -ENOMEM;
-
-		if (!vma || addr + len <= vma->vm_start) {
-			/*
-			 * Must not let a PROT_EXEC mapping get into the
-			 * brk area:
-			 */
-			if (addr + len > mm->brk)
-				goto failed;
-
-			/*
-			 * Up until the brk area we randomize addresses
-			 * as much as possible:
-			 */
-			if (addr >= 0x01000000) {
-				tmp = randomize_range(0x01000000,
-					PAGE_ALIGN(max(mm->start_brk,
-					(unsigned long)0x08000000)), len);
-				vma = find_vma(mm, tmp);
-				if (TASK_SIZE - len >= tmp &&
-				    (!vma || tmp + len <= vma->vm_start))
-					return tmp;
-			}
-			/*
-			 * Ok, randomization didnt work out - return
-			 * the result of the linear search:
-			 */
-			return addr;
-		}
-		addr = vma->vm_end;
-	}
-
-failed:
-	return current->mm->get_unmapped_area(filp, addr0, len0, pgoff, flags);
-}
 
+EXPORT_SYMBOL(get_unmapped_area);
 
 /* Look up the first VMA which satisfies  addr < vm_end,  NULL if none. */
 struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr)
@@ -1584,14 +1506,6 @@ out:
 	return prev ? prev->vm_next : vma;
 }
 
-static int over_stack_limit(unsigned long sz)
-{
-	if (sz < EXEC_STACK_BIAS)
-		return 0;
-	return (sz - EXEC_STACK_BIAS) >
-			current->signal->rlim[RLIMIT_STACK].rlim_cur;
-}
-
 /*
  * Verify that the stack growth is acceptable and
  * update accounting. This is shared with both the
@@ -1608,7 +1522,7 @@ static int acct_stack_growth(struct vm_area_struct * vma, unsigned long size, un
 		return -ENOMEM;
 
 	/* Stack limit test */
-	if (over_stack_limit(size))
+	if (size > rlim[RLIMIT_STACK].rlim_cur)
 		return -ENOMEM;
 
 	/* mlock limit tests */
@@ -1912,14 +1826,10 @@ int split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
 	if (new->vm_ops && new->vm_ops->open)
 		new->vm_ops->open(new);
 
-	if (new_below) {
-		unsigned long old_end = vma->vm_end;
-
+	if (new_below)
 		vma_adjust(vma, addr, vma->vm_end, vma->vm_pgoff +
 			((addr - new->vm_start) >> PAGE_SHIFT), new);
-		if (vma->vm_flags & VM_EXEC)
-			arch_remove_exec_range(mm, old_end);
-	} else
+	else
 		vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
 
 	return 0;
@@ -2138,7 +2048,6 @@ void exit_mmap(struct mm_struct *mm)
 	vm_unacct_memory(nr_accounted);
 	free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
 	tlb_finish_mmu(tlb, 0, end);
-	arch_flush_exec_range(mm);
 
 	/*
 	 * Walk the list again, actually closing and freeing it,
diff --git a/mm/mprotect.c b/mm/mprotect.c
index 6d822ad..4de5468 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -23,12 +23,8 @@
 #include <linux/swapops.h>
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
-#include <asm/pgalloc.h>
 #include <asm/cacheflush.h>
 #include <asm/tlbflush.h>
-#ifdef CONFIG_X86
-#include <asm/desc.h>
-#endif
 
 static void change_pte_range(struct mm_struct *mm, pmd_t *pmd,
 		unsigned long addr, unsigned long end, pgprot_t newprot,
@@ -138,7 +134,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
 	struct mm_struct *mm = vma->vm_mm;
 	unsigned long oldflags = vma->vm_flags;
 	long nrpages = (end - start) >> PAGE_SHIFT;
-	unsigned long charged = 0, old_end = vma->vm_end;
+	unsigned long charged = 0;
 	pgoff_t pgoff;
 	int error;
 	int dirty_accountable = 0;
@@ -202,9 +198,6 @@ success:
 		dirty_accountable = 1;
 	}
 
-	if (oldflags & VM_EXEC)
-		arch_remove_exec_range(current->mm, old_end);
-
 	if (is_vm_hugetlb_page(vma))
 		hugetlb_change_protection(vma, start, end, vma->vm_page_prot);
 	else
diff --git a/mm/mremap.c b/mm/mremap.c
index 101f885..08e3c7f 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -392,8 +392,8 @@ unsigned long do_mremap(unsigned long addr,
 			if (vma->vm_flags & VM_MAYSHARE)
 				map_flags |= MAP_SHARED;
 
-			new_addr = get_unmapped_area_prot(vma->vm_file, 0, new_len,
-				vma->vm_pgoff, map_flags, vma->vm_flags & VM_EXEC);
+			new_addr = get_unmapped_area(vma->vm_file, 0, new_len,
+						vma->vm_pgoff, map_flags);
 			if (new_addr & ~PAGE_MASK) {
 				ret = new_addr;
 				goto out;
-- 
1.5.4.1


linux-2.6-xen-0066-xen-dom0-Don-t-use-fixmaps-for-ACPI-mappings-in-ISA.patch:

--- NEW FILE linux-2.6-xen-0066-xen-dom0-Don-t-use-fixmaps-for-ACPI-mappings-in-ISA.patch ---
>From 3a86890feb392b7cc83c08e7a8a9cc0e2bc45961 Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc at redhat.com>
Date: Tue, 26 Feb 2008 17:57:52 +0000
Subject: [PATCH] xen dom0: Don't use fixmaps for ACPI mappings in ISA region

Previously, acpi_find_rsdp() scanned for RSDP signatures
in areas within the ISA region which were known to be
mapped.

However, now acpi_find_root_pointer() tries to explicitly
map these regions, causing __acpi_map_table() to try and
use fixmaps, but we don't have enough ACPI fixmaps for
e.g. the 0xe0000-0x100000 region.

Make __acpi_map_table() not use fixmaps where it knows
the region is mapped as part of the ISA region.

Signed-off-by: Mark McLoughlin <markmc at redhat.com>
---
 arch/x86/kernel/acpi/boot.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index a1b1f40..02abfb0 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -39,6 +39,7 @@
 #include <asm/apic.h>
 #include <asm/io.h>
 #include <asm/mpspec.h>
+#include <asm/e820.h>
 
 #include <asm/xen/hypervisor.h>
 #include <xen/hvc-console.h>
@@ -126,6 +127,9 @@ char *__init __acpi_map_table(unsigned long phys, unsigned long size)
 	if (!phys || !size)
 		return NULL;
 
+	if (phys >= ISA_START_ADDRESS && phys+size <= ISA_END_ADDRESS)
+		return isa_bus_to_virt(phys);
+
 	if (!is_running_on_xen()) {
 #ifdef	CONFIG_X86_64
 		/* rely on all ACPI tables being in the direct mapping */
-- 
1.5.4.1


linux-2.6-xen-0067-x86-Do-not-scan-for-DMI-if-the-DMI-region-is-marked.patch:

--- NEW FILE linux-2.6-xen-0067-x86-Do-not-scan-for-DMI-if-the-DMI-region-is-marked.patch ---
>From 3c8d12d05a721cb67fd479949fce7fafd38cbbf1 Mon Sep 17 00:00:00 2001
From: Ian Campbell <ijc at hellion.org.uk>
Date: Fri, 22 Feb 2008 07:25:06 +0000
Subject: [PATCH] x86: Do not scan for DMI if the DMI region is marked as RAM by e820.

Under Xen the memory at 0xf0000 is regular RAM and so can potentially contain a
page table and hence cannot be mapped. The e820 map given to guest reflects
this.

Signed-off-by: Ian Campbell <ijc at hellion.org.uk>
Signed-off-by: Mark McLoughlin <markmc at redhat.com>
---
 drivers/firmware/dmi_scan.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 4072449..bb18b53 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -7,6 +7,7 @@
 #include <linux/bootmem.h>
 #include <linux/slab.h>
 #include <asm/dmi.h>
+#include <asm/e820.h>
 
 static char dmi_empty_string[] = "        ";
 
@@ -379,6 +380,9 @@ void __init dmi_scan_machine(void)
 		}
 	}
 	else {
+		if (e820_all_mapped(0xF0000, 0xF0000+0x10000, E820_RAM))
+			goto out;
+
 		/*
 		 * no iounmap() for that ioremap(); it would be a no-op, but
 		 * it's so early in setup that sucker gets confused into doing
-- 
1.5.4.1


linux-2.6-xen-0068-xen-dom0-Fix-DMI-scanning.patch:

--- NEW FILE linux-2.6-xen-0068-xen-dom0-Fix-DMI-scanning.patch ---
>From f04452196370d2e6aec2f9b84714bdf2698cce5c Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc at redhat.com>
Date: Tue, 26 Feb 2008 16:43:39 +0000
Subject: [PATCH] xen dom0: Fix DMI scanning

Xen pvops guests were crashing in because a page table was
being allocated in the 0xf0000-0x100000 range by the kernel
and then being mapped r/w by dmi_scan_machine().

This is because Xen's e820 map is a flat map with the whole
range marked as usable ram. So, dmi_scan_machine() was
changed to bail out if the 0xf000-0x100000 range was marked
as usable RAM.

However, even though the region is marked as usable ram
in the e820 map, Dom0 does in fact identity map and reserve
this region early on in boot, so it is valid to remap the
range and scan it for a DMI table.

Signed-off-by: Mark McLoughlin <markmc at redhat.com>
---
 drivers/firmware/dmi_scan.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index bb18b53..bed269a 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -8,6 +8,7 @@
 #include <linux/slab.h>
 #include <asm/dmi.h>
 #include <asm/e820.h>
+#include <asm/xen/hypervisor.h>
 
 static char dmi_empty_string[] = "        ";
 
@@ -380,7 +381,8 @@ void __init dmi_scan_machine(void)
 		}
 	}
 	else {
-		if (e820_all_mapped(0xF0000, 0xF0000+0x10000, E820_RAM))
+		if (!is_initial_xendomain() &&
+		    e820_all_mapped(0xF0000, 0xF0000+0x10000, E820_RAM))
 			goto out;
 
 		/*
-- 
1.5.4.1


linux-2.6-xen-0069-ata-scsi-Use-dma_alloc_coherent-for-ATAPI-drain-b.patch:

--- NEW FILE linux-2.6-xen-0069-ata-scsi-Use-dma_alloc_coherent-for-ATAPI-drain-b.patch ---
>From 7016f0b1b4359a53128193f2833e4ac79ff75b1c Mon Sep 17 00:00:00 2001
From: Mark McLoughlin <markmc at redhat.com>
Date: Fri, 29 Feb 2008 13:15:41 +0000
Subject: [PATCH] ata-scsi: Use dma_alloc_coherent() for ATAPI drain buffer

Use dma_alloc_coherent() to allocate the (16k) ATAPI drain
buffer so as to ensure that it is allocated machine-physical
contiguous pages under Xen Dom0.

The blk_queue_dma_drain() must be expanded to take a
dma_addr_t so that it can be supplied when freeing the
buffer with dma_free_coherent() later.

Signed-off-by: Mark McLoughlin <markmc at redhat.com>
---
 block/blk-settings.c      |    3 ++-
 drivers/ata/libata-scsi.c |   19 ++++++++++++++-----
 include/linux/blkdev.h    |    3 ++-
 3 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/block/blk-settings.c b/block/blk-settings.c
index 9a8ffdd..ff667a3 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -318,7 +318,7 @@ EXPORT_SYMBOL(blk_queue_stack_limits);
  */
 extern int blk_queue_dma_drain(struct request_queue *q,
 			       dma_drain_needed_fn *dma_drain_needed,
-			       void *buf, unsigned int size)
+			       void *buf, dma_addr_t buf_dma, unsigned int size)
 {
 	if (q->max_hw_segments < 2 || q->max_phys_segments < 2)
 		return -EINVAL;
@@ -327,6 +327,7 @@ extern int blk_queue_dma_drain(struct request_queue *q,
 	--q->max_phys_segments;
 	q->dma_drain_needed = dma_drain_needed;
 	q->dma_drain_buffer = buf;
+	q->dma_drain_buffer_paddr = buf_dma;
 	q->dma_drain_size = size;
 
 	return 0;
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 0562b0a..69da301 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -861,20 +861,23 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,
 	if (dev->class == ATA_DEV_ATAPI) {
 		struct request_queue *q = sdev->request_queue;
 		void *buf;
+		dma_addr_t buf_dma;
 
 		/* set the min alignment */
 		blk_queue_update_dma_alignment(sdev->request_queue,
 					       ATA_DMA_PAD_SZ - 1);
 
 		/* configure draining */
-		buf = kmalloc(ATAPI_MAX_DRAIN, q->bounce_gfp | GFP_KERNEL);
+		buf = dma_alloc_coherent(&sdev->sdev_gendev, ATAPI_MAX_DRAIN,
+					 &buf_dma, q->bounce_gfp | GFP_KERNEL);
 		if (!buf) {
 			ata_dev_printk(dev, KERN_ERR,
 				       "drain buffer allocation failed\n");
 			return -ENOMEM;
 		}
 
-		blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
+		blk_queue_dma_drain(q, atapi_drain_needed, buf,
+				    buf_dma, ATAPI_MAX_DRAIN);
 	} else {
 		/* ATA devices must be sector aligned */
 		blk_queue_update_dma_alignment(sdev->request_queue,
@@ -956,9 +959,15 @@ void ata_scsi_slave_destroy(struct scsi_device *sdev)
 	}
 	spin_unlock_irqrestore(ap->lock, flags);
 
-	kfree(q->dma_drain_buffer);
-	q->dma_drain_buffer = NULL;
-	q->dma_drain_size = 0;
+	if (q->dma_drain_buffer) {
+		dma_free_coherent(&sdev->sdev_gendev,
+				  q->dma_drain_size,
+				  q->dma_drain_buffer,
+				  q->dma_drain_buffer_paddr);
+		q->dma_drain_buffer = NULL;
+		q->dma_drain_buffer_paddr = 0;
+		q->dma_drain_size = 0;
+	}
 }
 
 /**
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 6fe67d1..ca27ad8 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -361,6 +361,7 @@ struct request_queue
 
 	unsigned long		seg_boundary_mask;
 	void			*dma_drain_buffer;
+	dma_addr_t		dma_drain_buffer_paddr;
 	unsigned int		dma_drain_size;
 	unsigned int		dma_alignment;
 
@@ -703,7 +704,7 @@ extern void blk_queue_hardsect_size(struct request_queue *, unsigned short);
 extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
 extern int blk_queue_dma_drain(struct request_queue *q,
 			       dma_drain_needed_fn *dma_drain_needed,
-			       void *buf, unsigned int size);
+			       void *buf, dma_addr_t buf_dma, unsigned int size);
 extern void blk_queue_segment_boundary(struct request_queue *, unsigned long);
 extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn);
 extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *);
-- 
1.5.4.1


linux-2.6-xen-0070-xen-Make-hvc0-the-preferred-console-in-domU.patch:

--- NEW FILE linux-2.6-xen-0070-xen-Make-hvc0-the-preferred-console-in-domU.patch ---
>From 975f3e5e07f1feb7623dac8557c0d968672046ff Mon Sep 17 00:00:00 2001
From: Markus Armbruster <armbru at redhat.com>
Date: Fri, 29 Feb 2008 17:37:43 +0000
Subject: [PATCH] xen: Make hvc0 the preferred console in domU

This makes the Xen console just work.  Before, you had to ask for it
on the kernel command line with console=hvc0

Signed-off-by: Markus Armbruster <armbru at redhat.com>
Signed-off-by: Mark McLoughlin <markmc at redhat.com>
---
 arch/x86/xen/enlighten.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index c218533..5dc21a4 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -25,6 +25,7 @@
 #include <linux/mm.h>
 #include <linux/page-flags.h>
 #include <linux/highmem.h>
+#include <linux/console.h>
 
 #include <xen/interface/xen.h>
 #include <xen/interface/physdev.h>
@@ -1315,6 +1316,9 @@ asmlinkage void __init xen_start_kernel(void)
 		? __pa(xen_start_info->mod_start) : 0;
 	boot_params.hdr.ramdisk_size = xen_start_info->mod_len;
 
+	if (!is_initial_xendomain())
+		add_preferred_console("hvc", 0, NULL);
+
 	/* Start the world */
 	start_kernel();
 }
-- 
1.5.4.1



--- NEW FILE patch-2.6.25-rc3-git1.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBHxGIsyGugalF9Dw4RAnw2AKCQkrI/3t2GV+NDMh8BcL8PN6zixQCfbZaS
9hqawF7BbWfCbAYa6EaVj/o=
=To2R
-----END PGP SIGNATURE-----


--- NEW FILE patch-2.6.25-rc3.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBHwe4SyGugalF9Dw4RAhzlAJ4x09GXcYHjK0q8XsNH6NYIthcTvQCeMlJu
Rxc0dZy9c9RBYFimz2tlB0Y=
=MvXS
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/.cvsignore,v
retrieving revision 1.11.2.1
retrieving revision 1.11.2.2
diff -u -r1.11.2.1 -r1.11.2.2
--- .cvsignore	18 Feb 2008 16:55:16 -0000	1.11.2.1
+++ .cvsignore	29 Feb 2008 18:58:22 -0000	1.11.2.2
@@ -4,4 +4,7 @@
 temp-*
 kernel-2.6.24
 linux-2.6.24.tar.bz2
+patch-2.6.25-rc3.bz2
+patch-2.6.25-rc2-git7.bz2
+patch-2.6.25-rc3-git1.bz2
 xen-3.2.0.tar.gz


Index: .gitignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/.gitignore,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- .gitignore	18 Feb 2008 16:55:16 -0000	1.1.2.1
+++ .gitignore	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -4,4 +4,7 @@
 temp-*
 kernel-2.6.24
 linux-2.6.24.tar.bz2
+patch-2.6.25-rc3.bz2
+patch-2.6.25-rc2-git7.bz2
+patch-2.6.25-rc3-git1.bz2
 xen-3.2.0.tar.gz


Index: Makefile
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Makefile,v
retrieving revision 1.2.6.1
retrieving revision 1.2.6.2
diff -u -r1.2.6.1 -r1.2.6.2
--- Makefile	18 Feb 2008 16:55:16 -0000	1.2.6.1
+++ Makefile	29 Feb 2008 18:58:22 -0000	1.2.6.2
@@ -86,7 +86,7 @@
 
 reconfig:
 	@rm -f kernel-*-config
-	@VERSION="2.6.24" make -f Makefile.config configs
+	@VERSION="2.6.25" make -f Makefile.config configs
 	@scripts/reconfig.sh
 
 # since i386 isn't a target...




Index: config-debug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-debug,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-debug	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-debug	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -28,3 +28,5 @@
 # CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
 
 CONFIG_DEBUG_SG=y
+
+CONFIG_DEBUG_PAGEALLOC=y


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-generic,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-generic	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-generic	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -42,6 +42,9 @@
 CONFIG_DEFAULT_CFQ=y
 CONFIG_USER_NS=y
 CONFIG_PID_NS=y
+CONFIG_UTS_NS=y
+CONFIG_IPC_NS=y
+
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_PREEMPT_NONE is not set
 CONFIG_PREEMPT_VOLUNTARY=y
@@ -49,6 +52,7 @@
 CONFIG_PREEMPT_BKL=y
 
 CONFIG_SLUB=y
+# CONFIG_SLUB_STATS is not set
 
 CONFIG_MISC_DEVICES=y
 
@@ -71,6 +75,8 @@
 CONFIG_PCI_MSI=y
 CONFIG_PCIEPORTBUS=y
 CONFIG_PCIEAER=y
+CONFIG_PCIEASPM=y
+# CONFIG_PCIEASPM_DEBUG is not set
 CONFIG_HOTPLUG_PCI_PCIE=m
 CONFIG_HOTPLUG_PCI_FAKE=m
 # CONFIG_PCI_LEGACY is not set
@@ -111,7 +117,7 @@
 CONFIG_INFINIBAND_IPOIB=m
 CONFIG_INFINIBAND_IPOIB_DEBUG=y
 CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
-# CONFIG_INFINIBAND_IPOIB_CM is not set
+CONFIG_INFINIBAND_IPOIB_CM=y
 CONFIG_INFINIBAND_SRP=m
 CONFIG_INFINIBAND_USER_MAD=m
 CONFIG_INFINIBAND_USER_ACCESS=m
@@ -122,6 +128,8 @@
 CONFIG_INFINIBAND_CXGB3=m
 # CONFIG_INFINIBAND_CXGB3_DEBUG is not set
 CONFIG_MLX4_INFINIBAND=m
+CONFIG_INFINIBAND_NES=m
+# CONFIG_INFINIBAND_NES_DEBUG is not set
 
 #
 # Executable file formats
@@ -394,18 +402,25 @@
 CONFIG_BLK_DEV_VIA82CXXX=y
 CONFIG_BLK_DEV_IDEDMA=y
 # CONFIG_BLK_DEV_HD is not set
+
+CONFIG_VIRTIO=m
 CONFIG_VIRTIO_BLK=m
+CONFIG_VIRTIO_RING=m
+CONFIG_VIRTIO_PCI=m
+CONFIG_VIRTIO_BALLOON=m
+CONFIG_VIRTIO_NET=m
 
 #
 # SCSI device support
 #
 CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
 
-CONFIG_SCSI_TGT=m
+CONFIG_SCSI_ENCLOSURE=m
+CONFIG_SCSI_PROC_FS=y
 CONFIG_SCSI_SCAN_ASYNC=y
 CONFIG_SCSI_SRP=m
 CONFIG_SCSI_SRP_ATTRS=m
+CONFIG_SCSI_TGT=m
 
 #
 # SCSI support type (disk, tape, CD-ROM)
@@ -433,6 +448,7 @@
 CONFIG_SCSI_SAS_LIBSAS=m
 CONFIG_SCSI_SAS_ATA=y
 # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
+CONFIG_SCSI_SAS_HOST_SMP=y
 CONFIG_RAID_ATTRS=m
 
 CONFIG_ISCSI_TCP=m
@@ -513,14 +529,14 @@
 CONFIG_PATA_IT8213=m
 CONFIG_PATA_JMICRON=m
 # CONFIG_PATA_LEGACY is not set
-CONFIG_PATA_TRIFLEX=m
+CONFIG_PATA_NINJA32=m
 CONFIG_PATA_MARVELL=m
 # CONFIG_PATA_WINBOND_VLB is not set
 CONFIG_PATA_MPIIX=m
-CONFIG_PATA_OLDPIIX=m
 CONFIG_PATA_NETCELL=m
 CONFIG_PATA_NS87410=m
 CONFIG_PATA_NS87415=m
+CONFIG_PATA_OLDPIIX=m
 CONFIG_PATA_OPTI=m
 CONFIG_PATA_OPTIDMA=m
 CONFIG_PATA_PCMCIA=m
@@ -533,6 +549,7 @@
 CONFIG_PATA_PDC2027X=m
 CONFIG_PATA_SIL680=m
 CONFIG_PATA_SIS=m
+CONFIG_PATA_TRIFLEX=m
 CONFIG_PATA_VIA=m
 CONFIG_PATA_WINBOND=m
 
@@ -692,7 +709,6 @@
 CONFIG_NETCONSOLE_DYNAMIC=y
 CONFIG_NETPOLL_TRAP=y
 CONFIG_NET_POLL_CONTROLLER=y
-CONFIG_VIRTIO_NET=m
 
 #
 # IP: Virtual Server Configuration
@@ -740,6 +756,8 @@
 # CONFIG_DECNET_NF_GRABULATOR is not set
 CONFIG_BRIDGE=m
 CONFIG_NETFILTER=y
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_NF_CONNTRACK=m
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
@@ -752,8 +770,10 @@
 CONFIG_NETFILTER_XT_TARGET_NFLOG=m
 CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
 CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
 CONFIG_NETFILTER_XT_TARGET_SECMARK=m
 CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 CONFIG_NETFILTER_XT_TARGET_TRACE=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -765,15 +785,18 @@
 CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
 CONFIG_NETFILTER_XT_MATCH_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_OWNER=m
 CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
 CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
 CONFIG_NETFILTER_XT_MATCH_POLICY=m
 CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
 CONFIG_NETFILTER_XT_MATCH_REALM=m
 CONFIG_NETFILTER_XT_MATCH_SCTP=m
 CONFIG_NETFILTER_XT_MATCH_STATE=m
@@ -886,9 +909,10 @@
 CONFIG_BRIDGE_EBT_LOG=m
 CONFIG_BRIDGE_EBT_ULOG=m
 CONFIG_XFRM=y
-CONFIG_XFRM_USER=y
-CONFIG_XFRM_SUB_POLICY=y
 CONFIG_XFRM_MIGRATE=y
+CONFIG_XFRM_SUB_POLICY=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_XFRM_USER=y
 CONFIG_INET_XFRM_MODE_TRANSPORT=m
 CONFIG_INET_XFRM_MODE_TUNNEL=m
 CONFIG_INET_XFRM_MODE_BEET=m
@@ -944,39 +968,40 @@
 #
 CONFIG_NET_SCHED=y
 CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_HFSC=m
 CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_SCH_NETEM=m
 CONFIG_NET_SCH_PRIO=m
 CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_RR=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_INGRESS=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_RR=m
+CONFIG_NET_SCH_TEQL=m
 CONFIG_NET_CLS=y
-CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_FLOW=m
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_CLS_POLICE=y
 CONFIG_NET_CLS_ROUTE4=m
 CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_CLS_U32_MARK=y
 CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_CLS_POLICE=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_MARK=y
 CONFIG_CLS_U32_PERF=y
-CONFIG_NET_CLS_IND=y
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_CLS_BASIC=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_NBYTE=m
+CONFIG_NET_EMATCH_STACK=32
 CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_EMATCH_U32=m
 
 CONFIG_NET_ACT_GACT=m
 CONFIG_GACT_PROB=y
@@ -1062,7 +1087,7 @@
 CONFIG_BROADCOM_PHY=m
 CONFIG_CICADA_PHY=m
 CONFIG_DAVICOM_PHY=m
-CONFIG_FIXED_PHY=m
+CONFIG_FIXED_PHY=y
 CONFIG_FIXED_MII_10_FDX=y
 CONFIG_FIXED_MII_100_FDX=y
 CONFIG_FIXED_MII_1000_FDX=y
@@ -1072,6 +1097,7 @@
 CONFIG_LXT_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_QSEMI_PHY=m
+CONFIG_REALTEK_PHY=m
 CONFIG_SMSC_PHY=m
 CONFIG_VITESSE_PHY=m
 
@@ -1240,6 +1266,7 @@
 
 CONFIG_ADM8211=m
 CONFIG_ATH5K=m
+CONFIG_ATH5K_DEBUG=y
 CONFIG_AIRO=m
 CONFIG_AIRO_CS=m
 CONFIG_ATMEL=m
@@ -1297,12 +1324,17 @@
 # CONFIG_RT2X00_DEBUG is not set
 CONFIG_RT2400PCI=m
 CONFIG_RT2400PCI_RFKILL=y
+CONFIG_RT2400PCI_LEDS=y
 CONFIG_RT2500PCI=m
 CONFIG_RT2500PCI_RFKILL=y
+CONFIG_RT2500PCI_LEDS=y
 CONFIG_RT61PCI=m
 CONFIG_RT61PCI_RFKILL=y
+CONFIG_RT61PCI_LEDS=y
 CONFIG_RT2500USB=m
+CONFIG_RT2500USB_LEDS=y
 CONFIG_RT73USB=m
+CONFIG_RT73USB_LEDS=y
 CONFIG_RTL8180=m
 CONFIG_RTL8187=m
 CONFIG_TMD_HERMES=m
@@ -1354,6 +1386,7 @@
 CONFIG_HAMRADIO=y
 CONFIG_AX25=m
 CONFIG_AX25_DAMA_SLAVE=y
+# CONFIG_CAN is not set
 CONFIG_NETROM=m
 CONFIG_ROSE=m
 CONFIG_MKISS=m
@@ -1792,7 +1825,9 @@
 CONFIG_SENSORS_ADM1029=m
 CONFIG_SENSORS_ADM1031=m
 CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADS7828=m
 CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7473=m
 CONFIG_SENSORS_APPLESMC=m
 CONFIG_SENSORS_ASB100=m
 CONFIG_SENSORS_ATXP1=m
@@ -1847,6 +1882,7 @@
 CONFIG_SENSORS_W83627HF=m
 CONFIG_SENSORS_W83781D=m
 CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83L786NG=m
 CONFIG_SENSORS_W83627EHF=m
 CONFIG_SENSORS_W83791D=m
 CONFIG_SENSORS_W83792D=m
@@ -2028,6 +2064,7 @@
 CONFIG_VIDEO_CPIA_USB=m
 CONFIG_VIDEO_CPIA2=m
 CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_CS5345=m
 CONFIG_VIDEO_CS53L32A=m
 CONFIG_VIDEO_CX25840=m
 CONFIG_VIDEO_CX2341X=m
@@ -2039,6 +2076,7 @@
 CONFIG_VIDEO_CX88_VP3054=m
 CONFIG_VIDEO_DPC=m
 CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=m
 CONFIG_VIDEO_HEXIUM_ORION=m
 CONFIG_VIDEO_HEXIUM_GEMINI=m
 CONFIG_VIDEO_IVTV=m
@@ -2048,6 +2086,8 @@
 CONFIG_VIDEO_MXB=m
 CONFIG_VIDEO_OVCAMCHIP=m
 CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR=y
+CONFIG_VIDEO_PVRUSB2_ONAIR_USB2=y
 CONFIG_VIDEO_SAA5246A=m
 CONFIG_VIDEO_SAA5249=m
 CONFIG_VIDEO_SAA6588=m
@@ -2086,6 +2126,8 @@
 CONFIG_VIDEO_ZORAN_LML33=m
 CONFIG_VIDEO_ZORAN_LML33R10=m
 CONFIG_VIDEO_FB_IVTV=m
+CONFIG_VIDEO_M52790=m
+CONFIG_VIDEO_VP27SMPX=m
 CONFIG_TUNER_3036=m
 # CONFIG_TUNER_TEA5761 is not set
 
@@ -2113,6 +2155,7 @@
 CONFIG_DVB_STV0299=m
 # CONFIG_DVB_SP887X is not set
 CONFIG_DVB_BT8XX=m
+CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_CX24110=m
 CONFIG_DVB_L64781=m
 CONFIG_DVB_LGDT330X=m
@@ -2123,7 +2166,9 @@
 CONFIG_DVB_S5H1420=m
 CONFIG_DVB_SP8870=m
 CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
 CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_TUA6100=m
 CONFIG_DVB_TTUSB_DEC=m
 CONFIG_DVB_VES1820=m
 CONFIG_DVB_VES1X93=m
@@ -2384,6 +2429,7 @@
 CONFIG_SND_HDA_POWER_SAVE=y
 CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5
 CONFIG_SND_HDSPM=m
+CONFIG_SND_HIFIER=m
 CONFIG_SND_ICE1712=m
 CONFIG_SND_ICE1724=m
 CONFIG_SND_INTEL8X0=m
@@ -2395,21 +2441,23 @@
 CONFIG_SND_MIRO=m
 CONFIG_SND_MIXART=m
 CONFIG_SND_NM256=m
+CONFIG_SND_OXYGEN=m
 CONFIG_SND_RME32=m
 CONFIG_SND_PCXHR=m
 CONFIG_SND_RIPTIDE=m
 CONFIG_SND_RME96=m
 CONFIG_SND_RME9652=m
 CONFIG_SND_SC6000=m
+CONFIG_SND_SIS7019=m
 CONFIG_SND_SONICVIBES=m
 CONFIG_SND_HDSP=m
 CONFIG_SND_TRIDENT=m
 CONFIG_SND_VIA82XX=m
 CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VIRTUOSO=m
 CONFIG_SND_VX222=m
 CONFIG_SND_YMFPCI=m
 CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
-CONFIG_SND_SIS7019=m
 
 #
 # ALSA USB devices
@@ -2596,6 +2644,7 @@
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IPW=m
 CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_IUU=m
 CONFIG_USB_SERIAL_KEYSPAN_PDA=m
 CONFIG_USB_SERIAL_KEYSPAN=m
 CONFIG_USB_SERIAL_KEYSPAN_MPR=y
@@ -2639,51 +2688,55 @@
 #
 # USB Miscellaneous drivers
 #
-CONFIG_USB_EMI26=m
+
 CONFIG_USB_ADUTUX=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_ATM=m
 CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LCD=m
 CONFIG_USB_BERRY_CHARGE=m
-CONFIG_USB_IOWARRIOR=m
-# CONFIG_USB_TEST is not set
+CONFIG_USB_CXACRU=m
+# CONFIG_USB_CYTHERM is not set
+CONFIG_USB_EMI26=m
+CONFIG_USB_ETH=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
 # CONFIG_USB_GADGET is not set
 # CONFIG_USB_GADGET_PXA2XX is not set
 # CONFIG_USB_GADGET_GOKU is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
 # CONFIG_USB_GADGETFS is not set
-CONFIG_USB_W9968CF=m
-CONFIG_USB_ZC0301=m
-CONFIG_USB_PWC=m
-# CONFIG_USB_PWC_DEBUG is not set
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LD=m
 CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_ALI_M5632=y
-# CONFIG_USB_CYTHERM is not set
-CONFIG_USB_FTDI_ELAN=m
-CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_MON=y
 CONFIG_USB_PHIDGET=m
 CONFIG_USB_PHIDGETSERVO=m
 CONFIG_USB_PHIDGETKIT=m
 CONFIG_USB_PHIDGETMOTORCONTROL=m
-CONFIG_USB_U132_HCD=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_RIO500=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
 CONFIG_USB_SL811_HCD=m
-CONFIG_USB_MON=y
 CONFIG_USB_SISUSBVGA=m
 CONFIG_USB_SISUSBVGA_CON=y
-CONFIG_USB_ISP116X_HCD=m
-CONFIG_USB_ATM=m
-CONFIG_USB_CXACRU=m
-CONFIG_USB_XUSBATM=m
-CONFIG_USB_UEAGLEATM=m
-CONFIG_USB_LD=m
+CONFIG_USB_SI470X=m
+CONFIG_USB_STKWEBCAM=m
+# CONFIG_USB_TEST is not set
 CONFIG_USB_TRANCEVIBRATOR=m
-
-CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_U132_HCD=m
+CONFIG_USB_UEAGLEATM=m
 CONFIG_USB_UVCVIDEO=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+CONFIG_USB_W9968CF=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_ZERO=m
+
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 
 #
 # Sonics Silicon Backplane
@@ -2843,6 +2896,8 @@
 CONFIG_CIFS_POSIX=y
 CONFIG_CIFS_WEAK_PW_HASH=y
 # CONFIG_CIFS_DEBUG2 is not set
+CONFIG_CIFS_UPCALL=y
+CONFIG_CIFS_DFS_UPCALL=y
 CONFIG_NCP_FS=m
 CONFIG_NCPFS_PACKET_SIGNING=y
 CONFIG_NCPFS_IOCTL_LOCKING=y
@@ -2952,6 +3007,7 @@
 # CONFIG_DEBUG_DRIVER is not set
 CONFIG_HEADERS_CHECK=y
 # CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_TRACE is not set
 # CONFIG_LKDTM is not set
 
 # CONFIG_RT_MUTEX_TESTER is not set
@@ -2970,6 +3026,10 @@
 CONFIG_DEBUG_DEVRES=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 
+# CONFIG_DEBUG_RODATA_TEST is not set
+# CONFIG_DEBUG_NX_TEST is not set
+# CONFIG_DEBUG_BOOT_PARAMS is not set
+
 #
 # Security options
 #
@@ -2987,6 +3047,8 @@
 CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
 CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
 CONFIG_SECURITY_SELINUX_AVC_STATS=y
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
+# CONFIG_SECURITY_SMACK is not set
 CONFIG_AUDIT=y
 CONFIG_AUDITSYSCALL=y
 
@@ -3006,21 +3068,28 @@
 CONFIG_CRYPTO_CAST5=m
 CONFIG_CRYPTO_CAST6=m
 CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_CCM=m
 CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CTR=m
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_DES=m
 CONFIG_CRYPTO_ECB=m
 CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_GCM=m
 CONFIG_CRYPTO_GF128MUL=m
 CONFIG_CRYPTO_HMAC=y
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_LZO=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=m
 CONFIG_CRYPTO_MICHAEL_MIC=m
 CONFIG_CRYPTO_NULL=m
 CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SALSA20_586=m
 CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SEQIV=m
 CONFIG_CRYPTO_SERPENT=m
 CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_SHA256=m
@@ -3033,7 +3102,8 @@
 CONFIG_CRYPTO_XTS=m
 CONFIG_CRYPTO_TEST=m
 CONFIG_LIBCRC32C=m
-
+CONFIG_CRYPTO_DEV_HIFN_795X=m
+CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
 
 #
 # Library routines
@@ -3129,6 +3199,7 @@
 # CONFIG_SCSI_T128 is not set
 # CONFIG_SCSI_U14_34F is not set
 # CONFIG_SCSI_ULTRASTOR is not set
+CONFIG_SCSI_MVSAS=m
 
 # CONFIG_EL1 is not set
 # CONFIG_EL2 is not set
@@ -3343,6 +3414,51 @@
 
 # CONFIG_SAMPLES is not set
 
-# CONFIG_WRITABLE_DEVMEM is not set
-# CONFIG_WRITABLE_DEVKMEM is not set
+# CONFIG_DEVKMEM is not set
+
+CONFIG_PM_TRACE_RTC=y
+CONFIG_R6040=m
+CONFIG_IGB=m
+CONFIG_BNX2X=m
+CONFIG_NOZOMI=m
+CONFIG_PCF8575=m
+# CONFIG_TPS65010 is not set
+# CONFIG_DEBUG_SECTION_MISMATCH is not set
+# CONFIG_KPROBES_SANITY_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+CONFIG_LATENCYTOP=y
+CONFIG_RESOURCE_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+
+# FIXME: Move to arch
+CONFIG_ACPI_WMI=m
+CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+
+#FIXME: x86 generic?
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_LEDS_CLEVO_MAIL=m
+CONFIG_I8K=m
+CONFIG_ACER_WMI=m
+CONFIG_EDAC_I3000=m
+CONFIG_INPUT_APANEL=m
+
+# CONFIG_INTEL_MENLOW is not set
+CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_IPWIRELESS=m
+CONFIG_RTC_DRV_DS1511=m
+CONFIG_CGROUP_MEM_CONT=y
+CONFIG_TC1100_WMI=m
+
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_MEMSTICK=m
+CONFIG_MEMSTICK_DEBUG=y
+
+# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+CONFIG_MSPRO_BLOCK=m
+CONFIG_MEMSTICK_TIFM_MS=m
+
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_CGROUP_SCHED=y
 


Index: config-i586
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-i586,v
retrieving revision 1.2
retrieving revision 1.2.4.1
diff -u -r1.2 -r1.2.4.1
--- config-i586	29 Oct 2007 17:29:06 -0000	1.2
+++ config-i586	29 Feb 2008 18:58:22 -0000	1.2.4.1
@@ -5,3 +5,5 @@
 # CONFIG_HIGHMEM64G is not set
 
 CONFIG_X86_POWERNOW_K6=m
+
+# CONFIG_KVM is not set


Index: config-nodebug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-nodebug,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-nodebug	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-nodebug	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -27,3 +27,5 @@
 # CONFIG_ACPI_DEBUG is not set
 
 CONFIG_DEBUG_SG=y
+
+CONFIG_DEBUG_PAGEALLOC=y


Index: config-powerpc-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-powerpc-generic,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-powerpc-generic	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-powerpc-generic	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -205,3 +205,16 @@
 CONFIG_AXON_RAM=m
 CONFIG_OPROFILE_CELL=y
 
+# CONFIG_PPC_MPC52xx is not set
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_IDEPCI_PCIBUS_ORDER is not set
+CONFIG_PATA_PLATFORM=m
+CONFIG_PATA_OF_PLATFORM=m
+CONFIG_USB_EHCI_HCD_PPC_OF=y
+
+# CONFIG_MPC5121_ADS is not set
+CONFIG_MTD_OF_PARTS=m
+# CONFIG_MTD_NAND_FSL_ELBC is not set
+CONFIG_THERMAL=y
+
+# CONFIG_MEMORY_HOTREMOVE is not set


Index: config-powerpc64
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-powerpc64,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-powerpc64	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-powerpc64	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -29,6 +29,7 @@
 CONFIG_PS3_DISK=m
 CONFIG_PS3_ROM=m
 CONFIG_PS3_FLASH=m
+CONFIG_PS3_LPM=y
 CONFIG_SND_PS3=m
 CONFIG_SND_PS3_DEFAULT_START_DELAY=1000
 CONFIG_GELIC_NET=m
@@ -149,3 +150,7 @@
 CONFIG_ELECTRA_CF=m
 
 CONFIG_SPARSEMEM_VMEMMAP=y
+
+CONFIG_SPU_TRACE=m
+CONFIG_MTD_NAND_PASEMI=m
+CONFIG_EDAC_CELL=m


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-s390x,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-s390x	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-s390x	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -196,3 +196,5 @@
 
 CONFIG_S390_VMUR=m
 
+# CONFIG_THERMAL is not set
+# CONFIG_DEBUG_PAGEALLOC is not set


Index: config-sparc64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-sparc64-generic,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-sparc64-generic	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-sparc64-generic	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -28,7 +28,7 @@
 CONFIG_HUGETLB_PAGE_SIZE_4MB=y
 # CONFIG_HUGETLB_PAGE_SIZE_512K is not set
 # CONFIG_HUGETLB_PAGE_SIZE_64K is not set
-CONFIG_NR_CPUS=32
+CONFIG_NR_CPUS=64
 CONFIG_US3_FREQ=m
 CONFIG_US2E_FREQ=m
 CONFIG_SUN_OPENPROMFS=m
@@ -65,6 +65,7 @@
 # CONFIG_FB_LEO is not set
 CONFIG_FB_XVR500=y
 CONFIG_FB_XVR2500=y
+# CONFIG_DRM_NOUVEAU is not set
 # CONFIG_MDA_CONSOLE is not set
 # CONFIG_PROM_CONSOLE is not set
 CONFIG_FONTS=y
@@ -150,3 +151,5 @@
 # CONFIG_STACK_DEBUG is not set
 
 CONFIG_SPARSEMEM_VMEMMAP=y
+
+# CONFIG_THERMAL is not set


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-x86-generic,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-x86-generic	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-x86-generic	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -170,7 +170,7 @@
 # CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
 # CONFIG_X86_POWERNOW_K6 is not set
 CONFIG_X86_POWERNOW_K7=y
-CONFIG_X86_POWERNOW_K8=y
+CONFIG_X86_POWERNOW_K8=m
 CONFIG_X86_POWERNOW_K8_ACPI=y
 # CONFIG_X86_GX_SUSPMOD is not set
 # CONFIG_X86_SPEEDSTEP_CENTRINO is not set
@@ -316,7 +316,7 @@
 
 CONFIG_RELOCATABLE=y
 CONFIG_PHYSICAL_ALIGN=0x400000
-CONFIG_PHYSICAL_START=0x1000000
+CONFIG_PHYSICAL_START=0x400000
 CONFIG_CRASH_DUMP=y
 CONFIG_PROC_VMCORE=y
 
@@ -342,6 +342,7 @@
 CONFIG_THINKPAD_ACPI=m
 # CONFIG_THINKPAD_ACPI_DEBUG is not set
 CONFIG_THINKPAD_ACPI_BAY=y
+CONFIG_THINKPAD_ACPI_VIDEO=y
 
 CONFIG_MACINTOSH_DRIVERS=y
 
@@ -359,3 +360,8 @@
 CONFIG_INTEL_IOATDMA=m
 
 CONFIG_SENSORS_I5K_AMB=m
+
+# CONFIG_CPA_DEBUG is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+
+CONFIG_HP_WATCHDOG=m


Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/config-x86_64-generic,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -u -r1.2.4.1 -r1.2.4.2
--- config-x86_64-generic	18 Feb 2008 16:55:16 -0000	1.2.4.1
+++ config-x86_64-generic	29 Feb 2008 18:58:22 -0000	1.2.4.2
@@ -12,7 +12,8 @@
 CONFIG_X86_64_ACPI_NUMA=y
 # CONFIG_NUMA_EMU is not set
 CONFIG_NR_CPUS=64
-CONFIG_X86_POWERNOW_K8=y
+CONFIG_X86_POWERNOW_K8=m
+CONFIG_X86_POWERNOW_K8_ACPI=y
 # CONFIG_X86_P4_CLOCKMOD is not set
 CONFIG_IA32_EMULATION=y
 # CONFIG_IA32_AOUT is not set
@@ -104,6 +105,7 @@
 CONFIG_THINKPAD_ACPI=m
 # CONFIG_THINKPAD_ACPI_DEBUG is not set
 CONFIG_THINKPAD_ACPI_BAY=y
+CONFIG_THINKPAD_ACPI_VIDEO=y
 
 CONFIG_HOTPLUG_PCI=y
 CONFIG_HOTPLUG_PCI_COMPAQ=m
@@ -184,6 +186,8 @@
 
 # CONFIG_HW_RANDOM_GEODE is not set
 
+CONFIG_USB_HIDINPUT_POWERBOOK=y
+
 CONFIG_DEBUG_STACKOVERFLOW=y
 CONFIG_DEBUG_NMI_TIMEOUT=5
 
@@ -245,3 +249,12 @@
 # CONFIG_X86_MCE is not set
 
 CONFIG_SPARSEMEM_VMEMMAP=y
+
+# CONFIG_PARAVIRT_GUEST is not set
+# CONFIG_COMPAT_VDSO is not set
+CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_CPA_DEBUG is not set
+CONFIG_CRYPTO_SALSA20_X86_64=m
+
+CONFIG_HP_WATCHDOG=m


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/kernel.spec,v
retrieving revision 1.11.2.8
retrieving revision 1.11.2.9
diff -u -r1.11.2.8 -r1.11.2.9
--- kernel.spec	22 Feb 2008 13:35:30 -0000	1.11.2.8
+++ kernel.spec	29 Feb 2008 18:58:22 -0000	1.11.2.9
@@ -3,7 +3,7 @@
 # For a stable, released kernel, released_kernel should be 1. For rawhide
 # and/or a kernel built from an rc or git snapshot, released_kernel should
 # be 0.
-%define released_kernel 1
+%define released_kernel 0
 
 # Versions of various parts
 
@@ -20,7 +20,7 @@
 # kernel spec when the kernel is rebased, so fedora_build automatically
 # works out to the offset from the rebase, so it doesn't get too ginormous.
 #
-%define fedora_cvs_origin 23
+%define fedora_cvs_origin 78
 %define private_markmc_pv_ops_branch 1.11.2.
 %define fedora_build %(R="$Revision$"; R="${R%% \$}"; echo "%{fedora_cvs_origin}.${R##: %{private_markmc_pv_ops_branch}}")
 
@@ -44,9 +44,9 @@
 # The next upstream release sublevel (base_sublevel+1)
 %define upstream_sublevel %(expr %{base_sublevel} + 1)
 # The rc snapshot level
-%define rcrev 0
+%define rcrev 3
 # The git snapshot level
-%define gitrev 0
+%define gitrev 1
 # Set rpm version accordingly
 %define rpmversion 2.6.%{upstream_sublevel}
 %endif
@@ -255,8 +255,8 @@
 %endif
 
 # no need to build headers again for these arches,
-# they can just use i386 and ppc64 and sparc headers
-%ifarch i586 i686 ppc64iseries sparc64
+# they can just use i386 and ppc64 headers
+%ifarch i586 i686 ppc64iseries 
 %define with_headers 0
 %endif
 
@@ -272,7 +272,7 @@
 %define with_bootwrapper 0
 %endif
 
-# sparse blows up on ppc64
+# sparse blows up on ppc64 alpha and sparc64
 %ifarch ppc64 ppc alpha sparc64
 %define with_sparse 0
 %endif
@@ -312,8 +312,7 @@
 %endif
 
 %ifarch sparc
-# Yes, this is a hack. We want both sets of headers in the sparc.rpm
-%define hdrarch sparc64
+# We only build sparc headers since we dont support sparc32 hardware
 %endif
 
 %ifarch sparc64
@@ -371,7 +370,7 @@
 
 # We don't build a kernel on i386; we only do kernel-headers there,
 # and we no longer build for 31bit S390. Same for 32bit sparc.
-%define nobuildarches i386 s390 sparc ppc
+%define nobuildarches i386 s390 sparc
 
 %ifarch %nobuildarches
 %define with_up 0
@@ -424,7 +423,7 @@
 # Packages that need to be installed before the kernel is, because the %post
 # scripts use them.
 #
-%define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, mkinitrd >= 6.0.9-7
+%define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, mkinitrd >= 6.0.30-1
 
 #
 # This macro does requires, provides, conflicts, obsoletes for a kernel package.
@@ -563,8 +562,16 @@
 ### BRANCH PATCH ###
 %endif
 
+# stable release candidate
+# Patch03: patch-2.6.24.1-rc1.bz2
+
+# we always need nonintconfig, even for -vanilla kernels
+Patch06: linux-2.6-build-nonintconfig.patch
+
 %if !%{nopatches}
 
+Patch10: linux-2.6-hotfixes.patch
+
 Patch21: linux-2.6-utrace-tracehook.patch
 Patch22: linux-2.6-utrace-tracehook-ia64.patch
 Patch23: linux-2.6-utrace-tracehook-sparc64.patch
@@ -587,32 +594,12 @@
 Patch42: linux-2.6-x86-tune-generic.patch
 Patch75: linux-2.6-x86-debug-boot.patch
 
-Patch85: linux-2.6-alsa-rc4-mm1.patch
-Patch86: linux-2.6-alsa-support-sis7019.patch
-
-Patch120: linux-2.6-powerpc-bootwrapper.patch
-Patch121: linux-2.6-pasemi-for-2.6.25.patch
-Patch122: linux-2.6-pasemi-reserve-i2c.patch
 Patch123: linux-2.6-ppc-rtc.patch
-Patch124: linux-2.6-gelic-fixups.patch
-Patch125: linux-2.6-gelic-wireless-v2.patch
-Patch126: linux-2.6-gelic-wireless-fix.patch
-Patch130: linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch
-Patch131: linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch
-Patch132: linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch
-Patch133: linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch
-Patch134: linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch
 Patch140: linux-2.6-ps3-ehci-iso.patch
 Patch141: linux-2.6-ps3-storage-alias.patch
 Patch142: linux-2.6-ps3-legacy-bootloader-hack.patch
 Patch143: linux-2.6-g5-therm-shutdown.patch
 
-%endif
-
-Patch150: linux-2.6-build-nonintconfig.patch
-
-%if !%{nopatches}
-
 Patch160: linux-2.6-execshield.patch
 Patch250: linux-2.6-debug-sizeof-structs.patch
 Patch260: linux-2.6-debug-nmi-timeout.patch
@@ -629,57 +616,38 @@
 Patch460: linux-2.6-serial-460800.patch
 Patch510: linux-2.6-silence-noise.patch
 Patch570: linux-2.6-selinux-mprotect-checks.patch
-Patch571: linux-2.6-selinux-strip-leading-slashes.patch
-Patch590: linux-2.6-unexport-symbols.patch
 Patch610: linux-2.6-defaults-fat-utf8.patch
 Patch660: linux-2.6-libata-ali-atapi-dma.patch
 Patch670: linux-2.6-ata-quirk.patch
+
 Patch680: linux-2.6-wireless.patch
 Patch681: linux-2.6-wireless-pending.patch
 Patch690: linux-2.6-at76.patch
-Patch691: linux-2.6-rndis_wlan.patch
-Patch692: linux-2.6-ath5k-use-soft-wep.patch
+
 Patch820: linux-2.6-compile-fixes.patch
 Patch821: linux-2.6-compile-fix-gcc-43.patch
 Patch1101: linux-2.6-default-mmf_dump_elf_headers.patch
-Patch1102: linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch
 Patch1400: linux-2.6-smarter-relatime.patch
-Patch1503: linux-2.6-xfs-xfs_mount-refactor.patch
-Patch1504: linux-2.6-xfs-optimize-away-realtime-tests.patch
-Patch1509: linux-2.6-xfs-setfattr-32bit-compat.patch
 Patch1515: linux-2.6-lirc.patch
-Patch1520: linux-2.6-dcdbas-autoload.patch
 
-# drm-mm catchup (modesetting, ...)
-Patch1801: linux-2.6-drm-mm.patch
-Patch1800: linux-2.6-agp-mm.patch
 # nouveau + drm fixes
-Patch1802: nouveau-drm.patch
-Patch1803: linux-2.6-ppc32-ucmpdi2.patch
-Patch1804: linux-2.6-drm-radeon-update.patch
-Patch1805: linux-2.6-git-initial-r500-drm.patch
-
-# Work around E1000 corrupt EEPROM problem.
-Patch2000: linux-2.6-e1000-corrupt-eeprom-checksum.patch
-Patch2001: linux-2.6-netdev-e1000-disable-alpm.patch
+Patch1801: linux-2.6-drm-git-mm.patch
+Patch1802: linux-2.6-ppc32-ucmpdi2.patch
+Patch1803: nouveau-drm.patch
 
-# fix null pointer deref in bonding driver
-Patch2010: linux-2.6-netdev-bonding-fix-null-deref.patch
+# kludge to make ich9 e1000 work
+Patch2000: linux-2.6-e1000-ich9.patch
 
 # atl2 network driver
 Patch2020: linux-2.6-netdev-atl2.patch
 
 # ext4 patches
-Patch2100: linux-2.6-ext4-linus-git.patch
-Patch2101: linux-2.6-ext4-stable-queue.patch
+Patch2100: linux-2.6-ext4-stable-queue.patch
 
 # linux1394 git patches
 Patch2200: linux-2.6-firewire-git-update.patch
 Patch2201: linux-2.6-firewire-git-pending.patch
 
-# epoll lockdep annotation (bz #323411)
-Patch2205: linux-2.6-epoll-lockdep-annotation.patch
-
 # make USB EHCI driver respect "nousb" parameter
 Patch2300: linux-2.6-usb-ehci-hcd-respect-nousb.patch
 
@@ -689,8 +657,13 @@
 # usb video
 Patch2400: linux-2.6-uvcvideo.patch
 
+Patch2501: linux-2.6-ppc-use-libgcc.patch
+
+### HACK ###
+Patch2502: linux-2.6-blkcipher-depend-on-chainiv.patch
+
 # kernel-xen patches start
-Patch5000: linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_24.patch
+Patch5000: linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_25.patch
 Patch5001: linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch
 Patch5002: linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch
 Patch5003: linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch
@@ -755,6 +728,12 @@
 Patch5062: linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch
 Patch5063: linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch
 Patch5064: linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch
+Patch5065: linux-2.6-xen-0066-xen-dom0-Don-t-use-fixmaps-for-ACPI-mappings-in-ISA.patch
+Patch5066: linux-2.6-xen-0067-x86-Do-not-scan-for-DMI-if-the-DMI-region-is-marked.patch
+Patch5067: linux-2.6-xen-0068-xen-dom0-Fix-DMI-scanning.patch
+Patch5068: linux-2.6-xen-0069-ata-scsi-Use-dma_alloc_coherent-for-ATAPI-drain-b.patch
+Patch5069: linux-2.6-xen-0070-xen-Make-hvc0-the-preferred-console-in-domU.patch
+
 
 # kernel-xen patches end
 
@@ -834,7 +813,7 @@
 %description -n %{variantbase}%{?1:-%{1}}-debuginfo\
 This package provides debug information for package %{variantbase}%{?1:-%{1}}.\
 This is required to use SystemTap with %{variantbase}%{?1:-%{1}}-%{KVERREL}.\
-%{expand:%%global debuginfo_args %{?debuginfo_args} -p '/.*/%%{KVERREL}%{?1:-?%{1}}(-%%{_target_cpu})?/.*|/.*%%{KVERREL}%{?1}' -o debuginfo%{?1}.list}\
+%{expand:%%global debuginfo_args %{?debuginfo_args} -p '/.*/%%{KVERREL}%{?1:-?%{1}}(-%%{_target_cpu})?/.*|/.*%%{KVERREL}%{?1}(\.debug)?' -o debuginfo%{?1}.list}\
 %{nil}
 
 #
@@ -1097,6 +1076,9 @@
   done
 %endif
 
+# stable release candidate
+# ApplyPatch patch-2.6.24.1-rc1.bz2
+
 # This patch adds a "make nonint_oldconfig" which is non-interactive and
 # also gives a list of missing options at the end. Useful for automated
 # builds (as used in the buildsystem).
@@ -1104,31 +1086,33 @@
 
 %if !%{nopatches}
 
+ApplyPatch linux-2.6-hotfixes.patch
+
 # Roland's utrace ptrace replacement.
 # Main patch includes i386, x86_64, powerpc.
-ApplyPatch linux-2.6-utrace-tracehook.patch
+#ApplyPatch linux-2.6-utrace-tracehook.patch
 # Additional arch work by other contributors.
-ApplyPatch linux-2.6-utrace-tracehook-ia64.patch
-ApplyPatch linux-2.6-utrace-tracehook-sparc64.patch
-ApplyPatch linux-2.6-utrace-tracehook-s390.patch
-ApplyPatch linux-2.6-utrace-tracehook-um.patch
-ApplyPatch linux-2.6-utrace-tracehook-avr32.patch
+#ApplyPatch linux-2.6-utrace-tracehook-ia64.patch
+#ApplyPatch linux-2.6-utrace-tracehook-sparc64.patch
+#ApplyPatch linux-2.6-utrace-tracehook-s390.patch
+#ApplyPatch linux-2.6-utrace-tracehook-um.patch
+#ApplyPatch linux-2.6-utrace-tracehook-avr32.patch
 # Main patch includes i386, x86_64, powerpc.
-ApplyPatch linux-2.6-utrace-regset.patch
+#ApplyPatch linux-2.6-utrace-regset.patch
 # Additional arch work by other contributors.
-ApplyPatch linux-2.6-utrace-regset-ia64.patch
-ApplyPatch linux-2.6-utrace-regset-sparc64.patch
-ApplyPatch linux-2.6-utrace-regset-s390.patch
-ApplyPatch linux-2.6-utrace-regset-avr32.patch
+#ApplyPatch linux-2.6-utrace-regset-ia64.patch
+#ApplyPatch linux-2.6-utrace-regset-sparc64.patch
+#ApplyPatch linux-2.6-utrace-regset-s390.patch
+#ApplyPatch linux-2.6-utrace-regset-avr32.patch
 # Core patch has no machine dependencies.
-ApplyPatch linux-2.6-utrace-core.patch
+#ApplyPatch linux-2.6-utrace-core.patch
 # Main patch includes i386, x86_64, powerpc.
-ApplyPatch linux-2.6-utrace-ptrace-compat.patch
+#ApplyPatch linux-2.6-utrace-ptrace-compat.patch
 # Additional arch work by other contributors.
-ApplyPatch linux-2.6-utrace-ptrace-compat-ia64.patch
-ApplyPatch linux-2.6-utrace-ptrace-compat-sparc64.patch
-ApplyPatch linux-2.6-utrace-ptrace-compat-s390.patch
-ApplyPatch linux-2.6-utrace-ptrace-compat-avr32.patch
+#ApplyPatch linux-2.6-utrace-ptrace-compat-ia64.patch
+#ApplyPatch linux-2.6-utrace-ptrace-compat-sparc64.patch
+#ApplyPatch linux-2.6-utrace-ptrace-compat-s390.patch
+#ApplyPatch linux-2.6-utrace-ptrace-compat-avr32.patch
 
 # enable sysrq-c on all kernels, not only kexec
 ApplyPatch linux-2.6-sysrq-c.patch
@@ -1138,28 +1122,12 @@
 # Compile 686 kernels tuned for Pentium4.
 ApplyPatch linux-2.6-x86-tune-generic.patch
 
-
 #
 # PowerPC
 #
 ###  UPSTREAM PATCHES FROM 2.6.25 (we think):
-# Export bootwrapper for userspace to use
-ApplyPatch linux-2.6-powerpc-bootwrapper.patch
-# PA Semi updates
-ApplyPatch linux-2.6-pasemi-for-2.6.25.patch
-ApplyPatch linux-2.6-pasemi-reserve-i2c.patch
 # RTC class driver for ppc_md rtc functions
 ApplyPatch linux-2.6-ppc-rtc.patch
-# PlayStation wireless support
-ApplyPatch linux-2.6-gelic-fixups.patch
-ApplyPatch linux-2.6-gelic-wireless-v2.patch
-ApplyPatch linux-2.6-gelic-wireless-fix.patch
-# Suspend through /sys/power/state
-ApplyPatch linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch
 ### NOT (YET) UPSTREAM:
 # The EHCI ISO patch isn't yet upstream but is needed to fix reboot
 ApplyPatch linux-2.6-ps3-ehci-iso.patch
@@ -1217,10 +1185,6 @@
 
 # ALSA
 #
-# upstream ALSA
-#ApplyPatch linux-2.6-alsa-rc4-mm1.patch
-# SiS 7019 support
-ApplyPatch linux-2.6-alsa-support-sis7019.patch
 
 # Filesystem patches.
 # Squashfs
@@ -1240,12 +1204,6 @@
 
 # Fix the SELinux mprotect checks on executable mappings
 ApplyPatch linux-2.6-selinux-mprotect-checks.patch
-# strip extra leading slashes in pathnames
-ApplyPatch linux-2.6-selinux-strip-leading-slashes.patch
-
-# Remove kernel-internal functionality that nothing external should use.
-ApplyPatch linux-2.6-unexport-symbols.patch
-
 
 # Changes to upstream defaults.
 # Use UTF-8 by default on VFAT.
@@ -1263,19 +1221,10 @@
 
 # Add misc wireless bits from upstream wireless tree
 ApplyPatch linux-2.6-at76.patch
-ApplyPatch linux-2.6-rndis_wlan.patch
-
-# Make ath5k use software WEP
-ApplyPatch linux-2.6-ath5k-use-soft-wep.patch
 
 # implement smarter atime updates support.
 ApplyPatch linux-2.6-smarter-relatime.patch
 
-# xfs bugfixes & stack reduction.  Upstream; will be in 2.6.25.
-ApplyPatch linux-2.6-xfs-xfs_mount-refactor.patch
-ApplyPatch linux-2.6-xfs-optimize-away-realtime-tests.patch
-ApplyPatch linux-2.6-xfs-setfattr-32bit-compat.patch
-
 #
 # misc small stuff to make things compile
 #
@@ -1290,52 +1239,39 @@
 
 # build id related enhancements
 ApplyPatch linux-2.6-default-mmf_dump_elf_headers.patch
-ApplyPatch linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch
 
 # http://www.lirc.org/
 ApplyPatch linux-2.6-lirc.patch
 
-# DMI autoloading for dcdbas driver
-ApplyPatch linux-2.6-dcdbas-autoload.patch
-
-ApplyPatch linux-2.6-e1000-corrupt-eeprom-checksum.patch
-ApplyPatch linux-2.6-netdev-e1000-disable-alpm.patch
-ApplyPatch linux-2.6-netdev-bonding-fix-null-deref.patch
-# atl2 driver for eeepc (and others)
+ApplyPatch linux-2.6-e1000-ich9.patch
 ApplyPatch linux-2.6-netdev-atl2.patch
 
-# drm-mm catchup (modesetting, ...)
-ApplyPatch linux-2.6-agp-mm.patch
-ApplyPatch linux-2.6-drm-mm.patch
 # Nouveau DRM + drm fixes
-ApplyPatch nouveau-drm.patch
+ApplyPatch linux-2.6-drm-git-mm.patch
 ApplyPatch linux-2.6-ppc32-ucmpdi2.patch
-ApplyPatch linux-2.6-drm-radeon-update.patch
-ApplyPatch linux-2.6-git-initial-r500-drm.patch
+ApplyPatch nouveau-drm.patch
 
-# ext4dev from Linus' upstream git tree, slated for 2.6.25
-ApplyPatch linux-2.6-ext4-linus-git.patch
 # ext4dev stable patch queue, slated for 2.6.25
-ApplyPatch linux-2.6-ext4-stable-queue.patch
-
+#ApplyPatch linux-2.6-ext4-stable-queue.patch
 
 # linux1394 git patches
-ApplyPatch linux-2.6-firewire-git-update.patch
+#ApplyPatch linux-2.6-firewire-git-update.patch
 C=$(wc -l $RPM_SOURCE_DIR/linux-2.6-firewire-git-pending.patch | awk '{print $1}')
 if [ "$C" -gt 10 ]; then
 ApplyPatch linux-2.6-firewire-git-pending.patch
 fi
 
-# epoll lockdep annotation (bz #323411)
-ApplyPatch linux-2.6-epoll-lockdep-annotation.patch
-
 # usb video
 ApplyPatch linux-2.6-uvcvideo.patch
 
+ApplyPatch linux-2.6-ppc-use-libgcc.patch
+
+ApplyPatch linux-2.6-blkcipher-depend-on-chainiv.patch
+
 # ---------- below all scheduled for 2.6.24 -----------------
 
 # kernel-xen apply start
-ApplyPatch linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_24.patch
+ApplyPatch linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_25.patch
 ApplyPatch linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch
 ApplyPatch linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch
 ApplyPatch linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch
@@ -1400,6 +1336,12 @@
 ApplyPatch linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch
 ApplyPatch linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch
 ApplyPatch linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch
+ApplyPatch linux-2.6-xen-0066-xen-dom0-Don-t-use-fixmaps-for-ACPI-mappings-in-ISA.patch
+ApplyPatch linux-2.6-xen-0067-x86-Do-not-scan-for-DMI-if-the-DMI-region-is-marked.patch
+ApplyPatch linux-2.6-xen-0068-xen-dom0-Fix-DMI-scanning.patch
+ApplyPatch linux-2.6-xen-0069-ata-scsi-Use-dma_alloc_coherent-for-ATAPI-drain-b.patch
+ApplyPatch linux-2.6-xen-0070-xen-Make-hvc0-the-preferred-console-in-domU.patch
+
 
 # kernel-xen apply end
 
@@ -1413,6 +1355,9 @@
 
 cp %{SOURCE10} Documentation/
 
+# only deal with configs if we are going to build for the arch
+%ifnarch %nobuildarches
+
 mkdir configs
 
 # Remove configs not for the buildarch
@@ -1435,6 +1380,8 @@
   echo "# $Arch" > configs/$i
   cat .config >> configs/$i
 done
+# end of kernel config 
+%endif
 
 # get rid of unwanted files resulting from patch fuzz
 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
@@ -1478,10 +1425,16 @@
 '$(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@'
 %endif
 
+cp_vmlinux()
+{
+  eu-strip --remove-comment -o "$2" "$1"
+}
+
 BuildKernel() {
     MakeTarget=$1
     KernelImage=$2
     Flavour=$3
+    InstallName=${4:-vmlinuz}
 
     # Pick the right config file for the kernel we're building
     if [ -n "$Flavour" ] ; then
@@ -1494,6 +1447,14 @@
       DevelLink=
     fi
 
+    # When the bootable image is just the ELF kernel, strip it.
+    # We already copy the unstripped file into the debuginfo package.
+    if [ "$KernelImage" = vmlinux ]; then
+      CopyKernel=cp_vmlinux
+    else
+      CopyKernel=cp
+    fi
+
     KernelVer=%{version}-%{release}$Flavour
     echo BUILDING A KERNEL FOR $Flavour %{_target_cpu}...
 
@@ -1529,15 +1490,11 @@
     install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
     install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
     touch $RPM_BUILD_ROOT/boot/initrd-$KernelVer.img
-    cp $KernelImage $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
     if [ -f arch/$Arch/boot/zImage.stub ]; then
       cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
     fi
-
-    if [ "$Flavour" == "kdump" ]; then
-        cp vmlinux $RPM_BUILD_ROOT/%{image_install_path}/vmlinux-$KernelVer
-        rm -f $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
-    fi
+    $CopyKernel $KernelImage \
+    		$RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
 
     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
     make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer
@@ -1709,7 +1666,7 @@
 %endif
 
 %if %{with_kdump}
-BuildKernel %make_target %kernel_image kdump
+BuildKernel vmlinux vmlinux kdump vmlinux
 %endif
 
 ###
@@ -1948,6 +1905,7 @@
 %endif\
 /lib/modules/%{KVERREL}%{?2}/modules.block\
 /lib/modules/%{KVERREL}%{?2}/modules.networking\
+/lib/modules/%{KVERREL}%{?2}/modules.order\
 %ghost /boot/initrd-%{KVERREL}%{?2}.img\
 %{?-e:%{-e*}}\
 %{expand:%%files -n %{variantbase}-%{?2:%{2}-}devel}\
@@ -1984,6 +1942,9 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL} -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf %{with_xen} xen
 
 %changelog
+* Fri Feb 29 2008 Mark McLoughlin <markmc at redhat.com>
+- Re-base to kernel-2_6_25-0_78_rc3_git1_fc9
+
 * Fri Feb 22 2008 Mark McLoughlin <markmc at redhat.com>
 - Add support for auto-probing frontend drivers
 

linux-2.6-acpi-eeepc-hotkey.patch:

Index: linux-2.6-acpi-eeepc-hotkey.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-acpi-eeepc-hotkey.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-acpi-eeepc-hotkey.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-acpi-eeepc-hotkey.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -12,8 +12,8 @@
 --- a/drivers/misc/Kconfig
 +++ b/drivers/misc/Kconfig
 @@ -251,4 +251,14 @@ config ATMEL_SSC
- 
- 	  If unsure, say N.
+ 	  driver (SCSI/ATA) which supports enclosures
+ 	  or a SCSI enclosure device (SES) to use these services.
  
 +config EEEPC
 +        tristate "Eee PC Hotkey Driver (EXPERIMENTAL)"
@@ -31,9 +31,9 @@
 --- a/drivers/misc/Makefile
 +++ b/drivers/misc/Makefile
 @@ -17,3 +17,4 @@ obj-$(CONFIG_SONY_LAPTOP)	+= sony-laptop.o
- obj-$(CONFIG_THINKPAD_ACPI)	+= thinkpad_acpi.o
- obj-$(CONFIG_FUJITSU_LAPTOP)	+= fujitsu-laptop.o
  obj-$(CONFIG_EEPROM_93CX6)	+= eeprom_93cx6.o
+ obj-$(CONFIG_INTEL_MENLOW)	+= intel_menlow.o
+ obj-$(CONFIG_ENCLOSURE_SERVICES) += enclosure.o
 +obj-$(CONFIG_EEEPC)		+= eeepc.o
 diff --git a/drivers/misc/eeepc.c b/drivers/misc/eeepc.c
 new file mode 100644

linux-2.6-at76.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.1.2.1 -r 1.1.2.2 linux-2.6-at76.patch
Index: linux-2.6-at76.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-at76.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-at76.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-at76.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -1,3 +1,190 @@
+commit e141a848e24724c2d5534ff8152b0be4fe1b6f62
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:01:07 2008 -0500
+
+    at76_usb: make the driver depend on MAC80211
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 4891e7cb744d9e00dfe714c2827abcd32a02e405
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:01:01 2008 -0500
+
+    at76_usb: reindent, reorder initializers for readability
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit a5d909eecd7c57843395780d7bc3e9655093bd5e
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:00:55 2008 -0500
+
+    at76_usb: add more MODULE_AUTHOR entries
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit e5d8694e15d0f20a5a3999ca6697278df9a66ca7
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:00:50 2008 -0500
+
+    at76_usb: remove unneeded code
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 781e1500cd246b9aeaa0fc7593f028d43c87dbc0
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Fri Feb 22 00:00:44 2008 -0500
+
+    at76_usb: fix missing newlines in printk, improve some messages
+    
+    It's important to know which function failed.
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 4083ec919a7353cf7a9de6cf42aa13669b7e018e
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:01:19 2008 +0200
+
+    at76_usb: Remove struct net_device
+    
+    This patch contains only code removal, no code has been modified.
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit bae74e67b58fc0ecf930fc1b5f485d536b1eea5a
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:01:11 2008 +0200
+
+    at76_usb: Prepare for struct net_device removal
+    
+    Some cleanup to make it easier to remove the struct net_device.
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit e31a31b44489b3535fcf7b02871458186ed43aa7
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:01:04 2008 +0200
+
+    at76_usb: Allocate struct at76_priv using ieee80211_alloc_hw()
+    
+    This is for the preparation to remove struct net_device.
+    
+    Also netdev is not registered anymore so the legacy stack does not have
+    visible interface anymore.
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 162d3ad6b55220940216d35dc1418e0c0ef9b98e
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:00:56 2008 +0200
+
+    at76_usb: Use wiphy_name everywhere where needed
+    
+    This is for the preparation to remove struct net_device.
+    
+    Functions used by the legacy stack were not converted, because they will
+    removed anyway.
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 779e36d16d4b79f30207da5d41d8cda9151f8e1f
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:00:49 2008 +0200
+
+    at76_usb: Remove support the legacy stack
+    
+    Now the mac80211 interface will only work, the interface using the legacy
+    stack will be defunct. The legacy interface will removed in following
+    patches.
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 0e5a456201237a135d5970b755ade55c18565033
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:00:41 2008 +0200
+
+    at76_usb: Add support for WEP
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 88ba88d527a925f0b0a5162e64e026e33312648e
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:00:34 2008 +0200
+
+    at76_usb: Add support for monitor mode
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 798f4f8d71f221f0e74dbd1588ab6225c64efc45
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:00:26 2008 +0200
+
+    at76_usb: add mac80211 support
+    
+    This patch creates the basic facilities for using mac80211 while keeping
+    the old legacy stack alone. This add only adds new code, no old code is
+    changed. Both the legacy and mac80211 interfaces are created to make the
+    transition easier. The legacy interface will be removed with following
+    patches.
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit ee5141d10332561306a48b216a1ae1ddfe318805
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:00:19 2008 +0200
+
+    at76_usb: Add DBG_CMD for debugging firmware commands
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 2009705e36ad0b50f0cdb0f9ef186f33057d17e8
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:00:11 2008 +0200
+
+    at76_usb: Convert DBG_TX levels to use at76_dbg_dump()
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit bd80e67cdc3286868f59cf809b63c5c021392fbd
+Author: Kalle Valo <kalle.valo at iki.fi>
+Date:   Sun Feb 10 17:00:04 2008 +0200
+
+    at76_usb: Add at76_dbg_dump() macro
+    
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit c53a0aa28992ba7f212effec5e29be990848b54f
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Sun Feb 10 16:59:56 2008 +0200
+
+    at76_usb: Use net/mac80211.h instead of net/ieee80211.h
+    
+    Rename symbols as required.  Use IEEE80211_MAX_FRAG_THRESHOLD as the
+    maximal packet size, which takes slightly more memory, but should be
+    safer.
+    
+    Copy some frame definitions from net/ieee80211.h to at76_usb.h.  It's
+    done temporarily until mac80211 conversion is complete.
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: Kalle Valo <kalle.valo at iki.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
 commit 38ec6fbd236318179e28c71bc1b3dc94166e4be2
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Mon Feb 4 00:05:19 2008 -0500
@@ -706,9 +893,9 @@
[...5327 lines suppressed...]
++static struct ieee80211_rate at76_rates[] = {
++	{ .bitrate = 10, .hw_value = TX_RATE_1MBIT, },
++	{ .bitrate = 20, .hw_value = TX_RATE_2MBIT, },
++	{ .bitrate = 55, .hw_value = TX_RATE_5_5MBIT, },
++	{ .bitrate = 110, .hw_value = TX_RATE_11MBIT, },
++};
++
++static struct ieee80211_channel at76_channels[] = {
++	{ .center_freq = 2412, .hw_value = 1 },
++	{ .center_freq = 2417, .hw_value = 2 },
++	{ .center_freq = 2422, .hw_value = 3 },
++	{ .center_freq = 2427, .hw_value = 4 },
++	{ .center_freq = 2432, .hw_value = 5 },
++	{ .center_freq = 2437, .hw_value = 6 },
++	{ .center_freq = 2442, .hw_value = 7 },
++	{ .center_freq = 2447, .hw_value = 8 },
++	{ .center_freq = 2452, .hw_value = 9 },
++	{ .center_freq = 2457, .hw_value = 10 },
++	{ .center_freq = 2462, .hw_value = 11 },
++	{ .center_freq = 2467, .hw_value = 12 },
++	{ .center_freq = 2472, .hw_value = 13 },
++	{ .center_freq = 2484, .hw_value = 14 }
++};
++
++static struct ieee80211_supported_band at76_supported_band = {
++	.channels = at76_channels,
++	.n_channels = ARRAY_SIZE(at76_channels),
++	.bitrates = at76_rates,
++	.n_bitrates = ARRAY_SIZE(at76_rates),
++};
++
 +/* Register network device and initialize the hardware */
 +static int at76_init_new_device(struct at76_priv *priv,
 +				struct usb_interface *interface)
 +{
-+	struct net_device *netdev = priv->netdev;
 +	int ret;
 +
 +	/* set up the endpoint information */
@@ -6633,8 +3654,6 @@
 +	}
 +
 +	priv->domain = at76_get_reg_domain(priv->regulatory_domain);
-+	/* init. netdev->dev_addr */
-+	memcpy(netdev->dev_addr, priv->mac_addr, ETH_ALEN);
 +
 +	priv->channel = DEF_CHANNEL;
 +	priv->iw_mode = IW_MODE_INFRA;
@@ -6644,63 +3663,49 @@
 +	priv->txrate = TX_RATE_AUTO;
 +	priv->preamble_type = PREAMBLE_TYPE_LONG;
 +	priv->beacon_period = 100;
-+	priv->beacons_last_qual = jiffies;
 +	priv->auth_mode = WLAN_AUTH_OPEN;
 +	priv->scan_min_time = DEF_SCAN_MIN_TIME;
 +	priv->scan_max_time = DEF_SCAN_MAX_TIME;
 +	priv->scan_mode = SCAN_TYPE_ACTIVE;
 +
-+	netdev->flags &= ~IFF_MULTICAST;	/* not yet or never */
-+	netdev->open = at76_open;
-+	netdev->stop = at76_stop;
-+	netdev->get_stats = at76_get_stats;
-+	netdev->ethtool_ops = &at76_ethtool_ops;
-+
-+	/* Add pointers to enable iwspy support. */
-+	priv->wireless_data.spy_data = &priv->spy_data;
-+	netdev->wireless_data = &priv->wireless_data;
-+
-+	netdev->hard_start_xmit = at76_tx;
-+	netdev->tx_timeout = at76_tx_timeout;
-+	netdev->watchdog_timeo = 2 * HZ;
-+	netdev->wireless_handlers = &at76_handler_def;
-+	netdev->set_multicast_list = at76_set_multicast;
-+	netdev->set_mac_address = at76_set_mac_address;
-+	dev_alloc_name(netdev, "wlan%d");
++	/* mac80211 initialisation */
++	priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &at76_supported_band;
++	priv->hw->flags = IEEE80211_HW_RX_INCLUDES_FCS;
 +
-+	ret = register_netdev(priv->netdev);
++	SET_IEEE80211_DEV(priv->hw, &interface->dev);
++	SET_IEEE80211_PERM_ADDR(priv->hw, priv->mac_addr);
++
++	ret = ieee80211_register_hw(priv->hw);
 +	if (ret) {
-+		dev_printk(KERN_ERR, &interface->dev,
-+			   "cannot register netdevice (status %d)!\n", ret);
++		printk(KERN_ERR "cannot register mac80211 hw (status %d)!\n",
++		       ret);
 +		goto exit;
 +	}
-+	priv->netdev_registered = 1;
++
++	priv->mac80211_registered = 1;
 +
 +	printk(KERN_INFO "%s: USB %s, MAC %s, firmware %d.%d.%d-%d\n",
-+	       netdev->name, interface->dev.bus_id, mac2str(priv->mac_addr),
++	       wiphy_name(priv->hw->wiphy),
++	       interface->dev.bus_id, mac2str(priv->mac_addr),
 +	       priv->fw_version.major, priv->fw_version.minor,
 +	       priv->fw_version.patch, priv->fw_version.build);
-+	printk(KERN_INFO "%s: regulatory domain 0x%02x: %s\n", netdev->name,
++	printk(KERN_INFO "%s: regulatory domain 0x%02x: %s\n",
++	       wiphy_name(priv->hw->wiphy),
 +	       priv->regulatory_domain, priv->domain->name);
 +
-+	/* we let this timer run the whole time this driver instance lives */
-+	mod_timer(&priv->bss_list_timer, jiffies + BSS_LIST_TIMEOUT);
-+
 +exit:
 +	return ret;
 +}
 +
 +static void at76_delete_device(struct at76_priv *priv)
 +{
-+	int i;
-+
 +	at76_dbg(DBG_PROC_ENTRY, "%s: ENTER", __func__);
 +
 +	/* The device is gone, don't bother turning it off */
 +	priv->device_unplugged = 1;
 +
-+	if (priv->netdev_registered)
-+		unregister_netdev(priv->netdev);
++	if (priv->mac80211_registered)
++		ieee80211_unregister_hw(priv->hw);
 +
 +	/* assuming we used keventd, it must quiesce too */
 +	flush_scheduled_work();
@@ -6721,25 +3726,11 @@
 +	if (priv->rx_skb)
 +		kfree_skb(priv->rx_skb);
 +
-+	at76_free_bss_list(priv);
-+	del_timer_sync(&priv->bss_list_timer);
-+	cancel_delayed_work(&priv->dwork_get_scan);
-+	cancel_delayed_work(&priv->dwork_beacon);
-+	cancel_delayed_work(&priv->dwork_auth);
-+	cancel_delayed_work(&priv->dwork_assoc);
-+
-+	if (priv->mac_state == MAC_CONNECTED)
-+		at76_iwevent_bss_disconnect(priv->netdev);
-+
-+	for (i = 0; i < NR_RX_DATA_BUF; i++)
-+		if (priv->rx_data[i].skb) {
-+			dev_kfree_skb(priv->rx_data[i].skb);
-+			priv->rx_data[i].skb = NULL;
-+		}
 +	usb_put_dev(priv->udev);
 +
-+	at76_dbg(DBG_PROC_ENTRY, "%s: before freeing priv/netdev", __func__);
-+	free_netdev(priv->netdev);	/* priv is in netdev */
++	at76_dbg(DBG_PROC_ENTRY, "%s: before freeing priv/ieee80211_hw",
++		 __func__);
++	ieee80211_free_hw(priv->hw);
 +
 +	at76_dbg(DBG_PROC_ENTRY, "%s: EXIT", __func__);
 +}
@@ -6835,7 +3826,6 @@
 +		goto error;
 +	}
 +
-+	SET_NETDEV_DEV(priv->netdev, &interface->dev);
 +	usb_set_intfdata(interface, priv);
 +
 +	memcpy(&priv->fw_version, &fwv, sizeof(struct mib_fw_version));
@@ -6863,7 +3853,7 @@
 +	if (!priv)
 +		return;
 +
-+	printk(KERN_INFO "%s: disconnecting\n", priv->netdev->name);
++	printk(KERN_INFO "%s: disconnecting\n", wiphy_name(priv->hw->wiphy));
 +	at76_delete_device(priv);
 +	dev_printk(KERN_INFO, &interface->dev, "disconnected\n");
 +}
@@ -6919,18 +3909,20 @@
 +MODULE_AUTHOR("Nick Jones");
 +MODULE_AUTHOR("Balint Seeber <n0_5p4m_p13453 at hotmail.com>");
 +MODULE_AUTHOR("Pavel Roskin <proski at gnu.org>");
++MODULE_AUTHOR("Guido Guenther <agx at sigxcpu.org>");
++MODULE_AUTHOR("Kalle Valo <kalle.valo at iki.fi>");
 +MODULE_DESCRIPTION(DRIVER_DESC);
 +MODULE_LICENSE("GPL");
 diff -up linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.24.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig	2008-02-05 22:45:16.000000000 -0500
-+++ linux-2.6.24.noarch/drivers/net/wireless/Kconfig	2008-02-05 22:46:17.000000000 -0500
-@@ -451,6 +451,14 @@ config PCMCIA_ATMEL
+--- linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig	2008-02-27 20:56:07.000000000 -0500
++++ linux-2.6.24.noarch/drivers/net/wireless/Kconfig	2008-02-27 20:56:23.000000000 -0500
+@@ -457,6 +457,14 @@ config PCMCIA_ATMEL
  	  Enable support for PCMCIA cards containing the
  	  Atmel at76c502 and at76c504 chips.
  
 +config USB_ATMEL
 +	tristate "Atmel at76c503/at76c505/at76c505a USB cards"
-+	depends on WLAN_80211 && USB
++	depends on MAC80211 && WLAN_80211 && USB
 +	select FW_LOADER
 +	---help---
 +	  Enable support for USB Wireless devices using Atmel at76c503,

linux-2.6-build-nonintconfig.patch:

Index: linux-2.6-build-nonintconfig.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-build-nonintconfig.patch,v
retrieving revision 1.1.22.1
retrieving revision 1.1.22.2
diff -u -r1.1.22.1 -r1.1.22.2
--- linux-2.6-build-nonintconfig.patch	18 Feb 2008 16:55:17 -0000	1.1.22.1
+++ linux-2.6-build-nonintconfig.patch	29 Feb 2008 18:58:22 -0000	1.1.22.2
@@ -1,6 +1,8 @@
---- linux-2.6.23.noarch/scripts/kconfig/Makefile~	2007-10-29 19:20:10.000000000 -0400
-+++ linux-2.6.23.noarch/scripts/kconfig/Makefile	2007-10-29 19:20:24.000000000 -0400
-@@ -29,6 +29,11 @@ oldconfig: $(obj)/conf
+diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
+index 32e8c5a..8020453 100644
+--- a/scripts/kconfig/Makefile
++++ b/scripts/kconfig/Makefile
+@@ -24,6 +24,11 @@ oldconfig: $(obj)/conf
  silentoldconfig: $(obj)/conf
  	$< -s $(Kconfig)
  
@@ -9,12 +11,14 @@
 +loose_nonint_oldconfig: $(obj)/conf
 +	$< -B $(Kconfig)
 +
- # Create new linux.po file
+ # Create new linux.pot file
  # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
  # The symlink is used to repair a deficiency in arch/um
---- linux-2.6.17/scripts/kconfig/conf.c.nonintconfig
-+++ linux-2.6.17/scripts/kconfig/conf.c
-@@ -21,6 +21,8 @@ enum {
+diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
+index fda6313..ed33b66 100644
+--- a/scripts/kconfig/conf.c
++++ b/scripts/kconfig/conf.c
+@@ -22,6 +22,8 @@ enum {
  	ask_all,
  	ask_new,
  	ask_silent,
@@ -23,7 +27,7 @@
  	set_default,
  	set_yes,
  	set_mod,
-@@ -37,6 +39,8 @@ static struct menu *rootEntry;
+@@ -38,6 +40,8 @@ static struct menu *rootEntry;
  
  static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
  
@@ -32,7 +36,7 @@
  static const char *get_help(struct menu *menu)
  {
  	if (menu_has_help(menu))
-@@ -103,6 +107,16 @@ static void conf_askvalue(struct symbol 
+@@ -112,6 +116,16 @@ static int conf_askvalue(struct symbol *sym, const char *def)
  		fflush(stdout);
  		fgets(line, 128, stdin);
  		return 1;
@@ -49,7 +53,7 @@
  	case set_default:
  		printf("%s\n", def);
  		return 1;
-@@ -346,6 +358,11 @@ static int conf_choice(struct menu *menu
+@@ -351,6 +365,11 @@ static int conf_choice(struct menu *menu)
  			printf("?");
  		printf("]: ");
  		switch (input_mode) {
@@ -61,7 +65,7 @@
  		case ask_new:
  		case ask_silent:
  			if (!is_new) {
-@@ -482,6 +499,10 @@ static void check_conf(struct menu *menu
+@@ -486,6 +505,10 @@ static void check_conf(struct menu *menu)
  			if (!conf_cnt++)
  				printf(_("*\n* Restart config...\n*\n"));
  			rootEntry = menu_get_parent_menu(menu);
@@ -72,7 +76,13 @@
  			conf(rootEntry);
  		}
  	}
-@@ -501,6 +522,12 @@ int main(int ac, char **av)
+@@ -504,11 +527,17 @@ int main(int ac, char **av)
+ 	bindtextdomain(PACKAGE, LOCALEDIR);
+ 	textdomain(PACKAGE);
+ 
+-	while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
++	while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
+ 		switch (opt) {
  		case 'o':
  			input_mode = ask_new;
  			break;
@@ -85,7 +95,7 @@
  		case 's':
  			input_mode = ask_silent;
  			valid_stdin = isatty(0) && isatty(1) && isatty(2);
-@@ -566,6 +593,8 @@ int main(int ac, char **av)
+@@ -573,6 +602,8 @@ int main(int ac, char **av)
  		}
  	case ask_all:
  	case ask_new:
@@ -94,7 +104,7 @@
  		conf_read(NULL);
  		break;
  	case set_no:
-@@ -612,7 +641,8 @@ int main(int ac, char **av)
+@@ -619,7 +650,8 @@ int main(int ac, char **av)
  	do {
  		conf_cnt = 0;
  		check_conf(&rootmenu);
@@ -104,7 +114,7 @@
  	if (conf_write(NULL)) {
  		fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
  		return 1;
-@@ -623,5 +653,5 @@ skip_check:
+@@ -630,5 +662,5 @@ skip_check:
  		return 1;
  	}
  

linux-2.6-compile-fix-gcc-43.patch:

Index: linux-2.6-compile-fix-gcc-43.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-compile-fix-gcc-43.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-compile-fix-gcc-43.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-compile-fix-gcc-43.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -9,42 +9,15 @@
  {
  	ns += a->tv_nsec;
  	while(unlikely(ns >= NSEC_PER_SEC)) {
---- a/include/linux/moduleparam.h
-+++ b/include/linux/moduleparam.h
-@@ -62,6 +62,15 @@ struct kparam_array
- 	void *elem;
- };
- 
-+/* On some platforms relocations to global data cannot go into read-only
-+   sections, so 'const' makes no sense and even causes compile failures
-+   with some compilers. */
-+#if defined(CONFIG_ALPHA) || defined(CONFIG_IA64) || defined(CONFIG_PPC64)
-+#define __moduleparam_const
-+#else
-+#define __moduleparam_const const
-+#endif
-+
- /* This is the fundamental function for registering boot/module
-    parameters.  perm sets the visibility in sysfs: 000 means it's
-    not there, read bits mean it's readable, write bits mean it's
-@@ -71,7 +80,7 @@ struct kparam_array
- 	static int __param_perm_check_##name __attribute__((unused)) =	\
- 	BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2));	\
- 	static const char __param_str_##name[] = prefix #name;		\
--	static struct kernel_param const __param_##name			\
-+	static struct kernel_param __moduleparam_const __param_##name	\
- 	__attribute_used__						\
-     __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \
- 	= { __param_str_##name, perm, set, get, { arg } }
---- linux-2.6.24.noarch.orig/include/linux/module.h
-+++ linux-2.6.24.noarch/include/linux/module.h
+--- a/include/linux/module.h
++++ b/include/linux/module.h
 @@ -30,6 +30,15 @@
  
  #define MODULE_NAME_LEN (64 - sizeof(unsigned long))
  
 +/* On some platforms relocations to global data cannot go into read-only
-+   sections, so 'const' makes no sense and even causes compile failures
-+   with some compilers. */
++ * sections, so 'const' makes no sense and even causes compile failures
++ * with some compilers. */
 +#if defined(CONFIG_ALPHA) || defined(CONFIG_IA64) || defined(CONFIG_PPC64)
 +#define __ksym_const
 +#else
@@ -54,12 +27,12 @@
  struct kernel_symbol
  {
  	unsigned long value;
-@@ -192,7 +201,7 @@ void *__symbol_get_gpl(const char *symbo
+@@ -192,7 +201,7 @@ void *__symbol_get_gpl(const char *symbol);
  	static const char __kstrtab_##sym[]			\
  	__attribute__((section("__ksymtab_strings")))		\
  	= MODULE_SYMBOL_PREFIX #sym;                    	\
 -	static const struct kernel_symbol __ksymtab_##sym	\
 +	static __ksym_const struct kernel_symbol __ksymtab_##sym	\
- 	__attribute_used__					\
+ 	__used							\
  	__attribute__((section("__ksymtab" sec), unused))	\
  	= { (unsigned long)&sym, __kstrtab_##sym }

linux-2.6-crash-driver.patch:

Index: linux-2.6-crash-driver.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-crash-driver.patch,v
retrieving revision 1.2.8.1
retrieving revision 1.2.8.2
diff -u -r1.2.8.1 -r1.2.8.2
--- linux-2.6-crash-driver.patch	18 Feb 2008 16:55:17 -0000	1.2.8.1
+++ linux-2.6-crash-driver.patch	29 Feb 2008 18:58:22 -0000	1.2.8.2
@@ -1,15 +1,3 @@
-diff -urNp --exclude-from=/home/davej/.exclude linux-1050/arch/i386/mm/init.c linux-1060/arch/i386/mm/init.c
---- linux-1050/arch/x86/mm/init_32.c
-+++ linux-1060/arch/x86/mm/init_32.c
-@@ -248,6 +248,8 @@ int devmem_is_allowed(unsigned long page
-    return 0;
- }
- 
-+EXPORT_SYMBOL_GPL(page_is_ram);
-+
- #ifdef CONFIG_HIGHMEM
- pte_t *kmap_pte;
- pgprot_t kmap_prot;
 diff -urNp --exclude-from=/home/davej/.exclude linux-1050/arch/ia64/kernel/ia64_ksyms.c linux-1060/arch/ia64/kernel/ia64_ksyms.c
 --- linux-1050/arch/ia64/kernel/ia64_ksyms.c
 +++ linux-1060/arch/ia64/kernel/ia64_ksyms.c
@@ -23,24 +11,6 @@
  #ifdef ASM_SUPPORTED
  # ifdef CONFIG_SMP
  #  if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
-diff -urNp --exclude-from=/home/davej/.exclude linux-1050/arch/x86_64/mm/init.c linux-1060/arch/x86_64/mm/init.c
---- linux-1050/arch/x86/mm/init_64.c
-+++ linux-1060/arch/x86/mm/init_64.c
-@@ -6,5 +6,6 @@
-  */
- 
-+#include <linux/module.h>
- #include <linux/signal.h>
- #include <linux/sched.h>
- #include <linux/kernel.h>
-@@ -452,6 +452,7 @@ static inline int page_is_ram (unsigned 
- 	}
- 	return 0;
- }
-+EXPORT_SYMBOL_GPL(page_is_ram);
- 
- /*
-  * Memory hotplug specific functions
 diff -urNp --exclude-from=/home/davej/.exclude linux-1050/drivers/char/crash.c linux-1060/drivers/char/crash.c
 --- linux-1050/drivers/char/crash.c
 +++ linux-1060/drivers/char/crash.c
@@ -369,3 +339,15 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _ASM_IA64_CRASH_H */
+diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
+index c004d94..13417a2 100644
+--- a/arch/x86/mm/ioremap.c
++++ b/arch/x86/mm/ioremap.c
+@@ -65,6 +65,7 @@ int page_is_ram(unsigned long pagenr)
+ 	}
+ 	return 0;
+ }
++EXPORT_SYMBOL_GPL(page_is_ram);
+ 
+ /*
+  * Fix up the linear direct mapping of the kernel to avoid cache attribute

linux-2.6-debug-no-quiet.patch:

Index: linux-2.6-debug-no-quiet.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-debug-no-quiet.patch,v
retrieving revision 1.2
retrieving revision 1.2.8.1
diff -u -r1.2 -r1.2.8.1
--- linux-2.6-debug-no-quiet.patch	24 Jul 2007 14:13:44 -0000	1.2
+++ linux-2.6-debug-no-quiet.patch	29 Feb 2008 18:58:22 -0000	1.2.8.1
@@ -1,21 +1,24 @@
 diff --git a/init/main.c b/init/main.c
-index a92989e..f4dee52 100644
+index 8b19820..c27d2a0 100644
 --- a/init/main.c
 +++ b/init/main.c
-@@ -236,7 +236,11 @@ static int __init quiet_kernel(char *str)
+@@ -244,8 +244,12 @@ static int __init debug_kernel(char *str)
+ 
+ static int __init quiet_kernel(char *str)
  {
- 	if (*str)
- 		return 0;
 +#ifdef CONFIG_DEBUG_IGNORE_QUIET
 +	console_loglevel = 10;
 +#else
  	console_loglevel = 4;
 +#endif
- 	return 1;
+ 	return 0;
  }
  
---- linux-2.6.21.noarch/lib/Kconfig.debug~	2007-05-28 02:18:07.000000000 -0400
-+++ linux-2.6.21.noarch/lib/Kconfig.debug	2007-05-28 02:18:43.000000000 -0400
+ early_param("debug", debug_kernel);
+diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
+index a370fe8..aee5495 100644
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
 @@ -1,3 +1,8 @@
 +config DEBUG_IGNORE_QUIET
 +	bool "Ignore 'quiet' boot argument"

linux-2.6-debug-sizeof-structs.patch:

Index: linux-2.6-debug-sizeof-structs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-debug-sizeof-structs.patch,v
retrieving revision 1.2
retrieving revision 1.2.8.1
diff -u -r1.2 -r1.2.8.1
--- linux-2.6-debug-sizeof-structs.patch	24 Jul 2007 14:13:44 -0000	1.2
+++ linux-2.6-debug-sizeof-structs.patch	29 Feb 2008 18:58:22 -0000	1.2.8.1
@@ -2,7 +2,7 @@
 +++ linux-2.6/init/main.c	2006-07-11 02:49:01.000000000 -0400
 @@ -350,6 +350,10 @@ static void __init setup_per_cpu_areas(v
  }
- #endif /* !__GENERIC_PER_CPU */
+ #endif /* CONFIG_HAVE_SETUP_PER_CPU_AREA */
  
 +#include <linux/ext3_fs_i.h>
 +#include <linux/skbuff.h>
@@ -16,7 +16,7 @@
 @@ -403,6 +403,15 @@ static void __init smp_init(void)
  	/* Any cleanup work */
  	printk(KERN_INFO "Brought up %ld CPUs\n", (long)num_online_cpus());
- 	smp_cpus_done(max_cpus);
+ 	smp_cpus_done(setup_max_cpus);
 +
 +	printk(KERN_DEBUG "sizeof(vma)=%u bytes\n", (unsigned int) sizeof(struct vm_area_struct));
 +	printk(KERN_DEBUG "sizeof(page)=%u bytes\n", (unsigned int) sizeof(struct page));

linux-2.6-debug-taint-vm.patch:

Index: linux-2.6-debug-taint-vm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-debug-taint-vm.patch,v
retrieving revision 1.3.8.1
retrieving revision 1.3.8.2
diff -u -r1.3.8.1 -r1.3.8.2
--- linux-2.6-debug-taint-vm.patch	18 Feb 2008 16:55:17 -0000	1.3.8.1
+++ linux-2.6-debug-taint-vm.patch	29 Feb 2008 18:58:22 -0000	1.3.8.2
@@ -1,63 +1,3 @@
-diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
-index d56fedb..e35833a 100644
---- a/include/asm-generic/bug.h
-+++ b/include/asm-generic/bug.h
-@@ -3,6 +3,10 @@
- 
- #include <linux/compiler.h>
- 
-+#ifndef __ASSEMBLY__
-+extern const char *print_tainted(void);
-+#endif
-+
- #ifdef CONFIG_BUG
- 
- #ifdef CONFIG_GENERIC_BUG
-@@ -22,7 +26,8 @@ struct bug_entry {
- 
- #ifndef HAVE_ARCH_BUG
- #define BUG() do { \
--	printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \
-+	printk(KERN_ERR "BUG: failure at %s:%d/%s()! (%s)\n",	\
-+		__FILE__, __LINE__, __FUNCTION__, print_tainted()); \
- 	panic("BUG!"); \
- } while (0)
- #endif
-@@ -32,13 +37,13 @@ struct bug_entry {
- #endif
- 
- #ifndef HAVE_ARCH_WARN_ON
-+#ifndef __ASSEMBLY__
-+void out_of_line_warnon(char *file, unsigned int line, const char *func);
-+#endif
- #define WARN_ON(condition) ({						\
- 	int __ret_warn_on = !!(condition);				\
--	if (unlikely(__ret_warn_on)) {					\
--		printk("WARNING: at %s:%d %s()\n", __FILE__,		\
--			__LINE__, __FUNCTION__);			\
--		dump_stack();						\
--	}								\
-+	if (unlikely(__ret_warn_on))					\
-+		out_of_line_warnon(__FILE__, __LINE__, __FUNCTION__);	\
- 	unlikely(__ret_warn_on);					\
- })
- #endif
-diff --git a/init/main.c b/init/main.c
-index 80b04b6..b1fad76 100644
---- a/init/main.c
-+++ b/init/main.c
-@@ -855,3 +855,11 @@ static int __init kernel_init(void * unused)
- 	init_post();
- 	return 0;
- }
-+
-+void out_of_line_warnon(char *file, unsigned int line, const char *func)
-+{
-+	printk(KERN_ERR "WARNING: at %s:%d %s() (%s)\n",
-+		file, line, func, print_tainted());
-+	dump_stack();
-+}
-+EXPORT_SYMBOL(out_of_line_warnon);
 diff --git a/kernel/panic.c b/kernel/panic.c
 index 6f6e03e..198fc58 100644
 --- a/kernel/panic.c
@@ -128,3 +68,18 @@
  	printk(KERN_ERR "----------------------------------------"
  			"-------------------------------------\n\n");
  }
+diff --git a/kernel/panic.c b/kernel/panic.c
+index d9e90cf..570b1f6 100644
+--- a/kernel/panic.c
++++ b/kernel/panic.c
+@@ -306,8 +306,8 @@ void warn_on_slowpath(const char *file, int line)
+ 	sprint_symbol(function, caller);
+ 
+ 	printk(KERN_WARNING "------------[ cut here ]------------\n");
+-	printk(KERN_WARNING "WARNING: at %s:%d %s()\n", file,
+-		line, function);
++	printk(KERN_WARNING "WARNING: at %s:%d %s() (%s)\n", file,
++		line, function, print_tainted());
+ 	print_modules();
+ 	dump_stack();
+ 	print_oops_end_marker();

linux-2.6-devmem.patch:

Index: linux-2.6-devmem.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-devmem.patch,v
retrieving revision 1.3.8.1
retrieving revision 1.3.8.2
diff -u -r1.3.8.1 -r1.3.8.2
--- linux-2.6-devmem.patch	18 Feb 2008 16:55:17 -0000	1.3.8.1
+++ linux-2.6-devmem.patch	29 Feb 2008 18:58:22 -0000	1.3.8.2
@@ -1,582 +1,119 @@
+From: Arjan van de Ven <arjan at linux.intel.com>
+Subject: [PATCH] make /dev/kmem a config option
 
-Restrict the abilities of /dev/mem and /dev/kmem
-Make them read-only, and also restrict which areas of
-memory can be read.
+This patch makes /dev/kmem a config option; /dev/kmem is VERY rarely
+used, and when used, it's generally for no good (rootkits tend to be
+the most common users). With this config option, users have the
+choice to disable /dev/kmem, saving some size as well.
 
-Original by Arjan van de Ven
-Signed-off-by: Dave Jones <davej at redhat.com>
+A patch to disable /dev/kmem has been in the Fedora and RHEL kernels for
+4+ years now without any known problems or legit users of /dev/kmem.
 
-Index: linux-2.6/arch/i386/mm/init.c
-===================================================================
---- linux-2.6.orig/arch/x86/mm/init_32.c
-+++ linux-2.6/arch/x86/mm/init_32.c
-@@ -233,6 +233,25 @@ int page_is_ram(unsigned long pagenr)
- 	return 0;
- }
- 
-+/*
-+ * devmem_is_allowed() checks to see if /dev/mem access to a certain address is
-+ * valid. The argument is a physical page number.
-+ *
-+ *
-+ * On x86, access has to be given to the first megabyte of ram because that area
-+ * contains bios code and data regions used by X and dosemu and similar apps.
-+ * Access has to be given to non-kernel-ram areas as well, these contain the PCI
-+ * mmio resources as well as potential bios/acpi data regions.
-+ */
-+int devmem_is_allowed(unsigned long pagenr)
-+{
-+	if (pagenr <= 256)
-+		return 1;
-+	if (!page_is_ram(pagenr))
-+		return 1;
-+	return 0;
-+}
-+
- #ifdef CONFIG_HIGHMEM
- pte_t *kmap_pte;
- pgprot_t kmap_prot;
-Index: linux-2.6/arch/ia64/mm/init.c
-===================================================================
---- linux-2.6.orig/arch/ia64/mm/init.c
-+++ linux-2.6/arch/ia64/mm/init.c
-@@ -263,6 +263,12 @@ free_initrd_mem (unsigned long start, un
- 	}
- }
- 
-+int page_is_ram(unsigned long pagenr)
-+{
-+      //FIXME: implement w/efi walk
-+      return 1;
-+}
-+
- /*
-  * This installs a clean page in the kernel's page table.
-  */
-Index: linux-2.6/arch/powerpc/mm/mem.c
-===================================================================
---- linux-2.6.orig/arch/powerpc/mm/mem.c
-+++ linux-2.6/arch/powerpc/mm/mem.c
-@@ -45,6 +45,7 @@
- #include <asm/prom.h>
- #include <asm/lmb.h>
- #include <asm/sections.h>
-+#include <asm/rtas.h>
- #include <asm/vdso.h>
- 
- #include "mmu_decl.h"
-@@ -343,6 +344,19 @@ void __init mem_init(void)
- 	max_mapnr = max_pfn;
- 	totalram_pages += free_all_bootmem();
- #endif
-+
-+#ifdef CONFIG_PPC_PSERIES
-+	/* Mark the RTAS pages as PG_reserved so userspace can mmap them */
-+	if (rtas_rmo_buf) {
-+		unsigned long pfn, start_pfn, end_pfn;
-+
-+		start_pfn = rtas_rmo_buf >> PAGE_SHIFT;
-+		end_pfn = (rtas_rmo_buf + RTAS_RMOBUF_MAX) >>  PAGE_SHIFT;
-+		for (pfn = start_pfn; pfn < end_pfn; pfn++)
-+			SetPageReserved(pfn_to_page(pfn));
-+	}
-+#endif
-+
- 	for_each_online_pgdat(pgdat) {
- 		for (i = 0; i < pgdat->node_spanned_pages; i++) {
- 			if (!pfn_valid(pgdat->node_start_pfn + i))
---- linux-2.6.21.noarch/arch/s390/mm/init.c~	2007-05-27 23:04:09.000000000 -0400
-+++ linux-2.6.21.noarch/arch/s390/mm/init.c	2007-05-27 23:04:20.000000000 -0400
-@@ -156,6 +156,11 @@ void __init paging_init(void)
- 	free_area_init_nodes(max_zone_pfns);
- }
- 
-+int page_is_ram(unsigned long pagenr)
-+{
-+	return pagenr < max_mapnr;
-+}
-+
- void __init mem_init(void)
- {
- 	unsigned long codesize, reservedpages, datasize, initsize;
-Index: linux-2.6/arch/x86_64/mm/init.c
-===================================================================
---- linux-2.6.orig/arch/x86/mm/init_64.c
-+++ linux-2.6/arch/x86/mm/init_64.c
-@@ -452,6 +452,28 @@ void __init clear_kernel_mapping(unsigne
- 	__flush_tlb_all();
- } 
- 
-+static int page_is_ram(unsigned long pagenr)
-+{
-+	int i;
-+
-+	for (i = 0; i < e820.nr_map; i++) {
-+		unsigned long addr, end;
-+
-+		if (e820.map[i].type != E820_RAM)	/* not usable memory */
-+			continue;
-+		/*
-+		 * !!!FIXME!!! Some BIOSen report areas as RAM that
-+		 * are not. Notably the 640->1Mb area. We need a sanity
-+		 * check here.
-+		 */
-+		addr = (e820.map[i].addr+PAGE_SIZE-1) >> PAGE_SHIFT;
-+		end = (e820.map[i].addr+e820.map[i].size) >> PAGE_SHIFT;
-+		if  ((pagenr >= addr) && (pagenr < end))
-+			return 1;
-+	}
-+	return 0;
-+}
-+
- /*
-  * Memory hotplug specific functions
-  */
-@@ -534,6 +556,26 @@ int __add_pages(struct zone *z, unsigned
- }
- #endif
- 
-+/*
-+ * devmem_is_allowed() checks to see if /dev/mem access to a certain address is
-+ * valid. The argument is a physical page number.
-+ *
-+ *
-+ * On x86-64, access has to be given to the first 1MB of ram because that area
-+ * contains bios code and data regions used by X and dosemu and similar apps.
-+ * Access has to be given to non-kernel-ram areas as well, these contain the
-+ * PCI MMIO resources as well as potential bios/acpi data regions.
-+ */
-+int devmem_is_allowed(unsigned long pagenr)
-+{
-+	if (pagenr <= 256)
-+		return 1;
-+	if (!page_is_ram(pagenr))
-+		return 1;
-+	return 0;
-+}
-+
-+
- static struct kcore_list kcore_mem, kcore_vmalloc, kcore_kernel, kcore_modules,
- 			 kcore_vsyscall;
- 
-Index: linux-2.6/fs/proc/kcore.c
-===================================================================
---- linux-2.6.orig/fs/proc/kcore.c
-+++ linux-2.6/fs/proc/kcore.c
-@@ -25,7 +25,7 @@
- 
- static int open_kcore(struct inode * inode, struct file * filp)
- {
--	return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
-+	return -EPERM;
- }
- 
- static ssize_t read_kcore(struct file *, char __user *, size_t, loff_t *);
-Index: linux-2.6/include/asm-alpha/page.h
-===================================================================
---- linux-2.6.orig/include/asm-alpha/page.h
-+++ linux-2.6/include/asm-alpha/page.h
-@@ -93,6 +93,8 @@ typedef unsigned long pgprot_t;
- #define VM_DATA_DEFAULT_FLAGS		(VM_READ | VM_WRITE | VM_EXEC | \
- 					 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
- 
-+#define devmem_is_allowed(x) 1
-+
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-Index: linux-2.6/include/asm-arm/page.h
-===================================================================
---- linux-2.6.orig/include/asm-arm/page.h
-+++ linux-2.6/include/asm-arm/page.h
-@@ -192,6 +192,8 @@ typedef unsigned long pgprot_t;
- 
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif
-Index: linux-2.6/include/asm-cris/page.h
-===================================================================
---- linux-2.6.orig/include/asm-cris/page.h
-+++ linux-2.6/include/asm-cris/page.h
-@@ -76,6 +76,8 @@ typedef struct { unsigned long pgprot; }
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif /* _CRIS_PAGE_H */
-Index: linux-2.6/include/asm-h8300/page.h
-===================================================================
---- linux-2.6.orig/include/asm-h8300/page.h
-+++ linux-2.6/include/asm-h8300/page.h
-@@ -78,6 +78,8 @@ extern unsigned long memory_end;
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif /* _H8300_PAGE_H */
-Index: linux-2.6/include/asm-i386/page.h
-===================================================================
---- linux-2.6.orig/include/asm-x86/page_32.h
-+++ linux-2.6/include/asm-x86/page_32.h
-@@ -108,6 +108,8 @@ extern int sysctl_legacy_va_layout;
- 
- extern int page_is_ram(unsigned long pagenr);
- 
-+extern int devmem_is_allowed(unsigned long pagenr);
-+
- #endif /* __ASSEMBLY__ */
- 
- #ifdef __ASSEMBLY__
-Index: linux-2.6/include/asm-ia64/page.h
-===================================================================
---- linux-2.6.orig/include/asm-ia64/page.h
-+++ linux-2.6/include/asm-ia64/page.h
-@@ -227,5 +227,6 @@ get_order (unsigned long size)
- 					 (((current->personality & READ_IMPLIES_EXEC) != 0)	\
- 					  ? VM_EXEC : 0))
- 
-+#define devmem_is_allowed(x) 1
- # endif /* __KERNEL__ */
- #endif /* _ASM_IA64_PAGE_H */
-Index: linux-2.6/include/asm-m68k/page.h
-===================================================================
---- linux-2.6.orig/include/asm-m68k/page.h
-+++ linux-2.6/include/asm-m68k/page.h
-@@ -177,6 +177,8 @@ static inline void *__va(unsigned long x
- 
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif /* _M68K_PAGE_H */
-Index: linux-2.6/include/asm-m68knommu/page.h
-===================================================================
---- linux-2.6.orig/include/asm-m68knommu/page.h
-+++ linux-2.6/include/asm-m68knommu/page.h
-@@ -77,6 +77,8 @@ extern unsigned long memory_end;
- 
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif /* _M68KNOMMU_PAGE_H */
-Index: linux-2.6/include/asm-mips/page.h
-===================================================================
---- linux-2.6.orig/include/asm-mips/page.h
-+++ linux-2.6/include/asm-mips/page.h
-@@ -178,4 +178,6 @@ typedef struct { unsigned long pgprot; }
- 
- #endif /* defined (__KERNEL__) */
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* _ASM_PAGE_H */
-Index: linux-2.6/include/asm-parisc/page.h
-===================================================================
---- linux-2.6.orig/include/asm-parisc/page.h
-+++ linux-2.6/include/asm-parisc/page.h
-@@ -169,6 +169,8 @@ extern int npmem_ranges;
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif /* _PARISC_PAGE_H */
-Index: linux-2.6/include/asm-ppc/page.h
-===================================================================
---- linux-2.6.orig/include/asm-ppc/page.h
-+++ linux-2.6/include/asm-ppc/page.h
-@@ -173,6 +173,8 @@ extern __inline__ int get_order(unsigned
- /* We do define AT_SYSINFO_EHDR but don't use the gate mechanism */
- #define __HAVE_ARCH_GATE_AREA		1
- 
-+#define devmem_is_allowed(x) 1
-+
- #include <asm-generic/memory_model.h>
- #endif /* __KERNEL__ */
- #endif /* _PPC_PAGE_H */
-Index: linux-2.6/include/asm-powerpc/page.h
-===================================================================
---- linux-2.6.orig/include/asm-powerpc/page.h
-+++ linux-2.6/include/asm-powerpc/page.h
-@@ -191,6 +191,8 @@ extern const char *arch_vma_name(struct 
- #include <asm-generic/memory_model.h>
- #endif /* __ASSEMBLY__ */
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif /* _ASM_POWERPC_PAGE_H */
-Index: linux-2.6/include/asm-s390/page.h
-===================================================================
---- linux-2.6.orig/include/asm-s390/page.h
-+++ linux-2.6/include/asm-s390/page.h
-@@ -148,6 +148,8 @@ page_get_storage_key(unsigned long addr)
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif /* _S390_PAGE_H */
---- linux-2.6.22.noarch/include/asm-sh/page.h~	2007-07-20 14:22:49.000000000 -0400
-+++ linux-2.6.22.noarch/include/asm-sh/page.h	2007-07-20 14:22:54.000000000 -0400
-@@ -158,5 +158,7 @@ typedef struct { unsigned long pgd; } pg
- #define ARCH_KMALLOC_MINALIGN	4
- #define ARCH_SLAB_MINALIGN	4
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- #endif /* __ASM_SH_PAGE_H */
-Index: linux-2.6/include/asm-sh64/page.h
-===================================================================
---- linux-2.6.orig/include/asm-sh64/page.h
-+++ linux-2.6/include/asm-sh64/page.h
-@@ -115,5 +115,7 @@ typedef struct { unsigned long pgprot; }
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- #endif /* __ASM_SH64_PAGE_H */
-Index: linux-2.6/include/asm-sparc/page.h
-===================================================================
---- linux-2.6.orig/include/asm-sparc/page.h
-+++ linux-2.6/include/asm-sparc/page.h
-@@ -163,6 +163,8 @@ extern unsigned long pfn_base;
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #endif /* _SPARC_PAGE_H */
-Index: linux-2.6/include/asm-sparc64/page.h
-===================================================================
---- linux-2.6.orig/include/asm-sparc64/page.h
-+++ linux-2.6/include/asm-sparc64/page.h
-@@ -141,6 +141,8 @@ typedef unsigned long pgprot_t;
- #define VM_DATA_DEFAULT_FLAGS	(VM_READ | VM_WRITE | VM_EXEC | \
- 				 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
- 
-+#define devmem_is_allowed(x) 1
-+
- #include <asm-generic/page.h>
- 
- #endif /* __KERNEL__ */
---- linux-2.6.21.noarch/include/asm-um/page.h~	2007-05-27 23:05:22.000000000 -0400
-+++ linux-2.6.21.noarch/include/asm-um/page.h	2007-05-27 23:05:34.000000000 -0400
-@@ -114,6 +114,8 @@ extern unsigned long uml_physmem;
- extern struct page *arch_validate(struct page *page, gfp_t mask, int order);
- #define HAVE_ARCH_VALIDATE
- 
-+#define devmem_is_allowed(x) 1
-+
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-Index: linux-2.6/include/asm-v850/page.h
-===================================================================
---- linux-2.6.orig/include/asm-v850/page.h
-+++ linux-2.6/include/asm-v850/page.h
-@@ -126,6 +126,8 @@ typedef unsigned long pgprot_t;
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* KERNEL */
- 
- #endif /* __V850_PAGE_H__ */
-Index: linux-2.6/include/asm-x86_64/page.h
+Signed-off-by: Arjan van de Ven <arjan at linux.intel.com>
+---
+ drivers/char/Kconfig |    8 ++++++++
+ drivers/char/mem.c   |   10 ++++++++++
+ 2 files changed, 18 insertions(+)
+
+Index: linux.trees.git/drivers/char/Kconfig
 ===================================================================
---- linux-2.6.orig/include/asm-x86/page_64.h
-+++ linux-2.6/include/asm-x86/page_64.h
-@@ -138,6 +138,10 @@ typedef struct { unsigned long pgprot; }
- #include <asm-generic/memory_model.h>
- #include <asm-generic/page.h>
- 
-+#ifndef __ASSEMBLY__
-+extern int devmem_is_allowed(unsigned long pagenr);
-+#endif
-+
- #endif /* __KERNEL__ */
+--- linux.trees.git.orig/drivers/char/Kconfig
++++ linux.trees.git/drivers/char/Kconfig
+@@ -80,6 +80,14 @@ config VT_HW_CONSOLE_BINDING
+ 	 information. For framebuffer console users, please refer to
+ 	 <file:Documentation/fb/fbcon.txt>.
  
- #endif /* _X86_64_PAGE_H */
---- linux-2.6.20.noarch/fs/proc/kcore.c.orig	2007-06-04 15:44:29.000000000 -0400
-+++ linux-2.6.20.noarch/fs/proc/kcore.c	2007-06-04 15:48:57.000000000 -0400
-@@ -23,10 +23,10 @@
- #include <asm/io.h>
- 
- #define CORE_STR "CORE"
--
-+unsigned int allow_kcore_access;
- static int open_kcore(struct inode * inode, struct file * filp)
- {
--	return -EPERM;
-+	return (capable(CAP_SYS_RAWIO) && allow_kcore_access) ? 0 : -EPERM;
- }
- 
- static ssize_t read_kcore(struct file *, char __user *, size_t, loff_t *);
---- linux-2.6.23.noarch/arch/x86/kernel/setup_32.c~	2007-10-22 01:29:17.000000000 -0400
-+++ linux-2.6.23.noarch/arch/x86/kernel/setup_32.c	2007-10-22 01:29:41.000000000 -0400
-@@ -391,12 +391,16 @@ static inline unsigned long long get_tot
- }
- 
- #ifdef CONFIG_KEXEC
-+extern int allow_kcore_access;
-+
- static void __init reserve_crashkernel(void)
- {
- 	unsigned long long total_mem;
- 	unsigned long long crash_size, crash_base;
- 	int ret;
- 
-+	allow_kcore_access = 1;	/*enable ability to read /proc/kcore*/
-+
- 	total_mem = get_total_mem();
- 
- 	ret = parse_crashkernel(boot_command_line, total_mem,
---- linux-2.6.23.noarch/drivers/char/Kconfig~	2007-11-15 14:10:18.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/char/Kconfig	2007-11-15 14:10:40.000000000 -0500
-@@ -1062,6 +1062,20 @@ config DEVPORT
- 	depends on ISA || PCI
- 	default y
- 
-+config WRITABLE_DEVMEM
-+	bool "Allow writing to /dev/mem"
++config DEVKMEM
++	bool "/dev/kmem virtual device support"
 +	help
-+	  Very little software actually requires a writable /dev/mem
-+	  Disabling this feature will close off a potential attack
-+	  vector for kernel rootkits.
-+
-+config WRITABLE_DEVKMEM
-+	bool "Allow writing to /dev/kmem"
-+	help
-+	  Very little software actually requires a writable /dev/kmem
-+	  Disabling this feature will close off a potential attack
-+	  vector for kernel rootkits.
-+
- source "drivers/s390/char/Kconfig"
- 
- endmenu
---- vanilla/drivers/char/mem.c	2007-11-15 14:15:27.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/char/mem.c	2007-11-15 14:13:54.000000000 -0500
-@@ -108,6 +108,23 @@ static inline int valid_mmap_phys_addr_r
- }
- #endif
- 
-+static inline int range_is_allowed(unsigned long from, unsigned long to)
-+{
-+	unsigned long cursor;
-+
-+	cursor = from >> PAGE_SHIFT;
-+	while ((cursor << PAGE_SHIFT) < to) {
-+		if (!devmem_is_allowed(cursor)) {
-+			printk(KERN_INFO "Program %s tried to read /dev/mem "
-+				"between %lx->%lx.\n",
-+				current->comm, from, to);
-+			return 0;
-+		}
-+		cursor++;
-+	}
-+	return 1;
-+}
-+
- /*
-  * This funcion reads the *physical* memory. The f_pos points directly to the 
-  * memory location. 
-@@ -157,6 +174,9 @@ static ssize_t read_mem(struct file * fi
- 		 */
- 		ptr = xlate_dev_mem_ptr(p);
- 
-+		//FIXME: Add write-once sysctl
-+		//if (!range_is_allowed(p, p+count))
-+		//	return -EPERM;
- 		if (copy_to_user(buf, ptr, sz))
- 			return -EFAULT;
- 		buf += sz;
-@@ -169,6 +189,7 @@ static ssize_t read_mem(struct file * fi
- 	return read;
++	  Say Y here if you want to support the /dev/kmem device. The
++	  /dev/kmem device is rarely used, but can be used for certain
++	  kind of kernel debugging operations.
++	  When in doubt, say "N".
++
+ config SERIAL_NONSTANDARD
+ 	bool "Non-standard serial port support"
+ 	depends on HAS_IOMEM
+Index: linux.trees.git/drivers/char/mem.c
+===================================================================
+--- linux.trees.git.orig/drivers/char/mem.c
++++ linux.trees.git/drivers/char/mem.c
+@@ -295,6 +295,7 @@ static int mmap_mem(struct file * file, 
+ 	return 0;
  }
  
-+#ifdef CONFIG_WRITABLE_DEVMEM
- static ssize_t write_mem(struct file * file, const char __user * buf, 
- 			 size_t count, loff_t *ppos)
++#ifdef CONFIG_DEVKMEM
+ static int mmap_kmem(struct file * file, struct vm_area_struct * vma)
  {
-@@ -214,6 +235,8 @@ static ssize_t write_mem(struct file * f
- 		 */
- 		ptr = xlate_dev_mem_ptr(p);
- 
-+		if (!range_is_allowed(ptr, ptr+sz))
-+			return -EPERM;
- 		copied = copy_from_user(ptr, buf, sz);
- 		if (copied) {
- 			written += sz - copied;
-@@ -230,6 +253,9 @@ static ssize_t write_mem(struct file * f
- 	*ppos += written;
- 	return written;
+ 	unsigned long pfn;
+@@ -315,6 +316,7 @@ static int mmap_kmem(struct file * file,
+ 	vma->vm_pgoff = pfn;
+ 	return mmap_mem(file, vma);
  }
-+#else
-+#define write_mem 0
 +#endif
  
- #ifndef __HAVE_PHYS_MEM_ACCESS_PROT
- static pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
-@@ -363,6 +389,9 @@ static ssize_t read_kmem(struct file *fi
- 	ssize_t low_count, read, sz;
- 	char * kbuf; /* k-addr because vread() takes vmlist_lock rwlock */
- 
-+	//FIXME: Add write-once sysctl
-+	//return -EPERM;
-+
- 	read = 0;
- 	if (p < (unsigned long) high_memory) {
- 		low_count = count;
-@@ -439,6 +468,7 @@ static ssize_t read_kmem(struct file *fi
- }
- 
+ #ifdef CONFIG_CRASH_DUMP
+ /*
+@@ -353,6 +355,7 @@ static ssize_t read_oldmem(struct file *
+ extern long vread(char *buf, char *addr, unsigned long count);
+ extern long vwrite(char *buf, char *addr, unsigned long count);
  
-+#ifdef CONFIG_WRITABLE_DEVKMEM
- static inline ssize_t
- do_write_kmem(void *p, unsigned long realp, const char __user * buf,
- 	      size_t count, loff_t *ppos)
-@@ -557,6 +587,9 @@ static ssize_t write_kmem(struct file * 
++#ifdef CONFIG_DEVKMEM
+ /*
+  * This function reads the *virtual* memory as seen by the kernel.
+  */
+@@ -557,6 +560,7 @@ static ssize_t write_kmem(struct file * 
   	*ppos = p;
   	return virtr + wrote;
  }
-+#else
-+#define write_kmem 0
 +#endif
  
  #ifdef CONFIG_DEVPORT
  static ssize_t read_port(struct file * file, char __user * buf,
-@@ -873,7 +906,6 @@ static const struct {
+@@ -734,6 +738,7 @@ static const struct file_operations mem_
+ 	.get_unmapped_area = get_unmapped_area_mem,
+ };
+ 
++#ifdef CONFIG_DEVKMEM
+ static const struct file_operations kmem_fops = {
+ 	.llseek		= memory_lseek,
+ 	.read		= read_kmem,
+@@ -742,6 +747,7 @@ static const struct file_operations kmem
+ 	.open		= open_kmem,
+ 	.get_unmapped_area = get_unmapped_area_mem,
+ };
++#endif
+ 
+ static const struct file_operations null_fops = {
+ 	.llseek		= null_lseek,
+@@ -820,11 +826,13 @@ static int memory_open(struct inode * in
+ 			filp->f_mapping->backing_dev_info =
+ 				&directly_mappable_cdev_bdi;
+ 			break;
++#ifdef CONFIG_DEVKMEM
+ 		case 2:
+ 			filp->f_op = &kmem_fops;
+ 			filp->f_mapping->backing_dev_info =
+ 				&directly_mappable_cdev_bdi;
+ 			break;
++#endif
+ 		case 3:
+ 			filp->f_op = &null_fops;
+ 			break;
+@@ -873,7 +881,9 @@ static const struct {
  	const struct file_operations	*fops;
  } devlist[] = { /* list of minor devices */
  	{1, "mem",     S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops},
--	{2, "kmem",    S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
++#ifdef CONFIG_DEVKMEM
+ 	{2, "kmem",    S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
++#endif
  	{3, "null",    S_IRUGO | S_IWUGO,           &null_fops},
  #ifdef CONFIG_DEVPORT
  	{4, "port",    S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},
+
+
+-- 
+If you want to reach me at my work email, use arjan at linux.intel.com
+For development, discussion and tips for power savings, 
+visit http://www.lesswatts.org
+

linux-2.6-e1000-corrupt-eeprom-checksum.patch:

Index: linux-2.6-e1000-corrupt-eeprom-checksum.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-e1000-corrupt-eeprom-checksum.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-e1000-corrupt-eeprom-checksum.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-e1000-corrupt-eeprom-checksum.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -1,34 +1,25 @@
-diff -up linux-2.6.23.noarch/drivers/net/e1000/e1000_main.c.jx vanilla/drivers/net/e1000/e1000_main.c
---- linux-2.6.23.noarch/drivers/net/e1000/e1000_main.c.jx	2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.noarch/drivers/net/e1000/e1000_main.c	2007-10-22 16:33:01.000000000 -0400
-@@ -255,6 +255,10 @@ static int debug = NETIF_MSG_DRV | NETIF
+diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
+index 7c5b05a..603150b 100644
+--- a/drivers/net/e1000/e1000_main.c
++++ b/drivers/net/e1000/e1000_main.c
+@@ -258,6 +258,10 @@ static int debug = NETIF_MSG_DRV | NETIF_MSG_PROBE;
  module_param(debug, int, 0);
  MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
  
 +static int eeprom_bad_csum_allow = 0;
 +module_param(eeprom_bad_csum_allow, int, 0);
-+MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad eeprom checksums");
++MODULE_PARM_DESC(eeprom_bas_csum_allow, "Allow bad eeprom checksums");
 +
  /**
   * e1000_init_module - Driver Registration Routine
   *
-@@ -1012,7 +1016,8 @@ e1000_probe(struct pci_dev *pdev,
- 
- 	if (e1000_validate_eeprom_checksum(&adapter->hw) < 0) {
- 		DPRINTK(PROBE, ERR, "The EEPROM Checksum Is Not Valid\n");
--		goto err_eeprom;
+@@ -1081,7 +1085,8 @@ e1000_probe(struct pci_dev *pdev,
+ 		 * interface after manually setting a hw addr using
+ 		 * `ip set address`
+ 		 */
+-		memset(adapter->hw.mac_addr, 0, netdev->addr_len);
 +		if (!eeprom_bad_csum_allow)
-+			goto err_eeprom;
- 	}
- 
- 	/* copy the MAC address out of the EEPROM */
-@@ -1024,7 +1029,8 @@ e1000_probe(struct pci_dev *pdev,
- 
- 	if (!is_valid_ether_addr(netdev->perm_addr)) {
- 		DPRINTK(PROBE, ERR, "Invalid MAC Address\n");
--		goto err_eeprom;
-+		if (!eeprom_bad_csum_allow)
-+			goto err_eeprom;
- 	}
- 
- 	e1000_get_bus_info(&adapter->hw);
++			memset(adapter->hw.mac_addr, 0, netdev->addr_len);
+ 	} else {
+ 		/* copy the MAC address out of the EEPROM */
+ 		if (e1000_read_mac_addr(&adapter->hw))

linux-2.6-execshield.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.3.8.1 -r 1.3.8.2 linux-2.6-execshield.patch
Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-execshield.patch,v
retrieving revision 1.3.8.1
retrieving revision 1.3.8.2
diff -u -r1.3.8.1 -r1.3.8.2
--- linux-2.6-execshield.patch	18 Feb 2008 16:55:17 -0000	1.3.8.1
+++ linux-2.6-execshield.patch	29 Feb 2008 18:58:22 -0000	1.3.8.2
@@ -1,24 +1,33 @@
-Index: linux-2.6/arch/i386/kernel/cpu/common.c
-===================================================================
---- linux-2.6.orig/arch/x86/kernel/cpu/common.c
-+++ linux-2.6/arch/x86/kernel/cpu/common.c
-@@ -437,6 +437,13 @@ void __cpuinit identify_cpu(struct cpuin
- 	if (disable_pse)
- 		clear_bit(X86_FEATURE_PSE, c->x86_capability);
+diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
+index f86a3c4..4c5f70d 100644
+--- a/arch/x86/kernel/cpu/common.c
++++ b/arch/x86/kernel/cpu/common.c
+@@ -478,6 +478,20 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
+ 	 * we do "generic changes."
+ 	 */
  
++	/*
++	 *  emulation of NX with segment limits unfortunately means
++	 *  we have to disable the fast system calls, due to the way that
++	 *  sysexit clears the segment limits on return.
++	 *  If we have either disabled exec-shield on the boot command line,
++	 *  or we have NX, then we don't need to do this.
++	 */
 +	if (exec_shield != 0) {
 +#ifdef CONFIG_X86_PAE
 +		if (!test_bit(X86_FEATURE_NX, c->x86_capability))
 +#endif
-+		clear_bit(X86_FEATURE_SEP, c->x86_capability);
++			clear_bit(X86_FEATURE_SEP, c->x86_capability);
 +	}
 +
  	/* If the model name is still unset, do table lookup. */
  	if ( !c->x86_model_id[0] ) {
  		char *p;
---- linux-2.6.21.noarch/arch/x86/kernel/process_32.c~	2007-05-27 22:27:45.000000000 -0400
-+++ linux-2.6.21.noarch/arch/x86/kernel/process_32.c	2007-05-27 22:28:22.000000000 -0400
-@@ -649,7 +649,8 @@ struct task_struct fastcall * __switch_t
+diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
+index a7d50a5..83f7b4e 100644
+--- a/arch/x86/kernel/process_32.c
++++ b/arch/x86/kernel/process_32.c
+@@ -677,7 +677,8 @@ struct task_struct * __switch_to(struct task_struct *prev_p, struct task_struct
  	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
  
  	__unlazy_fpu(prev_p);
@@ -28,24 +37,32 @@
  
  	/* we're going to use this soon, after a few expensive things */
  	if (next_p->fpu_counter > 5)
-@@ -907,3 +909,60 @@ unsigned long arch_align_stack(unsigned 
- 		sp -= get_random_int() % 8192;
- 	return sp & ~0xf;
+diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
+index a7d50a5..86e35cb 100644
+--- a/arch/x86/kernel/process_32.c
++++ b/arch/x86/kernel/process_32.c
+@@ -847,3 +847,39 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
+ 	unsigned long range_end = mm->brk + 0x02000000;
+ 	return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
  }
 +
-+void arch_add_exec_range(struct mm_struct *mm, unsigned long limit)
++static void modify_cs(struct mm_struct *mm, unsigned long limit)
 +{
-+	if (limit > mm->context.exec_limit) {
-+		mm->context.exec_limit = limit;
-+		set_user_cs(&mm->context.user_cs, limit);
-+		if (mm == current->mm) {
-+			preempt_disable();
-+			load_user_cs_desc(smp_processor_id(), mm);
-+			preempt_enable();
-+		}
++	mm->context.exec_limit = limit;
++	set_user_cs(&mm->context.user_cs, limit);
++	if (mm == current->mm) {
++		preempt_disable();
++		load_user_cs_desc(smp_processor_id(), mm);
++		preempt_enable();
 +	}
 +}
 +
++void arch_add_exec_range(struct mm_struct *mm, unsigned long limit)
++{
++	if (limit > mm->context.exec_limit)
++		modify_cs(mm, limit);
++}
++
 +void arch_remove_exec_range(struct mm_struct *mm, unsigned long old_end)
 +{
 +	struct vm_area_struct *vma;
@@ -55,14 +72,7 @@
 +		for (vma = mm->mmap; vma; vma = vma->vm_next)
 +			if ((vma->vm_flags & VM_EXEC) && (vma->vm_end > limit))
 +				limit = vma->vm_end;
-+
-+		mm->context.exec_limit = limit;
-+		set_user_cs(&mm->context.user_cs, limit);
-+		if (mm == current->mm) {
-+			preempt_disable();
-+			load_user_cs_desc(smp_processor_id(), mm);
-+			preempt_enable();
-+		}
++		modify_cs(mm, limit);
 +	}
 +}
 +
@@ -71,26 +81,61 @@
 +	mm->context.exec_limit = 0;
 +	set_user_cs(&mm->context.user_cs, 0);
 +}
-+
-+/*
-+ * Generate random brk address between 128MB and 196MB. (if the layout
-+ * allows it.)
-+ */
-+void randomize_brk(unsigned long old_brk)
-+{
-+	unsigned long new_brk, range_start, range_end;
-+
-+	range_start = 0x08000000;
-+	if (current->mm->brk >= range_start)
-+		range_start = current->mm->brk;
-+	range_end = range_start + 0x02000000;
-+	new_brk = randomize_range(range_start, range_end, 0);
-+	if (new_brk)
-+		current->mm->brk = new_brk;
-+}
-+
---- linux-2.6.22.noarch/arch/x86/kernel/smp_32.c~	2007-07-20 13:48:03.000000000 -0400
-+++ linux-2.6.22.noarch/arch/x86/kernel/smp_32.c	2007-07-20 13:48:08.000000000 -0400
+diff --git a/arch/x86/kernel/setup64.c b/arch/x86/kernel/setup64.c
+index 309366f..8a940dc 100644
+--- a/arch/x86/kernel/setup64.c
++++ b/arch/x86/kernel/setup64.c
+@@ -45,46 +45,6 @@ EXPORT_SYMBOL_GPL(__supported_pte_mask);
+ 
+ static int do_not_nx __cpuinitdata = 0;
+ 
+-/* noexec=on|off
+-Control non executable mappings for 64bit processes.
+-
+-on	Enable(default)
+-off	Disable
+-*/ 
+-static int __init nonx_setup(char *str)
+-{
+-	if (!str)
+-		return -EINVAL;
+-	if (!strncmp(str, "on", 2)) {
+-                __supported_pte_mask |= _PAGE_NX; 
+- 		do_not_nx = 0; 
+-	} else if (!strncmp(str, "off", 3)) {
+-		do_not_nx = 1;
+-		__supported_pte_mask &= ~_PAGE_NX;
+-        }
+-	return 0;
+-} 
+-early_param("noexec", nonx_setup);
+-
+-int force_personality32 = 0; 
+-
+-/* noexec32=on|off
+-Control non executable heap for 32bit processes.
+-To control the stack too use noexec=off
+-
+-on	PROT_READ does not imply PROT_EXEC for 32bit processes
+-off	PROT_READ implies PROT_EXEC (default)
+-*/
+-static int __init nonx32_setup(char *str)
+-{
+-	if (!strcmp(str, "on"))
+-		force_personality32 &= ~READ_IMPLIES_EXEC;
+-	else if (!strcmp(str, "off"))
+-		force_personality32 |= READ_IMPLIES_EXEC;
+-	return 1;
+-}
+-__setup("noexec32=", nonx32_setup);
+-
+ /*
+  * Copy data used in early init routines from the initial arrays to the
+  * per cpu data areas.  These arrays then become expendable and the
+diff --git a/arch/x86/kernel/smp_32.c b/arch/x86/kernel/smp_32.c
+index dc0cde9..cca75b4 100644
+--- a/arch/x86/kernel/smp_32.c
++++ b/arch/x86/kernel/smp_32.c
 @@ -22,6 +22,7 @@
  
  #include <asm/mtrr.h>
@@ -99,7 +144,7 @@
  #include <asm/mmu_context.h>
  #include <mach_apic.h>
  
[...1854 lines suppressed...]
--#define BAD_ADDR(x) ((unsigned long)(x) >= TASK_SIZE)
-+#define BAD_ADDR(x) IS_ERR_VALUE(x)
- 
- static int set_brk(unsigned long start, unsigned long end)
- {
-@@ -295,33 +295,70 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
- #ifndef elf_map
- 
- static unsigned long elf_map(struct file *filep, unsigned long addr,
--		struct elf_phdr *eppnt, int prot, int type)
-+		struct elf_phdr *eppnt, int prot, int type,
-+		unsigned long total_size)
- {
- 	unsigned long map_addr;
--	unsigned long pageoffset = ELF_PAGEOFFSET(eppnt->p_vaddr);
-+	unsigned long size = eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr);
-+	unsigned long off = eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr);
-+	addr = ELF_PAGESTART(addr);
-+	size = ELF_PAGEALIGN(size);
- 
--	down_write(&current->mm->mmap_sem);
- 	/* mmap() will return -EINVAL if given a zero size, but a
- 	 * segment with zero filesize is perfectly valid */
--	if (eppnt->p_filesz + pageoffset)
--		map_addr = do_mmap(filep, ELF_PAGESTART(addr),
--				   eppnt->p_filesz + pageoffset, prot, type,
--				   eppnt->p_offset - pageoffset);
--	else
--		map_addr = ELF_PAGESTART(addr);
-+	if (!size)
-+		return addr;
-+
-+	down_write(&current->mm->mmap_sem);
-+	/*
-+	* total_size is the size of the ELF (interpreter) image.
-+	* The _first_ mmap needs to know the full size, otherwise
-+	* randomization might put this image into an overlapping
-+	* position with the ELF binary image. (since size < total_size)
-+	* So we first map the 'big' image - and unmap the remainder at
-+	* the end. (which unmap is needed for ELF images with holes.)
-+	*/
-+	if (total_size) {
-+		total_size = ELF_PAGEALIGN(total_size);
-+		map_addr = do_mmap(filep, addr, total_size, prot, type, off);
-+		if (!BAD_ADDR(map_addr))
-+			do_munmap(current->mm, map_addr+size, total_size-size);
-+	} else
-+		map_addr = do_mmap(filep, addr, size, prot, type, off);
-+
- 	up_write(&current->mm->mmap_sem);
- 	return(map_addr);
- }
- 
- #endif /* !elf_map */
- 
-+static unsigned long total_mapping_size(struct elf_phdr *cmds, int nr)
-+{
-+	int i, first_idx = -1, last_idx = -1;
-+
-+	for (i = 0; i < nr; i++) {
-+		if (cmds[i].p_type == PT_LOAD) {
-+			last_idx = i;
-+			if (first_idx == -1)
-+				first_idx = i;
-+		}
-+	}
-+	if (first_idx == -1)
-+		return 0;
-+
-+	return cmds[last_idx].p_vaddr + cmds[last_idx].p_memsz -
-+				ELF_PAGESTART(cmds[first_idx].p_vaddr);
-+}
-+
-+
- /* This is much more generalized than the library routine read function,
-    so we keep this separate.  Technically the library read function
-    is only provided so that we can read a.out libraries that have
-    an ELF header */
- 
- static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
--		struct file *interpreter, unsigned long *interp_load_addr)
-+		struct file *interpreter, unsigned long *interp_map_addr,
-+		unsigned long no_base)
- {
- 	struct elf_phdr *elf_phdata;
- 	struct elf_phdr *eppnt;
-@@ -329,6 +366,7 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
- 	int load_addr_set = 0;
- 	unsigned long last_bss = 0, elf_bss = 0;
- 	unsigned long error = ~0UL;
-+	unsigned long total_size;
- 	int retval, i, size;
- 
- 	/* First of all, some simple consistency checks */
-@@ -367,6 +405,12 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
- 		goto out_close;
- 	}
- 
-+	total_size = total_mapping_size(elf_phdata, interp_elf_ex->e_phnum);
-+	if (!total_size) {
-+		error = -EINVAL;
-+		goto out_close;
-+	}
-+
- 	eppnt = elf_phdata;
- 	for (i = 0; i < interp_elf_ex->e_phnum; i++, eppnt++) {
- 		if (eppnt->p_type == PT_LOAD) {
-@@ -384,9 +428,14 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
- 			vaddr = eppnt->p_vaddr;
- 			if (interp_elf_ex->e_type == ET_EXEC || load_addr_set)
- 				elf_type |= MAP_FIXED;
-+			else if (no_base && interp_elf_ex->e_type == ET_DYN)
-+				load_addr = -vaddr;
- 
- 			map_addr = elf_map(interpreter, load_addr + vaddr,
--					   eppnt, elf_prot, elf_type);
-+					   eppnt, elf_prot, elf_type, total_size);
-+			total_size = 0;
-+			if (!*interp_map_addr)
-+				*interp_map_addr = map_addr;
- 			error = map_addr;
- 			if (BAD_ADDR(map_addr))
- 				goto out_close;
-@@ -452,8 +501,7 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
- 			goto out_close;
- 	}
- 
--	*interp_load_addr = load_addr;
--	error = ((unsigned long)interp_elf_ex->e_entry) + load_addr;
-+	error = load_addr;
- 
- out_close:
- 	kfree(elf_phdata);
-@@ -550,7 +598,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
- 	int elf_exec_fileno;
- 	int retval, i;
- 	unsigned int size;
--	unsigned long elf_entry, interp_load_addr = 0;
-+	unsigned long elf_entry;
-+	unsigned long interp_load_addr = 0;
- 	unsigned long start_code, end_code, start_data, end_data;
- 	unsigned long reloc_func_desc = 0;
- 	char passed_fileno[6];
-@@ -814,9 +863,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
- 	current->mm->start_stack = bprm->p;
- 
- 	/* Now we do a little grungy work by mmaping the ELF image into
--	   the correct location in memory.  At this point, we assume that
--	   the image should be loaded at fixed address, not at a variable
--	   address. */
-+	   the correct location in memory. */
- 	for(i = 0, elf_ppnt = elf_phdata;
- 	    i < loc->elf_ex.e_phnum; i++, elf_ppnt++) {
- 		int elf_prot = 0, elf_flags;
-@@ -870,11 +917,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
- 			 * default mmap base, as well as whatever program they
- 			 * might try to exec.  This is because the brk will
- 			 * follow the loader, and is not movable.  */
-+#ifdef CONFIG_X86
-+			load_bias = 0;
-+#else
- 			load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
-+#endif
- 		}
- 
- 		error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
--				elf_prot, elf_flags);
-+				elf_prot, elf_flags, 0);
- 		if (BAD_ADDR(error)) {
- 			send_sig(SIGKILL, current, 0);
- 			retval = IS_ERR((void *)error) ?
-@@ -950,13 +1001,25 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
- 	}
- 
- 	if (elf_interpreter) {
--		if (interpreter_type == INTERPRETER_AOUT)
-+		if (interpreter_type == INTERPRETER_AOUT) {
- 			elf_entry = load_aout_interp(&loc->interp_ex,
- 						     interpreter);
--		else
-+		} else {
-+			unsigned long uninitialized_var(interp_map_addr);
-+
- 			elf_entry = load_elf_interp(&loc->interp_elf_ex,
- 						    interpreter,
--						    &interp_load_addr);
-+						    &interp_map_addr,
-+						    load_bias);
-+			if (!BAD_ADDR(elf_entry)) {
-+				/*
-+				 * load_elf_interp() returns relocation
-+				 * adjustment
-+				 */
-+				interp_load_addr = elf_entry;
-+				elf_entry += loc->interp_elf_ex.e_entry;
-+			}
-+		}
- 		if (BAD_ADDR(elf_entry)) {
- 			force_sig(SIGSEGV, current);
- 			retval = IS_ERR((void *)elf_entry) ?

linux-2.6-ext4-stable-queue.patch:

Index: linux-2.6-ext4-stable-queue.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-ext4-stable-queue.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-ext4-stable-queue.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-ext4-stable-queue.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -1,273 +1,810 @@
-Patches from ext4 stable patch queue not yet in git.
-As of 04 Feb 2008:
-
-jbd2_journal_chksum_null_pointer_fix.patch
-jbd2_fix_ref_count_on_bh.patch
-jbd2_use_incompat_macro_to_check_JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT.patch
-ext4_do_not_set_EXTENTS_FL_for_fast_symlinks.patch
-test-filesys-flag.patch
-allow_in-inode_eas_on_ext4_root_inode
-
-===================================
-
-JBD2: Fix null pointer deference in jbd2 journal checksum code
-From: Mingming Cao <cmm at u.ibm.com>
-The buffer head pointer passed to journal_wait_on_commit_record()
-could be NULL if the previous journal_submit_commit_record() failed
-or journal has already aborted.
-
-We need to check the error returns from journal_submit_commit_record()
-and avoid calling journal_wait_on_commit_record() in the failure case.
-
-Signed-off-by: Mingming Cao <cmm at us.ibm.com>
----
- fs/jbd2/commit.c |    3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-Index: linux-2.6.24/fs/jbd2/commit.c
+Index: linux-2.6.24.noarch/fs/ext4/dir.c
 ===================================================================
---- linux-2.6.24.orig/fs/jbd2/commit.c	2008-02-04 11:02:42.000000000 -0800
-+++ linux-2.6.24/fs/jbd2/commit.c	2008-02-04 11:18:43.000000000 -0800
-@@ -865,7 +865,8 @@ wait_for_iobuf:
- 		if (err)
- 			__jbd2_journal_abort_hard(journal);
- 	}
--	err = journal_wait_on_commit_record(cbh);
-+	if (!err && !is_journal_aborted(journal))
-+		err = journal_wait_on_commit_record(cbh);
- 
- 	if (err)
- 		jbd2_journal_abort(journal, err);
-
-JBD2: Fix reference counting on buffer head.
-From: "Aneesh Kumar K.V" <aneesh.kumar at linux.vnet.ibm.com>
-
-With journal checksum patch we added asyn commit of journal commit headers.
-During the conversion we missed to take a reference on buffer head. Before
-the change sync_dirty_buffer did the get_bh(). The associative put_bh is
-done by journal_wait_on_commit_record()
-
-Signed-off-by: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
-Signed-off-by: Mingming Cao <cmm at us.ibm.com>
----
- fs/jbd2/commit.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: linux-2.6.24/fs/jbd2/commit.c
-===================================================================
---- linux-2.6.24.orig/fs/jbd2/commit.c	2008-02-04 11:02:43.000000000 -0800
-+++ linux-2.6.24/fs/jbd2/commit.c	2008-02-04 11:18:39.000000000 -0800
-@@ -136,7 +136,7 @@ static int journal_submit_commit_record(
- 
- 	JBUFFER_TRACE(descriptor, "submit commit block");
- 	lock_buffer(bh);
--
-+	get_bh(bh);
- 	set_buffer_dirty(bh);
- 	set_buffer_uptodate(bh);
- 	bh->b_end_io = journal_end_buffer_io_sync;
-
-JBD2: Use the incompat macro for testing the incompat feature.
-From: "Aneesh Kumar K.V" <aneesh.kumar at linux.vnet.ibm.com>
-
-JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT need to be checked with JBD2_HAS_INCOMPAT_FEATURE
-
-Signed-off-by: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
-Signed-off-by: Mingming Cao <cmm at us.ibm.com>
----
- fs/jbd2/commit.c   |    2 +-
- fs/jbd2/recovery.c |    2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-Index: linux-2.6.24/fs/jbd2/commit.c
+--- linux-2.6.24.noarch.orig/fs/ext4/dir.c
++++ linux-2.6.24.noarch/fs/ext4/dir.c
+@@ -46,7 +46,7 @@ const struct file_operations ext4_dir_op
+ #ifdef CONFIG_COMPAT
+ 	.compat_ioctl	= ext4_compat_ioctl,
+ #endif
+-	.fsync		= ext4_sync_file,	/* BKL held */
++	.fsync		= ext4_sync_file,
+ 	.release	= ext4_release_dir,
+ };
+ 
+Index: linux-2.6.24.noarch/fs/ext4/inode.c
 ===================================================================
---- linux-2.6.24.orig/fs/jbd2/commit.c	2008-02-04 11:10:50.000000000 -0800
-+++ linux-2.6.24/fs/jbd2/commit.c	2008-02-04 11:12:35.000000000 -0800
-@@ -142,7 +142,7 @@ static int journal_submit_commit_record(
- 	bh->b_end_io = journal_end_buffer_io_sync;
- 
- 	if (journal->j_flags & JBD2_BARRIER &&
--		!JBD2_HAS_COMPAT_FEATURE(journal,
-+		!JBD2_HAS_INCOMPAT_FEATURE(journal,
- 					 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)) {
- 		set_buffer_ordered(bh);
- 		barrier_done = 1;
-Index: linux-2.6.24/fs/jbd2/recovery.c
+--- linux-2.6.24.noarch.orig/fs/ext4/inode.c
++++ linux-2.6.24.noarch/fs/ext4/inode.c
+@@ -403,6 +403,7 @@ static ext4_fsblk_t ext4_find_near(struc
+ 	__le32 *start = ind->bh ? (__le32*) ind->bh->b_data : ei->i_data;
+ 	__le32 *p;
+ 	ext4_fsblk_t bg_start;
++	ext4_fsblk_t last_block;
+ 	ext4_grpblk_t colour;
+ 
+ 	/* Try to find previous block */
+@@ -420,8 +421,13 @@ static ext4_fsblk_t ext4_find_near(struc
+ 	 * into the same cylinder group then.
+ 	 */
+ 	bg_start = ext4_group_first_block_no(inode->i_sb, ei->i_block_group);
+-	colour = (current->pid % 16) *
++	last_block = ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es) - 1;
++
++	if (bg_start + EXT4_BLOCKS_PER_GROUP(inode->i_sb) <= last_block)
++		colour = (current->pid % 16) *
+ 			(EXT4_BLOCKS_PER_GROUP(inode->i_sb) / 16);
++	else
++		colour = (current->pid % 16) * ((last_block - bg_start) / 16);
+ 	return bg_start + colour;
+ }
+ 
+@@ -768,7 +774,6 @@ err_out:
+  *
+  * `handle' can be NULL if create == 0.
+  *
+- * The BKL may not be held on entry here.  Be sure to take it early.
+  * return > 0, # of blocks mapped or allocated.
+  * return = 0, if plain lookup failed.
+  * return < 0, error case.
+@@ -903,11 +908,34 @@ out:
+  */
+ #define DIO_CREDITS 25
+ 
++
++/*
++ * ext4 get_block() wrapper function
++ * It first do a look up, returns if the blocks already mapped. Otherwise
++ * it takes the write sem and do block allocation
++ *
++ * If file type is extents based, call with ext4_ext_get_blocks()
++ * Otherwise, call with ext4_get_blocks_handle() to handle indirect mapping
++ * based files
++ *
++ * return > 0, number of of blocks already mapped/allocated
++ *          if create==0 and these are pre-allocated blocks
++ *          	 buffer head is unmapped
++ *          otherwise blocks are mapped
++ *
++ * return = 0, if plain look up failed (blocks have not been allocated)
++ *          buffer head is unmapped
++ *
++ * return < 0, error case.
++ */
+ int ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, sector_t block,
+ 			unsigned long max_blocks, struct buffer_head *bh,
+ 			int create, int extend_disksize)
+ {
+ 	int retval;
++
++	clear_buffer_mapped(bh);
++
+ 	/*
+ 	 * Try to see if we can get  the block without requesting
+ 	 * for new file system block.
+@@ -921,12 +949,27 @@ int ext4_get_blocks_wrap(handle_t *handl
+ 				inode, block, max_blocks, bh, 0, 0);
+ 	}
+ 	up_read((&EXT4_I(inode)->i_data_sem));
+-	if (!create || (retval > 0))
++
++	/* If it is only a block(s) look up */
++	if (!create)
++		return retval;
++
++	/*
++	 * Returns if the blocks have already allocated
++	 *
++	 * Note that if blocks have been preallocated
++	 * ext4_ext_get_block() returns with buffer head unmapped.
++	 * Write to a preallocated space needs to split
++	 * the preallocated extents, thus needs to update
++	 * i_data
++	 */
++	if (retval > 0 && buffer_mapped(bh))
+ 		return retval;
+ 
+ 	/*
+-	 * We need to allocate new blocks which will result
+-	 * in i_data update
++	 * New blocks and preallocation handling will possiblely result
++	 * in i_data update, take the write sem, and call get_blocks()
++	 * with create = 1
+ 	 */
+ 	down_write((&EXT4_I(inode)->i_data_sem));
+ 	/*
+@@ -3461,3 +3504,9 @@ int ext4_change_inode_journal_flag(struc
+ 
+ 	return err;
+ }
++
++int ext4_page_mkwrite(struct vm_area_struct *vma, struct page *page)
++{
++	return block_page_mkwrite(vma, page, ext4_get_block);
++}
++
+Index: linux-2.6.24.noarch/fs/ext4/extents.c
 ===================================================================
---- linux-2.6.24.orig/fs/jbd2/recovery.c	2008-02-04 10:59:16.000000000 -0800
-+++ linux-2.6.24/fs/jbd2/recovery.c	2008-02-04 11:18:25.000000000 -0800
-@@ -641,7 +641,7 @@ static int do_one_pass(journal_t *journa
- 				if (chksum_err) {
- 					info->end_transaction = next_commit_ID;
- 
--					if (!JBD2_HAS_COMPAT_FEATURE(journal,
-+					if (!JBD2_HAS_INCOMPAT_FEATURE(journal,
- 					   JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)){
- 						printk(KERN_ERR
- 						       "JBD: Transaction %u "
-
-ext4: Don't set EXTENTS_FL flag for fast symlinks
-From: Valerie Clement <valerie.clement at bull.net>
-
-Don't set EXTENTS_FL flag for fast symlinks
-
-From: Valerie Clement <valerie.clement at bull.net>
-
-For fast symbolic links, the file content is stored in the i_block[]
-array, which is not compatible with the new file extents format.
-e2fsck reports error on such files because EXTENTS_FL is set.
-Don't set the EXTENTS_FL flag when creating fast symlinks.
-
-In the case of file migration, skip fast symbolic links.
-
-Signed-off-by: Valerie Clement <valerie.clement at bull.net>
-Signed-off-by: Mingming Cao <cmm at us.ibm.com>
-
----
-
- fs/ext4/migrate.c |    6 ++++++
- fs/ext4/namei.c   |    1 +
- 2 files changed, 7 insertions(+)
-
-Index: linux-2.6.24/fs/ext4/migrate.c
+--- linux-2.6.24.noarch.orig/fs/ext4/extents.c
++++ linux-2.6.24.noarch/fs/ext4/extents.c
+@@ -148,6 +148,7 @@ static ext4_fsblk_t ext4_ext_find_goal(s
+ {
+ 	struct ext4_inode_info *ei = EXT4_I(inode);
+ 	ext4_fsblk_t bg_start;
++	ext4_fsblk_t last_block;
+ 	ext4_grpblk_t colour;
+ 	int depth;
+ 
+@@ -169,8 +170,13 @@ static ext4_fsblk_t ext4_ext_find_goal(s
+ 	/* OK. use inode's group */
+ 	bg_start = (ei->i_block_group * EXT4_BLOCKS_PER_GROUP(inode->i_sb)) +
+ 		le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_first_data_block);
+-	colour = (current->pid % 16) *
++	last_block = ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es) - 1;
++
++	if (bg_start + EXT4_BLOCKS_PER_GROUP(inode->i_sb) <= last_block)
++		colour = (current->pid % 16) *
+ 			(EXT4_BLOCKS_PER_GROUP(inode->i_sb) / 16);
++	else
++		colour = (current->pid % 16) * ((last_block - bg_start) / 16);
+ 	return bg_start + colour + block;
+ }
+ 
+@@ -349,7 +355,7 @@ static void ext4_ext_show_leaf(struct in
+ #define ext4_ext_show_leaf(inode,path)
+ #endif
+ 
+-static void ext4_ext_drop_refs(struct ext4_ext_path *path)
++void ext4_ext_drop_refs(struct ext4_ext_path *path)
+ {
+ 	int depth = path->p_depth;
+ 	int i;
+@@ -2168,6 +2174,10 @@ static int ext4_ext_convert_to_initializ
+ 	newblock = iblock - ee_block + ext_pblock(ex);
+ 	ex2 = ex;
+ 
++	err = ext4_ext_get_access(handle, inode, path + depth);
++	if (err)
++		goto out;
++
+ 	/* ex1: ee_block to iblock - 1 : uninitialized */
+ 	if (iblock > ee_block) {
+ 		ex1 = ex;
+@@ -2200,16 +2210,20 @@ static int ext4_ext_convert_to_initializ
+ 		newdepth = ext_depth(inode);
+ 		if (newdepth != depth) {
+ 			depth = newdepth;
+-			path = ext4_ext_find_extent(inode, iblock, NULL);
++			ext4_ext_drop_refs(path);
++			path = ext4_ext_find_extent(inode, iblock, path);
+ 			if (IS_ERR(path)) {
+ 				err = PTR_ERR(path);
+-				path = NULL;
+ 				goto out;
+ 			}
+ 			eh = path[depth].p_hdr;
+ 			ex = path[depth].p_ext;
+ 			if (ex2 != &newex)
+ 				ex2 = ex;
++
++			err = ext4_ext_get_access(handle, inode, path + depth);
++			if (err)
++				goto out;
+ 		}
+ 		allocated = max_blocks;
+ 	}
+@@ -2230,9 +2244,6 @@ static int ext4_ext_convert_to_initializ
+ 	ex2->ee_len = cpu_to_le16(allocated);
+ 	if (ex2 != ex)
+ 		goto insert;
+-	err = ext4_ext_get_access(handle, inode, path + depth);
+-	if (err)
+-		goto out;
+ 	/*
+ 	 * New (initialized) extent starts from the first block
+ 	 * in the current extent. i.e., ex2 == ex
+@@ -2276,9 +2287,22 @@ out:
+ }
+ 
+ /*
++ * Block allocation/map/preallocation routine for extents based files
++ *
++ *
+  * Need to be called with
+  * down_read(&EXT4_I(inode)->i_data_sem) if not allocating file system block
+  * (ie, create is zero). Otherwise down_write(&EXT4_I(inode)->i_data_sem)
++ *
++ * return > 0, number of of blocks already mapped/allocated
++ *          if create == 0 and these are pre-allocated blocks
++ *          	buffer head is unmapped
++ *          otherwise blocks are mapped
++ *
++ * return = 0, if plain look up failed (blocks have not been allocated)
++ *          buffer head is unmapped
++ *
++ * return < 0, error case.
+  */
+ int ext4_ext_get_blocks(handle_t *handle, struct inode *inode,
+ 			ext4_lblk_t iblock,
+@@ -2623,7 +2647,7 @@ long ext4_fallocate(struct inode *inode,
+ 	 * modify 1 super block, 1 block bitmap and 1 group descriptor.
+ 	 */
+ 	credits = EXT4_DATA_TRANS_BLOCKS(inode->i_sb) + 3;
+-	down_write((&EXT4_I(inode)->i_data_sem));
++	mutex_lock(&inode->i_mutex);
+ retry:
+ 	while (ret >= 0 && ret < max_blocks) {
+ 		block = block + ret;
+@@ -2634,16 +2658,17 @@ retry:
+ 			break;
+ 		}
+ 
+-		ret = ext4_ext_get_blocks(handle, inode, block,
++		ret = ext4_get_blocks_wrap(handle, inode, block,
+ 					  max_blocks, &map_bh,
+ 					  EXT4_CREATE_UNINITIALIZED_EXT, 0);
+-		WARN_ON(ret <= 0);
+ 		if (ret <= 0) {
+-			ext4_error(inode->i_sb, "ext4_fallocate",
+-				    "ext4_ext_get_blocks returned error: "
+-				    "inode#%lu, block=%u, max_blocks=%lu",
++#ifdef EXT4FS_DEBUG
++			WARN_ON(ret <= 0);
++			printk(KERN_ERR "%s: ext4_ext_get_blocks "
++				    "returned error inode#%lu, block=%u, "
++				    "max_blocks=%lu", __func__,
+ 				    inode->i_ino, block, max_blocks);
+-			ret = -EIO;
++#endif
+ 			ext4_mark_inode_dirty(handle, inode);
+ 			ret2 = ext4_journal_stop(handle);
+ 			break;
+@@ -2680,7 +2705,6 @@ retry:
+ 	if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
+ 		goto retry;
+ 
+-	up_write((&EXT4_I(inode)->i_data_sem));
+ 	/*
+ 	 * Time to update the file size.
+ 	 * Update only when preallocation was requested beyond the file size.
+@@ -2692,21 +2716,18 @@ retry:
+ 			 * if no error, we assume preallocation succeeded
+ 			 * completely
+ 			 */
+-			mutex_lock(&inode->i_mutex);
+ 			i_size_write(inode, offset + len);
+ 			EXT4_I(inode)->i_disksize = i_size_read(inode);
+-			mutex_unlock(&inode->i_mutex);
+ 		} else if (ret < 0 && nblocks) {
+ 			/* Handle partial allocation scenario */
+ 			loff_t newsize;
+ 
+-			mutex_lock(&inode->i_mutex);
+ 			newsize  = (nblocks << blkbits) + i_size_read(inode);
+ 			i_size_write(inode, EXT4_BLOCK_ALIGN(newsize, blkbits));
+ 			EXT4_I(inode)->i_disksize = i_size_read(inode);
+-			mutex_unlock(&inode->i_mutex);
+ 		}
+ 	}
+ 
++	mutex_unlock(&inode->i_mutex);
+ 	return ret > 0 ? ret2 : ret;
+ }
+Index: linux-2.6.24.noarch/fs/ext4/mballoc.c
 ===================================================================
---- linux-2.6.24.orig/fs/ext4/migrate.c	2008-02-04 10:59:16.000000000 -0800
-+++ linux-2.6.24/fs/ext4/migrate.c	2008-02-04 11:14:47.000000000 -0800
-@@ -414,6 +414,12 @@ int ext4_ext_migrate(struct inode *inode
- 	if ((EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL))
- 		return -EINVAL;
+--- linux-2.6.24.noarch.orig/fs/ext4/mballoc.c
++++ linux-2.6.24.noarch/fs/ext4/mballoc.c
+@@ -627,21 +627,19 @@ static ext4_fsblk_t ext4_grp_offs_to_blo
+ 	return block;
+ }
+ 
++static inline void *mb_correct_addr_and_bit(int *bit, void *addr)
++{
+ #if BITS_PER_LONG == 64
+-#define mb_correct_addr_and_bit(bit, addr)		\
+-{							\
+-	bit += ((unsigned long) addr & 7UL) << 3;	\
+-	addr = (void *) ((unsigned long) addr & ~7UL);	\
+-}
++	*bit += ((unsigned long) addr & 7UL) << 3;
++	addr = (void *) ((unsigned long) addr & ~7UL);
+ #elif BITS_PER_LONG == 32
+-#define mb_correct_addr_and_bit(bit, addr)		\
+-{							\
+-	bit += ((unsigned long) addr & 3UL) << 3;	\
+-	addr = (void *) ((unsigned long) addr & ~3UL);	\
+-}
++	*bit += ((unsigned long) addr & 3UL) << 3;
++	addr = (void *) ((unsigned long) addr & ~3UL);
+ #else
+ #error "how many bits you are?!"
+ #endif
++	return addr;
++}
+ 
+ static inline int mb_test_bit(int bit, void *addr)
+ {
+@@ -649,34 +647,54 @@ static inline int mb_test_bit(int bit, v
+ 	 * ext4_test_bit on architecture like powerpc
+ 	 * needs unsigned long aligned address
+ 	 */
+-	mb_correct_addr_and_bit(bit, addr);
++	addr = mb_correct_addr_and_bit(&bit, addr);
+ 	return ext4_test_bit(bit, addr);
+ }
+ 
+ static inline void mb_set_bit(int bit, void *addr)
+ {
+-	mb_correct_addr_and_bit(bit, addr);
++	addr = mb_correct_addr_and_bit(&bit, addr);
+ 	ext4_set_bit(bit, addr);
+ }
+ 
+ static inline void mb_set_bit_atomic(spinlock_t *lock, int bit, void *addr)
+ {
+-	mb_correct_addr_and_bit(bit, addr);
++	addr = mb_correct_addr_and_bit(&bit, addr);
+ 	ext4_set_bit_atomic(lock, bit, addr);
+ }
+ 
+ static inline void mb_clear_bit(int bit, void *addr)
+ {
+-	mb_correct_addr_and_bit(bit, addr);
++	addr = mb_correct_addr_and_bit(&bit, addr);
+ 	ext4_clear_bit(bit, addr);
+ }
+ 
+ static inline void mb_clear_bit_atomic(spinlock_t *lock, int bit, void *addr)
+ {
+-	mb_correct_addr_and_bit(bit, addr);
++	addr = mb_correct_addr_and_bit(&bit, addr);
+ 	ext4_clear_bit_atomic(lock, bit, addr);
+ }
+ 
++static inline int mb_find_next_zero_bit(void *addr, int max, int start)
++{
++	int fix = 0;
++	addr = mb_correct_addr_and_bit(&fix, addr);
++	max += fix;
++	start += fix;
++
++	return ext4_find_next_zero_bit(addr, max, start) - fix;
++}
++
++static inline int mb_find_next_bit(void *addr, int max, int start)
++{
++	int fix = 0;
++	addr = mb_correct_addr_and_bit(&fix, addr);
++	max += fix;
++	start += fix;
++
++	return ext4_find_next_bit(addr, max, start) - fix;
++}
++
+ static void *mb_find_buddy(struct ext4_buddy *e4b, int order, int *max)
+ {
+ 	char *bb;
+@@ -906,7 +924,7 @@ static void ext4_mb_mark_free_simple(str
+ 	unsigned short chunk;
+ 	unsigned short border;
+ 
+-	BUG_ON(len >= EXT4_BLOCKS_PER_GROUP(sb));
++	BUG_ON(len > EXT4_BLOCKS_PER_GROUP(sb));
+ 
+ 	border = 2 << sb->s_blocksize_bits;
+ 
+@@ -946,12 +964,12 @@ static void ext4_mb_generate_buddy(struc
+ 
+ 	/* initialize buddy from bitmap which is aggregation
+ 	 * of on-disk bitmap and preallocations */
+-	i = ext4_find_next_zero_bit(bitmap, max, 0);
++	i = mb_find_next_zero_bit(bitmap, max, 0);
+ 	grp->bb_first_free = i;
+ 	while (i < max) {
+ 		fragments++;
+ 		first = i;
+-		i = ext4_find_next_bit(bitmap, max, i);
++		i = mb_find_next_bit(bitmap, max, i);
+ 		len = i - first;
+ 		free += len;
+ 		if (len > 1)
+@@ -959,7 +977,7 @@ static void ext4_mb_generate_buddy(struc
+ 		else
+ 			grp->bb_counters[0]++;
+ 		if (i < max)
+-			i = ext4_find_next_zero_bit(bitmap, max, i);
++			i = mb_find_next_zero_bit(bitmap, max, i);
+ 	}
+ 	grp->bb_fragments = fragments;
  
-+	if (S_ISLNK(inode->i_mode) && inode->i_blocks == 0)
+@@ -967,6 +985,10 @@ static void ext4_mb_generate_buddy(struc
+ 		ext4_error(sb, __FUNCTION__,
+ 			"EXT4-fs: group %lu: %u blocks in bitmap, %u in gd\n",
+ 			group, free, grp->bb_free);
 +		/*
-+		 * don't migrate fast symlink
++		 * If we intent to continue, we consider group descritor
++		 * corrupt and update bb_free using bitmap value
 +		 */
-+		return retval;
-+
- 	down_write(&EXT4_I(inode)->i_data_sem);
- 	handle = ext4_journal_start(inode,
- 					EXT4_DATA_TRANS_BLOCKS(inode->i_sb) +
-Index: linux-2.6.24/fs/ext4/namei.c
+ 		grp->bb_free = free;
+ 	}
+ 
+@@ -1146,8 +1168,9 @@ out:
+ 	return err;
+ }
+ 
+-static int ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group,
+-		struct ext4_buddy *e4b)
++static noinline int
++ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group,
++					struct ext4_buddy *e4b)
+ {
+ 	struct ext4_sb_info *sbi = EXT4_SB(sb);
+ 	struct inode *inode = sbi->s_buddy_cache;
+@@ -1778,7 +1801,7 @@ static void ext4_mb_simple_scan_group(st
+ 		buddy = mb_find_buddy(e4b, i, &max);
+ 		BUG_ON(buddy == NULL);
+ 
+-		k = ext4_find_next_zero_bit(buddy, max, 0);
++		k = mb_find_next_zero_bit(buddy, max, 0);
+ 		BUG_ON(k >= max);
+ 
+ 		ac->ac_found++;
+@@ -1818,11 +1841,11 @@ static void ext4_mb_complex_scan_group(s
+ 	i = e4b->bd_info->bb_first_free;
+ 
+ 	while (free && ac->ac_status == AC_STATUS_CONTINUE) {
+-		i = ext4_find_next_zero_bit(bitmap,
++		i = mb_find_next_zero_bit(bitmap,
+ 						EXT4_BLOCKS_PER_GROUP(sb), i);
+ 		if (i >= EXT4_BLOCKS_PER_GROUP(sb)) {
+ 			/*
+-			 * IF we corrupt the bitmap  we won't find any
++			 * IF we have corrupt bitmap, we won't find any
+ 			 * free blocks even though group info says we
+ 			 * we have free blocks
+ 			 */
+@@ -1838,6 +1861,12 @@ static void ext4_mb_complex_scan_group(s
+ 			ext4_error(sb, __FUNCTION__, "%d free blocks as per "
+ 					"group info. But got %d blocks\n",
+ 					free, ex.fe_len);
++			/*
++			 * The number of free blocks differs. This mostly
++			 * indicate that the bitmap is corrupt. So exit
++			 * without claiming the space.
++			 */
++			break;
+ 		}
+ 
+ 		ext4_mb_measure_extent(ac, &ex, e4b);
+@@ -1937,7 +1966,8 @@ static int ext4_mb_good_group(struct ext
+ 	return 0;
+ }
+ 
+-static int ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
++static noinline int
++ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
+ {
+ 	ext4_group_t group;
+ 	ext4_group_t i;
+@@ -2444,7 +2474,7 @@ static void ext4_mb_history_init(struct 
+ 	/* if we can't allocate history, then we simple won't use it */
+ }
+ 
+-static void ext4_mb_store_history(struct ext4_allocation_context *ac)
++static noinline void ext4_mb_store_history(struct ext4_allocation_context *ac)
+ {
+ 	struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
+ 	struct ext4_mb_history h;
+@@ -2780,7 +2810,7 @@ int ext4_mb_release(struct super_block *
+ 	return 0;
+ }
+ 
+-static void ext4_mb_free_committed_blocks(struct super_block *sb)
++static noinline void ext4_mb_free_committed_blocks(struct super_block *sb)
+ {
+ 	struct ext4_sb_info *sbi = EXT4_SB(sb);
+ 	int err;
+@@ -3001,7 +3031,8 @@ void exit_ext4_mballoc(void)
+  * Check quota and mark choosed space (ac->ac_b_ex) non-free in bitmaps
+  * Returns 0 if success or error code
+  */
+-static int ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac,
++static noinline int
++ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac,
+ 				handle_t *handle)
+ {
+ 	struct buffer_head *bitmap_bh = NULL;
+@@ -3118,7 +3149,8 @@ static void ext4_mb_normalize_group_requ
+  * Normalization means making request better in terms of
+  * size and alignment
+  */
+-static void ext4_mb_normalize_request(struct ext4_allocation_context *ac,
++static noinline void
++ext4_mb_normalize_request(struct ext4_allocation_context *ac,
+ 				struct ext4_allocation_request *ar)
+ {
+ 	int bsbits, max;
+@@ -3384,7 +3416,7 @@ static void ext4_mb_use_group_pa(struct 
+ /*
+  * search goal blocks in preallocated space
+  */
+-static int ext4_mb_use_preallocated(struct ext4_allocation_context *ac)
++static noinline int ext4_mb_use_preallocated(struct ext4_allocation_context *ac)
+ {
+ 	struct ext4_inode_info *ei = EXT4_I(ac->ac_inode);
+ 	struct ext4_locality_group *lg;
+@@ -3551,7 +3583,7 @@ static void ext4_mb_put_pa(struct ext4_a
+ /*
+  * creates new preallocated space for given inode
+  */
+-static int ext4_mb_new_inode_pa(struct ext4_allocation_context *ac)
++static noinline int ext4_mb_new_inode_pa(struct ext4_allocation_context *ac)
+ {
+ 	struct super_block *sb = ac->ac_sb;
+ 	struct ext4_prealloc_space *pa;
+@@ -3638,7 +3670,7 @@ static int ext4_mb_new_inode_pa(struct e
+ /*
+  * creates new preallocated space for locality group inodes belongs to
+  */
+-static int ext4_mb_new_group_pa(struct ext4_allocation_context *ac)
++static noinline int ext4_mb_new_group_pa(struct ext4_allocation_context *ac)
+ {
+ 	struct super_block *sb = ac->ac_sb;
+ 	struct ext4_locality_group *lg;
+@@ -3711,7 +3743,7 @@ static int ext4_mb_new_preallocation(str
+  * the caller MUST hold group/inode locks.
+  * TODO: optimize the case when there are no in-core structures yet
+  */
+-static int ext4_mb_release_inode_pa(struct ext4_buddy *e4b,
++static noinline int ext4_mb_release_inode_pa(struct ext4_buddy *e4b,
+ 				struct buffer_head *bitmap_bh,
+ 				struct ext4_prealloc_space *pa)
+ {
+@@ -3740,10 +3772,10 @@ static int ext4_mb_release_inode_pa(stru
+ 	}
+ 
+ 	while (bit < end) {
+-		bit = ext4_find_next_zero_bit(bitmap_bh->b_data, end, bit);
++		bit = mb_find_next_zero_bit(bitmap_bh->b_data, end, bit);
+ 		if (bit >= end)
+ 			break;
+-		next = ext4_find_next_bit(bitmap_bh->b_data, end, bit);
++		next = mb_find_next_bit(bitmap_bh->b_data, end, bit);
+ 		if (next > end)
+ 			next = end;
+ 		start = group * EXT4_BLOCKS_PER_GROUP(sb) + bit +
+@@ -3771,6 +3803,10 @@ static int ext4_mb_release_inode_pa(stru
+ 			(unsigned long) pa->pa_len);
+ 		ext4_error(sb, __FUNCTION__, "free %u, pa_free %u\n",
+ 						free, pa->pa_free);
++		/*
++		 * pa is already deleted so we use the value obtained
++		 * from the bitmap and continue.
++		 */
+ 	}
+ 	atomic_add(free, &sbi->s_mb_discarded);
+ 	if (ac)
+@@ -3779,7 +3815,7 @@ static int ext4_mb_release_inode_pa(stru
+ 	return err;
+ }
+ 
+-static int ext4_mb_release_group_pa(struct ext4_buddy *e4b,
++static noinline int ext4_mb_release_group_pa(struct ext4_buddy *e4b,
+ 				struct ext4_prealloc_space *pa)
+ {
+ 	struct ext4_allocation_context *ac;
+@@ -3821,7 +3857,7 @@ static int ext4_mb_release_group_pa(stru
+  * - how many do we discard
+  *   1) how many requested
+  */
+-static int ext4_mb_discard_group_preallocations(struct super_block *sb,
++static noinline int ext4_mb_discard_group_preallocations(struct super_block *sb,
+ 					ext4_group_t group, int needed)
+ {
+ 	struct ext4_group_info *grp = ext4_get_group_info(sb, group);
+@@ -4143,7 +4179,8 @@ static void ext4_mb_group_or_file(struct
+ 	mutex_lock(&ac->ac_lg->lg_mutex);
+ }
+ 
+-static int ext4_mb_initialize_context(struct ext4_allocation_context *ac,
++static noinline int
++ext4_mb_initialize_context(struct ext4_allocation_context *ac,
+ 				struct ext4_allocation_request *ar)
+ {
+ 	struct super_block *sb = ar->inode->i_sb;
+@@ -4374,7 +4411,8 @@ static void ext4_mb_poll_new_transaction
+ 	ext4_mb_free_committed_blocks(sb);
+ }
+ 
+-static int ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b,
++static noinline int
++ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b,
+ 			  ext4_group_t group, ext4_grpblk_t block, int count)
+ {
+ 	struct ext4_group_info *db = e4b->bd_info;
+Index: linux-2.6.24.noarch/fs/ext4/namei.c
 ===================================================================
---- linux-2.6.24.orig/fs/ext4/namei.c	2008-02-04 10:59:16.000000000 -0800
-+++ linux-2.6.24/fs/ext4/namei.c	2008-02-04 11:14:47.000000000 -0800
-@@ -2234,6 +2234,7 @@ retry:
+--- linux-2.6.24.noarch.orig/fs/ext4/namei.c
++++ linux-2.6.24.noarch/fs/ext4/namei.c
+@@ -1804,12 +1804,8 @@ retry:
+ 	inode->i_fop = &ext4_dir_operations;
+ 	inode->i_size = EXT4_I(inode)->i_disksize = inode->i_sb->s_blocksize;
+ 	dir_block = ext4_bread (handle, inode, 0, 1, &err);
+-	if (!dir_block) {
+-		ext4_dec_count(handle, inode); /* is this nlink == 0? */
+-		ext4_mark_inode_dirty(handle, inode);
+-		iput (inode);
+-		goto out_stop;
+-	}
++	if (!dir_block)
++		goto out_clear_inode;
+ 	BUFFER_TRACE(dir_block, "get_write_access");
+ 	ext4_journal_get_write_access(handle, dir_block);
+ 	de = (struct ext4_dir_entry_2 *) dir_block->b_data;
+@@ -1832,7 +1828,8 @@ retry:
+ 	ext4_mark_inode_dirty(handle, inode);
+ 	err = ext4_add_entry (handle, dentry, inode);
+ 	if (err) {
+-		inode->i_nlink = 0;
++out_clear_inode:
++		clear_nlink(inode);
+ 		ext4_mark_inode_dirty(handle, inode);
+ 		iput (inode);
+ 		goto out_stop;
+@@ -2164,7 +2161,7 @@ static int ext4_unlink(struct inode * di
+ 	dir->i_ctime = dir->i_mtime = ext4_current_time(dir);
+ 	ext4_update_dx_flag(dir);
+ 	ext4_mark_inode_dirty(handle, dir);
+-	ext4_dec_count(handle, inode);
++	drop_nlink(inode);
+ 	if (!inode->i_nlink)
+ 		ext4_orphan_add(handle, inode);
+ 	inode->i_ctime = ext4_current_time(inode);
+@@ -2214,7 +2211,7 @@ retry:
+ 		err = __page_symlink(inode, symname, l,
+ 				mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS);
+ 		if (err) {
+-			ext4_dec_count(handle, inode);
++			clear_nlink(inode);
+ 			ext4_mark_inode_dirty(handle, inode);
+ 			iput (inode);
+ 			goto out_stop;
+@@ -2223,7 +2220,6 @@ retry:
  		inode->i_op = &ext4_fast_symlink_inode_operations;
  		memcpy((char*)&EXT4_I(inode)->i_data,symname,l);
  		inode->i_size = l-1;
-+		EXT4_I(inode)->i_flags &= ~EXT4_EXTENTS_FL;
+-		EXT4_I(inode)->i_flags &= ~EXT4_EXTENTS_FL;
  	}
  	EXT4_I(inode)->i_disksize = inode->i_size;
  	err = ext4_add_nondir(handle, dentry, inode);
-
-ext4: Add new "development flag" to the ext4 filesystem
-From: Theodore Tso <tytso at MIT.EDU>
-This flag is simply a generic "this is a
-crash/burn test filesystem" marker.  If it is set, then filesystem
-code which is "in development" will be allowed to mount the
-filesystem.  Filesystem code which is not considered ready for
-prime-time will check for this flag, and if it is not set, it will
-refuse to touch the filesystem.
-
-As we start rolling ext4 out to distro's like Fedora, et. al, this
-makes it less likely that a user might accidentally start using ext4
-on a production filesystem; a bad thing, since that will essentially
-make it be unfsckable until e2fsprogs catches up.
-
-Signed-off-by: Theodore Tso <tytso at MIT.EDU>
-Signed-off-by: Mingming Cao<cmm at us.ibm.com>
-
-diff --git a/fs/ext4/super.c b/fs/ext4/super.c
-index 055a0cd..8a405ae 100644
---- a/fs/ext4/super.c
-+++ b/fs/ext4/super.c
-@@ -1926,6 +1926,17 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)
- 		printk(KERN_WARNING
- 		       "EXT4-fs warning: feature flags set on rev 0 fs, "
- 		       "running e2fsck is recommended\n");
-+
-+	/*
-+	 * Since ext4 is still considered development code, we require
-+	 * that the TEST_FILESYS flag in s->flags be set.
-+	 */
-+	if (!(le32_to_cpu(es->s_flags) & EXT2_FLAGS_TEST_FILESYS)) {
-+		printk(KERN_WARNING "EXT4-fs: %s: not marked "
-+		       "OK to use with test code.\n", sb->s_id);
-+		goto failed_mount;
+@@ -2407,7 +2403,7 @@ static int ext4_rename (struct inode * o
+ 		ext4_dec_count(handle, old_dir);
+ 		if (new_inode) {
+ 			/* checked empty_dir above, can't have another parent,
+-			 * ext3_dec_count() won't work for many-linked dirs */
++			 * ext4_dec_count() won't work for many-linked dirs */
+ 			new_inode->i_nlink = 0;
+ 		} else {
+ 			ext4_inc_count(handle, new_dir);
+Index: linux-2.6.24.noarch/fs/ext4/migrate.c
+===================================================================
+--- linux-2.6.24.noarch.orig/fs/ext4/migrate.c
++++ linux-2.6.24.noarch/fs/ext4/migrate.c
+@@ -43,6 +43,7 @@ static int finish_range(handle_t *handle
+ 
+ 	if (IS_ERR(path)) {
+ 		retval = PTR_ERR(path);
++		path = NULL;
+ 		goto err_out;
+ 	}
+ 
+@@ -74,6 +75,10 @@ static int finish_range(handle_t *handle
+ 	}
+ 	retval = ext4_ext_insert_extent(handle, inode, path, &newext);
+ err_out:
++	if (path) {
++		ext4_ext_drop_refs(path);
++		kfree(path);
 +	}
-+
- 	/*
- 	 * Check feature flags regardless of the revision level, since we
- 	 * previously didn't change the revision level when setting the flags,
-diff --git a/include/linux/ext4_fs.h b/include/linux/ext4_fs.h
-index 1852313..285fa6c 100644
---- a/include/linux/ext4_fs.h
-+++ b/include/linux/ext4_fs.h
-@@ -490,6 +490,13 @@ do {									       \
- #define	EXT4_ORPHAN_FS			0x0004	/* Orphans being recovered */
+ 	lb->first_pblock = 0;
+ 	return retval;
+ }
+Index: linux-2.6.24.noarch/include/linux/ext4_fs_extents.h
+===================================================================
+--- linux-2.6.24.noarch.orig/include/linux/ext4_fs_extents.h
++++ linux-2.6.24.noarch/include/linux/ext4_fs_extents.h
+@@ -227,5 +227,6 @@ extern int ext4_ext_search_left(struct i
+ 						ext4_lblk_t *, ext4_fsblk_t *);
+ extern int ext4_ext_search_right(struct inode *, struct ext4_ext_path *,
+ 						ext4_lblk_t *, ext4_fsblk_t *);
++extern void ext4_ext_drop_refs(struct ext4_ext_path *);
+ #endif /* _LINUX_EXT4_EXTENTS */
  
- /*
-+ * Misc. filesystem flags
-+ */
-+#define EXT2_FLAGS_SIGNED_HASH		0x0001  /* Signed dirhash in use */
-+#define EXT2_FLAGS_UNSIGNED_HASH	0x0002  /* Unsigned dirhash in use */
-+#define EXT2_FLAGS_TEST_FILESYS		0x0004	/* OK for use on development code */
+Index: linux-2.6.24.noarch/fs/ext4/file.c
+===================================================================
+--- linux-2.6.24.noarch.orig/fs/ext4/file.c
++++ linux-2.6.24.noarch/fs/ext4/file.c
+@@ -123,6 +123,23 @@ force_commit:
+ 	return ret;
+ }
+ 
++static struct vm_operations_struct ext4_file_vm_ops = {
++	.fault		= filemap_fault,
++	.page_mkwrite   = ext4_page_mkwrite,
++};
 +
-+/*
-  * Mount flags
-  */
- #define EXT4_MOUNT_CHECK		0x00001	/* Do mount-time checks */
++static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
++{
++	struct address_space *mapping = file->f_mapping;
++
++	if (!mapping->a_ops->readpage)
++		return -ENOEXEC;
++	file_accessed(file);
++	vma->vm_ops = &ext4_file_vm_ops;
++	vma->vm_flags |= VM_CAN_NONLINEAR;
++	return 0;
++}
++
+ const struct file_operations ext4_file_operations = {
+ 	.llseek		= generic_file_llseek,
+ 	.read		= do_sync_read,
+@@ -133,7 +150,7 @@ const struct file_operations ext4_file_o
+ #ifdef CONFIG_COMPAT
+ 	.compat_ioctl	= ext4_compat_ioctl,
+ #endif
+-	.mmap		= generic_file_mmap,
++	.mmap		= ext4_file_mmap,
+ 	.open		= generic_file_open,
+ 	.release	= ext4_release_file,
+ 	.fsync		= ext4_sync_file,
+Index: linux-2.6.24.noarch/include/linux/ext4_fs.h
+===================================================================
+--- linux-2.6.24.noarch.orig/include/linux/ext4_fs.h
++++ linux-2.6.24.noarch/include/linux/ext4_fs.h
+@@ -1047,6 +1047,7 @@ extern void ext4_set_aops(struct inode *
+ extern int ext4_writepage_trans_blocks(struct inode *);
+ extern int ext4_block_truncate_page(handle_t *handle, struct page *page,
+ 		struct address_space *mapping, loff_t from);
++extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct page *page);
+ 
+ /* ioctl.c */
+ extern int ext4_ioctl (struct inode *, struct file *, unsigned int,
+Index: linux-2.6.24.noarch/fs/ext4/ialloc.c
+===================================================================
+--- linux-2.6.24.noarch.orig/fs/ext4/ialloc.c
++++ linux-2.6.24.noarch/fs/ext4/ialloc.c
+@@ -702,7 +702,12 @@ got:
+ 	ei->i_dir_start_lookup = 0;
+ 	ei->i_disksize = 0;
+ 
+-	ei->i_flags = EXT4_I(dir)->i_flags & ~EXT4_INDEX_FL;
++	/*
++	 * Don't inherit extent flag from directory. We set extent flag on
++	 * newly created directory and file only if -o extent mount option is
++	 * specified
++	 */
++	ei->i_flags = EXT4_I(dir)->i_flags & ~(EXT4_INDEX_FL|EXT4_EXTENTS_FL);
+ 	if (S_ISLNK(mode))
+ 		ei->i_flags &= ~(EXT4_IMMUTABLE_FL|EXT4_APPEND_FL);
+ 	/* dirsync only applies to directories */
+@@ -745,12 +750,15 @@ got:
+ 		goto fail_free_drop;
+ 	}
+ 	if (test_opt(sb, EXTENTS)) {
+-		EXT4_I(inode)->i_flags |= EXT4_EXTENTS_FL;
+-		ext4_ext_tree_init(handle, inode);
+-		err = ext4_update_incompat_feature(handle, sb,
+-						EXT4_FEATURE_INCOMPAT_EXTENTS);
+-		if (err)
+-			goto fail;
++		/* set extent flag only for diretory and file */
++		if (S_ISDIR(mode) || S_ISREG(mode)) {
++			EXT4_I(inode)->i_flags |= EXT4_EXTENTS_FL;
++			ext4_ext_tree_init(handle, inode);
++			err = ext4_update_incompat_feature(handle, sb,
++					EXT4_FEATURE_INCOMPAT_EXTENTS);
++			if (err)
++				goto fail;
++		}
+ 	}
  
-allow in-inode EAs on ext4 root inode
-
-From: Eric Sandeen <sandeen at redhat.com>
-
-The ext3 root inode was treated specially with respect
-to in-inode extended attributes, for reasons detailed
-in the removed comment below.  The first mkfs-created
-inodes would not get extra_i_size or the EXT3_STATE_XATTR
-flag set in ext3_read_inode, which disallowed reading or
-setting in-inode EAs on the root.
-
-However, in ext4, ext4_mark_inode_dirty calls
-ext4_expand_extra_isize for all inodes; once this is done
-EAs may be placed in the root ext4 inode body.
-
-But for reasons above, it won't be found after a reboot.
-
-testcase:
-
-setfattr -n user.name -v value mntpt/
-setfattr -n user.name2 -v value2 mntpt/
-umount mntpt/; remount mntpt/
-getfattr -d mntpt/
-
-name2/value2 has gone missing; debugfs shows it in the
-inode body, but it is not found there by getattr.
-
-The following fixes it up; newer mkfs appears to properly
-zero the inodes, so this workaround isn't needed for ext4.
-
-Signed-off-by: Eric Sandeen <sandeen at redhat.com>
-Signed-off-by: Theodore Ts'o <tytso at mit.edu>
-
-diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
-index e7e10df..4fed498 100644
---- a/fs/ext4/inode.c
-+++ b/fs/ext4/inode.c
-@@ -2908,13 +2908,7 @@ void ext4_read_inode(struct inode * inode)
- 		ei->i_data[block] = raw_inode->i_block[block];
- 	INIT_LIST_HEAD(&ei->i_orphan);
- 
--	if (inode->i_ino >= EXT4_FIRST_INO(inode->i_sb) + 1 &&
--	    EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
--		/*
--		 * When mke2fs creates big inodes it does not zero out
--		 * the unused bytes above EXT4_GOOD_OLD_INODE_SIZE,
--		 * so ignore those first few inodes.
--		 */
-+	if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
- 		ei->i_extra_isize = le16_to_cpu(raw_inode->i_extra_isize);
- 		if (EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize >
- 		    EXT4_INODE_SIZE(inode->i_sb)) {
-
-
+ 	ext4_debug("allocating inode %lu\n", inode->i_ino);

linux-2.6-firewire-git-pending.patch:

Index: linux-2.6-firewire-git-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-firewire-git-pending.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-firewire-git-pending.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-firewire-git-pending.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -3,1095 +3,988 @@
 # tree, which we think we're going to want...
 #
 
-If a device is being unplugged while fw-sbp2 had a login or reconnect on
-schedule, it would take about half a minute to shut the fw_unit down:
-
-Jan 27 18:34:54 stein firewire_sbp2: logged in to fw2.0 LUN 0000 (0 retries)
-<unplug>
-Jan 27 18:34:59 stein firewire_sbp2: sbp2_scsi_abort
-Jan 27 18:34:59 stein scsi 25:0:0:0: Device offlined - not ready after error recovery
-Jan 27 18:35:01 stein firewire_sbp2: orb reply timed out, rcode=0x11
-Jan 27 18:35:06 stein firewire_sbp2: orb reply timed out, rcode=0x11
-Jan 27 18:35:12 stein firewire_sbp2: orb reply timed out, rcode=0x11
-Jan 27 18:35:17 stein firewire_sbp2: orb reply timed out, rcode=0x11
-Jan 27 18:35:22 stein firewire_sbp2: orb reply timed out, rcode=0x11
-Jan 27 18:35:27 stein firewire_sbp2: orb reply timed out, rcode=0x11
-Jan 27 18:35:32 stein firewire_sbp2: orb reply timed out, rcode=0x11
-Jan 27 18:35:32 stein firewire_sbp2: failed to login to fw2.0 LUN 0000
-Jan 27 18:35:32 stein firewire_sbp2: released fw2.0
-
-After this patch, typically only a few seconds spent in __scsi_add_device
-remain:
-
-Jan 27 19:05:50 stein firewire_sbp2: logged in to fw2.0 LUN 0000 (0 retries)
-<unplug>
-Jan 27 19:05:56 stein firewire_sbp2: sbp2_scsi_abort
-Jan 27 19:05:56 stein scsi 33:0:0:0: Device offlined - not ready after error recovery
-Jan 27 19:05:56 stein firewire_sbp2: released fw2.0
-
-The benefit of this is negligible on simple setups.  But on buses with
-several devices, we should avoid any unnecessary blockade of fw-sbp2's
-workqueue thread.
+The generation of incoming requests was filled in in wrong byte order on
+machines with big endian CPU.
 
 Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Signed-off-by: Jarod Wilson <jwilson at redhat.com>
+Cc: sparclinux at vger.kernel.org
+Cc: linuxppc-dev at ozlabs.org
 ---
- drivers/firewire/fw-sbp2.c |   16 +++++++++++-----
- 1 file changed, 11 insertions(+), 5 deletions(-)
 
-Index: linux/drivers/firewire/fw-sbp2.c
-===================================================================
---- linux.orig/drivers/firewire/fw-sbp2.c
-+++ linux/drivers/firewire/fw-sbp2.c
-@@ -499,6 +499,9 @@ sbp2_send_management_orb(struct sbp2_log
- 	unsigned int timeout;
- 	int retval = -ENOMEM;
- 
-+	if (function == SBP2_LOGOUT_REQUEST && fw_device_is_shutdown(device))
-+		return 0;
-+
- 	orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
- 	if (orb == NULL)
- 		return -ENOMEM;
-@@ -619,16 +622,13 @@ static void sbp2_release_target(struct k
- 	struct sbp2_logical_unit *lu, *next;
- 	struct Scsi_Host *shost =
- 		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
--	struct fw_device *device = fw_device(tgt->unit->device.parent);
- 
- 	list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
- 		if (lu->sdev)
- 			scsi_remove_device(lu->sdev);
- 
--		if (!fw_device_is_shutdown(device))
--			sbp2_send_management_orb(lu, tgt->node_id,
--					lu->generation, SBP2_LOGOUT_REQUEST,
--					lu->login_id, NULL);
-+		sbp2_send_management_orb(lu, tgt->node_id, lu->generation,
-+				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
- 
- 		fw_core_remove_address_handler(&lu->address_handler);
- 		list_del(&lu->link);
-@@ -673,6 +673,9 @@ static void sbp2_login(struct work_struc
- 	struct sbp2_login_response response;
- 	int generation, node_id, local_node_id;
- 
-+	if (fw_device_is_shutdown(device))
-+		goto out;
-+
- 	generation    = device->generation;
- 	smp_rmb();    /* node_id must not be older than generation */
- 	node_id       = device->node_id;
-@@ -968,6 +971,9 @@ static void sbp2_reconnect(struct work_s
- 	struct fw_device *device = fw_device(unit->device.parent);
- 	int generation, node_id, local_node_id;
- 
-+	if (fw_device_is_shutdown(device))
-+		goto out;
-+
- 	generation    = device->generation;
- 	smp_rmb();    /* node_id must not be older than generation */
- 	node_id       = device->node_id;
+This patch is a shot in the dark, based on a warning when building with
+C=1 CHECKFLAGS="-D__CHECK_ENDIAN__".  Is it really a fix, or was the
+previous code accidentally correct?
 
--- 
-Stefan Richter
--=====-==--- ---= ==-==
-http://arcgraph.de/sr/
+This needs to be tested on different big endian PCs, if possible with
+the Apple Uninorth FireWire controller and other types of controllers.
+One test which involves ohci->request_generation is simply with an SBP-2
+device (harddisk, CD-ROM...).  Does SBP-2 login etc. work?
 
+If possible, also test whether the device remains accessible after
+forcing a bus reset, e.g. by "echo br short > firecontrol".  You need
+the easy to build utility firecontrol and a libraw1394 with "juju"
+backend.  See wiki.linux1394.org for directions.
 
-There is a race between shutdown and creation of devices:  fw-core may
-attempt to add a device with the same name of an already existing
-device.  http://bugzilla.kernel.org/show_bug.cgi?id=9828
-
-Impact of the bug:  Happens rarely (when shutdown of a device coincides
-with creation of another), forces the user to unplug and replug the new
-device to get it working.
-
-The fix is obvious:  Free the minor number *after* instead of *before*
-device_unregister().  This requires to take an additional reference of
-the fw_device as long as the IDR tree points to it.
-
-And while we are at it, we fix an additional race condition:
-fw_device_op_open() took its reference of the fw_device a little bit too
-late, hence was in danger to access an already invalid fw_device.
 
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-cdev.c   |    8 +++++---
- drivers/firewire/fw-device.c |   20 ++++++++++++++------
- drivers/firewire/fw-device.h |    2 +-
- 3 files changed, 20 insertions(+), 10 deletions(-)
+ drivers/firewire/fw-ohci.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
-Index: linux/drivers/firewire/fw-device.c
-===================================================================
---- linux.orig/drivers/firewire/fw-device.c
-+++ linux/drivers/firewire/fw-device.c
-@@ -610,12 +610,14 @@ static DECLARE_RWSEM(idr_rwsem);
- static DEFINE_IDR(fw_device_idr);
- int fw_cdev_major;
- 
--struct fw_device *fw_device_from_devt(dev_t devt)
-+struct fw_device *fw_device_get_by_devt(dev_t devt)
- {
- 	struct fw_device *device;
- 
- 	down_read(&idr_rwsem);
- 	device = idr_find(&fw_device_idr, MINOR(devt));
-+	if (device)
-+		fw_device_get(device);
- 	up_read(&idr_rwsem);
- 
- 	return device;
-@@ -627,13 +629,14 @@ static void fw_device_shutdown(struct wo
- 		container_of(work, struct fw_device, work.work);
- 	int minor = MINOR(device->device.devt);
- 
--	down_write(&idr_rwsem);
--	idr_remove(&fw_device_idr, minor);
--	up_write(&idr_rwsem);
--
- 	fw_device_cdev_remove(device);
- 	device_for_each_child(&device->device, NULL, shutdown_unit);
- 	device_unregister(&device->device);
-+
-+	down_write(&idr_rwsem);
-+	idr_remove(&fw_device_idr, minor);
-+	up_write(&idr_rwsem);
-+	fw_device_put(device);
- }
- 
- static struct device_type fw_device_type = {
-@@ -682,10 +685,13 @@ static void fw_device_init(struct work_s
- 	}
- 
- 	err = -ENOMEM;
-+
-+	fw_device_get(device);
- 	down_write(&idr_rwsem);
- 	if (idr_pre_get(&fw_device_idr, GFP_KERNEL))
- 		err = idr_get_new(&fw_device_idr, device, &minor);
- 	up_write(&idr_rwsem);
-+
- 	if (err < 0)
- 		goto error;
- 
-@@ -741,7 +747,9 @@ static void fw_device_init(struct work_s
- 	idr_remove(&fw_device_idr, minor);
- 	up_write(&idr_rwsem);
-  error:
--	put_device(&device->device);
-+	fw_device_put(device);		/* fw_device_idr's reference */
-+
-+	put_device(&device->device);	/* our reference */
- }
- 
- static int update_unit(struct device *dev, void *data)
-Index: linux/drivers/firewire/fw-cdev.c
+Index: linux/drivers/firewire/fw-ohci.c
 ===================================================================
---- linux.orig/drivers/firewire/fw-cdev.c
-+++ linux/drivers/firewire/fw-cdev.c
-@@ -109,15 +109,17 @@ static int fw_device_op_open(struct inod
- 	struct client *client;
- 	unsigned long flags;
- 
--	device = fw_device_from_devt(inode->i_rdev);
-+	device = fw_device_get_by_devt(inode->i_rdev);
- 	if (device == NULL)
- 		return -ENODEV;
- 
- 	client = kzalloc(sizeof(*client), GFP_KERNEL);
--	if (client == NULL)
-+	if (client == NULL) {
-+		fw_device_put(device);
- 		return -ENOMEM;
-+	}
- 
--	client->device = fw_device_get(device);
-+	client->device = device;
- 	INIT_LIST_HEAD(&client->event_list);
- 	INIT_LIST_HEAD(&client->resource_list);
- 	spin_lock_init(&client->lock);
-Index: linux/drivers/firewire/fw-device.h
-===================================================================
---- linux.orig/drivers/firewire/fw-device.h
-+++ linux/drivers/firewire/fw-device.h
-@@ -77,13 +77,13 @@ fw_device_is_shutdown(struct fw_device *
- }
- 
- struct fw_device *fw_device_get(struct fw_device *device);
-+struct fw_device *fw_device_get_by_devt(dev_t devt);
- void fw_device_put(struct fw_device *device);
- int fw_device_enable_phys_dma(struct fw_device *device);
- 
- void fw_device_cdev_update(struct fw_device *device);
- void fw_device_cdev_remove(struct fw_device *device);
- 
--struct fw_device *fw_device_from_devt(dev_t devt);
- extern int fw_cdev_major;
+--- linux.orig/drivers/firewire/fw-ohci.c
++++ linux/drivers/firewire/fw-ohci.c
+@@ -375,7 +375,7 @@ static __le32 *handle_ar_packet(struct a
+ 	 */
  
- struct fw_unit {
+ 	if (p.ack + 16 == 0x09)
+-		ohci->request_generation = (buffer[2] >> 16) & 0xff;
++		ohci->request_generation = (p.header[2] >> 16) & 0xff;
+ 	else if (ctx == &ohci->ar_request_ctx)
+ 		fw_core_handle_request(&ohci->card, &p);
+ 	else
 
 -- 
 Stefan Richter
--=====-==--- --=- ---=-
+-=====-==--- --=- =-===
 http://arcgraph.de/sr/
 
 
-This should help to interpret user reports.  E.g. one can look up the
-vendor OUI (first three bytes of the GUID) and thus tell what is what.
-
-Also simplifies the math in the GUID sysfs attribute.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-device.c |   28 +++++++++++++++++-----------
- 1 file changed, 17 insertions(+), 11 deletions(-)
-
-Index: linux/drivers/firewire/fw-device.c
+Kills warnings from 'make C=1 CHECKFLAGS="-D__CHECK_ENDIAN__" modules':
+
+drivers/firewire/fw-transaction.c:771:10: warning: incorrect type in assignment (different base types)
+drivers/firewire/fw-transaction.c:771:10:    expected unsigned int [unsigned] [usertype] <noident>
+drivers/firewire/fw-transaction.c:771:10:    got restricted unsigned int [usertype] <noident>
+drivers/firewire/fw-transaction.h:93:10: warning: incorrect type in assignment (different base types)
+drivers/firewire/fw-transaction.h:93:10:    expected unsigned int [unsigned] [usertype] <noident>
+drivers/firewire/fw-transaction.h:93:10:    got restricted unsigned int [usertype] <noident>
+drivers/firewire/fw-ohci.c:1490:8: warning: restricted degrades to integer
+drivers/firewire/fw-ohci.c:1490:35: warning: restricted degrades to integer
+drivers/firewire/fw-ohci.c:1516:5: warning: cast to restricted type
+
+Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
+Cc: sparclinux at vger.kernel.org
+Cc: linuxppc-dev at ozlabs.org
+---
+ drivers/firewire/fw-ohci.c        |    4 ++--
+ drivers/firewire/fw-transaction.c |    2 +-
+ drivers/firewire/fw-transaction.h |    6 +++---
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+Index: linux/drivers/firewire/fw-ohci.c
+===================================================================
+--- linux.orig/drivers/firewire/fw-ohci.c
++++ linux/drivers/firewire/fw-ohci.c
+@@ -1487,7 +1487,7 @@ static int handle_ir_dualbuffer_packet(s
+ 	void *p, *end;
+ 	int i;
+ 
+-	if (db->first_res_count > 0 && db->second_res_count > 0) {
++	if (db->first_res_count != 0 && db->second_res_count != 0) {
+ 		if (ctx->excess_bytes <= le16_to_cpu(db->second_req_count)) {
+ 			/* This descriptor isn't done yet, stop iteration. */
+ 			return 0;
+@@ -1513,7 +1513,7 @@ static int handle_ir_dualbuffer_packet(s
+ 		memcpy(ctx->header + i + 4, p + 8, ctx->base.header_size - 4);
+ 		i += ctx->base.header_size;
+ 		ctx->excess_bytes +=
+-			(le32_to_cpu(*(u32 *)(p + 4)) >> 16) & 0xffff;
++			(le32_to_cpu(*(__le32 *)(p + 4)) >> 16) & 0xffff;
+ 		p += ctx->base.header_size + 4;
+ 	}
+ 	ctx->header_length = i;
+Index: linux/drivers/firewire/fw-transaction.c
 ===================================================================
---- linux.orig/drivers/firewire/fw-device.c
-+++ linux/drivers/firewire/fw-device.c
-@@ -358,12 +358,9 @@ static ssize_t
- guid_show(struct device *dev, struct device_attribute *attr, char *buf)
+--- linux.orig/drivers/firewire/fw-transaction.c
++++ linux/drivers/firewire/fw-transaction.c
+@@ -751,7 +751,7 @@ handle_topology_map(struct fw_card *card
+ 		    void *payload, size_t length, void *callback_data)
  {
- 	struct fw_device *device = fw_device(dev);
--	u64 guid;
+ 	int i, start, end;
+-	u32 *map;
++	__be32 *map;
+ 
+ 	if (!TCODE_IS_READ_REQUEST(tcode)) {
+ 		fw_send_response(card, request, RCODE_TYPE_ERROR);
+Index: linux/drivers/firewire/fw-transaction.h
+===================================================================
+--- linux.orig/drivers/firewire/fw-transaction.h
++++ linux/drivers/firewire/fw-transaction.h
+@@ -85,12 +85,12 @@
+ static inline void
+ fw_memcpy_from_be32(void *_dst, void *_src, size_t size)
+ {
+-	u32 *dst = _dst;
+-	u32 *src = _src;
++	u32    *dst = _dst;
++	__be32 *src = _src;
+ 	int i;
  
--	guid = ((u64)device->config_rom[3] << 32) | device->config_rom[4];
--
--	return snprintf(buf, PAGE_SIZE, "0x%016llx\n",
--			(unsigned long long)guid);
-+	return snprintf(buf, PAGE_SIZE, "0x%08x%08x\n",
-+			device->config_rom[3], device->config_rom[4]);
+ 	for (i = 0; i < size / 4; i++)
+-		dst[i] = cpu_to_be32(src[i]);
++		dst[i] = be32_to_cpu(src[i]);
  }
  
- static struct device_attribute fw_device_attributes[] = {
-@@ -723,13 +720,22 @@ static void fw_device_init(struct work_s
- 	 */
- 	if (atomic_cmpxchg(&device->state,
- 		    FW_DEVICE_INITIALIZING,
--		    FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN)
-+		    FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) {
- 		fw_device_shutdown(&device->work.work);
--	else
--		fw_notify("created new fw device %s "
--			  "(%d config rom retries, S%d00)\n",
--			  device->device.bus_id, device->config_rom_retries,
--			  1 << device->max_speed);
-+	} else {
-+		if (device->config_rom_retries)
-+			fw_notify("created device %s: GUID %08x%08x, S%d00, "
-+				  "%d config ROM retries\n",
-+				  device->device.bus_id,
-+				  device->config_rom[3], device->config_rom[4],
-+				  1 << device->max_speed,
-+				  device->config_rom_retries);
-+		else
-+			fw_notify("created device %s: GUID %08x%08x, S%d00\n",
-+				  device->device.bus_id,
-+				  device->config_rom[3], device->config_rom[4],
-+				  1 << device->max_speed);
-+	}
- 
- 	/*
- 	 * Reschedule the IRM work if we just finished reading the
+ static inline void
 
 -- 
 Stefan Richter
--=====-==--- --=- ---==
+-=====-==--- --=- =-===
 http://arcgraph.de/sr/
 
 
-Several different SBP-2 bridges accept a login early while the IDE
-device is still powering up.  They are therefore unable to respond to
-SCSI INQUIRY immediately, and the SCSI core has to retry the INQUIRY.
-One of these retries is typically successful, and all is well.
-
-But in case of Momobay FX-3A, the INQUIRY retries tend to fail entirely.
-This can usually be avoided by waiting a little while after login before
-letting the SCSI core send the INQUIRY.  The old sbp2 driver handles
-this more gracefully for as yet unknown reasons (perhaps because it
-waits for fetch agent resets to complete, unlike fw-sbp2 which quickly
-proceeds after requesting the agent reset).  Therefore the workaround is
-not as much necessary for sbp2.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |   15 +++++++++++++++
- 1 file changed, 15 insertions(+)
-
-Index: linux/drivers/firewire/fw-sbp2.c
-===================================================================
---- linux.orig/drivers/firewire/fw-sbp2.c
-+++ linux/drivers/firewire/fw-sbp2.c
-@@ -32,6 +32,7 @@
- #include <linux/module.h>
- #include <linux/moduleparam.h>
- #include <linux/mod_devicetable.h>
-+#include <linux/delay.h>
- #include <linux/device.h>
- #include <linux/scatterlist.h>
- #include <linux/dma-mapping.h>
-@@ -82,6 +83,9 @@ MODULE_PARM_DESC(exclusive_login, "Exclu
-  *   Avoids access beyond actual disk limits on devices with an off-by-one bug.
-  *   Don't use this with devices which don't have this bug.
-  *
-+ * - delay inquiry
-+ *   Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
-+ *
-  * - override internal blacklist
-  *   Instead of adding to the built-in blacklist, use only the workarounds
-  *   specified in the module load parameter.
-@@ -91,6 +95,8 @@ MODULE_PARM_DESC(exclusive_login, "Exclu
- #define SBP2_WORKAROUND_INQUIRY_36	0x2
- #define SBP2_WORKAROUND_MODE_SENSE_8	0x4
- #define SBP2_WORKAROUND_FIX_CAPACITY	0x8
-+#define SBP2_WORKAROUND_DELAY_INQUIRY	0x10
-+#define SBP2_INQUIRY_DELAY		12
- #define SBP2_WORKAROUND_OVERRIDE	0x100
- 
- static int sbp2_param_workarounds;
-@@ -100,6 +106,7 @@ MODULE_PARM_DESC(workarounds, "Work arou
- 	", 36 byte inquiry = "    __stringify(SBP2_WORKAROUND_INQUIRY_36)
- 	", skip mode page 8 = "   __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
- 	", fix capacity = "       __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
-+	", delay inquiry = "      __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
- 	", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
- 	", or a combination)");
- 
-@@ -303,6 +310,11 @@ static const struct {
- 		.workarounds		= SBP2_WORKAROUND_INQUIRY_36 |
- 					  SBP2_WORKAROUND_MODE_SENSE_8,
- 	},
-+	/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
-+		.firmware_revision	= 0x002800,
-+		.model			= 0x000000,
-+		.workarounds		= SBP2_WORKAROUND_DELAY_INQUIRY,
-+	},
- 	/* Initio bridges, actually only needed for some older ones */ {
- 		.firmware_revision	= 0x000200,
- 		.model			= ~0,
-@@ -712,6 +724,9 @@ static void sbp2_login(struct work_struc
- 	PREPARE_DELAYED_WORK(&lu->work, sbp2_reconnect);
- 	sbp2_agent_reset(lu);
- 
-+	if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
-+		ssleep(SBP2_INQUIRY_DELAY);
-+
- 	memset(&eight_bytes_lun, 0, sizeof(eight_bytes_lun));
- 	eight_bytes_lun.scsi_lun[0] = (lu->lun >> 8) & 0xff;
- 	eight_bytes_lun.scsi_lun[1] = lu->lun & 0xff;
-
--- 
-Stefan Richter
--=====-==--- --=- ---==
-http://arcgraph.de/sr/
-
+Patch "firewire: fw-sbp2: fix NULL pointer deref. in scsi_remove_device"
+had the unintended effect that firewire-sbp2 could not be unloaded
+anymore until all SBP-2 devices were unplugged.
 
-Add the same workaround as found in fw-sbp2 for feature parity and
-compatibility of the workarounds module parameter.
+We now fix the NULL pointer bug by reacquiring a reference to the sdev
+instead of holding a reference to the sdev (and to the module) all the
+time.
 
 Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
 ---
- drivers/ieee1394/sbp2.c |   12 ++++++++++++
- drivers/ieee1394/sbp2.h |    2 ++
- 2 files changed, 14 insertions(+)
 
-Index: linux/drivers/ieee1394/sbp2.c
-===================================================================
---- linux.orig/drivers/ieee1394/sbp2.c
-+++ linux/drivers/ieee1394/sbp2.c
-@@ -183,6 +183,9 @@ MODULE_PARM_DESC(exclusive_login, "Exclu
-  *   Avoids access beyond actual disk limits on devices with an off-by-one bug.
-  *   Don't use this with devices which don't have this bug.
-  *
-+ * - delay inquiry
-+ *   Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
-+ *
-  * - override internal blacklist
-  *   Instead of adding to the built-in blacklist, use only the workarounds
-  *   specified in the module load parameter.
-@@ -195,6 +198,7 @@ MODULE_PARM_DESC(workarounds, "Work arou
- 	", 36 byte inquiry = "    __stringify(SBP2_WORKAROUND_INQUIRY_36)
- 	", skip mode page 8 = "   __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
- 	", fix capacity = "       __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
-+	", delay inquiry = "      __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
- 	", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
- 	", or a combination)");
- 
-@@ -357,6 +361,11 @@ static const struct {
- 		.workarounds		= SBP2_WORKAROUND_INQUIRY_36 |
- 					  SBP2_WORKAROUND_MODE_SENSE_8,
- 	},
-+	/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
-+		.firmware_revision	= 0x002800,
-+		.model_id		= 0x000000,
-+		.workarounds		= SBP2_WORKAROUND_DELAY_INQUIRY,
-+	},
- 	/* Initio bridges, actually only needed for some older ones */ {
- 		.firmware_revision	= 0x000200,
- 		.model_id		= SBP2_ROM_VALUE_WILDCARD,
-@@ -914,6 +923,9 @@ static int sbp2_start_device(struct sbp2
- 	sbp2_agent_reset(lu, 1);
- 	sbp2_max_speed_and_size(lu);
- 
-+	if (lu->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
-+		ssleep(SBP2_INQUIRY_DELAY);
-+
- 	error = scsi_add_device(lu->shost, 0, lu->ud->id, 0);
- 	if (error) {
- 		SBP2_ERR("scsi_add_device failed");
-Index: linux/drivers/ieee1394/sbp2.h
-===================================================================
---- linux.orig/drivers/ieee1394/sbp2.h
-+++ linux/drivers/ieee1394/sbp2.h
-@@ -343,6 +343,8 @@ enum sbp2lu_state_types {
- #define SBP2_WORKAROUND_INQUIRY_36	0x2
- #define SBP2_WORKAROUND_MODE_SENSE_8	0x4
- #define SBP2_WORKAROUND_FIX_CAPACITY	0x8
-+#define SBP2_WORKAROUND_DELAY_INQUIRY	0x10
-+#define SBP2_INQUIRY_DELAY		12
- #define SBP2_WORKAROUND_OVERRIDE	0x100
- 
- #endif /* SBP2_H */
+This applies on top of current linux-2.6.git master as well as on top of
+linux1394-2.6.git master.
 
--- 
-Stefan Richter
--=====-==--- --=- ---==
-http://arcgraph.de/sr/
-
-
-Like the old sbp2 driver, wait for the write transaction to the
-AGENT_RESET to complete before proceeding (after login, after reconnect,
-or in SCSI error handling).
-
-There is one occasion where AGENT_RESET is written to from atomic
-context when getting DEAD status for a command ORB.  There we still
-continue without waiting for the transaction to complete because this
-is more difficult to fix...
 
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |   39 ++++++++++++++++++++++++++-----------
- 1 file changed, 28 insertions(+), 11 deletions(-)
+ drivers/firewire/fw-sbp2.c |   46 +++++++++++++++++++++----------------
+ 1 file changed, 27 insertions(+), 19 deletions(-)
 
 Index: linux/drivers/firewire/fw-sbp2.c
 ===================================================================
 --- linux.orig/drivers/firewire/fw-sbp2.c
 +++ linux/drivers/firewire/fw-sbp2.c
-@@ -603,29 +603,46 @@ sbp2_send_management_orb(struct sbp2_log
+@@ -122,7 +122,6 @@ static const char sbp2_driver_name[] = "
+ struct sbp2_logical_unit {
+ 	struct sbp2_target *tgt;
+ 	struct list_head link;
+-	struct scsi_device *sdev;
+ 	struct fw_address_handler address_handler;
+ 	struct list_head orb_list;
  
- static void
- complete_agent_reset_write(struct fw_card *card, int rcode,
--			   void *payload, size_t length, void *data)
-+			   void *payload, size_t length, void *done)
- {
--	struct fw_transaction *t = data;
-+	complete(done);
-+}
-+
-+static void sbp2_agent_reset(struct sbp2_logical_unit *lu)
-+{
-+	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
-+	DECLARE_COMPLETION_ONSTACK(done);
-+	struct fw_transaction t;
-+	static u32 z;
- 
--	kfree(t);
-+	fw_send_request(device->card, &t, TCODE_WRITE_QUADLET_REQUEST,
-+			lu->tgt->node_id, lu->generation, device->max_speed,
-+			lu->command_block_agent_address + SBP2_AGENT_RESET,
-+			&z, sizeof(z), complete_agent_reset_write, &done);
-+	wait_for_completion(&done);
+@@ -139,6 +138,7 @@ struct sbp2_logical_unit {
+ 	int generation;
+ 	int retries;
+ 	struct delayed_work work;
++	bool has_sdev;
+ 	bool blocked;
+ };
+ 
+@@ -751,20 +751,33 @@ static void sbp2_unblock(struct sbp2_tar
+ 	scsi_unblock_requests(shost);
  }
  
--static int sbp2_agent_reset(struct sbp2_logical_unit *lu)
-+static void
-+complete_agent_reset_write_no_wait(struct fw_card *card, int rcode,
-+				   void *payload, size_t length, void *data)
++static int sbp2_lun2int(u16 lun)
 +{
-+	kfree(data);
++	struct scsi_lun eight_bytes_lun;
++
++	memset(&eight_bytes_lun, 0, sizeof(eight_bytes_lun));
++	eight_bytes_lun.scsi_lun[0] = (lun >> 8) & 0xff;
++	eight_bytes_lun.scsi_lun[1] = lun & 0xff;
++
++	return scsilun_to_int(&eight_bytes_lun);
 +}
 +
-+static void sbp2_agent_reset_no_wait(struct sbp2_logical_unit *lu)
+ static void sbp2_release_target(struct kref *kref)
  {
- 	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
- 	struct fw_transaction *t;
--	static u32 zero;
-+	static u32 z;
- 
--	t = kzalloc(sizeof(*t), GFP_ATOMIC);
-+	t = kmalloc(sizeof(*t), GFP_ATOMIC);
- 	if (t == NULL)
--		return -ENOMEM;
-+		return;
+ 	struct sbp2_target *tgt = container_of(kref, struct sbp2_target, kref);
+ 	struct sbp2_logical_unit *lu, *next;
+ 	struct Scsi_Host *shost =
+ 		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
++	struct scsi_device *sdev;
+ 
+ 	/* prevent deadlocks */
+ 	sbp2_unblock(tgt);
+ 
+ 	list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
+-		if (lu->sdev) {
+-			scsi_remove_device(lu->sdev);
+-			scsi_device_put(lu->sdev);
++		sdev = scsi_device_lookup(shost, 0, 0, sbp2_lun2int(lu->lun));
++		if (sdev) {
++			scsi_remove_device(sdev);
++			scsi_device_put(sdev);
+ 		}
+ 		sbp2_send_management_orb(lu, tgt->node_id, lu->generation,
+ 				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
+@@ -807,7 +820,6 @@ static void sbp2_login(struct work_struc
+ 	struct fw_device *device = fw_device(tgt->unit->device.parent);
+ 	struct Scsi_Host *shost;
+ 	struct scsi_device *sdev;
+-	struct scsi_lun eight_bytes_lun;
+ 	struct sbp2_login_response response;
+ 	int generation, node_id, local_node_id;
+ 
+@@ -820,7 +832,7 @@ static void sbp2_login(struct work_struc
+ 	local_node_id = device->card->node_id;
+ 
+ 	/* If this is a re-login attempt, log out, or we might be rejected. */
+-	if (lu->sdev)
++	if (lu->has_sdev)
+ 		sbp2_send_management_orb(lu, device->node_id, generation,
+ 				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
+ 
+@@ -859,7 +871,7 @@ static void sbp2_login(struct work_struc
+ 	sbp2_agent_reset(lu);
+ 
+ 	/* This was a re-login. */
+-	if (lu->sdev) {
++	if (lu->has_sdev) {
+ 		sbp2_cancel_orbs(lu);
+ 		sbp2_conditionally_unblock(lu);
+ 		goto out;
+@@ -868,13 +880,8 @@ static void sbp2_login(struct work_struc
+ 	if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
+ 		ssleep(SBP2_INQUIRY_DELAY);
  
- 	fw_send_request(device->card, t, TCODE_WRITE_QUADLET_REQUEST,
- 			lu->tgt->node_id, lu->generation, device->max_speed,
- 			lu->command_block_agent_address + SBP2_AGENT_RESET,
--			&zero, sizeof(zero), complete_agent_reset_write, t);
+-	memset(&eight_bytes_lun, 0, sizeof(eight_bytes_lun));
+-	eight_bytes_lun.scsi_lun[0] = (lu->lun >> 8) & 0xff;
+-	eight_bytes_lun.scsi_lun[1] = lu->lun & 0xff;
+ 	shost = container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
 -
--	return 0;
-+			&z, sizeof(z), complete_agent_reset_write_no_wait, t);
- }
+-	sdev = __scsi_add_device(shost, 0, 0,
+-				 scsilun_to_int(&eight_bytes_lun), lu);
++	sdev = __scsi_add_device(shost, 0, 0, sbp2_lun2int(lu->lun), lu);
+ 	/*
+ 	 * FIXME:  We are unable to perform reconnects while in sbp2_login().
+ 	 * Therefore __scsi_add_device() will get into trouble if a bus reset
+@@ -896,7 +903,8 @@ static void sbp2_login(struct work_struc
+ 	}
  
- static void sbp2_release_target(struct kref *kref)
-@@ -1110,7 +1127,7 @@ complete_command_orb(struct sbp2_orb *ba
+ 	/* No error during __scsi_add_device() */
+-	lu->sdev = sdev;
++	lu->has_sdev = true;
++	scsi_device_put(sdev);
+ 	sbp2_allow_block(lu);
+ 	goto out;
  
- 	if (status != NULL) {
- 		if (STATUS_GET_DEAD(*status))
--			sbp2_agent_reset(orb->lu);
-+			sbp2_agent_reset_no_wait(orb->lu);
+@@ -934,11 +942,11 @@ static int sbp2_add_logical_unit(struct 
+ 		return -ENOMEM;
+ 	}
  
- 		switch (STATUS_GET_RESPONSE(*status)) {
- 		case SBP2_STATUS_REQUEST_COMPLETE:
+-	lu->tgt  = tgt;
+-	lu->sdev = NULL;
+-	lu->lun  = lun_entry & 0xffff;
+-	lu->retries = 0;
+-	lu->blocked = false;
++	lu->tgt      = tgt;
++	lu->lun      = lun_entry & 0xffff;
++	lu->retries  = 0;
++	lu->has_sdev = false;
++	lu->blocked  = false;
+ 	++tgt->dont_block;
+ 	INIT_LIST_HEAD(&lu->orb_list);
+ 	INIT_DELAYED_WORK(&lu->work, sbp2_login);
 
 -- 
 Stefan Richter
--=====-==--- --=- ---==
+-=====-==--- --=- ==-=-
 http://arcgraph.de/sr/
 
 
-for easier readable logs if more than one SBP-2 device is present.
+The bus management workqueue job was in danger to dereference NULL
+pointers.  Also, after having temporarily lifted card->lock, a few node
+pointers and a device pointer may have become invalid.
+
+Add NULL pointer checks and get the necessary references.  Also, move
+card->local_node out of fw_card_bm_work's sight during shutdown of the
+card.
 
 Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
 ---
- drivers/firewire/fw-sbp2.c |   66 ++++++++++++++++++-------------------
- 1 file changed, 33 insertions(+), 33 deletions(-)
+ drivers/firewire/fw-card.c     |   51 ++++++++++++++++++++++-----------
+ drivers/firewire/fw-topology.c |    1 
+ 2 files changed, 35 insertions(+), 17 deletions(-)
 
-Index: linux/drivers/firewire/fw-sbp2.c
+Index: linux/drivers/firewire/fw-card.c
 ===================================================================
---- linux.orig/drivers/firewire/fw-sbp2.c
-+++ linux/drivers/firewire/fw-sbp2.c
-@@ -149,6 +149,7 @@ struct sbp2_target {
- 	struct kref kref;
- 	struct fw_unit *unit;
- 	struct list_head lu_list;
-+	const char *bus_id;
- 
- 	u64 management_agent_address;
- 	int directory_id;
-@@ -566,20 +567,20 @@ sbp2_send_management_orb(struct sbp2_log
- 
- 	retval = -EIO;
- 	if (sbp2_cancel_orbs(lu) == 0) {
--		fw_error("orb reply timed out, rcode=0x%02x\n",
--			 orb->base.rcode);
-+		fw_error("%s: orb reply timed out, rcode=0x%02x\n",
-+			 lu->tgt->bus_id, orb->base.rcode);
- 		goto out;
- 	}
+--- linux.orig/drivers/firewire/fw-card.c
++++ linux/drivers/firewire/fw-card.c
+@@ -214,17 +214,29 @@ static void
+ fw_card_bm_work(struct work_struct *work)
+ {
+ 	struct fw_card *card = container_of(work, struct fw_card, work.work);
+-	struct fw_device *root;
++	struct fw_device *root_device;
++	struct fw_node *root_node, *local_node;
+ 	struct bm_data bmd;
+ 	unsigned long flags;
+ 	int root_id, new_root_id, irm_id, gap_count, generation, grace;
+ 	int do_reset = 0;
  
- 	if (orb->base.rcode != RCODE_COMPLETE) {
--		fw_error("management write failed, rcode 0x%02x\n",
--			 orb->base.rcode);
-+		fw_error("%s: management write failed, rcode 0x%02x\n",
-+			 lu->tgt->bus_id, orb->base.rcode);
- 		goto out;
- 	}
+ 	spin_lock_irqsave(&card->lock, flags);
++	local_node = card->local_node;
++	root_node  = card->root_node;
++
++	if (local_node == NULL) {
++		spin_unlock_irqrestore(&card->lock, flags);
++		return;
++	}
++	fw_node_get(local_node);
++	fw_node_get(root_node);
  
- 	if (STATUS_GET_RESPONSE(orb->status) != 0 ||
- 	    STATUS_GET_SBP_STATUS(orb->status) != 0) {
--		fw_error("error status: %d:%d\n",
-+		fw_error("%s: error status: %d:%d\n", lu->tgt->bus_id,
- 			 STATUS_GET_RESPONSE(orb->status),
- 			 STATUS_GET_SBP_STATUS(orb->status));
- 		goto out;
-@@ -664,7 +665,7 @@ static void sbp2_release_target(struct k
- 		kfree(lu);
+ 	generation = card->generation;
+-	root = card->root_node->data;
+-	root_id = card->root_node->node_id;
++	root_device = root_node->data;
++	if (root_device)
++		fw_device_get(root_device);
++	root_id = root_node->node_id;
+ 	grace = time_after(jiffies, card->reset_jiffies + DIV_ROUND_UP(HZ, 10));
+ 
+ 	if (card->bm_generation + 1 == generation ||
+@@ -243,14 +255,14 @@ fw_card_bm_work(struct work_struct *work
+ 
+ 		irm_id = card->irm_node->node_id;
+ 		if (!card->irm_node->link_on) {
+-			new_root_id = card->local_node->node_id;
++			new_root_id = local_node->node_id;
+ 			fw_notify("IRM has link off, making local node (%02x) root.\n",
+ 				  new_root_id);
+ 			goto pick_me;
+ 		}
+ 
+ 		bmd.lock.arg = cpu_to_be32(0x3f);
+-		bmd.lock.data = cpu_to_be32(card->local_node->node_id);
++		bmd.lock.data = cpu_to_be32(local_node->node_id);
+ 
+ 		spin_unlock_irqrestore(&card->lock, flags);
+ 
+@@ -267,12 +279,12 @@ fw_card_bm_work(struct work_struct *work
+ 			 * Another bus reset happened. Just return,
+ 			 * the BM work has been rescheduled.
+ 			 */
+-			return;
++			goto out;
+ 		}
+ 
+ 		if (bmd.rcode == RCODE_COMPLETE && bmd.old != 0x3f)
+ 			/* Somebody else is BM, let them do the work. */
+-			return;
++			goto out;
+ 
+ 		spin_lock_irqsave(&card->lock, flags);
+ 		if (bmd.rcode != RCODE_COMPLETE) {
+@@ -282,7 +294,7 @@ fw_card_bm_work(struct work_struct *work
+ 			 * do a bus reset and pick the local node as
+ 			 * root, and thus, IRM.
+ 			 */
+-			new_root_id = card->local_node->node_id;
++			new_root_id = local_node->node_id;
+ 			fw_notify("BM lock failed, making local node (%02x) root.\n",
+ 				  new_root_id);
+ 			goto pick_me;
+@@ -295,7 +307,7 @@ fw_card_bm_work(struct work_struct *work
+ 		 */
+ 		spin_unlock_irqrestore(&card->lock, flags);
+ 		schedule_delayed_work(&card->work, DIV_ROUND_UP(HZ, 10));
+-		return;
++		goto out;
  	}
- 	scsi_remove_host(shost);
--	fw_notify("released %s\n", tgt->unit->device.bus_id);
-+	fw_notify("released %s\n", tgt->bus_id);
  
- 	put_device(&tgt->unit->device);
- 	scsi_host_put(shost);
-@@ -693,12 +694,11 @@ static void sbp2_login(struct work_struc
- {
- 	struct sbp2_logical_unit *lu =
- 		container_of(work, struct sbp2_logical_unit, work.work);
--	struct Scsi_Host *shost =
--		container_of((void *)lu->tgt, struct Scsi_Host, hostdata[0]);
-+	struct sbp2_target *tgt = lu->tgt;
-+	struct fw_device *device = fw_device(tgt->unit->device.parent);
-+	struct Scsi_Host *shost;
- 	struct scsi_device *sdev;
- 	struct scsi_lun eight_bytes_lun;
--	struct fw_unit *unit = lu->tgt->unit;
--	struct fw_device *device = fw_device(unit->device.parent);
- 	struct sbp2_login_response response;
- 	int generation, node_id, local_node_id;
+ 	/*
+@@ -305,20 +317,20 @@ fw_card_bm_work(struct work_struct *work
+ 	 */
+ 	card->bm_generation = generation;
  
-@@ -715,14 +715,14 @@ static void sbp2_login(struct work_struc
- 		if (lu->retries++ < 5)
- 			sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
- 		else
--			fw_error("failed to login to %s LUN %04x\n",
--				 unit->device.bus_id, lu->lun);
-+			fw_error("%s: failed to login to LUN %04x\n",
-+				 tgt->bus_id, lu->lun);
- 		goto out;
+-	if (root == NULL) {
++	if (root_device == NULL) {
+ 		/*
+ 		 * Either link_on is false, or we failed to read the
+ 		 * config rom.  In either case, pick another root.
+ 		 */
+-		new_root_id = card->local_node->node_id;
+-	} else if (atomic_read(&root->state) != FW_DEVICE_RUNNING) {
++		new_root_id = local_node->node_id;
++	} else if (atomic_read(&root_device->state) != FW_DEVICE_RUNNING) {
+ 		/*
+ 		 * If we haven't probed this device yet, bail out now
+ 		 * and let's try again once that's done.
+ 		 */
+ 		spin_unlock_irqrestore(&card->lock, flags);
+-		return;
+-	} else if (root->config_rom[2] & BIB_CMC) {
++		goto out;
++	} else if (root_device->config_rom[2] & BIB_CMC) {
+ 		/*
+ 		 * FIXME: I suppose we should set the cmstr bit in the
+ 		 * STATE_CLEAR register of this node, as described in
+@@ -332,7 +344,7 @@ fw_card_bm_work(struct work_struct *work
+ 		 * successfully read the config rom, but it's not
+ 		 * cycle master capable.
+ 		 */
+-		new_root_id = card->local_node->node_id;
++		new_root_id = local_node->node_id;
  	}
  
--	lu->generation        = generation;
--	lu->tgt->node_id      = node_id;
--	lu->tgt->address_high = local_node_id << 16;
-+	lu->generation    = generation;
-+	tgt->node_id	  = node_id;
-+	tgt->address_high = local_node_id << 16;
- 
- 	/* Get command block agent offset and login id. */
- 	lu->command_block_agent_address =
-@@ -730,8 +730,8 @@ static void sbp2_login(struct work_struc
- 		response.command_block_agent.low;
- 	lu->login_id = LOGIN_RESPONSE_GET_LOGIN_ID(response);
- 
--	fw_notify("logged in to %s LUN %04x (%d retries)\n",
--		  unit->device.bus_id, lu->lun, lu->retries);
-+	fw_notify("%s: logged in to LUN %04x (%d retries)\n",
-+		  tgt->bus_id, lu->lun, lu->retries);
- 
- #if 0
- 	/* FIXME: The linux1394 sbp2 does this last step. */
-@@ -747,6 +747,7 @@ static void sbp2_login(struct work_struc
- 	memset(&eight_bytes_lun, 0, sizeof(eight_bytes_lun));
- 	eight_bytes_lun.scsi_lun[0] = (lu->lun >> 8) & 0xff;
- 	eight_bytes_lun.scsi_lun[1] = lu->lun & 0xff;
-+	shost = container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
- 
- 	sdev = __scsi_add_device(shost, 0, 0,
- 				 scsilun_to_int(&eight_bytes_lun), lu);
-@@ -791,7 +792,7 @@ static void sbp2_login(struct work_struc
+  pick_me:
+@@ -341,8 +353,8 @@ fw_card_bm_work(struct work_struct *work
+ 	 * the typically much larger 1394b beta repeater delays though.
  	 */
- 	PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
-  out:
--	sbp2_target_put(lu->tgt);
-+	sbp2_target_put(tgt);
+ 	if (!card->beta_repeaters_present &&
+-	    card->root_node->max_hops < ARRAY_SIZE(gap_count_table))
+-		gap_count = gap_count_table[card->root_node->max_hops];
++	    root_node->max_hops < ARRAY_SIZE(gap_count_table))
++		gap_count = gap_count_table[root_node->max_hops];
+ 	else
+ 		gap_count = 63;
+ 
+@@ -364,6 +376,11 @@ fw_card_bm_work(struct work_struct *work
+ 		fw_send_phy_config(card, new_root_id, generation, gap_count);
+ 		fw_core_initiate_bus_reset(card, 1);
+ 	}
++ out:
++	if (root_device)
++		fw_device_put(root_device);
++	fw_node_put(root_node);
++	fw_node_put(local_node);
  }
  
- static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
-@@ -874,7 +875,7 @@ static int sbp2_scan_unit_dir(struct sbp
- 			if (timeout > tgt->mgt_orb_timeout)
- 				fw_notify("%s: config rom contains %ds "
- 					  "management ORB timeout, limiting "
--					  "to %ds\n", tgt->unit->device.bus_id,
-+					  "to %ds\n", tgt->bus_id,
- 					  timeout / 1000,
- 					  tgt->mgt_orb_timeout / 1000);
- 			break;
-@@ -902,7 +903,7 @@ static void sbp2_init_workarounds(struct
- 	if (w)
- 		fw_notify("Please notify linux1394-devel at lists.sourceforge.net "
- 			  "if you need the workarounds parameter for %s\n",
--			  tgt->unit->device.bus_id);
-+			  tgt->bus_id);
- 
- 	if (w & SBP2_WORKAROUND_OVERRIDE)
- 		goto out;
-@@ -924,8 +925,7 @@ static void sbp2_init_workarounds(struct
- 	if (w)
- 		fw_notify("Workarounds for %s: 0x%x "
- 			  "(firmware_revision 0x%06x, model_id 0x%06x)\n",
--			  tgt->unit->device.bus_id,
--			  w, firmware_revision, model);
-+			  tgt->bus_id, w, firmware_revision, model);
- 	tgt->workarounds = w;
+ static void
+Index: linux/drivers/firewire/fw-topology.c
+===================================================================
+--- linux.orig/drivers/firewire/fw-topology.c
++++ linux/drivers/firewire/fw-topology.c
+@@ -383,6 +383,7 @@ void fw_destroy_nodes(struct fw_card *ca
+ 	card->color++;
+ 	if (card->local_node != NULL)
+ 		for_each_fw_node(card, card->local_node, report_lost_node);
++	card->local_node = NULL;
+ 	spin_unlock_irqrestore(&card->lock, flags);
  }
  
-@@ -949,6 +949,7 @@ static int sbp2_probe(struct device *dev
- 	tgt->unit = unit;
- 	kref_init(&tgt->kref);
- 	INIT_LIST_HEAD(&tgt->lu_list);
-+	tgt->bus_id = unit->device.bus_id;
+
+-- 
+Stefan Richter
+-=====-==--- --=- ==---
+http://arcgraph.de/sr/
+
+
+"modprobe firewire-ohci; sleep .1; modprobe -r firewire-ohci" used to
+result in crashes like this:
+
+    BUG: unable to handle kernel paging request at ffffffff8807b455
+    IP: [<ffffffff8807b455>]
+    PGD 203067 PUD 207063 PMD 7c170067 PTE 0
+    Oops: 0010 [1] PREEMPT SMP 
+    CPU 0 
+    Modules linked in: i915 drm cpufreq_ondemand acpi_cpufreq freq_table applesmc input_polldev led_class coretemp hwmon eeprom snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss button thermal processor sg snd_hda_intel snd_pcm snd_timer snd snd_page_alloc sky2 i2c_i801 rtc [last unloaded: crc_itu_t]
+    Pid: 9, comm: events/0 Not tainted 2.6.25-rc2 #3
+    RIP: 0010:[<ffffffff8807b455>]  [<ffffffff8807b455>]
+    RSP: 0018:ffff81007dcdde88  EFLAGS: 00010246
+    RAX: ffff81007dc95040 RBX: ffff81007dee5390 RCX: 0000000000005e13
+    RDX: 0000000000008c8b RSI: 0000000000000001 RDI: ffff81007dee5388
+    RBP: ffff81007dc5eb40 R08: 0000000000000002 R09: ffffffff8022d05c
+    R10: ffffffff8023b34c R11: ffffffff8041a353 R12: ffff81007dee5388
+    R13: ffffffff8807b455 R14: ffffffff80593bc0 R15: 0000000000000000
+    FS:  0000000000000000(0000) GS:ffffffff8055a000(0000) knlGS:0000000000000000
+    CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
+    CR2: ffffffff8807b455 CR3: 0000000000201000 CR4: 00000000000006e0
+    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
+    Process events/0 (pid: 9, threadinfo ffff81007dcdc000, task ffff81007dc95040)
+    Stack:  ffffffff8023b396 ffffffff88082524 0000000000000000 ffffffff8807d9ae
+    ffff81007dc5eb40 ffff81007dc9dce0 ffff81007dc5eb40 ffff81007dc5eb80
+    ffff81007dc9dce0 ffffffffffffffff ffffffff8023be87 0000000000000000
+    Call Trace:
+    [<ffffffff8023b396>] ? run_workqueue+0xdf/0x1df
+    [<ffffffff8023be87>] ? worker_thread+0xd8/0xe3
+    [<ffffffff8023e917>] ? autoremove_wake_function+0x0/0x2e
+    [<ffffffff8023bdaf>] ? worker_thread+0x0/0xe3
+    [<ffffffff8023e813>] ? kthread+0x47/0x74
+    [<ffffffff804198e0>] ? trace_hardirqs_on_thunk+0x35/0x3a
+    [<ffffffff8020c008>] ? child_rip+0xa/0x12
+    [<ffffffff8020b6e3>] ? restore_args+0x0/0x3d
+    [<ffffffff8023e68a>] ? kthreadd+0x14c/0x171
+    [<ffffffff8023e68a>] ? kthreadd+0x14c/0x171
+    [<ffffffff8023e7cc>] ? kthread+0x0/0x74
+    [<ffffffff8020bffe>] ? child_rip+0x0/0x12
+
+
+    Code:  Bad RIP value.
+    RIP  [<ffffffff8807b455>]
+    RSP <ffff81007dcdde88>
+    CR2: ffffffff8807b455
+    ---[ end trace c7366c6657fe5bed ]---
+
+Note that this crash happened _after_ firewire-core was unloaded.  The
+shared workqueue tried to run firewire-core's device initialization jobs
+or similar jobs.
+
+The fix makes sure that firewire-ohci and hence firewire-core is not
+unloaded before all device shutdown jobs have been completed.  This is
+determined by the count of device initializations minus device releases.
+
+Also skip useless retries in the node initialization job if the node is
+to be shut down.
+
+Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
+---
+
+Update:  Refreshed to be applicable after patch "firewire: fw-sbp2:
+better fix for NULL pointer dereference in scsi_remove_device".
+
+Update 2:  Update 1 had a use-after-free bug. #-|
+
+
+ drivers/firewire/fw-card.c        |   10 +++++++++-
+ drivers/firewire/fw-device.c      |   21 ++++++---------------
+ drivers/firewire/fw-device.h      |   16 ++++++++++++++--
+ drivers/firewire/fw-sbp2.c        |    4 ++++
+ drivers/firewire/fw-transaction.h |    2 ++
+ 5 files changed, 35 insertions(+), 18 deletions(-)
+
+Index: linux/drivers/firewire/fw-card.c
+===================================================================
+--- linux.orig/drivers/firewire/fw-card.c
++++ linux/drivers/firewire/fw-card.c
+@@ -18,6 +18,7 @@
  
- 	if (fw_device_enable_phys_dma(device) < 0)
- 		goto fail_shost_put;
-@@ -999,8 +1000,8 @@ static void sbp2_reconnect(struct work_s
- {
- 	struct sbp2_logical_unit *lu =
- 		container_of(work, struct sbp2_logical_unit, work.work);
--	struct fw_unit *unit = lu->tgt->unit;
--	struct fw_device *device = fw_device(unit->device.parent);
-+	struct sbp2_target *tgt = lu->tgt;
-+	struct fw_device *device = fw_device(tgt->unit->device.parent);
- 	int generation, node_id, local_node_id;
+ #include <linux/module.h>
+ #include <linux/errno.h>
++#include <linux/delay.h>
+ #include <linux/device.h>
+ #include <linux/mutex.h>
+ #include <linux/crc-itu-t.h>
+@@ -398,6 +399,7 @@ fw_card_initialize(struct fw_card *card,
+ 	static atomic_t index = ATOMIC_INIT(-1);
+ 
+ 	kref_init(&card->kref);
++	atomic_set(&card->device_count, 0);
+ 	card->index = atomic_inc_return(&index);
+ 	card->driver = driver;
+ 	card->device = device;
+@@ -528,8 +530,14 @@ fw_core_remove_card(struct fw_card *card
+ 	card->driver = &dummy_driver;
  
- 	if (fw_device_is_shutdown(device))
-@@ -1015,8 +1016,7 @@ static void sbp2_reconnect(struct work_s
- 				     SBP2_RECONNECT_REQUEST,
- 				     lu->login_id, NULL) < 0) {
- 		if (lu->retries++ >= 5) {
--			fw_error("failed to reconnect to %s\n",
--				 unit->device.bus_id);
-+			fw_error("%s: failed to reconnect\n", tgt->bus_id);
- 			/* Fall back and try to log in again. */
- 			lu->retries = 0;
- 			PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
-@@ -1025,17 +1025,17 @@ static void sbp2_reconnect(struct work_s
- 		goto out;
- 	}
+ 	fw_destroy_nodes(card);
+-	flush_scheduled_work();
++	/*
++	 * Wait for all device workqueue jobs to finish.  Otherwise the
++	 * firewire-core module could be unloaded before the jobs ran.
++	 */
++	while (atomic_read(&card->device_count) > 0)
++		msleep(100);
  
--	lu->generation        = generation;
--	lu->tgt->node_id      = node_id;
--	lu->tgt->address_high = local_node_id << 16;
-+	lu->generation    = generation;
-+	tgt->node_id      = node_id;
-+	tgt->address_high = local_node_id << 16;
- 
--	fw_notify("reconnected to %s LUN %04x (%d retries)\n",
--		  unit->device.bus_id, lu->lun, lu->retries);
-+	fw_notify("%s: reconnected to LUN %04x (%d retries)\n",
-+		  tgt->bus_id, lu->lun, lu->retries);
++	cancel_delayed_work_sync(&card->work);
+ 	fw_flush_transactions(card);
+ 	del_timer_sync(&card->flush_timer);
  
- 	sbp2_agent_reset(lu);
- 	sbp2_cancel_orbs(lu);
-  out:
--	sbp2_target_put(lu->tgt);
-+	sbp2_target_put(tgt);
- }
+Index: linux/drivers/firewire/fw-device.c
+===================================================================
+--- linux.orig/drivers/firewire/fw-device.c
++++ linux/drivers/firewire/fw-device.c
+@@ -150,21 +150,10 @@ struct bus_type fw_bus_type = {
+ };
+ EXPORT_SYMBOL(fw_bus_type);
  
- static void sbp2_update(struct fw_unit *unit)
-@@ -1377,7 +1377,7 @@ static int sbp2_scsi_abort(struct scsi_c
+-struct fw_device *fw_device_get(struct fw_device *device)
+-{
+-	get_device(&device->device);
+-
+-	return device;
+-}
+-
+-void fw_device_put(struct fw_device *device)
+-{
+-	put_device(&device->device);
+-}
+-
+ static void fw_device_release(struct device *dev)
  {
- 	struct sbp2_logical_unit *lu = cmd->device->hostdata;
+ 	struct fw_device *device = fw_device(dev);
++	struct fw_card *card = device->card;
+ 	unsigned long flags;
  
--	fw_notify("sbp2_scsi_abort\n");
-+	fw_notify("%s: sbp2_scsi_abort\n", lu->tgt->bus_id);
- 	sbp2_agent_reset(lu);
- 	sbp2_cancel_orbs(lu);
+ 	/*
+@@ -176,9 +165,9 @@ static void fw_device_release(struct dev
+ 	spin_unlock_irqrestore(&device->card->lock, flags);
  
-
--- 
-Stefan Richter
--=====-==--- --=- ---==
-http://arcgraph.de/sr/
-
-
-When a reconnect failed but re-login succeeded, __scsi_add_device was
-called again.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |    6 ++++++
- 1 file changed, 6 insertions(+)
-
+ 	fw_node_put(device->node);
+-	fw_card_put(device->card);
+ 	kfree(device->config_rom);
+ 	kfree(device);
++	atomic_dec(&card->device_count);
+ }
+ 
+ int fw_device_enable_phys_dma(struct fw_device *device)
+@@ -668,7 +657,8 @@ static void fw_device_init(struct work_s
+ 	 */
+ 
+ 	if (read_bus_info_block(device, device->generation) < 0) {
+-		if (device->config_rom_retries < MAX_RETRIES) {
++		if (device->config_rom_retries < MAX_RETRIES &&
++		    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
+ 			device->config_rom_retries++;
+ 			schedule_delayed_work(&device->work, RETRY_DELAY);
+ 		} else {
+@@ -805,7 +795,8 @@ void fw_node_event(struct fw_card *card,
+ 		 */
+ 		device_initialize(&device->device);
+ 		atomic_set(&device->state, FW_DEVICE_INITIALIZING);
+-		device->card = fw_card_get(card);
++		atomic_inc(&card->device_count);
++		device->card = card;
+ 		device->node = fw_node_get(node);
+ 		device->node_id = node->node_id;
+ 		device->generation = card->generation;
 Index: linux/drivers/firewire/fw-sbp2.c
 ===================================================================
 --- linux.orig/drivers/firewire/fw-sbp2.c
 +++ linux/drivers/firewire/fw-sbp2.c
-@@ -741,6 +741,12 @@ static void sbp2_login(struct work_struc
- 	PREPARE_DELAYED_WORK(&lu->work, sbp2_reconnect);
- 	sbp2_agent_reset(lu);
+@@ -769,6 +769,7 @@ static void sbp2_release_target(struct k
+ 	struct Scsi_Host *shost =
+ 		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
+ 	struct scsi_device *sdev;
++	struct fw_device *device = fw_device(tgt->unit->device.parent);
  
-+	/* This was a re-login. */
-+	if (lu->sdev) {
-+		sbp2_cancel_orbs(lu);
-+		goto out;
-+	}
+ 	/* prevent deadlocks */
+ 	sbp2_unblock(tgt);
+@@ -791,6 +792,7 @@ static void sbp2_release_target(struct k
+ 
+ 	put_device(&tgt->unit->device);
+ 	scsi_host_put(shost);
++	fw_device_put(device);
+ }
+ 
+ static struct workqueue_struct *sbp2_wq;
+@@ -1088,6 +1090,8 @@ static int sbp2_probe(struct device *dev
+ 	if (scsi_add_host(shost, &unit->device) < 0)
+ 		goto fail_shost_put;
+ 
++	fw_device_get(device);
 +
- 	if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
- 		ssleep(SBP2_INQUIRY_DELAY);
+ 	/* Initialize to values that won't match anything in our table. */
+ 	firmware_revision = 0xff000000;
+ 	model = 0xff000000;
+Index: linux/drivers/firewire/fw-transaction.h
+===================================================================
+--- linux.orig/drivers/firewire/fw-transaction.h
++++ linux/drivers/firewire/fw-transaction.h
+@@ -26,6 +26,7 @@
+ #include <linux/fs.h>
+ #include <linux/dma-mapping.h>
+ #include <linux/firewire-constants.h>
++#include <asm/atomic.h>
+ 
+ #define TCODE_IS_READ_REQUEST(tcode)	(((tcode) & ~1) == 4)
+ #define TCODE_IS_BLOCK_PACKET(tcode)	(((tcode) &  1) != 0)
+@@ -219,6 +220,7 @@ extern struct bus_type fw_bus_type;
+ struct fw_card {
+ 	const struct fw_card_driver *driver;
+ 	struct device *device;
++	atomic_t device_count;
+ 	struct kref kref;
  
+ 	int node_id;
+Index: linux/drivers/firewire/fw-device.h
+===================================================================
+--- linux.orig/drivers/firewire/fw-device.h
++++ linux/drivers/firewire/fw-device.h
+@@ -76,9 +76,21 @@ fw_device_is_shutdown(struct fw_device *
+ 	return atomic_read(&device->state) == FW_DEVICE_SHUTDOWN;
+ }
+ 
+-struct fw_device *fw_device_get(struct fw_device *device);
++static inline struct fw_device *
++fw_device_get(struct fw_device *device)
++{
++	get_device(&device->device);
++
++	return device;
++}
++
++static inline void
++fw_device_put(struct fw_device *device)
++{
++	put_device(&device->device);
++}
++
+ struct fw_device *fw_device_get_by_devt(dev_t devt);
+-void fw_device_put(struct fw_device *device);
+ int fw_device_enable_phys_dma(struct fw_device *device);
+ 
+ void fw_device_cdev_update(struct fw_device *device);
 
 -- 
 Stefan Richter
--=====-==--- --=- ---==
+-=====-==--- --=- ==-==
 http://arcgraph.de/sr/
 
 
-If fw-sbp2 was too late with requesting the reconnect, the target would
-reject this.  In this case, log out before attempting the reconnect.
-Else several firmwares will deny the re-login because they somehow
-didn't invalidate the old login.
-
-Also, don't retry reconnects in this situation.  The retries won't
-succeed either.
 
-These changes improve chances for successful re-login and shorten the
-period during which the logical unit is inaccessible.
+The card->kref became obsolete since patch "firewire: fix crash in
+automatic module unloading" added another counter of card users.
 
 Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
 ---
- drivers/firewire/fw-sbp2.c |   17 +++++++++++++++--
- 1 file changed, 15 insertions(+), 2 deletions(-)
+ drivers/firewire/fw-card.c        |   38 ------------------------------
+ drivers/firewire/fw-ohci.c        |    8 +++---
+ drivers/firewire/fw-transaction.h |    4 ---
+ 3 files changed, 4 insertions(+), 46 deletions(-)
 
-Index: linux/drivers/firewire/fw-sbp2.c
+Index: linux/drivers/firewire/fw-card.c
 ===================================================================
---- linux.orig/drivers/firewire/fw-sbp2.c
-+++ linux/drivers/firewire/fw-sbp2.c
-@@ -710,6 +710,11 @@ static void sbp2_login(struct work_struc
- 	node_id       = device->node_id;
- 	local_node_id = device->card->node_id;
+--- linux.orig/drivers/firewire/fw-card.c
++++ linux/drivers/firewire/fw-card.c
+@@ -398,7 +398,6 @@ fw_card_initialize(struct fw_card *card,
+ {
+ 	static atomic_t index = ATOMIC_INIT(-1);
  
-+	/* If this is a re-login attempt, log out, or we might be rejected. */
-+	if (lu->sdev)
-+		sbp2_send_management_orb(lu, device->node_id, generation,
-+				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
-+
- 	if (sbp2_send_management_orb(lu, node_id, generation,
- 				SBP2_LOGIN_REQUEST, lu->lun, &response) < 0) {
- 		if (lu->retries++ < 5)
-@@ -1021,9 +1026,17 @@ static void sbp2_reconnect(struct work_s
- 	if (sbp2_send_management_orb(lu, node_id, generation,
- 				     SBP2_RECONNECT_REQUEST,
- 				     lu->login_id, NULL) < 0) {
--		if (lu->retries++ >= 5) {
-+		/*
-+		 * If reconnect was impossible even though we are in the
-+		 * current generation, fall back and try to log in again.
-+		 *
-+		 * We could check for "Function rejected" status, but
-+		 * looking at the bus generation as simpler and more general.
-+		 */
-+		smp_rmb(); /* get current card generation */
-+		if (generation == device->card->generation ||
-+		    lu->retries++ >= 5) {
- 			fw_error("%s: failed to reconnect\n", tgt->bus_id);
--			/* Fall back and try to log in again. */
- 			lu->retries = 0;
- 			PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
- 		}
+-	kref_init(&card->kref);
+ 	atomic_set(&card->device_count, 0);
+ 	card->index = atomic_inc_return(&index);
+ 	card->driver = driver;
+@@ -429,12 +428,6 @@ fw_card_add(struct fw_card *card,
+ 	card->link_speed = link_speed;
+ 	card->guid = guid;
+ 
+-	/*
+-	 * The subsystem grabs a reference when the card is added and
+-	 * drops it when the driver calls fw_core_remove_card.
+-	 */
+-	fw_card_get(card);
+-
+ 	mutex_lock(&card_mutex);
+ 	config_rom = generate_config_rom(card, &length);
+ 	list_add_tail(&card->link, &card_list);
+@@ -540,40 +533,9 @@ fw_core_remove_card(struct fw_card *card
+ 	cancel_delayed_work_sync(&card->work);
+ 	fw_flush_transactions(card);
+ 	del_timer_sync(&card->flush_timer);
+-
+-	fw_card_put(card);
+ }
+ EXPORT_SYMBOL(fw_core_remove_card);
+ 
+-struct fw_card *
+-fw_card_get(struct fw_card *card)
+-{
+-	kref_get(&card->kref);
+-
+-	return card;
+-}
+-EXPORT_SYMBOL(fw_card_get);
+-
+-static void
+-release_card(struct kref *kref)
+-{
+-	struct fw_card *card = container_of(kref, struct fw_card, kref);
+-
+-	kfree(card);
+-}
+-
+-/*
+- * An assumption for fw_card_put() is that the card driver allocates
+- * the fw_card struct with kalloc and that it has been shut down
+- * before the last ref is dropped.
+- */
+-void
+-fw_card_put(struct fw_card *card)
+-{
+-	kref_put(&card->kref, release_card);
+-}
+-EXPORT_SYMBOL(fw_card_put);
+-
+ int
+ fw_core_initiate_bus_reset(struct fw_card *card, int short_reset)
+ {
+Index: linux/drivers/firewire/fw-ohci.c
+===================================================================
+--- linux.orig/drivers/firewire/fw-ohci.c
++++ linux/drivers/firewire/fw-ohci.c
+@@ -2059,7 +2059,7 @@ pci_probe(struct pci_dev *dev, const str
+ 	err = pci_enable_device(dev);
+ 	if (err) {
+ 		fw_error("Failed to enable OHCI hardware.\n");
+-		goto fail_put_card;
++		goto fail_free;
+ 	}
+ 
+ 	pci_set_master(dev);
+@@ -2151,8 +2151,8 @@ pci_probe(struct pci_dev *dev, const str
+ 	pci_release_region(dev, 0);
+  fail_disable:
+ 	pci_disable_device(dev);
+- fail_put_card:
+-	fw_card_put(&ohci->card);
++ fail_free:
++	kfree(&ohci->card);
+ 
+ 	return err;
+ }
+@@ -2180,7 +2180,7 @@ static void pci_remove(struct pci_dev *d
+ 	pci_iounmap(dev, ohci->registers);
+ 	pci_release_region(dev, 0);
+ 	pci_disable_device(dev);
+-	fw_card_put(&ohci->card);
++	kfree(&ohci->card);
+ 
+ 	fw_notify("Removed fw-ohci device.\n");
+ }
+Index: linux/drivers/firewire/fw-transaction.h
+===================================================================
+--- linux.orig/drivers/firewire/fw-transaction.h
++++ linux/drivers/firewire/fw-transaction.h
+@@ -221,7 +221,6 @@ struct fw_card {
+ 	const struct fw_card_driver *driver;
+ 	struct device *device;
+ 	atomic_t device_count;
+-	struct kref kref;
+ 
+ 	int node_id;
+ 	int generation;
+@@ -263,9 +262,6 @@ struct fw_card {
+ 	int bm_generation;
+ };
+ 
+-struct fw_card *fw_card_get(struct fw_card *card);
+-void fw_card_put(struct fw_card *card);
+-
+ /*
+  * The iso packet format allows for an immediate header/payload part
+  * stored in 'header' immediately after the packet info plus an
 
 -- 
 Stefan Richter
--=====-==--- --=- ---==
+-=====-==--- --=- ==---
 http://arcgraph.de/sr/
 
 
+The reference count of the unit dropped too low in an error path in
+sbp2_probe.  Fixed by moving the _get further up.
+
 Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
 ---
- drivers/firewire/fw-sbp2.c |   14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
+ drivers/firewire/fw-sbp2.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
 
 Index: linux/drivers/firewire/fw-sbp2.c
 ===================================================================
 --- linux.orig/drivers/firewire/fw-sbp2.c
 +++ linux/drivers/firewire/fw-sbp2.c
-@@ -28,15 +28,15 @@
-  * and many others.
-  */
+@@ -1083,6 +1083,7 @@ static int sbp2_probe(struct device *dev
+ 		goto fail_shost_put;
  
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <linux/dma-mapping.h>
- #include <linux/kernel.h>
-+#include <linux/mod_devicetable.h>
- #include <linux/module.h>
- #include <linux/moduleparam.h>
--#include <linux/mod_devicetable.h>
--#include <linux/delay.h>
--#include <linux/device.h>
- #include <linux/scatterlist.h>
--#include <linux/dma-mapping.h>
--#include <linux/blkdev.h>
- #include <linux/string.h>
- #include <linux/stringify.h>
- #include <linux/timer.h>
-@@ -48,9 +48,9 @@
- #include <scsi/scsi_device.h>
- #include <scsi/scsi_host.h>
- 
--#include "fw-transaction.h"
--#include "fw-topology.h"
- #include "fw-device.h"
-+#include "fw-topology.h"
-+#include "fw-transaction.h"
+ 	fw_device_get(device);
++	get_device(&unit->device);
  
- /*
-  * So far only bridges from Oxford Semiconductor are known to support
+ 	/* Initialize to values that won't match anything in our table. */
+ 	firmware_revision = 0xff000000;
+@@ -1098,8 +1099,6 @@ static int sbp2_probe(struct device *dev
+ 
+ 	sbp2_init_workarounds(tgt, model, firmware_revision);
+ 
+-	get_device(&unit->device);
+-
+ 	/* Do the login in a workqueue so we can easily reschedule retries. */
+ 	list_for_each_entry(lu, &tgt->lu_list, link)
+ 		sbp2_queue_work(lu, 0);
 
 -- 
 Stefan Richter
--=====-==--- --=- ---==
+-=====-==--- --=- ==---
 http://arcgraph.de/sr/
 
 
-While fw-sbp2 takes the necessary time to reconnect to a logical unit
-after bus reset, the SCSI core keeps sending new commands.  They are all
-immediately completed with host busy status, and application clients or
-filesystems will break quickly.  The SCSI device might even be taken
-offline:  http://bugzilla.kernel.org/show_bug.cgi?id=9734
-
-The only remedy seems to be to block the SCSI device until reconnect.
-Alas the SCSI core has no useful API to block only one logical unit i.e.
-the scsi_device, therefore we block the entire Scsi_Host.  This
-currently corresponds to an SBP-2 target.  In case of targets with
-multiple logical units, we need to satisfy the dependencies between
-logical units by carefully tracking the blocking state of the target and
-its units.  We block all logical units of a target as soon as one of
-them needs to be blocked, and keep them blocked until all of them are
-ready to be unblocked.
-
-Furthermore, as the history of the old sbp2 driver has shown, the
-scsi_block_requests() API is a minefield with high potential of
-deadlocks.  We therefore take extra measures to keep logical units
-unblocked during __scsi_add_device() and during shutdown.
+Add wrappers for getting and putting a unit.
+Remove some line breaks.
 
 Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
 ---
- drivers/firewire/fw-sbp2.c |   71 +++++++++++++++++++++++++++++++++++--
- 1 file changed, 69 insertions(+), 2 deletions(-)
+ drivers/firewire/fw-device.h |   27 +++++++++++++++++----------
+ drivers/firewire/fw-sbp2.c   |    4 ++--
+ 2 files changed, 19 insertions(+), 12 deletions(-)
 
-Index: linux/drivers/firewire/fw-sbp2.c
+Index: linux/drivers/firewire/fw-device.h
 ===================================================================
---- linux.orig/drivers/firewire/fw-sbp2.c
-+++ linux/drivers/firewire/fw-sbp2.c
-@@ -41,6 +41,8 @@
- #include <linux/stringify.h>
- #include <linux/timer.h>
- #include <linux/workqueue.h>
-+#include <asm/atomic.h>
-+#include <asm/system.h>
- 
- #include <scsi/scsi.h>
- #include <scsi/scsi_cmnd.h>
-@@ -139,6 +140,7 @@ struct sbp2_logical_unit {
- 	int generation;
- 	int retries;
- 	struct delayed_work work;
-+	atomic_t blocked;
+--- linux.orig/drivers/firewire/fw-device.h
++++ linux/drivers/firewire/fw-device.h
+@@ -64,28 +64,24 @@ struct fw_device {
+ 	struct fw_attribute_group attribute_group;
  };
  
- /*
-@@ -157,6 +159,9 @@ struct sbp2_target {
- 	int address_high;
- 	unsigned int workarounds;
- 	unsigned int mgt_orb_timeout;
-+
-+	atomic_t dont_block;
-+	atomic_t blocked;
+-static inline struct fw_device *
+-fw_device(struct device *dev)
++static inline struct fw_device *fw_device(struct device *dev)
+ {
+ 	return container_of(dev, struct fw_device, device);
+ }
+ 
+-static inline int
+-fw_device_is_shutdown(struct fw_device *device)
++static inline int fw_device_is_shutdown(struct fw_device *device)
+ {
+ 	return atomic_read(&device->state) == FW_DEVICE_SHUTDOWN;
+ }
+ 
+-static inline struct fw_device *
+-fw_device_get(struct fw_device *device)
++static inline struct fw_device *fw_device_get(struct fw_device *device)
+ {
+ 	get_device(&device->device);
+ 
+ 	return device;
+ }
+ 
+-static inline void
+-fw_device_put(struct fw_device *device)
++static inline void fw_device_put(struct fw_device *device)
+ {
+ 	put_device(&device->device);
+ }
+@@ -104,12 +100,23 @@ struct fw_unit {
+ 	struct fw_attribute_group attribute_group;
  };
  
- /*
-@@ -646,6 +651,53 @@ static void sbp2_agent_reset_no_wait(str
- 			&z, sizeof(z), complete_agent_reset_write_no_wait, t);
+-static inline struct fw_unit *
+-fw_unit(struct device *dev)
++static inline struct fw_unit *fw_unit(struct device *dev)
+ {
+ 	return container_of(dev, struct fw_unit, device);
  }
  
-+/*
-+ * Blocks lu->tgt if all of the following conditions are met:
-+ *   - Login, INQUIRY, and high-level SCSI setup of all logical units of the
-+ *     target have been successfully finished (indicated by dont_block == 0).
-+ *   - The lu->generation is stale.  sbp2_reconnect will unblock lu later.
-+ */
-+static void sbp2_conditionally_block(struct sbp2_logical_unit *lu)
-+{
-+	struct fw_card *card = fw_device(lu->tgt->unit->device.parent)->card;
-+
-+	if (!atomic_read(&lu->tgt->dont_block) &&
-+	    lu->generation != card->generation &&
-+	    atomic_cmpxchg(&lu->blocked, 0, 1) == 0) {
-+
-+		/* raise the block count of the target */
-+		if (atomic_inc_return(&lu->tgt->blocked) == 1) {
-+			scsi_block_requests(lu->sdev->host);
-+			fw_notify("blocked %s\n", lu->tgt->bus_id);
-+		}
-+	}
-+}
-+
-+/* Unblocks lu->tgt as soon as all its logical units can be unblocked. */
-+static void sbp2_conditionally_unblock(struct sbp2_logical_unit *lu)
++static inline struct fw_unit *fw_unit_get(struct fw_unit *unit)
 +{
-+	if (atomic_cmpxchg(&lu->blocked, 1, 0) == 1) {
++	get_device(&unit->device);
 +
-+		/* lower the block count of the target */
-+		if (atomic_dec_and_test(&lu->tgt->blocked)) {
-+			scsi_unblock_requests(lu->sdev->host);
-+			fw_notify("unblocked %s\n", lu->tgt->bus_id);
-+		}
-+	}
++	return unit;
 +}
 +
-+
-+/* Prevents future blocking of tgt and then unblocks it. */
-+static void sbp2_unblock(struct sbp2_target *tgt)
++static inline void fw_unit_put(struct fw_unit *unit)
 +{
-+	struct Scsi_Host *shost =
-+		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
-+
-+	atomic_inc(&tgt->dont_block);
-+	smp_wmb();
-+	scsi_unblock_requests(shost);
++	put_device(&unit->device);
 +}
 +
- static void sbp2_release_target(struct kref *kref)
- {
- 	struct sbp2_target *tgt = container_of(kref, struct sbp2_target, kref);
-@@ -653,6 +705,12 @@ static void sbp2_release_target(struct k
- 	struct Scsi_Host *shost =
- 		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
- 
-+	/*
-+	 * Make sure that the target is unblocked and won't be blocked anymore
-+	 * before scsi_remove_device() is called.  Else it will deadlock.
-+	 */
-+	sbp2_unblock(tgt);
-+
- 	list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
- 		if (lu->sdev)
- 			scsi_remove_device(lu->sdev);
-@@ -717,11 +775,14 @@ static void sbp2_login(struct work_struc
- 
- 	if (sbp2_send_management_orb(lu, node_id, generation,
- 				SBP2_LOGIN_REQUEST, lu->lun, &response) < 0) {
--		if (lu->retries++ < 5)
-+		if (lu->retries++ < 5) {
- 			sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
--		else
-+		} else {
- 			fw_error("%s: failed to login to LUN %04x\n",
- 				 tgt->bus_id, lu->lun);
-+			/* Let any waiting I/O fail from now on. */
-+			sbp2_unblock(lu->tgt);
-+		}
- 		goto out;
- 	}
- 
-@@ -749,6 +810,7 @@ static void sbp2_login(struct work_struc
- 	/* This was a re-login. */
- 	if (lu->sdev) {
- 		sbp2_cancel_orbs(lu);
-+		sbp2_conditionally_unblock(lu);
- 		goto out;
- 	}
- 
-@@ -786,6 +848,8 @@ static void sbp2_login(struct work_struc
- 		 * Can you believe it?  Everything went well.
- 		 */
- 		lu->sdev = sdev;
-+		smp_wmb();  /* We need lu->sdev when we want to block lu. */
-+		atomic_dec(&lu->tgt->dont_block);
- 		scsi_device_put(sdev);
- 		goto out;
- 	}
-@@ -828,6 +892,7 @@ static int sbp2_add_logical_unit(struct 
- 	lu->sdev = NULL;
- 	lu->lun  = lun_entry & 0xffff;
- 	lu->retries = 0;
-+	atomic_inc(&tgt->dont_block);
- 	INIT_LIST_HEAD(&lu->orb_list);
- 	INIT_DELAYED_WORK(&lu->work, sbp2_login);
- 
-@@ -1053,6 +1118,7 @@ static void sbp2_reconnect(struct work_s
+ #define CSR_OFFSET	0x40
+ #define CSR_LEAF	0x80
+ #define CSR_DIRECTORY	0xc0
+Index: linux/drivers/firewire/fw-sbp2.c
+===================================================================
+--- linux.orig/drivers/firewire/fw-sbp2.c
++++ linux/drivers/firewire/fw-sbp2.c
+@@ -790,7 +790,7 @@ static void sbp2_release_target(struct k
+ 	scsi_remove_host(shost);
+ 	fw_notify("released %s\n", tgt->bus_id);
  
- 	sbp2_agent_reset(lu);
- 	sbp2_cancel_orbs(lu);
-+	sbp2_conditionally_unblock(lu);
-  out:
- 	sbp2_target_put(tgt);
+-	put_device(&tgt->unit->device);
++	fw_unit_put(tgt->unit);
+ 	scsi_host_put(shost);
+ 	fw_device_put(device);
  }
-@@ -1172,6 +1238,7 @@ complete_command_orb(struct sbp2_orb *ba
- 		 * or when sending the write (less likely).
- 		 */
- 		result = DID_BUS_BUSY << 16;
-+		sbp2_conditionally_block(orb->lu);
- 	}
+@@ -1091,7 +1091,7 @@ static int sbp2_probe(struct device *dev
+ 		goto fail_shost_put;
+ 
+ 	fw_device_get(device);
+-	get_device(&unit->device);
++	fw_unit_get(unit);
  
- 	dma_unmap_single(device->card->device, orb->base.request_bus,
+ 	/* Initialize to values that won't match anything in our table. */
+ 	firmware_revision = 0xff000000;
 
 -- 
 Stefan Richter
--=====-==--- --=- ---==
+-=====-==--- --=- ==---
 http://arcgraph.de/sr/
 
+

linux-2.6-firewire-git-update.patch:

Index: linux-2.6-firewire-git-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-firewire-git-update.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-firewire-git-update.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-firewire-git-update.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -1,800 +1,272 @@
-diff -Naurp linux-2.6-git/drivers/firewire/fw-cdev.c firewire-git/drivers/firewire/fw-cdev.c
---- linux-2.6-git/drivers/firewire/fw-cdev.c	2008-01-01 22:50:33.000000000 -0500
-+++ firewire-git/drivers/firewire/fw-cdev.c	2008-01-25 12:41:22.000000000 -0500
-@@ -206,12 +206,13 @@ fill_bus_reset_event(struct fw_cdev_even
- 
- 	event->closure	     = client->bus_reset_closure;
- 	event->type          = FW_CDEV_EVENT_BUS_RESET;
-+	event->generation    = client->device->generation;
-+	smp_rmb();           /* node_id must not be older than generation */
- 	event->node_id       = client->device->node_id;
- 	event->local_node_id = card->local_node->node_id;
- 	event->bm_node_id    = 0; /* FIXME: We don't track the BM. */
- 	event->irm_node_id   = card->irm_node->node_id;
- 	event->root_node_id  = card->root_node->node_id;
--	event->generation    = card->generation;
- }
- 
- static void
-diff -Naurp linux-2.6-git/drivers/firewire/fw-device.c firewire-git/drivers/firewire/fw-device.c
---- linux-2.6-git/drivers/firewire/fw-device.c	2008-01-01 22:50:33.000000000 -0500
-+++ firewire-git/drivers/firewire/fw-device.c	2008-01-25 12:41:22.000000000 -0500
-@@ -182,9 +182,14 @@ static void fw_device_release(struct dev
+git diff in linux1394-git tree vs. 2.6.25-rc1, 02/20/2008
+
+ Documentation/debugging-via-ohci1394.txt |   17 +-
+ drivers/firewire/fw-cdev.c               |    8 +-
+ drivers/firewire/fw-device.c             |   48 +++--
+ drivers/firewire/fw-device.h             |    2 +-
+ drivers/firewire/fw-sbp2.c               |  358 +++++++++++++++++++++++-------
+ drivers/ieee1394/sbp2.c                  |   22 ++-
+ drivers/ieee1394/sbp2.h                  |    2 +
+ 7 files changed, 345 insertions(+), 112 deletions(-)
+
+---
+
+diff --git a/Documentation/debugging-via-ohci1394.txt b/Documentation/debugging-via-ohci1394.txt
+index de4804e..c360d4e 100644
+--- a/Documentation/debugging-via-ohci1394.txt
++++ b/Documentation/debugging-via-ohci1394.txt
+@@ -36,14 +36,15 @@ available (notebooks) or too slow for extensive debug information (like ACPI).
+ Drivers
+ -------
+ 
+-The OHCI-1394 drivers in drivers/firewire and drivers/ieee1394 initialize
+-the OHCI-1394 controllers to a working state and can be used to enable
+-physical DMA. By default you only have to load the driver, and physical
+-DMA access will be granted to all remote nodes, but it can be turned off
+-when using the ohci1394 driver.
+-
+-Because these drivers depend on the PCI enumeration to be completed, an
+-initialization routine which can runs pretty early (long before console_init(),
++The ohci1394 driver in drivers/ieee1394 initializes the OHCI-1394 controllers
++to a working state and enables physical DMA by default for all remote nodes.
++This can be turned off by ohci1394's module parameter phys_dma=0.
++
++The alternative firewire-ohci driver in drivers/firewire uses filtered physical
++DMA, hence is not yet suitable for remote debugging.
++
++Because ohci1394 depends on the PCI enumeration to be completed, an
++initialization routine which runs pretty early (long before console_init()
+ which makes the printk buffer appear on the console can be called) was written.
+ 
+ To activate it, enable CONFIG_PROVIDE_OHCI1394_DMA_INIT (Kernel hacking menu:
+diff --git a/drivers/firewire/fw-cdev.c b/drivers/firewire/fw-cdev.c
+index 7e73cba..44ccee2 100644
+--- a/drivers/firewire/fw-cdev.c
++++ b/drivers/firewire/fw-cdev.c
+@@ -109,15 +109,17 @@ static int fw_device_op_open(struct inode *inode, struct file *file)
+ 	struct client *client;
+ 	unsigned long flags;
+ 
+-	device = fw_device_from_devt(inode->i_rdev);
++	device = fw_device_get_by_devt(inode->i_rdev);
+ 	if (device == NULL)
+ 		return -ENODEV;
+ 
+ 	client = kzalloc(sizeof(*client), GFP_KERNEL);
+-	if (client == NULL)
++	if (client == NULL) {
++		fw_device_put(device);
+ 		return -ENOMEM;
++	}
  
- int fw_device_enable_phys_dma(struct fw_device *device)
+-	client->device = fw_device_get(device);
++	client->device = device;
+ 	INIT_LIST_HEAD(&client->event_list);
+ 	INIT_LIST_HEAD(&client->resource_list);
+ 	spin_lock_init(&client->lock);
+diff --git a/drivers/firewire/fw-device.c b/drivers/firewire/fw-device.c
+index de9066e..2ab13e0 100644
+--- a/drivers/firewire/fw-device.c
++++ b/drivers/firewire/fw-device.c
+@@ -358,12 +358,9 @@ static ssize_t
+ guid_show(struct device *dev, struct device_attribute *attr, char *buf)
  {
-+	int generation = device->generation;
-+
-+	/* device->node_id, accessed below, must not be older than generation */
-+	smp_rmb();
-+
- 	return device->card->driver->enable_phys_dma(device->card,
- 						     device->node_id,
--						     device->generation);
-+						     generation);
- }
- EXPORT_SYMBOL(fw_device_enable_phys_dma);
+ 	struct fw_device *device = fw_device(dev);
+-	u64 guid;
  
-@@ -384,17 +389,21 @@ complete_transaction(struct fw_card *car
- 	complete(&callback_data->done);
+-	guid = ((u64)device->config_rom[3] << 32) | device->config_rom[4];
+-
+-	return snprintf(buf, PAGE_SIZE, "0x%016llx\n",
+-			(unsigned long long)guid);
++	return snprintf(buf, PAGE_SIZE, "0x%08x%08x\n",
++			device->config_rom[3], device->config_rom[4]);
  }
  
--static int read_rom(struct fw_device *device, int index, u32 * data)
-+static int
-+read_rom(struct fw_device *device, int generation, int index, u32 *data)
- {
- 	struct read_quadlet_callback_data callback_data;
- 	struct fw_transaction t;
- 	u64 offset;
- 
-+	/* device->node_id, accessed below, must not be older than generation */
-+	smp_rmb();
-+
- 	init_completion(&callback_data.done);
- 
- 	offset = 0xfffff0000400ULL + index * 4;
- 	fw_send_request(device->card, &t, TCODE_READ_QUADLET_REQUEST,
--			device->node_id, device->generation, device->max_speed,
-+			device->node_id, generation, device->max_speed,
- 			offset, NULL, 4, complete_transaction, &callback_data);
- 
- 	wait_for_completion(&callback_data.done);
-@@ -404,7 +413,14 @@ static int read_rom(struct fw_device *de
- 	return callback_data.rcode;
- }
+ static struct device_attribute fw_device_attributes[] = {
+@@ -610,12 +607,14 @@ static DECLARE_RWSEM(idr_rwsem);
+ static DEFINE_IDR(fw_device_idr);
+ int fw_cdev_major;
  
--static int read_bus_info_block(struct fw_device *device)
-+/*
-+ * Read the bus info block, perform a speed probe, and read all of the rest of
-+ * the config ROM.  We do all this with a cached bus generation.  If the bus
-+ * generation changes under us, read_bus_info_block will fail and get retried.
-+ * It's better to start all over in this case because the node from which we
-+ * are reading the ROM may have changed the ROM during the reset.
-+ */
-+static int read_bus_info_block(struct fw_device *device, int generation)
+-struct fw_device *fw_device_from_devt(dev_t devt)
++struct fw_device *fw_device_get_by_devt(dev_t devt)
  {
- 	static u32 rom[256];
- 	u32 stack[16], sp, key;
-@@ -414,7 +430,7 @@ static int read_bus_info_block(struct fw
- 
- 	/* First read the bus info block. */
- 	for (i = 0; i < 5; i++) {
--		if (read_rom(device, i, &rom[i]) != RCODE_COMPLETE)
-+		if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
- 			return -1;
- 		/*
- 		 * As per IEEE1212 7.2, during power-up, devices can
-@@ -449,7 +465,8 @@ static int read_bus_info_block(struct fw
- 			device->max_speed = device->card->link_speed;
- 
- 		while (device->max_speed > SCODE_100) {
--			if (read_rom(device, 0, &dummy) == RCODE_COMPLETE)
-+			if (read_rom(device, generation, 0, &dummy) ==
-+			    RCODE_COMPLETE)
- 				break;
- 			device->max_speed--;
- 		}
-@@ -482,7 +499,7 @@ static int read_bus_info_block(struct fw
- 			return -1;
- 
- 		/* Read header quadlet for the block to get the length. */
--		if (read_rom(device, i, &rom[i]) != RCODE_COMPLETE)
-+		if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
- 			return -1;
- 		end = i + (rom[i] >> 16) + 1;
- 		i++;
-@@ -501,7 +518,8 @@ static int read_bus_info_block(struct fw
- 		 * it references another block, and push it in that case.
- 		 */
- 		while (i < end) {
--			if (read_rom(device, i, &rom[i]) != RCODE_COMPLETE)
-+			if (read_rom(device, generation, i, &rom[i]) !=
-+			    RCODE_COMPLETE)
- 				return -1;
- 			if ((key >> 30) == 3 && (rom[i] >> 30) > 1 &&
- 			    sp < ARRAY_SIZE(stack))
-@@ -648,7 +666,7 @@ static void fw_device_init(struct work_s
- 	 * device.
- 	 */
+ 	struct fw_device *device;
  
--	if (read_bus_info_block(device) < 0) {
-+	if (read_bus_info_block(device, device->generation) < 0) {
- 		if (device->config_rom_retries < MAX_RETRIES) {
- 			device->config_rom_retries++;
- 			schedule_delayed_work(&device->work, RETRY_DELAY);
-@@ -801,6 +819,7 @@ void fw_node_event(struct fw_card *card,
- 
- 		device = node->data;
- 		device->node_id = node->node_id;
-+		smp_wmb();  /* update node_id before generation */
- 		device->generation = card->generation;
- 		if (atomic_read(&device->state) == FW_DEVICE_RUNNING) {
- 			PREPARE_DELAYED_WORK(&device->work, fw_device_update);
-diff -Naurp linux-2.6-git/drivers/firewire/fw-device.h firewire-git/drivers/firewire/fw-device.h
---- linux-2.6-git/drivers/firewire/fw-device.h	2008-01-01 22:50:33.000000000 -0500
-+++ firewire-git/drivers/firewire/fw-device.h	2008-01-25 12:41:22.000000000 -0500
-@@ -35,6 +35,18 @@ struct fw_attribute_group {
- 	struct attribute *attrs[11];
- };
+ 	down_read(&idr_rwsem);
+ 	device = idr_find(&fw_device_idr, MINOR(devt));
++	if (device)
++		fw_device_get(device);
+ 	up_read(&idr_rwsem);
  
-+/*
-+ * Note, fw_device.generation always has to be read before fw_device.node_id.
-+ * Use SMP memory barriers to ensure this.  Otherwise requests will be sent
-+ * to an outdated node_id if the generation was updated in the meantime due
-+ * to a bus reset.
-+ *
-+ * Likewise, fw-core will take care to update .node_id before .generation so
-+ * that whenever fw_device.generation is current WRT the actual bus generation,
-+ * fw_device.node_id is guaranteed to be current too.
-+ *
-+ * The same applies to fw_device.card->node_id vs. fw_device.generation.
-+ */
- struct fw_device {
- 	atomic_t state;
- 	struct fw_node *node;
-diff -Naurp linux-2.6-git/drivers/firewire/fw-ohci.c firewire-git/drivers/firewire/fw-ohci.c
---- linux-2.6-git/drivers/firewire/fw-ohci.c	2008-01-01 22:50:33.000000000 -0500
-+++ firewire-git/drivers/firewire/fw-ohci.c	2008-01-23 16:01:36.000000000 -0500
-@@ -98,17 +98,48 @@ struct context;
- typedef int (*descriptor_callback_t)(struct context *ctx,
- 				     struct descriptor *d,
- 				     struct descriptor *last);
-+
-+/*
-+ * A buffer that contains a block of DMA-able coherent memory used for
-+ * storing a portion of a DMA descriptor program.
-+ */
-+struct descriptor_buffer {
-+	struct list_head list;
-+	dma_addr_t buffer_bus;
-+	size_t buffer_size;
-+	size_t used;
-+	struct descriptor buffer[0];
-+};
-+
- struct context {
- 	struct fw_ohci *ohci;
- 	u32 regs;
-+	int total_allocation;
- 
--	struct descriptor *buffer;
--	dma_addr_t buffer_bus;
--	size_t buffer_size;
--	struct descriptor *head_descriptor;
--	struct descriptor *tail_descriptor;
--	struct descriptor *tail_descriptor_last;
--	struct descriptor *prev_descriptor;
-+	/*
-+	 * List of page-sized buffers for storing DMA descriptors.
-+	 * Head of list contains buffers in use and tail of list contains
-+	 * free buffers.
-+	 */
-+	struct list_head buffer_list;
-+
-+	/*
-+	 * Pointer to a buffer inside buffer_list that contains the tail
-+	 * end of the current DMA program.
-+	 */
-+	struct descriptor_buffer *buffer_tail;
-+
-+	/*
-+	 * The descriptor containing the branch address of the first
-+	 * descriptor that has not yet been filled by the device.
-+	 */
-+	struct descriptor *last;
-+
-+	/*
-+	 * The last descriptor in the DMA program.  It contains the branch
-+	 * address that must be updated upon appending a new descriptor.
-+	 */
-+	struct descriptor *prev;
- 
- 	descriptor_callback_t callback;
- 
-@@ -125,6 +156,7 @@ struct context {
- struct iso_context {
- 	struct fw_iso_context base;
- 	struct context context;
-+	int excess_bytes;
- 	void *header;
- 	size_t header_length;
- };
-@@ -197,8 +229,6 @@ static inline struct fw_ohci *fw_ohci(st
- #define SELF_ID_BUF_SIZE		0x800
- #define OHCI_TCODE_PHY_PACKET		0x0e
- #define OHCI_VERSION_1_1		0x010010
--#define ISO_BUFFER_SIZE			(64 * 1024)
--#define AT_BUFFER_SIZE			4096
+ 	return device;
+@@ -627,13 +626,14 @@ static void fw_device_shutdown(struct work_struct *work)
+ 		container_of(work, struct fw_device, work.work);
+ 	int minor = MINOR(device->device.devt);
  
- static char ohci_driver_name[] = KBUILD_MODNAME;
- 
-@@ -455,71 +485,108 @@ find_branch_descriptor(struct descriptor
- static void context_tasklet(unsigned long data)
- {
- 	struct context *ctx = (struct context *) data;
--	struct fw_ohci *ohci = ctx->ohci;
- 	struct descriptor *d, *last;
- 	u32 address;
- 	int z;
-+	struct descriptor_buffer *desc;
- 
--	dma_sync_single_for_cpu(ohci->card.device, ctx->buffer_bus,
--				ctx->buffer_size, DMA_TO_DEVICE);
+-	down_write(&idr_rwsem);
+-	idr_remove(&fw_device_idr, minor);
+-	up_write(&idr_rwsem);
 -
--	d    = ctx->tail_descriptor;
--	last = ctx->tail_descriptor_last;
--
-+	desc = list_entry(ctx->buffer_list.next,
-+			struct descriptor_buffer, list);
-+	last = ctx->last;
- 	while (last->branch_address != 0) {
-+		struct descriptor_buffer *old_desc = desc;
- 		address = le32_to_cpu(last->branch_address);
- 		z = address & 0xf;
--		d = ctx->buffer + (address - ctx->buffer_bus) / sizeof(*d);
-+		address &= ~0xf;
-+
-+		/* If the branch address points to a buffer outside of the
-+		 * current buffer, advance to the next buffer. */
-+		if (address < desc->buffer_bus ||
-+				address >= desc->buffer_bus + desc->used)
-+			desc = list_entry(desc->list.next,
-+					struct descriptor_buffer, list);
-+		d = desc->buffer + (address - desc->buffer_bus) / sizeof(*d);
- 		last = find_branch_descriptor(d, z);
- 
- 		if (!ctx->callback(ctx, d, last))
- 			break;
- 
--		ctx->tail_descriptor      = d;
--		ctx->tail_descriptor_last = last;
-+		if (old_desc != desc) {
-+			/* If we've advanced to the next buffer, move the
-+			 * previous buffer to the free list. */
-+			unsigned long flags;
-+			old_desc->used = 0;
-+			spin_lock_irqsave(&ctx->ohci->lock, flags);
-+			list_move_tail(&old_desc->list, &ctx->buffer_list);
-+			spin_unlock_irqrestore(&ctx->ohci->lock, flags);
-+		}
-+		ctx->last = last;
- 	}
- }
- 
-+/*
-+ * Allocate a new buffer and add it to the list of free buffers for this
-+ * context.  Must be called with ohci->lock held.
-+ */
-+static int
-+context_add_buffer(struct context *ctx)
-+{
-+	struct descriptor_buffer *desc;
-+	dma_addr_t bus_addr;
-+	int offset;
-+
-+	/*
-+	 * 16MB of descriptors should be far more than enough for any DMA
-+	 * program.  This will catch run-away userspace or DoS attacks.
-+	 */
-+	if (ctx->total_allocation >= 16*1024*1024)
-+		return -ENOMEM;
-+
-+	desc = dma_alloc_coherent(ctx->ohci->card.device, PAGE_SIZE,
-+			&bus_addr, GFP_ATOMIC);
-+	if (!desc)
-+		return -ENOMEM;
-+
-+	offset = (void *)&desc->buffer - (void *)desc;
-+	desc->buffer_size = PAGE_SIZE - offset;
-+	desc->buffer_bus = bus_addr + offset;
-+	desc->used = 0;
-+
-+	list_add_tail(&desc->list, &ctx->buffer_list);
-+	ctx->total_allocation += PAGE_SIZE;
+ 	fw_device_cdev_remove(device);
+ 	device_for_each_child(&device->device, NULL, shutdown_unit);
+ 	device_unregister(&device->device);
 +
-+	return 0;
-+}
-+
- static int
- context_init(struct context *ctx, struct fw_ohci *ohci,
--	     size_t buffer_size, u32 regs,
--	     descriptor_callback_t callback)
-+	     u32 regs, descriptor_callback_t callback)
- {
- 	ctx->ohci = ohci;
- 	ctx->regs = regs;
--	ctx->buffer_size = buffer_size;
--	ctx->buffer = kmalloc(buffer_size, GFP_KERNEL);
--	if (ctx->buffer == NULL)
-+	ctx->total_allocation = 0;
-+
-+	INIT_LIST_HEAD(&ctx->buffer_list);
-+	if (context_add_buffer(ctx) < 0)
- 		return -ENOMEM;
- 
-+	ctx->buffer_tail = list_entry(ctx->buffer_list.next,
-+			struct descriptor_buffer, list);
-+
- 	tasklet_init(&ctx->tasklet, context_tasklet, (unsigned long)ctx);
- 	ctx->callback = callback;
- 
--	ctx->buffer_bus =
--		dma_map_single(ohci->card.device, ctx->buffer,
--			       buffer_size, DMA_TO_DEVICE);
--	if (dma_mapping_error(ctx->buffer_bus)) {
--		kfree(ctx->buffer);
--		return -ENOMEM;
--	}
--
--	ctx->head_descriptor      = ctx->buffer;
--	ctx->prev_descriptor      = ctx->buffer;
--	ctx->tail_descriptor      = ctx->buffer;
--	ctx->tail_descriptor_last = ctx->buffer;
--
- 	/*
- 	 * We put a dummy descriptor in the buffer that has a NULL
- 	 * branch address and looks like it's been sent.  That way we
--	 * have a descriptor to append DMA programs to.  Also, the
--	 * ring buffer invariant is that it always has at least one
--	 * element so that head == tail means buffer full.
-+	 * have a descriptor to append DMA programs to.
- 	 */
--
--	memset(ctx->head_descriptor, 0, sizeof(*ctx->head_descriptor));
--	ctx->head_descriptor->control = cpu_to_le16(DESCRIPTOR_OUTPUT_LAST);
--	ctx->head_descriptor->transfer_status = cpu_to_le16(0x8011);
--	ctx->head_descriptor++;
-+	memset(ctx->buffer_tail->buffer, 0, sizeof(*ctx->buffer_tail->buffer));
-+	ctx->buffer_tail->buffer->control = cpu_to_le16(DESCRIPTOR_OUTPUT_LAST);
-+	ctx->buffer_tail->buffer->transfer_status = cpu_to_le16(0x8011);
-+	ctx->buffer_tail->used += sizeof(*ctx->buffer_tail->buffer);
-+	ctx->last = ctx->buffer_tail->buffer;
-+	ctx->prev = ctx->buffer_tail->buffer;
- 
- 	return 0;
- }
-@@ -528,35 +595,42 @@ static void
- context_release(struct context *ctx)
- {
- 	struct fw_card *card = &ctx->ohci->card;
-+	struct descriptor_buffer *desc, *tmp;
- 
--	dma_unmap_single(card->device, ctx->buffer_bus,
--			 ctx->buffer_size, DMA_TO_DEVICE);
--	kfree(ctx->buffer);
-+	list_for_each_entry_safe(desc, tmp, &ctx->buffer_list, list)
-+		dma_free_coherent(card->device, PAGE_SIZE, desc,
-+			desc->buffer_bus -
-+			((void *)&desc->buffer - (void *)desc));
++	down_write(&idr_rwsem);
++	idr_remove(&fw_device_idr, minor);
++	up_write(&idr_rwsem);
++	fw_device_put(device);
  }
  
-+/* Must be called with ohci->lock held */
- static struct descriptor *
- context_get_descriptors(struct context *ctx, int z, dma_addr_t *d_bus)
- {
--	struct descriptor *d, *tail, *end;
-+	struct descriptor *d = NULL;
-+	struct descriptor_buffer *desc = ctx->buffer_tail;
- 
--	d = ctx->head_descriptor;
--	tail = ctx->tail_descriptor;
--	end = ctx->buffer + ctx->buffer_size / sizeof(*d);
-+	if (z * sizeof(*d) > desc->buffer_size)
-+		return NULL;
- 
--	if (d + z <= tail) {
--		goto has_space;
--	} else if (d > tail && d + z <= end) {
--		goto has_space;
--	} else if (d > tail && ctx->buffer + z <= tail) {
--		d = ctx->buffer;
--		goto has_space;
-+	if (z * sizeof(*d) > desc->buffer_size - desc->used) {
-+		/* No room for the descriptor in this buffer, so advance to the
-+		 * next one. */
-+
-+		if (desc->list.next == &ctx->buffer_list) {
-+			/* If there is no free buffer next in the list,
-+			 * allocate one. */
-+			if (context_add_buffer(ctx) < 0)
-+				return NULL;
-+		}
-+		desc = list_entry(desc->list.next,
-+				struct descriptor_buffer, list);
-+		ctx->buffer_tail = desc;
+ static struct device_type fw_device_type = {
+@@ -682,10 +682,13 @@ static void fw_device_init(struct work_struct *work)
  	}
  
--	return NULL;
--
-- has_space:
-+	d = desc->buffer + desc->used / sizeof(*d);
- 	memset(d, 0, z * sizeof(*d));
--	*d_bus = ctx->buffer_bus + (d - ctx->buffer) * sizeof(*d);
-+	*d_bus = desc->buffer_bus + desc->used;
- 
- 	return d;
- }
-@@ -566,7 +640,7 @@ static void context_run(struct context *
- 	struct fw_ohci *ohci = ctx->ohci;
- 
- 	reg_write(ohci, COMMAND_PTR(ctx->regs),
--		  le32_to_cpu(ctx->tail_descriptor_last->branch_address));
-+		  le32_to_cpu(ctx->last->branch_address));
- 	reg_write(ohci, CONTROL_CLEAR(ctx->regs), ~0);
- 	reg_write(ohci, CONTROL_SET(ctx->regs), CONTEXT_RUN | extra);
- 	flush_writes(ohci);
-@@ -576,15 +650,13 @@ static void context_append(struct contex
- 			   struct descriptor *d, int z, int extra)
- {
- 	dma_addr_t d_bus;
-+	struct descriptor_buffer *desc = ctx->buffer_tail;
- 
--	d_bus = ctx->buffer_bus + (d - ctx->buffer) * sizeof(*d);
--
--	ctx->head_descriptor = d + z + extra;
--	ctx->prev_descriptor->branch_address = cpu_to_le32(d_bus | z);
--	ctx->prev_descriptor = find_branch_descriptor(d, z);
-+	d_bus = desc->buffer_bus + (d - desc->buffer) * sizeof(*d);
- 
--	dma_sync_single_for_device(ctx->ohci->card.device, ctx->buffer_bus,
--				   ctx->buffer_size, DMA_TO_DEVICE);
-+	desc->used += (z + extra) * sizeof(*d);
-+	ctx->prev->branch_address = cpu_to_le32(d_bus | z);
-+	ctx->prev = find_branch_descriptor(d, z);
- 
- 	reg_write(ctx->ohci, CONTROL_SET(ctx->regs), CONTEXT_WAKE);
- 	flush_writes(ctx->ohci);
-@@ -1078,6 +1150,13 @@ static irqreturn_t irq_handler(int irq, 
- 	if (unlikely(event & OHCI1394_postedWriteErr))
- 		fw_error("PCI posted write error\n");
- 
-+	if (unlikely(event & OHCI1394_cycleTooLong)) {
-+		if (printk_ratelimit())
-+			fw_notify("isochronous cycle too long\n");
-+		reg_write(ohci, OHCI1394_LinkControlSet,
-+			  OHCI1394_LinkControl_cycleMaster);
-+	}
+ 	err = -ENOMEM;
 +
- 	if (event & OHCI1394_cycle64Seconds) {
- 		cycle_time = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
- 		if ((cycle_time & 0x80000000) == 0)
-@@ -1151,8 +1230,8 @@ static int ohci_enable(struct fw_card *c
- 		  OHCI1394_RQPkt | OHCI1394_RSPkt |
- 		  OHCI1394_reqTxComplete | OHCI1394_respTxComplete |
- 		  OHCI1394_isochRx | OHCI1394_isochTx |
--		  OHCI1394_postedWriteErr | OHCI1394_cycle64Seconds |
--		  OHCI1394_masterIntEnable);
-+		  OHCI1394_postedWriteErr | OHCI1394_cycleTooLong |
-+		  OHCI1394_cycle64Seconds | OHCI1394_masterIntEnable);
- 
- 	/* Activate link_on bit and contender bit in our self ID packets.*/
- 	if (ohci_update_phy_reg(card, 4, 0,
-@@ -1408,9 +1487,13 @@ static int handle_ir_dualbuffer_packet(s
- 	void *p, *end;
- 	int i;
- 
--	if (db->first_res_count > 0 && db->second_res_count > 0)
--		/* This descriptor isn't done yet, stop iteration. */
--		return 0;
-+	if (db->first_res_count > 0 && db->second_res_count > 0) {
-+		if (ctx->excess_bytes <= le16_to_cpu(db->second_req_count)) {
-+			/* This descriptor isn't done yet, stop iteration. */
-+			return 0;
-+		}
-+		ctx->excess_bytes -= le16_to_cpu(db->second_req_count);
-+	}
- 
- 	header_length = le16_to_cpu(db->first_req_count) -
- 		le16_to_cpu(db->first_res_count);
-@@ -1429,11 +1512,15 @@ static int handle_ir_dualbuffer_packet(s
- 		*(u32 *) (ctx->header + i) = __swab32(*(u32 *) (p + 4));
- 		memcpy(ctx->header + i + 4, p + 8, ctx->base.header_size - 4);
- 		i += ctx->base.header_size;
-+		ctx->excess_bytes +=
-+			(le32_to_cpu(*(u32 *)(p + 4)) >> 16) & 0xffff;
- 		p += ctx->base.header_size + 4;
- 	}
--
- 	ctx->header_length = i;
- 
-+	ctx->excess_bytes -= le16_to_cpu(db->second_req_count) -
-+		le16_to_cpu(db->second_res_count);
++	fw_device_get(device);
+ 	down_write(&idr_rwsem);
+ 	if (idr_pre_get(&fw_device_idr, GFP_KERNEL))
+ 		err = idr_get_new(&fw_device_idr, device, &minor);
+ 	up_write(&idr_rwsem);
 +
- 	if (le16_to_cpu(db->control) & DESCRIPTOR_IRQ_ALWAYS) {
- 		ir_header = (__le32 *) (db + 1);
- 		ctx->base.callback(&ctx->base,
-@@ -1452,24 +1539,24 @@ static int handle_ir_packet_per_buffer(s
- {
- 	struct iso_context *ctx =
- 		container_of(context, struct iso_context, context);
--	struct descriptor *pd = d + 1;
-+	struct descriptor *pd;
- 	__le32 *ir_header;
--	size_t header_length;
--	void *p, *end;
--	int i, z;
-+	void *p;
-+	int i;
- 
--	if (pd->res_count == pd->req_count)
-+	for (pd = d; pd <= last; pd++) {
-+		if (pd->transfer_status)
-+			break;
-+	}
-+	if (pd > last)
- 		/* Descriptor(s) not done yet, stop iteration */
- 		return 0;
+ 	if (err < 0)
+ 		goto error;
  
--	header_length = le16_to_cpu(d->req_count);
--
- 	i   = ctx->header_length;
--	z   = le32_to_cpu(pd->branch_address) & 0xf;
--	p   = d + z;
--	end = p + header_length;
-+	p   = last + 1;
- 
--	while (p < end && i + ctx->base.header_size <= PAGE_SIZE) {
-+	if (ctx->base.header_size > 0 &&
-+			i + ctx->base.header_size <= PAGE_SIZE) {
- 		/*
- 		 * The iso header is byteswapped to little endian by
- 		 * the controller, but the remaining header quadlets
-@@ -1478,14 +1565,11 @@ static int handle_ir_packet_per_buffer(s
- 		 */
- 		*(u32 *) (ctx->header + i) = __swab32(*(u32 *) (p + 4));
- 		memcpy(ctx->header + i + 4, p + 8, ctx->base.header_size - 4);
--		i += ctx->base.header_size;
--		p += ctx->base.header_size + 4;
-+		ctx->header_length += ctx->base.header_size;
- 	}
- 
--	ctx->header_length = i;
--
--	if (le16_to_cpu(pd->control) & DESCRIPTOR_IRQ_ALWAYS) {
--		ir_header = (__le32 *) (d + z);
-+	if (le16_to_cpu(last->control) & DESCRIPTOR_IRQ_ALWAYS) {
-+		ir_header = (__le32 *) p;
- 		ctx->base.callback(&ctx->base,
- 				   le32_to_cpu(ir_header[0]) & 0xffff,
- 				   ctx->header_length, ctx->header,
-@@ -1493,7 +1577,6 @@ static int handle_ir_packet_per_buffer(s
- 		ctx->header_length = 0;
- 	}
- 
--
- 	return 1;
- }
- 
-@@ -1559,8 +1642,7 @@ ohci_allocate_iso_context(struct fw_card
- 	if (ctx->header == NULL)
- 		goto out;
- 
--	retval = context_init(&ctx->context, ohci, ISO_BUFFER_SIZE,
--			      regs, callback);
-+	retval = context_init(&ctx->context, ohci, regs, callback);
- 	if (retval < 0)
- 		goto out_with_header;
- 
-@@ -1775,19 +1857,6 @@ ohci_queue_iso_receive_dualbuffer(struct
- 	 * packet, retransmit or terminate..
+@@ -717,13 +720,22 @@ static void fw_device_init(struct work_struct *work)
  	 */
- 
--	if (packet->skip) {
--		d = context_get_descriptors(&ctx->context, 2, &d_bus);
--		if (d == NULL)
--			return -ENOMEM;
--
--		db = (struct db_descriptor *) d;
--		db->control = cpu_to_le16(DESCRIPTOR_STATUS |
--					  DESCRIPTOR_BRANCH_ALWAYS |
--					  DESCRIPTOR_WAIT);
--		db->first_size = cpu_to_le16(ctx->base.header_size + 4);
--		context_append(&ctx->context, d, 2, 0);
--	}
--
- 	p = packet;
- 	z = 2;
- 
-@@ -1815,11 +1884,18 @@ ohci_queue_iso_receive_dualbuffer(struct
- 		db->control = cpu_to_le16(DESCRIPTOR_STATUS |
- 					  DESCRIPTOR_BRANCH_ALWAYS);
- 		db->first_size = cpu_to_le16(ctx->base.header_size + 4);
--		db->first_req_count = cpu_to_le16(header_size);
-+		if (p->skip && rest == p->payload_length) {
-+			db->control |= cpu_to_le16(DESCRIPTOR_WAIT);
-+			db->first_req_count = db->first_size;
-+		} else {
-+			db->first_req_count = cpu_to_le16(header_size);
-+		}
- 		db->first_res_count = db->first_req_count;
- 		db->first_buffer = cpu_to_le32(d_bus + sizeof(*db));
- 
--		if (offset + rest < PAGE_SIZE)
-+		if (p->skip && rest == p->payload_length)
-+			length = 4;
-+		else if (offset + rest < PAGE_SIZE)
- 			length = rest;
- 		else
- 			length = PAGE_SIZE - offset;
-@@ -1835,7 +1911,8 @@ ohci_queue_iso_receive_dualbuffer(struct
- 		context_append(&ctx->context, d, z, header_z);
- 		offset = (offset + length) & ~PAGE_MASK;
- 		rest -= length;
--		page++;
-+		if (offset == 0)
-+			page++;
- 	}
- 
- 	return 0;
-@@ -1849,67 +1926,70 @@ ohci_queue_iso_receive_packet_per_buffer
- {
- 	struct iso_context *ctx = container_of(base, struct iso_context, base);
- 	struct descriptor *d = NULL, *pd = NULL;
--	struct fw_iso_packet *p;
-+	struct fw_iso_packet *p = packet;
- 	dma_addr_t d_bus, page_bus;
- 	u32 z, header_z, rest;
--	int i, page, offset, packet_count, header_size;
--
--	if (packet->skip) {
--		d = context_get_descriptors(&ctx->context, 1, &d_bus);
--		if (d == NULL)
--			return -ENOMEM;
--
--		d->control = cpu_to_le16(DESCRIPTOR_STATUS |
--					 DESCRIPTOR_INPUT_LAST |
--					 DESCRIPTOR_BRANCH_ALWAYS |
--					 DESCRIPTOR_WAIT);
--		context_append(&ctx->context, d, 1, 0);
--	}
--
--	/* one descriptor for header, one for payload */
--	/* FIXME: handle cases where we need multiple desc. for payload */
--	z = 2;
--	p = packet;
-+	int i, j, length;
-+	int page, offset, packet_count, header_size, payload_per_buffer;
+ 	if (atomic_cmpxchg(&device->state,
+ 		    FW_DEVICE_INITIALIZING,
+-		    FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN)
++		    FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) {
+ 		fw_device_shutdown(&device->work.work);
+-	else
+-		fw_notify("created new fw device %s "
+-			  "(%d config rom retries, S%d00)\n",
+-			  device->device.bus_id, device->config_rom_retries,
+-			  1 << device->max_speed);
++	} else {
++		if (device->config_rom_retries)
++			fw_notify("created device %s: GUID %08x%08x, S%d00, "
++				  "%d config ROM retries\n",
++				  device->device.bus_id,
++				  device->config_rom[3], device->config_rom[4],
++				  1 << device->max_speed,
++				  device->config_rom_retries);
++		else
++			fw_notify("created device %s: GUID %08x%08x, S%d00\n",
++				  device->device.bus_id,
++				  device->config_rom[3], device->config_rom[4],
++				  1 << device->max_speed);
++	}
  
  	/*
- 	 * The OHCI controller puts the status word in the
- 	 * buffer too, so we need 4 extra bytes per packet.
- 	 */
- 	packet_count = p->header_length / ctx->base.header_size;
--	header_size  = packet_count * (ctx->base.header_size + 4);
-+	header_size  = ctx->base.header_size + 4;
- 
- 	/* Get header size in number of descriptors. */
- 	header_z = DIV_ROUND_UP(header_size, sizeof(*d));
- 	page     = payload >> PAGE_SHIFT;
- 	offset   = payload & ~PAGE_MASK;
--	rest     = p->payload_length;
-+	payload_per_buffer = p->payload_length / packet_count;
- 
- 	for (i = 0; i < packet_count; i++) {
- 		/* d points to the header descriptor */
-+		z = DIV_ROUND_UP(payload_per_buffer + offset, PAGE_SIZE) + 1;
- 		d = context_get_descriptors(&ctx->context,
--					    z + header_z, &d_bus);
-+				z + header_z, &d_bus);
- 		if (d == NULL)
- 			return -ENOMEM;
- 
--		d->control      = cpu_to_le16(DESCRIPTOR_INPUT_MORE);
-+		d->control      = cpu_to_le16(DESCRIPTOR_STATUS |
-+					      DESCRIPTOR_INPUT_MORE);
-+		if (p->skip && i == 0)
-+			d->control |= cpu_to_le16(DESCRIPTOR_WAIT);
- 		d->req_count    = cpu_to_le16(header_size);
- 		d->res_count    = d->req_count;
-+		d->transfer_status = 0;
- 		d->data_address = cpu_to_le32(d_bus + (z * sizeof(*d)));
- 
--		/* pd points to the payload descriptor */
--		pd = d + 1;
-+		rest = payload_per_buffer;
-+		for (j = 1; j < z; j++) {
-+			pd = d + j;
-+			pd->control = cpu_to_le16(DESCRIPTOR_STATUS |
-+						  DESCRIPTOR_INPUT_MORE);
-+
-+			if (offset + rest < PAGE_SIZE)
-+				length = rest;
-+			else
-+				length = PAGE_SIZE - offset;
-+			pd->req_count = cpu_to_le16(length);
-+			pd->res_count = pd->req_count;
-+			pd->transfer_status = 0;
-+
-+			page_bus = page_private(buffer->pages[page]);
-+			pd->data_address = cpu_to_le32(page_bus + offset);
-+
-+			offset = (offset + length) & ~PAGE_MASK;
-+			rest -= length;
-+			if (offset == 0)
-+				page++;
-+		}
- 		pd->control = cpu_to_le16(DESCRIPTOR_STATUS |
- 					  DESCRIPTOR_INPUT_LAST |
- 					  DESCRIPTOR_BRANCH_ALWAYS);
--		if (p->interrupt)
-+		if (p->interrupt && i == packet_count - 1)
- 			pd->control |= cpu_to_le16(DESCRIPTOR_IRQ_ALWAYS);
- 
--		pd->req_count = cpu_to_le16(rest);
--		pd->res_count = pd->req_count;
--
--		page_bus = page_private(buffer->pages[page]);
--		pd->data_address = cpu_to_le32(page_bus + offset);
--
- 		context_append(&ctx->context, d, z, header_z);
- 	}
- 
-@@ -1923,16 +2003,22 @@ ohci_queue_iso(struct fw_iso_context *ba
- 	       unsigned long payload)
- {
- 	struct iso_context *ctx = container_of(base, struct iso_context, base);
-+	unsigned long flags;
-+	int retval;
- 
-+	spin_lock_irqsave(&ctx->context.ohci->lock, flags);
- 	if (base->type == FW_ISO_CONTEXT_TRANSMIT)
--		return ohci_queue_iso_transmit(base, packet, buffer, payload);
-+		retval = ohci_queue_iso_transmit(base, packet, buffer, payload);
- 	else if (ctx->context.ohci->version >= OHCI_VERSION_1_1)
--		return ohci_queue_iso_receive_dualbuffer(base, packet,
-+		retval = ohci_queue_iso_receive_dualbuffer(base, packet,
- 							 buffer, payload);
- 	else
--		return ohci_queue_iso_receive_packet_per_buffer(base, packet,
-+		retval = ohci_queue_iso_receive_packet_per_buffer(base, packet,
- 								buffer,
- 								payload);
-+	spin_unlock_irqrestore(&ctx->context.ohci->lock, flags);
-+
-+	return retval;
- }
+ 	 * Reschedule the IRM work if we just finished reading the
+@@ -741,7 +753,9 @@ static void fw_device_init(struct work_struct *work)
+ 	idr_remove(&fw_device_idr, minor);
+ 	up_write(&idr_rwsem);
+  error:
+-	put_device(&device->device);
++	fw_device_put(device);		/* fw_device_idr's reference */
++
++	put_device(&device->device);	/* our reference */
+ }
+ 
+ static int update_unit(struct device *dev, void *data)
+diff --git a/drivers/firewire/fw-device.h b/drivers/firewire/fw-device.h
+index 0854fe2..43808c0 100644
+--- a/drivers/firewire/fw-device.h
++++ b/drivers/firewire/fw-device.h
+@@ -77,13 +77,13 @@ fw_device_is_shutdown(struct fw_device *device)
+ }
+ 
+ struct fw_device *fw_device_get(struct fw_device *device);
++struct fw_device *fw_device_get_by_devt(dev_t devt);
+ void fw_device_put(struct fw_device *device);
+ int fw_device_enable_phys_dma(struct fw_device *device);
+ 
+ void fw_device_cdev_update(struct fw_device *device);
+ void fw_device_cdev_remove(struct fw_device *device);
+ 
+-struct fw_device *fw_device_from_devt(dev_t devt);
+ extern int fw_cdev_major;
+ 
+ struct fw_unit {
+diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
+index 19ece9b..5259491 100644
+--- a/drivers/firewire/fw-sbp2.c
++++ b/drivers/firewire/fw-sbp2.c
+@@ -28,14 +28,15 @@
+  * and many others.
+  */
+ 
++#include <linux/blkdev.h>
++#include <linux/delay.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
+ #include <linux/kernel.h>
++#include <linux/mod_devicetable.h>
+ #include <linux/module.h>
+ #include <linux/moduleparam.h>
+-#include <linux/mod_devicetable.h>
+-#include <linux/device.h>
+ #include <linux/scatterlist.h>
+-#include <linux/dma-mapping.h>
+-#include <linux/blkdev.h>
+ #include <linux/string.h>
+ #include <linux/stringify.h>
+ #include <linux/timer.h>
+@@ -47,9 +48,9 @@
+ #include <scsi/scsi_device.h>
+ #include <scsi/scsi_host.h>
+ 
+-#include "fw-transaction.h"
+-#include "fw-topology.h"
+ #include "fw-device.h"
++#include "fw-topology.h"
++#include "fw-transaction.h"
+ 
+ /*
+  * So far only bridges from Oxford Semiconductor are known to support
+@@ -82,6 +83,9 @@ MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device "
+  *   Avoids access beyond actual disk limits on devices with an off-by-one bug.
+  *   Don't use this with devices which don't have this bug.
+  *
++ * - delay inquiry
++ *   Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
++ *
+  * - override internal blacklist
+  *   Instead of adding to the built-in blacklist, use only the workarounds
+  *   specified in the module load parameter.
+@@ -91,6 +95,8 @@ MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device "
+ #define SBP2_WORKAROUND_INQUIRY_36	0x2
+ #define SBP2_WORKAROUND_MODE_SENSE_8	0x4
+ #define SBP2_WORKAROUND_FIX_CAPACITY	0x8
++#define SBP2_WORKAROUND_DELAY_INQUIRY	0x10
++#define SBP2_INQUIRY_DELAY		12
+ #define SBP2_WORKAROUND_OVERRIDE	0x100
+ 
+ static int sbp2_param_workarounds;
+@@ -100,6 +106,7 @@ MODULE_PARM_DESC(workarounds, "Work around device bugs (default = 0"
+ 	", 36 byte inquiry = "    __stringify(SBP2_WORKAROUND_INQUIRY_36)
+ 	", skip mode page 8 = "   __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
+ 	", fix capacity = "       __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
++	", delay inquiry = "      __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
+ 	", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
+ 	", or a combination)");
+ 
+@@ -132,6 +139,7 @@ struct sbp2_logical_unit {
+ 	int generation;
+ 	int retries;
+ 	struct delayed_work work;
++	bool blocked;
+ };
  
- static const struct fw_card_driver ohci_driver = {
-@@ -2004,10 +2090,10 @@ pci_probe(struct pci_dev *dev, const str
- 	ar_context_init(&ohci->ar_response_ctx, ohci,
- 			OHCI1394_AsRspRcvContextControlSet);
- 
--	context_init(&ohci->at_request_ctx, ohci, AT_BUFFER_SIZE,
-+	context_init(&ohci->at_request_ctx, ohci,
- 		     OHCI1394_AsReqTrContextControlSet, handle_at_packet);
- 
--	context_init(&ohci->at_response_ctx, ohci, AT_BUFFER_SIZE,
-+	context_init(&ohci->at_response_ctx, ohci,
- 		     OHCI1394_AsRspTrContextControlSet, handle_at_packet);
- 
- 	reg_write(ohci, OHCI1394_IsoRecvIntMaskSet, ~0);
-diff -Naurp linux-2.6-git/drivers/firewire/fw-sbp2.c firewire-git/drivers/firewire/fw-sbp2.c
---- linux-2.6-git/drivers/firewire/fw-sbp2.c	2008-01-28 10:57:54.000000000 -0500
-+++ firewire-git/drivers/firewire/fw-sbp2.c	2008-01-28 10:58:18.000000000 -0500
-@@ -140,26 +140,32 @@ struct sbp2_logical_unit {
+ /*
+@@ -141,16 +149,18 @@ struct sbp2_logical_unit {
  struct sbp2_target {
  	struct kref kref;
  	struct fw_unit *unit;
++	const char *bus_id;
 +	struct list_head lu_list;
  
  	u64 management_agent_address;
@@ -804,34 +276,25 @@
 -
 -	unsigned workarounds;
 -	struct list_head lu_list;
+-
 +	unsigned int workarounds;
-+	unsigned int mgt_orb_timeout;
+ 	unsigned int mgt_orb_timeout;
++
++	int dont_block;	/* counter for each logical unit */
++	int blocked;	/* ditto */
  };
  
--#define SBP2_MAX_SG_ELEMENT_LENGTH	0xf000
--#define SBP2_MAX_SECTORS		255	/* Max sectors supported */
+ /*
+@@ -160,7 +170,7 @@ struct sbp2_target {
+  */
+ #define SBP2_MIN_LOGIN_ORB_TIMEOUT	5000U	/* Timeout in ms */
+ #define SBP2_MAX_LOGIN_ORB_TIMEOUT	40000U	/* Timeout in ms */
 -#define SBP2_ORB_TIMEOUT		2000	/* Timeout in ms */
--
-+/*
-+ * Per section 7.4.8 of the SBP-2 spec, a mgt_ORB_timeout value can be
-+ * provided in the config rom. Most devices do provide a value, which
-+ * we'll use for login management orbs, but with some sane limits.
-+ */
-+#define SBP2_MIN_LOGIN_ORB_TIMEOUT	5000U	/* Timeout in ms */
-+#define SBP2_MAX_LOGIN_ORB_TIMEOUT	40000U	/* Timeout in ms */
 +#define SBP2_ORB_TIMEOUT		2000U	/* Timeout in ms */
  #define SBP2_ORB_NULL			0x80000000
-+#define SBP2_MAX_SG_ELEMENT_LENGTH	0xf000
+ #define SBP2_MAX_SG_ELEMENT_LENGTH	0xf000
  
- #define SBP2_DIRECTION_TO_MEDIA		0x0
- #define SBP2_DIRECTION_FROM_MEDIA	0x1
- 
- /* Unit directory keys */
-+#define SBP2_CSR_UNIT_CHARACTERISTICS	0x3a
- #define SBP2_CSR_FIRMWARE_REVISION	0x3c
- #define SBP2_CSR_LOGICAL_UNIT_NUMBER	0x14
- #define SBP2_CSR_LOGICAL_UNIT_DIRECTORY	0xd4
-@@ -288,7 +294,7 @@ struct sbp2_command_orb {
+@@ -297,7 +307,7 @@ struct sbp2_command_orb {
  static const struct {
  	u32 firmware_revision;
  	u32 model;
@@ -840,149 +303,365 @@
  } sbp2_workarounds_table[] = {
  	/* DViCO Momobay CX-1 with TSB42AA9 bridge */ {
  		.firmware_revision	= 0x002800,
-@@ -489,6 +495,7 @@ sbp2_send_management_orb(struct sbp2_log
- {
- 	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
- 	struct sbp2_management_orb *orb;
-+	unsigned int timeout;
+@@ -305,6 +315,11 @@ static const struct {
+ 		.workarounds		= SBP2_WORKAROUND_INQUIRY_36 |
+ 					  SBP2_WORKAROUND_MODE_SENSE_8,
+ 	},
++	/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
++		.firmware_revision	= 0x002800,
++		.model			= 0x000000,
++		.workarounds		= SBP2_WORKAROUND_DELAY_INQUIRY,
++	},
+ 	/* Initio bridges, actually only needed for some older ones */ {
+ 		.firmware_revision	= 0x000200,
+ 		.model			= ~0,
+@@ -501,6 +516,9 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int node_id,
+ 	unsigned int timeout;
  	int retval = -ENOMEM;
  
++	if (function == SBP2_LOGOUT_REQUEST && fw_device_is_shutdown(device))
++		return 0;
++
  	orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
-@@ -516,9 +523,13 @@ sbp2_send_management_orb(struct sbp2_log
- 	orb->request.status_fifo.low  = lu->address_handler.offset;
- 
- 	if (function == SBP2_LOGIN_REQUEST) {
-+		/* Ask for 2^2 == 4 seconds reconnect grace period */
- 		orb->request.misc |=
--			MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login) |
--			MANAGEMENT_ORB_RECONNECT(0);
-+			MANAGEMENT_ORB_RECONNECT(2) |
-+			MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login);
-+		timeout = lu->tgt->mgt_orb_timeout;
-+	} else {
-+		timeout = SBP2_ORB_TIMEOUT;
- 	}
- 
- 	fw_memcpy_to_be32(&orb->request, &orb->request, sizeof(orb->request));
-@@ -535,8 +546,7 @@ sbp2_send_management_orb(struct sbp2_log
- 	sbp2_send_orb(&orb->base, lu, node_id, generation,
- 		      lu->tgt->management_agent_address);
- 
--	wait_for_completion_timeout(&orb->done,
--				    msecs_to_jiffies(SBP2_ORB_TIMEOUT));
-+	wait_for_completion_timeout(&orb->done, msecs_to_jiffies(timeout));
+ 	if (orb == NULL)
+ 		return -ENOMEM;
+@@ -553,20 +571,20 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int node_id,
  
  	retval = -EIO;
  	if (sbp2_cancel_orbs(lu) == 0) {
-@@ -608,13 +618,17 @@ static void sbp2_release_target(struct k
- 	struct sbp2_logical_unit *lu, *next;
- 	struct Scsi_Host *shost =
- 		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
-+	struct fw_device *device = fw_device(tgt->unit->device.parent);
+-		fw_error("orb reply timed out, rcode=0x%02x\n",
+-			 orb->base.rcode);
++		fw_error("%s: orb reply timed out, rcode=0x%02x\n",
++			 lu->tgt->bus_id, orb->base.rcode);
+ 		goto out;
+ 	}
  
- 	list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
- 		if (lu->sdev)
- 			scsi_remove_device(lu->sdev);
+ 	if (orb->base.rcode != RCODE_COMPLETE) {
+-		fw_error("management write failed, rcode 0x%02x\n",
+-			 orb->base.rcode);
++		fw_error("%s: management write failed, rcode 0x%02x\n",
++			 lu->tgt->bus_id, orb->base.rcode);
+ 		goto out;
+ 	}
  
--		sbp2_send_management_orb(lu, tgt->node_id, lu->generation,
--				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
-+		if (!fw_device_is_shutdown(device))
-+			sbp2_send_management_orb(lu, tgt->node_id,
-+					lu->generation, SBP2_LOGOUT_REQUEST,
-+					lu->login_id, NULL);
+ 	if (STATUS_GET_RESPONSE(orb->status) != 0 ||
+ 	    STATUS_GET_SBP_STATUS(orb->status) != 0) {
+-		fw_error("error status: %d:%d\n",
++		fw_error("%s: error status: %d:%d\n", lu->tgt->bus_id,
+ 			 STATUS_GET_RESPONSE(orb->status),
+ 			 STATUS_GET_SBP_STATUS(orb->status));
+ 		goto out;
+@@ -590,29 +608,147 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int node_id,
+ 
+ static void
+ complete_agent_reset_write(struct fw_card *card, int rcode,
+-			   void *payload, size_t length, void *data)
++			   void *payload, size_t length, void *done)
++{
++	complete(done);
++}
 +
- 		fw_core_remove_address_handler(&lu->address_handler);
- 		list_del(&lu->link);
- 		kfree(lu);
-@@ -628,6 +642,21 @@ static void sbp2_release_target(struct k
++static void sbp2_agent_reset(struct sbp2_logical_unit *lu)
+ {
+-	struct fw_transaction *t = data;
++	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
++	DECLARE_COMPLETION_ONSTACK(done);
++	struct fw_transaction t;
++	static u32 z;
++
++	fw_send_request(device->card, &t, TCODE_WRITE_QUADLET_REQUEST,
++			lu->tgt->node_id, lu->generation, device->max_speed,
++			lu->command_block_agent_address + SBP2_AGENT_RESET,
++			&z, sizeof(z), complete_agent_reset_write, &done);
++	wait_for_completion(&done);
++}
+ 
+-	kfree(t);
++static void
++complete_agent_reset_write_no_wait(struct fw_card *card, int rcode,
++				   void *payload, size_t length, void *data)
++{
++	kfree(data);
+ }
+ 
+-static int sbp2_agent_reset(struct sbp2_logical_unit *lu)
++static void sbp2_agent_reset_no_wait(struct sbp2_logical_unit *lu)
+ {
+ 	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
+ 	struct fw_transaction *t;
+-	static u32 zero;
++	static u32 z;
+ 
+-	t = kzalloc(sizeof(*t), GFP_ATOMIC);
++	t = kmalloc(sizeof(*t), GFP_ATOMIC);
+ 	if (t == NULL)
+-		return -ENOMEM;
++		return;
  
- static struct workqueue_struct *sbp2_wq;
+ 	fw_send_request(device->card, t, TCODE_WRITE_QUADLET_REQUEST,
+ 			lu->tgt->node_id, lu->generation, device->max_speed,
+ 			lu->command_block_agent_address + SBP2_AGENT_RESET,
+-			&zero, sizeof(zero), complete_agent_reset_write, t);
++			&z, sizeof(z), complete_agent_reset_write_no_wait, t);
++}
  
+-	return 0;
++static void sbp2_set_generation(struct sbp2_logical_unit *lu, int generation)
++{
++	struct fw_card *card = fw_device(lu->tgt->unit->device.parent)->card;
++	unsigned long flags;
++
++	/* serialize with comparisons of lu->generation and card->generation */
++	spin_lock_irqsave(&card->lock, flags);
++	lu->generation = generation;
++	spin_unlock_irqrestore(&card->lock, flags);
++}
++
++static inline void sbp2_allow_block(struct sbp2_logical_unit *lu)
++{
++	/*
++	 * We may access dont_block without taking card->lock here:
++	 * All callers of sbp2_allow_block() and all callers of sbp2_unblock()
++	 * are currently serialized against each other.
++	 * And a wrong result in sbp2_conditionally_block()'s access of
++	 * dont_block is rather harmless, it simply misses its first chance.
++	 */
++	--lu->tgt->dont_block;
++}
++
 +/*
-+ * Always get the target's kref when scheduling work on one its units.
-+ * Each workqueue job is responsible to call sbp2_target_put() upon return.
++ * Blocks lu->tgt if all of the following conditions are met:
++ *   - Login, INQUIRY, and high-level SCSI setup of all of the target's
++ *     logical units have been finished (indicated by dont_block == 0).
++ *   - lu->generation is stale.
++ *
++ * Note, scsi_block_requests() must be called while holding card->lock,
++ * otherwise it might foil sbp2_[conditionally_]unblock()'s attempt to
++ * unblock the target.
 + */
-+static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay)
++static void sbp2_conditionally_block(struct sbp2_logical_unit *lu)
 +{
-+	if (queue_delayed_work(sbp2_wq, &lu->work, delay))
-+		kref_get(&lu->tgt->kref);
++	struct sbp2_target *tgt = lu->tgt;
++	struct fw_card *card = fw_device(tgt->unit->device.parent)->card;
++	struct Scsi_Host *shost =
++		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
++	unsigned long flags;
++
++	spin_lock_irqsave(&card->lock, flags);
++	if (!tgt->dont_block && !lu->blocked &&
++	    lu->generation != card->generation) {
++		lu->blocked = true;
++		if (++tgt->blocked == 1) {
++			scsi_block_requests(shost);
++			fw_notify("blocked %s\n", lu->tgt->bus_id);
++		}
++	}
++	spin_unlock_irqrestore(&card->lock, flags);
 +}
 +
-+static void sbp2_target_put(struct sbp2_target *tgt)
++/*
++ * Unblocks lu->tgt as soon as all its logical units can be unblocked.
++ * Note, it is harmless to run scsi_unblock_requests() outside the
++ * card->lock protected section.  On the other hand, running it inside
++ * the section might clash with shost->host_lock.
++ */
++static void sbp2_conditionally_unblock(struct sbp2_logical_unit *lu)
 +{
-+	kref_put(&tgt->kref, sbp2_release_target);
++	struct sbp2_target *tgt = lu->tgt;
++	struct fw_card *card = fw_device(tgt->unit->device.parent)->card;
++	struct Scsi_Host *shost =
++		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
++	unsigned long flags;
++	bool unblock = false;
++
++	spin_lock_irqsave(&card->lock, flags);
++	if (lu->blocked && lu->generation == card->generation) {
++		lu->blocked = false;
++		unblock = --tgt->blocked == 0;
++	}
++	spin_unlock_irqrestore(&card->lock, flags);
++
++	if (unblock) {
++		scsi_unblock_requests(shost);
++		fw_notify("unblocked %s\n", lu->tgt->bus_id);
++	}
 +}
 +
- static void sbp2_reconnect(struct work_struct *work);
++/*
++ * Prevents future blocking of tgt and unblocks it.
++ * Note, it is harmless to run scsi_unblock_requests() outside the
++ * card->lock protected section.  On the other hand, running it inside
++ * the section might clash with shost->host_lock.
++ */
++static void sbp2_unblock(struct sbp2_target *tgt)
++{
++	struct fw_card *card = fw_device(tgt->unit->device.parent)->card;
++	struct Scsi_Host *shost =
++		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
++	unsigned long flags;
++
++	spin_lock_irqsave(&card->lock, flags);
++	++tgt->dont_block;
++	spin_unlock_irqrestore(&card->lock, flags);
++
++	scsi_unblock_requests(shost);
+ }
+ 
+ static void sbp2_release_target(struct kref *kref)
+@@ -621,23 +757,24 @@ static void sbp2_release_target(struct kref *kref)
+ 	struct sbp2_logical_unit *lu, *next;
+ 	struct Scsi_Host *shost =
+ 		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
+-	struct fw_device *device = fw_device(tgt->unit->device.parent);
++
++	/* prevent deadlocks */
++	sbp2_unblock(tgt);
+ 
+ 	list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
+-		if (lu->sdev)
++		if (lu->sdev) {
+ 			scsi_remove_device(lu->sdev);
+-
+-		if (!fw_device_is_shutdown(device))
+-			sbp2_send_management_orb(lu, tgt->node_id,
+-					lu->generation, SBP2_LOGOUT_REQUEST,
+-					lu->login_id, NULL);
++			scsi_device_put(lu->sdev);
++		}
++		sbp2_send_management_orb(lu, tgt->node_id, lu->generation,
++				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
  
- static void sbp2_login(struct work_struct *work)
-@@ -643,22 +672,19 @@ static void sbp2_login(struct work_struc
+ 		fw_core_remove_address_handler(&lu->address_handler);
+ 		list_del(&lu->link);
+ 		kfree(lu);
+ 	}
+ 	scsi_remove_host(shost);
+-	fw_notify("released %s\n", tgt->unit->device.bus_id);
++	fw_notify("released %s\n", tgt->bus_id);
+ 
+ 	put_device(&tgt->unit->device);
+ 	scsi_host_put(shost);
+@@ -666,33 +803,43 @@ static void sbp2_login(struct work_struct *work)
+ {
+ 	struct sbp2_logical_unit *lu =
+ 		container_of(work, struct sbp2_logical_unit, work.work);
+-	struct Scsi_Host *shost =
+-		container_of((void *)lu->tgt, struct Scsi_Host, hostdata[0]);
++	struct sbp2_target *tgt = lu->tgt;
++	struct fw_device *device = fw_device(tgt->unit->device.parent);
++	struct Scsi_Host *shost;
+ 	struct scsi_device *sdev;
+ 	struct scsi_lun eight_bytes_lun;
+-	struct fw_unit *unit = lu->tgt->unit;
+-	struct fw_device *device = fw_device(unit->device.parent);
  	struct sbp2_login_response response;
  	int generation, node_id, local_node_id;
  
--	generation    = device->card->generation;
--	node_id       = device->node->node_id;
--	local_node_id = device->card->local_node->node_id;
-+	generation    = device->generation;
-+	smp_rmb();    /* node_id must not be older than generation */
-+	node_id       = device->node_id;
-+	local_node_id = device->card->node_id;
- 
++	if (fw_device_is_shutdown(device))
++		goto out;
++
+ 	generation    = device->generation;
+ 	smp_rmb();    /* node_id must not be older than generation */
+ 	node_id       = device->node_id;
+ 	local_node_id = device->card->node_id;
+ 
++	/* If this is a re-login attempt, log out, or we might be rejected. */
++	if (lu->sdev)
++		sbp2_send_management_orb(lu, device->node_id, generation,
++				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
++
  	if (sbp2_send_management_orb(lu, node_id, generation,
  				SBP2_LOGIN_REQUEST, lu->lun, &response) < 0) {
--		if (lu->retries++ < 5) {
--			if (queue_delayed_work(sbp2_wq, &lu->work,
--					       DIV_ROUND_UP(HZ, 5)))
--				kref_get(&lu->tgt->kref);
--		} else {
-+		if (lu->retries++ < 5)
-+			sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
-+		else
- 			fw_error("failed to login to %s LUN %04x\n",
- 				 unit->device.bus_id, lu->lun);
--		}
--		kref_put(&lu->tgt->kref, sbp2_release_target);
--		return;
-+		goto out;
+-		if (lu->retries++ < 5)
++		if (lu->retries++ < 5) {
+ 			sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
+-		else
+-			fw_error("failed to login to %s LUN %04x\n",
+-				 unit->device.bus_id, lu->lun);
++		} else {
++			fw_error("%s: failed to login to LUN %04x\n",
++				 tgt->bus_id, lu->lun);
++			/* Let any waiting I/O fail from now on. */
++			sbp2_unblock(lu->tgt);
++		}
+ 		goto out;
  	}
  
- 	lu->generation        = generation;
-@@ -689,18 +715,47 @@ static void sbp2_login(struct work_struc
+-	lu->generation        = generation;
+-	lu->tgt->node_id      = node_id;
+-	lu->tgt->address_high = local_node_id << 16;
++	tgt->node_id	  = node_id;
++	tgt->address_high = local_node_id << 16;
++	sbp2_set_generation(lu, generation);
+ 
+ 	/* Get command block agent offset and login id. */
+ 	lu->command_block_agent_address =
+@@ -700,8 +847,8 @@ static void sbp2_login(struct work_struct *work)
+ 		response.command_block_agent.low;
+ 	lu->login_id = LOGIN_RESPONSE_GET_LOGIN_ID(response);
+ 
+-	fw_notify("logged in to %s LUN %04x (%d retries)\n",
+-		  unit->device.bus_id, lu->lun, lu->retries);
++	fw_notify("%s: logged in to LUN %04x (%d retries)\n",
++		  tgt->bus_id, lu->lun, lu->retries);
+ 
+ #if 0
+ 	/* FIXME: The linux1394 sbp2 does this last step. */
+@@ -711,26 +858,62 @@ static void sbp2_login(struct work_struct *work)
+ 	PREPARE_DELAYED_WORK(&lu->work, sbp2_reconnect);
+ 	sbp2_agent_reset(lu);
+ 
++	/* This was a re-login. */
++	if (lu->sdev) {
++		sbp2_cancel_orbs(lu);
++		sbp2_conditionally_unblock(lu);
++		goto out;
++	}
++
++	if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
++		ssleep(SBP2_INQUIRY_DELAY);
++
+ 	memset(&eight_bytes_lun, 0, sizeof(eight_bytes_lun));
+ 	eight_bytes_lun.scsi_lun[0] = (lu->lun >> 8) & 0xff;
+ 	eight_bytes_lun.scsi_lun[1] = lu->lun & 0xff;
++	shost = container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
+ 
  	sdev = __scsi_add_device(shost, 0, 0,
  				 scsilun_to_int(&eight_bytes_lun), lu);
- 	if (IS_ERR(sdev)) {
+-	if (IS_ERR(sdev)) {
 -		sbp2_send_management_orb(lu, node_id, generation,
 -				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
- 		/*
+-		/*
 -		 * Set this back to sbp2_login so we fall back and
 -		 * retry login on bus reset.
-+		 * The most frequent cause for __scsi_add_device() to fail
-+		 * is a bus reset while sending the SCSI INQUIRY.  Try again.
-+		 */
-+		goto out_logout_login;
-+
-+	} else if (sdev->sdev_state == SDEV_OFFLINE) {
-+		/*
-+		 * FIXME:  We are unable to perform reconnects while in
-+		 * sbp2_login().  Therefore __scsi_add_device() will get
-+		 * into trouble if a bus reset happens in parallel.
-+		 * It will either fail (that's OK, see above) or take sdev
-+		 * offline.  Here is a crude workaround for the latter.
- 		 */
+-		 */
 -		PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
-+		scsi_device_put(sdev);
-+		scsi_remove_device(sdev);
+-	} else {
+-		lu->sdev = sdev;
++	/*
++	 * FIXME:  We are unable to perform reconnects while in sbp2_login().
++	 * Therefore __scsi_add_device() will get into trouble if a bus reset
++	 * happens in parallel.  It will either fail or leave us with an
++	 * unusable sdev.  As a workaround we check for this and retry the
++	 * whole login and SCSI probing.
++	 */
++
++	/* Reported error during __scsi_add_device() */
++	if (IS_ERR(sdev))
 +		goto out_logout_login;
 +
- 	} else {
-+		/*
-+		 * Can you believe it?  Everything went well.
-+		 */
- 		lu->sdev = sdev;
++	/* Unreported error during __scsi_add_device() */
++	smp_rmb(); /* get current card generation */
++	if (generation != device->card->generation) {
++		scsi_remove_device(sdev);
  		scsi_device_put(sdev);
-+		goto out;
++		goto out_logout_login;
  	}
--	kref_put(&lu->tgt->kref, sbp2_release_target);
++
++	/* No error during __scsi_add_device() */
++	lu->sdev = sdev;
++	sbp2_allow_block(lu);
++	goto out;
 +
 + out_logout_login:
 +	smp_rmb(); /* generation may have changed */
@@ -996,42 +675,31 @@
 +	 * lu->work already.  Reset the work from reconnect to login.
 +	 */
 +	PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
-+ out:
-+	sbp2_target_put(lu->tgt);
+  out:
+-	sbp2_target_put(lu->tgt);
++	sbp2_target_put(tgt);
  }
  
  static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
-@@ -750,6 +805,7 @@ static int sbp2_scan_unit_dir(struct sbp
- {
- 	struct fw_csr_iterator ci;
- 	int key, value;
-+	unsigned int timeout;
- 
- 	fw_csr_iterator_init(&ci, directory);
- 	while (fw_csr_iterator_next(&ci, &key, &value)) {
-@@ -772,6 +828,21 @@ static int sbp2_scan_unit_dir(struct sbp
- 			*firmware_revision = value;
+@@ -755,6 +938,8 @@ static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
+ 	lu->sdev = NULL;
+ 	lu->lun  = lun_entry & 0xffff;
+ 	lu->retries = 0;
++	lu->blocked = false;
++	++tgt->dont_block;
+ 	INIT_LIST_HEAD(&lu->orb_list);
+ 	INIT_DELAYED_WORK(&lu->work, sbp2_login);
+ 
+@@ -813,7 +998,7 @@ static int sbp2_scan_unit_dir(struct sbp2_target *tgt, u32 *directory,
+ 			if (timeout > tgt->mgt_orb_timeout)
+ 				fw_notify("%s: config rom contains %ds "
+ 					  "management ORB timeout, limiting "
+-					  "to %ds\n", tgt->unit->device.bus_id,
++					  "to %ds\n", tgt->bus_id,
+ 					  timeout / 1000,
+ 					  tgt->mgt_orb_timeout / 1000);
  			break;
- 
-+		case SBP2_CSR_UNIT_CHARACTERISTICS:
-+			/* the timeout value is stored in 500ms units */
-+			timeout = ((unsigned int) value >> 8 & 0xff) * 500;
-+			timeout = max(timeout, SBP2_MIN_LOGIN_ORB_TIMEOUT);
-+			tgt->mgt_orb_timeout =
-+				  min(timeout, SBP2_MAX_LOGIN_ORB_TIMEOUT);
-+
-+			if (timeout > tgt->mgt_orb_timeout)
-+				fw_notify("%s: config rom contains %ds "
-+					  "management ORB timeout, limiting "
-+					  "to %ds\n", tgt->unit->device.bus_id,
-+					  timeout / 1000,
-+					  tgt->mgt_orb_timeout / 1000);
-+			break;
-+
- 		case SBP2_CSR_LOGICAL_UNIT_NUMBER:
- 			if (sbp2_add_logical_unit(tgt, value) < 0)
- 				return -ENOMEM;
-@@ -790,7 +861,7 @@ static void sbp2_init_workarounds(struct
+@@ -836,12 +1021,12 @@ static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model,
  				  u32 firmware_revision)
  {
  	int i;
@@ -1040,99 +708,119 @@
  
  	if (w)
  		fw_notify("Please notify linux1394-devel at lists.sourceforge.net "
-@@ -865,18 +936,13 @@ static int sbp2_probe(struct device *dev
- 
- 	get_device(&unit->device);
- 
--	/*
--	 * We schedule work to do the login so we can easily
--	 * reschedule retries. Always get the ref before scheduling
--	 * work.
--	 */
-+	/* Do the login in a workqueue so we can easily reschedule retries. */
- 	list_for_each_entry(lu, &tgt->lu_list, link)
--		if (queue_delayed_work(sbp2_wq, &lu->work, 0))
--			kref_get(&tgt->kref);
-+		sbp2_queue_work(lu, 0);
- 	return 0;
- 
-  fail_tgt_put:
--	kref_put(&tgt->kref, sbp2_release_target);
-+	sbp2_target_put(tgt);
- 	return -ENOMEM;
- 
-  fail_shost_put:
-@@ -889,7 +955,7 @@ static int sbp2_remove(struct device *de
- 	struct fw_unit *unit = fw_unit(dev);
- 	struct sbp2_target *tgt = unit->device.driver_data;
- 
--	kref_put(&tgt->kref, sbp2_release_target);
-+	sbp2_target_put(tgt);
- 	return 0;
- }
+ 			  "if you need the workarounds parameter for %s\n",
+-			  tgt->unit->device.bus_id);
++			  tgt->bus_id);
  
-@@ -901,9 +967,10 @@ static void sbp2_reconnect(struct work_s
- 	struct fw_device *device = fw_device(unit->device.parent);
+ 	if (w & SBP2_WORKAROUND_OVERRIDE)
+ 		goto out;
+@@ -863,8 +1048,7 @@ static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model,
+ 	if (w)
+ 		fw_notify("Workarounds for %s: 0x%x "
+ 			  "(firmware_revision 0x%06x, model_id 0x%06x)\n",
+-			  tgt->unit->device.bus_id,
+-			  w, firmware_revision, model);
++			  tgt->bus_id, w, firmware_revision, model);
+ 	tgt->workarounds = w;
+ }
+ 
+@@ -888,6 +1072,7 @@ static int sbp2_probe(struct device *dev)
+ 	tgt->unit = unit;
+ 	kref_init(&tgt->kref);
+ 	INIT_LIST_HEAD(&tgt->lu_list);
++	tgt->bus_id = unit->device.bus_id;
+ 
+ 	if (fw_device_enable_phys_dma(device) < 0)
+ 		goto fail_shost_put;
+@@ -938,10 +1123,13 @@ static void sbp2_reconnect(struct work_struct *work)
+ {
+ 	struct sbp2_logical_unit *lu =
+ 		container_of(work, struct sbp2_logical_unit, work.work);
+-	struct fw_unit *unit = lu->tgt->unit;
+-	struct fw_device *device = fw_device(unit->device.parent);
++	struct sbp2_target *tgt = lu->tgt;
++	struct fw_device *device = fw_device(tgt->unit->device.parent);
  	int generation, node_id, local_node_id;
  
--	generation    = device->card->generation;
--	node_id       = device->node->node_id;
--	local_node_id = device->card->local_node->node_id;
-+	generation    = device->generation;
-+	smp_rmb();    /* node_id must not be older than generation */
-+	node_id       = device->node_id;
-+	local_node_id = device->card->node_id;
- 
++	if (fw_device_is_shutdown(device))
++		goto out;
++
+ 	generation    = device->generation;
+ 	smp_rmb();    /* node_id must not be older than generation */
+ 	node_id       = device->node_id;
+@@ -950,10 +1138,17 @@ static void sbp2_reconnect(struct work_struct *work)
  	if (sbp2_send_management_orb(lu, node_id, generation,
  				     SBP2_RECONNECT_REQUEST,
-@@ -915,10 +982,8 @@ static void sbp2_reconnect(struct work_s
+ 				     lu->login_id, NULL) < 0) {
+-		if (lu->retries++ >= 5) {
+-			fw_error("failed to reconnect to %s\n",
+-				 unit->device.bus_id);
+-			/* Fall back and try to log in again. */
++		/*
++		 * If reconnect was impossible even though we are in the
++		 * current generation, fall back and try to log in again.
++		 *
++		 * We could check for "Function rejected" status, but
++		 * looking at the bus generation as simpler and more general.
++		 */
++		smp_rmb(); /* get current card generation */
++		if (generation == device->card->generation ||
++		    lu->retries++ >= 5) {
++			fw_error("%s: failed to reconnect\n", tgt->bus_id);
  			lu->retries = 0;
  			PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
  		}
--		if (queue_delayed_work(sbp2_wq, &lu->work, DIV_ROUND_UP(HZ, 5)))
--			kref_get(&lu->tgt->kref);
--		kref_put(&lu->tgt->kref, sbp2_release_target);
--		return;
-+		sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
-+		goto out;
+@@ -961,17 +1156,18 @@ static void sbp2_reconnect(struct work_struct *work)
+ 		goto out;
  	}
  
- 	lu->generation        = generation;
-@@ -930,8 +995,8 @@ static void sbp2_reconnect(struct work_s
+-	lu->generation        = generation;
+-	lu->tgt->node_id      = node_id;
+-	lu->tgt->address_high = local_node_id << 16;
++	tgt->node_id      = node_id;
++	tgt->address_high = local_node_id << 16;
++	sbp2_set_generation(lu, generation);
+ 
+-	fw_notify("reconnected to %s LUN %04x (%d retries)\n",
+-		  unit->device.bus_id, lu->lun, lu->retries);
++	fw_notify("%s: reconnected to LUN %04x (%d retries)\n",
++		  tgt->bus_id, lu->lun, lu->retries);
  
  	sbp2_agent_reset(lu);
  	sbp2_cancel_orbs(lu);
--
--	kref_put(&lu->tgt->kref, sbp2_release_target);
-+ out:
-+	sbp2_target_put(lu->tgt);
++	sbp2_conditionally_unblock(lu);
+  out:
+-	sbp2_target_put(lu->tgt);
++	sbp2_target_put(tgt);
  }
  
  static void sbp2_update(struct fw_unit *unit)
-@@ -947,8 +1012,7 @@ static void sbp2_update(struct fw_unit *
+@@ -986,6 +1182,7 @@ static void sbp2_update(struct fw_unit *unit)
+ 	 * Iteration over tgt->lu_list is therefore safe here.
  	 */
  	list_for_each_entry(lu, &tgt->lu_list, link) {
++		sbp2_conditionally_block(lu);
  		lu->retries = 0;
--		if (queue_delayed_work(sbp2_wq, &lu->work, 0))
--			kref_get(&tgt->kref);
-+		sbp2_queue_work(lu, 0);
+ 		sbp2_queue_work(lu, 0);
  	}
- }
+@@ -1063,7 +1260,7 @@ complete_command_orb(struct sbp2_orb *base_orb, struct sbp2_status *status)
  
-@@ -1103,9 +1167,9 @@ sbp2_map_scatterlist(struct sbp2_command
- 	 * elements larger than 65535 bytes, some IOMMUs may merge sg elements
- 	 * during DMA mapping, and Linux currently doesn't prevent this.
- 	 */
--	for (i = 0, j = 0; i < count; i++) {
--		sg_len = sg_dma_len(sg + i);
--		sg_addr = sg_dma_address(sg + i);
-+	for (i = 0, j = 0; i < count; i++, sg = sg_next(sg)) {
-+		sg_len = sg_dma_len(sg);
-+		sg_addr = sg_dma_address(sg);
- 		while (sg_len) {
- 			/* FIXME: This won't get us out of the pinch. */
- 			if (unlikely(j >= ARRAY_SIZE(orb->page_table))) {
-@@ -1158,7 +1222,7 @@ static int sbp2_scsi_queuecommand(struct
+ 	if (status != NULL) {
+ 		if (STATUS_GET_DEAD(*status))
+-			sbp2_agent_reset(orb->lu);
++			sbp2_agent_reset_no_wait(orb->lu);
+ 
+ 		switch (STATUS_GET_RESPONSE(*status)) {
+ 		case SBP2_STATUS_REQUEST_COMPLETE:
+@@ -1089,6 +1286,7 @@ complete_command_orb(struct sbp2_orb *base_orb, struct sbp2_status *status)
+ 		 * or when sending the write (less likely).
+ 		 */
+ 		result = DID_BUS_BUSY << 16;
++		sbp2_conditionally_block(orb->lu);
+ 	}
+ 
+ 	dma_unmap_single(device->card->device, orb->base.request_bus,
+@@ -1197,7 +1395,7 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
  	struct sbp2_logical_unit *lu = cmd->device->hostdata;
  	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
  	struct sbp2_command_orb *orb;
@@ -1141,39 +829,100 @@
  	int retval = SCSI_MLQUEUE_HOST_BUSY;
  
  	/*
-diff -Naurp linux-2.6-git/drivers/firewire/fw-topology.c firewire-git/drivers/firewire/fw-topology.c
---- linux-2.6-git/drivers/firewire/fw-topology.c	2008-01-01 22:50:33.000000000 -0500
-+++ firewire-git/drivers/firewire/fw-topology.c	2008-01-25 12:41:22.000000000 -0500
-@@ -518,6 +518,11 @@ fw_core_handle_bus_reset(struct fw_card 
- 		card->bm_retries = 0;
+@@ -1275,6 +1473,10 @@ static int sbp2_scsi_slave_alloc(struct scsi_device *sdev)
+ {
+ 	struct sbp2_logical_unit *lu = sdev->hostdata;
  
- 	card->node_id = node_id;
-+	/*
-+	 * Update node_id before generation to prevent anybody from using
-+	 * a stale node_id together with a current generation.
-+	 */
-+	smp_wmb();
- 	card->generation = generation;
- 	card->reset_jiffies = jiffies;
- 	schedule_delayed_work(&card->work, 0);
-diff -Naurp linux-2.6-git/drivers/firewire/fw-transaction.c firewire-git/drivers/firewire/fw-transaction.c
---- linux-2.6-git/drivers/firewire/fw-transaction.c	2008-01-01 22:50:33.000000000 -0500
-+++ firewire-git/drivers/firewire/fw-transaction.c	2008-01-25 12:41:24.000000000 -0500
-@@ -153,7 +153,7 @@ fw_fill_request(struct fw_packet *packet
- 	int ext_tcode;
- 
- 	if (tcode > 0x10) {
--		ext_tcode = tcode - 0x10;
-+		ext_tcode = tcode & ~0x10;
- 		tcode = TCODE_LOCK_REQUEST;
- 	} else
- 		ext_tcode = 0;
-@@ -650,7 +650,7 @@ fw_core_handle_request(struct fw_card *c
- 		 HEADER_GET_OFFSET_HIGH(p->header[1]) << 32) | p->header[2];
- 	tcode       = HEADER_GET_TCODE(p->header[0]);
- 	destination = HEADER_GET_DESTINATION(p->header[0]);
--	source      = HEADER_GET_SOURCE(p->header[0]);
-+	source      = HEADER_GET_SOURCE(p->header[1]);
++	/* (Re-)Adding logical units via the SCSI stack is not supported. */
++	if (!lu)
++		return -ENOSYS;
++
+ 	sdev->allow_restart = 1;
+ 
+ 	/*
+@@ -1319,7 +1521,7 @@ static int sbp2_scsi_abort(struct scsi_cmnd *cmd)
+ {
+ 	struct sbp2_logical_unit *lu = cmd->device->hostdata;
+ 
+-	fw_notify("sbp2_scsi_abort\n");
++	fw_notify("%s: sbp2_scsi_abort\n", lu->tgt->bus_id);
+ 	sbp2_agent_reset(lu);
+ 	sbp2_cancel_orbs(lu);
+ 
+diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c
+index 28e155a..29e6663 100644
+--- a/drivers/ieee1394/sbp2.c
++++ b/drivers/ieee1394/sbp2.c
+@@ -183,6 +183,9 @@ MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device "
+  *   Avoids access beyond actual disk limits on devices with an off-by-one bug.
+  *   Don't use this with devices which don't have this bug.
+  *
++ * - delay inquiry
++ *   Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
++ *
+  * - override internal blacklist
+  *   Instead of adding to the built-in blacklist, use only the workarounds
+  *   specified in the module load parameter.
+@@ -195,6 +198,7 @@ MODULE_PARM_DESC(workarounds, "Work around device bugs (default = 0"
+ 	", 36 byte inquiry = "    __stringify(SBP2_WORKAROUND_INQUIRY_36)
+ 	", skip mode page 8 = "   __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
+ 	", fix capacity = "       __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
++	", delay inquiry = "      __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
+ 	", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
+ 	", or a combination)");
+ 
+@@ -357,6 +361,11 @@ static const struct {
+ 		.workarounds		= SBP2_WORKAROUND_INQUIRY_36 |
+ 					  SBP2_WORKAROUND_MODE_SENSE_8,
+ 	},
++	/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
++		.firmware_revision	= 0x002800,
++		.model_id		= 0x000000,
++		.workarounds		= SBP2_WORKAROUND_DELAY_INQUIRY,
++	},
+ 	/* Initio bridges, actually only needed for some older ones */ {
+ 		.firmware_revision	= 0x000200,
+ 		.model_id		= SBP2_ROM_VALUE_WILDCARD,
+@@ -914,6 +923,9 @@ static int sbp2_start_device(struct sbp2_lu *lu)
+ 	sbp2_agent_reset(lu, 1);
+ 	sbp2_max_speed_and_size(lu);
+ 
++	if (lu->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
++		ssleep(SBP2_INQUIRY_DELAY);
++
+ 	error = scsi_add_device(lu->shost, 0, lu->ud->id, 0);
+ 	if (error) {
+ 		SBP2_ERR("scsi_add_device failed");
+@@ -1962,14 +1974,14 @@ static int sbp2scsi_slave_alloc(struct scsi_device *sdev)
+ {
+ 	struct sbp2_lu *lu = (struct sbp2_lu *)sdev->host->hostdata[0];
+ 
++	if (sdev->lun != 0 || sdev->id != lu->ud->id || sdev->channel != 0)
++		return -ENODEV;
++
+ 	lu->sdev = sdev;
+ 	sdev->allow_restart = 1;
+ 
+-	/*
+-	 * Update the dma alignment (minimum alignment requirements for
+-	 * start and end of DMA transfers) to be a sector
+-	 */
+-	blk_queue_update_dma_alignment(sdev->request_queue, 511);
++	/* SBP-2 requires quadlet alignment of the data buffers. */
++	blk_queue_update_dma_alignment(sdev->request_queue, 4 - 1);
+ 
+ 	if (lu->workarounds & SBP2_WORKAROUND_INQUIRY_36)
+ 		sdev->inquiry_len = 36;
+diff --git a/drivers/ieee1394/sbp2.h b/drivers/ieee1394/sbp2.h
+index d2ecb0d..80d8e09 100644
+--- a/drivers/ieee1394/sbp2.h
++++ b/drivers/ieee1394/sbp2.h
+@@ -343,6 +343,8 @@ enum sbp2lu_state_types {
+ #define SBP2_WORKAROUND_INQUIRY_36	0x2
+ #define SBP2_WORKAROUND_MODE_SENSE_8	0x4
+ #define SBP2_WORKAROUND_FIX_CAPACITY	0x8
++#define SBP2_WORKAROUND_DELAY_INQUIRY	0x10
++#define SBP2_INQUIRY_DELAY		12
+ #define SBP2_WORKAROUND_OVERRIDE	0x100
  
- 	spin_lock_irqsave(&address_handler_lock, flags);
- 	handler = lookup_enclosing_address_handler(&address_handler_list,
+ #endif /* SBP2_H */

linux-2.6-input-kill-stupid-messages.patch:

Index: linux-2.6-input-kill-stupid-messages.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-input-kill-stupid-messages.patch,v
retrieving revision 1.1.22.1
retrieving revision 1.1.22.2
diff -u -r1.1.22.1 -r1.1.22.2
--- linux-2.6-input-kill-stupid-messages.patch	18 Feb 2008 16:55:17 -0000	1.1.22.1
+++ linux-2.6-input-kill-stupid-messages.patch	29 Feb 2008 18:58:22 -0000	1.1.22.2
@@ -13,5 +13,5 @@
  				       data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
 +#endif
  			goto out;
- 		case ATKBD_RET_HANGEUL:
- 		case ATKBD_RET_HANJA:
+ 		case ATKBD_RET_ERR:
+ 			atkbd->err_count++;

linux-2.6-lirc.patch:

Index: linux-2.6-lirc.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-lirc.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-lirc.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-lirc.patch	29 Feb 2008 18:58:22 -0000	1.1.2.2
@@ -1,43 +1,8 @@
-Linux Infrared Remote Control drivers (http://lirc.org/)
-
-Signed-off-by: Jarod Wilson <jwilson at redhat.com>
-
- drivers/input/Kconfig                 |    2 +
- drivers/input/Makefile                |    1 +
- drivers/input/lirc/Kconfig            |  127 +++
- drivers/input/lirc/Makefile           |   24 +
- drivers/input/lirc/commandir.c        | 1009 +++++++++++++++++++++++
- drivers/input/lirc/commandir.h        |   41 +
- drivers/input/lirc/kcompat.h          |  150 ++++
- drivers/input/lirc/lirc.h             |  101 +++
- drivers/input/lirc/lirc_atiusb.c      | 1326 ++++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_bt829.c       |  393 +++++++++
- drivers/input/lirc/lirc_cmdir.c       |  605 ++++++++++++++
- drivers/input/lirc/lirc_cmdir.h       |   27 +
- drivers/input/lirc/lirc_dev.c         |  827 +++++++++++++++++++
- drivers/input/lirc/lirc_dev.h         |  264 ++++++
- drivers/input/lirc/lirc_i2c.c         |  671 +++++++++++++++
- drivers/input/lirc/lirc_igorplugusb.c |  624 ++++++++++++++
- drivers/input/lirc/lirc_imon.c        | 1165 +++++++++++++++++++++++++++
- drivers/input/lirc/lirc_it87.c        | 1012 +++++++++++++++++++++++
- drivers/input/lirc/lirc_it87.h        |  116 +++
- drivers/input/lirc/lirc_mceusb.c      |  890 ++++++++++++++++++++
- drivers/input/lirc/lirc_mceusb2.c     | 1042 ++++++++++++++++++++++++
- drivers/input/lirc/lirc_parallel.c    |  745 +++++++++++++++++
- drivers/input/lirc/lirc_parallel.h    |   26 +
- drivers/input/lirc/lirc_pvr150.c      | 1431 +++++++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_sasem.c       |  971 ++++++++++++++++++++++
- drivers/input/lirc/lirc_serial.c      | 1348 +++++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_sir.c         | 1323 ++++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_streamzap.c   |  810 +++++++++++++++++++
- drivers/input/lirc/lirc_ttusbir.c     |  393 +++++++++
- 29 files changed, 17464 insertions(+), 0 deletions(-)
-
 diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
-index 63512d9..de4b170 100644
+index 9dea14d..d84ac4a 100644
 --- a/drivers/input/Kconfig
 +++ b/drivers/input/Kconfig
-@@ -161,5 +161,7 @@ source "drivers/input/gameport/Kconfig"
+@@ -173,5 +173,7 @@ source "drivers/input/gameport/Kconfig"
  
  endmenu
  
@@ -46,14 +11,16 @@
  endmenu
  
 diff --git a/drivers/input/Makefile b/drivers/input/Makefile
-index 99af903..78b0420 100644
+index 2ae87b1..24bdec1 100644
 --- a/drivers/input/Makefile
 +++ b/drivers/input/Makefile
-@@ -22,3 +22,4 @@ obj-$(CONFIG_INPUT_TABLET)	+= tablet/
+@@ -21,5 +21,6 @@ obj-$(CONFIG_INPUT_JOYSTICK)	+= joystick/
+ obj-$(CONFIG_INPUT_TABLET)	+= tablet/
  obj-$(CONFIG_INPUT_TOUCHSCREEN)	+= touchscreen/
  obj-$(CONFIG_INPUT_MISC)	+= misc/
++obj-$(CONFIG_INPUT_LIRC)	+= lirc/
  
-+obj-$(CONFIG_INPUT_LIRC)       += lirc/
+ obj-$(CONFIG_INPUT_APMPOWER)	+= apm-power.o
 diff --git a/drivers/input/lirc/Kconfig b/drivers/input/lirc/Kconfig
 new file mode 100644
 index 0000000..138e58a

linux-2.6-silence-noise.patch:

Index: linux-2.6-silence-noise.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-silence-noise.patch,v
retrieving revision 1.3.8.1
retrieving revision 1.3.8.2
diff -u -r1.3.8.1 -r1.3.8.2
--- linux-2.6-silence-noise.patch	18 Feb 2008 16:55:17 -0000	1.3.8.1
+++ linux-2.6-silence-noise.patch	29 Feb 2008 18:58:23 -0000	1.3.8.2
@@ -88,9 +88,9 @@
  	mutex_lock(&dpm_list_mtx);
  	list_add_tail(&dev->power.entry, &dpm_active);
 @@ -51,9 +48,6 @@ int device_pm_add(struct device *dev)
- 
- void device_pm_remove(struct device *dev)
- {
+ 			down(&dev->sem);
+ 		}
+ 	}
 -	pr_debug("PM: Removing info for %s:%s\n",
 -		 dev->bus ? dev->bus->name : "No Bus",
 -		 kobject_name(&dev->kobj));

linux-2.6-squashfs.patch:

Index: linux-2.6-squashfs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-squashfs.patch,v
retrieving revision 1.3.8.1
retrieving revision 1.3.8.2
diff -u -r1.3.8.1 -r1.3.8.2
--- linux-2.6-squashfs.patch	18 Feb 2008 16:55:17 -0000	1.3.8.1
+++ linux-2.6-squashfs.patch	29 Feb 2008 18:58:23 -0000	1.3.8.2
@@ -1,7 +1,8 @@
-diff -x .gitignore -Nurp linux-2.6.24/fs/Kconfig linux-2.6.24-squashfs3.3/fs/Kconfig
---- linux-2.6.24/fs/Kconfig	2007-10-25 17:41:45.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/fs/Kconfig	2007-11-01 05:06:25.000000000 +0000
-@@ -1396,6 +1396,56 @@ config CRAMFS
+diff --git a/fs/Kconfig b/fs/Kconfig
+index d731282..cab44a1 100644
+--- a/fs/Kconfig
++++ b/fs/Kconfig
+@@ -1367,6 +1367,56 @@ config CRAMFS
  
  	  If unsure, say N.
  
@@ -58,10 +59,11 @@
  config VXFS_FS
  	tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
  	depends on BLOCK
-diff -x .gitignore -Nurp linux-2.6.24/fs/Makefile linux-2.6.24-squashfs3.3/fs/Makefile
---- linux-2.6.24/fs/Makefile	2007-10-25 17:41:45.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/fs/Makefile	2007-11-01 05:08:09.000000000 +0000
-@@ -72,6 +72,7 @@ obj-$(CONFIG_JBD)		+= jbd/
+diff --git a/fs/Makefile b/fs/Makefile
+index 1e7a11b..3faf857 100644
+--- a/fs/Makefile
++++ b/fs/Makefile
+@@ -73,6 +73,7 @@ obj-$(CONFIG_JBD)		+= jbd/
  obj-$(CONFIG_JBD2)		+= jbd2/
  obj-$(CONFIG_EXT2_FS)		+= ext2/
  obj-$(CONFIG_CRAMFS)		+= cramfs/
@@ -69,10 +71,25 @@
  obj-y				+= ramfs/
  obj-$(CONFIG_HUGETLBFS)		+= hugetlbfs/
  obj-$(CONFIG_CODA_FS)		+= coda/
-diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/inode.c linux-2.6.24-squashfs3.3/fs/squashfs/inode.c
---- linux-2.6.24/fs/squashfs/inode.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/fs/squashfs/inode.c	2007-11-01 05:05:00.000000000 +0000
-@@ -0,0 +1,2192 @@
+diff --git a/fs/squashfs/Makefile b/fs/squashfs/Makefile
+new file mode 100644
+index 0000000..1bc7b06
+--- /dev/null
++++ b/fs/squashfs/Makefile
+@@ -0,0 +1,7 @@
++#
++# Makefile for the linux squashfs routines.
++#
++
++obj-$(CONFIG_SQUASHFS) += squashfs.o
++squashfs-y += inode.o
++squashfs-y += squashfs2_0.o
+diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c
+new file mode 100644
+index 0000000..f578528
+--- /dev/null
++++ b/fs/squashfs/inode.c
+@@ -0,0 +1,2178 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
 + *
@@ -112,7 +129,6 @@
 +
 +int squashfs_cached_blks;
 +
-+static void vfs_read_inode(struct inode *i);
 +static struct dentry *squashfs_get_parent(struct dentry *child);
 +static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode);
 +static int squashfs_statfs(struct dentry *, struct kstatfs *);
@@ -158,7 +174,6 @@
 +	.destroy_inode = squashfs_destroy_inode,
 +	.statfs = squashfs_statfs,
 +	.put_super = squashfs_put_super,
-+	.read_inode = vfs_read_inode
 +};
 +
 +static struct export_operations squashfs_export_ops = {
@@ -707,22 +722,10 @@
 +}
 +	
 +
-+static void vfs_read_inode(struct inode *i)
-+{
-+	struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+	squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino);
-+
-+	TRACE("Entered vfs_read_inode\n");
-+
-+	if(inode != SQUASHFS_INVALID_BLK)
-+		(msblk->read_inode)(i, inode);
-+}
-+
-+
 +static struct dentry *squashfs_get_parent(struct dentry *child)
 +{
 +	struct inode *i = child->d_inode;
-+	struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode);
++	struct inode *parent = iget_locked(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode);
 +	struct dentry *rv;
 +
 +	TRACE("Entered squashfs_get_parent\n");
@@ -2265,20 +2268,103 @@
 +MODULE_DESCRIPTION("squashfs 3.2-r2-CVS, a compressed read-only filesystem");
 +MODULE_AUTHOR("Phillip Lougher <phillip at lougher.demon.co.uk>");
 +MODULE_LICENSE("GPL");
-diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/Makefile linux-2.6.24-squashfs3.3/fs/squashfs/Makefile
---- linux-2.6.24/fs/squashfs/Makefile	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/fs/squashfs/Makefile	2005-11-20 14:31:00.000000000 +0000
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
+diff --git a/fs/squashfs/squashfs.h b/fs/squashfs/squashfs.h
+new file mode 100644
+index 0000000..ea7b6c3
+--- /dev/null
++++ b/fs/squashfs/squashfs.h
+@@ -0,0 +1,86 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Phillip Lougher <phillip at lougher.demon.co.uk>
++ *
++ * This program 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,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs.h
++ */
 +
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs2_0.c linux-2.6.24-squashfs3.3/fs/squashfs/squashfs2_0.c
---- linux-2.6.24/fs/squashfs/squashfs2_0.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs2_0.c	2007-10-25 00:43:59.000000000 +0100
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#endif
++
++#ifdef SQUASHFS_TRACE
++#define TRACE(s, args...)	printk(KERN_NOTICE "SQUASHFS: "s, ## args)
++#else
++#define TRACE(s, args...)	{}
++#endif
++
++#define ERROR(s, args...)	printk(KERN_ERR "SQUASHFS error: "s, ## args)
++
++#define SERROR(s, args...)	do { \
++				if (!silent) \
++				printk(KERN_ERR "SQUASHFS error: "s, ## args);\
++				} while(0)
++
++#define WARNING(s, args...)	printk(KERN_WARNING "SQUASHFS: "s, ## args)
++
++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
++{
++	return list_entry(inode, struct squashfs_inode_info, vfs_inode);
++}
++
++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
++#define SQSH_EXTERN
++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++				long long index, unsigned int length,
++				long long *next_index, int srclength);
++extern int squashfs_get_cached_block(struct super_block *s, void *buffer,
++				long long block, unsigned int offset,
++				int length, long long *next_block,
++				unsigned int *next_offset);
++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++					squashfs_fragment_cache *fragment);
++extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
++					*s, long long start_block,
++					int length);
++extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);
++extern const struct address_space_operations squashfs_symlink_aops;
++extern const struct address_space_operations squashfs_aops;
++extern struct inode_operations squashfs_dir_inode_ops;
++#else
++#define SQSH_EXTERN static
++#endif
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
++{
++	return 0;
++}
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++	return 0;
++}
++#endif
+diff --git a/fs/squashfs/squashfs2_0.c b/fs/squashfs/squashfs2_0.c
+new file mode 100644
+index 0000000..fa909c8
+--- /dev/null
++++ b/fs/squashfs/squashfs2_0.c
 @@ -0,0 +1,740 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
@@ -3020,99 +3106,11 @@
 +
 +	return 1;
 +}
-diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs.h linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h
---- linux-2.6.24/fs/squashfs/squashfs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h	2007-08-19 04:23:16.000000000 +0100
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip at lougher.demon.co.uk>
-+ *
-+ * This program 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,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...)	printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...)	{}
-+#endif
-+
-+#define ERROR(s, args...)	printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...)	do { \
-+				if (!silent) \
-+				printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+				} while(0)
-+
-+#define WARNING(s, args...)	printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+	return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+				long long index, unsigned int length,
-+				long long *next_index, int srclength);
-+extern int squashfs_get_cached_block(struct super_block *s, void *buffer,
-+				long long block, unsigned int offset,
-+				int length, long long *next_block,
-+				unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+					squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+					*s, long long start_block,
-+					int length);
-+extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);
-+extern const struct address_space_operations squashfs_symlink_aops;
-+extern const struct address_space_operations squashfs_aops;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+	return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+	return 0;
-+}
-+#endif
-diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h
---- linux-2.6.24/include/linux/squashfs_fs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h	2007-11-01 03:50:57.000000000 +0000
+diff --git a/include/linux/squashfs_fs.h b/include/linux/squashfs_fs.h
+new file mode 100644
+index 0000000..e60308e
+--- /dev/null
++++ b/include/linux/squashfs_fs.h
 @@ -0,0 +1,935 @@
 +#ifndef SQUASHFS_FS
 +#define SQUASHFS_FS
@@ -4049,9 +4047,11 @@
 +
 +#endif
 +#endif
-diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_i.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h
---- linux-2.6.24/include/linux/squashfs_fs_i.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h	2007-08-19 04:24:08.000000000 +0100
+diff --git a/include/linux/squashfs_fs_i.h b/include/linux/squashfs_fs_i.h
+new file mode 100644
+index 0000000..76a3a5a
+--- /dev/null
++++ b/include/linux/squashfs_fs_i.h
 @@ -0,0 +1,45 @@
 +#ifndef SQUASHFS_FS_I
 +#define SQUASHFS_FS_I
@@ -4098,9 +4098,11 @@
 +	struct inode	vfs_inode;
 +};
 +#endif
-diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_sb.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h
---- linux-2.6.24/include/linux/squashfs_fs_sb.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h	2007-08-19 04:24:26.000000000 +0100
+diff --git a/include/linux/squashfs_fs_sb.h b/include/linux/squashfs_fs_sb.h
+new file mode 100644
+index 0000000..e5fa802
+--- /dev/null
++++ b/include/linux/squashfs_fs_sb.h
 @@ -0,0 +1,76 @@
 +#ifndef SQUASHFS_FS_SB
 +#define SQUASHFS_FS_SB
@@ -4178,9 +4180,10 @@
 +	int			(*read_fragment_index_table)(struct super_block *s);
 +};
 +#endif
-diff -x .gitignore -Nurp linux-2.6.24/init/do_mounts_rd.c linux-2.6.24-squashfs3.3/init/do_mounts_rd.c
---- linux-2.6.24/init/do_mounts_rd.c	2007-10-25 17:41:49.000000000 +0100
-+++ linux-2.6.24-squashfs3.3/init/do_mounts_rd.c	2007-11-01 05:06:25.000000000 +0000
+diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
+index 3ac5904..0ddd43c 100644
+--- a/init/do_mounts_rd.c
++++ b/init/do_mounts_rd.c
 @@ -5,6 +5,7 @@
  #include <linux/ext2_fs.h>
  #include <linux/romfs_fs.h>
@@ -4189,7 +4192,7 @@
  #include <linux/initrd.h>
  #include <linux/string.h>
  
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
+@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, int out_fd);
   * numbers could not be found.
   *
   * We currently check for the following magic numbers:
@@ -4197,7 +4200,7 @@
   * 	minix
   * 	ext2
   *	romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
+@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start_block)
  	struct ext2_super_block *ext2sb;
  	struct romfs_super_block *romfsb;
  	struct cramfs_super *cramfsb;
@@ -4205,7 +4208,7 @@
  	int nblocks = -1;
  	unsigned char *buf;
  
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
+@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start_block)
  	ext2sb = (struct ext2_super_block *) buf;
  	romfsb = (struct romfs_super_block *) buf;
  	cramfsb = (struct cramfs_super *) buf;
@@ -4213,7 +4216,7 @@
  	memset(buf, 0xe5, size);
  
  	/*
-@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start
+@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start_block)
  		goto done;
  	}
  

linux-2.6-utrace-core.patch:

Index: linux-2.6-utrace-core.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-utrace-core.patch,v
retrieving revision 1.2.8.1
retrieving revision 1.2.8.2
diff -u -r1.2.8.1 -r1.2.8.2
--- linux-2.6-utrace-core.patch	18 Feb 2008 16:55:17 -0000	1.2.8.1
+++ linux-2.6-utrace-core.patch	29 Feb 2008 18:58:23 -0000	1.2.8.2
@@ -20,15 +20,15 @@
 ---
 
  kernel/Makefile                   |    1 
- kernel/utrace.c                   | 2359 +++++++++++++++++++++++++++++++++++++
+ kernel/utrace.c                   | 2383 +++++++++++++++++++++++++++++++++++++
  Documentation/utrace.txt          |  579 +++++++++
  Documentation/DocBook/Makefile    |    2 
  Documentation/DocBook/utrace.tmpl |   23 
  include/linux/tracehook.h         |   85 +
- include/linux/utrace.h            |  544 +++++++++
+ include/linux/utrace.h            |  544 ++++++++
  include/linux/sched.h             |    5 
  init/Kconfig                      |   18 
- 9 files changed, 3598 insertions(+), 18 deletions(-)
+ 9 files changed, 3622 insertions(+), 18 deletions(-)
  create kernel/utrace.c
  create Documentation/utrace.txt
  create Documentation/DocBook/utrace.tmpl
@@ -46,11 +46,11 @@
  # According to Alan Modra <alan at linuxcare.com.au>, the -fno-omit-frame-pointer is
 --- linux-2.6/kernel/utrace.c
 +++ linux-2.6/kernel/utrace.c
-@@ -0,0 +1,2359 @@
+@@ -0,0 +1,2383 @@
 +/*
 + * utrace infrastructure interface for debugging user processes
 + *
-+ * Copyright (C) 2006, 2007 Red Hat, Inc.  All rights reserved.
++ * Copyright (C) 2006, 2007, 2008 Red Hat, Inc.  All rights reserved.
 + *
 + * This copyrighted material is made available to anyone wishing to use,
 + * modify, copy, or redistribute it subject to the terms and conditions
@@ -1434,6 +1434,7 @@
 +	 */
 +	if (action & UTRACE_ACTION_QUIESCE) {
 +		int killed;
++		int stop;
 +
 +		if (signal != NULL) {
 +			BUG_ON(utrace->u.live.signal != NULL);
@@ -1450,7 +1451,8 @@
 +		 * Never stop when there is a SIGKILL bringing us down.
 +		 */
 +		killed = sigkill_pending(tsk);
-+		if (!killed && (tsk->utrace_flags & UTRACE_ACTION_QUIESCE)) {
++		stop = !killed && (tsk->utrace_flags & UTRACE_ACTION_QUIESCE);
++		if (likely(stop)) {
 +			set_current_state(TASK_TRACED);
 +			/*
 +			 * If there is a group stop in progress,
@@ -1472,10 +1474,32 @@
 +			 */
 +			BUG_ON(tsk->utrace != utrace);
 +			BUG_ON(utrace->u.live.signal != signal);
++
++			if (likely(stop)) {
++				/*
++				 * Synchronize with any utrace_detach
++				 * that might be in progress.  We were
++				 * just now quiescent in TASK_TRACED,
++				 * and it expected us to stay there.
++				 * But SIGKILL might have broken that.
++				 * Taking this lock here serializes its
++				 * work so that if it had the lock and
++				 * thought we were still in TASK_TRACED,
++				 * we block until it has finished
++				 * looking at utrace.  A utrace_detach
++				 * that gets the lock after we release
++				 * it here will not think we are
++				 * quiescent at all, since we are in
++				 * TASK_RUNNING state now.
++				 */
++				spin_lock(&utrace->lock);
++				spin_unlock(&utrace->lock);
++			}
++
 +			utrace->u.live.signal = NULL;
 +		}
 +
-+		if (killed)	/* Game over, man!  */
++		if (unlikely(killed)) /* Game over, man!  */
 +			return 1;
 +
 +		/*

linux-2.6-utrace-tracehook.patch:

Index: linux-2.6-utrace-tracehook.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-utrace-tracehook.patch,v
retrieving revision 1.2.8.1
retrieving revision 1.2.8.2
diff -u -r1.2.8.1 -r1.2.8.2
--- linux-2.6-utrace-tracehook.patch	18 Feb 2008 16:55:17 -0000	1.2.8.1
+++ linux-2.6-utrace-tracehook.patch	29 Feb 2008 18:58:23 -0000	1.2.8.2
@@ -82,6 +82,7 @@
  arch/ia64/kernel/asm-offsets.c      |    2 
  arch/ia64/kernel/fsys.S             |   16 +
  kernel/exit.c                       |  238 +++++---------------
+ kernel/power/process.c              |   11 +
  kernel/sched.c                      |    2 
  kernel/ptrace.c                     |  307 +-------------------------
  kernel/timer.c                      |    6 -
@@ -101,7 +102,7 @@
  include/asm-x86/signal.h            |    4 
  drivers/connector/cn_proc.c         |    4 
  mm/nommu.c                          |    4 
- 68 files changed, 861 insertions(+), 1146 deletions(-)
+ 69 files changed, 869 insertions(+), 1149 deletions(-)
  create include/linux/tracehook.h
  create include/asm-powerpc/tracehook.h
  create include/asm-x86/tracehook.h
@@ -1270,7 +1271,7 @@
  }
 --- linux-2.6/arch/x86/kernel/traps_64.c
 +++ linux-2.6/arch/x86/kernel/traps_64.c
-@@ -885,14 +885,6 @@ asmlinkage void __kprobes do_debug(struc
+@@ -886,14 +886,6 @@ asmlinkage void __kprobes do_debug(struc
  		 */
                  if (!user_mode(regs))
                         goto clear_TF_reenable;
@@ -2144,6 +2145,33 @@
  		else {
  			/*
  			 * For a WNOHANG return, clear out all the fields
+--- linux-2.6/kernel/power/process.c
++++ linux-2.6/kernel/power/process.c
+@@ -13,6 +13,7 @@
+ #include <linux/module.h>
+ #include <linux/syscalls.h>
+ #include <linux/freezer.h>
++#include <linux/tracehook.h>
+ 
+ /* 
+  * Timeout for stopping processes
+@@ -182,9 +183,13 @@ static int try_to_freeze_tasks(int freez
+ 			if (frozen(p) || !freezeable(p))
+ 				continue;
+ 
+-			if (p->state == TASK_TRACED && frozen(p->parent)) {
+-				cancel_freezing(p);
+-				continue;
++			if (p->state == TASK_TRACED) {
++				struct task_struct *tracer;
++				tracer = tracehook_tracer_task(p);
++				if (tracer && frozen(tracer)) {
++					cancel_freezing(p);
++					continue;
++				}
+ 			}
+ 
+ 			if (!freeze_task(p, freeze_user_space))
 --- linux-2.6/kernel/sched.c
 +++ linux-2.6/kernel/sched.c
 @@ -4918,7 +4918,7 @@ static void show_task(struct task_struct

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.1.2.1 -r 1.1.2.2 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-wireless-pending.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-wireless-pending.patch	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ linux-2.6-wireless-pending.patch	29 Feb 2008 18:58:23 -0000	1.1.2.2
@@ -1,5391 +1,22955 @@
-commit 1649f279a01d5623c5ab048dea69654c13b87dd9
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Sun Feb 3 15:55:21 2008 +0100
+commit cfced8184e83694383a6bedddb6530f298f3855f
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Thu Feb 21 11:33:58 2008 -0500
 
-    rt2x00: Fix queue index handling
+    mac80211: fix incorrect use of CONFIG_MAC80211_IBSS_DEBUG
     
-    When Q_INDEX is increased, the queue->length should be increased,
-    only when Q_INDEX_DONE is increased should queue_length be descreased.
+    Configuration variables are only available to the preprocessor
     
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 49dc7bf4c18be97f49e5d84804e2a210294f2ebc
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Sun Feb 3 15:54:57 2008 +0100
+commit 4d161f9d7f3f3ce069006b53dc8a84ed8a33753f
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Wed Feb 20 12:08:12 2008 +0100
 
-    rt2x00: Move beacon and atim queue defines into rt2x00
+    p54: fix sparse warnings
     
-    As Johannes Berg indicated the BEACON and AFTER_BEACON
-    queue indeces in mac80211 should be removed because they
-    are too hardware specific. This patch adds the queue index
-    defines into rt2x00queue.h and removes the dependency of
-    the defines inside mac80211.h.
+    This fixes a few sparse warnings in p54.
     
-    Also move rt2x00pci_beacon_update() into rt2400pci and
-    rt2500pci individually since it is no longer a generic
-    function since rt61 and rt2800 no longer use that.
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit ee96158b0d6cb34b5ba323c18e6fcac037bab444
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Wed Feb 20 12:06:47 2008 +0100
+
+    adm8211: fix sparse warnings
     
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Both of these seem to be actual errors, the first is just wrong
+    and the second is my mistake introduced by the cfg80211 API
+    update.
+    
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 00bb22220f6e648a50faa755e7c6673d6c98f283
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Sun Feb 3 15:52:21 2008 +0100
+commit 23eb3936312dc16697aa68870b912f4504711e3c
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Wed Feb 20 19:08:10 2008 +0100
 
-    rt2x00: Initialize QID from queue->qid
+    ssb: Add support for 8bit register access
     
-    The QID_MGMT is assigned to the beacon and atim queue
-    during initialization. This means we don't need a seperate
-    check in write_tx_desc()..
+    This adds support for 8bit wide register reads/writes.
+    This is needed in order to support the gigabit ethernet core.
     
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ac70a432ade9dc1943a5fc6887477942ef2c297f
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Sun Feb 3 15:51:47 2008 +0100
+commit 30e8c404283a93915979f9d48f770729ac5612d8
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Wed Feb 20 11:21:35 2008 +0100
 
-    rt2x00: Remove TX_MGMT queue usage
+    mac80211: consolidate TIM handling code
     
-    rt73usb doesn't have a 5th queue, correctly initialize hw->queues
-    rt61pci had a 5th queue but was removed recently, correctly initialize
-    hw->queues and remove the last remnants.
+    This consolidates all TIM handling code to avoid re-introducing
+    errors with the bitmap/set_tim order and to reduce code. While
+    reading the code I noticed a possible problem so I also added
+    a comment about that.
     
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 5a6bd1bd947056843e39693322586c11b88301ef
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Sun Feb 3 15:49:59 2008 +0100
+commit 093cbe59df31971739f313f8ac7ea92dae6a9a53
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Wed Feb 20 02:07:21 2008 +0100
 
-    rt2x00: Add per-interface structure
+    mac80211: remove sta TIM flag, fix expiry TIM handling
     
-    Rework the interface handling. Delete the interface structure
-    and replace it with a per-interface structure. This changes the
-    way rt2x00 handles the active interface drastically.
+    The TIM flag that is kept in each station's info is completely
+    useless, there's no code (aside from the debugfs display code)
+    checking it, hence it can be removed. While doing that, I noticed
+    that the TIM handling is broken when buffered frames expire, so
+    fix that.
     
-    Copy ieee80211_bss_conf to the this rt2x00_intf structure during
-    the bss_info_changed() callback function. This will allow us to
-    reference it later, and removes the requirement for the device flag
-    SHORT_PREAMBLE flag which is interface specific.
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit bb947b28e1822acf74e24544c6a38e1c5360bda1
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Wed Feb 20 01:36:16 2008 +0100
+
+    mac80211: invoke set_tim() callback after setting own TIM info
     
-    Drivers receive the option to give the maximum number of virtual
-    interfaces the device can handle. Virtual interface support:
-    rt2400pci: 1 sta or 1 ap, * monitor interfaces
-    rt2500pci: 1 sta or 1 ap, * monitor interfaces
-    rt2500usb: 1 sta or 1 ap, * monitor interfaces
-    rt61pci: 1 sta or 4 ap, * monitor interfaces
-    rt73usb: 1 sta or 4 ap, * monitor interfaces
+    Drivers should be allowed to simply get a complete new beacon when
+    set_tim() is invoked (and set_tim() is required for drivers that
+    just want a beacon template!), so we need to update our own TIM
+    bitmap before calling set_tim() so that getting the beacon will
+    now get an already updated beacon.
     
-    At the moment none of the drivers support AP and STA interfaces
-    simultaneously, this is a hardware limitation so future support
-    will be very unlikely.
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 28606c369e2f5d072ff7abd87ded79c5e533d10f
+Author: Roel Kluin <12o3l at tiscali.nl>
+Date:   Tue Feb 19 15:41:50 2008 +0100
+
+    wireless: Convert to list_for_each_entry_rcu()
     
-    Each interface structure receives its dedicated beacon entry,
-    with this we can easily work with beaconing while multiple master
-    mode interfaces are currently active.
+    Convert list_for_each_rcu() to list_for_each_entry_rcu()
     
-    The configuration handlers for the MAC, BSSID and type are
-    often called together since they all belong to the interface
-    configuration. Merge the 3 configuration calls and cleanup
-    the API between rt2x00lib and the drivers. While we are cleaning
-    up the interface configuration anyway, we might as well clean up
-    the configuration handler as well.
+    Signed-off-by: Roel Kluin <12o3l at tiscali.nl>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit d10d5dd1d429e57c44697665391dd802c8c31875
+Author: Tomas Winkler <tomas.winkler at intel.com>
+Date:   Wed Feb 13 20:58:34 2008 +0200
+
+    wireless: update US regulatory domain
+    
+    This patch adds channels to US regulatory domain
+    
+    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 96efd302ca3ff1f822283ead88ebccef793f3cdd
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Feb 17 17:36:49 2008 +0100
+
+    rt2x00: Release rt2x00 2.1.2
     
     Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 45df21472750a43c3430aced2976dd664e2f9db9
+commit fbc3fc7010f952e7892ba7283b845defd0d31df7
 Author: Ivo van Doorn <ivdoorn at gmail.com>
[...42789 lines suppressed...]
++	err = select_core_and_segment(dev, &offset);
++	if (likely(!err))
++		writeb(value, bus->mmio + offset);
++	mmiowb();
++	spin_unlock_irqrestore(&bus->bar_lock, flags);
++}
++
+ static void ssb_pcmcia_write16(struct ssb_device *dev, u16 offset, u16 value)
+ {
+ 	struct ssb_bus *bus = dev->bus;
+@@ -238,8 +268,10 @@ static void ssb_pcmcia_write32(struct ss
  
- 	/*
- 	 * Fill in skb descriptor
- 	 */
--	desc = get_skb_desc(skb);
--	desc->desc_len = ring->desc_size;
--	desc->data_len = skb->len - ring->desc_size;
--	desc->desc = skb->data;
--	desc->data = skb->data + ring->desc_size;
--	desc->ring = ring;
--	desc->entry = entry;
-+	skbdesc = get_skb_frame_desc(skb);
-+	memset(skbdesc, 0, sizeof(*skbdesc));
-+	skbdesc->data = skb->data + intf->beacon->queue->desc_size;
-+	skbdesc->data_len = skb->len - intf->beacon->queue->desc_size;
-+	skbdesc->desc = skb->data;
-+	skbdesc->desc_len = intf->beacon->queue->desc_size;
-+	skbdesc->entry = intf->beacon;
+ /* Not "static", as it's used in main.c */
+ const struct ssb_bus_ops ssb_pcmcia_ops = {
++	.read8		= ssb_pcmcia_read8,
+ 	.read16		= ssb_pcmcia_read16,
+ 	.read32		= ssb_pcmcia_read32,
++	.write8		= ssb_pcmcia_write8,
+ 	.write16	= ssb_pcmcia_write16,
+ 	.write32	= ssb_pcmcia_write32,
+ };
+diff -up linux-2.6.24.noarch/drivers/ssb/main.c.orig linux-2.6.24.noarch/drivers/ssb/main.c
+--- linux-2.6.24.noarch/drivers/ssb/main.c.orig	2008-02-21 14:00:25.000000000 -0500
++++ linux-2.6.24.noarch/drivers/ssb/main.c	2008-02-21 14:05:08.000000000 -0500
+@@ -505,6 +505,14 @@ error:
+ 	return err;
+ }
  
-+	/*
-+	 * mac80211 doesn't provide the control->queue variable
-+	 * for beacons. Set our own queue identification so
-+	 * it can be used during descriptor initialization.
-+	 */
-+	control->queue = RT2X00_BCN_QUEUE_BEACON;
- 	rt2x00lib_write_tx_desc(rt2x00dev, skb, control);
++static u8 ssb_ssb_read8(struct ssb_device *dev, u16 offset)
++{
++	struct ssb_bus *bus = dev->bus;
++
++	offset += dev->core_index * SSB_CORE_SIZE;
++	return readb(bus->mmio + offset);
++}
++
+ static u16 ssb_ssb_read16(struct ssb_device *dev, u16 offset)
+ {
+ 	struct ssb_bus *bus = dev->bus;
+@@ -521,6 +529,14 @@ static u32 ssb_ssb_read32(struct ssb_dev
+ 	return readl(bus->mmio + offset);
+ }
  
- 	/*
- 	 * Write entire beacon with descriptor to register,
- 	 * and kick the beacon generator.
- 	 */
-+	beacon_base = HW_BEACON_OFFSET(intf->beacon->entry_idx);
- 	timeout = REGISTER_TIMEOUT * (skb->len / sizeof(u32));
- 	rt2x00usb_vendor_request(rt2x00dev, USB_MULTI_WRITE,
--				 USB_VENDOR_REQUEST_OUT,
--				 HW_BEACON_BASE0, 0x0000,
-+				 USB_VENDOR_REQUEST_OUT, beacon_base, 0,
- 				 skb->data, skb->len, timeout);
--	rt73usb_kick_tx_queue(rt2x00dev, IEEE80211_TX_QUEUE_BEACON);
-+	rt73usb_kick_tx_queue(rt2x00dev, control->queue);
++static void ssb_ssb_write8(struct ssb_device *dev, u16 offset, u8 value)
++{
++	struct ssb_bus *bus = dev->bus;
++
++	offset += dev->core_index * SSB_CORE_SIZE;
++	writeb(value, bus->mmio + offset);
++}
++
+ static void ssb_ssb_write16(struct ssb_device *dev, u16 offset, u16 value)
+ {
+ 	struct ssb_bus *bus = dev->bus;
+@@ -539,8 +555,10 @@ static void ssb_ssb_write32(struct ssb_d
  
- 	return 0;
- }
-@@ -2046,19 +2084,41 @@ static const struct rt2x00lib_ops rt73us
- 	.get_tx_data_len	= rt73usb_get_tx_data_len,
- 	.kick_tx_queue		= rt73usb_kick_tx_queue,
- 	.fill_rxdone		= rt73usb_fill_rxdone,
--	.config_mac_addr	= rt73usb_config_mac_addr,
--	.config_bssid		= rt73usb_config_bssid,
--	.config_type		= rt73usb_config_type,
-+	.config_intf		= rt73usb_config_intf,
- 	.config_preamble	= rt73usb_config_preamble,
- 	.config			= rt73usb_config,
+ /* Ops for the plain SSB bus without a host-device (no PCI or PCMCIA). */
+ static const struct ssb_bus_ops ssb_ssb_ops = {
++	.read8		= ssb_ssb_read8,
+ 	.read16		= ssb_ssb_read16,
+ 	.read32		= ssb_ssb_read32,
++	.write8		= ssb_ssb_write8,
+ 	.write16	= ssb_ssb_write16,
+ 	.write32	= ssb_ssb_write32,
  };
+diff -up linux-2.6.24.noarch/drivers/ssb/pci.c.orig linux-2.6.24.noarch/drivers/ssb/pci.c
+--- linux-2.6.24.noarch/drivers/ssb/pci.c.orig	2008-02-21 13:44:10.000000000 -0500
++++ linux-2.6.24.noarch/drivers/ssb/pci.c	2008-02-21 14:05:08.000000000 -0500
+@@ -572,6 +572,19 @@ static inline int ssb_pci_assert_buspowe
+ }
+ #endif /* DEBUG */
  
-+static const struct data_queue_desc rt73usb_queue_rx = {
-+	.entry_num		= RX_ENTRIES,
-+	.data_size		= DATA_FRAME_SIZE,
-+	.desc_size		= RXD_DESC_SIZE,
-+	.priv_size		= sizeof(struct queue_entry_priv_usb_rx),
-+};
++static u8 ssb_pci_read8(struct ssb_device *dev, u16 offset)
++{
++	struct ssb_bus *bus = dev->bus;
 +
-+static const struct data_queue_desc rt73usb_queue_tx = {
-+	.entry_num		= TX_ENTRIES,
-+	.data_size		= DATA_FRAME_SIZE,
-+	.desc_size		= TXD_DESC_SIZE,
-+	.priv_size		= sizeof(struct queue_entry_priv_usb_tx),
-+};
++	if (unlikely(ssb_pci_assert_buspower(bus)))
++		return 0xFF;
++	if (unlikely(bus->mapped_device != dev)) {
++		if (unlikely(ssb_pci_switch_core(bus, dev)))
++			return 0xFF;
++	}
++	return ioread8(bus->mmio + offset);
++}
 +
-+static const struct data_queue_desc rt73usb_queue_bcn = {
-+	.entry_num		= 4 * BEACON_ENTRIES,
-+	.data_size		= MGMT_FRAME_SIZE,
-+	.desc_size		= TXINFO_SIZE,
-+	.priv_size		= sizeof(struct queue_entry_priv_usb_tx),
-+};
+ static u16 ssb_pci_read16(struct ssb_device *dev, u16 offset)
+ {
+ 	struct ssb_bus *bus = dev->bus;
+@@ -598,6 +611,19 @@ static u32 ssb_pci_read32(struct ssb_dev
+ 	return ioread32(bus->mmio + offset);
+ }
+ 
++static void ssb_pci_write8(struct ssb_device *dev, u16 offset, u8 value)
++{
++	struct ssb_bus *bus = dev->bus;
 +
- static const struct rt2x00_ops rt73usb_ops = {
- 	.name		= KBUILD_MODNAME,
--	.rxd_size	= RXD_DESC_SIZE,
--	.txd_size	= TXD_DESC_SIZE,
-+	.max_sta_intf	= 1,
-+	.max_ap_intf	= 4,
- 	.eeprom_size	= EEPROM_SIZE,
- 	.rf_size	= RF_SIZE,
-+	.rx		= &rt73usb_queue_rx,
-+	.tx		= &rt73usb_queue_tx,
-+	.bcn		= &rt73usb_queue_bcn,
- 	.lib		= &rt73usb_rt2x00_ops,
- 	.hw		= &rt73usb_mac80211_ops,
- #ifdef CONFIG_RT2X00_LIB_DEBUGFS
++	if (unlikely(ssb_pci_assert_buspower(bus)))
++		return;
++	if (unlikely(bus->mapped_device != dev)) {
++		if (unlikely(ssb_pci_switch_core(bus, dev)))
++			return;
++	}
++	iowrite8(value, bus->mmio + offset);
++}
++
+ static void ssb_pci_write16(struct ssb_device *dev, u16 offset, u16 value)
+ {
+ 	struct ssb_bus *bus = dev->bus;
+@@ -626,8 +652,10 @@ static void ssb_pci_write32(struct ssb_d
+ 
+ /* Not "static", as it's used in main.c */
+ const struct ssb_bus_ops ssb_pci_ops = {
++	.read8		= ssb_pci_read8,
+ 	.read16		= ssb_pci_read16,
+ 	.read32		= ssb_pci_read32,
++	.write8		= ssb_pci_write8,
+ 	.write16	= ssb_pci_write16,
+ 	.write32	= ssb_pci_write32,
+ };

linux-2.6-wireless.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.2.8.1 -r 1.2.8.2 linux-2.6-wireless.patch
Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/linux-2.6-wireless.patch,v
retrieving revision 1.2.8.1
retrieving revision 1.2.8.2
diff -u -r1.2.8.1 -r1.2.8.2
--- linux-2.6-wireless.patch	18 Feb 2008 16:55:17 -0000	1.2.8.1
+++ linux-2.6-wireless.patch	29 Feb 2008 18:58:23 -0000	1.2.8.2
@@ -1,128428 +1,706 @@
-commit b79caa68c0d48477453a90d12be34b47cb75f3a8
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Tue Feb 5 12:50:41 2008 +0100
+commit c2893054cc823e05c723114378244c8caba084c0
+Author: Alexey Zaytsev <alexey.zaytsev at gmail.com>
+Date:   Sat Feb 23 13:33:07 2008 +0300
 
-    b43: Fix DMA for 30/32-bit DMA engines
+    Don't build bcm43xx if SSB is static and b43 PCI-SSB bridge is enabled.
     
-    This checks if the DMA address is bigger than what the controller can manage.
-    It will reallocate the buffers in the GFP_DMA zone in that case.
+    This may happen e.g. when the ssb is statically enables by the b44 driver,
+    and the b43 pci-ssb bridge is enbled by the b43/b43legacy drivers, or the
+    b43/b43legacy drivers are built statically.
     
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: Alexey Zaytsev <alexey.zaytsev at gmail.com>
+    Acked-by: Larry Finger <Larry.Finger at lwfinger.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 532031d7f426eb02f854d13184416cabcb01bdd5
-Author: Andrew Morton <akpm at linux-foundation.org>
-Date:   Mon Feb 4 23:58:42 2008 -0800
+commit 82928757f3e9451c1ae520f46d327d6110a4eec1
+Author: Alexey Zaytsev <alexey.zaytsev at gmail.com>
+Date:   Sat Feb 23 12:59:26 2008 +0300
 
-    b43: fix build with CONFIG_SSB_PCIHOST=n
+    Use a separate config option for the b43 pci to ssb bridge.
     
-    m68k allmodconfig gives
+    The bridge code was unnecessary enabled by the b44
+    driver, but it prevents the bcm43xx driver from
+    being loaded, as the bridge claims the same pci ids.
     
-    drivers/net/wireless/b43/main.c:251: error: implicit declaration of function 'mmiowb'
+    Now we enable the birdge only if the b43{legacy}
+    drivers are selected.
     
-    because CONFIG_B43=m, CONFIG_SSB_PCIHOST=n.
-    
-    Might be Kconfig bustage, but this works...
-    
-    Cc: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 03ac7a8141e1613add92d42e389a35a126b1caf8
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Mon Feb 4 18:11:41 2008 +0100
-
-    mac80211: Is not EXPERIMENTAL anymore
-    
-    Remove the EXPERIMENTAL dependency, as the existing mac80211
-    features are stable.
-    
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 221c80cf03d77490b8e45184a273834d0259b9e0
-Author: Adrian Bunk <bunk at kernel.org>
-Date:   Sat Feb 2 23:19:01 2008 +0200
-
-    iwl3945-base.c: fix off-by-one errors
-    
-    This patch fixes two off-by-one errors resulting in array overflows
-    spotted by the Coverity checker.
-    
-    Signed-off-by: Adrian Bunk <bunk at kernel.org>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 8dd0100ce9511e52614ecd0a6587c13ce5769c8b
-Author: Stefano Brivio <stefano.brivio at polimi.it>
-Date:   Sat Feb 2 19:16:03 2008 +0100
-
-    b43legacy: fix DMA slot resource leakage
-    
-    This fixes four resource leakages.
-    In any error path we must deallocate the DMA frame slots we
-    previously allocated by request_slot().
-    This is done by storing the ring pointers before doing any ring
-    allocation and restoring the old pointers in case of an error.
-    
-    This patch by Michael Buesch has been ported to b43legacy.
-    
-    Cc: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 9eca9a8e81928685b4de00ecef83a7c13c340fc9
-Author: Stefano Brivio <stefano.brivio at polimi.it>
-Date:   Sat Feb 2 19:16:01 2008 +0100
-
-    b43legacy: drop packets we are not able to encrypt
-    
-    We must drop any packets we are not able to encrypt.
-    We must not send them unencrypted or with an all-zero-key (which
-    basically is the same as unencrypted, from a security point of view).
-    
-    This might only trigger shortly after resume before mac80211 reassociated
-    and reconfigured the keys.
-    
-    It is safe to drop these packets, as the association they belong to
-    is not guaranteed anymore anyway.
-    This is a security fix in the sense that it prevents information leakage.
-    
-    This patch by Michael Buesch has been ported to b43legacy.
-    
-    Cc: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit ada50731c0346bf900dc387edd3a6961297bf2d3
-Author: Stefano Brivio <stefano.brivio at polimi.it>
-Date:   Sat Feb 2 19:15:57 2008 +0100
-
-    b43legacy: fix suspend/resume
-    
-    This patch makes suspend/resume work with the b43legacy driver.
-    We must not overwrite the MAC addresses in the init function, as this
-    would also overwrite the MAC on resume. With an all-zero MAC the device
-    firmware is not able to ACK any received packets anymore.
-    Fix this by moving the initializion stuff that must be done on init but
-    not on resume to the start function.
-    Also zero out filter_flags to make sure we don't have some flags
-    from a previous instance for a tiny timeframe until mac80211 reconfigures
-    them.
-    
-    This patch by Michael Buesch has been ported to b43legacy.
-    
-    Cc: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 0cd67d48b519c3d8d89d238fab1cf68a5289638a
-Author: Stefano Brivio <stefano.brivio at polimi.it>
-Date:   Sat Feb 2 19:15:49 2008 +0100
-
-    b43legacy: fix PIO crash
-    
-    Fix the crash reported below, which seems to happen on bcm4306 rev. 2 devices
-    only while using PIO:
-    
-    Oops: 0000 [#1] PREEMPT
-    Modules linked in: b43(F) rfkill(F) led_class(F) input_polldev(F) arc4 b43legacy mac80211 cfg80211 i915 drm snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device ohci1394 ieee1394 ssb pcmcia snd_intel8x0m ehci_hcd uhci_hcd evdev
-    
-    Pid: 0, comm: swapper Tainted: GF	(2.6.24st3 #2)
-    EIP: 0060:[<f90f667b>] EFLAGS: 00010002 CPU: 0
-    EIP is at b43legacy_pio_handle_txstatus+0xbb/0x210 [b43legacy]
-    EAX: 0000049b EBX: f11f8044 ECX: 00000001 EDX: 00000000
-    ESI: f1ff8000 EDI: 00000000 EBP: f11f8040 ESP: c04f4ef4
-     DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068
-    Process swapper (pid: 0, ti=c04f4000 task=c0488300 task.ti=c04b8000)
-    Stack: f90f2788 c05009f0 c0500900 000010f7 f1053823 c04f4f24 dfb8e800 00000003
-           f1368000 00000007 00000296 f90f1975 00001000 010c0800 01000000 00000007
-           f90f6391 f11f8000 00000082 c04f4f4a 00000000 00004fd0 10f70000 8c061000
-    Call Trace:
-     [<f90f2788>] b43legacy_debugfs_log_txstat+0x48/0xb0 [b43legacy]
-     [<f90f1975>] b43legacy_handle_hwtxstatus+0x75/0x80 [b43legacy]
-     [<f90f6391>] b43legacy_pio_rx+0x201/0x280 [b43legacy]
-     [<f90e4fa3>] b43legacy_interrupt_tasklet+0x2e3/0x870 [b43legacy]
-     [<c0123567>] tasklet_action+0x27/0x60
-     [<c01237b4>] __do_softirq+0x54/0xb0
-     [<c010686b>] do_softirq+0x7b/0xe0
-     [<c01457c0>] handle_level_irq+0x0/0x110
-     [<c01457c0>] handle_level_irq+0x0/0x110
-     [<c0123758>] irq_exit+0x38/0x40
-     [<c0106953>] do_IRQ+0x83/0xd0
-     [<c011812f>] __update_rq_clock+0x4f/0x180
-     [<c0104b4f>] common_interrupt+0x23/0x28
-     [<c011007b>] wakeup_code+0x7b/0xde
-     [<c02b1039>] acpi_processor_idle+0x24a/0x3c9
-     [<c01025c7>] cpu_idle+0x47/0x80
-     [<c04b9ad5>] start_kernel+0x205/0x290
-     [<c04b9360>] unknown_bootoption+0x0/0x1f0
-     =======================
-    Code: 0f 00 00 81 fb ff 00 00 00 0f 87 36 01 00 00 8d 04 db 85 ff 8d 6c c6 40 8d 5d 04 0f 85 ef 00 00 00 fe 4e 0e 0f b7 46 0c 8b 53 04 <8b> 4a 50 29 c8 83 e8 52 66 89 46 0c 8b 54 24 14 80 7a 0b 00 74
-    EIP: [<f90f667b>] b43legacy_pio_handle_txstatus+0xbb/0x210 [b43legacy] SS:ESP 0068:c04f4ef4
-    Kernel panic - not syncing: Fatal exception in interrupt
-    
-    Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 04a9e451fdbbfb84d6b87042b991f729f1c14249
-Author: John W. Linville <linville at tuxdriver.com>
-Date:   Fri Feb 1 16:03:45 2008 -0500
-
-    ath5k: fix section mismatch warning
-    
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
[...128618 lines suppressed...]
+@@ -97,12 +97,16 @@ void rt2x00lib_config_antenna(struct rt2
+ 	libconf.ant.rx = rx;
+ 	libconf.ant.tx = tx;
  
--	if (len < SSB_SPROMSIZE_BYTES * 2)
-+	if (len < size * 2)
- 		return -EINVAL;
++	if (rx == rt2x00dev->link.ant.active.rx &&
++	    tx == rt2x00dev->link.ant.active.tx)
++		return;
++
+ 	/*
+ 	 * Antenna setup changes require the RX to be disabled,
+ 	 * else the changes will be ignored by the device.
+ 	 */
+ 	if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
+-		rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
++		rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF_LINK);
  
--	while (cnt < SSB_SPROMSIZE_WORDS) {
-+	while (cnt < size) {
- 		memcpy(tmp, dump, 4);
- 		dump += 4;
- 		parsed = simple_strtoul(tmp, NULL, 16);
-@@ -627,7 +677,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
- 	if (!bus)
- 		goto out;
- 	err = -ENOMEM;
--	sprom = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
-+	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
- 	if (!sprom)
- 		goto out;
+ 	/*
+ 	 * Write new antenna setup to device and reset the link tuner.
+@@ -116,7 +120,7 @@ void rt2x00lib_config_antenna(struct rt2
+ 	rt2x00dev->link.ant.active.tx = libconf.ant.tx;
  
-@@ -640,7 +690,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
- 	sprom_do_read(bus, sprom);
- 	mutex_unlock(&bus->pci_sprom_mutex);
+ 	if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
+-		rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
++		rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON_LINK);
+ }
  
--	count = sprom2hex(sprom, buf, PAGE_SIZE);
-+	count = sprom2hex(sprom, buf, PAGE_SIZE, bus->sprom_size);
- 	err = 0;
+ void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500pci.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig	2008-02-27 20:46:34.000000000 -0500
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500pci.c	2008-02-27 20:47:51.000000000 -0500
+@@ -1112,8 +1112,12 @@ static int rt2500pci_set_device_state(st
+ 		rt2500pci_disable_radio(rt2x00dev);
+ 		break;
+ 	case STATE_RADIO_RX_ON:
++	case STATE_RADIO_RX_ON_LINK:
++		rt2500pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
++		break;
+ 	case STATE_RADIO_RX_OFF:
+-		rt2500pci_toggle_rx(rt2x00dev, state);
++	case STATE_RADIO_RX_OFF_LINK:
++		rt2500pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
+ 		break;
+ 	case STATE_DEEP_SLEEP:
+ 	case STATE_SLEEP:
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt61pci.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt61pci.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt61pci.c.orig	2008-02-27 20:46:34.000000000 -0500
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt61pci.c	2008-02-27 20:47:51.000000000 -0500
+@@ -1482,8 +1482,12 @@ static int rt61pci_set_device_state(stru
+ 		rt61pci_disable_radio(rt2x00dev);
+ 		break;
+ 	case STATE_RADIO_RX_ON:
++	case STATE_RADIO_RX_ON_LINK:
++		rt61pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
++		break;
+ 	case STATE_RADIO_RX_OFF:
+-		rt61pci_toggle_rx(rt2x00dev, state);
++	case STATE_RADIO_RX_OFF_LINK:
++		rt61pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
+ 		break;
+ 	case STATE_DEEP_SLEEP:
+ 	case STATE_SLEEP:
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt73usb.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig	2008-02-27 20:46:34.000000000 -0500
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt73usb.c	2008-02-27 20:47:51.000000000 -0500
+@@ -1208,8 +1208,12 @@ static int rt73usb_set_device_state(stru
+ 		rt73usb_disable_radio(rt2x00dev);
+ 		break;
+ 	case STATE_RADIO_RX_ON:
++	case STATE_RADIO_RX_ON_LINK:
++		rt73usb_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
++		break;
+ 	case STATE_RADIO_RX_OFF:
+-		rt73usb_toggle_rx(rt2x00dev, state);
++	case STATE_RADIO_RX_OFF_LINK:
++		rt73usb_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
+ 		break;
+ 	case STATE_DEEP_SLEEP:
+ 	case STATE_SLEEP:
+diff -up linux-2.6.24.noarch/drivers/ssb/Makefile.orig linux-2.6.24.noarch/drivers/ssb/Makefile
+--- linux-2.6.24.noarch/drivers/ssb/Makefile.orig	2008-02-27 20:46:35.000000000 -0500
++++ linux-2.6.24.noarch/drivers/ssb/Makefile	2008-02-27 20:47:51.000000000 -0500
+@@ -14,6 +14,6 @@ ssb-$(CONFIG_SSB_DRIVER_PCICORE)	+= driv
+ 
+ # b43 pci-ssb-bridge driver
+ # Not strictly a part of SSB, but kept here for convenience
+-ssb-$(CONFIG_SSB_PCIHOST)		+= b43_pci_bridge.o
++ssb-$(CONFIG_SSB_B43_PCI_BRIDGE)	+= b43_pci_bridge.o
+ 
+ obj-$(CONFIG_SSB)			+= ssb.o
+diff -up linux-2.6.24.noarch/drivers/ssb/ssb_private.h.orig linux-2.6.24.noarch/drivers/ssb/ssb_private.h
+--- linux-2.6.24.noarch/drivers/ssb/ssb_private.h.orig	2008-01-24 17:58:37.000000000 -0500
++++ linux-2.6.24.noarch/drivers/ssb/ssb_private.h	2008-02-27 20:47:51.000000000 -0500
+@@ -120,10 +120,10 @@ extern int ssb_devices_thaw(struct ssb_b
+ extern struct ssb_bus *ssb_pci_dev_to_bus(struct pci_dev *pdev);
+ 
+ /* b43_pci_bridge.c */
+-#ifdef CONFIG_SSB_PCIHOST
++#ifdef CONFIG_SSB_B43_PCI_BRIDGE
+ extern int __init b43_pci_ssb_bridge_init(void);
+ extern void __exit b43_pci_ssb_bridge_exit(void);
+-#else /* CONFIG_SSB_PCIHOST */
++#else /* CONFIG_SSB_B43_PCI_BRIDGR */
+ static inline int b43_pci_ssb_bridge_init(void)
+ {
+ 	return 0;
+diff -up linux-2.6.24.noarch/drivers/ssb/Kconfig.orig linux-2.6.24.noarch/drivers/ssb/Kconfig
+--- linux-2.6.24.noarch/drivers/ssb/Kconfig.orig	2008-02-27 20:46:35.000000000 -0500
++++ linux-2.6.24.noarch/drivers/ssb/Kconfig	2008-02-27 20:47:51.000000000 -0500
+@@ -35,6 +35,11 @@ config SSB_PCIHOST
  
- out_kfree:
-@@ -662,15 +712,15 @@ static ssize_t ssb_pci_attr_sprom_store(
- 	if (!bus)
- 		goto out;
- 	err = -ENOMEM;
--	sprom = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
-+	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
- 	if (!sprom)
- 		goto out;
--	err = hex2sprom(sprom, buf, count);
-+	err = hex2sprom(sprom, buf, count, bus->sprom_size);
- 	if (err) {
- 		err = -EINVAL;
- 		goto out_kfree;
- 	}
--	err = sprom_check_crc(sprom);
-+	err = sprom_check_crc(sprom, bus->sprom_size);
- 	if (err) {
- 		err = -EINVAL;
- 		goto out_kfree;
-diff -up linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt.orig linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt
---- linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt.orig	2008-01-24 17:58:37.000000000 -0500
-+++ linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt	2008-02-05 22:16:24.000000000 -0500
-@@ -332,4 +332,36 @@ Why:	This driver has been marked obsolet
- 	2.4 or later kernels, provides richer features and is more robust.
- Who:	Stephen Hemminger <shemminger at linux-foundation.org>
+ 	  If unsure, say Y
  
-+What:	bcm43xx wireless network driver
-+When:	2.6.26
-+Files:	drivers/net/wireless/bcm43xx
-+Why:	This driver's functionality has been replaced by the
-+	mac80211-based b43 and b43legacy drivers.
-+Who:	John W. Linville <linville at tuxdriver.com>
-+
-+---------------------------
-+
-+What:	ieee80211 softmac wireless networking component
-+When:	2.6.26 (or after removal of bcm43xx and port of zd1211rw to mac80211)
-+Files:	net/ieee80211/softmac
-+Why:	No in-kernel drivers will depend on it any longer.
-+Who:	John W. Linville <linville at tuxdriver.com>
-+
- ---------------------------
-+
-+What:	rc80211-simple rate control algorithm for mac80211
-+When:	2.6.26
-+Files:	net/mac80211/rc80211-simple.c
-+Why:	This algorithm was provided for reference but always exhibited bad
-+	responsiveness and performance and has some serious flaws. It has been
-+	replaced by rc80211-pid.
-+Who:	Stefano Brivio <stefano.brivio at polimi.it>
-+
-+---------------------------
++config SSB_B43_PCI_BRIDGE
++	bool
++	depends on SSB_PCIHOST
++	default n
 +
-+What:	b43 support for firmware revision < 410
-+When:	July 2008
-+Why:	The support code for the old firmware hurts code readability/maintainability
-+	and slightly hurts runtime performance. Bugfixes for the old firmware
-+	are not provided by Broadcom anymore.
-+Who:	Michael Buesch <mb at bu3sch.de>
+ config SSB_PCMCIAHOST_POSSIBLE
+ 	bool
+ 	depends on SSB && (PCMCIA = y || PCMCIA = SSB) && EXPERIMENTAL

linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch:

Index: linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch	22 Feb 2008 13:35:30 -0000	1.1.2.2
+++ linux-2.6-xen-0002-xen-debug-Add-xprintk-to-log-directly-via-hypercall.patch	29 Feb 2008 18:58:24 -0000	1.1.2.3
@@ -1,4 +1,4 @@
-From d5f22b8612a899f6a99bb35ae85ddbb06d910f1a Mon Sep 17 00:00:00 2001
+From bf8a073f9e76799a93f220ba857762a2659b5af0 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Wed, 21 Nov 2007 18:40:31 +0000
 Subject: [PATCH] xen debug: Add xprintk to log directly via hypercall
@@ -14,7 +14,7 @@
  2 files changed, 33 insertions(+), 0 deletions(-)
 
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 79ad152..84f46e2 100644
+index 49e5358..1a8e262 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
 @@ -32,6 +32,7 @@
@@ -60,8 +60,8 @@
 +       return 0;
 +}
 +
- static void xen_cpuid(unsigned int *eax, unsigned int *ebx,
- 		      unsigned int *ecx, unsigned int *edx)
+ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
+ 		      unsigned int *cx, unsigned int *dx)
  {
 diff --git a/include/xen/hvc-console.h b/include/xen/hvc-console.h
 index 21c0ecf..cb7a3c9 100644
@@ -75,5 +75,5 @@
  
  #endif	/* XEN_HVC_CONSOLE_H */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch:

Index: linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch	22 Feb 2008 13:35:30 -0000	1.1.2.2
+++ linux-2.6-xen-0003-fbdev-Make-deferred-I-O-work-as-advertized.patch	29 Feb 2008 18:58:24 -0000	1.1.2.3
@@ -1,4 +1,4 @@
-From 70b9c3791f137756d78ab99d5041778626395fe9 Mon Sep 17 00:00:00 2001
+From 7374aab4be5613c824208d57dad8bfc5a3179b95 Mon Sep 17 00:00:00 2001
 From: Markus Armbruster <armbru at redhat.com>
 Date: Thu, 21 Feb 2008 10:43:04 +0100
 Subject: [PATCH] fbdev: Make deferred I/O work as advertized
@@ -21,11 +21,11 @@
 Signed-off-by: Markus Armbruster <armbru at redhat.com>
 Signed-off-by: Mark McLoughlin <markmc at redhat.com>
 ---
- drivers/video/fb_defio.c |   23 +++++++++++++++++++++--
- 1 files changed, 21 insertions(+), 2 deletions(-)
+ drivers/video/fb_defio.c |   22 ++++++++++++++++++++--
+ 1 files changed, 20 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/video/fb_defio.c b/drivers/video/fb_defio.c
-index a0c5d9d..1310608 100644
+index 0f8cfb9..24843fd 100644
 --- a/drivers/video/fb_defio.c
 +++ b/drivers/video/fb_defio.c
 @@ -4,7 +4,7 @@
@@ -37,7 +37,7 @@
   * for more details.
   */
  
-@@ -31,7 +31,7 @@ static struct page* fb_deferred_io_nopage(struct vm_area_struct *vma,
+@@ -31,7 +31,7 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma,
  	unsigned long offset;
  	struct page *page;
  	struct fb_info *info = vma->vm_private_data;
@@ -45,9 +45,9 @@
 +	/* info->screen_base is virtual memory */
  	void *screen_base = (void __force *) info->screen_base;
  
- 	offset = (vaddr - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT);
-@@ -43,6 +43,16 @@ static struct page* fb_deferred_io_nopage(struct vm_area_struct *vma,
- 		return NOPAGE_OOM;
+ 	offset = vmf->pgoff << PAGE_SHIFT;
+@@ -43,6 +43,15 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma,
+ 		return VM_FAULT_SIGBUS;
  
  	get_page(page);
 +
@@ -57,13 +57,12 @@
 +		printk(KERN_ERR "no mapping available\n");
 +
 +	BUG_ON(!page->mapping);
++	page->index = vmf->pgoff;
 +
-+	page->index = (vaddr - vma->vm_start) >> PAGE_SHIFT;
-+
- 	if (type)
- 		*type = VM_FAULT_MINOR;
- 	return page;
-@@ -139,11 +149,20 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_init);
+ 	vmf->page = page;
+ 	return 0;
+ }
+@@ -138,11 +147,20 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_init);
  
  void fb_deferred_io_cleanup(struct fb_info *info)
  {
@@ -85,5 +84,5 @@
  EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup);
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch:

Index: linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch	22 Feb 2008 13:35:30 -0000	1.1.2.2
+++ linux-2.6-xen-0004-xen-pvfb-Para-virtual-framebuffer-keyboard-and-poi.patch	29 Feb 2008 18:58:24 -0000	1.1.2.3
@@ -1,4 +1,4 @@
-From 9b2b9531a809c0101a783b8b6d82070b9e65cef1 Mon Sep 17 00:00:00 2001
+From f7c2f60a0cc56ee0bafb3d495b635e65cb3dfc90 Mon Sep 17 00:00:00 2001
 From: Markus Armbruster <armbru at redhat.com>
 Date: Thu, 21 Feb 2008 10:43:39 +0100
 Subject: [PATCH] xen pvfb: Para-virtual framebuffer, keyboard and pointer driver
@@ -29,12 +29,12 @@
  create mode 100644 include/xen/interface/io/protocols.h
 
 diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
-index de4b170..024072d 100644
+index d84ac4a..747633c 100644
 --- a/drivers/input/Kconfig
 +++ b/drivers/input/Kconfig
-@@ -137,6 +137,15 @@ config INPUT_EVBUG
+@@ -149,6 +149,15 @@ config INPUT_APMPOWER
  	  To compile this driver as a module, choose M here: the
- 	  module will be called evbug.
+ 	  module will be called apm-power.
  
 +config XEN_KBDDEV_FRONTEND
 +	tristate "Xen virtual keyboard and mouse support"
@@ -49,13 +49,13 @@
  
  source "drivers/input/keyboard/Kconfig"
 diff --git a/drivers/input/Makefile b/drivers/input/Makefile
-index 78b0420..079ca91 100644
+index 24bdec1..606e1b9 100644
 --- a/drivers/input/Makefile
 +++ b/drivers/input/Makefile
-@@ -23,3 +23,5 @@ obj-$(CONFIG_INPUT_TOUCHSCREEN)	+= touchscreen/
- obj-$(CONFIG_INPUT_MISC)	+= misc/
+@@ -24,3 +24,5 @@ obj-$(CONFIG_INPUT_MISC)	+= misc/
+ obj-$(CONFIG_INPUT_LIRC)	+= lirc/
  
- obj-$(CONFIG_INPUT_LIRC)       += lirc/
+ obj-$(CONFIG_INPUT_APMPOWER)	+= apm-power.o
 +
 +obj-$(CONFIG_XEN_KBDDEV_FRONTEND)	+= xen-kbdfront.o
 diff --git a/drivers/input/xen-kbdfront.c b/drivers/input/xen-kbdfront.c
@@ -402,7 +402,7 @@
 +
 +MODULE_LICENSE("GPL");
 diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 5b3dbcf..ed2f7eb 100644
+index 758435f..67de177 100644
 --- a/drivers/video/Kconfig
 +++ b/drivers/video/Kconfig
 @@ -1903,6 +1903,20 @@ config FB_VIRTUAL
@@ -1272,5 +1272,5 @@
 +
 +#endif
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0005-xen-Module-autoprobing-support-for-frontend-drivers.patch:

Index: linux-2.6-xen-0005-xen-Module-autoprobing-support-for-frontend-drivers.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0005-xen-Module-autoprobing-support-for-frontend-drivers.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0005-xen-Module-autoprobing-support-for-frontend-drivers.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0005-xen-Module-autoprobing-support-for-frontend-drivers.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From f82ab30c0065b7a10246bce6358c970e7a944247 Mon Sep 17 00:00:00 2001
+From 90d81b581080a4b1dfd1a669f518d6dc2de1b367 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Fri, 22 Feb 2008 12:42:52 +0000
 Subject: [PATCH] xen: Module autoprobing support for frontend drivers
@@ -14,16 +14,16 @@
  3 files changed, 27 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
-index 2bdebcb..25aa472 100644
+index 9c6f3f9..d0d5a02 100644
 --- a/drivers/block/xen-blkfront.c
 +++ b/drivers/block/xen-blkfront.c
-@@ -982,3 +982,4 @@ module_exit(xlblk_exit);
+@@ -998,3 +998,4 @@ module_exit(xlblk_exit);
  MODULE_DESCRIPTION("Xen virtual block device frontend");
  MODULE_LICENSE("GPL");
  MODULE_ALIAS_BLOCKDEV_MAJOR(XENVBD_MAJOR);
 +MODULE_ALIAS("xen:vbd");
 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
-index bca37bf..67fe705 100644
+index 7483d45..b3fa27e 100644
 --- a/drivers/net/xen-netfront.c
 +++ b/drivers/net/xen-netfront.c
 @@ -1809,3 +1809,4 @@ module_exit(netif_exit);
@@ -93,5 +93,5 @@
  fail_unregister:
  	device_unregister(&xendev->dev);
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0006-xen-Add-compatibility-aliases-for-frontend-drivers.patch:

Index: linux-2.6-xen-0006-xen-Add-compatibility-aliases-for-frontend-drivers.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0006-xen-Add-compatibility-aliases-for-frontend-drivers.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0006-xen-Add-compatibility-aliases-for-frontend-drivers.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0006-xen-Add-compatibility-aliases-for-frontend-drivers.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 6f51d03cf70e1f654334ceab5103d60727d76b0b Mon Sep 17 00:00:00 2001
+From e9d405e6aae6d027d3bccab5f5335a30d0d3a68f Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Thu, 21 Feb 2008 11:13:12 +0000
 Subject: [PATCH] xen: Add compatibility aliases for frontend drivers
@@ -15,16 +15,16 @@
  2 files changed, 2 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
-index 25aa472..009451f 100644
+index d0d5a02..43e1188 100644
 --- a/drivers/block/xen-blkfront.c
 +++ b/drivers/block/xen-blkfront.c
-@@ -983,3 +983,4 @@ MODULE_DESCRIPTION("Xen virtual block device frontend");
+@@ -999,3 +999,4 @@ MODULE_DESCRIPTION("Xen virtual block device frontend");
  MODULE_LICENSE("GPL");
  MODULE_ALIAS_BLOCKDEV_MAJOR(XENVBD_MAJOR);
  MODULE_ALIAS("xen:vbd");
 +MODULE_ALIAS("xenblk");
 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
-index 67fe705..78e7452 100644
+index b3fa27e..e62018a 100644
 --- a/drivers/net/xen-netfront.c
 +++ b/drivers/net/xen-netfront.c
 @@ -1810,3 +1810,4 @@ module_exit(netif_exit);
@@ -33,5 +33,5 @@
  MODULE_ALIAS("xen:vif");
 +MODULE_ALIAS("xennet");
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0007-xen-dom0-Make-hvc_xen-console-work-for-dom0.patch:

Index: linux-2.6-xen-0007-xen-dom0-Make-hvc_xen-console-work-for-dom0.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0007-xen-dom0-Make-hvc_xen-console-work-for-dom0.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0007-xen-dom0-Make-hvc_xen-console-work-for-dom0.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0007-xen-dom0-Make-hvc_xen-console-work-for-dom0.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 0142b1f6b091dd7b50e845eba2560996833b9e57 Mon Sep 17 00:00:00 2001
+From 267886d9ea866edf57e6ec7fb662298de6947b46 Mon Sep 17 00:00:00 2001
 From: Juan Quintela <quintela at redhat.com>
 Date: Mon, 26 Nov 2007 07:38:29 +0100
 Subject: [PATCH] xen dom0: Make hvc_xen console work for dom0.
@@ -13,7 +13,7 @@
  3 files changed, 56 insertions(+), 9 deletions(-)
 
 diff --git a/arch/x86/xen/events.c b/arch/x86/xen/events.c
-index 6d1da58..2bf9731 100644
+index dcf613e..2a4c9aa 100644
 --- a/arch/x86/xen/events.c
 +++ b/arch/x86/xen/events.c
 @@ -311,7 +311,7 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
@@ -146,5 +146,5 @@
  			    irq_handler_t handler,
  			    unsigned long irqflags, const char *devname,
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0008-xen-dom0-Initialize-xenbus-for-dom0.patch:

Index: linux-2.6-xen-0008-xen-dom0-Initialize-xenbus-for-dom0.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0008-xen-dom0-Initialize-xenbus-for-dom0.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0008-xen-dom0-Initialize-xenbus-for-dom0.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0008-xen-dom0-Initialize-xenbus-for-dom0.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From ae56854ed82e9c8181edd89bffc6a5e7a602c5ca Mon Sep 17 00:00:00 2001
+From 3816d3e92492428dcecd6cec1223637fa5bf30a2 Mon Sep 17 00:00:00 2001
 From: Juan Quintela <quintela at redhat.com>
 Date: Mon, 26 Nov 2007 08:35:10 +0100
 Subject: [PATCH] xen dom0: Initialize xenbus for dom0.
@@ -65,5 +65,5 @@
  }
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0009-xen-dom0-Set-up-basic-IO-permissions-for-dom0.patch:

Index: linux-2.6-xen-0009-xen-dom0-Set-up-basic-IO-permissions-for-dom0.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0009-xen-dom0-Set-up-basic-IO-permissions-for-dom0.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0009-xen-dom0-Set-up-basic-IO-permissions-for-dom0.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0009-xen-dom0-Set-up-basic-IO-permissions-for-dom0.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 449196ff01f34bd88c80ac26fb2f0fa2cb27e51e Mon Sep 17 00:00:00 2001
+From 740903adc2fe10ed1d1a23a3510a2de77810fe56 Mon Sep 17 00:00:00 2001
 From: Juan Quintela <quintela at redhat.com>
 Date: Mon, 26 Nov 2007 08:53:42 +0100
 Subject: [PATCH] xen dom0: Set up basic IO permissions for dom0.
@@ -9,28 +9,12 @@
 Signed-off-by: Jeremy Fitzhardinge <jeremy at xensource.com>
 Signed-off-by: Juan Quintela <quintela at redhat.com>
 ---
- arch/x86/mm/ioremap_32.c |    3 ---
- arch/x86/xen/enlighten.c |   21 +++++++++++++++++++++
+ arch/x86/xen/enlighten.c |   23 +++++++++++++++++++++++
  arch/x86/xen/setup.c     |    3 ++-
- include/asm-x86/io_32.h  |    4 ++++
- 4 files changed, 27 insertions(+), 4 deletions(-)
+ 2 files changed, 25 insertions(+), 1 deletions(-)
 
-diff --git a/arch/x86/mm/ioremap_32.c b/arch/x86/mm/ioremap_32.c
-index 0b27831..63a301a 100644
---- a/arch/x86/mm/ioremap_32.c
-+++ b/arch/x86/mm/ioremap_32.c
-@@ -18,9 +18,6 @@
- #include <asm/tlbflush.h>
- #include <asm/pgtable.h>
- 
--#define ISA_START_ADDRESS	0xa0000
--#define ISA_END_ADDRESS		0x100000
--
- /*
-  * Generic mapping function (not visible outside):
-  */
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 84f46e2..69a73f0 100644
+index 1a8e262..b76103d 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
 @@ -45,6 +45,7 @@
@@ -41,7 +25,7 @@
  
  #include "xen-ops.h"
  #include "mmu.h"
-@@ -860,6 +861,20 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
+@@ -876,6 +877,22 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
  
  		pin_pagetable_pfn(level, PFN_DOWN(__pa(base)));
  	}
@@ -56,13 +40,15 @@
 +		for(i = ISA_START_ADDRESS; i < ISA_END_ADDRESS; i += PAGE_SIZE)
 +			set_pte_mfn(PAGE_OFFSET + i, PFN_DOWN(i), PAGE_KERNEL);
 +
-+		reserve_bootmem(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS);
++		reserve_bootmem(ISA_START_ADDRESS,
++				ISA_END_ADDRESS - ISA_START_ADDRESS,
++				BOOTMEM_DEFAULT);
 +		printk(KERN_INFO "Xen: setup ISA identity maps\n");
 +	}
  }
  
  /* This is called once we have the cpu_possible_map */
-@@ -1211,6 +1226,12 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -1227,6 +1244,12 @@ asmlinkage void __init xen_start_kernel(void)
  	if (xen_feature(XENFEAT_supervisor_mode_kernel))
  		pv_info.kernel_rpl = 0;
  
@@ -76,10 +62,10 @@
  	xen_reserve_top();
  
 diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
-index f84e772..3c84287 100644
+index 3bad477..fe29a16 100644
 --- a/arch/x86/xen/setup.c
 +++ b/arch/x86/xen/setup.c
-@@ -105,7 +105,8 @@ void __init xen_arch_setup(void)
+@@ -104,7 +104,8 @@ void __init xen_arch_setup(void)
  	xen_fill_possible_map();
  #endif
  
@@ -89,21 +75,6 @@
  
  	fiddle_vdso();
  }
-diff --git a/include/asm-x86/io_32.h b/include/asm-x86/io_32.h
-index fe881cd..e2b916e 100644
---- a/include/asm-x86/io_32.h
-+++ b/include/asm-x86/io_32.h
-@@ -139,6 +139,10 @@ extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
- #define dmi_iounmap bt_iounmap
- #define dmi_alloc alloc_bootmem
- 
-+
-+#define ISA_START_ADDRESS	0xa0000
-+#define ISA_END_ADDRESS		0x100000
-+
- /*
-  * ISA I/O bus memory addresses are 1:1 with the physical address.
-  */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0010-xen-dom0-Add-set_fixmap-pv_mmu_ops.patch:

Index: linux-2.6-xen-0010-xen-dom0-Add-set_fixmap-pv_mmu_ops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0010-xen-dom0-Add-set_fixmap-pv_mmu_ops.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0010-xen-dom0-Add-set_fixmap-pv_mmu_ops.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0010-xen-dom0-Add-set_fixmap-pv_mmu_ops.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 14514c95709eb64732bac56021edc81c0cde46c0 Mon Sep 17 00:00:00 2001
+From 4f3ad03267fd36790f58ed9f93a572dfed453e0f Mon Sep 17 00:00:00 2001
 From: Juan Quintela <quintela at redhat.com>
 Date: Tue, 27 Nov 2007 06:44:53 +0100
 Subject: [PATCH] xen dom0: Add set_fixmap pv_mmu_ops.
@@ -9,20 +9,20 @@
 Signed-off-by: Jeremy Fitzhardinge <jeremy at xensource.com>
 Signed-off-by: Juan Quintela <quintela at redhat.com>
 ---
- arch/x86/kernel/paravirt_32.c |    2 ++
- arch/x86/mm/pgtable_32.c      |   15 ++++++++++-----
- arch/x86/xen/enlighten.c      |   38 ++++++++++++++++++++++++++++++++++----
- arch/x86/xen/mmu.c            |   30 +-----------------------------
- include/asm-x86/fixmap_32.h   |   13 +++++++++++--
- include/asm-x86/paravirt.h    |   13 +++++++++++++
- include/asm-x86/pgtable_32.h  |    3 +++
+ arch/x86/kernel/paravirt.c   |    2 ++
+ arch/x86/mm/pgtable_32.c     |   15 ++++++++++-----
+ arch/x86/xen/enlighten.c     |   38 ++++++++++++++++++++++++++++++++++----
+ arch/x86/xen/mmu.c           |   30 +-----------------------------
+ include/asm-x86/fixmap_32.h  |   13 +++++++++++--
+ include/asm-x86/paravirt.h   |   13 +++++++++++++
+ include/asm-x86/pgtable_32.h |    3 +++
  7 files changed, 74 insertions(+), 40 deletions(-)
 
-diff --git a/arch/x86/kernel/paravirt_32.c b/arch/x86/kernel/paravirt_32.c
-index f500079..9fc62c2 100644
---- a/arch/x86/kernel/paravirt_32.c
-+++ b/arch/x86/kernel/paravirt_32.c
-@@ -462,6 +462,8 @@ struct pv_mmu_ops pv_mmu_ops = {
+diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
+index 075962c..c8ee0c9 100644
+--- a/arch/x86/kernel/paravirt.c
++++ b/arch/x86/kernel/paravirt.c
+@@ -430,6 +430,8 @@ struct pv_mmu_ops pv_mmu_ops = {
  		.enter = paravirt_nop,
  		.leave = paravirt_nop,
  	},
@@ -32,7 +32,7 @@
  
  EXPORT_SYMBOL_GPL(pv_time_ops);
 diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c
-index be61a1d..8892aad 100644
+index 73aba71..379b236 100644
 --- a/arch/x86/mm/pgtable_32.c
 +++ b/arch/x86/mm/pgtable_32.c
 @@ -76,7 +76,7 @@ void show_mem(void)
@@ -82,18 +82,18 @@
   * reserve_top_address - reserves a hole in the top of kernel address space
   * @reserve - size of hole to reserve
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 69a73f0..7240969 100644
+index b76103d..5541874 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -183,10 +183,12 @@ static void xen_cpuid(unsigned int *eax, unsigned int *ebx,
+@@ -183,10 +183,12 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
  	 * Mask out inconvenient features, to try and disable as many
  	 * unsupported kernel subsystems as possible.
  	 */
--	if (*eax == 1)
+-	if (*ax == 1)
 -		maskedx = ~((1 << X86_FEATURE_APIC) |  /* disable APIC */
 -			    (1 << X86_FEATURE_ACPI) |  /* disable ACPI */
 -			    (1 << X86_FEATURE_ACC));   /* thermal monitoring */
-+	if (*eax == 1) {
++	if (*ax == 1) {
 +		maskedx = ~(1 << X86_FEATURE_APIC);  /* disable local APIC */
 +		if (!is_initial_xendomain())
 +			maskedx &= ~((1 << X86_FEATURE_ACPI) |  /* disable ACPI */
@@ -101,8 +101,8 @@
 +	}
  
  	asm(XEN_EMULATE_PREFIX "cpuid"
- 		: "=a" (*eax),
-@@ -952,6 +954,32 @@ static unsigned xen_patch(u8 type, u16 clobbers, void *insnbuf,
+ 		: "=a" (*ax),
+@@ -970,6 +972,32 @@ static unsigned xen_patch(u8 type, u16 clobbers, void *insnbuf,
  	return ret;
  }
  
@@ -135,7 +135,7 @@
  static const struct pv_info xen_info __initdata = {
  	.paravirt_enabled = 1,
  	.shared_kernel_pmd = 0,
-@@ -1104,6 +1132,8 @@ static const struct pv_mmu_ops xen_mmu_ops __initdata = {
+@@ -1122,6 +1150,8 @@ static const struct pv_mmu_ops xen_mmu_ops __initdata = {
  		.enter = paravirt_enter_lazy_mmu,
  		.leave = xen_leave_lazy,
  	},
@@ -145,10 +145,10 @@
  
  #ifdef CONFIG_SMP
 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index 0ac6c5d..2e28104 100644
+index 0144395..ccc4ae7 100644
 --- a/arch/x86/xen/mmu.c
 +++ b/arch/x86/xen/mmu.c
-@@ -119,35 +119,7 @@ void xen_set_pmd(pmd_t *ptr, pmd_t val)
+@@ -122,35 +122,7 @@ void xen_set_pmd(pmd_t *ptr, pmd_t val)
   */
  void set_pte_mfn(unsigned long vaddr, unsigned long mfn, pgprot_t flags)
  {
@@ -186,10 +186,10 @@
  
  void xen_set_pte_at(struct mm_struct *mm, unsigned long addr,
 diff --git a/include/asm-x86/fixmap_32.h b/include/asm-x86/fixmap_32.h
-index 249e753..9ed0e25 100644
+index a7404d5..c2e450a 100644
 --- a/include/asm-x86/fixmap_32.h
 +++ b/include/asm-x86/fixmap_32.h
-@@ -98,8 +98,17 @@ enum fixed_addresses {
+@@ -110,8 +110,17 @@ enum fixed_addresses {
  	__end_of_fixed_addresses
  };
  
@@ -210,10 +210,10 @@
  
  #define set_fixmap(idx, phys) \
 diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h
-index f59d370..3b9d5b7 100644
+index d6236eb..5e9a4b0 100644
 --- a/include/asm-x86/paravirt.h
 +++ b/include/asm-x86/paravirt.h
-@@ -240,6 +240,13 @@ struct pv_mmu_ops {
+@@ -269,6 +269,13 @@ struct pv_mmu_ops {
  #endif
  
  	struct pv_lazy_ops lazy_mode;
@@ -227,7 +227,7 @@
  };
  
  /* This contains all the paravirt structures: we get a convenient
-@@ -1000,6 +1007,12 @@ static inline void arch_flush_lazy_mmu_mode(void)
+@@ -1225,6 +1232,12 @@ static inline void arch_flush_lazy_mmu_mode(void)
  	}
  }
  
@@ -241,10 +241,10 @@
  #define paravirt_nop	((void *)_paravirt_nop)
  
 diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h
-index ed3e70d..6d3687d 100644
+index a842c72..8d70506 100644
 --- a/include/asm-x86/pgtable_32.h
 +++ b/include/asm-x86/pgtable_32.h
-@@ -483,6 +483,9 @@ do {									\
+@@ -210,6 +210,9 @@ do {									\
  void native_pagetable_setup_start(pgd_t *base);
  void native_pagetable_setup_done(pgd_t *base);
  
@@ -255,5 +255,5 @@
  static inline void paravirt_pagetable_setup_start(pgd_t *base)
  {
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0011-xen-dom0-Add-support-for-the-platform_ops-hypercall.patch:

Index: linux-2.6-xen-0011-xen-dom0-Add-support-for-the-platform_ops-hypercall.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0011-xen-dom0-Add-support-for-the-platform_ops-hypercall.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0011-xen-dom0-Add-support-for-the-platform_ops-hypercall.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0011-xen-dom0-Add-support-for-the-platform_ops-hypercall.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From ae90146bef18cca6ecab5bc31cc8bba3dde0451f Mon Sep 17 00:00:00 2001
+From e0f5578d5376d766d25582b1774c540ef580cd84 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Fri, 30 Nov 2007 15:06:30 +0000
 Subject: [PATCH] xen dom0: Add support for the platform_ops hypercall
@@ -293,5 +293,5 @@
  
  /* In assembly code we cannot use C numeric constant suffixes. */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0012-xen-acpi-Enable-early-access-to-ACPI-tables.patch:

Index: linux-2.6-xen-0012-xen-acpi-Enable-early-access-to-ACPI-tables.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0012-xen-acpi-Enable-early-access-to-ACPI-tables.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0012-xen-acpi-Enable-early-access-to-ACPI-tables.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0012-xen-acpi-Enable-early-access-to-ACPI-tables.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From ae2c3d78c8da89040a410d57279426734508a8ae Mon Sep 17 00:00:00 2001
+From 0d486e836ef3465275eda958c24655435d81825b Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Fri, 7 Dec 2007 11:39:27 +0000
 Subject: [PATCH] xen acpi: Enable early access to ACPI tables.
@@ -17,11 +17,11 @@
 Signed-off-by: Stephen Tweedie <sct at redhat.com>
 ---
  arch/x86/kernel/acpi/boot.c |   34 +++++++++++++++-------------------
- arch/x86/mm/ioremap_32.c    |   34 ++++++++++++++++++++++++++--------
- 2 files changed, 41 insertions(+), 27 deletions(-)
+ arch/x86/mm/ioremap.c       |   30 +++++++++++++++++++++++++-----
+ 2 files changed, 40 insertions(+), 24 deletions(-)
 
 diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
-index 0ca27c7..e59bda5 100644
+index 2cdc9de..45df66a 100644
 --- a/arch/x86/kernel/acpi/boot.c
 +++ b/arch/x86/kernel/acpi/boot.c
 @@ -40,6 +40,8 @@
@@ -40,7 +40,7 @@
 -#ifdef	CONFIG_X86_64
 -
 -/* rely on all ACPI tables being in the direct mapping */
--char *__acpi_map_table(unsigned long phys_addr, unsigned long size)
+-char *__init __acpi_map_table(unsigned long phys_addr, unsigned long size)
 -{
 -	if (!phys_addr || !size)
 -		return NULL;
@@ -56,7 +56,7 @@
  /*
   * Temporarily use the virtual area starting from FIX_IO_APIC_BASE_END,
   * to map the target physical address. The problem is that set_fixmap()
-@@ -136,8 +122,19 @@ char *__acpi_map_table(unsigned long phys, unsigned long size)
+@@ -136,8 +122,19 @@ char *__init __acpi_map_table(unsigned long phys, unsigned long size)
  	unsigned long base, offset, mapped_size;
  	int idx;
  
@@ -78,7 +78,7 @@
  
  	offset = phys & (PAGE_SIZE - 1);
  	mapped_size = PAGE_SIZE - offset;
-@@ -158,7 +155,6 @@ char *__acpi_map_table(unsigned long phys, unsigned long size)
+@@ -158,7 +155,6 @@ char *__init __acpi_map_table(unsigned long phys, unsigned long size)
  
  	return ((unsigned char *)base + offset);
  }
@@ -86,21 +86,21 @@
  
  #ifdef CONFIG_PCI_MMCONFIG
  /* The physical address of the MMCONFIG aperture.  Set from ACPI tables. */
-diff --git a/arch/x86/mm/ioremap_32.c b/arch/x86/mm/ioremap_32.c
-index 63a301a..b4e71f4 100644
---- a/arch/x86/mm/ioremap_32.c
-+++ b/arch/x86/mm/ioremap_32.c
-@@ -18,6 +18,9 @@
+diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
+index 3b3ce92..b484663 100644
+--- a/arch/x86/mm/ioremap.c
++++ b/arch/x86/mm/ioremap.c
+@@ -20,6 +20,9 @@
  #include <asm/tlbflush.h>
- #include <asm/pgtable.h>
+ #include <asm/pgalloc.h>
  
 +#include <asm/xen/hypervisor.h>
 +#include <xen/page.h>
 +
- /*
-  * Generic mapping function (not visible outside):
-  */
-@@ -31,6 +34,21 @@
+ enum ioremap_mode {
+ 	IOR_MODE_UNCACHED,
+ 	IOR_MODE_CACHED,
+@@ -107,6 +110,21 @@ static int ioremap_change_attr(unsigned long vaddr, unsigned long size,
   * have to convert them into an offset in a page-aligned mapping, but the
   * caller shouldn't need to know that small detail.
   */
@@ -119,57 +119,48 @@
 +		return (address <= virt_to_phys(high_memory - 1));
 +}
 +
- void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
+ static void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
+ 			       enum ioremap_mode mode)
  {
- 	void __iomem * addr;
-@@ -47,12 +65,12 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
+@@ -123,14 +141,15 @@ static void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
  	 * Don't remap the low PCI/ISA area, it's always mapped..
  	 */
  	if (phys_addr >= ISA_START_ADDRESS && last_addr < ISA_END_ADDRESS)
--		return (void __iomem *) phys_to_virt(phys_addr);
-+		return (void __iomem *) isa_bus_to_virt(phys_addr);
+-		return (__force void __iomem *)phys_to_virt(phys_addr);
++		return (__force void __iomem *)isa_bus_to_virt(phys_addr);
  
  	/*
  	 * Don't allow anybody to remap normal RAM that we're using..
  	 */
--	if (phys_addr <= virt_to_phys(high_memory - 1)) {
-+	if (is_local_lowmem(phys_addr)) {
- 		char *t_addr, *t_end;
- 		struct page *page;
- 
-@@ -123,8 +141,8 @@ void __iomem *ioremap_nocache (unsigned long phys_addr, unsigned long size)
- 	/* Guaranteed to be > phys_addr, as per __ioremap() */
- 	last_addr = phys_addr + size - 1;
- 
--	if (last_addr < virt_to_phys(high_memory) - 1) {
--		struct page *ppage = virt_to_page(__va(phys_addr));		
-+	if (is_local_lowmem(last_addr)) {
-+		struct page *ppage = virt_to_page(bus_to_virt(phys_addr));
- 		unsigned long npages;
+ 	for (pfn = phys_addr >> PAGE_SHIFT; pfn < max_pfn_mapped &&
+ 	     (pfn << PAGE_SHIFT) < last_addr; pfn++) {
+-		if (page_is_ram(pfn) && pfn_valid(pfn) &&
++		if (is_local_lowmem(pfn << PAGE_SHIFT) &&
++		    page_is_ram(pfn) && pfn_valid(pfn) &&
+ 		    !PageReserved(pfn_to_page(pfn)))
+ 			return NULL;
+ 	}
+@@ -167,7 +186,8 @@ static void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
+ 		return NULL;
+ 	}
  
- 		phys_addr &= PAGE_MASK;
-@@ -166,8 +184,8 @@ void iounmap(volatile void __iomem *addr)
+-	if (ioremap_change_attr(vaddr, size, mode) < 0) {
++	if (is_local_lowmem(last_addr) &&
++	    ioremap_change_attr(vaddr, size, mode) < 0) {
+ 		vunmap(area->addr);
+ 		return NULL;
+ 	}
+@@ -226,8 +246,8 @@ void iounmap(volatile void __iomem *addr)
  	 * vm_area and by simply returning an address into the kernel mapping
  	 * of ISA space.   So handle that here.
  	 */
 -	if (addr >= phys_to_virt(ISA_START_ADDRESS) &&
--			addr < phys_to_virt(ISA_END_ADDRESS))
+-	    addr < phys_to_virt(ISA_END_ADDRESS))
 +	if (addr >= isa_bus_to_virt(ISA_START_ADDRESS) &&
-+			addr < isa_bus_to_virt(ISA_END_ADDRESS))
++	    addr < isa_bus_to_virt(ISA_END_ADDRESS))
  		return;
  
- 	addr = (volatile void __iomem *)(PAGE_MASK & (unsigned long __force)addr);
-@@ -191,8 +209,8 @@ void iounmap(volatile void __iomem *addr)
- 	}
- 
- 	/* Reset the direct mapping. Can block */
--	if ((p->flags >> 20) && p->phys_addr < virt_to_phys(high_memory) - 1) {
--		change_page_attr(virt_to_page(__va(p->phys_addr)),
-+	if ((p->flags >> 20) && is_local_lowmem(p->phys_addr)) {
-+		change_page_attr(virt_to_page(bus_to_virt(p->phys_addr)),
- 				 get_vm_area_size(p) >> PAGE_SHIFT,
- 				 PAGE_KERNEL);
- 		global_flush_tlb();
+ 	addr = (volatile void __iomem *)
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0013-xen-dom0-Add-paravirt_ops-ioremap_page_range-for.patch:

Index: linux-2.6-xen-0013-xen-dom0-Add-paravirt_ops-ioremap_page_range-for.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0013-xen-dom0-Add-paravirt_ops-ioremap_page_range-for.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0013-xen-dom0-Add-paravirt_ops-ioremap_page_range-for.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0013-xen-dom0-Add-paravirt_ops-ioremap_page_range-for.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 3a3f635bcb87484ce929d02472e7c7557a914b2e Mon Sep 17 00:00:00 2001
+From 68f267f07533bc8a5146efef6e7ad2640f4e2765 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Fri, 7 Dec 2007 15:27:21 +0000
 Subject: [PATCH] xen dom0: Add paravirt_ops ioremap_page_range() for Xen.
@@ -10,24 +10,24 @@
 
 Signed-off-by: Stephen Tweedie <sct at redhat.com>
 ---
- arch/x86/kernel/paravirt_32.c |    1 +
- arch/x86/mm/pgtable_32.c      |    7 ++
- arch/x86/xen/Makefile         |    2 +-
- arch/x86/xen/enlighten.c      |    1 +
- arch/x86/xen/ioremap.c        |  147 +++++++++++++++++++++++++++++++++++++++++
- arch/x86/xen/mmu.h            |    3 +
- include/asm-x86/fixmap_32.h   |    2 +
- include/asm-x86/paravirt.h    |   10 +++
- include/linux/io.h            |   12 ++-
- lib/ioremap.c                 |    4 +-
+ arch/x86/kernel/paravirt.c  |    1 +
+ arch/x86/mm/pgtable_32.c    |    7 ++
+ arch/x86/xen/Makefile       |    2 +-
+ arch/x86/xen/enlighten.c    |    1 +
+ arch/x86/xen/ioremap.c      |  147 +++++++++++++++++++++++++++++++++++++++++++
+ arch/x86/xen/mmu.h          |    3 +
+ include/asm-x86/fixmap_32.h |    2 +
+ include/asm-x86/paravirt.h  |   10 +++
+ include/linux/io.h          |   12 +++-
+ lib/ioremap.c               |    4 +-
  10 files changed, 182 insertions(+), 7 deletions(-)
  create mode 100644 arch/x86/xen/ioremap.c
 
-diff --git a/arch/x86/kernel/paravirt_32.c b/arch/x86/kernel/paravirt_32.c
-index 9fc62c2..e578f14 100644
---- a/arch/x86/kernel/paravirt_32.c
-+++ b/arch/x86/kernel/paravirt_32.c
-@@ -464,6 +464,7 @@ struct pv_mmu_ops pv_mmu_ops = {
+diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
+index c8ee0c9..ccb7259 100644
+--- a/arch/x86/kernel/paravirt.c
++++ b/arch/x86/kernel/paravirt.c
+@@ -432,6 +432,7 @@ struct pv_mmu_ops pv_mmu_ops = {
  	},
  
  	.set_fixmap = native_set_fixmap,
@@ -36,7 +36,7 @@
  
  EXPORT_SYMBOL_GPL(pv_time_ops);
 diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c
-index 8892aad..d1ca199 100644
+index 379b236..720f3b7 100644
 --- a/arch/x86/mm/pgtable_32.c
 +++ b/arch/x86/mm/pgtable_32.c
 @@ -15,6 +15,7 @@
@@ -71,10 +71,10 @@
  
  obj-$(CONFIG_SMP)	+= smp.o
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 7240969..b84f57b 100644
+index 5541874..cbc85dd 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -1134,6 +1134,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initdata = {
+@@ -1152,6 +1152,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initdata = {
  	},
  
  	.set_fixmap = xen_set_fixmap,
@@ -248,10 +248,10 @@
 +
  #endif	/* _XEN_MMU_H */
 diff --git a/include/asm-x86/fixmap_32.h b/include/asm-x86/fixmap_32.h
-index 9ed0e25..4517c72 100644
+index c2e450a..f5b6e5b 100644
 --- a/include/asm-x86/fixmap_32.h
 +++ b/include/asm-x86/fixmap_32.h
-@@ -101,6 +101,8 @@ enum fixed_addresses {
+@@ -113,6 +113,8 @@ enum fixed_addresses {
  void __native_set_fixmap(enum fixed_addresses idx, pte_t pte);
  void native_set_fixmap(enum fixed_addresses idx,
  		       unsigned long phys, pgprot_t flags);
@@ -261,10 +261,10 @@
  #ifndef CONFIG_PARAVIRT
  static inline void __set_fixmap(enum fixed_addresses idx,
 diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h
-index 3b9d5b7..fd17cf4 100644
+index 5e9a4b0..0e31300 100644
 --- a/include/asm-x86/paravirt.h
 +++ b/include/asm-x86/paravirt.h
-@@ -247,6 +247,9 @@ struct pv_mmu_ops {
+@@ -276,6 +276,9 @@ struct pv_mmu_ops {
  	   an mfn.  We can tell which is which from the index. */
  	void (*set_fixmap)(unsigned /* enum fixed_addresses */ idx,
  			   unsigned long phys, pgprot_t flags);
@@ -274,7 +274,7 @@
  };
  
  /* This contains all the paravirt structures: we get a convenient
-@@ -1013,6 +1016,13 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
+@@ -1238,6 +1241,13 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
  	pv_mmu_ops.set_fixmap(idx, phys, flags);
  }
  
@@ -333,5 +333,5 @@
  	pgd_t *pgd;
  	unsigned long start;
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0014-MTRR-use-cpu_callout_map-instead-of-cpu_online_map.patch:

Index: linux-2.6-xen-0014-MTRR-use-cpu_callout_map-instead-of-cpu_online_map.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0014-MTRR-use-cpu_callout_map-instead-of-cpu_online_map.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0014-MTRR-use-cpu_callout_map-instead-of-cpu_online_map.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0014-MTRR-use-cpu_callout_map-instead-of-cpu_online_map.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 1862be1d5fa1aab96e50d13cb19faa258b7caf4d Mon Sep 17 00:00:00 2001
+From abee6c4a8c753b69e90f1279d2df0d0c9b5ce957 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Wed, 30 Jan 2008 13:25:36 +0000
 Subject: [PATCH] MTRR: use cpu_callout_map instead of cpu_online_map
@@ -17,10 +17,10 @@
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
-index 3b20613..4662ba3 100644
+index be83336..acd1469 100644
 --- a/arch/x86/kernel/cpu/mtrr/main.c
 +++ b/arch/x86/kernel/cpu/mtrr/main.c
-@@ -232,7 +232,7 @@ static void set_mtrr(unsigned int reg, unsigned long base,
+@@ -222,7 +222,7 @@ static void set_mtrr(unsigned int reg, unsigned long base,
  	atomic_set(&data.gate,0);
  
  	/*  Start the ball rolling on other CPUs  */
@@ -30,5 +30,5 @@
  
  	local_irq_save(flags);
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0015-xen-mtrr-Add-mtrr_ops-support-for-Xen-mtrr.patch:

Index: linux-2.6-xen-0015-xen-mtrr-Add-mtrr_ops-support-for-Xen-mtrr.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0015-xen-mtrr-Add-mtrr_ops-support-for-Xen-mtrr.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0015-xen-mtrr-Add-mtrr_ops-support-for-Xen-mtrr.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0015-xen-mtrr-Add-mtrr_ops-support-for-Xen-mtrr.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 66f3430a28d0ebc543bf9b0c97319e9461e3a8bf Mon Sep 17 00:00:00 2001
+From 1b30d88bac45ddc313c977db748209a6ca396ee7 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 10 Dec 2007 11:32:15 +0000
 Subject: [PATCH] xen mtrr: Add mtrr_ops support for Xen mtrr
@@ -14,9 +14,10 @@
 Signed-off-by: Stephen Tweedie <sct at redhat.com>
 ---
  arch/x86/kernel/cpu/mtrr/Makefile |    1 +
- arch/x86/kernel/cpu/mtrr/main.c   |   30 ++++++++++++++++---
+ arch/x86/kernel/cpu/mtrr/main.c   |   29 +++++++++++++++---
+ arch/x86/kernel/cpu/mtrr/mtrr.h   |    1 +
  arch/x86/kernel/cpu/mtrr/xen.c    |   57 +++++++++++++++++++++++++++++++++++++
- 3 files changed, 83 insertions(+), 5 deletions(-)
+ 4 files changed, 83 insertions(+), 5 deletions(-)
  create mode 100644 arch/x86/kernel/cpu/mtrr/xen.c
 
 diff --git a/arch/x86/kernel/cpu/mtrr/Makefile b/arch/x86/kernel/cpu/mtrr/Makefile
@@ -29,18 +30,10 @@
 +obj-$(CONFIG_XEN) += xen.o
  
 diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
-index 4662ba3..c5e0578 100644
+index acd1469..608c550 100644
 --- a/arch/x86/kernel/cpu/mtrr/main.c
 +++ b/arch/x86/kernel/cpu/mtrr/main.c
-@@ -572,6 +572,7 @@ EXPORT_SYMBOL(mtrr_del);
- extern void amd_init_mtrr(void);
- extern void cyrix_init_mtrr(void);
- extern void centaur_init_mtrr(void);
-+extern void xen_init_mtrr(void);
- 
- static void __init init_ifs(void)
- {
-@@ -580,6 +581,9 @@ static void __init init_ifs(void)
+@@ -562,6 +562,9 @@ static void __init init_ifs(void)
  	cyrix_init_mtrr();
  	centaur_init_mtrr();
  #endif
@@ -50,8 +43,8 @@
  }
  
  /* The suspend/resume methods are only for CPU without MTRR. CPU using generic
-@@ -635,16 +639,14 @@ static struct sysdev_driver mtrr_sysdev_driver = {
- 
+@@ -720,16 +723,14 @@ int __init mtrr_trim_uncached_memory(unsigned long end_pfn)
+ }
  
  /**
 - * mtrr_bp_init - initialize mtrrs on the boot CPU
@@ -69,7 +62,7 @@
  	if (cpu_has_mtrr) {
  		mtrr_if = &generic_mtrr_ops;
  		size_or_mask = 0xff000000;	/* 36 bits */
-@@ -701,9 +703,27 @@ void __init mtrr_bp_init(void)
+@@ -786,9 +787,27 @@ void __init mtrr_bp_init(void)
  			break;
  		}
  	}
@@ -98,6 +91,15 @@
  		init_table();
  		if (use_intel())
  			get_mtrr_state();
+diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.h b/arch/x86/kernel/cpu/mtrr/mtrr.h
+index 2cc77eb..ac4bf68 100644
+--- a/arch/x86/kernel/cpu/mtrr/mtrr.h
++++ b/arch/x86/kernel/cpu/mtrr/mtrr.h
+@@ -101,3 +101,4 @@ void mtrr_wrmsr(unsigned, unsigned, unsigned);
+ int amd_init_mtrr(void);
+ int cyrix_init_mtrr(void);
+ int centaur_init_mtrr(void);
++void xen_init_mtrr(void);
 diff --git a/arch/x86/kernel/cpu/mtrr/xen.c b/arch/x86/kernel/cpu/mtrr/xen.c
 new file mode 100644
 index 0000000..7011195
@@ -162,5 +164,5 @@
 +	num_var_ranges = xen_num_var_ranges();
 +}
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0016-xen-mtrr-Don-t-enable-xen-mtrr-on-bare-metal.patch:

Index: linux-2.6-xen-0016-xen-mtrr-Don-t-enable-xen-mtrr-on-bare-metal.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0016-xen-mtrr-Don-t-enable-xen-mtrr-on-bare-metal.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0016-xen-mtrr-Don-t-enable-xen-mtrr-on-bare-metal.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0016-xen-mtrr-Don-t-enable-xen-mtrr-on-bare-metal.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From c112a887edda8e8190302d05050443cfb46b15cc Mon Sep 17 00:00:00 2001
+From 182b2ab706795a6db8c459a252b32f0e8bfd3df3 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Wed, 12 Dec 2007 14:31:16 +0000
 Subject: [PATCH] xen mtrr: Don't enable xen mtrr on bare metal
@@ -27,5 +27,5 @@
  
  	if ((!cpu_has(c, X86_FEATURE_MTRR)) &&
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0017-xen-mtrr-set-cpu-in-cpu_callout_map.patch:

Index: linux-2.6-xen-0017-xen-mtrr-set-cpu-in-cpu_callout_map.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0017-xen-mtrr-set-cpu-in-cpu_callout_map.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0017-xen-mtrr-set-cpu-in-cpu_callout_map.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0017-xen-mtrr-set-cpu-in-cpu_callout_map.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 01fa979ab63094f04b82d333bc977cc7a2ab7022 Mon Sep 17 00:00:00 2001
+From 6ffed7bbfea8b0f6d65bdc67297ef20334fc918e Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Wed, 30 Jan 2008 13:18:23 +0000
 Subject: [PATCH] xen mtrr: set cpu in cpu_callout_map
@@ -12,7 +12,7 @@
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
-index c1b131b..e731309 100644
+index aafc544..c3aaaf8 100644
 --- a/arch/x86/xen/smp.c
 +++ b/arch/x86/xen/smp.c
 @@ -198,6 +198,7 @@ void __init xen_smp_prepare_cpus(unsigned int max_cpus)
@@ -24,5 +24,5 @@
  	}
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0018-xen-mtrr-Clean-up-the-num_var_ranges-CPU_UNKOWN-hac.patch:

Index: linux-2.6-xen-0018-xen-mtrr-Clean-up-the-num_var_ranges-CPU_UNKOWN-hac.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0018-xen-mtrr-Clean-up-the-num_var_ranges-CPU_UNKOWN-hac.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0018-xen-mtrr-Clean-up-the-num_var_ranges-CPU_UNKOWN-hac.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0018-xen-mtrr-Clean-up-the-num_var_ranges-CPU_UNKOWN-hac.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 2250cf3b5f805a44e95469dd8802b16a583208ee Mon Sep 17 00:00:00 2001
+From 3b5a01c9d88357958cdf66a7ceb13950b4b8861b Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 28 Jan 2008 18:55:06 +0000
 Subject: [PATCH] xen mtrr: Clean up the num_var_ranges/CPU_UNKOWN hack
@@ -12,10 +12,10 @@
  1 files changed, 9 insertions(+), 4 deletions(-)
 
 diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
-index c5e0578..3ac6ed8 100644
+index 608c550..7ee0d5c 100644
 --- a/arch/x86/kernel/cpu/mtrr/main.c
 +++ b/arch/x86/kernel/cpu/mtrr/main.c
-@@ -107,6 +107,14 @@ static void __init set_num_var_ranges(void)
+@@ -102,6 +102,14 @@ static void __init set_num_var_ranges(void)
  {
  	unsigned long config = 0, dummy;
  
@@ -30,7 +30,7 @@
  	if (use_intel()) {
  		rdmsr(MTRRcap_MSR, config, dummy);
  	} else if (is_cpu(AMD))
-@@ -720,10 +728,7 @@ void __init mtrr_bp_init(void)
+@@ -804,10 +812,7 @@ void __init mtrr_bp_init(void)
  		mtrr_bp_detect();
  
  	if (mtrr_if) {
@@ -43,5 +43,5 @@
  		if (use_intel())
  			get_mtrr_state();
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0019-xen-mtrr-Use-specific-cpu_has_foo-macros-instead-of.patch:

Index: linux-2.6-xen-0019-xen-mtrr-Use-specific-cpu_has_foo-macros-instead-of.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0019-xen-mtrr-Use-specific-cpu_has_foo-macros-instead-of.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0019-xen-mtrr-Use-specific-cpu_has_foo-macros-instead-of.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0019-xen-mtrr-Use-specific-cpu_has_foo-macros-instead-of.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 62a87502a6784dd68425f5e3a0873b37f7ac0cb0 Mon Sep 17 00:00:00 2001
+From ad497bfd4eaf664ca1b15bf02e61ed9db9683c57 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 28 Jan 2008 18:40:06 +0000
 Subject: [PATCH] xen mtrr: Use specific cpu_has_foo macros instead of generic cpu_has()
@@ -33,5 +33,5 @@
  
  	mtrr_if = &xen_mtrr_ops;
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0020-xen-mtrr-Kill-some-unneccessary-includes.patch:

Index: linux-2.6-xen-0020-xen-mtrr-Kill-some-unneccessary-includes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0020-xen-mtrr-Kill-some-unneccessary-includes.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0020-xen-mtrr-Kill-some-unneccessary-includes.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0020-xen-mtrr-Kill-some-unneccessary-includes.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From e530c1ce0084725fda50252edcb2358f95768403 Mon Sep 17 00:00:00 2001
+From afe3c86ff637ea70618980bd1200e445a28d8902 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 28 Jan 2008 19:05:11 +0000
 Subject: [PATCH] xen mtrr: Kill some unneccessary includes
@@ -28,5 +28,5 @@
  
  #include <xen/interface/platform.h>
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0021-xen-mtrr-No-need-to-explicitly-set-use_intel_if-0.patch:

Index: linux-2.6-xen-0021-xen-mtrr-No-need-to-explicitly-set-use_intel_if-0.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0021-xen-mtrr-No-need-to-explicitly-set-use_intel_if-0.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0021-xen-mtrr-No-need-to-explicitly-set-use_intel_if-0.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0021-xen-mtrr-No-need-to-explicitly-set-use_intel_if-0.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 45ade8f3ee1cdf58b45335be7c168ee810b441b8 Mon Sep 17 00:00:00 2001
+From 28cb3299088fb952d9a05de2c988577731666e32 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 28 Jan 2008 18:39:29 +0000
 Subject: [PATCH] xen mtrr: No need to explicitly set use_intel_if = 0
@@ -21,5 +21,5 @@
  
  static int __init xen_num_var_ranges(void)
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0022-xen-mtrr-Use-generic_validate_add_page.patch:

Index: linux-2.6-xen-0022-xen-mtrr-Use-generic_validate_add_page.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0022-xen-mtrr-Use-generic_validate_add_page.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0022-xen-mtrr-Use-generic_validate_add_page.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0022-xen-mtrr-Use-generic_validate_add_page.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From a8ebf296d79664c934a16c2e6b8eadcd3899f74c Mon Sep 17 00:00:00 2001
+From 59623ab6d9a8400d7edd3acdbb042f017f30cc7f Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Tue, 29 Jan 2008 17:43:25 +0000
 Subject: [PATCH] xen mtrr: Use generic_validate_add_page()
@@ -26,5 +26,5 @@
  };
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0023-xen-mtrr-Implement-xen_get_free_region.patch:

Index: linux-2.6-xen-0023-xen-mtrr-Implement-xen_get_free_region.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0023-xen-mtrr-Implement-xen_get_free_region.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0023-xen-mtrr-Implement-xen_get_free_region.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0023-xen-mtrr-Implement-xen_get_free_region.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 9b830c53d79480544cd83cff3120cac8370e7d9f Mon Sep 17 00:00:00 2001
+From cf2de4d5e29d67cc2e150b82215e731add27a5a3 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Wed, 30 Jan 2008 09:40:33 +0000
 Subject: [PATCH] xen mtrr: Implement xen_get_free_region()
@@ -56,5 +56,5 @@
  	.have_wrcomb       = positive_have_wrcomb,
  };
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0024-xen-mtrr-Add-xen_-get-set-_mtrr-implementations.patch:

Index: linux-2.6-xen-0024-xen-mtrr-Add-xen_-get-set-_mtrr-implementations.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0024-xen-mtrr-Add-xen_-get-set-_mtrr-implementations.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0024-xen-mtrr-Add-xen_-get-set-_mtrr-implementations.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0024-xen-mtrr-Add-xen_-get-set-_mtrr-implementations.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From f1365546a79b0225b4dc855bb767281fff4e891e Mon Sep 17 00:00:00 2001
+From 14d8dd704dfff6c79ee29455ade17a4792a744ea Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Tue, 29 Jan 2008 18:29:46 +0000
 Subject: [PATCH] xen mtrr: Add xen_{get,set}_mtrr() implementations
@@ -84,5 +84,5 @@
  	.validate_add_page = generic_validate_add_page,
  	.have_wrcomb       = positive_have_wrcomb,
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0025-irq2.diff-from-Juan-Quintela.patch:

Index: linux-2.6-xen-0025-irq2.diff-from-Juan-Quintela.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0025-irq2.diff-from-Juan-Quintela.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0025-irq2.diff-from-Juan-Quintela.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0025-irq2.diff-from-Juan-Quintela.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 145c492db1ce3ac680efffd8ae8c2071f03a809c Mon Sep 17 00:00:00 2001
+From 04082600f8eadb2e6d6bf8ad9060dabd5e4e0387 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Thu, 13 Dec 2007 17:55:34 +0000
 Subject: [PATCH] irq2.diff from Juan Quintela.
@@ -7,21 +7,21 @@
 
 Signed-off-by: Stephen Tweedie <sct at redhat.com>
 ---
- arch/x86/kernel/acpi/boot.c                       |   77 ++++++++---
- arch/x86/kernel/apic_32.c                         |   11 ++
+ arch/x86/kernel/acpi/boot.c                       |   71 +++++++---
+ arch/x86/kernel/apic_32.c                         |   10 ++
  arch/x86/kernel/io_apic_32.c                      |  100 +++++++++++---
  arch/x86/kernel/mpparse_32.c                      |   15 ++-
- arch/x86/kernel/setup_32.c                        |   17 ++-
+ arch/x86/kernel/setup_32.c                        |   16 ++-
  arch/x86/kernel/traps_32.c                        |   41 +++++-
  arch/x86/xen/enlighten.c                          |    2 +-
  arch/x86/xen/events.c                             |  157 ++++++++++++++++++++-
  drivers/acpi/tables.c                             |   14 ++-
  include/asm-x86/mach-default/irq_vectors_limits.h |   13 ++
  init/main.c                                       |   30 ++++-
- 11 files changed, 426 insertions(+), 51 deletions(-)
+ 11 files changed, 419 insertions(+), 50 deletions(-)
 
 diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
-index e59bda5..6fdda10 100644
+index 45df66a..a1b1f40 100644
 --- a/arch/x86/kernel/acpi/boot.c
 +++ b/arch/x86/kernel/acpi/boot.c
 @@ -41,6 +41,7 @@
@@ -54,21 +54,7 @@
  	return 0;
  }
  
-@@ -588,7 +590,13 @@ acpi_scan_rsdp(unsigned long start, unsigned long length)
- 	 * RSDP signature.
- 	 */
- 	for (offset = 0; offset < length; offset += 16) {
-+#ifdef CONFIG_XEN
-+		unsigned long vstart = (unsigned long)isa_bus_to_virt(start);
-+
-+		if (strncmp((char *)(vstart + offset), "RSD PTR ", sig_len))
-+#else
- 		if (strncmp((char *)(phys_to_virt(start) + offset), "RSD PTR ", sig_len))
-+#endif
- 			continue;
- 		return (start + offset);
- 	}
-@@ -711,7 +719,7 @@ late_initcall(hpet_insert_resource);
+@@ -696,7 +698,7 @@ late_initcall(hpet_insert_resource);
  static int __init acpi_parse_fadt(struct acpi_table_header *table)
  {
  
@@ -77,7 +63,7 @@
  	/* detect the location of the ACPI PM Timer */
  	if (acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) {
  		/* FADT rev. 2 */
-@@ -819,6 +827,7 @@ static int __init acpi_parse_madt_ioapic_entries(void)
+@@ -783,6 +785,7 @@ static int __init acpi_parse_madt_ioapic_entries(void)
  {
  	int count;
  
@@ -85,7 +71,7 @@
  	/*
  	 * ACPI interpreter is required to complete interrupt setup,
  	 * so if it is off, don't enumerate the io-apics with ACPI.
-@@ -828,59 +837,67 @@ static int __init acpi_parse_madt_ioapic_entries(void)
+@@ -792,59 +795,67 @@ static int __init acpi_parse_madt_ioapic_entries(void)
  	if (acpi_disabled || acpi_noirq) {
  		return -ENODEV;
  	}
@@ -161,7 +147,7 @@
  	return 0;
  }
  #else
-@@ -895,38 +912,50 @@ static void __init acpi_process_madt(void)
+@@ -859,38 +870,50 @@ static void __init acpi_process_madt(void)
  #ifdef CONFIG_X86_LOCAL_APIC
  	int error;
  
@@ -213,7 +199,7 @@
  		}
  	}
  #endif
-@@ -1183,6 +1212,7 @@ int __init acpi_boot_table_init(void)
+@@ -1147,6 +1170,7 @@ int __init acpi_boot_table_init(void)
  {
  	int error;
  
@@ -221,7 +207,7 @@
  #ifdef __i386__
  	dmi_check_system(acpi_dmi_table);
  #endif
-@@ -1193,23 +1223,32 @@ int __init acpi_boot_table_init(void)
+@@ -1157,23 +1181,32 @@ int __init acpi_boot_table_init(void)
  	 */
  	if (acpi_disabled && !acpi_ht)
  		return 1;
@@ -254,7 +240,7 @@
  		if (acpi_force) {
  			printk(KERN_WARNING PREFIX "acpi=force override\n");
  		} else {
-@@ -1218,6 +1257,7 @@ int __init acpi_boot_table_init(void)
+@@ -1182,6 +1215,7 @@ int __init acpi_boot_table_init(void)
  			return error;
  		}
  	}
@@ -262,7 +248,7 @@
  
  	return 0;
  }
-@@ -1228,22 +1268,25 @@ int __init acpi_boot_init(void)
+@@ -1192,22 +1226,25 @@ int __init acpi_boot_init(void)
  	 * If acpi_disabled, bail out
  	 * One exception: acpi=ht continues far enough to enumerate LAPICs
  	 */
@@ -292,12 +278,12 @@
  	return 0;
  }
 diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c
-index edb5108..06b8860 100644
+index 35a568e..2ba94fc 100644
 --- a/arch/x86/kernel/apic_32.c
 +++ b/arch/x86/kernel/apic_32.c
-@@ -45,6 +45,8 @@
- 
- #include "io_ports.h"
+@@ -43,6 +43,8 @@
+ #include <mach_apicdef.h>
+ #include <mach_ipi.h>
  
 +#include <asm/xen/hypervisor.h>
 +
@@ -320,15 +306,15 @@
  }
  
  void apic_wait_icr_idle(void)
-@@ -1166,6 +1172,7 @@ fake_ioapic_page:
+@@ -1187,6 +1193,7 @@ fake_ioapic_page:
   */
- int __init APIC_init_uniprocessor (void)
+ int __init APIC_init_uniprocessor(void)
  {
 +#ifndef CONFIG_XEN
  	if (enable_local_apic < 0)
- 		clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability);
+ 		clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
  
-@@ -1198,13 +1205,16 @@ int __init APIC_init_uniprocessor (void)
+@@ -1219,13 +1226,16 @@ int __init APIC_init_uniprocessor(void)
  	phys_cpu_present_map = physid_mask_of_physid(boot_cpu_physical_apicid);
  
  	setup_local_APIC();
@@ -345,18 +331,13 @@
  
  	return 0;
  }
-@@ -1565,3 +1575,4 @@ device_initcall(init_lapic_sysfs);
- static void apic_pm_activate(void) { }
- 
- #endif	/* CONFIG_PM */
-+
 diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c
-index a6b1490..fc24cdf 100644
+index 4ca5486..4e8a200 100644
 --- a/arch/x86/kernel/io_apic_32.c
 +++ b/arch/x86/kernel/io_apic_32.c
-@@ -50,6 +50,43 @@
- 
- #include "io_ports.h"
+@@ -49,6 +49,43 @@
+ #include <mach_apic.h>
+ #include <mach_apicdef.h>
  
 +#include <xen/interface/xen.h>
 +#include <xen/interface/physdev.h>
@@ -398,7 +379,7 @@
  int (*ioapic_renumber_irq)(int ioapic, int irq);
  atomic_t irq_mis_count;
  
-@@ -92,6 +129,7 @@ static struct irq_pin_list {
+@@ -91,6 +128,7 @@ static struct irq_pin_list {
  	int apic, pin, next;
  } irq_2_pin[PIN_MAP_SIZE];
  
@@ -406,7 +387,7 @@
  struct io_apic {
  	unsigned int index;
  	unsigned int unused[3];
-@@ -131,6 +169,7 @@ static inline void io_apic_modify(unsigned int apic, unsigned int reg, unsigned
+@@ -130,6 +168,7 @@ static inline void io_apic_modify(unsigned int apic, unsigned int reg, unsigned
  		writel(reg, &io_apic->index);
  	writel(value, &io_apic->data);
  }
@@ -414,7 +395,7 @@
  
  union entry_union {
  	struct { u32 w1, w2; };
-@@ -306,6 +345,9 @@ static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin)
+@@ -305,6 +344,9 @@ static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin)
  	ioapic_mask_entry(apic, pin);
  }
  
@@ -424,7 +405,7 @@
  static void clear_IO_APIC (void)
  {
  	int apic, pin;
-@@ -314,6 +356,7 @@ static void clear_IO_APIC (void)
+@@ -313,6 +355,7 @@ static void clear_IO_APIC (void)
  		for (pin = 0; pin < nr_ioapic_registers[apic]; pin++)
  			clear_IO_APIC_pin(apic, pin);
  }
@@ -432,15 +413,15 @@
  
  #ifdef CONFIG_SMP
  static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t cpumask)
-@@ -729,6 +772,7 @@ late_initcall(balanced_irq_init);
+@@ -728,6 +771,7 @@ late_initcall(balanced_irq_init);
  #ifndef CONFIG_SMP
- void fastcall send_IPI_self(int vector)
+ void send_IPI_self(int vector)
  {
 +#ifndef CONFIG_XEN
  	unsigned int cfg;
  
  	/*
-@@ -740,6 +784,7 @@ void fastcall send_IPI_self(int vector)
+@@ -739,6 +783,7 @@ void send_IPI_self(int vector)
  	 * Send the IPI. The write to APIC_ICR fires this off.
  	 */
  	apic_write_around(APIC_ICR, cfg);
@@ -448,7 +429,7 @@
  }
  #endif /* !CONFIG_SMP */
  
-@@ -1197,29 +1242,19 @@ static u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_DEVICE_VECTOR , 0 }
+@@ -1196,29 +1241,19 @@ static u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_DEVICE_VECTOR , 0 }
  
  static int __assign_irq_vector(int irq)
  {
@@ -483,7 +464,7 @@
  	irq_vector[irq] = vector;
  
  	return vector;
-@@ -1236,12 +1271,17 @@ static int assign_irq_vector(int irq)
+@@ -1235,12 +1270,17 @@ static int assign_irq_vector(int irq)
  
  	return vector;
  }
@@ -501,7 +482,7 @@
  static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
  {
  	if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
-@@ -1256,6 +1296,7 @@ static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
+@@ -1255,6 +1295,7 @@ static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
  	}
  	set_intr_gate(vector, interrupt[irq]);
  }
@@ -509,7 +490,7 @@
  
  static void __init setup_IO_APIC_irqs(void)
  {
-@@ -1316,7 +1357,7 @@ static void __init setup_IO_APIC_irqs(void)
+@@ -1315,7 +1356,7 @@ static void __init setup_IO_APIC_irqs(void)
  		else
  			add_pin_to_irq(irq, apic, pin);
  
@@ -518,7 +499,7 @@
  			continue;
  
  		if (IO_APIC_IRQ(irq)) {
-@@ -1378,6 +1419,9 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in
+@@ -1377,6 +1418,9 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in
  	enable_8259A_irq(0);
  }
  
@@ -528,7 +509,7 @@
  void __init print_IO_APIC(void)
  {
  	int apic, i;
-@@ -1492,6 +1536,7 @@ void __init print_IO_APIC(void)
+@@ -1491,6 +1535,7 @@ void __init print_IO_APIC(void)
  
  	return;
  }
@@ -536,7 +517,7 @@
  
  #if 0
  
-@@ -1717,6 +1762,7 @@ void disable_IO_APIC(void)
+@@ -1716,6 +1761,7 @@ void disable_IO_APIC(void)
  	 */
  	clear_IO_APIC();
  
@@ -544,7 +525,7 @@
  	/*
  	 * If the i8259 is routed through an IOAPIC
  	 * Put that IOAPIC in virtual wire mode
-@@ -1743,6 +1789,7 @@ void disable_IO_APIC(void)
+@@ -1742,6 +1788,7 @@ void disable_IO_APIC(void)
  		ioapic_write_entry(ioapic_i8259.apic, ioapic_i8259.pin, entry);
  	}
  	disconnect_bsp_APIC(ioapic_i8259.pin != -1);
@@ -552,7 +533,7 @@
  }
  
  /*
-@@ -1752,7 +1799,7 @@ void disable_IO_APIC(void)
+@@ -1751,7 +1798,7 @@ void disable_IO_APIC(void)
   * by Matt Domsch <Matt_Domsch at dell.com>  Tue Dec 21 12:25:05 CST 1999
   */
  
@@ -561,7 +542,7 @@
  static void __init setup_ioapic_ids_from_mpc(void)
  {
  	union IO_APIC_reg_00 reg_00;
-@@ -2015,7 +2062,6 @@ static struct irq_chip ioapic_chip __read_mostly = {
+@@ -2014,7 +2061,6 @@ static struct irq_chip ioapic_chip __read_mostly = {
  	.retrigger	= ioapic_retrigger_irq,
  };
  
@@ -569,7 +550,7 @@
  static inline void init_IO_APIC_traps(void)
  {
  	int irq;
-@@ -2041,9 +2087,11 @@ static inline void init_IO_APIC_traps(void)
+@@ -2040,9 +2086,11 @@ static inline void init_IO_APIC_traps(void)
  			 */
  			if (irq < 16)
  				make_8259A_irq(irq);
@@ -581,7 +562,7 @@
  		}
  	}
  }
-@@ -2159,6 +2207,7 @@ static inline void unlock_ExtINT_logic(void)
+@@ -2158,6 +2206,7 @@ static inline void unlock_ExtINT_logic(void)
  
  int timer_uses_ioapic_pin_0;
  
@@ -589,7 +570,7 @@
  /*
   * This code may look a bit paranoid, but it's supposed to cooperate with
   * a wide range of boards and BIOS bugs.  Fortunately only the timer IRQ
-@@ -2288,6 +2337,9 @@ static inline void __init check_timer(void)
+@@ -2287,6 +2336,9 @@ static inline void __init check_timer(void)
  out:
  	local_irq_restore(flags);
  }
@@ -599,7 +580,7 @@
  
  /*
   *
-@@ -2320,7 +2372,9 @@ void __init setup_IO_APIC(void)
+@@ -2319,7 +2371,9 @@ void __init setup_IO_APIC(void)
  	 */
  	if (!acpi_ioapic)
  		setup_ioapic_ids_from_mpc();
@@ -609,7 +590,7 @@
  	setup_IO_APIC_irqs();
  	init_IO_APIC_traps();
  	check_timer();
-@@ -2351,6 +2405,12 @@ static int __init io_apic_bug_finalize(void)
+@@ -2350,6 +2404,12 @@ static int __init io_apic_bug_finalize(void)
  {
  	if(sis_apic_bug == -1)
  		sis_apic_bug = 0;
@@ -622,7 +603,7 @@
  	return 0;
  }
  
-@@ -2465,7 +2525,9 @@ int create_irq(void)
+@@ -2464,7 +2524,9 @@ int create_irq(void)
  	spin_unlock_irqrestore(&vector_lock, flags);
  
  	if (irq >= 0) {
@@ -632,7 +613,7 @@
  		dynamic_irq_init(irq);
  	}
  	return irq;
-@@ -2688,6 +2750,7 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
+@@ -2687,6 +2749,7 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
  
  int __init io_apic_get_unique_id (int ioapic, int apic_id)
  {
@@ -640,7 +621,7 @@
  	union IO_APIC_reg_00 reg_00;
  	static physid_mask_t apic_id_map = PHYSID_MASK_NONE;
  	physid_mask_t tmp;
-@@ -2756,6 +2819,7 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
+@@ -2755,6 +2818,7 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
  
  	apic_printk(APIC_VERBOSE, KERN_INFO
  			"IOAPIC[%d]: Assigned apic_id %d\n", ioapic, apic_id);
@@ -649,7 +630,7 @@
  	return apic_id;
  }
 diff --git a/arch/x86/kernel/mpparse_32.c b/arch/x86/kernel/mpparse_32.c
-index 7a05a7f..289041d 100644
+index f349e68..0e5aae9 100644
 --- a/arch/x86/kernel/mpparse_32.c
 +++ b/arch/x86/kernel/mpparse_32.c
 @@ -105,6 +105,7 @@ static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __cpuinit
@@ -696,7 +677,7 @@
  			smp_found_config = 0;
  			printk(KERN_ERR "BIOS bug, MP table errors detected!...\n");
  			printk(KERN_ERR "... disabling SMP support. (tell your hw vendor)\n");
-@@ -811,6 +819,7 @@ int es7000_plat;
+@@ -813,6 +821,7 @@ int es7000_plat;
  
  void __init mp_register_lapic_address(u64 address)
  {
@@ -704,7 +685,7 @@
  	mp_lapic_addr = (unsigned long) address;
  
  	set_fixmap_nocache(FIX_APIC_BASE, mp_lapic_addr);
-@@ -819,6 +828,7 @@ void __init mp_register_lapic_address(u64 address)
+@@ -821,6 +830,7 @@ void __init mp_register_lapic_address(u64 address)
  		boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID));
  
  	Dprintk("Boot CPU = %d\n", boot_cpu_physical_apicid);
@@ -712,7 +693,7 @@
  }
  
  void __cpuinit mp_register_lapic (u8 id, u8 enabled)
-@@ -835,6 +845,7 @@ void __cpuinit mp_register_lapic (u8 id, u8 enabled)
+@@ -837,6 +847,7 @@ void __cpuinit mp_register_lapic (u8 id, u8 enabled)
  	if (id == boot_cpu_physical_apicid)
  		boot_cpu = 1;
  
@@ -720,7 +701,7 @@
  	processor.mpc_type = MP_PROCESSOR;
  	processor.mpc_apicid = id;
  	processor.mpc_apicver = GET_APIC_VERSION(apic_read(APIC_LVR));
-@@ -845,7 +856,7 @@ void __cpuinit mp_register_lapic (u8 id, u8 enabled)
+@@ -847,7 +858,7 @@ void __cpuinit mp_register_lapic (u8 id, u8 enabled)
  	processor.mpc_featureflag = boot_cpu_data.x86_capability[0];
  	processor.mpc_reserved[0] = 0;
  	processor.mpc_reserved[1] = 0;
@@ -729,7 +710,7 @@
  	MP_processor_info(&processor);
  }
  
-@@ -899,7 +910,9 @@ void __init mp_register_ioapic(u8 id, u32 address, u32 gsi_base)
+@@ -901,7 +912,9 @@ void __init mp_register_ioapic(u8 id, u32 address, u32 gsi_base)
  	mp_ioapics[idx].mpc_flags = MPC_APIC_USABLE;
  	mp_ioapics[idx].mpc_apicaddr = address;
  
@@ -740,10 +721,10 @@
  		&& !APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
  		tmpid = io_apic_get_unique_id(idx, id);
 diff --git a/arch/x86/kernel/setup_32.c b/arch/x86/kernel/setup_32.c
-index a441deb..5d9edab 100644
+index a1d7071..1ab11ba 100644
 --- a/arch/x86/kernel/setup_32.c
 +++ b/arch/x86/kernel/setup_32.c
-@@ -62,6 +62,8 @@
+@@ -65,6 +65,8 @@
  #include <bios_ebda.h>
  #include <asm/cacheflush.h>
  
@@ -752,7 +733,7 @@
  /* This value is set up by the early boot code to point to the value
     immediately after the boot time page tables.  It contains a *physical*
     address, and must not be in the .bss segment! */
-@@ -546,10 +548,13 @@ void __init setup_arch(char **cmdline_p)
+@@ -700,9 +702,13 @@ void __init setup_arch(char **cmdline_p)
  {
  	unsigned long max_low_pfn;
  
@@ -762,12 +743,11 @@
  	pre_setup_arch_hook();
 +	xprintk("setup_arch 3\n");
  	early_cpu_init();
--
 +	xprintk("setup_arch 4\n");
- 	/*
- 	 * FIXME: This isn't an official loader_type right
- 	 * now but does currently work with elilo.
-@@ -564,6 +569,7 @@ void __init setup_arch(char **cmdline_p)
+ 	early_ioremap_init();
+ 
+ #ifdef CONFIG_EFI
+@@ -712,6 +718,7 @@ void __init setup_arch(char **cmdline_p)
  #endif
  
  	ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev);
@@ -775,7 +755,7 @@
  	screen_info = boot_params.screen_info;
  	edid_info = boot_params.edid_info;
  	apm_info.bios = boot_params.apm_bios_info;
-@@ -671,7 +677,7 @@ void __init setup_arch(char **cmdline_p)
+@@ -836,7 +843,7 @@ void __init setup_arch(char **cmdline_p)
  
  #ifdef CONFIG_ACPI
  	acpi_boot_init();
@@ -784,7 +764,7 @@
  #if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)
  	if (def_to_bigsmp)
  		printk(KERN_WARNING "More than 8 CPUs detected and "
-@@ -679,14 +685,16 @@ void __init setup_arch(char **cmdline_p)
+@@ -844,14 +851,16 @@ void __init setup_arch(char **cmdline_p)
  			"CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n");
  #endif
  #endif
@@ -803,14 +783,16 @@
  #ifdef CONFIG_VT
  #if defined(CONFIG_VGA_CONSOLE)
  	if (!efi_enabled || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
-@@ -695,4 +703,5 @@ void __init setup_arch(char **cmdline_p)
+@@ -860,6 +869,7 @@ void __init setup_arch(char **cmdline_p)
  	conswitchp = &dummy_con;
  #endif
  #endif
 +	xprintk("setup_arch 15\n");
  }
+ 
+ /*
 diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
-index 02d1e1e..912cbc8 100644
+index b22c01e..7ca5ac2 100644
 --- a/arch/x86/kernel/traps_32.c
 +++ b/arch/x86/kernel/traps_32.c
 @@ -59,6 +59,8 @@
@@ -822,8 +804,8 @@
  #include "mach_traps.h"
  
  int panic_on_unrecovered_nmi;
-@@ -1130,10 +1132,42 @@ static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
- }
+@@ -1137,10 +1139,42 @@ asmlinkage void math_emulate(long arg)
+ #endif /* CONFIG_MATH_EMULATION */
  
  
 +/*
@@ -863,17 +845,17 @@
 +	HYPERVISOR_set_trap_table(trap_table);
 +#else
  #ifdef CONFIG_EISA
- 	void __iomem *p = ioremap(0x0FFFD9, 4);
+ 	void __iomem *p = early_ioremap(0x0FFFD9, 4);
  	if (readl(p) == 'E'+('I'<<8)+('S'<<16)+('A'<<24)) {
-@@ -1168,6 +1202,7 @@ void __init trap_init(void)
+@@ -1175,6 +1209,7 @@ void __init trap_init(void)
  	set_trap_gate(18,&machine_check);
  #endif
  	set_trap_gate(19,&simd_coprocessor_error);
 +#endif /* !CONFIG_XEN */
  
- 	if (cpu_has_fxsr) {
- 		/*
-@@ -1191,8 +1226,9 @@ void __init trap_init(void)
+ 	/*
+ 	 * Verify that the FXSAVE/FXRSTOR data will be 16-byte aligned.
+@@ -1193,8 +1228,9 @@ void __init trap_init(void)
  		printk("done.\n");
  	}
  
@@ -884,7 +866,7 @@
  	/* Reserve all the builtin and the syscall vector. */
  	for (i = 0; i < FIRST_EXTERNAL_VECTOR; i++)
  		set_bit(i, used_vectors);
-@@ -1202,8 +1238,9 @@ void __init trap_init(void)
+@@ -1204,8 +1240,9 @@ void __init trap_init(void)
  	 * Should be a barrier for any external CPU state.
  	 */
  	cpu_init();
@@ -896,13 +878,13 @@
  
  static int __init kstack_setup(char *s)
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index b84f57b..2d438bb 100644
+index cbc85dd..053ed29 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -184,8 +184,8 @@ static void xen_cpuid(unsigned int *eax, unsigned int *ebx,
+@@ -184,8 +184,8 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
  	 * unsupported kernel subsystems as possible.
  	 */
- 	if (*eax == 1) {
+ 	if (*ax == 1) {
 -		maskedx = ~(1 << X86_FEATURE_APIC);  /* disable local APIC */
  		if (!is_initial_xendomain())
 +			maskedx = ~(1 << X86_FEATURE_APIC);  /* disable local APIC */
@@ -910,7 +892,7 @@
  				     (1 << X86_FEATURE_ACC));   /* thermal monitoring */
  	}
 diff --git a/arch/x86/xen/events.c b/arch/x86/xen/events.c
-index 2bf9731..88edd7c 100644
+index 2a4c9aa..10e2297 100644
 --- a/arch/x86/xen/events.c
 +++ b/arch/x86/xen/events.c
 @@ -82,6 +82,9 @@ static u8 cpu_evtchn[NR_EVENT_CHANNELS];
@@ -941,7 +923,7 @@
  		if (irq_bindcount[irq] == 0)
  			break;
  
-@@ -471,9 +476,15 @@ fastcall void xen_evtchn_do_upcall(struct pt_regs *regs)
+@@ -471,9 +476,15 @@ void xen_evtchn_do_upcall(struct pt_regs *regs)
  	struct shared_info *s = HYPERVISOR_shared_info;
  	struct vcpu_info *vcpu_info = __get_cpu_var(xen_vcpu);
  	unsigned long pending_words;
@@ -957,7 +939,7 @@
  	/* NB. No need for a barrier here -- XCHG is a barrier on x86. */
  	pending_words = xchg(&vcpu_info->evtchn_pending_sel, 0);
  	while (pending_words != 0) {
-@@ -492,6 +503,10 @@ fastcall void xen_evtchn_do_upcall(struct pt_regs *regs)
+@@ -492,6 +503,10 @@ void xen_evtchn_do_upcall(struct pt_regs *regs)
  			}
  		}
  	}
@@ -1214,10 +1196,10 @@
  
  #endif /* _ASM_IRQ_VECTORS_LIMITS_H */
 diff --git a/init/main.c b/init/main.c
-index eee7888..24ac4cd 100644
+index 384bc45..a46a926 100644
 --- a/init/main.c
 +++ b/init/main.c
-@@ -68,6 +68,8 @@
+@@ -69,6 +69,8 @@
  #include <asm/smp.h>
  #endif
  
@@ -1226,7 +1208,7 @@
  /*
   * This is one of the first .c files built. Error out early if we have compiler
   * trouble.
-@@ -551,56 +553,80 @@ asmlinkage void __init start_kernel(void)
+@@ -557,56 +559,80 @@ asmlinkage void __init start_kernel(void)
  	printk(KERN_NOTICE);
  	printk(linux_banner);
  	setup_arch(&command_line);
@@ -1310,5 +1292,5 @@
  		panic(panic_later, panic_param);
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0026-xen-dom0-Obvious-cpuid-fix-to-domU-handling.patch:

Index: linux-2.6-xen-0026-xen-dom0-Obvious-cpuid-fix-to-domU-handling.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0026-xen-dom0-Obvious-cpuid-fix-to-domU-handling.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0026-xen-dom0-Obvious-cpuid-fix-to-domU-handling.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0026-xen-dom0-Obvious-cpuid-fix-to-domU-handling.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From e15de921d99be19d32be489f5a210d6568d54ebf Mon Sep 17 00:00:00 2001
+From 317f7260f112ab0266895fdf01e1766da66eb4d4 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Thu, 13 Dec 2007 18:00:17 +0000
 Subject: [PATCH] xen dom0: Obvious cpuid fix to domU handling.
@@ -9,13 +9,13 @@
  1 files changed, 2 insertions(+), 1 deletions(-)
 
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 2d438bb..806d739 100644
+index 053ed29..33ca194 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -184,10 +184,11 @@ static void xen_cpuid(unsigned int *eax, unsigned int *ebx,
+@@ -184,10 +184,11 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
  	 * unsupported kernel subsystems as possible.
  	 */
- 	if (*eax == 1) {
+ 	if (*ax == 1) {
 -		if (!is_initial_xendomain())
 +		if (!is_initial_xendomain()) {
  			maskedx = ~(1 << X86_FEATURE_APIC);  /* disable local APIC */
@@ -26,5 +26,5 @@
  
  	asm(XEN_EMULATE_PREFIX "cpuid"
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0027-xen-debug-Diagnose-bind_virq_to_irq-errors.patch:

Index: linux-2.6-xen-0027-xen-debug-Diagnose-bind_virq_to_irq-errors.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0027-xen-debug-Diagnose-bind_virq_to_irq-errors.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0027-xen-debug-Diagnose-bind_virq_to_irq-errors.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0027-xen-debug-Diagnose-bind_virq_to_irq-errors.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 71f4fd1ac9a9657a91cb4b6702c7615fc9cc7709 Mon Sep 17 00:00:00 2001
+From feea7095abbe3ed66643b7011304e999b3a59960 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 7 Jan 2008 20:39:20 +0000
 Subject: [PATCH] xen debug: Diagnose bind_virq_to_irq errors
@@ -9,7 +9,7 @@
  1 files changed, 4 insertions(+), 1 deletions(-)
 
 diff --git a/arch/x86/xen/events.c b/arch/x86/xen/events.c
-index 88edd7c..1014809 100644
+index 10e2297..f01d115 100644
 --- a/arch/x86/xen/events.c
 +++ b/arch/x86/xen/events.c
 @@ -329,8 +329,11 @@ int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
@@ -26,5 +26,5 @@
  
  		irq = find_unbound_irq();
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0028-xen-traps-Revert-Juan-s-traps_32.c-changes-to-debug.patch:

Index: linux-2.6-xen-0028-xen-traps-Revert-Juan-s-traps_32.c-changes-to-debug.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0028-xen-traps-Revert-Juan-s-traps_32.c-changes-to-debug.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0028-xen-traps-Revert-Juan-s-traps_32.c-changes-to-debug.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0028-xen-traps-Revert-Juan-s-traps_32.c-changes-to-debug.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From b3df330c365062bcf5c6c36067075870fa627c11 Mon Sep 17 00:00:00 2001
+From d963a1618e7decc3a0e7667e6a6e553e23856098 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 7 Jan 2008 20:39:51 +0000
 Subject: [PATCH] xen traps: Revert Juan's traps_32.c changes to debug why they are needed.
@@ -9,7 +9,7 @@
  1 files changed, 2 insertions(+), 39 deletions(-)
 
 diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
-index 912cbc8..02d1e1e 100644
+index 7ca5ac2..b22c01e 100644
 --- a/arch/x86/kernel/traps_32.c
 +++ b/arch/x86/kernel/traps_32.c
 @@ -59,8 +59,6 @@
@@ -21,8 +21,8 @@
  #include "mach_traps.h"
  
  int panic_on_unrecovered_nmi;
-@@ -1132,42 +1130,10 @@ static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
- }
+@@ -1139,42 +1137,10 @@ asmlinkage void math_emulate(long arg)
+ #endif /* CONFIG_MATH_EMULATION */
  
  
 -/*
@@ -62,17 +62,17 @@
 -	HYPERVISOR_set_trap_table(trap_table);
 -#else
  #ifdef CONFIG_EISA
- 	void __iomem *p = ioremap(0x0FFFD9, 4);
+ 	void __iomem *p = early_ioremap(0x0FFFD9, 4);
  	if (readl(p) == 'E'+('I'<<8)+('S'<<16)+('A'<<24)) {
-@@ -1202,7 +1168,6 @@ void __init trap_init(void)
+@@ -1209,7 +1175,6 @@ void __init trap_init(void)
  	set_trap_gate(18,&machine_check);
  #endif
  	set_trap_gate(19,&simd_coprocessor_error);
 -#endif /* !CONFIG_XEN */
  
- 	if (cpu_has_fxsr) {
- 		/*
-@@ -1226,9 +1191,8 @@ void __init trap_init(void)
+ 	/*
+ 	 * Verify that the FXSAVE/FXRSTOR data will be 16-byte aligned.
+@@ -1228,9 +1193,8 @@ void __init trap_init(void)
  		printk("done.\n");
  	}
  
@@ -83,7 +83,7 @@
  	/* Reserve all the builtin and the syscall vector. */
  	for (i = 0; i < FIRST_EXTERNAL_VECTOR; i++)
  		set_bit(i, used_vectors);
-@@ -1238,9 +1202,8 @@ void __init trap_init(void)
+@@ -1240,9 +1204,8 @@ void __init trap_init(void)
  	 * Should be a barrier for any external CPU state.
  	 */
  	cpu_init();
@@ -95,5 +95,5 @@
  
  static int __init kstack_setup(char *s)
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0029-xen-debug-Move-init_apic_mappings-after-trap-init.patch:

Index: linux-2.6-xen-0029-xen-debug-Move-init_apic_mappings-after-trap-init.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0029-xen-debug-Move-init_apic_mappings-after-trap-init.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0029-xen-debug-Move-init_apic_mappings-after-trap-init.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0029-xen-debug-Move-init_apic_mappings-after-trap-init.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 719698e7940cc4122500970d1824db276076a963 Mon Sep 17 00:00:00 2001
+From 32ff5b38ade57bbfb6e88f1943d14ebad83e57c2 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Tue, 8 Jan 2008 15:33:44 +0000
 Subject: [PATCH] xen debug: Move init_apic_mappings() after trap initialisation.
@@ -11,11 +11,11 @@
  1 files changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
-index 02d1e1e..065ef05 100644
+index b22c01e..afc7d06 100644
 --- a/arch/x86/kernel/traps_32.c
 +++ b/arch/x86/kernel/traps_32.c
-@@ -1142,10 +1142,6 @@ void __init trap_init(void)
- 	iounmap(p);
+@@ -1149,10 +1149,6 @@ void __init trap_init(void)
+ 	early_iounmap(p, 4);
  #endif
  
 -#ifdef CONFIG_X86_LOCAL_APIC
@@ -25,7 +25,7 @@
  	set_trap_gate(0,&divide_error);
  	set_intr_gate(1,&debug);
  	set_intr_gate(2,&nmi);
-@@ -1169,6 +1165,10 @@ void __init trap_init(void)
+@@ -1176,6 +1172,10 @@ void __init trap_init(void)
  #endif
  	set_trap_gate(19,&simd_coprocessor_error);
  
@@ -33,9 +33,9 @@
 +	init_apic_mappings();
 +#endif
 +
- 	if (cpu_has_fxsr) {
- 		/*
- 		 * Verify that the FXSAVE/FXRSTOR data will be 16-byte aligned.
+ 	/*
+ 	 * Verify that the FXSAVE/FXRSTOR data will be 16-byte aligned.
+ 	 * Generate a build-time error if the alignment is wrong.
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0030-xen-debug-Trace-progress-in-trap_init-around-init.patch:

Index: linux-2.6-xen-0030-xen-debug-Trace-progress-in-trap_init-around-init.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0030-xen-debug-Trace-progress-in-trap_init-around-init.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0030-xen-debug-Trace-progress-in-trap_init-around-init.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0030-xen-debug-Trace-progress-in-trap_init-around-init.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 52ab2f65548fafadb3a80b1c6da0dd096f06992d Mon Sep 17 00:00:00 2001
+From 5929040a9d2a1bfa80c9995f55b7fa5dc925eb92 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Tue, 8 Jan 2008 15:54:05 +0000
 Subject: [PATCH] xen debug: Trace progress in trap_init() around init_apic_mappings()
@@ -9,7 +9,7 @@
  1 files changed, 5 insertions(+), 0 deletions(-)
 
 diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
-index 065ef05..5def73a 100644
+index afc7d06..bb9a39b 100644
 --- a/arch/x86/kernel/traps_32.c
 +++ b/arch/x86/kernel/traps_32.c
 @@ -61,6 +61,8 @@
@@ -21,15 +21,15 @@
  int panic_on_unrecovered_nmi;
  
  DECLARE_BITMAP(used_vectors, NR_VECTORS);
-@@ -1142,6 +1144,7 @@ void __init trap_init(void)
- 	iounmap(p);
+@@ -1149,6 +1151,7 @@ void __init trap_init(void)
+ 	early_iounmap(p, 4);
  #endif
  
 +	xprintk("trap_init 0\n");
  	set_trap_gate(0,&divide_error);
  	set_intr_gate(1,&debug);
  	set_intr_gate(2,&nmi);
-@@ -1166,7 +1169,9 @@ void __init trap_init(void)
+@@ -1173,7 +1176,9 @@ void __init trap_init(void)
  	set_trap_gate(19,&simd_coprocessor_error);
  
  #ifdef CONFIG_X86_LOCAL_APIC
@@ -38,7 +38,7 @@
 +	xprintk("trap_init 2\n");
  #endif
  
- 	if (cpu_has_fxsr) {
+ 	/*
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0031-xen-apic-Disable-init_apic_mappings-when-under-CO.patch:

Index: linux-2.6-xen-0031-xen-apic-Disable-init_apic_mappings-when-under-CO.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0031-xen-apic-Disable-init_apic_mappings-when-under-CO.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0031-xen-apic-Disable-init_apic_mappings-when-under-CO.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0031-xen-apic-Disable-init_apic_mappings-when-under-CO.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From bc199c8d1802ae500e3a99c6b2dcfd574cc54d70 Mon Sep 17 00:00:00 2001
+From 1fab4a0779cc54e1941d50dd9a3d1e6d377fafec Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Tue, 8 Jan 2008 15:54:38 +0000
 Subject: [PATCH] xen apic: Disable init_apic_mappings() when under CONFIG_XEN
@@ -11,18 +11,18 @@
  1 files changed, 2 insertions(+), 0 deletions(-)
 
 diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c
-index 06b8860..637a735 100644
+index 2ba94fc..00c1241 100644
 --- a/arch/x86/kernel/apic_32.c
 +++ b/arch/x86/kernel/apic_32.c
-@@ -1110,6 +1110,7 @@ no_apic:
+@@ -1133,6 +1133,7 @@ no_apic:
   */
  void __init init_apic_mappings(void)
  {
 +#ifndef CONFIG_XEN
- 	unsigned long apic_phys;
- 
  	/*
-@@ -1164,6 +1165,7 @@ fake_ioapic_page:
+ 	 * If no local APIC can be found then set up a fake all
+ 	 * zeroes page to simulate the local APIC and another
+@@ -1185,6 +1186,7 @@ fake_ioapic_page:
  		}
  	}
  #endif
@@ -31,5 +31,5 @@
  
  /*
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0032-xen-debug-Log-entry-into-virtual-console-s-xen_init.patch:

Index: linux-2.6-xen-0032-xen-debug-Log-entry-into-virtual-console-s-xen_init.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0032-xen-debug-Log-entry-into-virtual-console-s-xen_init.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0032-xen-debug-Log-entry-into-virtual-console-s-xen_init.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0032-xen-debug-Log-entry-into-virtual-console-s-xen_init.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 850979a035b77d66ae191d4117f5ef49157148c4 Mon Sep 17 00:00:00 2001
+From a77008bb892bd0267a93fa36d45150c030966480 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Tue, 8 Jan 2008 18:42:32 +0000
 Subject: [PATCH] xen debug: Log entry into virtual console's xen_init() function
@@ -23,5 +23,5 @@
  		ops = &dom0_hvc_ops;
  		xencons_irq = bind_virq_to_irq(VIRQ_CONSOLE, 0);
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0033-xen-debug-Log-bind_virq_to_irq-events.patch:

Index: linux-2.6-xen-0033-xen-debug-Log-bind_virq_to_irq-events.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0033-xen-debug-Log-bind_virq_to_irq-events.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0033-xen-debug-Log-bind_virq_to_irq-events.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0033-xen-debug-Log-bind_virq_to_irq-events.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 54b20ea9ea5aeb9e516009271f010a2f1ef761e5 Mon Sep 17 00:00:00 2001
+From 1c6a2bfc7394a35046eb6e082142529786180f12 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Tue, 8 Jan 2008 18:43:03 +0000
 Subject: [PATCH] xen debug: Log bind_virq_to_irq events
@@ -9,7 +9,7 @@
  1 files changed, 5 insertions(+), 5 deletions(-)
 
 diff --git a/arch/x86/xen/events.c b/arch/x86/xen/events.c
-index 1014809..ca4912e 100644
+index f01d115..75d9ff5 100644
 --- a/arch/x86/xen/events.c
 +++ b/arch/x86/xen/events.c
 @@ -319,7 +319,7 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
@@ -37,5 +37,5 @@
  		}
  		evtchn = bind_virq.port;
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0034-xen-debug-Work-around-USB-issue-triggered-by-Xen-de.patch:

Index: linux-2.6-xen-0034-xen-debug-Work-around-USB-issue-triggered-by-Xen-de.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0034-xen-debug-Work-around-USB-issue-triggered-by-Xen-de.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0034-xen-debug-Work-around-USB-issue-triggered-by-Xen-de.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0034-xen-debug-Work-around-USB-issue-triggered-by-Xen-de.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 60777009391f106a1cedc1c92ee1e5d91fa69aaa Mon Sep 17 00:00:00 2001
+From 7bd0ab07f16d99496345fe11176253c28b6933b6 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 4 Feb 2008 22:10:55 +0000
 Subject: [PATCH] xen debug: Work around USB issue triggered by Xen debugging.
@@ -19,10 +19,10 @@
  1 files changed, 2 insertions(+), 1 deletions(-)
 
 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index b04d232..5a335ee 100644
+index 68fc521..8c3d3ef 100644
 --- a/drivers/usb/core/hub.c
 +++ b/drivers/usb/core/hub.c
-@@ -345,7 +345,8 @@ static void kick_khubd(struct usb_hub *hub)
+@@ -352,7 +352,8 @@ static void kick_khubd(struct usb_hub *hub)
  void usb_kick_khubd(struct usb_device *hdev)
  {
  	/* FIXME: What if hdev isn't bound to the hub driver? */
@@ -33,5 +33,5 @@
  
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0035-Remove-duplicated-dma_alloc-free_noncoherent-define.patch:

Index: linux-2.6-xen-0035-Remove-duplicated-dma_alloc-free_noncoherent-define.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0035-Remove-duplicated-dma_alloc-free_noncoherent-define.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0035-Remove-duplicated-dma_alloc-free_noncoherent-define.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0035-Remove-duplicated-dma_alloc-free_noncoherent-define.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 54858ead14d7f7d127d7322fe98c14721a989344 Mon Sep 17 00:00:00 2001
+From 4cef0dc4ca8f158160d97ed1821a2a0d7849a5b1 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 21 Jan 2008 16:18:57 +0000
 Subject: [PATCH] Remove duplicated dma_alloc/free_noncoherent #defines.
@@ -23,5 +23,5 @@
  				dma_addr_t *dma_handle, gfp_t gfp);
  extern void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0036-xem-dom0-Add-hypervisor-memory_exchange-descriptor.patch:

Index: linux-2.6-xen-0036-xem-dom0-Add-hypervisor-memory_exchange-descriptor.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0036-xem-dom0-Add-hypervisor-memory_exchange-descriptor.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0036-xem-dom0-Add-hypervisor-memory_exchange-descriptor.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0036-xem-dom0-Add-hypervisor-memory_exchange-descriptor.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 64c33eb742c80d4ec64d6f100fea3ed10b7f34fd Mon Sep 17 00:00:00 2001
+From 85d6afd3d20fd6301265249160b03d70357d4fd8 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Thu, 31 Jan 2008 19:26:06 +0000
 Subject: [PATCH] xem dom0: Add hypervisor memory_exchange descriptor
@@ -64,5 +64,5 @@
 +
  #endif /* __XEN_PUBLIC_MEMORY_H__ */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0037-xen-dom0-add-virt_to_pfn-macro.patch:

Index: linux-2.6-xen-0037-xen-dom0-add-virt_to_pfn-macro.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0037-xen-dom0-add-virt_to_pfn-macro.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0037-xen-dom0-add-virt_to_pfn-macro.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0037-xen-dom0-add-virt_to_pfn-macro.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 0df6aed5f602875138fe28038bfc720ceee406d6 Mon Sep 17 00:00:00 2001
+From dde4897dc696bee1b08f84c2ecba3462d2ffa7c0 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 4 Feb 2008 16:40:57 +0000
 Subject: [PATCH] xen dom0: add virt_to_pfn() macro
@@ -13,7 +13,7 @@
  1 files changed, 2 insertions(+), 1 deletions(-)
 
 diff --git a/include/xen/page.h b/include/xen/page.h
-index c0c8fcb..ce45a6b 100644
+index 031ef22..fa0afa3 100644
 --- a/include/xen/page.h
 +++ b/include/xen/page.h
 @@ -134,7 +134,8 @@ static inline void set_phys_to_machine(unsigned long pfn, unsigned long mfn)
@@ -27,5 +27,5 @@
  
  #ifdef CONFIG_X86_PAE
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0038-xen-dom0-use-virt_to_pfn-where-appropriate.patch:

Index: linux-2.6-xen-0038-xen-dom0-use-virt_to_pfn-where-appropriate.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0038-xen-dom0-use-virt_to_pfn-where-appropriate.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0038-xen-dom0-use-virt_to_pfn-where-appropriate.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0038-xen-dom0-use-virt_to_pfn-where-appropriate.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 7a95e548ccb7d2fee76004d4d3f7a1f02bb70f7a Mon Sep 17 00:00:00 2001
+From 2eb2f8fa5a11393b412965a189f24f984bafb253 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 4 Feb 2008 16:42:35 +0000
 Subject: [PATCH] xen dom0: use virt_to_pfn() where appropriate
@@ -12,10 +12,10 @@
  1 files changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index 2e28104..5bbdbb7 100644
+index ccc4ae7..07729f5 100644
 --- a/arch/x86/xen/mmu.c
 +++ b/arch/x86/xen/mmu.c
-@@ -454,7 +454,7 @@ void xen_pgd_pin(pgd_t *pgd)
+@@ -457,7 +457,7 @@ void xen_pgd_pin(pgd_t *pgd)
  	level = MMUEXT_PIN_L2_TABLE;
  #endif
  
@@ -24,7 +24,7 @@
  
  	xen_mc_issue(0);
  }
-@@ -509,7 +509,7 @@ static void xen_pgd_unpin(pgd_t *pgd)
+@@ -512,7 +512,7 @@ static void xen_pgd_unpin(pgd_t *pgd)
  {
  	xen_mc_batch();
  
@@ -34,5 +34,5 @@
  	pgd_walk(pgd, unpin_page, TASK_SIZE);
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0039-xen-dom0-Add-contiguous-region-support.patch:

Index: linux-2.6-xen-0039-xen-dom0-Add-contiguous-region-support.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0039-xen-dom0-Add-contiguous-region-support.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0039-xen-dom0-Add-contiguous-region-support.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0039-xen-dom0-Add-contiguous-region-support.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From b21537dd3c85a716b1301374faf725c00598b0ac Mon Sep 17 00:00:00 2001
+From 59d9729d0fae0293ee4df3d1060eeae8a3d8db12 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Thu, 31 Jan 2008 11:47:28 +0000
 Subject: [PATCH] xen dom0: Add contiguous region support.
@@ -20,10 +20,10 @@
  3 files changed, 280 insertions(+), 5 deletions(-)
 
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 806d739..a11607a 100644
+index 33ca194..b7ea919 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -865,18 +865,31 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
+@@ -881,13 +881,14 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
  		pin_pagetable_pfn(level, PFN_DOWN(__pa(base)));
  	}
  
@@ -42,7 +42,9 @@
  		for(i = ISA_START_ADDRESS; i < ISA_END_ADDRESS; i += PAGE_SIZE)
  			set_pte_mfn(PAGE_OFFSET + i, PFN_DOWN(i), PAGE_KERNEL);
  
- 		reserve_bootmem(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS);
+@@ -895,6 +896,18 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
+ 				ISA_END_ADDRESS - ISA_START_ADDRESS,
+ 				BOOTMEM_DEFAULT);
  		printk(KERN_INFO "Xen: setup ISA identity maps\n");
 +
 +		/*
@@ -60,7 +62,7 @@
  }
  
 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index 5bbdbb7..7d5111b 100644
+index 07729f5..fd37077 100644
 --- a/arch/x86/xen/mmu.c
 +++ b/arch/x86/xen/mmu.c
 @@ -47,15 +47,17 @@
@@ -81,8 +83,8 @@
 +
  xmaddr_t arbitrary_virt_to_machine(unsigned long address)
  {
- 	pte_t *pte = lookup_address(address);
-@@ -614,3 +616,246 @@ void xen_exit_mmap(struct mm_struct *mm)
+ 	unsigned int level;
+@@ -617,3 +619,246 @@ void xen_exit_mmap(struct mm_struct *mm)
  
  	spin_unlock(&mm->page_table_lock);
  }
@@ -330,7 +332,7 @@
 +}
 +EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region);
 diff --git a/include/xen/page.h b/include/xen/page.h
-index ce45a6b..b453913 100644
+index fa0afa3..f331836 100644
 --- a/include/xen/page.h
 +++ b/include/xen/page.h
 @@ -178,4 +178,21 @@ xmaddr_t arbitrary_virt_to_machine(unsigned long address);
@@ -356,5 +358,5 @@
 +
  #endif /* __XEN_PAGE_H */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0040-xen-dom0-Don-t-mask-off-PCD-bits-from-pte-entries.patch:

Index: linux-2.6-xen-0040-xen-dom0-Don-t-mask-off-PCD-bits-from-pte-entries.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0040-xen-dom0-Don-t-mask-off-PCD-bits-from-pte-entries.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0040-xen-dom0-Don-t-mask-off-PCD-bits-from-pte-entries.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0040-xen-dom0-Don-t-mask-off-PCD-bits-from-pte-entries.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 064de8caaca6b36cf2defdec078561b537d5f809 Mon Sep 17 00:00:00 2001
+From 360e312f4846a696ff22845afdf158897fd1574e Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Tue, 29 Jan 2008 16:53:30 +0000
 Subject: [PATCH] xen dom0: Don't mask off PCD bits from pte entries.
@@ -14,31 +14,31 @@
 Suggested by Jeremy Fitzhardinge.
 Signed-off-by: Stephen Tweedie <sct at redhat.com>
 ---
- arch/x86/xen/mmu.c |    4 ----
- 1 files changed, 0 insertions(+), 4 deletions(-)
+ arch/x86/xen/mmu.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index 7d5111b..cb78a87 100644
+index fd37077..592db00 100644
 --- a/arch/x86/xen/mmu.c
 +++ b/arch/x86/xen/mmu.c
-@@ -218,8 +218,6 @@ pte_t xen_make_pte(unsigned long long pte)
- 	if (pte & 1)
+@@ -220,7 +220,7 @@ pte_t xen_make_pte(unsigned long long pte)
+ {
+ 	if (pte & _PAGE_PRESENT) {
  		pte = phys_to_machine(XPADDR(pte)).maddr;
+-		pte &= ~(_PAGE_PCD | _PAGE_PWT);
++		pte &= ~_PAGE_PWT;
+ 	}
  
--	pte &= ~_PAGE_PCD;
--
- 	return (pte_t){ pte, pte >> 32 };
- }
- 
-@@ -267,8 +265,6 @@ pte_t xen_make_pte(unsigned long pte)
- 	if (pte & _PAGE_PRESENT)
+ 	return (pte_t){ .pte = pte };
+@@ -269,7 +269,7 @@ pte_t xen_make_pte(unsigned long pte)
+ {
+ 	if (pte & _PAGE_PRESENT) {
  		pte = phys_to_machine(XPADDR(pte)).maddr;
+-		pte &= ~(_PAGE_PCD | _PAGE_PWT);
++		pte &= ~_PAGE_PWT;
+ 	}
  
--	pte &= ~_PAGE_PCD;
--
  	return (pte_t){ pte };
- }
- 
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0041-xen-dom0-Remove-duplicate-xen_store_interface-assig.patch:

Index: linux-2.6-xen-0041-xen-dom0-Remove-duplicate-xen_store_interface-assig.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0041-xen-dom0-Remove-duplicate-xen_store_interface-assig.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0041-xen-dom0-Remove-duplicate-xen_store_interface-assig.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0041-xen-dom0-Remove-duplicate-xen_store_interface-assig.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 723cc17a9945c6cf1274004474a959360091c0fa Mon Sep 17 00:00:00 2001
+From ec22b4e86f86c7710382e1c9fccb26ab3df6a4e1 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 28 Jan 2008 09:32:31 +0000
 Subject: [PATCH] xen dom0: Remove duplicate xen_store_interface assignment
@@ -25,5 +25,5 @@
  		xenstored_ready = 1;
  		xen_store_evtchn = xen_start_info->store_evtchn;
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0042-xen-dom0-Slightly-re-arrange-xenbus_probe_init-er.patch:

Index: linux-2.6-xen-0042-xen-dom0-Slightly-re-arrange-xenbus_probe_init-er.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0042-xen-dom0-Slightly-re-arrange-xenbus_probe_init-er.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0042-xen-dom0-Slightly-re-arrange-xenbus_probe_init-er.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0042-xen-dom0-Slightly-re-arrange-xenbus_probe_init-er.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From bc212ad648e0eeca1cfa3b913e519d79122e71bc Mon Sep 17 00:00:00 2001
+From 09938e780fdf9cfe7308148dc1cd6cdb721efda5 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 28 Jan 2008 09:44:46 +0000
 Subject: [PATCH] xen dom0: Slightly re-arrange xenbus_probe_init() error handling
@@ -29,5 +29,5 @@
  }
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0043-xen-dom0-Use-max_low_pfn-declaration-from-linux-boo.patch:

Index: linux-2.6-xen-0043-xen-dom0-Use-max_low_pfn-declaration-from-linux-boo.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0043-xen-dom0-Use-max_low_pfn-declaration-from-linux-boo.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0043-xen-dom0-Use-max_low_pfn-declaration-from-linux-boo.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0043-xen-dom0-Use-max_low_pfn-declaration-from-linux-boo.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From dd070b952c603ac29d42e6a212c8005d951467ea Mon Sep 17 00:00:00 2001
+From 66c7cd7e44fe29f9958ec9e26ab7bdcc4e714141 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 28 Jan 2008 16:42:05 +0000
 Subject: [PATCH] xen dom0: Use max_low_pfn declaration from linux/bootmem.h
@@ -8,23 +8,15 @@
 
 Signed-off-by: Mark McLoughlin <markmc at redhat.com>
 ---
- arch/x86/mm/ioremap_32.c |    2 +-
- arch/x86/xen/ioremap.c   |    2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
+ arch/x86/mm/ioremap.c  |    1 -
+ arch/x86/xen/ioremap.c |    2 +-
+ 2 files changed, 1 insertions(+), 2 deletions(-)
 
-diff --git a/arch/x86/mm/ioremap_32.c b/arch/x86/mm/ioremap_32.c
-index b4e71f4..3d3810f 100644
---- a/arch/x86/mm/ioremap_32.c
-+++ b/arch/x86/mm/ioremap_32.c
-@@ -13,6 +13,7 @@
- #include <linux/slab.h>
- #include <linux/module.h>
- #include <linux/io.h>
-+#include <linux/bootmem.h>
- #include <asm/fixmap.h>
- #include <asm/cacheflush.h>
- #include <asm/tlbflush.h>
-@@ -42,7 +43,6 @@
+diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
+index b484663..2a91b5b 100644
+--- a/arch/x86/mm/ioremap.c
++++ b/arch/x86/mm/ioremap.c
+@@ -118,7 +118,6 @@ static int ioremap_change_attr(unsigned long vaddr, unsigned long size,
   */
  static inline int is_local_lowmem(unsigned long address)
  {
@@ -53,5 +45,5 @@
  }
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0044-xen-dma-Add-dma_mapping_ops-indirection-for-32-bit.patch:

Index: linux-2.6-xen-0044-xen-dma-Add-dma_mapping_ops-indirection-for-32-bit.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0044-xen-dma-Add-dma_mapping_ops-indirection-for-32-bit.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0044-xen-dma-Add-dma_mapping_ops-indirection-for-32-bit.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0044-xen-dma-Add-dma_mapping_ops-indirection-for-32-bit.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 27e1441102cfd1057f625664da4813cce4ccef68 Mon Sep 17 00:00:00 2001
+From 20445361503d41820fd4fddc79341b14348d6040 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 21 Jan 2008 19:03:54 +0000
 Subject: [PATCH] xen dma: Add dma_mapping_ops indirection for 32-bit dma mappings
@@ -10,7 +10,7 @@
 
 Signed-off-by: Stephen Tweedie <sct at redhat.com>
 ---
- arch/x86/kernel/Makefile_32      |    3 +-
+ arch/x86/kernel/Makefile         |    3 +-
  arch/x86/kernel/pci-dma_32.c     |   32 +++++++++
  arch/x86/kernel/pci-nommu_32.c   |   72 ++++++++++++++++++++
  arch/x86/mm/init_32.c            |    4 +
@@ -19,20 +19,20 @@
  6 files changed, 202 insertions(+), 68 deletions(-)
  create mode 100644 arch/x86/kernel/pci-nommu_32.c
 
-diff --git a/arch/x86/kernel/Makefile_32 b/arch/x86/kernel/Makefile_32
-index 879ed77..e545b89 100644
---- a/arch/x86/kernel/Makefile_32
-+++ b/arch/x86/kernel/Makefile_32
-@@ -8,7 +8,8 @@ CPPFLAGS_vmlinux.lds += -Ui386
- obj-y	:= process_32.o signal_32.o entry_32.o traps_32.o irq_32.o \
- 		ptrace_32.o time_32.o ioport_32.o ldt_32.o setup_32.o i8259_32.o sys_i386_32.o \
- 		pci-dma_32.o i386_ksyms_32.o i387_32.o bootflag.o e820_32.o\
--		quirks.o i8237.o topology.o alternative.o i8253.o tsc_32.o
-+		quirks.o i8237.o topology.o alternative.o i8253.o tsc_32.o \
-+		pci-nommu_32.o
+diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
+index 4eb5ce8..d9971ac 100644
+--- a/arch/x86/kernel/Makefile
++++ b/arch/x86/kernel/Makefile
+@@ -26,7 +26,8 @@ obj-$(CONFIG_X86_64)	+= syscall_64.o vsyscall_64.o setup64.o
+ obj-y			+= pci-dma_$(BITS).o  bootflag.o e820_$(BITS).o
+ obj-y			+= quirks.o i8237.o topology.o kdebugfs.o
+ obj-y			+= alternative.o i8253.o
+-obj-$(CONFIG_X86_64)	+= pci-nommu_64.o bugs_64.o
++obj-y			+= pci-nommu_$(BITS).o
++obj-$(CONFIG_X86_64)	+= bugs_64.o
+ obj-y			+= tsc_$(BITS).o io_delay.o rtc.o
  
- obj-$(CONFIG_STACKTRACE)	+= stacktrace.o
- obj-y				+= cpu/
+ obj-y				+= i387.o
 diff --git a/arch/x86/kernel/pci-dma_32.c b/arch/x86/kernel/pci-dma_32.c
 index 5133032..04a95c9 100644
 --- a/arch/x86/kernel/pci-dma_32.c
@@ -155,20 +155,20 @@
 +/* Must execute after PCI subsystem */
 +fs_initcall(no_iommu_init);
 diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
-index 4e8851a..daaeca4 100644
+index ee1091a..ba38e77 100644
 --- a/arch/x86/mm/init_32.c
 +++ b/arch/x86/mm/init_32.c
-@@ -31,6 +31,7 @@
+@@ -30,6 +30,7 @@
  #include <linux/memory_hotplug.h>
  #include <linux/initrd.h>
  #include <linux/cpumask.h>
 +#include <linux/dma-mapping.h>
  
+ #include <asm/asm.h>
  #include <asm/processor.h>
- #include <asm/system.h>
-@@ -45,6 +46,9 @@
- #include <asm/sections.h>
- #include <asm/paravirt.h>
+@@ -49,6 +50,9 @@
+ #include <asm/setup.h>
+ #include <asm/cacheflush.h>
  
 +const struct dma_mapping_ops* dma_ops;
 +EXPORT_SYMBOL(dma_ops);
@@ -436,5 +436,5 @@
  
  #endif /* __KERNEL__ */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0045-xen-dma-Remove-unused-32-bit-dma_ops-map_simple-me.patch:

Index: linux-2.6-xen-0045-xen-dma-Remove-unused-32-bit-dma_ops-map_simple-me.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0045-xen-dma-Remove-unused-32-bit-dma_ops-map_simple-me.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0045-xen-dma-Remove-unused-32-bit-dma_ops-map_simple-me.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0045-xen-dma-Remove-unused-32-bit-dma_ops-map_simple-me.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 54f268ac1f492d8c1c9532a233823676daee1fbe Mon Sep 17 00:00:00 2001
+From fe474773c81d2bcc18c634d25327324ac88c1d2c Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Mon, 21 Jan 2008 22:51:56 +0000
 Subject: [PATCH] xen dma: Remove unused 32-bit dma_ops->map_simple method
@@ -26,5 +26,5 @@
  		                size_t size, enum dma_data_direction);
  	void            (*sync_single_for_cpu)(struct device *hwdev,
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0046-xen-dma-Initial-commit-of-pci-xen.c-dma-mapping-fun.patch:

Index: linux-2.6-xen-0046-xen-dma-Initial-commit-of-pci-xen.c-dma-mapping-fun.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0046-xen-dma-Initial-commit-of-pci-xen.c-dma-mapping-fun.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0046-xen-dma-Initial-commit-of-pci-xen.c-dma-mapping-fun.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0046-xen-dma-Initial-commit-of-pci-xen.c-dma-mapping-fun.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 77f912855d0fff7949cfb8a3975899192e521c25 Mon Sep 17 00:00:00 2001
+From 666913112107f337790ba5e7c80ab61b71029c74 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Tue, 22 Jan 2008 17:01:48 +0000
 Subject: [PATCH] xen dma: Initial commit of pci-xen.c dma mapping functions.
@@ -8,7 +8,7 @@
 
 Signed-off-by: Stephen Tweedie <sct at redhat.com>
 ---
- arch/x86/kernel/Makefile_32    |    2 +
+ arch/x86/kernel/Makefile       |    2 +
  arch/x86/kernel/pci-dma_32.c   |   13 +++
  arch/x86/kernel/pci-nommu_32.c |    4 -
  arch/x86/kernel/pci-xen.c      |  162 ++++++++++++++++++++++++++++++++++++++++
@@ -20,19 +20,19 @@
  create mode 100644 include/asm-x86/iommu_32.h
  create mode 100644 include/asm-x86/iommu_64.h
 
-diff --git a/arch/x86/kernel/Makefile_32 b/arch/x86/kernel/Makefile_32
-index e545b89..ab491bb 100644
---- a/arch/x86/kernel/Makefile_32
-+++ b/arch/x86/kernel/Makefile_32
-@@ -50,6 +50,8 @@ obj-y				+= pcspeaker.o
- 
- obj-$(CONFIG_SCx200)		+= scx200_32.o
+diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
+index d9971ac..50fa7e7 100644
+--- a/arch/x86/kernel/Makefile
++++ b/arch/x86/kernel/Makefile
+@@ -87,6 +87,8 @@ endif
+ obj-$(CONFIG_SCx200)		+= scx200.o
+ scx200-y			+= scx200_32.o
  
 +obj-$(CONFIG_XEN)		+= pci-xen.o
 +
- # vsyscall_32.o contains the vsyscall DSO images as __initdata.
- # We must build both images before we can assemble it.
- # Note: kbuild does not track this dependency due to usage of .incbin
+ ###
+ # 64 bit specific files
+ ifeq ($(CONFIG_X86_64),y)
 diff --git a/arch/x86/kernel/pci-dma_32.c b/arch/x86/kernel/pci-dma_32.c
 index 04a95c9..6df2e1a 100644
 --- a/arch/x86/kernel/pci-dma_32.c
@@ -336,5 +336,5 @@
 +
 +#endif
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0047-xen-dma-Add-calls-to-dma_ops-alloc-free_coherent-ho.patch:

Index: linux-2.6-xen-0047-xen-dma-Add-calls-to-dma_ops-alloc-free_coherent-ho.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0047-xen-dma-Add-calls-to-dma_ops-alloc-free_coherent-ho.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0047-xen-dma-Add-calls-to-dma_ops-alloc-free_coherent-ho.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0047-xen-dma-Add-calls-to-dma_ops-alloc-free_coherent-ho.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From c378d6774fcc1fe1cb4a641dead8b98061df224f Mon Sep 17 00:00:00 2001
+From b748b3a0e221035e517230453fcc9c4801ad0592 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Wed, 30 Jan 2008 21:53:48 +0000
 Subject: [PATCH] xen dma: Add calls to dma_ops alloc/free_coherent hooks.
@@ -38,5 +38,5 @@
  EXPORT_SYMBOL(dma_free_coherent);
  
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0048-xen-dma-Add-xen_alloc-free_coherent.patch:

Index: linux-2.6-xen-0048-xen-dma-Add-xen_alloc-free_coherent.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0048-xen-dma-Add-xen_alloc-free_coherent.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0048-xen-dma-Add-xen_alloc-free_coherent.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0048-xen-dma-Add-xen_alloc-free_coherent.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 399c5c21b453a7d17752bdae0329c9d68e362a4e Mon Sep 17 00:00:00 2001
+From abab71f7c33398db6ee9965a1fb396dc81103017 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Thu, 31 Jan 2008 11:49:04 +0000
 Subject: [PATCH] xen dma: Add xen_alloc/free_coherent
@@ -68,5 +68,5 @@
  	.unmap_single = xen_unmap_single,
  	.map_sg = xen_map_sg,
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0049-xen-dma-Don-t-merge-bios-on-xen-pvops.patch:

Index: linux-2.6-xen-0049-xen-dma-Don-t-merge-bios-on-xen-pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0049-xen-dma-Don-t-merge-bios-on-xen-pvops.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0049-xen-dma-Don-t-merge-bios-on-xen-pvops.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0049-xen-dma-Don-t-merge-bios-on-xen-pvops.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From ea0f29bbc707c69e693aa3a9166da036d14dfb2c Mon Sep 17 00:00:00 2001
+From e1fdffc91e6119421fecb7afd305dafc35505468 Mon Sep 17 00:00:00 2001
 From: Stephen Tweedie <sct at redhat.com>
 Date: Fri, 1 Feb 2008 18:04:53 +0000
 Subject: [PATCH] xen dma: Don't merge bios on xen pvops.
@@ -59,7 +59,7 @@
  	return 0;
  }
 diff --git a/include/asm-x86/io_32.h b/include/asm-x86/io_32.h
-index e2b916e..6344856 100644
+index 58d2c45..bf295f8 100644
 --- a/include/asm-x86/io_32.h
 +++ b/include/asm-x86/io_32.h
 @@ -95,6 +95,18 @@ static inline void * phys_to_virt(unsigned long address)
@@ -82,5 +82,5 @@
   * Change "struct page" to physical address.
   */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0050-xen-dom0-Minor-coding-style-issue-in-ISA-mapping-co.patch:

Index: linux-2.6-xen-0050-xen-dom0-Minor-coding-style-issue-in-ISA-mapping-co.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0050-xen-dom0-Minor-coding-style-issue-in-ISA-mapping-co.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0050-xen-dom0-Minor-coding-style-issue-in-ISA-mapping-co.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0050-xen-dom0-Minor-coding-style-issue-in-ISA-mapping-co.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 27b850f951af2eb4aa97e8db8b3f3f8e4175441c Mon Sep 17 00:00:00 2001
+From 056fb5c8562de124e1a07f2939815fa0e9b42fba Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Fri, 1 Feb 2008 10:15:18 +0000
 Subject: [PATCH] xen dom0: Minor coding style issue in ISA mapping code
@@ -9,10 +9,10 @@
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index a11607a..5719b8f 100644
+index b7ea919..4bfcd56 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -873,7 +873,7 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
+@@ -889,7 +889,7 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
  		 * If we're dom0, then 1:1 map the ISA machine addresses
  		 * into the kernel's address space.
  		 */
@@ -20,7 +20,7 @@
 +		for (i = ISA_START_ADDRESS; i < ISA_END_ADDRESS; i += PAGE_SIZE)
  			set_pte_mfn(PAGE_OFFSET + i, PFN_DOWN(i), PAGE_KERNEL);
  
- 		reserve_bootmem(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS);
+ 		reserve_bootmem(ISA_START_ADDRESS,
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0051-xen-dom0-Use-i-PAGE_SHIFT-instead-of-PAGE_DOWN-i.patch:

Index: linux-2.6-xen-0051-xen-dom0-Use-i-PAGE_SHIFT-instead-of-PAGE_DOWN-i.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0051-xen-dom0-Use-i-PAGE_SHIFT-instead-of-PAGE_DOWN-i.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0051-xen-dom0-Use-i-PAGE_SHIFT-instead-of-PAGE_DOWN-i.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0051-xen-dom0-Use-i-PAGE_SHIFT-instead-of-PAGE_DOWN-i.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From db439542c5ff9f912e61e7420f2c072ae80bd8ee Mon Sep 17 00:00:00 2001
+From 4bd93e639b1c5a52601cc07a13e711ae66b94383 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Fri, 1 Feb 2008 10:17:05 +0000
 Subject: [PATCH] xen dom0: Use i >> PAGE_SHIFT instead of PAGE_DOWN(i)
@@ -14,18 +14,18 @@
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 5719b8f..363a4f5 100644
+index 4bfcd56..3c1439b 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -874,7 +874,7 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
+@@ -890,7 +890,7 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
  		 * into the kernel's address space.
  		 */
  		for (i = ISA_START_ADDRESS; i < ISA_END_ADDRESS; i += PAGE_SIZE)
 -			set_pte_mfn(PAGE_OFFSET + i, PFN_DOWN(i), PAGE_KERNEL);
 +			set_pte_mfn(PAGE_OFFSET + i, i >> PAGE_SHIFT, PAGE_KERNEL);
  
- 		reserve_bootmem(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS);
- 		printk(KERN_INFO "Xen: setup ISA identity maps\n");
+ 		reserve_bootmem(ISA_START_ADDRESS,
+ 				ISA_END_ADDRESS - ISA_START_ADDRESS,
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0052-xen-dom0-Match-up-set_pte_mfn-prototype-with-the.patch:

Index: linux-2.6-xen-0052-xen-dom0-Match-up-set_pte_mfn-prototype-with-the.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0052-xen-dom0-Match-up-set_pte_mfn-prototype-with-the.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0052-xen-dom0-Match-up-set_pte_mfn-prototype-with-the.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0052-xen-dom0-Match-up-set_pte_mfn-prototype-with-the.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 9a2e987c49c2907fd32aa49b6c3ef02abef3e189 Mon Sep 17 00:00:00 2001
+From e787a7e1fafba1fcb14782f9a04a5a54040a4ae0 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Fri, 1 Feb 2008 10:19:02 +0000
 Subject: [PATCH] xen dom0: Match up set_pte_mfn() prototype with the impl
@@ -22,5 +22,5 @@
  void xen_set_pte(pte_t *ptep, pte_t pteval);
  void xen_set_pte_at(struct mm_struct *mm, unsigned long addr,
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0053-xen-dom0-Reserve-ISA-address-space-earlier.patch:

Index: linux-2.6-xen-0053-xen-dom0-Reserve-ISA-address-space-earlier.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0053-xen-dom0-Reserve-ISA-address-space-earlier.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0053-xen-dom0-Reserve-ISA-address-space-earlier.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0053-xen-dom0-Reserve-ISA-address-space-earlier.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From b5ccee984ae104a390623e1b7caf0502c488316d Mon Sep 17 00:00:00 2001
+From 74bc6cda3c7427d8265c6884be5f4b2391f6bc20 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Fri, 1 Feb 2008 15:08:26 +0000
 Subject: [PATCH] xen dom0: Reserve ISA address space earlier
@@ -10,14 +10,14 @@
 
 Signed-off-by: Mark McLoughlin <markmc at redhat.com>
 ---
- arch/x86/xen/enlighten.c |    8 +++++++-
- 1 files changed, 7 insertions(+), 1 deletions(-)
+ arch/x86/xen/enlighten.c |   12 +++++++++---
+ 1 files changed, 9 insertions(+), 3 deletions(-)
 
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 363a4f5..0866c20 100644
+index 3c1439b..c218533 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -794,6 +794,13 @@ static __init void xen_pagetable_setup_start(pgd_t *base)
+@@ -803,6 +803,15 @@ static __init void xen_pagetable_setup_start(pgd_t *base)
  	 */
  	memcpy(base, xen_pgd, PTRS_PER_PGD * sizeof(pgd_t));
  
@@ -26,19 +26,23 @@
 +	 * so that pmd/pte pages don't get allocated there.
 +	 */
 +	if (is_initial_xendomain())
-+		reserve_bootmem(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS);
++		reserve_bootmem(ISA_START_ADDRESS,
++				ISA_END_ADDRESS - ISA_START_ADDRESS,
++				BOOTMEM_DEFAULT);
 +
  	if (PTRS_PER_PMD > 1) {
  		int i;
  		/*
-@@ -876,7 +883,6 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
+@@ -892,9 +901,6 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
  		for (i = ISA_START_ADDRESS; i < ISA_END_ADDRESS; i += PAGE_SIZE)
  			set_pte_mfn(PAGE_OFFSET + i, i >> PAGE_SHIFT, PAGE_KERNEL);
  
--		reserve_bootmem(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS);
+-		reserve_bootmem(ISA_START_ADDRESS,
+-				ISA_END_ADDRESS - ISA_START_ADDRESS,
+-				BOOTMEM_DEFAULT);
  		printk(KERN_INFO "Xen: setup ISA identity maps\n");
  
  		/*
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0054-xen-Add-empty-xenctrl-module.patch:

Index: linux-2.6-xen-0054-xen-Add-empty-xenctrl-module.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0054-xen-Add-empty-xenctrl-module.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0054-xen-Add-empty-xenctrl-module.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0054-xen-Add-empty-xenctrl-module.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From db5a74a12204baa30dde29449d21e6b39b7923ce Mon Sep 17 00:00:00 2001
+From b5435f6f0d78d85cd98d6950d3879d02abd59233 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 4 Feb 2008 08:30:37 +0000
 Subject: [PATCH] xen: Add empty xenctrl module
@@ -18,10 +18,10 @@
  create mode 100644 drivers/xen/xenctrl/main.c
 
 diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig
-index fbfa55c..7f01d14 100644
+index 4d5f264..be90b09 100644
 --- a/arch/x86/xen/Kconfig
 +++ b/arch/x86/xen/Kconfig
-@@ -10,3 +10,14 @@ config XEN
+@@ -11,3 +11,14 @@ config XEN
  	  This is the Linux Xen port.  Enabling this will allow the
  	  kernel to boot in a paravirtualized environment under the
  	  Xen hypervisor.
@@ -124,5 +124,5 @@
 +
 +MODULE_LICENSE("Dual BSD/GPL");
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0055-xen-dom0-Add-proc-xen-capabilities.patch:

Index: linux-2.6-xen-0055-xen-dom0-Add-proc-xen-capabilities.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0055-xen-dom0-Add-proc-xen-capabilities.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0055-xen-dom0-Add-proc-xen-capabilities.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0055-xen-dom0-Add-proc-xen-capabilities.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From f1a5bf7d4214dc41d73923d6611e6a4c02069668 Mon Sep 17 00:00:00 2001
+From 446ffb0d67d986787a11aed90ac09a096faa70c2 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 4 Feb 2008 09:16:51 +0000
 Subject: [PATCH] xen dom0: Add /proc/xen/capabilities
@@ -184,5 +184,5 @@
 +int capabilities_create_proc_entry(void);
 +void capabilities_remove_proc_entry(void);
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0056-xen-Add-proc-xen-privcmd.patch:

Index: linux-2.6-xen-0056-xen-Add-proc-xen-privcmd.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0056-xen-Add-proc-xen-privcmd.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0056-xen-Add-proc-xen-privcmd.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0056-xen-Add-proc-xen-privcmd.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 40595817e26b1683c52a7ce32741c234628e5d42 Mon Sep 17 00:00:00 2001
+From c9404450f0c13f4a822438dafe0b44f1f4605d78 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 4 Feb 2008 08:24:57 +0000
 Subject: [PATCH] xen: Add /proc/xen/privcmd
@@ -288,5 +288,5 @@
 +
 +#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0057-xen-dom0-Add-proc-xen-xsd_-port-kva.patch:

Index: linux-2.6-xen-0057-xen-dom0-Add-proc-xen-xsd_-port-kva.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0057-xen-dom0-Add-proc-xen-xsd_-port-kva.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0057-xen-dom0-Add-proc-xen-xsd_-port-kva.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0057-xen-dom0-Add-proc-xen-xsd_-port-kva.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 438d932b47881bc861926c22988d1fa0e4ba58f6 Mon Sep 17 00:00:00 2001
+From cbfc983d4b78f9e2539649319eef09e8501f53bc Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 4 Feb 2008 10:29:28 +0000
 Subject: [PATCH] xen dom0: Add /proc/xen/xsd_{port,kva}
@@ -236,5 +236,5 @@
 +
  #endif /* _XEN_XENBUS_H */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0058-xen-Add-proc-xen-xenbus.patch:

Index: linux-2.6-xen-0058-xen-Add-proc-xen-xenbus.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0058-xen-Add-proc-xen-xenbus.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0058-xen-Add-proc-xen-xenbus.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0058-xen-Add-proc-xen-xenbus.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 1fb0cf23ef60c29951fd1387781a7cc09b8789cd Mon Sep 17 00:00:00 2001
+From de8005df99fb6de6ce127dab21331b260025d6f4 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 4 Feb 2008 22:04:36 +0000
 Subject: [PATCH] xen: Add /proc/xen/xenbus
@@ -487,5 +487,5 @@
 +int xenbus_create_proc_entry(void);
 +void xenbus_remove_proc_entry(void);
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0059-xen-Add-dev-xen-evtchn.patch:

Index: linux-2.6-xen-0059-xen-Add-dev-xen-evtchn.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0059-xen-Add-dev-xen-evtchn.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0059-xen-Add-dev-xen-evtchn.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0059-xen-Add-dev-xen-evtchn.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From a45207a87b146129944fa96605c00458a0bb2b6d Mon Sep 17 00:00:00 2001
+From 9f1fa5f5d6903e5466d7246d3b32b440208aa256 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 4 Feb 2008 08:25:31 +0000
 Subject: [PATCH] xen: Add /dev/xen/evtchn
@@ -24,7 +24,7 @@
  create mode 100644 include/xen/sys/evtchn.h
 
 diff --git a/arch/x86/xen/events.c b/arch/x86/xen/events.c
-index ca4912e..abce636 100644
+index 75d9ff5..9ed5b3e 100644
 --- a/arch/x86/xen/events.c
 +++ b/arch/x86/xen/events.c
 @@ -169,11 +169,12 @@ static inline unsigned int cpu_from_evtchn(unsigned int evtchn)
@@ -89,9 +89,9 @@
  
  /*
   * Search the CPUs pending events bitmasks.  For each one found, map
-@@ -503,6 +522,9 @@ fastcall void xen_evtchn_do_upcall(struct pt_regs *regs)
+@@ -503,6 +522,9 @@ void xen_evtchn_do_upcall(struct pt_regs *regs)
  			if (irq != -1) {
- 				regs->orig_eax = ~irq;
+ 				regs->orig_ax = ~irq;
  				do_IRQ(regs);
 +			} else {
 +				atomic_notifier_call_chain(&evtchn_upcall_notifier,
@@ -99,7 +99,7 @@
  			}
  		}
  	}
-@@ -515,7 +537,7 @@ fastcall void xen_evtchn_do_upcall(struct pt_regs *regs)
+@@ -515,7 +537,7 @@ void xen_evtchn_do_upcall(struct pt_regs *regs)
  }
  
  /* Rebind an evtchn so that it gets delivered to a specific cpu */
@@ -852,5 +852,5 @@
 +
 +#endif /* __LINUX_PUBLIC_EVTCHN_H__ */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0060-xen-Add-__init-__exit-notations-to-xenctrl-function.patch:

Index: linux-2.6-xen-0060-xen-Add-__init-__exit-notations-to-xenctrl-function.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0060-xen-Add-__init-__exit-notations-to-xenctrl-function.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0060-xen-Add-__init-__exit-notations-to-xenctrl-function.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0060-xen-Add-__init-__exit-notations-to-xenctrl-function.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From c4d55e6c69c13f2e6d94763019d24ea02f7ce1ea Mon Sep 17 00:00:00 2001
+From 08f26fd9b7584edf7d4f2c272dff3c58642db2d7 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Thu, 7 Feb 2008 15:37:30 +0000
 Subject: [PATCH] xen: Add __init/__exit notations to xenctrl function
@@ -173,5 +173,5 @@
  	remove_proc_entry("xen/xsd_port", NULL);
  	remove_proc_entry("xen/xsd_kva", NULL);
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0061-xen-Add-Xen-s-sys-hypervisor-interface.patch:

Index: linux-2.6-xen-0061-xen-Add-Xen-s-sys-hypervisor-interface.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0061-xen-Add-Xen-s-sys-hypervisor-interface.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0061-xen-Add-Xen-s-sys-hypervisor-interface.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0061-xen-Add-Xen-s-sys-hypervisor-interface.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 85917e55d3c4020d09ea4adfc0f310932e703637 Mon Sep 17 00:00:00 2001
+From dd1729d436512c6af63d893dfeef05469e85fa88 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Thu, 7 Feb 2008 15:32:28 +0000
 Subject: [PATCH] xen: Add Xen's /sys/hypervisor interface
@@ -42,10 +42,10 @@
  create mode 100644 drivers/xen/xenctrl/sysfs.c
 
 diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig
-index 7f01d14..f2974af 100644
+index be90b09..c4e8590 100644
 --- a/arch/x86/xen/Kconfig
 +++ b/arch/x86/xen/Kconfig
-@@ -13,8 +13,9 @@ config XEN
+@@ -14,8 +14,9 @@ config XEN
  
  config XENCTRL
  	tristate "Xen's user space control interfaces"
@@ -93,7 +93,7 @@
  	xsd_remove_proc_entry();
 diff --git a/drivers/xen/xenctrl/sysfs.c b/drivers/xen/xenctrl/sysfs.c
 new file mode 100644
-index 0000000..3b38aaf
+index 0000000..8cbf4d6
 --- /dev/null
 +++ b/drivers/xen/xenctrl/sysfs.c
 @@ -0,0 +1,349 @@
@@ -114,13 +114,13 @@
 +#include "xenctrl.h"
 +
 +#define HYPERVISOR_ATTR_RO(_name) \
-+static struct subsys_attribute _name##_attr = __ATTR_RO(_name)
++static struct kobj_attribute _name##_attr = __ATTR_RO(_name)
 +
 +#define HYPERVISOR_ATTR_RW(_name) \
-+static struct subsys_attribute _name##_attr = \
++static struct kobj_attribute _name##_attr = \
 +	__ATTR(_name, 0644, _name##_show, _name##_store)
 +
-+static ssize_t type_show(struct kset *kset, char *buffer)
++static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	return sprintf(buffer, "xen\n");
 +}
@@ -129,15 +129,15 @@
 +
 +static int __init xen_sysfs_type_init(void)
 +{
-+	return sysfs_create_file(&hypervisor_subsys.kobj, &type_attr.attr);
++	return sysfs_create_file(hypervisor_kobj, &type_attr.attr);
 +}
 +
 +static void xen_sysfs_type_destroy(void)
 +{
-+	sysfs_remove_file(&hypervisor_subsys.kobj, &type_attr.attr);
++	sysfs_remove_file(hypervisor_kobj, &type_attr.attr);
 +}
 +
-+static ssize_t major_show(struct kset *kset, char *buffer)
++static ssize_t major_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	int version;
 +
@@ -150,7 +150,7 @@
 +
 +HYPERVISOR_ATTR_RO(major);
 +
-+static ssize_t minor_show(struct kset *kset, char *buffer)
++static ssize_t minor_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	int version;
 +
@@ -163,7 +163,7 @@
 +
 +HYPERVISOR_ATTR_RO(minor);
 +
-+static ssize_t extra_show(struct kset *kset, char *buffer)
++static ssize_t extra_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	int ret;
 +	struct xen_extraversion extra;
@@ -191,15 +191,15 @@
 +
 +static int __init xen_sysfs_version_init(void)
 +{
-+	return sysfs_create_group(&hypervisor_subsys.kobj, &version_group);
++	return sysfs_create_group(hypervisor_kobj, &version_group);
 +}
 +
 +static void xen_sysfs_version_destroy(void)
 +{
-+	sysfs_remove_group(&hypervisor_subsys.kobj, &version_group);
++	sysfs_remove_group(hypervisor_kobj, &version_group);
 +}
 +
-+static ssize_t uuid_show(struct kset *kset, char *buffer)
++static ssize_t uuid_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	char *vm, *val;
 +	int ret;
@@ -226,15 +226,15 @@
 +
 +static int __init xen_sysfs_uuid_init(void)
 +{
-+	return sysfs_create_file(&hypervisor_subsys.kobj, &uuid_attr.attr);
++	return sysfs_create_file(hypervisor_kobj, &uuid_attr.attr);
 +}
 +
 +static void xen_sysfs_uuid_destroy(void)
 +{
-+	sysfs_remove_file(&hypervisor_subsys.kobj, &uuid_attr.attr);
++	sysfs_remove_file(hypervisor_kobj, &uuid_attr.attr);
 +}
 +
-+static ssize_t compiler_show(struct kset *kset, char *buffer)
++static ssize_t compiler_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	struct xen_compile_info info;
 +	int ret;
@@ -248,7 +248,7 @@
 +
 +HYPERVISOR_ATTR_RO(compiler);
 +
-+static ssize_t compiled_by_show(struct kset *kset, char *buffer)
++static ssize_t compiled_by_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	struct xen_compile_info info;
 +	int ret;
@@ -262,7 +262,7 @@
 +
 +HYPERVISOR_ATTR_RO(compiled_by);
 +
-+static ssize_t compile_date_show(struct kset *kset, char *buffer)
++static ssize_t compile_date_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	struct xen_compile_info info;
 +	int ret;
@@ -290,17 +290,17 @@
 +
 +static int __init xen_compilation_init(void)
 +{
-+	return sysfs_create_group(&hypervisor_subsys.kobj,
++	return sysfs_create_group(hypervisor_kobj,
 +				  &xen_compilation_group);
 +}
 +
 +static void xen_compilation_destroy(void)
 +{
-+	sysfs_remove_group(&hypervisor_subsys.kobj,
++	sysfs_remove_group(hypervisor_kobj,
 +			   &xen_compilation_group);
 +}
 +
-+static ssize_t capabilities_show(struct kset *kset, char *buffer)
++static ssize_t capabilities_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	struct xen_capabilities_info *caps;
 +	int ret;
@@ -322,7 +322,7 @@
 +
 +HYPERVISOR_ATTR_RO(capabilities);
 +
-+static ssize_t changeset_show(struct kset *kset, char *buffer)
++static ssize_t changeset_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	struct xen_changeset_info cset;
 +	int ret;
@@ -336,7 +336,7 @@
 +
 +HYPERVISOR_ATTR_RO(changeset);
 +
-+static ssize_t virtual_start_show(struct kset *kset, char *buffer)
++static ssize_t virtual_start_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	struct xen_platform_parameters parms;
 +	int ret;
@@ -350,7 +350,7 @@
 +
 +HYPERVISOR_ATTR_RO(virtual_start);
 +
-+static ssize_t pagesize_show(struct kset *kset, char *buffer)
++static ssize_t pagesize_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	int ret;
 +
@@ -363,7 +363,7 @@
 +
 +HYPERVISOR_ATTR_RO(pagesize);
 +
-+static ssize_t writable_pt_show(struct kset *kset, char *buffer)
++static ssize_t writable_pt_show(struct kobject *kobj, struct kobj_attribute *attr, char *buffer)
 +{
 +	struct xen_feature_info info;
 +	int ret;
@@ -395,13 +395,13 @@
 +
 +static int __init xen_properties_init(void)
 +{
-+	return sysfs_create_group(&hypervisor_subsys.kobj,
++	return sysfs_create_group(hypervisor_kobj,
 +				  &xen_properties_group);
 +}
 +
 +static void xen_properties_destroy(void)
 +{
-+	sysfs_remove_group(&hypervisor_subsys.kobj, &xen_properties_group);
++	sysfs_remove_group(hypervisor_kobj, &xen_properties_group);
 +}
 +
 +int __init sys_hypervisor_init(void)
@@ -476,5 +476,5 @@
 +
  #endif /* __XEN_PUBLIC_VERSION_H__ */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0062-xen-dom0-Add-basic-proc-xen-balloon.patch:

Index: linux-2.6-xen-0062-xen-dom0-Add-basic-proc-xen-balloon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0062-xen-dom0-Add-basic-proc-xen-balloon.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0062-xen-dom0-Add-basic-proc-xen-balloon.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0062-xen-dom0-Add-basic-proc-xen-balloon.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 088f8ea70761142657d817dbe99eda0a9c7cb4c7 Mon Sep 17 00:00:00 2001
+From 932b1a024c545e6270519cf1a99d60c327cbe543 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Thu, 7 Feb 2008 19:11:54 +0000
 Subject: [PATCH] xen dom0: Add basic /proc/xen/balloon
@@ -158,5 +158,5 @@
   */
  int evtchn_init(void) __init;
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch:

Index: linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0063-xen-dom0-Re-work-privcmd_ioctl-a-little.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 0cd0bb4891ba5e4dba8229752d9dd53119a45fd7 Mon Sep 17 00:00:00 2001
+From 7320807dcfd65033de25458fb768cfd017f38ec3 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Mon, 11 Feb 2008 11:23:54 +0000
 Subject: [PATCH] xen dom0: Re-work privcmd_ioctl() a little
@@ -50,5 +50,5 @@
  
  static const struct file_operations privcmd_file_ops = {
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch:

Index: linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0064-xen-dom0-Add-IOCTL_PRIVCMD_MMAP.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From a8c47f2dc1818de8fcb7f9add8446678456c9d56 Mon Sep 17 00:00:00 2001
+From 0dbad6cc5dc6b5f28c61c140ed5f16779f8b9692 Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Thu, 7 Feb 2008 19:05:10 +0000
 Subject: [PATCH] xen dom0: Add IOCTL_PRIVCMD_MMAP
@@ -12,9 +12,9 @@
 Signed-off-by: Mark McLoughlin <markmc at redhat.com>
 ---
  arch/x86/xen/ioremap.c           |   30 +++++++
- drivers/xen/xenctrl/privcmd.c    |  176 +++++++++++++++++++++++++++++++++++++-
+ drivers/xen/xenctrl/privcmd.c    |  177 +++++++++++++++++++++++++++++++++++++-
  include/asm-x86/xen/hypervisor.h |    4 +
- 3 files changed, 207 insertions(+), 3 deletions(-)
+ 3 files changed, 208 insertions(+), 3 deletions(-)
 
 diff --git a/arch/x86/xen/ioremap.c b/arch/x86/xen/ioremap.c
 index 70f77bd..e963ff9 100644
@@ -55,14 +55,15 @@
 +}
 +EXPORT_SYMBOL(xen_map_foreign_range);
 diff --git a/drivers/xen/xenctrl/privcmd.c b/drivers/xen/xenctrl/privcmd.c
-index 58c4b83..5622e87 100644
+index 58c4b83..0b3526e 100644
 --- a/drivers/xen/xenctrl/privcmd.c
 +++ b/drivers/xen/xenctrl/privcmd.c
-@@ -33,8 +33,156 @@
+@@ -33,8 +33,157 @@
  #include <linux/proc_fs.h>
  #include <linux/module.h>
  #include <linux/uaccess.h>
 +#include <linux/mm.h>
++#include <linux/sched.h>
  #include <asm/xen/hypervisor.h>
  #include <xen/sys/privcmd.h>
 +#include <xen/features.h>
@@ -215,7 +216,7 @@
  
  static long privcmd_ioctl(struct file *file, unsigned int cmd,
  			  unsigned long arg)
-@@ -49,9 +197,30 @@ static long privcmd_ioctl(struct file *file, unsigned int cmd,
+@@ -49,9 +198,30 @@ static long privcmd_ioctl(struct file *file, unsigned int cmd,
  		return privcmd_hypercall(&cmd);
  	}
  
@@ -249,7 +250,7 @@
  	default:
  		return -EINVAL;
  	}
-@@ -59,6 +228,7 @@ static long privcmd_ioctl(struct file *file, unsigned int cmd,
+@@ -59,6 +229,7 @@ static long privcmd_ioctl(struct file *file, unsigned int cmd,
  
  static const struct file_operations privcmd_file_ops = {
  	.unlocked_ioctl = privcmd_ioctl,
@@ -271,5 +272,5 @@
 +
  #endif /* __HYPERVISOR_H__ */
 -- 
-1.5.4.2
+1.5.4.1
 

linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch:

Index: linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch	22 Feb 2008 13:35:30 -0000	1.1.2.1
+++ linux-2.6-xen-0065-xen-dom0-Add-a-vmlinuz-target.patch	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1,4 +1,4 @@
-From 578e490d7760993e9a20633e1770b04d7a10ab61 Mon Sep 17 00:00:00 2001
+From 7cfb5ded09b2eb9d8ecff7d7bf913905eff52cbf Mon Sep 17 00:00:00 2001
 From: Mark McLoughlin <markmc at redhat.com>
 Date: Tue, 19 Feb 2008 15:34:32 +0000
 Subject: [PATCH] xen dom0: Add a vmlinuz target
@@ -12,15 +12,16 @@
 
 Signed-off-by: Mark McLoughlin <markmc at redhat.com>
 ---
- arch/x86/Makefile_32   |    9 +++++++++
- arch/x86/boot/Makefile |    9 +++++++++
- 2 files changed, 18 insertions(+), 0 deletions(-)
+ arch/x86/Makefile        |    9 +++++++++
+ arch/x86/boot/.gitignore |    1 +
+ arch/x86/boot/Makefile   |    9 +++++++++
+ 3 files changed, 19 insertions(+), 0 deletions(-)
 
-diff --git a/arch/x86/Makefile_32 b/arch/x86/Makefile_32
-index 625090d..0865b07 100644
---- a/arch/x86/Makefile_32
-+++ b/arch/x86/Makefile_32
-@@ -130,6 +130,15 @@ boot := arch/x86/boot
+diff --git a/arch/x86/Makefile b/arch/x86/Makefile
+index f1e739a..14a752e 100644
+--- a/arch/x86/Makefile
++++ b/arch/x86/Makefile
+@@ -206,6 +206,15 @@ boot := arch/x86/boot
  PHONY += zImage bzImage compressed zlilo bzlilo \
           zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install
  
@@ -33,11 +34,20 @@
 +	$(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE)
 +endif
 +
+ # Default kernel to build
  all: bzImage
  
- # KBUILD_IMAGE specify target image being built
+diff --git a/arch/x86/boot/.gitignore b/arch/x86/boot/.gitignore
+index b1bdc4c..35e7956 100644
+--- a/arch/x86/boot/.gitignore
++++ b/arch/x86/boot/.gitignore
+@@ -5,3 +5,4 @@ setup.bin
+ setup.elf
+ cpustr.h
+ mkcpustr
++vmlinuz
 diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
-index 7a3116c..6f1b455 100644
+index f88458e..61bba92 100644
 --- a/arch/x86/boot/Makefile
 +++ b/arch/x86/boot/Makefile
 @@ -26,6 +26,7 @@ SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
@@ -45,10 +55,10 @@
  
  targets		:= vmlinux.bin setup.bin setup.elf zImage bzImage
 +targets		+= vmlinuz vmlinux-stripped
- subdir- 	:= compressed
+ subdir-		:= compressed
  
- setup-y		+= a20.o apm.o cmdline.o copy.o cpu.o cpucheck.o edd.o
-@@ -97,6 +98,14 @@ $(obj)/setup.bin: $(obj)/setup.elf FORCE
+ setup-y		+= a20.o cmdline.o copy.o cpu.o cpucheck.o edd.o
+@@ -105,6 +106,14 @@ $(obj)/setup.bin: $(obj)/setup.elf FORCE
  $(obj)/compressed/vmlinux: FORCE
  	$(Q)$(MAKE) $(build)=$(obj)/compressed IMAGE_OFFSET=$(IMAGE_OFFSET) $@
  
@@ -61,8 +71,8 @@
 +	$(call if_changed,objcopy)
 +
  # Set this if you want to pass append arguments to the zdisk/fdimage/isoimage kernel
- FDARGS = 
+ FDARGS =
  # Set this if you want an initrd included with the zdisk/fdimage/isoimage kernel
 -- 
-1.5.4.2
+1.5.4.1
 


Index: mirrors
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/mirrors,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- mirrors	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ mirrors	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -2,3 +2,4 @@
 http://ftp.kernel.org/pub/linux/kernel/v2.6/
 http://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots/old/
 http://ftp.kernel.org/pub/linux/kernel/v2.6/testing/
+http://ftp.kernel.org/pub/linux/kernel/v2.6/stable-review/

nouveau-drm.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.2.8.1 -r 1.2.8.2 nouveau-drm.patch
Index: nouveau-drm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/nouveau-drm.patch,v
retrieving revision 1.2.8.1
retrieving revision 1.2.8.2
diff -u -r1.2.8.1 -r1.2.8.2
--- nouveau-drm.patch	18 Feb 2008 16:55:17 -0000	1.2.8.1
+++ nouveau-drm.patch	29 Feb 2008 18:58:24 -0000	1.2.8.2
@@ -1,14 +1,170 @@
-From f4e9f548d49b0bc9fbbfbee635f96e79a2f472ae Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied at voynix.(none)>
-Date: Thu, 6 Sep 2007 00:10:19 +1000
-Subject: [PATCH] drm: add nouveau latest code
+From 97feb40c0d41369a3235a192b3db7d472e65bea8 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied at redhat.com>
+Date: Fri, 29 Feb 2008 15:58:37 +1000
+Subject: [PATCH] nouveau: rebased master from git
 
 ---
-diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/drm_bufs.c linux-2.6.23.noarch/drivers/char/drm/drm_bufs.c
---- linux-2.6.23.noarch.old/drivers/char/drm/drm_bufs.c	2007-11-26 21:18:35.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/char/drm/drm_bufs.c	2007-11-26 21:16:13.000000000 -0500
-@@ -49,8 +49,8 @@ unsigned long drm_get_resource_len(struc
+ drivers/char/drm/Kconfig            |    7 +
+ drivers/char/drm/Makefile           |   12 +
+ drivers/char/drm/drmP.h             |    4 +-
+ drivers/char/drm/drm_bufs.c         |    5 +-
+ drivers/char/drm/drm_drv.c          |    4 +
+ drivers/char/drm/drm_irq.c          |    3 +-
+ drivers/char/drm/drm_pciids.h       |  262 ++++
+ drivers/char/drm/nouveau_buffer.c   |  293 +++++
+ drivers/char/drm/nouveau_dma.c      |  172 +++
+ drivers/char/drm/nouveau_dma.h      |   96 ++
+ drivers/char/drm/nouveau_drm.h      |  166 +++
+ drivers/char/drm/nouveau_drv.c      |  108 ++
+ drivers/char/drm/nouveau_drv.h      |  602 ++++++++++
+ drivers/char/drm/nouveau_fence.c    |  120 ++
+ drivers/char/drm/nouveau_fifo.c     |  590 ++++++++++
+ drivers/char/drm/nouveau_ioc32.c    |   72 ++
+ drivers/char/drm/nouveau_irq.c      |  477 ++++++++
+ drivers/char/drm/nouveau_mem.c      |  674 +++++++++++
+ drivers/char/drm/nouveau_notifier.c |  165 +++
+ drivers/char/drm/nouveau_object.c   | 1148 ++++++++++++++++++
+ drivers/char/drm/nouveau_reg.h      |  586 +++++++++
+ drivers/char/drm/nouveau_sgdma.c    |  341 ++++++
+ drivers/char/drm/nouveau_state.c    |  694 +++++++++++
+ drivers/char/drm/nouveau_swmthd.c   |  191 +++
+ drivers/char/drm/nouveau_swmthd.h   |   33 +
+ drivers/char/drm/nv04_fb.c          |   23 +
+ drivers/char/drm/nv04_fifo.c        |  138 +++
+ drivers/char/drm/nv04_graph.c       |  516 ++++++++
+ drivers/char/drm/nv04_instmem.c     |  159 +++
+ drivers/char/drm/nv04_mc.c          |   35 +
+ drivers/char/drm/nv04_timer.c       |   44 +
+ drivers/char/drm/nv10_fb.c          |   25 +
+ drivers/char/drm/nv10_fifo.c        |  169 +++
+ drivers/char/drm/nv10_graph.c       |  871 ++++++++++++++
+ drivers/char/drm/nv20_graph.c       |  889 ++++++++++++++
+ drivers/char/drm/nv40_fb.c          |   62 +
+ drivers/char/drm/nv40_fifo.c        |  199 ++++
+ drivers/char/drm/nv40_graph.c       | 2225 +++++++++++++++++++++++++++++++++++
+ drivers/char/drm/nv40_mc.c          |   38 +
+ drivers/char/drm/nv50_fifo.c        |  339 ++++++
+ drivers/char/drm/nv50_graph.c       |  363 ++++++
+ drivers/char/drm/nv50_instmem.c     |  323 +++++
+ drivers/char/drm/nv50_mc.c          |   43 +
+ 43 files changed, 13282 insertions(+), 4 deletions(-)
+ create mode 100644 drivers/char/drm/nouveau_buffer.c
+ create mode 100644 drivers/char/drm/nouveau_dma.c
+ create mode 100644 drivers/char/drm/nouveau_dma.h
+ create mode 100644 drivers/char/drm/nouveau_drm.h
+ create mode 100644 drivers/char/drm/nouveau_drv.c
+ create mode 100644 drivers/char/drm/nouveau_drv.h
+ create mode 100644 drivers/char/drm/nouveau_fence.c
+ create mode 100644 drivers/char/drm/nouveau_fifo.c
+ create mode 100644 drivers/char/drm/nouveau_ioc32.c
+ create mode 100644 drivers/char/drm/nouveau_irq.c
+ create mode 100644 drivers/char/drm/nouveau_mem.c
+ create mode 100644 drivers/char/drm/nouveau_notifier.c
+ create mode 100644 drivers/char/drm/nouveau_object.c
+ create mode 100644 drivers/char/drm/nouveau_reg.h
+ create mode 100644 drivers/char/drm/nouveau_sgdma.c
+ create mode 100644 drivers/char/drm/nouveau_state.c
+ create mode 100644 drivers/char/drm/nouveau_swmthd.c
+ create mode 100644 drivers/char/drm/nouveau_swmthd.h
+ create mode 100644 drivers/char/drm/nv04_fb.c
+ create mode 100644 drivers/char/drm/nv04_fifo.c
+ create mode 100644 drivers/char/drm/nv04_graph.c
+ create mode 100644 drivers/char/drm/nv04_instmem.c
+ create mode 100644 drivers/char/drm/nv04_mc.c
+ create mode 100644 drivers/char/drm/nv04_timer.c
+ create mode 100644 drivers/char/drm/nv10_fb.c
+ create mode 100644 drivers/char/drm/nv10_fifo.c
+ create mode 100644 drivers/char/drm/nv10_graph.c
+ create mode 100644 drivers/char/drm/nv20_graph.c
+ create mode 100644 drivers/char/drm/nv40_fb.c
+ create mode 100644 drivers/char/drm/nv40_fifo.c
+ create mode 100644 drivers/char/drm/nv40_graph.c
+ create mode 100644 drivers/char/drm/nv40_mc.c
+ create mode 100644 drivers/char/drm/nv50_fifo.c
+ create mode 100644 drivers/char/drm/nv50_graph.c
+ create mode 100644 drivers/char/drm/nv50_instmem.c
+ create mode 100644 drivers/char/drm/nv50_mc.c
+
+diff --git a/drivers/char/drm/Kconfig b/drivers/char/drm/Kconfig
+index 610d6fd..6b98529 100644
+--- a/drivers/char/drm/Kconfig
++++ b/drivers/char/drm/Kconfig
+@@ -105,3 +105,10 @@ config DRM_SAVAGE
+ 	help
+ 	  Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
+ 	  chipset. If M is selected the module will be called savage.
++
++config DRM_NOUVEAU
++	tristate "Nvidia video cards"
++	depends on DRM
++	help
++	  Choose this for nvidia open source 3d driver
++
+diff --git a/drivers/char/drm/Makefile b/drivers/char/drm/Makefile
+index 85c4f9e..721548c 100644
+--- a/drivers/char/drm/Makefile
++++ b/drivers/char/drm/Makefile
+@@ -15,6 +15,16 @@ mga-objs    := mga_drv.o mga_dma.o mga_state.o mga_warp.o mga_irq.o
+ i810-objs   := i810_drv.o i810_dma.o
+ i830-objs   := i830_drv.o i830_dma.o i830_irq.o
+ i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o i915_fence.o i915_buffer.o
++nouveau-objs := nouveau_drv.o nouveau_state.o nouveau_fifo.o nouveau_mem.o \
++		nouveau_object.o nouveau_irq.o nouveau_notifier.o nouveau_swmthd.o \
++		nouveau_sgdma.o nouveau_dma.o nouveau_buffer.o nouveau_fence.o \
++		nv04_timer.o \
++		nv04_mc.o nv40_mc.o nv50_mc.o \
++		nv04_fb.o nv10_fb.o nv40_fb.o \
++		nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o \
++		nv04_graph.o nv10_graph.o nv20_graph.o \
++		nv40_graph.o nv50_graph.o \
++		nv04_instmem.o nv50_instmem.o
+ radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o r300_cmdbuf.o
+ sis-objs    := sis_drv.o sis_mm.o
+ savage-objs := savage_drv.o savage_bci.o savage_state.o
+@@ -26,6 +36,7 @@ radeon-objs += radeon_ioc32.o
+ mga-objs    += mga_ioc32.o
+ r128-objs   += r128_ioc32.o
+ i915-objs   += i915_ioc32.o
++nouveau-objs   += nouveau_ioc32.o
+ endif
  
+ obj-$(CONFIG_DRM)	+= drm.o
+@@ -36,6 +47,7 @@ obj-$(CONFIG_DRM_MGA)	+= mga.o
+ obj-$(CONFIG_DRM_I810)	+= i810.o
+ obj-$(CONFIG_DRM_I830)	+= i830.o
+ obj-$(CONFIG_DRM_I915)  += i915.o
++obj-$(CONFIG_DRM_NOUVEAU)   += nouveau.o
+ obj-$(CONFIG_DRM_SIS)   += sis.o
+ obj-$(CONFIG_DRM_SAVAGE)+= savage.o
+ obj-$(CONFIG_DRM_VIA)	+=via.o
+diff --git a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h
+index bd41621..a437ac2 100644
+--- a/drivers/char/drm/drmP.h
++++ b/drivers/char/drm/drmP.h
+@@ -1030,7 +1030,8 @@ extern unsigned long drm_get_resource_start(struct drm_device *dev,
+ 					    unsigned int resource);
+ extern unsigned long drm_get_resource_len(struct drm_device *dev,
+ 					  unsigned int resource);
+-
++struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
++					   drm_local_map_t *map);
+ 				/* DMA support (drm_dma.h) */
+ extern int drm_dma_setup(struct drm_device *dev);
+ extern void drm_dma_takedown(struct drm_device *dev);
+@@ -1042,6 +1043,7 @@ extern void drm_core_reclaim_buffers(struct drm_device *dev,
+ extern int drm_control(struct drm_device *dev, void *data,
+ 		       struct drm_file *file_priv);
+ extern irqreturn_t drm_irq_handler(DRM_IRQ_ARGS);
++extern int drm_irq_install(struct drm_device * dev);
+ extern int drm_irq_uninstall(struct drm_device *dev);
+ extern void drm_driver_irq_preinstall(struct drm_device *dev);
+ extern void drm_driver_irq_postinstall(struct drm_device *dev);
+diff --git a/drivers/char/drm/drm_bufs.c b/drivers/char/drm/drm_bufs.c
+index 6da493f..f3aac97 100644
+--- a/drivers/char/drm/drm_bufs.c
++++ b/drivers/char/drm/drm_bufs.c
+@@ -48,8 +48,8 @@ unsigned long drm_get_resource_len(struct drm_device *dev, unsigned int resource
+ }
  EXPORT_SYMBOL(drm_get_resource_len);
  
 -static struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
@@ -18,7 +174,7 @@
  {
  	struct drm_map_list *entry;
  	list_for_each_entry(entry, &dev->maplist, head) {
-@@ -63,6 +63,7 @@ static struct drm_map_list *drm_find_mat
+@@ -62,6 +62,7 @@ static struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
  
  	return NULL;
  }
@@ -26,10 +182,26 @@
  
  static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash,
  			  unsigned long user_token, int hashed_handle)
[...9521 lines suppressed...]
@@ -13661,34 +13153,42 @@
 +	case 0x84:
 +		voodoo = nv84_ctx_voodoo;
 +		break;
++	case 0x86:
++		voodoo = nv86_ctx_voodoo;
++		break;
 +	default:
 +		DRM_ERROR("no voodoo for chipset NV%02x\n", dev_priv->chipset);
-+		break;
++		return -EINVAL;
 +	}
 +
-+	if (voodoo) {
-+		NV_WRITE(NV40_PGRAPH_CTXCTL_UCODE_INDEX, 0);
-+		while (*voodoo != ~0) {
-+			NV_WRITE(NV40_PGRAPH_CTXCTL_UCODE_DATA, *voodoo);
-+			voodoo++;
-+		}
++	NV_WRITE(NV40_PGRAPH_CTXCTL_UCODE_INDEX, 0);
++	while (*voodoo != ~0) {
++		NV_WRITE(NV40_PGRAPH_CTXCTL_UCODE_DATA, *voodoo);
++		voodoo++;
 +	}
 +
 +	NV_WRITE(0x400320, 4);
 +	NV_WRITE(NV40_PGRAPH_CTXCTL_CUR, 0);
 +	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, 0);
++
++	return 0;
 +}
 +
-+int 
++int
 +nv50_graph_init(struct drm_device *dev)
 +{
++	int ret;
++
 +	DRM_DEBUG("\n");
 +
 +	nv50_graph_init_reset(dev);
 +	nv50_graph_init_intr(dev);
 +	nv50_graph_init_regs__nv(dev);
 +	nv50_graph_init_regs(dev);
-+	nv50_graph_init_ctxctl(dev);
++
++	ret = nv50_graph_init_ctxctl(dev);
++	if (ret)
++		return ret;
 +
 +	return 0;
 +}
@@ -13711,11 +13211,10 @@
 +
 +	DRM_DEBUG("ch%d\n", chan->id);
 +
-+	if ((ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0,
-+					  grctx_size, 0x1000,
-+					  NVOBJ_FLAG_ZERO_ALLOC |
-+					  NVOBJ_FLAG_ZERO_FREE,
-+					  &chan->ramin_grctx)))
++	ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, grctx_size, 0x1000,
++				     NVOBJ_FLAG_ZERO_ALLOC |
++				     NVOBJ_FLAG_ZERO_FREE, &chan->ramin_grctx);
++	if (ret)
 +		return ret;
 +
 +	hdr = IS_G80 ? 0x200 : 0x20;
@@ -13727,11 +13226,16 @@
 +	INSTANCE_WR(ramin, (hdr + 0x10)/4, 0);
 +	INSTANCE_WR(ramin, (hdr + 0x14)/4, 0x00010000);
 +
-+	if ((ret = engine->graph.load_context(chan))) {
++	ret = engine->graph.load_context(chan);
++	if (ret) {
 +		DRM_ERROR("Error hacking up initial context: %d\n", ret);
 +		return ret;
 +	}
 +
++	INSTANCE_WR(chan->ramin_grctx->gpuobj, 0x00000/4,
++		    chan->ramin->instance >> 12);
++	INSTANCE_WR(chan->ramin_grctx->gpuobj, 0x0011c/4, 0x00000002);
++
 +	return 0;
 +}
 +
@@ -13761,10 +13265,10 @@
 +	DRM_DEBUG("inst=0x%08x, save=%d\n", inst, save);
 +
 +	old_cp = NV_READ(NV20_PGRAPH_CHANNEL_CTX_POINTER);
-+	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst | (1<<31));
++	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst);
 +	NV_WRITE(0x400824, NV_READ(0x400824) |
 +		 (save ? NV40_PGRAPH_CTXCTL_0310_XFER_SAVE :
-+		  	 NV40_PGRAPH_CTXCTL_0310_XFER_LOAD));
++			 NV40_PGRAPH_CTXCTL_0310_XFER_LOAD));
 +	NV_WRITE(NV40_PGRAPH_CTXCTL_0304, NV40_PGRAPH_CTXCTL_0304_XFER_CTX);
 +
 +	for (i = 0; i < tv; i++) {
@@ -13788,19 +13292,15 @@
 +{
 +	struct drm_device *dev = chan->dev;
 +	struct drm_nouveau_private *dev_priv = dev->dev_private;
-+	uint32_t inst = ((chan->ramin->instance >> 12) | (1<<31));
++	uint32_t inst = chan->ramin->instance >> 12;
 +	int ret; (void)ret;
 +
 +	DRM_DEBUG("ch%d\n", chan->id);
 +
-+#if 0
-+	if ((ret = nv50_graph_transfer_context(dev, inst, 0)))
-+		return ret;
-+#endif
 +
 +	NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst);
 +	NV_WRITE(0x400320, 4);
-+	NV_WRITE(NV40_PGRAPH_CTXCTL_CUR, inst);
++	NV_WRITE(NV40_PGRAPH_CTXCTL_CUR, inst | (1<<31));
 +
 +	return 0;
 +}
@@ -13809,17 +13309,18 @@
 +nv50_graph_save_context(struct nouveau_channel *chan)
 +{
 +	struct drm_device *dev = chan->dev;
-+	uint32_t inst = ((chan->ramin->instance >> 12) | (1<<31));
++	uint32_t inst = chan->ramin->instance >> 12;
 +
 +	DRM_DEBUG("ch%d\n", chan->id);
 +
 +	return nv50_graph_transfer_context(dev, inst, 1);
 +}
-+
-diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv50_instmem.c linux-2.6.23.noarch/drivers/char/drm/nv50_instmem.c
---- linux-2.6.23.noarch.old/drivers/char/drm/nv50_instmem.c	1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/char/drm/nv50_instmem.c	2007-11-26 21:16:13.000000000 -0500
-@@ -0,0 +1,320 @@
+diff --git a/drivers/char/drm/nv50_instmem.c b/drivers/char/drm/nv50_instmem.c
+new file mode 100644
+index 0000000..9687ecb
+--- /dev/null
++++ b/drivers/char/drm/nv50_instmem.c
+@@ -0,0 +1,323 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
 + *
@@ -13891,7 +13392,11 @@
 +		return -ENOMEM;
 +	dev_priv->Engine.instmem.priv = priv;
 +
-+	/* Reserve the last MiB of VRAM, we should probably try to avoid 
++	/* Save state, will restore at takedown. */
++	for (i = 0x1700; i <= 0x1710; i+=4)
++		priv->save1700[(i-0x1700)/4] = NV_READ(i);
++
++	/* Reserve the last MiB of VRAM, we should probably try to avoid
 +	 * setting up the below tables over the top of the VBIOS image at
 +	 * some point.
 +	 */
@@ -13966,7 +13471,7 @@
 +			BAR0_WI32(priv->pramin_pt->gpuobj, i + 0, v | 1);
 +		else
 +			BAR0_WI32(priv->pramin_pt->gpuobj, i + 0, 0x00000009);
-+		BAR0_WI32(priv->pramin_pt->gpuobj, i + 4, 0x00000000); 
++		BAR0_WI32(priv->pramin_pt->gpuobj, i + 4, 0x00000000);
 +	}
 +
 +	BAR0_WI32(chan->vm_pd, 0x00, priv->pramin_pt->instance | 0x63);
@@ -14081,7 +13586,7 @@
 +			dev_priv->Engine.instmem.unbind(dev, gpuobj);
 +		nouveau_mem_free(dev, gpuobj->im_backing);
 +		gpuobj->im_backing = NULL;
-+	}	
++	}
 +}
 +
 +int
@@ -14139,10 +13644,11 @@
 +	gpuobj->im_bound = 0;
 +	return 0;
 +}
-+
-diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv50_mc.c linux-2.6.23.noarch/drivers/char/drm/nv50_mc.c
---- linux-2.6.23.noarch.old/drivers/char/drm/nv50_mc.c	1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/char/drm/nv50_mc.c	2007-11-26 21:16:13.000000000 -0500
+diff --git a/drivers/char/drm/nv50_mc.c b/drivers/char/drm/nv50_mc.c
+new file mode 100644
+index 0000000..b111826
+--- /dev/null
++++ b/drivers/char/drm/nv50_mc.c
 @@ -0,0 +1,43 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -14187,3 +13693,6 @@
 +void nv50_mc_takedown(struct drm_device *dev)
 +{
 +}
+-- 
+1.5.3.7
+


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/sources,v
retrieving revision 1.11.2.1
retrieving revision 1.11.2.2
diff -u -r1.11.2.1 -r1.11.2.2
--- sources	18 Feb 2008 16:55:17 -0000	1.11.2.1
+++ sources	29 Feb 2008 18:58:24 -0000	1.11.2.2
@@ -1,2 +1,4 @@
 3f23ad4b69d0a552042d1ed0f4399857  linux-2.6.24.tar.bz2
+01b1f6c7b35ba356129c121a81a77991  patch-2.6.25-rc3.bz2
+cefc333ff0422cdaa5e821ca58d06af4  patch-2.6.25-rc3-git1.bz2
 4aa57328d0802a063fa67dfc063da30e  xen-3.2.0.tar.gz


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel-xen-2.6/devel/Attic/upstream,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- upstream	18 Feb 2008 16:55:17 -0000	1.1.2.1
+++ upstream	29 Feb 2008 18:58:24 -0000	1.1.2.2
@@ -1 +1,3 @@
 linux-2.6.24.tar.bz2
+patch-2.6.25-rc3.bz2
+patch-2.6.25-rc3-git1.bz2


--- linux-2.6-agp-mm.patch DELETED ---


--- linux-2.6-alsa-rc4-mm1.patch DELETED ---


--- linux-2.6-alsa-support-sis7019.patch DELETED ---


--- linux-2.6-ath5k-use-soft-wep.patch DELETED ---


--- linux-2.6-dcdbas-autoload.patch DELETED ---


--- linux-2.6-drm-mm.patch DELETED ---


--- linux-2.6-drm-radeon-update.patch DELETED ---


--- linux-2.6-epoll-lockdep-annotation.patch DELETED ---


--- linux-2.6-ext4-linus-git.patch DELETED ---


--- linux-2.6-gelic-fixups.patch DELETED ---


--- linux-2.6-gelic-wireless-fix.patch DELETED ---


--- linux-2.6-gelic-wireless-v2.patch DELETED ---


--- linux-2.6-git-initial-r500-drm.patch DELETED ---


--- linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch DELETED ---


--- linux-2.6-netdev-bonding-fix-null-deref.patch DELETED ---


--- linux-2.6-pasemi-for-2.6.25.patch DELETED ---


--- linux-2.6-pasemi-reserve-i2c.patch DELETED ---


--- linux-2.6-powerpc-bootwrapper.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch DELETED ---


--- linux-2.6-rndis_wlan.patch DELETED ---


--- linux-2.6-selinux-strip-leading-slashes.patch DELETED ---


--- linux-2.6-unexport-symbols.patch DELETED ---


--- linux-2.6-xen-0001-Revert-linux-2.6-execshield.patch-from-kernel-2_6_24.patch DELETED ---


--- linux-2.6-xfs-optimize-away-realtime-tests.patch DELETED ---


--- linux-2.6-xfs-setfattr-32bit-compat.patch DELETED ---


--- linux-2.6-xfs-xfs_mount-refactor.patch DELETED ---




More information about the fedora-extras-commits mailing list