[kernel] r19458 - in dists/trunk/linux/debian: . config config/amd64 config/i386 patches patches/features/all/rt
Uwe Kleine-König
ukleinek-guest at alioth.debian.org
Wed Oct 24 14:29:14 UTC 2012
Author: ukleinek-guest
Date: Wed Oct 24 14:29:13 2012
New Revision: 19458
Log:
[rt] reenable rt featureset
Added:
dists/trunk/linux/debian/patches/features/all/rt/acpi-use-local-irq-nort.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0068-acpi-Do-not-disable-interrupts-on-PREEMPT_RT.patch
dists/trunk/linux/debian/patches/features/all/rt/arch-use-pagefault-disabled.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0033-mm-Fixup-all-fault-handlers-to-check-current-pagefau.patch
dists/trunk/linux/debian/patches/features/all/rt/arm-allow-irq-threading.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0017-arm-Allow-forced-irq-threading.patch
dists/trunk/linux/debian/patches/features/all/rt/arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0026-ARM-AT91-PIT-Remove-irq-handler-when-clock-event-is-.patch
dists/trunk/linux/debian/patches/features/all/rt/arm-at91-tclib-default-to-tclib-timer-for-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0221-ARM-at91-tclib-Default-to-tclib-timer-for-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/arm-convert-boot-lock-to-raw.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0018-preempt-rt-Convert-arm-boot_lock-to-raw.patch
dists/trunk/linux/debian/patches/features/all/rt/arm-disable-highmem-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0220-arm-disable-highmem-on-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/arm-mark-pmu-interupt-no-thread.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0016-arm-Mark-pmu-interupt-IRQF_NO_THREAD.patch
dists/trunk/linux/debian/patches/features/all/rt/arm-omap-make-wakeupgen_lock-raw.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0019-arm-omap-make-wakeupgen_lock-raw.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/ata-disable-interrupts-if-non-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0064-ata-Do-not-disable-interrupts-in-ide-code-for-preemp.patch
dists/trunk/linux/debian/patches/features/all/rt/block-shorten-interrupt-disabled-regions.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0006-block-Shorten-interrupt-disabled-regions.patch
dists/trunk/linux/debian/patches/features/all/rt/bug-rt-dependend-variants.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0061-bug-BUG_ON-WARN_ON-variants-dependend-on-RT-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/clocksource-tclib-allow-higher-clockrates.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0027-clocksource-TCLIB-Allow-higher-clock-rates-for-clock.patch
dists/trunk/linux/debian/patches/features/all/rt/cond-resched-lock-rt-tweak.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0131-cond-resched-lock-rt-tweak.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/cond-resched-softirq-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0130-cond-resched-softirq-fix.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0240-cpu-Make-hotplug.lock-a-sleeping-spinlock-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-rework-cpu-down.patch
dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-variants.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0089-cpu-rt-variants.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/cpumask-disable-offstack-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0233-cpumask-Disable-CONFIG_CPUMASK_OFFSTACK-for-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/crypto-make-core-static-and-init-scru-early.patch
dists/trunk/linux/debian/patches/features/all/rt/debugobjects-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/dm-make-rt-aware.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0232-dm-Make-rt-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-net-8139-disable-irq-nosync.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-net-at91-make-mdio-protection-rt-safe.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0031-drivers-net-at91_ether-Make-mdio-protection-rt-safe.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-net-ehea-mark-rx-irq-no-thread.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0030-drivers-net-ehea-Make-rx-irq-handler-non-threaded-IR.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0083-drivers-net-fix-livelock-issues.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-net-gianfar-make-rt-aware.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0085-drivers-net-gianfar-Make-RT-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-net-tulip-add-missing-pci-disable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0028-drivers-net-tulip_remove_one-needs-to-call-pci_disab.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-net-vortex-fix-locking-issues.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0084-drivers-net-vortex-fix-locking-issues.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-random-reduce-preempt-disabled-region.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0025-drivers-random-Reduce-preempt-disabled-region.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-serial-call-flush_to_ldisc-when-the-irq-is-t.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0193-serial-8250-Call-flush_to_ldisc-when-the-irq-is-thre.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-serial-cleanup-locking-for-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0192-serial-8250-Clean-up-the-locking-for-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/drivers-tty-fix-omap-lock-crap.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0194-drivers-tty-fix-omap-lock-crap.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/early-printk-consolidate.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0057-early-printk-consolidate.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/epoll-use-get-cpu-light.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0206-epoll.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/filemap-fix-up.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0036-filemap-fix-up.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0051-x86-Do-not-disable-preemption-in-int3-on-32bit.patch
dists/trunk/linux/debian/patches/features/all/rt/fs-block-rt-support.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0199-fs-block-rt-support.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0245-fs-dcache-Use-cpu_chill-in-trylock-loops.patch
dists/trunk/linux/debian/patches/features/all/rt/fs-jbd-pull-plug-when-waiting-for-space.patch
dists/trunk/linux/debian/patches/features/all/rt/fs-jbd-replace-bh_state-lock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0078-fs-jbd-jbd2-Make-state-lock-and-journal-head-lock-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/fs-namespace-preemption-fix.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0196-fs-namespace-preemption-fix.patch
dists/trunk/linux/debian/patches/features/all/rt/fs-ntfs-disable-interrupt-non-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0200-fs-ntfs-disable-interrupt-only-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/fs-replace-bh_uptodate_lock-for-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0077-buffer_head-Replace-bh_uptodate_lock-for-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/ftrace-crap.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0155-ftrace-crap.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/ftrace-migrate-disable-tracing.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0144-ftrace-migrate-disable-tracing.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/futex-requeue-pi-fix.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0173-futex-Fix-bug-on-when-a-requeued-RT-task-times-out.patch
dists/trunk/linux/debian/patches/features/all/rt/generic-cmpxchg-use-raw-local-irq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0024-generic-Use-raw-local-irq-variant-for-generic-cmpxch.patch
dists/trunk/linux/debian/patches/features/all/rt/genirq-add-default-mask-cmdline-option.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0251-genirq-Add-default-affinity-mask-command-line-option.patch
dists/trunk/linux/debian/patches/features/all/rt/genirq-disable-irqpoll-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0081-genirq-disable-irqpoll-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/genirq-force-threading.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0082-genirq-force-threading.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/genirq-nodebug-shirq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0079-genirq-Disable-DEBUG_SHIRQ-for-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/harirq-h-define-softirq_count-as-oul-to-kill-build-warning.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0163-hardirq.h-Define-softirq_count-as-OUL-to-kill-build-.patch
dists/trunk/linux/debian/patches/features/all/rt/hotplug-call-cpu_unplug_begin-a-little-early.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0143-hotplug-Call-cpu_unplug_begin-before-DOWN_PREPARE.patch
dists/trunk/linux/debian/patches/features/all/rt/hotplug-light-get-online-cpus.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0138-hotplug-Lightweight-get-online-cpus.patch
dists/trunk/linux/debian/patches/features/all/rt/hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0139-hotplug-sync_unplug-No.patch
dists/trunk/linux/debian/patches/features/all/rt/hotplug-use-migrate-disable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0142-hotplug-use-migrate-disable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/hrtimer-add-missing-debug_activate-aid.patch
dists/trunk/linux/debian/patches/features/all/rt/hrtimer-fix-reprogram-madness.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0119-hrtimer-fix-reprogram-madness.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0116-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
dists/trunk/linux/debian/patches/features/all/rt/hrtimers-prepare-full-preemption.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0115-hrtimers-prepare-full-preemption.patch
dists/trunk/linux/debian/patches/features/all/rt/hwlatdetect.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0055-hwlatdetect.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/ide-use-nort-local-irq-variants.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0065-ide-Do-not-disable-interrupts-for-PREEMPT-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/infiniband-mellanox-ib-use-nort-irq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0066-infiniband-Mellanox-IB-driver-patch-use-_nort-primit.patch
dists/trunk/linux/debian/patches/features/all/rt/inpt-gameport-use-local-irq-nort.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0067-input-gameport-Do-not-disable-interrupts-on-PREEMPT_.patch
dists/trunk/linux/debian/patches/features/all/rt/intel_idle-convert-i7300_idle_lock-to-raw-spinlock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0013-intel_idle-Convert-i7300_idle_lock-to-raw-spinlock.patch
dists/trunk/linux/debian/patches/features/all/rt/ipc-make-rt-aware.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0103-ipc-Make-the-ipc-code-rt-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/ipc-mqueue-add-a-critical-section-to-avoid-a-deadlock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0104-ipc-mqueue-Add-a-critical-section-to-avoid-a-deadloc.patch
dists/trunk/linux/debian/patches/features/all/rt/ipc-sem-rework-semaphore-wakeups.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0228-ipc-sem-Rework-semaphore-wakeups.patch
dists/trunk/linux/debian/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0168-genirq-Allow-disabling-of-softirq-processing-in-irq-.patch
dists/trunk/linux/debian/patches/features/all/rt/jump-label-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0213-jump-label-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/kconfig-disable-a-few-options-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0252-kconfig-disable-a-few-options-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/kconfig-preempt-rt-full.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0253-kconfig-preempt-rt-full.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/kgb-serial-hackaround.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0225-kgdb-serial-Short-term-workaround.patch
dists/trunk/linux/debian/patches/features/all/rt/latency-hist.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0054-latency-hist.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/lglocks-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/list-add-list-last-entry.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0042-list-add-list-last-entry.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/local-irq-rt-depending-variants.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0062-rt-local_irq_-variants-depending-on-RT-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/local-var.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0087-local-var.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/local-vars-migrate-disable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0169-local-vars-migrate-disable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/localversion.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0056-localversion.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/lockdep-no-softirq-accounting-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0159-lockdep-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/lockdep-selftest-convert-spinlock-to-raw-spinlock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0249-lockdep-Selftest-convert-spinlock-to-raw-spinlock.patch
dists/trunk/linux/debian/patches/features/all/rt/lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0250-lockdep-Selftest-Only-do-hardirq-context-test-for-ra.patch
dists/trunk/linux/debian/patches/features/all/rt/locking-various-init-fixes.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0052-locking-various-init-fixes.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/md-raid5-percpu-handling-rt-aware.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0170-md-raid5-Make-raid5_percpu-handling-RT-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/migrate-disable-rt-variant.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0146-migrate-disable-rt-variant.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/mips-disable-highmem-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0222-mips-disable-highmem-on-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/mips-enable-interrupts-in-signal.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-allow-slab-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0100-mm-Allow-only-slab-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-cgroup-page-bit-spinlock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0076-mm-Replace-cgroup_page-bit-spinlock.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-convert-swap-to-percpu-locked.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0096-mm-convert-swap-to-percpu-locked.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-make-vmstat-rt-aware.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0097-mm-make-vmstat-rt-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-fix.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0095-mm-page-alloc-fix.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-use-list-last-entry.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0043-mm-page-alloc-use-list-last-entry.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-use-local-lock-on-target-cpu.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-page_alloc-reduce-lock-sections-further.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0094-mm-page_alloc-reduce-lock-sections-further.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-page_alloc-rt-friendly-per-cpu-pages.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0093-mm-page_alloc-rt-friendly-per-cpu-pages.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-prepare-pf-disable-discoupling.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0032-mm-Prepare-decoupling-the-page-fault-disabling-logic.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-protect-activate-switch-mm.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0197-mm-protect-activate-switch-mm.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-protect-activate_mm-by-preempt_-disable-7cenable-_rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0198-mm-Protect-activate_mm-by-preempt_-disable-7Cenable-.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-remove-preempt-count-from-pf.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0037-mm-Remove-preempt-count-from-pagefault-disable-enabl.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-rt-kmap-atomic-scheduling.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0227-mm-rt-kmap_atomic-scheduling.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-scatterlist-dont-disable-irqs-on-RT.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0073-mm-scatterlist-dont-disable-irqs-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-shrink-the-page-frame-to-rt-size.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0098-mm-shrink-the-page-frame-to-rt-size.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-slab-fix-potential-deadlock.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-slab-more-lock-breaks.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0092-mm-More-lock-breaks-in-slab.c.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-slab-move-debug-out.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0044-mm-slab-move-debug-out.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-slab-wrap-functions.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0090-mm-slab-wrap-functions.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/mm-vmalloc-use-get-cpu-light.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0207-mm-vmalloc.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/mutex-no-spin-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0160-mutex-no-spin-on-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/net-another-local-irq-disable-alloc-atomic-headache.patch
dists/trunk/linux/debian/patches/features/all/rt/net-flip-lock-dep-thingy.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0047-net-flip-lock-dep-thingy.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/net-netif_rx_ni-migrate-disable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0157-net-netif_rx_ni-migrate-disable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/net-tx-action-avoid-livelock-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0223-net-Avoid-livelock-in-net_tx_action-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/net-use-cpu-chill.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0246-net-Use-cpu_chill-instead-of-cpu_relax.patch
dists/trunk/linux/debian/patches/features/all/rt/net-use-cpu-light-in-ip-send-unicast-reply.patch
dists/trunk/linux/debian/patches/features/all/rt/net-wireless-warn-nort.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0075-net-wireless-warn-nort.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/ntp-make-ntp-lock-raw-sigh.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0247-ntp-Make-ntp_lock-raw.patch
dists/trunk/linux/debian/patches/features/all/rt/of-convert-devtree-lock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0041-of-convert-devtree-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/of-fixup-recursive-locking.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0040-OF-Fixup-resursive-locking-code-paths.patch
dists/trunk/linux/debian/patches/features/all/rt/oleg-signal-rt-fix.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0023-signal-x86-Delay-calling-signals-in-atomic.patch
dists/trunk/linux/debian/patches/features/all/rt/panic-disable-random-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0188-rcu-Make-ksoftirqd-do-RCU-quiescent-states.patch
dists/trunk/linux/debian/patches/features/all/rt/pci-access-use-__wake_up_all_locked.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0053-pci-Use-__wake_up_all_locked-pci_unblock_user_cfg_ac.patch
dists/trunk/linux/debian/patches/features/all/rt/perf-make-swevent-hrtimer-irqsafe.patch
dists/trunk/linux/debian/patches/features/all/rt/perf-move-irq-work-to-softirq-in-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0215-x86-no-perf-irq-work-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-hrtimer.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0117-hrtimer-Don-t-call-the-timer-handler-from-hrtimer_st.patch
dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable-2.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0148-sched-Generic-migrate_disable.patch
dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0147-sched-Optimize-migrate_disable.patch
dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-pagefault_disable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0034-mm-pagefault_disabled.patch
dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-rcu.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0184-rcu-Frob-softirq-test.patch
dists/trunk/linux/debian/patches/features/all/rt/peterz-raw_pagefault_disable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0035-mm-raw_pagefault_disable.patch
dists/trunk/linux/debian/patches/features/all/rt/peterz-srcu-crypto-chain.patch
dists/trunk/linux/debian/patches/features/all/rt/pid-h-include-atomic-h.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0045-rwsem-inlcude-fix.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/ping-sysrq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0224-ping-sysrq.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/posix-timers-avoid-wakeups-when-no-timers-are-active.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0123-posix-timers-Avoid-wakeups-when-no-timers-are-active.patch
dists/trunk/linux/debian/patches/features/all/rt/posix-timers-no-broadcast.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0021-posix-timers-Prevent-broadcast-signals.patch
dists/trunk/linux/debian/patches/features/all/rt/posix-timers-shorten-cpu-timers-thread.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0122-posix-timers-Shorten-posix_cpu_timers-CPU-kernel-thr.patch
dists/trunk/linux/debian/patches/features/all/rt/posix-timers-thread-posix-cpu-timers-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0121-posix-timers-thread-posix-cpu-timers-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/power-disable-highmem-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0219-power-disable-highmem-on-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/power-use-generic-rwsem-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/ppc-mark-low-level-handlers-no-thread.patch
dists/trunk/linux/debian/patches/features/all/rt/preempt-nort-rt-variants.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0063-preempt-Provide-preempt_-_-no-rt-variants.patch
dists/trunk/linux/debian/patches/features/all/rt/printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0059-printk-force_early_printk-boot-param-to-help-with-de.patch
dists/trunk/linux/debian/patches/features/all/rt/printk-kill.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0058-printk-kill.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/printk-rt-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/radix-tree-rt-aware.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0101-radix-tree-rt-aware.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/random-make-it-work-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/rcu-fix-build-break.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0189-rcu-Fix-build-break.patch
dists/trunk/linux/debian/patches/features/all/rt/rcu-force-preempt-rcu-for-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0183-RCU-Force-PREEMPT_RCU-for-PREEMPT-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0185-rcu-Merge-RCU-bh-into-RCU-preempt.patch
dists/trunk/linux/debian/patches/features/all/rt/rcu-tiny-merge-bh.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0187-rcu-more-fallout.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rcu-tiny-solve-rt-mistery.patch
dists/trunk/linux/debian/patches/features/all/rt/re-migrate_disable-race-with-cpu-hotplug-3f.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0140-hotplug-Reread-hotplug_pcp-on-pin_current_cpu-retry.patch
dists/trunk/linux/debian/patches/features/all/rt/re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0099-ARM-Initialize-ptl-lock-for-vector-page.patch
dists/trunk/linux/debian/patches/features/all/rt/relay-fix-timer-madness.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0105-relay-fix-timer-madness.patch
dists/trunk/linux/debian/patches/features/all/rt/resource-counters-use-localirq-nort.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0070-core-Do-not-disable-interrupts-on-RT-in-res_counter..patch
dists/trunk/linux/debian/patches/features/all/rt/rfc-printk-don-27t-call-printk_tick-in-printk_needs_cpu.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0114-printk-Don-t-call-printk_tick-in-printk_needs_cpu-on.patch
dists/trunk/linux/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0238-sched-rt-Fix-wait_task_interactive-to-test-rt_spin_l.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-locks.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0180-rt-Add-the-preempt-rt-lock-replacement-APIs.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-spinlock-to-headers.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0177-rt-add-rt-spinlocks.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-to-mutex-headers.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0178-rt-add-rt-to-mutex-headers.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-disable-rt-group-sched.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-introduce-cpu-chill.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0244-rt-Introduce-cpu_chill.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-local-irq-lock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0088-rt-local-irq-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-mutex-add-sleeping-spinlocks-support.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0174-rt-mutex-add-sleeping-spinlocks-support.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-preempt-base-config.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0060-rt-preempt-base-config.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-rcutree-warn-fix.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0190-rt-rcutree-Move-misplaced-prototype.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-rw-lockdep-annotations.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-sched-do-not-compare-cpu-masks-in-scheduler.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0152-sched-Do-not-compare-cpu-masks-in-scheduler.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-sched-have-migrate_disable-ignore-bounded-threads.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0153-sched-Have-migrate_disable-ignore-bounded-threads.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-sched-postpone-actual-migration-disalbe-to-schedule.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0151-sched-Postpone-actual-migration-disalbe-to-schedule.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-serial-warn-fix.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0195-rt-Improve-the-serial-console-PASS_LIMIT.patch
dists/trunk/linux/debian/patches/features/all/rt/rt-tracing-show-padding-as-unsigned-short.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0145-tracing-Show-padding-as-unsigned-short.patch
dists/trunk/linux/debian/patches/features/all/rt/rtmutex-avoid-include-hell.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0176-rtmutex-avoid-include-hell.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rtmutex-futex-prepare-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0172-rtmutex-futex-prepare-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rtmutex-lock-killable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0171-rtmutex-lock-killable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/rwsem-add-rt-variant.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0179-rwsem-add-rt-variant.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-better-debug-output-for-might-sleep.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-clear-pf-thread-bound-on-fallback-rq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0154-sched-clear-pf-thread-bound-on-fallback-rq.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-cond-resched.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0129-sched-cond-resched.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-delay-put-task.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0124-sched-delay-put-task.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-disable-rt-group-sched-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0133-sched-Disable-CONFIG_RT_GROUP_SCHED-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-disable-ttwu-queue.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0132-sched-disable-ttwu-queue.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-limit-nr-migrate.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0125-sched-limit-nr-migrate.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-might-sleep-do-not-account-rcu-depth.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0128-sched-might-sleep-do-not-account-rcu-depth.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-migrate-disable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0141-sched-migrate-disable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-mmdrop-delayed.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0126-sched-mmdrop-delayed.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-rt-fix-migrate_enable-thinko.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0149-sched-rt-Fix-migrate_enable-thinko.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-rt-mutex-wakeup.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0127-sched-rt-mutex-wakeup.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-teach-migrate_disable-about-atomic-contexts.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0150-sched-teach-migrate_disable-about-atomic-contexts.patch
dists/trunk/linux/debian/patches/features/all/rt/sched-ttwu-ensure-success-return-is-correct.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0134-sched-ttwu-Return-success-when-only-changing-the-sav.patch
dists/trunk/linux/debian/patches/features/all/rt/scsi-fcoe-rt-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0242-scsi-qla2xxx-Use-local_irq_save_nort-in-qla2x00_poll.patch
dists/trunk/linux/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0234-seqlock-Prevent-rt-starvation.patch
dists/trunk/linux/debian/patches/features/all/rt/seqlock-remove-unused-functions.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0010-seqlock-Remove-unused-functions.patch
dists/trunk/linux/debian/patches/features/all/rt/seqlock-use-seqcount.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0011-seqlock-Use-seqcount.patch
dists/trunk/linux/debian/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0074-signal-fix-up-rcu-wreckage.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/signal-revert-ptrace-preempt-magic.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0015-signal-revert-ptrace-preempt-magic.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0022-signals-Allow-rt-tasks-to-cache-one-sigqueue-struct.patch
dists/trunk/linux/debian/patches/features/all/rt/signals-do-not-wake-self.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0020-signals-Do-not-wakeup-self.patch
dists/trunk/linux/debian/patches/features/all/rt/skbufhead-raw-lock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0214-skbufhead-raw-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0165-softirq-disable-softirq-stacks-for-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-export-in-serving-softirq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0162-softirq-Export-in_serving_softirq.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-fix-unplug-deadlock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0164-softirq-Fix-unplug-deadlock.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-init-softirq-local-lock-after-per-cpu-section-is-set-up.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-local-lock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0161-softirq-local-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-make-fifo.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0166-softirq-make-fifo.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-make-serving-softirqs-a-task-flag.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-preempt-fix-3-re.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0241-softirq-Check-preemption-after-reenabling-interrupts.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-sanitize-softirq-pending.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0158-softirq-Sanitize-softirq-pending-for-NOHZ-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-split-handling-function.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-split-locks.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-split-out-code.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0049-softirq-split-out-code.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/softirq-thread-do-softirq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0048-softirq-thread-do-softirq.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/spinlock-types-separate-raw.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0175-spinlock-types-separate-raw.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-deal-clever-with-stopper-lock.patch
dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-mark-stomper-thread.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0136-stomp-machine-mark-stomper-thread.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-raw-lock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0137-stomp-machine-raw-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0135-stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
dists/trunk/linux/debian/patches/features/all/rt/suspend-prevernt-might-sleep-splats.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0039-suspend-Prevent-might-sleep-splats.patch
dists/trunk/linux/debian/patches/features/all/rt/sysctl-include-atomic-h.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0046-sysctl-include-fix.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/sysfs-realtime-entry.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0226-add-sys-kernel-realtime-entry.patch
dists/trunk/linux/debian/patches/features/all/rt/tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0167-tasklet-Prevent-tasklets-from-going-into-infinite-sp.patch
dists/trunk/linux/debian/patches/features/all/rt/tasklist-lock-fix-section-conflict.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0181-rwlocks-Fix-section-mismatch.patch
dists/trunk/linux/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch
dists/trunk/linux/debian/patches/features/all/rt/timer-delay-waking-softirqs-from-the-jiffy-tick.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0112-timer-delay-waking-softirqs-from-the-jiffy-tick.patch
dists/trunk/linux/debian/patches/features/all/rt/timer-fd-avoid-live-lock.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0120-timer-fd-Prevent-live-lock.patch
dists/trunk/linux/debian/patches/features/all/rt/timer-handle-idle-trylock-in-get-next-timer-irq.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0182-timer-handle-idle-trylock-in-get-next-timer-irq.patc.patch
dists/trunk/linux/debian/patches/features/all/rt/timer.c-fix-build-fail-for-RT_FULL.patch
dists/trunk/linux/debian/patches/features/all/rt/timers-avoid-the-base-null-otptimization-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0113-timers-Avoid-the-switch-timers-base-set-to-NULL-tric.patch
dists/trunk/linux/debian/patches/features/all/rt/timers-mov-printk_tick-to-soft-interrupt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0111-timers-mov-printk_tick-to-soft-interrupt.patch
dists/trunk/linux/debian/patches/features/all/rt/timers-preempt-rt-support.patch
dists/trunk/linux/debian/patches/features/all/rt/timers-prepare-for-full-preemption.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0108-timers-prepare-for-full-preemption.patch
dists/trunk/linux/debian/patches/features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0014-tracing-Account-for-preempt-off-in-preempt_schedule.patch
dists/trunk/linux/debian/patches/features/all/rt/tty-use-local-irq-nort.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0072-tty-Do-not-disable-interrupts-in-put_ldisc-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0243-net-RT-REmove-preemption-disabling-in-netif_rx.patch
dists/trunk/linux/debian/patches/features/all/rt/usb-fix-mouse-problem-copying-large-data.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0086-USB-Fix-the-mouse-problem-when-copying-large-amounts.patch
dists/trunk/linux/debian/patches/features/all/rt/usb-hcd-use-local-irq-nort.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0071-usb-Use-local_irq_-_nort-variants.patch
dists/trunk/linux/debian/patches/features/all/rt/user-use-local-irq-nort.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0069-core-Do-not-disable-interrupts-on-RT-in-kernel-users.patch
dists/trunk/linux/debian/patches/features/all/rt/workqueue-use-get-cpu-light.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0205-workqueue-use-get-cpu-light.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0231-x86-crypto-Reduce-preempt-disabled-regions.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-disable-debug-stack.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0204-x86-Disable-IST-stacks-for-debug-int-3-stack-fault-f.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-highmem-warn.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0038-x86-highmem-Replace-BUG_ON-by-WARN_ON.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-hpet-disable-msi-on-lenovo-w510.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0005-x86-hpet-Disable-MSI-on-Lenovo-W510.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-io-apic-migra-no-unmask.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0050-x86-Do-not-unmask-io_apic-when-interrupt-is-in-progr.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-kprobes-remove-bogus-preempt-enable.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0003-x86-kprobes-Remove-remove-bogus-preempt_enable.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-kvm-require-const-tsc-for-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0229-x86-kvm-require-const-tsc-for-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-mce-timer-hrtimer.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0201-x86-Convert-mce-timer-to-hrtimer.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-perf-uncore-deal-with-kfree.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-stackprot-no-random-on-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0202-x86-stackprotector-Avoid-random-pool-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/x86-use-gen-rwsem-spinlocks-rt.patch
- copied, changed from r19452, dists/trunk/linux/debian/patches/features/all/rt/0203-x86-Use-generic-rwsem_spinlocks-on-rt.patch
Deleted:
dists/trunk/linux/debian/patches/features/all/rt/0001-Revert-workqueue-skip-nr_running-sanity-check-in-wor.patch
dists/trunk/linux/debian/patches/features/all/rt/0002-slab-lockdep-Annotate-all-slab-caches.patch
dists/trunk/linux/debian/patches/features/all/rt/0003-x86-kprobes-Remove-remove-bogus-preempt_enable.patch
dists/trunk/linux/debian/patches/features/all/rt/0004-tick-Add-tick-skew-boot-option.patch
dists/trunk/linux/debian/patches/features/all/rt/0005-x86-hpet-Disable-MSI-on-Lenovo-W510.patch
dists/trunk/linux/debian/patches/features/all/rt/0006-block-Shorten-interrupt-disabled-regions.patch
dists/trunk/linux/debian/patches/features/all/rt/0007-sched-Distangle-worker-accounting-from-rq-3Elock.patch
dists/trunk/linux/debian/patches/features/all/rt/0008-mips-enable-interrupts-in-signal.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0009-arm-enable-interrupts-in-signal-code.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0010-seqlock-Remove-unused-functions.patch
dists/trunk/linux/debian/patches/features/all/rt/0011-seqlock-Use-seqcount.patch
dists/trunk/linux/debian/patches/features/all/rt/0012-timekeeping-Split-xtime_lock.patch
dists/trunk/linux/debian/patches/features/all/rt/0013-intel_idle-Convert-i7300_idle_lock-to-raw-spinlock.patch
dists/trunk/linux/debian/patches/features/all/rt/0014-tracing-Account-for-preempt-off-in-preempt_schedule.patch
dists/trunk/linux/debian/patches/features/all/rt/0015-signal-revert-ptrace-preempt-magic.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0016-arm-Mark-pmu-interupt-IRQF_NO_THREAD.patch
dists/trunk/linux/debian/patches/features/all/rt/0017-arm-Allow-forced-irq-threading.patch
dists/trunk/linux/debian/patches/features/all/rt/0018-preempt-rt-Convert-arm-boot_lock-to-raw.patch
dists/trunk/linux/debian/patches/features/all/rt/0019-arm-omap-make-wakeupgen_lock-raw.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0020-signals-Do-not-wakeup-self.patch
dists/trunk/linux/debian/patches/features/all/rt/0021-posix-timers-Prevent-broadcast-signals.patch
dists/trunk/linux/debian/patches/features/all/rt/0022-signals-Allow-rt-tasks-to-cache-one-sigqueue-struct.patch
dists/trunk/linux/debian/patches/features/all/rt/0023-signal-x86-Delay-calling-signals-in-atomic.patch
dists/trunk/linux/debian/patches/features/all/rt/0024-generic-Use-raw-local-irq-variant-for-generic-cmpxch.patch
dists/trunk/linux/debian/patches/features/all/rt/0025-drivers-random-Reduce-preempt-disabled-region.patch
dists/trunk/linux/debian/patches/features/all/rt/0026-ARM-AT91-PIT-Remove-irq-handler-when-clock-event-is-.patch
dists/trunk/linux/debian/patches/features/all/rt/0027-clocksource-TCLIB-Allow-higher-clock-rates-for-clock.patch
dists/trunk/linux/debian/patches/features/all/rt/0028-drivers-net-tulip_remove_one-needs-to-call-pci_disab.patch
dists/trunk/linux/debian/patches/features/all/rt/0029-drivers-net-Use-disable_irq_nosync-in-8139too.patch
dists/trunk/linux/debian/patches/features/all/rt/0030-drivers-net-ehea-Make-rx-irq-handler-non-threaded-IR.patch
dists/trunk/linux/debian/patches/features/all/rt/0031-drivers-net-at91_ether-Make-mdio-protection-rt-safe.patch
dists/trunk/linux/debian/patches/features/all/rt/0032-mm-Prepare-decoupling-the-page-fault-disabling-logic.patch
dists/trunk/linux/debian/patches/features/all/rt/0033-mm-Fixup-all-fault-handlers-to-check-current-pagefau.patch
dists/trunk/linux/debian/patches/features/all/rt/0034-mm-pagefault_disabled.patch
dists/trunk/linux/debian/patches/features/all/rt/0035-mm-raw_pagefault_disable.patch
dists/trunk/linux/debian/patches/features/all/rt/0036-filemap-fix-up.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0037-mm-Remove-preempt-count-from-pagefault-disable-enabl.patch
dists/trunk/linux/debian/patches/features/all/rt/0038-x86-highmem-Replace-BUG_ON-by-WARN_ON.patch
dists/trunk/linux/debian/patches/features/all/rt/0039-suspend-Prevent-might-sleep-splats.patch
dists/trunk/linux/debian/patches/features/all/rt/0040-OF-Fixup-resursive-locking-code-paths.patch
dists/trunk/linux/debian/patches/features/all/rt/0041-of-convert-devtree-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0042-list-add-list-last-entry.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0043-mm-page-alloc-use-list-last-entry.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0044-mm-slab-move-debug-out.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0045-rwsem-inlcude-fix.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0046-sysctl-include-fix.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0047-net-flip-lock-dep-thingy.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0048-softirq-thread-do-softirq.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0049-softirq-split-out-code.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0050-x86-Do-not-unmask-io_apic-when-interrupt-is-in-progr.patch
dists/trunk/linux/debian/patches/features/all/rt/0051-x86-Do-not-disable-preemption-in-int3-on-32bit.patch
dists/trunk/linux/debian/patches/features/all/rt/0052-locking-various-init-fixes.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0053-pci-Use-__wake_up_all_locked-pci_unblock_user_cfg_ac.patch
dists/trunk/linux/debian/patches/features/all/rt/0054-latency-hist.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0055-hwlatdetect.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0056-localversion.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0057-early-printk-consolidate.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0058-printk-kill.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0059-printk-force_early_printk-boot-param-to-help-with-de.patch
dists/trunk/linux/debian/patches/features/all/rt/0060-rt-preempt-base-config.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0061-bug-BUG_ON-WARN_ON-variants-dependend-on-RT-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0062-rt-local_irq_-variants-depending-on-RT-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0063-preempt-Provide-preempt_-_-no-rt-variants.patch
dists/trunk/linux/debian/patches/features/all/rt/0064-ata-Do-not-disable-interrupts-in-ide-code-for-preemp.patch
dists/trunk/linux/debian/patches/features/all/rt/0065-ide-Do-not-disable-interrupts-for-PREEMPT-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0066-infiniband-Mellanox-IB-driver-patch-use-_nort-primit.patch
dists/trunk/linux/debian/patches/features/all/rt/0067-input-gameport-Do-not-disable-interrupts-on-PREEMPT_.patch
dists/trunk/linux/debian/patches/features/all/rt/0068-acpi-Do-not-disable-interrupts-on-PREEMPT_RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0069-core-Do-not-disable-interrupts-on-RT-in-kernel-users.patch
dists/trunk/linux/debian/patches/features/all/rt/0070-core-Do-not-disable-interrupts-on-RT-in-res_counter..patch
dists/trunk/linux/debian/patches/features/all/rt/0071-usb-Use-local_irq_-_nort-variants.patch
dists/trunk/linux/debian/patches/features/all/rt/0072-tty-Do-not-disable-interrupts-in-put_ldisc-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0073-mm-scatterlist-dont-disable-irqs-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0074-signal-fix-up-rcu-wreckage.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0075-net-wireless-warn-nort.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0076-mm-Replace-cgroup_page-bit-spinlock.patch
dists/trunk/linux/debian/patches/features/all/rt/0077-buffer_head-Replace-bh_uptodate_lock-for-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0078-fs-jbd-jbd2-Make-state-lock-and-journal-head-lock-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0079-genirq-Disable-DEBUG_SHIRQ-for-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0080-genirq-Disable-random-call-on-preempt-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0081-genirq-disable-irqpoll-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0082-genirq-force-threading.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0083-drivers-net-fix-livelock-issues.patch
dists/trunk/linux/debian/patches/features/all/rt/0084-drivers-net-vortex-fix-locking-issues.patch
dists/trunk/linux/debian/patches/features/all/rt/0085-drivers-net-gianfar-Make-RT-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/0086-USB-Fix-the-mouse-problem-when-copying-large-amounts.patch
dists/trunk/linux/debian/patches/features/all/rt/0087-local-var.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0088-rt-local-irq-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0089-cpu-rt-variants.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0090-mm-slab-wrap-functions.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0091-slab-Fix-__do_drain-to-use-the-right-array-cache.patch
dists/trunk/linux/debian/patches/features/all/rt/0092-mm-More-lock-breaks-in-slab.c.patch
dists/trunk/linux/debian/patches/features/all/rt/0093-mm-page_alloc-rt-friendly-per-cpu-pages.patch
dists/trunk/linux/debian/patches/features/all/rt/0094-mm-page_alloc-reduce-lock-sections-further.patch
dists/trunk/linux/debian/patches/features/all/rt/0095-mm-page-alloc-fix.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0096-mm-convert-swap-to-percpu-locked.patch
dists/trunk/linux/debian/patches/features/all/rt/0097-mm-make-vmstat-rt-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/0098-mm-shrink-the-page-frame-to-rt-size.patch
dists/trunk/linux/debian/patches/features/all/rt/0099-ARM-Initialize-ptl-lock-for-vector-page.patch
dists/trunk/linux/debian/patches/features/all/rt/0100-mm-Allow-only-slab-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0101-radix-tree-rt-aware.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0102-panic-disable-random-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0103-ipc-Make-the-ipc-code-rt-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/0104-ipc-mqueue-Add-a-critical-section-to-avoid-a-deadloc.patch
dists/trunk/linux/debian/patches/features/all/rt/0105-relay-fix-timer-madness.patch
dists/trunk/linux/debian/patches/features/all/rt/0106-net-ipv4-route-use-locks-on-up-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0107-workqueue-avoid-the-lock-in-cpu-dying.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0108-timers-prepare-for-full-preemption.patch
dists/trunk/linux/debian/patches/features/all/rt/0109-timers-preempt-rt-support.patch
dists/trunk/linux/debian/patches/features/all/rt/0110-timers-fix-timer-hotplug-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0111-timers-mov-printk_tick-to-soft-interrupt.patch
dists/trunk/linux/debian/patches/features/all/rt/0112-timer-delay-waking-softirqs-from-the-jiffy-tick.patch
dists/trunk/linux/debian/patches/features/all/rt/0113-timers-Avoid-the-switch-timers-base-set-to-NULL-tric.patch
dists/trunk/linux/debian/patches/features/all/rt/0114-printk-Don-t-call-printk_tick-in-printk_needs_cpu-on.patch
dists/trunk/linux/debian/patches/features/all/rt/0115-hrtimers-prepare-full-preemption.patch
dists/trunk/linux/debian/patches/features/all/rt/0116-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
dists/trunk/linux/debian/patches/features/all/rt/0117-hrtimer-Don-t-call-the-timer-handler-from-hrtimer_st.patch
dists/trunk/linux/debian/patches/features/all/rt/0118-hrtimer-Add-missing-debug_activate-aid-Was-Re-ANNOUN.patch
dists/trunk/linux/debian/patches/features/all/rt/0119-hrtimer-fix-reprogram-madness.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0120-timer-fd-Prevent-live-lock.patch
dists/trunk/linux/debian/patches/features/all/rt/0121-posix-timers-thread-posix-cpu-timers-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0122-posix-timers-Shorten-posix_cpu_timers-CPU-kernel-thr.patch
dists/trunk/linux/debian/patches/features/all/rt/0123-posix-timers-Avoid-wakeups-when-no-timers-are-active.patch
dists/trunk/linux/debian/patches/features/all/rt/0124-sched-delay-put-task.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0125-sched-limit-nr-migrate.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0126-sched-mmdrop-delayed.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0127-sched-rt-mutex-wakeup.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0128-sched-might-sleep-do-not-account-rcu-depth.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0129-sched-cond-resched.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0130-cond-resched-softirq-fix.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0131-cond-resched-lock-rt-tweak.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0132-sched-disable-ttwu-queue.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0133-sched-Disable-CONFIG_RT_GROUP_SCHED-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0134-sched-ttwu-Return-success-when-only-changing-the-sav.patch
dists/trunk/linux/debian/patches/features/all/rt/0135-stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0136-stomp-machine-mark-stomper-thread.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0137-stomp-machine-raw-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0138-hotplug-Lightweight-get-online-cpus.patch
dists/trunk/linux/debian/patches/features/all/rt/0139-hotplug-sync_unplug-No.patch
dists/trunk/linux/debian/patches/features/all/rt/0140-hotplug-Reread-hotplug_pcp-on-pin_current_cpu-retry.patch
dists/trunk/linux/debian/patches/features/all/rt/0141-sched-migrate-disable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0142-hotplug-use-migrate-disable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0143-hotplug-Call-cpu_unplug_begin-before-DOWN_PREPARE.patch
dists/trunk/linux/debian/patches/features/all/rt/0144-ftrace-migrate-disable-tracing.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0145-tracing-Show-padding-as-unsigned-short.patch
dists/trunk/linux/debian/patches/features/all/rt/0146-migrate-disable-rt-variant.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0147-sched-Optimize-migrate_disable.patch
dists/trunk/linux/debian/patches/features/all/rt/0148-sched-Generic-migrate_disable.patch
dists/trunk/linux/debian/patches/features/all/rt/0149-sched-rt-Fix-migrate_enable-thinko.patch
dists/trunk/linux/debian/patches/features/all/rt/0150-sched-teach-migrate_disable-about-atomic-contexts.patch
dists/trunk/linux/debian/patches/features/all/rt/0151-sched-Postpone-actual-migration-disalbe-to-schedule.patch
dists/trunk/linux/debian/patches/features/all/rt/0152-sched-Do-not-compare-cpu-masks-in-scheduler.patch
dists/trunk/linux/debian/patches/features/all/rt/0153-sched-Have-migrate_disable-ignore-bounded-threads.patch
dists/trunk/linux/debian/patches/features/all/rt/0154-sched-clear-pf-thread-bound-on-fallback-rq.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0155-ftrace-crap.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0156-ring-buffer-Convert-reader_lock-from-raw_spin_lock-i.patch
dists/trunk/linux/debian/patches/features/all/rt/0157-net-netif_rx_ni-migrate-disable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0158-softirq-Sanitize-softirq-pending-for-NOHZ-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0159-lockdep-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0160-mutex-no-spin-on-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0161-softirq-local-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0162-softirq-Export-in_serving_softirq.patch
dists/trunk/linux/debian/patches/features/all/rt/0163-hardirq.h-Define-softirq_count-as-OUL-to-kill-build-.patch
dists/trunk/linux/debian/patches/features/all/rt/0164-softirq-Fix-unplug-deadlock.patch
dists/trunk/linux/debian/patches/features/all/rt/0165-softirq-disable-softirq-stacks-for-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0166-softirq-make-fifo.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0167-tasklet-Prevent-tasklets-from-going-into-infinite-sp.patch
dists/trunk/linux/debian/patches/features/all/rt/0168-genirq-Allow-disabling-of-softirq-processing-in-irq-.patch
dists/trunk/linux/debian/patches/features/all/rt/0169-local-vars-migrate-disable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0170-md-raid5-Make-raid5_percpu-handling-RT-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/0171-rtmutex-lock-killable.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0172-rtmutex-futex-prepare-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0173-futex-Fix-bug-on-when-a-requeued-RT-task-times-out.patch
dists/trunk/linux/debian/patches/features/all/rt/0174-rt-mutex-add-sleeping-spinlocks-support.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0175-spinlock-types-separate-raw.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0176-rtmutex-avoid-include-hell.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0177-rt-add-rt-spinlocks.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0178-rt-add-rt-to-mutex-headers.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0179-rwsem-add-rt-variant.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0180-rt-Add-the-preempt-rt-lock-replacement-APIs.patch
dists/trunk/linux/debian/patches/features/all/rt/0181-rwlocks-Fix-section-mismatch.patch
dists/trunk/linux/debian/patches/features/all/rt/0182-timer-handle-idle-trylock-in-get-next-timer-irq.patc.patch
dists/trunk/linux/debian/patches/features/all/rt/0183-RCU-Force-PREEMPT_RCU-for-PREEMPT-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0184-rcu-Frob-softirq-test.patch
dists/trunk/linux/debian/patches/features/all/rt/0185-rcu-Merge-RCU-bh-into-RCU-preempt.patch
dists/trunk/linux/debian/patches/features/all/rt/0186-rcu-Fix-macro-substitution-for-synchronize_rcu_bh-on.patch
dists/trunk/linux/debian/patches/features/all/rt/0187-rcu-more-fallout.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0188-rcu-Make-ksoftirqd-do-RCU-quiescent-states.patch
dists/trunk/linux/debian/patches/features/all/rt/0189-rcu-Fix-build-break.patch
dists/trunk/linux/debian/patches/features/all/rt/0190-rt-rcutree-Move-misplaced-prototype.patch
dists/trunk/linux/debian/patches/features/all/rt/0191-lglocks-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0192-serial-8250-Clean-up-the-locking-for-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0193-serial-8250-Call-flush_to_ldisc-when-the-irq-is-thre.patch
dists/trunk/linux/debian/patches/features/all/rt/0194-drivers-tty-fix-omap-lock-crap.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0195-rt-Improve-the-serial-console-PASS_LIMIT.patch
dists/trunk/linux/debian/patches/features/all/rt/0196-fs-namespace-preemption-fix.patch
dists/trunk/linux/debian/patches/features/all/rt/0197-mm-protect-activate-switch-mm.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0198-mm-Protect-activate_mm-by-preempt_-disable-7Cenable-.patch
dists/trunk/linux/debian/patches/features/all/rt/0199-fs-block-rt-support.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0200-fs-ntfs-disable-interrupt-only-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0201-x86-Convert-mce-timer-to-hrtimer.patch
dists/trunk/linux/debian/patches/features/all/rt/0202-x86-stackprotector-Avoid-random-pool-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0203-x86-Use-generic-rwsem_spinlocks-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0204-x86-Disable-IST-stacks-for-debug-int-3-stack-fault-f.patch
dists/trunk/linux/debian/patches/features/all/rt/0205-workqueue-use-get-cpu-light.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0206-epoll.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0207-mm-vmalloc.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0208-workqueue-Fix-cpuhotplug-trainwreck.patch
dists/trunk/linux/debian/patches/features/all/rt/0209-workqueue-Fix-PF_THREAD_BOUND-abuse.patch
dists/trunk/linux/debian/patches/features/all/rt/0210-workqueue-Use-get_cpu_light-in-flush_gcwq.patch
dists/trunk/linux/debian/patches/features/all/rt/0211-hotplug-stuff.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0212-debugobjects-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0213-jump-label-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0214-skbufhead-raw-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0215-x86-no-perf-irq-work-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0216-console-make-rt-friendly.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0217-fix-printk-flush-of-messages.patch
dists/trunk/linux/debian/patches/features/all/rt/0218-power-use-generic-rwsem-on-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0219-power-disable-highmem-on-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0220-arm-disable-highmem-on-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0221-ARM-at91-tclib-Default-to-tclib-timer-for-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0222-mips-disable-highmem-on-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0223-net-Avoid-livelock-in-net_tx_action-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0224-ping-sysrq.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0225-kgdb-serial-Short-term-workaround.patch
dists/trunk/linux/debian/patches/features/all/rt/0226-add-sys-kernel-realtime-entry.patch
dists/trunk/linux/debian/patches/features/all/rt/0227-mm-rt-kmap_atomic-scheduling.patch
dists/trunk/linux/debian/patches/features/all/rt/0228-ipc-sem-Rework-semaphore-wakeups.patch
dists/trunk/linux/debian/patches/features/all/rt/0229-x86-kvm-require-const-tsc-for-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0230-scsi-fcoe-rt-aware.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0231-x86-crypto-Reduce-preempt-disabled-regions.patch
dists/trunk/linux/debian/patches/features/all/rt/0232-dm-Make-rt-aware.patch
dists/trunk/linux/debian/patches/features/all/rt/0233-cpumask-Disable-CONFIG_CPUMASK_OFFSTACK-for-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0234-seqlock-Prevent-rt-starvation.patch
dists/trunk/linux/debian/patches/features/all/rt/0235-timer-Fix-hotplug-for-rt.patch
dists/trunk/linux/debian/patches/features/all/rt/0236-futex-rt-Fix-possible-lockup-when-taking-pi_lock-in-.patch
dists/trunk/linux/debian/patches/features/all/rt/0237-ring-buffer-rt-Check-for-irqs-disabled-before-grabbi.patch
dists/trunk/linux/debian/patches/features/all/rt/0238-sched-rt-Fix-wait_task_interactive-to-test-rt_spin_l.patch
dists/trunk/linux/debian/patches/features/all/rt/0239-lglock-rt-Use-non-rt-for_each_cpu-in-rt-code.patch
dists/trunk/linux/debian/patches/features/all/rt/0240-cpu-Make-hotplug.lock-a-sleeping-spinlock-on-RT.patch
dists/trunk/linux/debian/patches/features/all/rt/0241-softirq-Check-preemption-after-reenabling-interrupts.patch
dists/trunk/linux/debian/patches/features/all/rt/0242-scsi-qla2xxx-Use-local_irq_save_nort-in-qla2x00_poll.patch
dists/trunk/linux/debian/patches/features/all/rt/0243-net-RT-REmove-preemption-disabling-in-netif_rx.patch
dists/trunk/linux/debian/patches/features/all/rt/0244-rt-Introduce-cpu_chill.patch
dists/trunk/linux/debian/patches/features/all/rt/0245-fs-dcache-Use-cpu_chill-in-trylock-loops.patch
dists/trunk/linux/debian/patches/features/all/rt/0246-net-Use-cpu_chill-instead-of-cpu_relax.patch
dists/trunk/linux/debian/patches/features/all/rt/0247-ntp-Make-ntp_lock-raw.patch
dists/trunk/linux/debian/patches/features/all/rt/0248-mips-remove-smp-reserve-lock.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0249-lockdep-Selftest-convert-spinlock-to-raw-spinlock.patch
dists/trunk/linux/debian/patches/features/all/rt/0250-lockdep-Selftest-Only-do-hardirq-context-test-for-ra.patch
dists/trunk/linux/debian/patches/features/all/rt/0251-genirq-Add-default-affinity-mask-command-line-option.patch
dists/trunk/linux/debian/patches/features/all/rt/0252-kconfig-disable-a-few-options-rt.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0253-kconfig-preempt-rt-full.patch.patch
dists/trunk/linux/debian/patches/features/all/rt/0254-spinlock-rt-Include-bug.h-in-spinlock_rt.h-to-satisf.patch
dists/trunk/linux/debian/patches/features/all/rt/0255-Subject-powerpc-Mark-low-level-irq-handlers-NO_THREA.patch
dists/trunk/linux/debian/patches/features/all/rt/0256-Linux-3.4.4-rt13-REBASE.patch
Modified:
dists/trunk/linux/debian/changelog
dists/trunk/linux/debian/config/amd64/defines
dists/trunk/linux/debian/config/defines
dists/trunk/linux/debian/config/i386/defines
dists/trunk/linux/debian/patches/features/all/rt/series
dists/trunk/linux/debian/patches/series-rt
Modified: dists/trunk/linux/debian/changelog
==============================================================================
--- dists/trunk/linux/debian/changelog Wed Oct 24 13:58:28 2012 (r19457)
+++ dists/trunk/linux/debian/changelog Wed Oct 24 14:29:13 2012 (r19458)
@@ -9,6 +9,9 @@
[ Ben Hutchings ]
* aufs: Update to aufs3.x-rcN-20120827
+ [ Uwe Kleine-König ]
+ * reenable the rt featureset using 3.6.3-rt6
+
-- Bastian Blank <waldi at debian.org> Thu, 04 Oct 2012 17:50:39 +0200
linux (3.5.5-1~experimental.1) experimental; urgency=low
Modified: dists/trunk/linux/debian/config/amd64/defines
==============================================================================
--- dists/trunk/linux/debian/config/amd64/defines Wed Oct 24 13:58:28 2012 (r19457)
+++ dists/trunk/linux/debian/config/amd64/defines Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,7 @@
[base]
featuresets:
none
-# rt
+ rt
kernel-arch: x86
[build]
Modified: dists/trunk/linux/debian/config/defines
==============================================================================
--- dists/trunk/linux/debian/config/defines Wed Oct 24 13:58:28 2012 (r19457)
+++ dists/trunk/linux/debian/config/defines Wed Oct 24 14:29:13 2012 (r19458)
@@ -24,7 +24,7 @@
compiler: gcc-4.6
featuresets:
none
-# rt
+ rt
[featureset-rt_base]
enabled: true
Modified: dists/trunk/linux/debian/config/i386/defines
==============================================================================
--- dists/trunk/linux/debian/config/i386/defines Wed Oct 24 13:58:28 2012 (r19457)
+++ dists/trunk/linux/debian/config/i386/defines Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,7 @@
[base]
featuresets:
none
-# rt
+ rt
kernel-arch: x86
[description]
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/acpi-use-local-irq-nort.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0068-acpi-Do-not-disable-interrupts-on-PREEMPT_RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0068-acpi-Do-not-disable-interrupts-on-PREEMPT_RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/acpi-use-local-irq-nort.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,19 @@
-From 8f93e949d590fddc2be4a3cb7c55ed382d6a55a3 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 21 Jul 2009 22:54:51 +0200
-Subject: [068/256] acpi: Do not disable interrupts on PREEMPT_RT
+Subject: acpi: Do not disable interrupts on PREEMPT_RT
Use the local_irq_*_nort() variants.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
arch/x86/include/asm/acpi.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h
-index 610001d..c1c23d2 100644
---- a/arch/x86/include/asm/acpi.h
-+++ b/arch/x86/include/asm/acpi.h
+Index: linux-stable/arch/x86/include/asm/acpi.h
+===================================================================
+--- linux-stable.orig/arch/x86/include/asm/acpi.h
++++ linux-stable/arch/x86/include/asm/acpi.h
@@ -51,8 +51,8 @@
#define ACPI_ASM_MACROS
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/arch-use-pagefault-disabled.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0033-mm-Fixup-all-fault-handlers-to-check-current-pagefau.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0033-mm-Fixup-all-fault-handlers-to-check-current-pagefau.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/arch-use-pagefault-disabled.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From 778005b19875f30c628c68ebc54229ca06619fcd Mon Sep 17 00:00:00 2001
+Subject: mm: Fixup all fault handlers to check current->pagefault_disable
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 17 Mar 2011 11:32:28 +0100
-Subject: [033/256] mm: Fixup all fault handlers to check
- current->pagefault_disable
Necessary for decoupling pagefault disable from preempt count.
@@ -23,20 +21,20 @@
arch/powerpc/mm/fault.c | 2 +-
arch/s390/mm/fault.c | 6 ++++--
arch/score/mm/fault.c | 2 +-
- arch/sh/mm/fault_32.c | 2 +-
- arch/sparc/mm/fault_32.c | 4 ++--
+ arch/sh/mm/fault.c | 2 +-
+ arch/sparc/mm/fault_32.c | 2 +-
arch/sparc/mm/fault_64.c | 2 +-
arch/tile/mm/fault.c | 2 +-
arch/um/kernel/trap.c | 2 +-
arch/x86/mm/fault.c | 2 +-
arch/xtensa/mm/fault.c | 2 +-
- 22 files changed, 27 insertions(+), 24 deletions(-)
+ 22 files changed, 26 insertions(+), 23 deletions(-)
-diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
-index 5eecab1..0ddf6c0 100644
---- a/arch/alpha/mm/fault.c
-+++ b/arch/alpha/mm/fault.c
-@@ -106,7 +106,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
+Index: linux-stable/arch/alpha/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/alpha/mm/fault.c
++++ linux-stable/arch/alpha/mm/fault.c
+@@ -108,7 +108,7 @@ do_page_fault(unsigned long address, uns
/* If we're in an interrupt context, or have no user context,
we must not take the fault. */
@@ -45,11 +43,11 @@
goto no_context;
#ifdef CONFIG_ALPHA_LARGE_VMALLOC
-diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
-index 5bb4835..40bd40f 100644
---- a/arch/arm/mm/fault.c
-+++ b/arch/arm/mm/fault.c
-@@ -279,7 +279,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
+Index: linux-stable/arch/arm/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/arm/mm/fault.c
++++ linux-stable/arch/arm/mm/fault.c
+@@ -279,7 +279,7 @@ do_page_fault(unsigned long addr, unsign
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -58,11 +56,11 @@
goto no_context;
/*
-diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c
-index f7040a1..623a027 100644
---- a/arch/avr32/mm/fault.c
-+++ b/arch/avr32/mm/fault.c
-@@ -81,7 +81,8 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
+Index: linux-stable/arch/avr32/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/avr32/mm/fault.c
++++ linux-stable/arch/avr32/mm/fault.c
+@@ -81,7 +81,8 @@ asmlinkage void do_page_fault(unsigned l
* If we're in an interrupt or have no user context, we must
* not take the fault...
*/
@@ -72,11 +70,11 @@
goto no_context;
local_irq_enable();
-diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c
-index b4760d8..1c1630e 100644
---- a/arch/cris/mm/fault.c
-+++ b/arch/cris/mm/fault.c
-@@ -112,7 +112,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
+Index: linux-stable/arch/cris/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/cris/mm/fault.c
++++ linux-stable/arch/cris/mm/fault.c
+@@ -114,7 +114,7 @@ do_page_fault(unsigned long address, str
* user context, we must not take the fault.
*/
@@ -84,12 +82,12 @@
+ if (in_atomic() || !mm || current->pagefault_disabled)
goto no_context;
- down_read(&mm->mmap_sem);
-diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c
-index 331c1e2..6372088 100644
---- a/arch/frv/mm/fault.c
-+++ b/arch/frv/mm/fault.c
-@@ -78,7 +78,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
+ retry:
+Index: linux-stable/arch/frv/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/frv/mm/fault.c
++++ linux-stable/arch/frv/mm/fault.c
+@@ -78,7 +78,7 @@ asmlinkage void do_page_fault(int datamm
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -98,11 +96,11 @@
goto no_context;
down_read(&mm->mmap_sem);
-diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
-index 02d29c2..721dbb9 100644
---- a/arch/ia64/mm/fault.c
-+++ b/arch/ia64/mm/fault.c
-@@ -88,7 +88,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
+Index: linux-stable/arch/ia64/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/ia64/mm/fault.c
++++ linux-stable/arch/ia64/mm/fault.c
+@@ -98,7 +98,7 @@ ia64_do_page_fault (unsigned long addres
/*
* If we're in an interrupt or have no user context, we must not take the fault..
*/
@@ -111,11 +109,11 @@
goto no_context;
#ifdef CONFIG_VIRTUAL_MEM_MAP
-diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c
-index 3cdfa9c..1eec8af 100644
---- a/arch/m32r/mm/fault.c
-+++ b/arch/m32r/mm/fault.c
-@@ -114,7 +114,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code,
+Index: linux-stable/arch/m32r/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/m32r/mm/fault.c
++++ linux-stable/arch/m32r/mm/fault.c
+@@ -114,7 +114,7 @@ asmlinkage void do_page_fault(struct pt_
* If we're in an interrupt or have no user context or are running in an
* atomic region then we must not take the fault..
*/
@@ -124,11 +122,11 @@
goto bad_area_nosemaphore;
/* When running in the kernel we expect faults to occur only to
-diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
-index 6b020a8..7a4cc68 100644
---- a/arch/m68k/mm/fault.c
-+++ b/arch/m68k/mm/fault.c
-@@ -84,7 +84,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
+Index: linux-stable/arch/m68k/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/m68k/mm/fault.c
++++ linux-stable/arch/m68k/mm/fault.c
+@@ -85,7 +85,7 @@ int do_page_fault(struct pt_regs *regs,
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -136,12 +134,12 @@
+ if (in_atomic() || !mm || current->pagefault_disabled)
goto no_context;
- down_read(&mm->mmap_sem);
-diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
-index c38a265..621ad49 100644
---- a/arch/microblaze/mm/fault.c
-+++ b/arch/microblaze/mm/fault.c
-@@ -106,7 +106,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
+ retry:
+Index: linux-stable/arch/microblaze/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/microblaze/mm/fault.c
++++ linux-stable/arch/microblaze/mm/fault.c
+@@ -108,7 +108,7 @@ void do_page_fault(struct pt_regs *regs,
if ((error_code & 0x13) == 0x13 || (error_code & 0x11) == 0x11)
is_write = 0;
@@ -150,11 +148,11 @@
if (kernel_mode(regs))
goto bad_area_nosemaphore;
-diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
-index c14f6df..3468e69 100644
---- a/arch/mips/mm/fault.c
-+++ b/arch/mips/mm/fault.c
-@@ -89,7 +89,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ
+Index: linux-stable/arch/mips/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/mips/mm/fault.c
++++ linux-stable/arch/mips/mm/fault.c
+@@ -89,7 +89,7 @@ asmlinkage void __kprobes do_page_fault(
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -163,11 +161,11 @@
goto bad_area_nosemaphore;
retry:
-diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c
-index 90f346f..ff5acf5 100644
---- a/arch/mn10300/mm/fault.c
-+++ b/arch/mn10300/mm/fault.c
-@@ -167,7 +167,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long fault_code,
+Index: linux-stable/arch/mn10300/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/mn10300/mm/fault.c
++++ linux-stable/arch/mn10300/mm/fault.c
+@@ -167,7 +167,7 @@ asmlinkage void do_page_fault(struct pt_
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -176,11 +174,11 @@
goto no_context;
down_read(&mm->mmap_sem);
-diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
-index 18162ce..09ecc8a 100644
---- a/arch/parisc/mm/fault.c
-+++ b/arch/parisc/mm/fault.c
-@@ -176,7 +176,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
+Index: linux-stable/arch/parisc/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/parisc/mm/fault.c
++++ linux-stable/arch/parisc/mm/fault.c
+@@ -176,7 +176,7 @@ void do_page_fault(struct pt_regs *regs,
unsigned long acc_type;
int fault;
@@ -189,11 +187,11 @@
goto no_context;
down_read(&mm->mmap_sem);
-diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
-index 08ffcf5..6642dff 100644
---- a/arch/powerpc/mm/fault.c
-+++ b/arch/powerpc/mm/fault.c
-@@ -261,7 +261,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
+Index: linux-stable/arch/powerpc/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/powerpc/mm/fault.c
++++ linux-stable/arch/powerpc/mm/fault.c
+@@ -261,7 +261,7 @@ int __kprobes do_page_fault(struct pt_re
if (!arch_irq_disabled_regs(regs))
local_irq_enable();
@@ -202,11 +200,11 @@
if (!user_mode(regs))
return SIGSEGV;
/* in_atomic() in user mode is really bad,
-diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
-index 4e66860..f7d796f 100644
---- a/arch/s390/mm/fault.c
-+++ b/arch/s390/mm/fault.c
-@@ -283,7 +283,8 @@ static inline int do_exception(struct pt_regs *regs, int access)
+Index: linux-stable/arch/s390/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/s390/mm/fault.c
++++ linux-stable/arch/s390/mm/fault.c
+@@ -286,7 +286,8 @@ static inline int do_exception(struct pt
* user context.
*/
fault = VM_FAULT_BADCONTEXT;
@@ -216,7 +214,7 @@
goto out;
address = trans_exc_code & __FAIL_ADDR_MASK;
-@@ -415,7 +416,8 @@ void __kprobes do_asce_exception(struct pt_regs *regs)
+@@ -423,7 +424,8 @@ void __kprobes do_asce_exception(struct
unsigned long trans_exc_code;
trans_exc_code = regs->int_parm_long;
@@ -226,11 +224,11 @@
goto no_context;
down_read(&mm->mmap_sem);
-diff --git a/arch/score/mm/fault.c b/arch/score/mm/fault.c
-index 47b600e..4c12824 100644
---- a/arch/score/mm/fault.c
-+++ b/arch/score/mm/fault.c
-@@ -72,7 +72,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
+Index: linux-stable/arch/score/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/score/mm/fault.c
++++ linux-stable/arch/score/mm/fault.c
+@@ -72,7 +72,7 @@ asmlinkage void do_page_fault(struct pt_
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -239,39 +237,37 @@
goto bad_area_nosemaphore;
down_read(&mm->mmap_sem);
-diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c
-index e99b104..8c3ae42 100644
---- a/arch/sh/mm/fault_32.c
-+++ b/arch/sh/mm/fault_32.c
-@@ -166,7 +166,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
+Index: linux-stable/arch/sh/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/sh/mm/fault.c
++++ linux-stable/arch/sh/mm/fault.c
+@@ -445,7 +445,7 @@ asmlinkage void __kprobes do_page_fault(
* If we're in an interrupt, have no user context or are running
* in an atomic region then we must not take the fault:
*/
-- if (in_atomic() || !mm)
-+ if (in_atomic() || !mm || current->pagefault_disabled)
- goto no_context;
-
- down_read(&mm->mmap_sem);
-diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
-index df3155a..ffaa99e 100644
---- a/arch/sparc/mm/fault_32.c
-+++ b/arch/sparc/mm/fault_32.c
-@@ -248,8 +248,8 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
+- if (unlikely(in_atomic() || !mm)) {
++ if (unlikely(in_atomic() || !mm || current->pagefault_disabled)) {
+ bad_area_nosemaphore(regs, error_code, address);
+ return;
+ }
+Index: linux-stable/arch/sparc/mm/fault_32.c
+===================================================================
+--- linux-stable.orig/arch/sparc/mm/fault_32.c
++++ linux-stable/arch/sparc/mm/fault_32.c
+@@ -200,7 +200,7 @@ asmlinkage void do_sparc_fault(struct pt
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
-- if (in_atomic() || !mm)
-- goto no_context;
+- if (in_atomic() || !mm)
+ if (in_atomic() || !mm || current->pagefault_disabled)
-+ goto no_context;
+ goto no_context;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
-
-diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
-index 1fe0429..fbd5e11 100644
---- a/arch/sparc/mm/fault_64.c
-+++ b/arch/sparc/mm/fault_64.c
-@@ -323,7 +323,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
+Index: linux-stable/arch/sparc/mm/fault_64.c
+===================================================================
+--- linux-stable.orig/arch/sparc/mm/fault_64.c
++++ linux-stable/arch/sparc/mm/fault_64.c
+@@ -323,7 +323,7 @@ asmlinkage void __kprobes do_sparc64_fau
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -280,11 +276,11 @@
goto intr_or_no_mm;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
-diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c
-index 22e58f5..f683aad 100644
---- a/arch/tile/mm/fault.c
-+++ b/arch/tile/mm/fault.c
-@@ -355,7 +355,7 @@ static int handle_page_fault(struct pt_regs *regs,
+Index: linux-stable/arch/tile/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/tile/mm/fault.c
++++ linux-stable/arch/tile/mm/fault.c
+@@ -359,7 +359,7 @@ static int handle_page_fault(struct pt_r
* If we're in an interrupt, have no user context or are running in an
* atomic region then we must not take the fault.
*/
@@ -293,24 +289,24 @@
vma = NULL; /* happy compiler */
goto bad_area_nosemaphore;
}
-diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
-index dafc947..a283400 100644
---- a/arch/um/kernel/trap.c
-+++ b/arch/um/kernel/trap.c
-@@ -37,7 +37,7 @@ int handle_page_fault(unsigned long address, unsigned long ip,
+Index: linux-stable/arch/um/kernel/trap.c
+===================================================================
+--- linux-stable.orig/arch/um/kernel/trap.c
++++ linux-stable/arch/um/kernel/trap.c
+@@ -39,7 +39,7 @@ int handle_page_fault(unsigned long addr
* If the fault was during atomic operation, don't take the fault, just
* fail.
*/
- if (in_atomic())
-+ if (in_atomic() || !mm || current->pagefault_disabled)
++ if (in_atomic() || current->pagefault_disabled)
goto out_nosemaphore;
- down_read(&mm->mmap_sem);
-diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
-index 3ecfd1a..bb891f2 100644
---- a/arch/x86/mm/fault.c
-+++ b/arch/x86/mm/fault.c
-@@ -1094,7 +1094,7 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code)
+ retry:
+Index: linux-stable/arch/x86/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/x86/mm/fault.c
++++ linux-stable/arch/x86/mm/fault.c
+@@ -1094,7 +1094,7 @@ do_page_fault(struct pt_regs *regs, unsi
* If we're in an interrupt, have no user context or are running
* in an atomic region then we must not take the fault:
*/
@@ -319,11 +315,11 @@
bad_area_nosemaphore(regs, error_code, address);
return;
}
-diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
-index b17885a..cc58b7c 100644
---- a/arch/xtensa/mm/fault.c
-+++ b/arch/xtensa/mm/fault.c
-@@ -56,7 +56,7 @@ void do_page_fault(struct pt_regs *regs)
+Index: linux-stable/arch/xtensa/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/xtensa/mm/fault.c
++++ linux-stable/arch/xtensa/mm/fault.c
+@@ -57,7 +57,7 @@ void do_page_fault(struct pt_regs *regs)
/* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/arm-allow-irq-threading.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0017-arm-Allow-forced-irq-threading.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0017-arm-Allow-forced-irq-threading.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/arm-allow-irq-threading.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 4e48dbb83d55f79960fe418e48e37ba72ce33b9a Mon Sep 17 00:00:00 2001
+Subject: arm: Allow forced irq threading
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 16 Jul 2011 13:15:20 +0200
-Subject: [017/256] arm: Allow forced irq threading
All timer interrupts and the perf interrupt are marked NO_THREAD, so
its safe to allow forced interrupt threading.
@@ -11,12 +10,14 @@
arch/arm/Kconfig | 1 +
1 file changed, 1 insertion(+)
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -31,6 +31,7 @@
- select HAVE_C_RECORDMCOUNT
- select HAVE_GENERIC_HARDIRQS
+Index: linux-stable/arch/arm/Kconfig
+===================================================================
+--- linux-stable.orig/arch/arm/Kconfig
++++ linux-stable/arch/arm/Kconfig
+@@ -40,6 +40,7 @@ config ARM
select GENERIC_IRQ_SHOW
+ select ARCH_WANT_IPC_PARSE_VERSION
+ select HARDIRQS_SW_RESEND
+ select IRQ_FORCED_THREADING
select CPU_PM if (SUSPEND || CPU_IDLE)
select GENERIC_PCI_IOMAP
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0026-ARM-AT91-PIT-Remove-irq-handler-when-clock-event-is-.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0026-ARM-AT91-PIT-Remove-irq-handler-when-clock-event-is-.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From 58f015923d7d9267139ff8bce42f2f6215db1540 Mon Sep 17 00:00:00 2001
From: Benedikt Spranger <b.spranger at linutronix.de>
Date: Sat, 6 Mar 2010 17:47:10 +0100
-Subject: [026/256] ARM: AT91: PIT: Remove irq handler when clock event is
- unused
+Subject: ARM: AT91: PIT: Remove irq handler when clock event is unused
Setup and remove the interrupt handler in clock event mode selection.
This avoids calling the (shared) interrupt handler when the device is
@@ -10,16 +8,17 @@
Signed-off-by: Benedikt Spranger <b.spranger at linutronix.de>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
arch/arm/mach-at91/at91rm9200_time.c | 1 +
arch/arm/mach-at91/at91sam926x_time.c | 5 ++++-
2 files changed, 5 insertions(+), 1 deletion(-)
-diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c
-index 104ca40..49aea48 100644
---- a/arch/arm/mach-at91/at91rm9200_time.c
-+++ b/arch/arm/mach-at91/at91rm9200_time.c
-@@ -130,6 +130,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
+Index: linux-stable/arch/arm/mach-at91/at91rm9200_time.c
+===================================================================
+--- linux-stable.orig/arch/arm/mach-at91/at91rm9200_time.c
++++ linux-stable/arch/arm/mach-at91/at91rm9200_time.c
+@@ -130,6 +130,7 @@ clkevt32k_mode(enum clock_event_mode mod
break;
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_UNUSED:
@@ -27,10 +26,10 @@
case CLOCK_EVT_MODE_RESUME:
irqmask = 0;
break;
-diff --git a/arch/arm/mach-at91/at91sam926x_time.c b/arch/arm/mach-at91/at91sam926x_time.c
-index a94758b..dd300f3 100644
---- a/arch/arm/mach-at91/at91sam926x_time.c
-+++ b/arch/arm/mach-at91/at91sam926x_time.c
+Index: linux-stable/arch/arm/mach-at91/at91sam926x_time.c
+===================================================================
+--- linux-stable.orig/arch/arm/mach-at91/at91sam926x_time.c
++++ linux-stable/arch/arm/mach-at91/at91sam926x_time.c
@@ -67,7 +67,7 @@ static struct clocksource pit_clk = {
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
@@ -40,7 +39,7 @@
/*
* Clockevent device: interrupts every 1/HZ (== pit_cycles * MCK/16)
*/
-@@ -76,6 +76,8 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
+@@ -76,6 +76,8 @@ pit_clkevt_mode(enum clock_event_mode mo
{
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
@@ -49,7 +48,7 @@
/* update clocksource counter */
pit_cnt += pit_cycle * PIT_PICNT(pit_read(AT91_PIT_PIVR));
pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN
-@@ -88,6 +90,7 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
+@@ -88,6 +90,7 @@ pit_clkevt_mode(enum clock_event_mode mo
case CLOCK_EVT_MODE_UNUSED:
/* disable irq, leaving the clocksource active */
pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/arm-at91-tclib-default-to-tclib-timer-for-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0221-ARM-at91-tclib-Default-to-tclib-timer-for-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0221-ARM-at91-tclib-Default-to-tclib-timer-for-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/arm-at91-tclib-default-to-tclib-timer-for-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From e1833c8a323d39284e16ea1d483a43ea3e210291 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 1 May 2010 18:29:35 +0200
-Subject: [221/256] ARM: at91: tclib: Default to tclib timer for RT
+Subject: ARM: at91: tclib: Default to tclib timer for RT
RT is not too happy about the shared timer interrupt in AT91
devices. Default to tclib timer for RT.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/misc/Kconfig | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index eead6ce..ecda1c4 100644
---- a/drivers/misc/Kconfig
-+++ b/drivers/misc/Kconfig
-@@ -72,6 +72,7 @@ config AB8500_PWM
+Index: linux-stable/drivers/misc/Kconfig
+===================================================================
+--- linux-stable.orig/drivers/misc/Kconfig
++++ linux-stable/drivers/misc/Kconfig
+@@ -73,6 +73,7 @@ config AB8500_PWM
config ATMEL_TCLIB
bool "Atmel AT32/AT91 Timer/Counter Library"
depends on (AVR32 || ARCH_AT91)
@@ -23,7 +23,7 @@
help
Select this if you want a library to allocate the Timer/Counter
blocks found on many Atmel processors. This facilitates using
-@@ -104,7 +105,7 @@ config ATMEL_TCB_CLKSRC_BLOCK
+@@ -105,7 +106,7 @@ config ATMEL_TCB_CLKSRC_BLOCK
config ATMEL_TCB_CLKSRC_USE_SLOW_CLOCK
bool "TC Block use 32 KiHz clock"
depends on ATMEL_TCB_CLKSRC
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/arm-convert-boot-lock-to-raw.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0018-preempt-rt-Convert-arm-boot_lock-to-raw.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0018-preempt-rt-Convert-arm-boot_lock-to-raw.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/arm-convert-boot-lock-to-raw.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,7 @@
-From 98d149e1f5d94d6314e5bbc07dd4bd0b1c2f8684 Mon Sep 17 00:00:00 2001
+Subject: preempt-rt: Convert arm boot_lock to raw
From: Frank Rowand <frank.rowand at am.sony.com>
Date: Mon, 19 Sep 2011 14:51:14 -0700
-Subject: [018/256] preempt-rt: Convert arm boot_lock to raw
+
The arm boot_lock is used by the secondary processor startup code. The locking
task is the idle thread, which has idle->sched_class == &idle_sched_class.
@@ -27,10 +27,10 @@
arch/arm/plat-versatile/platsmp.c | 10 +++++-----
5 files changed, 26 insertions(+), 26 deletions(-)
-diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c
-index 36c3984..77499ea 100644
---- a/arch/arm/mach-exynos/platsmp.c
-+++ b/arch/arm/mach-exynos/platsmp.c
+Index: linux-stable/arch/arm/mach-exynos/platsmp.c
+===================================================================
+--- linux-stable.orig/arch/arm/mach-exynos/platsmp.c
++++ linux-stable/arch/arm/mach-exynos/platsmp.c
@@ -62,7 +62,7 @@ static void __iomem *scu_base_addr(void)
return (void __iomem *)(S5P_VA_SCU);
}
@@ -40,7 +40,7 @@
void __cpuinit platform_secondary_init(unsigned int cpu)
{
-@@ -82,8 +82,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
+@@ -82,8 +82,8 @@ void __cpuinit platform_secondary_init(u
/*
* Synchronise with the boot thread.
*/
@@ -51,7 +51,7 @@
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
-@@ -94,7 +94,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -94,7 +94,7 @@ int __cpuinit boot_secondary(unsigned in
* Set synchronisation state between this boot processor
* and the secondary one
*/
@@ -60,7 +60,7 @@
/*
* The secondary processor is waiting to be released from
-@@ -123,7 +123,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -123,7 +123,7 @@ int __cpuinit boot_secondary(unsigned in
if (timeout == 0) {
printk(KERN_ERR "cpu1 power enable failed");
@@ -69,7 +69,7 @@
return -ETIMEDOUT;
}
}
-@@ -151,7 +151,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -151,7 +151,7 @@ int __cpuinit boot_secondary(unsigned in
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@@ -78,10 +78,10 @@
return pen_release != -1 ? -ENOSYS : 0;
}
-diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c
-index db0117e..87daf5f 100644
---- a/arch/arm/mach-msm/platsmp.c
-+++ b/arch/arm/mach-msm/platsmp.c
+Index: linux-stable/arch/arm/mach-msm/platsmp.c
+===================================================================
+--- linux-stable.orig/arch/arm/mach-msm/platsmp.c
++++ linux-stable/arch/arm/mach-msm/platsmp.c
@@ -40,7 +40,7 @@ extern void msm_secondary_startup(void);
*/
volatile int pen_release = -1;
@@ -91,7 +91,7 @@
static inline int get_core_count(void)
{
-@@ -70,8 +70,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
+@@ -70,8 +70,8 @@ void __cpuinit platform_secondary_init(u
/*
* Synchronise with the boot thread.
*/
@@ -102,7 +102,7 @@
}
static __cpuinit void prepare_cold_cpu(unsigned int cpu)
-@@ -108,7 +108,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -108,7 +108,7 @@ int __cpuinit boot_secondary(unsigned in
* set synchronisation state between this boot processor
* and the secondary one
*/
@@ -111,7 +111,7 @@
/*
* The secondary processor is waiting to be released from
-@@ -142,7 +142,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -142,7 +142,7 @@ int __cpuinit boot_secondary(unsigned in
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@@ -120,11 +120,11 @@
return pen_release != -1 ? -ENOSYS : 0;
}
-diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
-index deffbf1..81ca676 100644
---- a/arch/arm/mach-omap2/omap-smp.c
-+++ b/arch/arm/mach-omap2/omap-smp.c
-@@ -34,7 +34,7 @@
+Index: linux-stable/arch/arm/mach-omap2/omap-smp.c
+===================================================================
+--- linux-stable.orig/arch/arm/mach-omap2/omap-smp.c
++++ linux-stable/arch/arm/mach-omap2/omap-smp.c
+@@ -42,7 +42,7 @@
/* SCU base address */
static void __iomem *scu_base;
@@ -133,7 +133,7 @@
void __iomem *omap4_get_scu_base(void)
{
-@@ -65,8 +65,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
+@@ -73,8 +73,8 @@ void __cpuinit platform_secondary_init(u
/*
* Synchronise with the boot thread.
*/
@@ -144,7 +144,7 @@
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
-@@ -77,7 +77,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -87,7 +87,7 @@ int __cpuinit boot_secondary(unsigned in
* Set synchronisation state between this boot processor
* and the secondary one
*/
@@ -153,7 +153,7 @@
/*
* Update the AuxCoreBoot0 with boot state for secondary core.
-@@ -117,7 +117,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -131,7 +131,7 @@ int __cpuinit boot_secondary(unsigned in
* Now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@@ -162,11 +162,11 @@
return 0;
}
-diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c
-index eff5842..acc9da2 100644
---- a/arch/arm/mach-ux500/platsmp.c
-+++ b/arch/arm/mach-ux500/platsmp.c
-@@ -58,7 +58,7 @@ static void __iomem *scu_base_addr(void)
+Index: linux-stable/arch/arm/mach-ux500/platsmp.c
+===================================================================
+--- linux-stable.orig/arch/arm/mach-ux500/platsmp.c
++++ linux-stable/arch/arm/mach-ux500/platsmp.c
+@@ -56,7 +56,7 @@ static void __iomem *scu_base_addr(void)
return NULL;
}
@@ -175,7 +175,7 @@
void __cpuinit platform_secondary_init(unsigned int cpu)
{
-@@ -78,8 +78,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
+@@ -76,8 +76,8 @@ void __cpuinit platform_secondary_init(u
/*
* Synchronise with the boot thread.
*/
@@ -186,7 +186,7 @@
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
-@@ -90,7 +90,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -88,7 +88,7 @@ int __cpuinit boot_secondary(unsigned in
* set synchronisation state between this boot processor
* and the secondary one
*/
@@ -195,7 +195,7 @@
/*
* The secondary processor is waiting to be released from
-@@ -111,7 +111,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -109,7 +109,7 @@ int __cpuinit boot_secondary(unsigned in
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@@ -204,11 +204,11 @@
return pen_release != -1 ? -ENOSYS : 0;
}
-diff --git a/arch/arm/plat-versatile/platsmp.c b/arch/arm/plat-versatile/platsmp.c
-index 49c7db4..1f7a3d2 100644
---- a/arch/arm/plat-versatile/platsmp.c
-+++ b/arch/arm/plat-versatile/platsmp.c
-@@ -38,7 +38,7 @@ static void __cpuinit write_pen_release(int val)
+Index: linux-stable/arch/arm/plat-versatile/platsmp.c
+===================================================================
+--- linux-stable.orig/arch/arm/plat-versatile/platsmp.c
++++ linux-stable/arch/arm/plat-versatile/platsmp.c
+@@ -38,7 +38,7 @@ static void __cpuinit write_pen_release(
outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1));
}
@@ -217,7 +217,7 @@
void __cpuinit platform_secondary_init(unsigned int cpu)
{
-@@ -58,8 +58,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
+@@ -58,8 +58,8 @@ void __cpuinit platform_secondary_init(u
/*
* Synchronise with the boot thread.
*/
@@ -228,7 +228,7 @@
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
-@@ -70,7 +70,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -70,7 +70,7 @@ int __cpuinit boot_secondary(unsigned in
* Set synchronisation state between this boot processor
* and the secondary one
*/
@@ -237,7 +237,7 @@
/*
* This is really belt and braces; we hold unintended secondary
-@@ -100,7 +100,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
+@@ -100,7 +100,7 @@ int __cpuinit boot_secondary(unsigned in
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/arm-disable-highmem-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0220-arm-disable-highmem-on-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0220-arm-disable-highmem-on-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/arm-disable-highmem-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 258667122b870cded6481bb169c1cc4fc28d6913 Mon Sep 17 00:00:00 2001
+Subject: arm-disable-highmem-on-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 18 Jul 2011 17:09:28 +0200
-Subject: [220/256] arm-disable-highmem-on-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
arch/arm/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index f6fa4db..be61c6e 100644
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -1725,7 +1725,7 @@ config HAVE_ARCH_PFN_VALID
+Index: linux-stable/arch/arm/Kconfig
+===================================================================
+--- linux-stable.orig/arch/arm/Kconfig
++++ linux-stable/arch/arm/Kconfig
+@@ -1737,7 +1737,7 @@ config HAVE_ARCH_PFN_VALID
config HIGHMEM
bool "High Memory Support"
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/arm-mark-pmu-interupt-no-thread.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0016-arm-Mark-pmu-interupt-IRQF_NO_THREAD.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0016-arm-Mark-pmu-interupt-IRQF_NO_THREAD.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/arm-mark-pmu-interupt-no-thread.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From a3c959e3bc9ff28e2ed8468d32b36137a7cfcd05 Mon Sep 17 00:00:00 2001
+Subject: arm: Mark pmu interupt IRQF_NO_THREAD
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 16 Mar 2011 14:45:31 +0100
-Subject: [016/256] arm: Mark pmu interupt IRQF_NO_THREAD
PMU interrupt must not be threaded. Remove IRQF_DISABLED while at it
as we run all handlers with interrupts disabled anyway.
@@ -11,11 +10,11 @@
arch/arm/kernel/perf_event.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
-index 186c8cb..b2216b7 100644
---- a/arch/arm/kernel/perf_event.c
-+++ b/arch/arm/kernel/perf_event.c
-@@ -433,7 +433,7 @@ armpmu_reserve_hardware(struct arm_pmu *armpmu)
+Index: linux-stable/arch/arm/kernel/perf_event.c
+===================================================================
+--- linux-stable.orig/arch/arm/kernel/perf_event.c
++++ linux-stable/arch/arm/kernel/perf_event.c
+@@ -430,7 +430,7 @@ armpmu_reserve_hardware(struct arm_pmu *
}
err = request_irq(irq, handle_irq,
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/arm-omap-make-wakeupgen_lock-raw.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0019-arm-omap-make-wakeupgen_lock-raw.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0019-arm-omap-make-wakeupgen_lock-raw.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/arm-omap-make-wakeupgen_lock-raw.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,27 +1,26 @@
-From b681b3c0f275d25de13484b9235c11b2bd2cac7f Mon Sep 17 00:00:00 2001
+Subject: arm-omap-make-wakeupgen_lock-raw.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 11 Apr 2012 11:26:38 +0200
-Subject: [019/256] arm-omap-make-wakeupgen_lock-raw.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
arch/arm/mach-omap2/omap-wakeupgen.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
-diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c
-index 42cd7fb..dbc2914 100644
---- a/arch/arm/mach-omap2/omap-wakeupgen.c
-+++ b/arch/arm/mach-omap2/omap-wakeupgen.c
-@@ -43,7 +43,7 @@
+Index: linux-stable/arch/arm/mach-omap2/omap-wakeupgen.c
+===================================================================
+--- linux-stable.orig/arch/arm/mach-omap2/omap-wakeupgen.c
++++ linux-stable/arch/arm/mach-omap2/omap-wakeupgen.c
+@@ -45,7 +45,7 @@
static void __iomem *wakeupgen_base;
static void __iomem *sar_base;
-static DEFINE_SPINLOCK(wakeupgen_lock);
+static DEFINE_RAW_SPINLOCK(wakeupgen_lock);
- static unsigned int irq_target_cpu[NR_IRQS];
-
- /*
-@@ -128,9 +128,9 @@ static void wakeupgen_mask(struct irq_data *d)
+ static unsigned int irq_target_cpu[MAX_IRQS];
+ static unsigned int irq_banks = MAX_NR_REG_BANKS;
+ static unsigned int max_irqs = MAX_IRQS;
+@@ -133,9 +133,9 @@ static void wakeupgen_mask(struct irq_da
{
unsigned long flags;
@@ -33,7 +32,7 @@
}
/*
-@@ -140,9 +140,9 @@ static void wakeupgen_unmask(struct irq_data *d)
+@@ -145,9 +145,9 @@ static void wakeupgen_unmask(struct irq_
{
unsigned long flags;
@@ -45,7 +44,7 @@
}
#ifdef CONFIG_HOTPLUG_CPU
-@@ -183,7 +183,7 @@ static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set)
+@@ -188,7 +188,7 @@ static void wakeupgen_irqmask_all(unsign
{
unsigned long flags;
@@ -54,7 +53,7 @@
if (set) {
_wakeupgen_save_masks(cpu);
_wakeupgen_set_all(cpu, WKG_MASK_ALL);
-@@ -191,7 +191,7 @@ static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set)
+@@ -196,7 +196,7 @@ static void wakeupgen_irqmask_all(unsign
_wakeupgen_set_all(cpu, WKG_UNMASK_ALL);
_wakeupgen_restore_masks(cpu);
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ata-disable-interrupts-if-non-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0064-ata-Do-not-disable-interrupts-in-ide-code-for-preemp.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0064-ata-Do-not-disable-interrupts-in-ide-code-for-preemp.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ata-disable-interrupts-if-non-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,22 @@
-From 8924ef79ece1396ff4aef7027ac8fdf279349515 Mon Sep 17 00:00:00 2001
From: Steven Rostedt <srostedt at redhat.com>
Date: Fri, 3 Jul 2009 08:44:29 -0500
-Subject: [064/256] ata: Do not disable interrupts in ide code for preempt-rt
+Subject: ata: Do not disable interrupts in ide code for preempt-rt
Use the local_irq_*_nort variants.
Signed-off-by: Steven Rostedt <srostedt at redhat.com>
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/ata/libata-sff.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
-diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
-index d8af325..ad3130d 100644
---- a/drivers/ata/libata-sff.c
-+++ b/drivers/ata/libata-sff.c
-@@ -678,9 +678,9 @@ unsigned int ata_sff_data_xfer_noirq(struct ata_device *dev, unsigned char *buf,
+Index: linux-stable/drivers/ata/libata-sff.c
+===================================================================
+--- linux-stable.orig/drivers/ata/libata-sff.c
++++ linux-stable/drivers/ata/libata-sff.c
+@@ -678,9 +678,9 @@ unsigned int ata_sff_data_xfer_noirq(str
unsigned long flags;
unsigned int consumed;
@@ -28,7 +28,7 @@
return consumed;
}
-@@ -719,7 +719,7 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
+@@ -719,7 +719,7 @@ static void ata_pio_sector(struct ata_qu
unsigned long flags;
/* FIXME: use a bounce buffer */
@@ -37,7 +37,7 @@
buf = kmap_atomic(page);
/* do the actual data transfer */
-@@ -727,7 +727,7 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
+@@ -727,7 +727,7 @@ static void ata_pio_sector(struct ata_qu
do_write);
kunmap_atomic(buf);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/block-shorten-interrupt-disabled-regions.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0006-block-Shorten-interrupt-disabled-regions.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0006-block-Shorten-interrupt-disabled-regions.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/block-shorten-interrupt-disabled-regions.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 907830916646eccd2a8170dbfbc8f1f9482c1bf3 Mon Sep 17 00:00:00 2001
+Subject: block: Shorten interrupt disabled regions
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 22 Jun 2011 19:47:02 +0200
-Subject: [006/256] block: Shorten interrupt disabled regions
Moving the blk_sched_flush_plug() call out of the interrupt/preempt
disabled region in the scheduler allows us to replace
@@ -47,11 +46,11 @@
block/blk-core.c | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)
-diff --git a/block/blk-core.c b/block/blk-core.c
-index 1f61b74..0d947d0 100644
---- a/block/blk-core.c
-+++ b/block/blk-core.c
-@@ -302,7 +302,11 @@ void __blk_run_queue(struct request_queue *q)
+Index: linux-stable/block/blk-core.c
+===================================================================
+--- linux-stable.orig/block/blk-core.c
++++ linux-stable/block/blk-core.c
+@@ -304,7 +304,11 @@ void __blk_run_queue(struct request_queu
{
if (unlikely(blk_queue_stopped(q)))
return;
@@ -64,7 +63,7 @@
q->request_fn(q);
}
EXPORT_SYMBOL(__blk_run_queue);
-@@ -2779,11 +2783,11 @@ static void queue_unplugged(struct request_queue *q, unsigned int depth,
+@@ -2902,11 +2906,11 @@ static void queue_unplugged(struct reque
* this lock).
*/
if (from_schedule) {
@@ -78,7 +77,7 @@
}
}
-@@ -2809,7 +2813,6 @@ static void flush_plug_callbacks(struct blk_plug *plug)
+@@ -2956,7 +2960,6 @@ EXPORT_SYMBOL(blk_check_plugged);
void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
{
struct request_queue *q;
@@ -86,7 +85,7 @@
struct request *rq;
LIST_HEAD(list);
unsigned int depth;
-@@ -2830,11 +2833,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
+@@ -2977,11 +2980,6 @@ void blk_flush_plug_list(struct blk_plug
q = NULL;
depth = 0;
@@ -98,7 +97,7 @@
while (!list_empty(&list)) {
rq = list_entry_rq(list.next);
list_del_init(&rq->queuelist);
-@@ -2847,7 +2845,7 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
+@@ -2994,7 +2992,7 @@ void blk_flush_plug_list(struct blk_plug
queue_unplugged(q, depth, from_schedule);
q = rq->q;
depth = 0;
@@ -107,7 +106,7 @@
}
/*
-@@ -2874,8 +2872,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
+@@ -3021,8 +3019,6 @@ void blk_flush_plug_list(struct blk_plug
*/
if (q)
queue_unplugged(q, depth, from_schedule);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/bug-rt-dependend-variants.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0061-bug-BUG_ON-WARN_ON-variants-dependend-on-RT-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0061-bug-BUG_ON-WARN_ON-variants-dependend-on-RT-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/bug-rt-dependend-variants.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,30 +1,19 @@
-From e3f58ac8f56b9d85886a6feadf63b46e91200290 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:58 -0500
-Subject: [061/256] bug: BUG_ON/WARN_ON variants dependend on RT/!RT
+Subject: bug: BUG_ON/WARN_ON variants dependend on RT/!RT
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- include/asm-generic/bug.h | 18 ++++++++++++++++++
- 1 file changed, 18 insertions(+)
+ include/asm-generic/bug.h | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
-diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
-index 2520a6e..0e41ade 100644
---- a/include/asm-generic/bug.h
-+++ b/include/asm-generic/bug.h
-@@ -3,6 +3,10 @@
-
- #include <linux/compiler.h>
-
-+#ifndef __ASSEMBLY__
-+extern void __WARN_ON(const char *func, const char *file, const int line);
-+#endif /* __ASSEMBLY__ */
-+
- #ifdef CONFIG_BUG
-
- #ifdef CONFIG_GENERIC_BUG
-@@ -202,4 +206,18 @@ extern void warn_slowpath_null(const char *file, const int line);
+Index: linux-stable/include/asm-generic/bug.h
+===================================================================
+--- linux-stable.orig/include/asm-generic/bug.h
++++ linux-stable/include/asm-generic/bug.h
+@@ -202,6 +202,20 @@ extern void warn_slowpath_null(const cha
# define WARN_ON_SMP(x) ({0;})
#endif
@@ -42,4 +31,6 @@
+# define WARN_ON_ONCE_NONRT(condition) WARN_ON_ONCE(condition)
+#endif
+
+ #endif /* __ASSEMBLY__ */
+
#endif
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/clocksource-tclib-allow-higher-clockrates.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0027-clocksource-TCLIB-Allow-higher-clock-rates-for-clock.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0027-clocksource-TCLIB-Allow-higher-clock-rates-for-clock.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/clocksource-tclib-allow-higher-clockrates.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,23 +1,22 @@
-From 961f5156b0d24dcda2e19f2469f85cff6bd8f220 Mon Sep 17 00:00:00 2001
From: Benedikt Spranger <b.spranger at linutronix.de>
Date: Mon, 8 Mar 2010 18:57:04 +0100
-Subject: [027/256] clocksource: TCLIB: Allow higher clock rates for clock
- events
+Subject: clocksource: TCLIB: Allow higher clock rates for clock events
As default the TCLIB uses the 32KiHz base clock rate for clock events.
Add a compile time selection to allow higher clock resulution.
Signed-off-by: Benedikt Spranger <b.spranger at linutronix.de>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- drivers/clocksource/tcb_clksrc.c | 44 ++++++++++++++++++++++----------------
- drivers/misc/Kconfig | 11 ++++++++--
+ drivers/clocksource/tcb_clksrc.c | 44 +++++++++++++++++++++++----------------
+ drivers/misc/Kconfig | 11 +++++++--
2 files changed, 35 insertions(+), 20 deletions(-)
-diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c
-index 32cb929..ac0bb2e 100644
---- a/drivers/clocksource/tcb_clksrc.c
-+++ b/drivers/clocksource/tcb_clksrc.c
+Index: linux-stable/drivers/clocksource/tcb_clksrc.c
+===================================================================
+--- linux-stable.orig/drivers/clocksource/tcb_clksrc.c
++++ linux-stable/drivers/clocksource/tcb_clksrc.c
@@ -23,8 +23,7 @@
* this 32 bit free-running counter. the second channel is not used.
*
@@ -36,7 +35,7 @@
void __iomem *regs;
};
-@@ -82,13 +82,6 @@ static struct tc_clkevt_device *to_tc_clkevt(struct clock_event_device *clkevt)
+@@ -82,13 +82,6 @@ static struct tc_clkevt_device *to_tc_cl
return container_of(clkevt, struct tc_clkevt_device, clkevt);
}
@@ -50,7 +49,7 @@
static u32 timer_clock;
static void tc_mode(enum clock_event_mode m, struct clock_event_device *d)
-@@ -111,11 +104,12 @@ static void tc_mode(enum clock_event_mode m, struct clock_event_device *d)
+@@ -111,11 +104,12 @@ static void tc_mode(enum clock_event_mod
case CLOCK_EVT_MODE_PERIODIC:
clk_enable(tcd->clk);
@@ -65,7 +64,7 @@
/* Enable clock and interrupts on RC compare */
__raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
-@@ -128,7 +122,7 @@ static void tc_mode(enum clock_event_mode m, struct clock_event_device *d)
+@@ -128,7 +122,7 @@ static void tc_mode(enum clock_event_mod
case CLOCK_EVT_MODE_ONESHOT:
clk_enable(tcd->clk);
@@ -74,7 +73,7 @@
__raw_writel(timer_clock | ATMEL_TC_CPCSTOP
| ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO,
regs + ATMEL_TC_REG(2, CMR));
-@@ -158,8 +152,12 @@ static struct tc_clkevt_device clkevt = {
+@@ -158,8 +152,12 @@ static struct tc_clkevt_device clkevt =
.features = CLOCK_EVT_FEAT_PERIODIC
| CLOCK_EVT_FEAT_ONESHOT,
.shift = 32,
@@ -98,7 +97,7 @@
struct clk *t2_clk = tc->clk[2];
int irq = tc->irq[2];
-@@ -194,11 +193,17 @@ static void __init setup_clkevents(struct atmel_tc *tc, int clk32k_divisor_idx)
+@@ -194,11 +193,17 @@ static void __init setup_clkevents(struc
clkevt.clk = t2_clk;
tc_irqaction.dev_id = &clkevt;
@@ -133,11 +132,11 @@
return 0;
}
arch_initcall(tcb_clksrc_init);
-diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index c779509..504daa3 100644
---- a/drivers/misc/Kconfig
-+++ b/drivers/misc/Kconfig
-@@ -87,8 +87,7 @@ config ATMEL_TCB_CLKSRC
+Index: linux-stable/drivers/misc/Kconfig
+===================================================================
+--- linux-stable.orig/drivers/misc/Kconfig
++++ linux-stable/drivers/misc/Kconfig
+@@ -88,8 +88,7 @@ config ATMEL_TCB_CLKSRC
are combined to make a single 32-bit timer.
When GENERIC_CLOCKEVENTS is defined, the third timer channel
@@ -147,7 +146,7 @@
config ATMEL_TCB_CLKSRC_BLOCK
int
-@@ -102,6 +101,14 @@ config ATMEL_TCB_CLKSRC_BLOCK
+@@ -103,6 +102,14 @@ config ATMEL_TCB_CLKSRC_BLOCK
TC can be used for other purposes, such as PWM generation and
interval timing.
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/cond-resched-lock-rt-tweak.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0131-cond-resched-lock-rt-tweak.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0131-cond-resched-lock-rt-tweak.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/cond-resched-lock-rt-tweak.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 7fa364c6068b2175556853dc3b7e6194030758a3 Mon Sep 17 00:00:00 2001
+Subject: cond-resched-lock-rt-tweak.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 22:51:33 +0200
-Subject: [131/256] cond-resched-lock-rt-tweak.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/sched.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index b76e0c8..a6b9a6d 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
@@ -2689,7 +2689,7 @@ extern int _cond_resched(void);
extern int __cond_resched_lock(spinlock_t *lock);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/cond-resched-softirq-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0130-cond-resched-softirq-fix.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0130-cond-resched-softirq-fix.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/cond-resched-softirq-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From b45ecdef4d57b4179dca4c3360543c1d65f16fbb Mon Sep 17 00:00:00 2001
+Subject: cond-resched-softirq-fix.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 14 Jul 2011 09:56:44 +0200
-Subject: [130/256] cond-resched-softirq-fix.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
kernel/sched/core.c | 2 ++
2 files changed, 6 insertions(+)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index d177da5..b76e0c8 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -2700,12 +2700,16 @@ extern int __cond_resched_lock(spinlock_t *lock);
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -2700,12 +2700,16 @@ extern int __cond_resched_lock(spinlock_
__cond_resched_lock(lock); \
})
@@ -30,11 +29,11 @@
/*
* Does a critical section need to be broken due to another
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index dbe9a7d..e88cccc 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -4605,6 +4605,7 @@ int __cond_resched_lock(spinlock_t *lock)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -4832,6 +4832,7 @@ int __cond_resched_lock(spinlock_t *lock
}
EXPORT_SYMBOL(__cond_resched_lock);
@@ -42,7 +41,7 @@
int __sched __cond_resched_softirq(void)
{
BUG_ON(!in_softirq());
-@@ -4618,6 +4619,7 @@ int __sched __cond_resched_softirq(void)
+@@ -4845,6 +4846,7 @@ int __sched __cond_resched_softirq(void)
return 0;
}
EXPORT_SYMBOL(__cond_resched_softirq);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0240-cpu-Make-hotplug.lock-a-sleeping-spinlock-on-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0240-cpu-Make-hotplug.lock-a-sleeping-spinlock-on-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From c6bd5675cda088dacd4f09bf7a6ebbaafa581589 Mon Sep 17 00:00:00 2001
+Subject: cpu: Make hotplug.lock a "sleeping" spinlock on RT
From: Steven Rostedt <rostedt at goodmis.org>
-Date: Fri, 2 Mar 2012 10:36:57 -0500
-Subject: [240/256] cpu: Make hotplug.lock a "sleeping" spinlock on RT
+Date: Fri, 02 Mar 2012 10:36:57 -0500
Tasks can block on hotplug.lock in pin_current_cpu(), but their state
might be != RUNNING. So the mutex wakeup will set the state
@@ -23,11 +22,11 @@
kernel/cpu.c | 35 ++++++++++++++++++++++++++---------
1 file changed, 26 insertions(+), 9 deletions(-)
-diff --git a/kernel/cpu.c b/kernel/cpu.c
-index 37b2212..d79d33a 100644
---- a/kernel/cpu.c
-+++ b/kernel/cpu.c
-@@ -46,7 +46,12 @@ static int cpu_hotplug_disabled;
+Index: linux-stable/kernel/cpu.c
+===================================================================
+--- linux-stable.orig/kernel/cpu.c
++++ linux-stable/kernel/cpu.c
+@@ -51,7 +51,12 @@ static int cpu_hotplug_disabled;
static struct {
struct task_struct *active_writer;
@@ -40,7 +39,7 @@
/*
* Also blocks the new readers during
* an ongoing cpu hotplug operation.
-@@ -54,10 +59,22 @@ static struct {
+@@ -59,10 +64,22 @@ static struct {
int refcount;
} cpu_hotplug = {
.active_writer = NULL,
@@ -63,7 +62,7 @@
struct hotplug_pcp {
struct task_struct *unplug;
int refcount;
-@@ -87,8 +104,8 @@ retry:
+@@ -92,8 +109,8 @@ retry:
return;
}
preempt_enable();
@@ -74,7 +73,7 @@
preempt_disable();
goto retry;
}
-@@ -161,9 +178,9 @@ void get_online_cpus(void)
+@@ -166,9 +183,9 @@ void get_online_cpus(void)
might_sleep();
if (cpu_hotplug.active_writer == current)
return;
@@ -86,7 +85,7 @@
}
EXPORT_SYMBOL_GPL(get_online_cpus);
-@@ -172,10 +189,10 @@ void put_online_cpus(void)
+@@ -177,10 +194,10 @@ void put_online_cpus(void)
{
if (cpu_hotplug.active_writer == current)
return;
@@ -99,7 +98,7 @@
}
EXPORT_SYMBOL_GPL(put_online_cpus);
-@@ -207,11 +224,11 @@ static void cpu_hotplug_begin(void)
+@@ -212,11 +229,11 @@ static void cpu_hotplug_begin(void)
cpu_hotplug.active_writer = current;
for (;;) {
@@ -113,7 +112,7 @@
schedule();
}
}
-@@ -219,7 +236,7 @@ static void cpu_hotplug_begin(void)
+@@ -224,7 +241,7 @@ static void cpu_hotplug_begin(void)
static void cpu_hotplug_done(void)
{
cpu_hotplug.active_writer = NULL;
Added: dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-rework-cpu-down.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-rework-cpu-down.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,550 @@
+From: Steven Rostedt <srostedt at redhat.com>
+Date: Mon, 16 Jul 2012 08:07:43 +0000
+Subject: cpu/rt: Rework cpu down for PREEMPT_RT
+
+Bringing a CPU down is a pain with the PREEMPT_RT kernel because
+tasks can be preempted in many more places than in non-RT. In
+order to handle per_cpu variables, tasks may be pinned to a CPU
+for a while, and even sleep. But these tasks need to be off the CPU
+if that CPU is going down.
+
+Several synchronization methods have been tried, but when stressed
+they failed. This is a new approach.
+
+A sync_tsk thread is still created and tasks may still block on a
+lock when the CPU is going down, but how that works is a bit different.
+When cpu_down() starts, it will create the sync_tsk and wait on it
+to inform that current tasks that are pinned on the CPU are no longer
+pinned. But new tasks that are about to be pinned will still be allowed
+to do so at this time.
+
+Then the notifiers are called. Several notifiers will bring down tasks
+that will enter these locations. Some of these tasks will take locks
+of other tasks that are on the CPU. If we don't let those other tasks
+continue, but make them block until CPU down is done, the tasks that
+the notifiers are waiting on will never complete as they are waiting
+for the locks held by the tasks that are blocked.
+
+Thus we still let the task pin the CPU until the notifiers are done.
+After the notifiers run, we then make new tasks entering the pinned
+CPU sections grab a mutex and wait. This mutex is now a per CPU mutex
+in the hotplug_pcp descriptor.
+
+To help things along, a new function in the scheduler code is created
+called migrate_me(). This function will try to migrate the current task
+off the CPU this is going down if possible. When the sync_tsk is created,
+all tasks will then try to migrate off the CPU going down. There are
+several cases that this wont work, but it helps in most cases.
+
+After the notifiers are called and if a task can't migrate off but enters
+the pin CPU sections, it will be forced to wait on the hotplug_pcp mutex
+until the CPU down is complete. Then the scheduler will force the migration
+anyway.
+
+Also, I found that THREAD_BOUND need to also be accounted for in the
+pinned CPU, and the migrate_disable no longer treats them special.
+This helps fix issues with ksoftirqd and workqueue that unbind on CPU down.
+
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
+---
+ include/linux/sched.h | 7 +
+ kernel/cpu.c | 240 +++++++++++++++++++++++++++++++++++++++++---------
+ kernel/sched/core.c | 82 ++++++++++++++++-
+ 3 files changed, 285 insertions(+), 44 deletions(-)
+
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1952,6 +1952,10 @@ extern void do_set_cpus_allowed(struct t
+
+ extern int set_cpus_allowed_ptr(struct task_struct *p,
+ const struct cpumask *new_mask);
++int migrate_me(void);
++void tell_sched_cpu_down_begin(int cpu);
++void tell_sched_cpu_down_done(int cpu);
++
+ #else
+ static inline void do_set_cpus_allowed(struct task_struct *p,
+ const struct cpumask *new_mask)
+@@ -1964,6 +1968,9 @@ static inline int set_cpus_allowed_ptr(s
+ return -EINVAL;
+ return 0;
+ }
++static inline int migrate_me(void) { return 0; }
++static inline void tell_sched_cpu_down_begin(int cpu) { }
++static inline void tell_sched_cpu_down_done(int cpu) { }
+ #endif
+
+ #ifdef CONFIG_NO_HZ
+Index: linux-stable/kernel/cpu.c
+===================================================================
+--- linux-stable.orig/kernel/cpu.c
++++ linux-stable/kernel/cpu.c
+@@ -51,12 +51,7 @@ static int cpu_hotplug_disabled;
+
+ static struct {
+ struct task_struct *active_writer;
+-#ifdef CONFIG_PREEMPT_RT_FULL
+- /* Makes the lock keep the task's state */
+- spinlock_t lock;
+-#else
+ struct mutex lock; /* Synchronizes accesses to refcount, */
+-#endif
+ /*
+ * Also blocks the new readers during
+ * an ongoing cpu hotplug operation.
+@@ -64,28 +59,46 @@ static struct {
+ int refcount;
+ } cpu_hotplug = {
+ .active_writer = NULL,
+-#ifdef CONFIG_PREEMPT_RT_FULL
+- .lock = __SPIN_LOCK_UNLOCKED(cpu_hotplug.lock),
+-#else
+ .lock = __MUTEX_INITIALIZER(cpu_hotplug.lock),
+-#endif
+ .refcount = 0,
+ };
+
+-#ifdef CONFIG_PREEMPT_RT_FULL
+-# define hotplug_lock() rt_spin_lock(&cpu_hotplug.lock)
+-# define hotplug_unlock() rt_spin_unlock(&cpu_hotplug.lock)
+-#else
+-# define hotplug_lock() mutex_lock(&cpu_hotplug.lock)
+-# define hotplug_unlock() mutex_unlock(&cpu_hotplug.lock)
+-#endif
+-
++/**
++ * hotplug_pcp - per cpu hotplug descriptor
++ * @unplug: set when pin_current_cpu() needs to sync tasks
++ * @sync_tsk: the task that waits for tasks to finish pinned sections
++ * @refcount: counter of tasks in pinned sections
++ * @grab_lock: set when the tasks entering pinned sections should wait
++ * @synced: notifier for @sync_tsk to tell cpu_down it's finished
++ * @mutex: the mutex to make tasks wait (used when @grab_lock is true)
++ * @mutex_init: zero if the mutex hasn't been initialized yet.
++ *
++ * Although @unplug and @sync_tsk may point to the same task, the @unplug
++ * is used as a flag and still exists after @sync_tsk has exited and
++ * @sync_tsk set to NULL.
++ */
+ struct hotplug_pcp {
+ struct task_struct *unplug;
++ struct task_struct *sync_tsk;
+ int refcount;
++ int grab_lock;
+ struct completion synced;
++#ifdef CONFIG_PREEMPT_RT_FULL
++ spinlock_t lock;
++#else
++ struct mutex mutex;
++#endif
++ int mutex_init;
+ };
+
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define hotplug_lock(hp) rt_spin_lock(&(hp)->lock)
++# define hotplug_unlock(hp) rt_spin_unlock(&(hp)->lock)
++#else
++# define hotplug_lock(hp) mutex_lock(&(hp)->mutex)
++# define hotplug_unlock(hp) mutex_unlock(&(hp)->mutex)
++#endif
++
+ static DEFINE_PER_CPU(struct hotplug_pcp, hotplug_pcp);
+
+ /**
+@@ -99,18 +112,40 @@ static DEFINE_PER_CPU(struct hotplug_pcp
+ void pin_current_cpu(void)
+ {
+ struct hotplug_pcp *hp;
++ int force = 0;
+
+ retry:
+ hp = &__get_cpu_var(hotplug_pcp);
+
+- if (!hp->unplug || hp->refcount || preempt_count() > 1 ||
++ if (!hp->unplug || hp->refcount || force || preempt_count() > 1 ||
+ hp->unplug == current || (current->flags & PF_STOMPER)) {
+ hp->refcount++;
+ return;
+ }
+- preempt_enable();
+- hotplug_lock();
+- hotplug_unlock();
++
++ if (hp->grab_lock) {
++ preempt_enable();
++ hotplug_lock(hp);
++ hotplug_unlock(hp);
++ } else {
++ preempt_enable();
++ /*
++ * Try to push this task off of this CPU.
++ */
++ if (!migrate_me()) {
++ preempt_disable();
++ hp = &__get_cpu_var(hotplug_pcp);
++ if (!hp->grab_lock) {
++ /*
++ * Just let it continue it's already pinned
++ * or about to sleep.
++ */
++ force = 1;
++ goto retry;
++ }
++ preempt_enable();
++ }
++ }
+ preempt_disable();
+ goto retry;
+ }
+@@ -132,26 +167,84 @@ void unpin_current_cpu(void)
+ wake_up_process(hp->unplug);
+ }
+
+-/*
+- * FIXME: Is this really correct under all circumstances ?
+- */
++static void wait_for_pinned_cpus(struct hotplug_pcp *hp)
++{
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ while (hp->refcount) {
++ schedule_preempt_disabled();
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ }
++}
++
+ static int sync_unplug_thread(void *data)
+ {
+ struct hotplug_pcp *hp = data;
+
+ preempt_disable();
+ hp->unplug = current;
++ wait_for_pinned_cpus(hp);
++
++ /*
++ * This thread will synchronize the cpu_down() with threads
++ * that have pinned the CPU. When the pinned CPU count reaches
++ * zero, we inform the cpu_down code to continue to the next step.
++ */
+ set_current_state(TASK_UNINTERRUPTIBLE);
+- while (hp->refcount) {
+- schedule_preempt_disabled();
++ preempt_enable();
++ complete(&hp->synced);
++
++ /*
++ * If all succeeds, the next step will need tasks to wait till
++ * the CPU is offline before continuing. To do this, the grab_lock
++ * is set and tasks going into pin_current_cpu() will block on the
++ * mutex. But we still need to wait for those that are already in
++ * pinned CPU sections. If the cpu_down() failed, the kthread_should_stop()
++ * will kick this thread out.
++ */
++ while (!hp->grab_lock && !kthread_should_stop()) {
++ schedule();
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ }
++
++ /* Make sure grab_lock is seen before we see a stale completion */
++ smp_mb();
++
++ /*
++ * Now just before cpu_down() enters stop machine, we need to make
++ * sure all tasks that are in pinned CPU sections are out, and new
++ * tasks will now grab the lock, keeping them from entering pinned
++ * CPU sections.
++ */
++ if (!kthread_should_stop()) {
++ preempt_disable();
++ wait_for_pinned_cpus(hp);
++ preempt_enable();
++ complete(&hp->synced);
++ }
++
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ while (!kthread_should_stop()) {
++ schedule();
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ }
+ set_current_state(TASK_RUNNING);
+- preempt_enable();
+- complete(&hp->synced);
++
++ /*
++ * Force this thread off this CPU as it's going down and
++ * we don't want any more work on this CPU.
++ */
++ current->flags &= ~PF_THREAD_BOUND;
++ do_set_cpus_allowed(current, cpu_present_mask);
++ migrate_me();
+ return 0;
+ }
+
++static void __cpu_unplug_sync(struct hotplug_pcp *hp)
++{
++ wake_up_process(hp->sync_tsk);
++ wait_for_completion(&hp->synced);
++}
++
+ /*
+ * Start the sync_unplug_thread on the target cpu and wait for it to
+ * complete.
+@@ -159,23 +252,83 @@ static int sync_unplug_thread(void *data
+ static int cpu_unplug_begin(unsigned int cpu)
+ {
+ struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
+- struct task_struct *tsk;
++ int err;
++
++ /* Protected by cpu_hotplug.lock */
++ if (!hp->mutex_init) {
++#ifdef CONFIG_PREEMPT_RT_FULL
++ spin_lock_init(&hp->lock);
++#else
++ mutex_init(&hp->mutex);
++#endif
++ hp->mutex_init = 1;
++ }
++
++ /* Inform the scheduler to migrate tasks off this CPU */
++ tell_sched_cpu_down_begin(cpu);
+
+ init_completion(&hp->synced);
+- tsk = kthread_create(sync_unplug_thread, hp, "sync_unplug/%d", cpu);
+- if (IS_ERR(tsk))
+- return (PTR_ERR(tsk));
+- kthread_bind(tsk, cpu);
+- wake_up_process(tsk);
+- wait_for_completion(&hp->synced);
++
++ hp->sync_tsk = kthread_create(sync_unplug_thread, hp, "sync_unplug/%d", cpu);
++ if (IS_ERR(hp->sync_tsk)) {
++ err = PTR_ERR(hp->sync_tsk);
++ hp->sync_tsk = NULL;
++ return err;
++ }
++ kthread_bind(hp->sync_tsk, cpu);
++
++ /*
++ * Wait for tasks to get out of the pinned sections,
++ * it's still OK if new tasks enter. Some CPU notifiers will
++ * wait for tasks that are going to enter these sections and
++ * we must not have them block.
++ */
++ __cpu_unplug_sync(hp);
++
+ return 0;
+ }
+
++static void cpu_unplug_sync(unsigned int cpu)
++{
++ struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
++
++ init_completion(&hp->synced);
++ /* The completion needs to be initialzied before setting grab_lock */
++ smp_wmb();
++
++ /* Grab the mutex before setting grab_lock */
++ hotplug_lock(hp);
++ hp->grab_lock = 1;
++
++ /*
++ * The CPU notifiers have been completed.
++ * Wait for tasks to get out of pinned CPU sections and have new
++ * tasks block until the CPU is completely down.
++ */
++ __cpu_unplug_sync(hp);
++
++ /* All done with the sync thread */
++ kthread_stop(hp->sync_tsk);
++ hp->sync_tsk = NULL;
++}
++
+ static void cpu_unplug_done(unsigned int cpu)
+ {
+ struct hotplug_pcp *hp = &per_cpu(hotplug_pcp, cpu);
+
+ hp->unplug = NULL;
++ /* Let all tasks know cpu unplug is finished before cleaning up */
++ smp_wmb();
++
++ if (hp->sync_tsk)
++ kthread_stop(hp->sync_tsk);
++
++ if (hp->grab_lock) {
++ hotplug_unlock(hp);
++ /* protected by cpu_hotplug.lock */
++ hp->grab_lock = 0;
++ }
++ tell_sched_cpu_down_done(cpu);
+ }
+
+ void get_online_cpus(void)
+@@ -183,9 +336,9 @@ void get_online_cpus(void)
+ might_sleep();
+ if (cpu_hotplug.active_writer == current)
+ return;
+- hotplug_lock();
++ mutex_lock(&cpu_hotplug.lock);
+ cpu_hotplug.refcount++;
+- hotplug_unlock();
++ mutex_unlock(&cpu_hotplug.lock);
+
+ }
+ EXPORT_SYMBOL_GPL(get_online_cpus);
+@@ -194,10 +347,10 @@ void put_online_cpus(void)
+ {
+ if (cpu_hotplug.active_writer == current)
+ return;
+- hotplug_lock();
++ mutex_lock(&cpu_hotplug.lock);
+ if (!--cpu_hotplug.refcount && unlikely(cpu_hotplug.active_writer))
+ wake_up_process(cpu_hotplug.active_writer);
+- hotplug_unlock();
++ mutex_unlock(&cpu_hotplug.lock);
+
+ }
+ EXPORT_SYMBOL_GPL(put_online_cpus);
+@@ -229,11 +382,11 @@ static void cpu_hotplug_begin(void)
+ cpu_hotplug.active_writer = current;
+
+ for (;;) {
+- hotplug_lock();
++ mutex_lock(&cpu_hotplug.lock);
+ if (likely(!cpu_hotplug.refcount))
+ break;
+ __set_current_state(TASK_UNINTERRUPTIBLE);
+- hotplug_unlock();
++ mutex_unlock(&cpu_hotplug.lock);
+ schedule();
+ }
+ }
+@@ -241,7 +394,7 @@ static void cpu_hotplug_begin(void)
+ static void cpu_hotplug_done(void)
+ {
+ cpu_hotplug.active_writer = NULL;
+- hotplug_unlock();
++ mutex_unlock(&cpu_hotplug.lock);
+ }
+
+ #else /* #if CONFIG_HOTPLUG_CPU */
+@@ -416,6 +569,9 @@ static int __ref _cpu_down(unsigned int
+ goto out_release;
+ }
+
++ /* Notifiers are done. Don't let any more tasks pin this CPU. */
++ cpu_unplug_sync(cpu);
++
+ err = __stop_machine(take_cpu_down, &tcd_param, cpumask_of(cpu));
+ if (err) {
+ /* CPU didn't die: tell everyone. Can't complain. */
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -3418,7 +3418,7 @@ void migrate_disable(void)
+ {
+ struct task_struct *p = current;
+
+- if (in_atomic() || p->flags & PF_THREAD_BOUND) {
++ if (in_atomic()) {
+ #ifdef CONFIG_SCHED_DEBUG
+ p->migrate_disable_atomic++;
+ #endif
+@@ -3449,7 +3449,7 @@ void migrate_enable(void)
+ unsigned long flags;
+ struct rq *rq;
+
+- if (in_atomic() || p->flags & PF_THREAD_BOUND) {
++ if (in_atomic()) {
+ #ifdef CONFIG_SCHED_DEBUG
+ p->migrate_disable_atomic--;
+ #endif
+@@ -5341,6 +5341,84 @@ void do_set_cpus_allowed(struct task_str
+ cpumask_copy(&p->cpus_allowed, new_mask);
+ }
+
++static DEFINE_PER_CPU(struct cpumask, sched_cpumasks);
++static DEFINE_MUTEX(sched_down_mutex);
++static cpumask_t sched_down_cpumask;
++
++void tell_sched_cpu_down_begin(int cpu)
++{
++ mutex_lock(&sched_down_mutex);
++ cpumask_set_cpu(cpu, &sched_down_cpumask);
++ mutex_unlock(&sched_down_mutex);
++}
++
++void tell_sched_cpu_down_done(int cpu)
++{
++ mutex_lock(&sched_down_mutex);
++ cpumask_clear_cpu(cpu, &sched_down_cpumask);
++ mutex_unlock(&sched_down_mutex);
++}
++
++/**
++ * migrate_me - try to move the current task off this cpu
++ *
++ * Used by the pin_current_cpu() code to try to get tasks
++ * to move off the current CPU as it is going down.
++ * It will only move the task if the task isn't pinned to
++ * the CPU (with migrate_disable, affinity or THREAD_BOUND)
++ * and the task has to be in a RUNNING state. Otherwise the
++ * movement of the task will wake it up (change its state
++ * to running) when the task did not expect it.
++ *
++ * Returns 1 if it succeeded in moving the current task
++ * 0 otherwise.
++ */
++int migrate_me(void)
++{
++ struct task_struct *p = current;
++ struct migration_arg arg;
++ struct cpumask *cpumask;
++ struct cpumask *mask;
++ unsigned long flags;
++ unsigned int dest_cpu;
++ struct rq *rq;
++
++ /*
++ * We can not migrate tasks bounded to a CPU or tasks not
++ * running. The movement of the task will wake it up.
++ */
++ if (p->flags & PF_THREAD_BOUND || p->state)
++ return 0;
++
++ mutex_lock(&sched_down_mutex);
++ rq = task_rq_lock(p, &flags);
++
++ cpumask = &__get_cpu_var(sched_cpumasks);
++ mask = &p->cpus_allowed;
++
++ cpumask_andnot(cpumask, mask, &sched_down_cpumask);
++
++ if (!cpumask_weight(cpumask)) {
++ /* It's only on this CPU? */
++ task_rq_unlock(rq, p, &flags);
++ mutex_unlock(&sched_down_mutex);
++ return 0;
++ }
++
++ dest_cpu = cpumask_any_and(cpu_active_mask, cpumask);
++
++ arg.task = p;
++ arg.dest_cpu = dest_cpu;
++
++ task_rq_unlock(rq, p, &flags);
++
++ stop_one_cpu(cpu_of(rq), migration_cpu_stop, &arg);
++ tlb_migrate_finish(p->mm);
++ mutex_unlock(&sched_down_mutex);
++
++ return 1;
++}
++
+ /*
+ * This is how migration works:
+ *
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-variants.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0089-cpu-rt-variants.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0089-cpu-rt-variants.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/cpu-rt-variants.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 8ef3bc01ced54510e190912494f202018fe31643 Mon Sep 17 00:00:00 2001
+Subject: cpu-rt-variants.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 17 Jun 2011 15:42:38 +0200
-Subject: [089/256] cpu-rt-variants.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/smp.h | 8 ++++++++
1 file changed, 8 insertions(+)
-diff --git a/include/linux/smp.h b/include/linux/smp.h
-index 10530d9..04e7ed9 100644
---- a/include/linux/smp.h
-+++ b/include/linux/smp.h
-@@ -219,6 +219,14 @@ smp_call_function_any(const struct cpumask *mask, smp_call_func_t func,
+Index: linux-stable/include/linux/smp.h
+===================================================================
+--- linux-stable.orig/include/linux/smp.h
++++ linux-stable/include/linux/smp.h
+@@ -218,6 +218,14 @@ static inline void kick_all_cpus_sync(vo
#define get_cpu() ({ preempt_disable(); smp_processor_id(); })
#define put_cpu() preempt_enable()
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/cpumask-disable-offstack-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0233-cpumask-Disable-CONFIG_CPUMASK_OFFSTACK-for-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0233-cpumask-Disable-CONFIG_CPUMASK_OFFSTACK-for-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/cpumask-disable-offstack-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From ce185e640e2da8f73059ddd561a8b1ffac0fc91f Mon Sep 17 00:00:00 2001
+Subject: cpumask: Disable CONFIG_CPUMASK_OFFSTACK for RT
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 14 Dec 2011 01:03:49 +0100
-Subject: [233/256] cpumask: Disable CONFIG_CPUMASK_OFFSTACK for RT
We can't deal with the cpumask allocations which happen in atomic
context (see arch/x86/kernel/apic/io_apic.c) on RT right now.
@@ -12,11 +11,11 @@
lib/Kconfig | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
-diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index f556832..98c1a17 100644
---- a/arch/x86/Kconfig
-+++ b/arch/x86/Kconfig
-@@ -750,7 +750,7 @@ config IOMMU_HELPER
+Index: linux-stable/arch/x86/Kconfig
+===================================================================
+--- linux-stable.orig/arch/x86/Kconfig
++++ linux-stable/arch/x86/Kconfig
+@@ -757,7 +757,7 @@ config IOMMU_HELPER
config MAXSMP
bool "Enable Maximum number of SMP Processors and NUMA Nodes"
depends on X86_64 && SMP && DEBUG_KERNEL && EXPERIMENTAL
@@ -25,11 +24,11 @@
---help---
Enable maximum number of CPUS and NUMA Nodes for this architecture.
If unsure, say N.
-diff --git a/lib/Kconfig b/lib/Kconfig
-index 4a8aba2..4c03fe3 100644
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -303,6 +303,7 @@ config CHECK_SIGNATURE
+Index: linux-stable/lib/Kconfig
+===================================================================
+--- linux-stable.orig/lib/Kconfig
++++ linux-stable/lib/Kconfig
+@@ -312,6 +312,7 @@ config CHECK_SIGNATURE
config CPUMASK_OFFSTACK
bool "Force CPU masks off stack" if DEBUG_PER_CPU_MAPS
Added: dists/trunk/linux/debian/patches/features/all/rt/crypto-make-core-static-and-init-scru-early.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/crypto-make-core-static-and-init-scru-early.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,51 @@
+Subject: crypto: Make core builtin and init srcu early
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Fri, 12 Oct 2012 11:09:19 +0100
+
+When the scru notifier is not initialized before the first user we
+crash.
+
+[ 0.281119] BUG: unable to handle kernel NULL pointer dereference at (null)
+[ 0.281124] IP: [<ffffffff8108ee6d>] __srcu_read_lock+0x2f/0x79
+
+Make the core code built-in for now and enfore early init.
+
+FIXME: Create a static initializer for this.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ crypto/Kconfig | 2 +-
+ crypto/api.c | 7 +++++++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+Index: linux-stable/crypto/Kconfig
+===================================================================
+--- linux-stable.orig/crypto/Kconfig
++++ linux-stable/crypto/Kconfig
+@@ -13,7 +13,7 @@ source "crypto/async_tx/Kconfig"
+ # Cryptographic API Configuration
+ #
+ menuconfig CRYPTO
+- tristate "Cryptographic API"
++ bool "Cryptographic API"
+ help
+ This option provides the core Cryptographic API.
+
+Index: linux-stable/crypto/api.c
+===================================================================
+--- linux-stable.orig/crypto/api.c
++++ linux-stable/crypto/api.c
+@@ -34,6 +34,13 @@ EXPORT_SYMBOL_GPL(crypto_alg_sem);
+ struct srcu_notifier_head crypto_chain;
+ EXPORT_SYMBOL_GPL(crypto_chain);
+
++static int __init crypto_api_init(void)
++{
++ srcu_init_notifier_head(&crypto_chain);
++ return 0;
++}
++core_initcall(crypto_api_init);
++
+ static inline struct crypto_alg *crypto_alg_get(struct crypto_alg *alg)
+ {
+ atomic_inc(&alg->cra_refcnt);
Added: dists/trunk/linux/debian/patches/features/all/rt/debugobjects-rt.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/debugobjects-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,25 @@
+Subject: debugobjects-rt.patch
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Sun, 17 Jul 2011 21:41:35 +0200
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ lib/debugobjects.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+Index: linux-stable/lib/debugobjects.c
+===================================================================
+--- linux-stable.orig/lib/debugobjects.c
++++ linux-stable/lib/debugobjects.c
+@@ -309,7 +309,10 @@ __debug_object_init(void *addr, struct d
+ struct debug_obj *obj;
+ unsigned long flags;
+
+- fill_pool();
++#ifdef CONFIG_PREEMPT_RT_FULL
++ if (preempt_count() == 0 && !irqs_disabled())
++#endif
++ fill_pool();
+
+ db = get_bucket((unsigned long) addr);
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/dm-make-rt-aware.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0232-dm-Make-rt-aware.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0232-dm-Make-rt-aware.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/dm-make-rt-aware.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From fade21f9f82ea6e0b42364a6e3d49f0450722afb Mon Sep 17 00:00:00 2001
+Subject: dm: Make rt aware
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 14 Nov 2011 23:06:09 +0100
-Subject: [232/256] dm: Make rt aware
Use the BUG_ON_NORT variant for the irq_disabled() checks. RT has
interrupts legitimately enabled here as we cant deadlock against the
@@ -14,11 +13,11 @@
drivers/md/dm.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/md/dm.c b/drivers/md/dm.c
-index e24143c..ad7d7e3 100644
---- a/drivers/md/dm.c
-+++ b/drivers/md/dm.c
-@@ -1648,14 +1648,14 @@ static void dm_request_fn(struct request_queue *q)
+Index: linux-stable/drivers/md/dm.c
+===================================================================
+--- linux-stable.orig/drivers/md/dm.c
++++ linux-stable/drivers/md/dm.c
+@@ -1692,14 +1692,14 @@ static void dm_request_fn(struct request
if (map_request(ti, clone, md))
goto requeued;
Added: dists/trunk/linux/debian/patches/features/all/rt/drivers-net-8139-disable-irq-nosync.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-net-8139-disable-irq-nosync.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,27 @@
+From: Ingo Molnar <mingo at elte.hu>
+Date: Fri, 3 Jul 2009 08:29:24 -0500
+Subject: drivers/net: Use disable_irq_nosync() in 8139too
+
+Use disable_irq_nosync() instead of disable_irq() as this might be
+called in atomic context with netpoll.
+
+Signed-off-by: Ingo Molnar <mingo at elte.hu>
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
+---
+ drivers/net/ethernet/realtek/8139too.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-stable/drivers/net/ethernet/realtek/8139too.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/realtek/8139too.c
++++ linux-stable/drivers/net/ethernet/realtek/8139too.c
+@@ -2216,7 +2216,7 @@ static void rtl8139_poll_controller(stru
+ struct rtl8139_private *tp = netdev_priv(dev);
+ const int irq = tp->pci_dev->irq;
+
+- disable_irq(irq);
++ disable_irq_nosync(irq);
+ rtl8139_interrupt(irq, dev);
+ enable_irq(irq);
+ }
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-net-at91-make-mdio-protection-rt-safe.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0031-drivers-net-at91_ether-Make-mdio-protection-rt-safe.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0031-drivers-net-at91_ether-Make-mdio-protection-rt-safe.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-net-at91-make-mdio-protection-rt-safe.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From e8586bc580f0516100fe73e3e838fd746d491f75 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 17 Nov 2009 12:02:43 +0100
-Subject: [031/256] drivers: net: at91_ether: Make mdio protection -rt safe
+Subject: drivers: net: at91_ether: Make mdio protection -rt safe
Neither the phy interrupt nor the timer callback which updates the
link status in absense of a phy interrupt are taking lp->lock which
@@ -14,15 +13,16 @@
at91_check_ether() which serializes the access on -rt.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/net/ethernet/cadence/at91_ether.c | 5 +++++
1 file changed, 5 insertions(+)
-diff --git a/drivers/net/ethernet/cadence/at91_ether.c b/drivers/net/ethernet/cadence/at91_ether.c
-index 9061170..6b9e006 100644
---- a/drivers/net/ethernet/cadence/at91_ether.c
-+++ b/drivers/net/ethernet/cadence/at91_ether.c
-@@ -201,7 +201,9 @@ static irqreturn_t at91ether_phy_interrupt(int irq, void *dev_id)
+Index: linux-stable/drivers/net/ethernet/cadence/at91_ether.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/cadence/at91_ether.c
++++ linux-stable/drivers/net/ethernet/cadence/at91_ether.c
+@@ -199,7 +199,9 @@ static irqreturn_t at91ether_phy_interru
struct net_device *dev = (struct net_device *) dev_id;
struct at91_private *lp = netdev_priv(dev);
unsigned int phy;
@@ -32,22 +32,22 @@
/*
* This hander is triggered on both edges, but the PHY chips expect
* level-triggering. We therefore have to check if the PHY actually has
-@@ -243,6 +245,7 @@ static irqreturn_t at91ether_phy_interrupt(int irq, void *dev_id)
+@@ -241,6 +243,7 @@ static irqreturn_t at91ether_phy_interru
done:
- disable_mdi();
+ disable_mdi(lp);
+ spin_unlock_irqrestore(&lp->lock, flags);
return IRQ_HANDLED;
}
-@@ -399,9 +402,11 @@ static void at91ether_check_link(unsigned long dev_id)
+@@ -397,9 +400,11 @@ static void at91ether_check_link(unsigne
struct net_device *dev = (struct net_device *) dev_id;
struct at91_private *lp = netdev_priv(dev);
+ spin_lock_irq(&lp->lock);
- enable_mdi();
+ enable_mdi(lp);
update_linkspeed(dev, 1);
- disable_mdi();
+ disable_mdi(lp);
+ spin_unlock_irq(&lp->lock);
mod_timer(&lp->check_timer, jiffies + LINK_POLL_INTERVAL);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-net-ehea-mark-rx-irq-no-thread.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0030-drivers-net-ehea-Make-rx-irq-handler-non-threaded-IR.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0030-drivers-net-ehea-Make-rx-irq-handler-non-threaded-IR.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-net-ehea-mark-rx-irq-no-thread.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From e6535d525046fb8f73575ec9641c213ebefe16c7 Mon Sep 17 00:00:00 2001
From: Darren Hart <dvhltc at us.ibm.com>
Date: Tue, 18 May 2010 14:33:07 -0700
-Subject: [030/256] drivers: net: ehea: Make rx irq handler non-threaded
- (IRQF_NO_THREAD)
+Subject: drivers: net: ehea: Make rx irq handler non-threaded (IRQF_NO_THREAD)
The underlying hardware is edge triggered but presented by XICS as level
triggered. The edge triggered interrupts are not reissued after masking. This
@@ -35,15 +33,16 @@
Cc: Doug Maxey <doug.maxey at us.ibm.com>
LKML-Reference: <4BF30793.5070300 at us.ibm.com>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/net/ethernet/ibm/ehea/ehea_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
-index f4d2da0..a4cb742 100644
---- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
-+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
-@@ -1308,7 +1308,7 @@ static int ehea_reg_interrupts(struct net_device *dev)
+Index: linux-stable/drivers/net/ethernet/ibm/ehea/ehea_main.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/ibm/ehea/ehea_main.c
++++ linux-stable/drivers/net/ethernet/ibm/ehea/ehea_main.c
+@@ -1308,7 +1308,7 @@ static int ehea_reg_interrupts(struct ne
"%s-queue%d", dev->name, i);
ret = ibmebus_request_irq(pr->eq->attr.ist1,
ehea_recv_irq_handler,
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0083-drivers-net-fix-livelock-issues.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0083-drivers-net-fix-livelock-issues.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 56d31d400f86dff026047ae500f2d63684b5fb34 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 20 Jun 2009 11:36:54 +0200
-Subject: [083/256] drivers/net: fix livelock issues
+Subject: drivers/net: fix livelock issues
Preempt-RT runs into a live lock issue with the NETDEV_TX_LOCKED micro
optimization. The reason is that the softirq thread is rescheduling
@@ -11,21 +10,22 @@
Remove it.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 6 +-----
drivers/net/ethernet/atheros/atl1e/atl1e_main.c | 3 +--
drivers/net/ethernet/chelsio/cxgb/sge.c | 3 +--
drivers/net/ethernet/neterion/s2io.c | 7 +------
- drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 7 +++----
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 6 ++----
drivers/net/ethernet/tehuti/tehuti.c | 9 ++-------
drivers/net/rionet.c | 6 +-----
- 7 files changed, 10 insertions(+), 31 deletions(-)
+ 7 files changed, 9 insertions(+), 31 deletions(-)
-diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
-index 1ef0c92..7cb889c 100644
---- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
-+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
-@@ -2240,11 +2240,7 @@ static netdev_tx_t atl1c_xmit_frame(struct sk_buff *skb,
+Index: linux-stable/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
++++ linux-stable/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+@@ -2122,11 +2122,7 @@ static netdev_tx_t atl1c_xmit_frame(stru
}
tpd_req = atl1c_cal_tpd_req(skb);
@@ -38,11 +38,11 @@
if (atl1c_tpd_avail(adapter, type) < tpd_req) {
/* no enough descriptor, just stop queue */
-diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-index 93ff2b2..cecc414 100644
---- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-@@ -1822,8 +1822,7 @@ static netdev_tx_t atl1e_xmit_frame(struct sk_buff *skb,
+Index: linux-stable/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
++++ linux-stable/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+@@ -1803,8 +1803,7 @@ static netdev_tx_t atl1e_xmit_frame(stru
return NETDEV_TX_OK;
}
tpd_req = atl1e_cal_tdp_req(skb);
@@ -52,11 +52,11 @@
if (atl1e_tpd_avail(adapter) < tpd_req) {
/* no enough descriptor, just stop queue */
-diff --git a/drivers/net/ethernet/chelsio/cxgb/sge.c b/drivers/net/ethernet/chelsio/cxgb/sge.c
-index 47a8435..279c04e 100644
---- a/drivers/net/ethernet/chelsio/cxgb/sge.c
-+++ b/drivers/net/ethernet/chelsio/cxgb/sge.c
-@@ -1678,8 +1678,7 @@ static int t1_sge_tx(struct sk_buff *skb, struct adapter *adapter,
+Index: linux-stable/drivers/net/ethernet/chelsio/cxgb/sge.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/chelsio/cxgb/sge.c
++++ linux-stable/drivers/net/ethernet/chelsio/cxgb/sge.c
+@@ -1678,8 +1678,7 @@ static int t1_sge_tx(struct sk_buff *skb
struct cmdQ *q = &sge->cmdQ[qid];
unsigned int credits, pidx, genbit, count, use_sched_skb = 0;
@@ -66,11 +66,11 @@
reclaim_completed_tx(sge, q);
-diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
-index 6338ef8..ad2f094 100644
---- a/drivers/net/ethernet/neterion/s2io.c
-+++ b/drivers/net/ethernet/neterion/s2io.c
-@@ -4089,12 +4089,7 @@ static netdev_tx_t s2io_xmit(struct sk_buff *skb, struct net_device *dev)
+Index: linux-stable/drivers/net/ethernet/neterion/s2io.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/neterion/s2io.c
++++ linux-stable/drivers/net/ethernet/neterion/s2io.c
+@@ -4088,12 +4088,7 @@ static netdev_tx_t s2io_xmit(struct sk_b
[skb->priority & (MAX_TX_FIFOS - 1)];
fifo = &mac_control->fifos[queue];
@@ -84,29 +84,28 @@
if (sp->config.multiq) {
if (__netif_subqueue_stopped(dev, fifo->fifo_no)) {
-diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-index 1e38d50..f017954 100644
---- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-@@ -2128,10 +2128,9 @@ static int pch_gbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
- adapter->stats.tx_length_errors++;
- return NETDEV_TX_OK;
- }
+Index: linux-stable/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
++++ linux-stable/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+@@ -2159,10 +2159,8 @@ static int pch_gbe_xmit_frame(struct sk_
+ struct pch_gbe_tx_ring *tx_ring = adapter->tx_ring;
+ unsigned long flags;
+
- if (!spin_trylock_irqsave(&tx_ring->tx_lock, flags)) {
- /* Collision - tell upper layer to requeue */
- return NETDEV_TX_LOCKED;
- }
-+
+ spin_lock_irqsave(&tx_ring->tx_lock, flags);
+
if (unlikely(!PCH_GBE_DESC_UNUSED(tx_ring))) {
netif_stop_queue(netdev);
spin_unlock_irqrestore(&tx_ring->tx_lock, flags);
-diff --git a/drivers/net/ethernet/tehuti/tehuti.c b/drivers/net/ethernet/tehuti/tehuti.c
-index ad973ff..1afa33c 100644
---- a/drivers/net/ethernet/tehuti/tehuti.c
-+++ b/drivers/net/ethernet/tehuti/tehuti.c
-@@ -1606,13 +1606,8 @@ static netdev_tx_t bdx_tx_transmit(struct sk_buff *skb,
+Index: linux-stable/drivers/net/ethernet/tehuti/tehuti.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/tehuti/tehuti.c
++++ linux-stable/drivers/net/ethernet/tehuti/tehuti.c
+@@ -1630,13 +1630,8 @@ static netdev_tx_t bdx_tx_transmit(struc
unsigned long flags;
ENTER;
@@ -122,13 +121,13 @@
/* build tx descriptor */
BDX_ASSERT(f->m.wptr >= f->m.memsz); /* started with valid wptr */
-diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
-index 91d2588..d4c418e 100644
---- a/drivers/net/rionet.c
-+++ b/drivers/net/rionet.c
-@@ -176,11 +176,7 @@ static int rionet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
- u16 destid;
+Index: linux-stable/drivers/net/rionet.c
+===================================================================
+--- linux-stable.orig/drivers/net/rionet.c
++++ linux-stable/drivers/net/rionet.c
+@@ -178,11 +178,7 @@ static int rionet_start_xmit(struct sk_b
unsigned long flags;
+ int add_num = 1;
- local_irq_save(flags);
- if (!spin_trylock(&rnet->tx_lock)) {
@@ -137,5 +136,5 @@
- }
+ spin_lock_irqsave(&rnet->tx_lock, flags);
- if ((rnet->tx_cnt + 1) > RIONET_TX_RING_SIZE) {
- netif_stop_queue(ndev);
+ if (is_multicast_ether_addr(eth->h_dest))
+ add_num = nact;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-net-gianfar-make-rt-aware.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0085-drivers-net-gianfar-Make-RT-aware.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0085-drivers-net-gianfar-Make-RT-aware.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-net-gianfar-make-rt-aware.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From ac9c32dccd74d3c6344a4d857e3b0fa028df7249 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 1 Apr 2010 20:20:57 +0200
-Subject: [085/256] drivers: net: gianfar: Make RT aware
+Subject: drivers: net: gianfar: Make RT aware
The adjust_link() disables interrupts before taking the queue
locks. On RT those locks are converted to "sleeping" locks and
@@ -11,15 +10,16 @@
Reported-by: Xianghua Xiao <xiaoxianghua at gmail.com>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Tested-by: Xianghua Xiao <xiaoxianghua at gmail.com>
+
---
drivers/net/ethernet/freescale/gianfar.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
-diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
-index e7bed53..3a42d36 100644
---- a/drivers/net/ethernet/freescale/gianfar.c
-+++ b/drivers/net/ethernet/freescale/gianfar.c
-@@ -1643,7 +1643,7 @@ void stop_gfar(struct net_device *dev)
+Index: linux-stable/drivers/net/ethernet/freescale/gianfar.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/freescale/gianfar.c
++++ linux-stable/drivers/net/ethernet/freescale/gianfar.c
+@@ -1652,7 +1652,7 @@ void stop_gfar(struct net_device *dev)
/* Lock it down */
@@ -28,7 +28,7 @@
lock_tx_qs(priv);
lock_rx_qs(priv);
-@@ -1651,7 +1651,7 @@ void stop_gfar(struct net_device *dev)
+@@ -1660,7 +1660,7 @@ void stop_gfar(struct net_device *dev)
unlock_rx_qs(priv);
unlock_tx_qs(priv);
@@ -37,7 +37,7 @@
/* Free the IRQs */
if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) {
-@@ -2948,7 +2948,7 @@ static void adjust_link(struct net_device *dev)
+@@ -2957,7 +2957,7 @@ static void adjust_link(struct net_devic
struct phy_device *phydev = priv->phydev;
int new_state = 0;
@@ -46,7 +46,7 @@
lock_tx_qs(priv);
if (phydev->link) {
-@@ -3015,7 +3015,7 @@ static void adjust_link(struct net_device *dev)
+@@ -3026,7 +3026,7 @@ static void adjust_link(struct net_devic
if (new_state && netif_msg_link(priv))
phy_print_status(phydev);
unlock_tx_qs(priv);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-net-tulip-add-missing-pci-disable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0028-drivers-net-tulip_remove_one-needs-to-call-pci_disab.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0028-drivers-net-tulip_remove_one-needs-to-call-pci_disab.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-net-tulip-add-missing-pci-disable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,21 @@
-From dd9a1a7b9922f4f3c8fee60720aff0baf8fa150b Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:18 -0500
-Subject: [028/256] drivers/net: tulip_remove_one needs to call
- pci_disable_device()
+Subject: drivers/net: tulip_remove_one needs to call pci_disable_device()
Otherwise the device is not completely shut down.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/net/ethernet/dec/tulip/tulip_core.c | 1 +
1 file changed, 1 insertion(+)
-diff --git a/drivers/net/ethernet/dec/tulip/tulip_core.c b/drivers/net/ethernet/dec/tulip/tulip_core.c
-index fea3641..d9a5fe0 100644
---- a/drivers/net/ethernet/dec/tulip/tulip_core.c
-+++ b/drivers/net/ethernet/dec/tulip/tulip_core.c
-@@ -1946,6 +1946,7 @@ static void __devexit tulip_remove_one (struct pci_dev *pdev)
+Index: linux-stable/drivers/net/ethernet/dec/tulip/tulip_core.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/dec/tulip/tulip_core.c
++++ linux-stable/drivers/net/ethernet/dec/tulip/tulip_core.c
+@@ -1948,6 +1948,7 @@ static void __devexit tulip_remove_one (
pci_iounmap(pdev, tp->base_addr);
free_netdev (dev);
pci_release_regions (pdev);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-net-vortex-fix-locking-issues.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0084-drivers-net-vortex-fix-locking-issues.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0084-drivers-net-vortex-fix-locking-issues.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-net-vortex-fix-locking-issues.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 235883690f6e8ec9f7b95aa9d14e4131ad511090 Mon Sep 17 00:00:00 2001
From: Steven Rostedt <rostedt at goodmis.org>
Date: Fri, 3 Jul 2009 08:30:00 -0500
-Subject: [084/256] drivers/net: vortex fix locking issues
+Subject: drivers/net: vortex fix locking issues
Argh, cut and paste wasn't enough...
@@ -17,15 +16,12 @@
1 file changed, 4 insertions(+), 4 deletions(-)
Signed-off-by: Ingo Molnar <mingo at elte.hu>
----
- drivers/net/ethernet/3com/3c59x.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
-index e463d10..848aeea 100644
---- a/drivers/net/ethernet/3com/3c59x.c
-+++ b/drivers/net/ethernet/3com/3c59x.c
-@@ -843,9 +843,9 @@ static void poll_vortex(struct net_device *dev)
+Index: linux-stable/drivers/net/ethernet/3com/3c59x.c
+===================================================================
+--- linux-stable.orig/drivers/net/ethernet/3com/3c59x.c
++++ linux-stable/drivers/net/ethernet/3com/3c59x.c
+@@ -843,9 +843,9 @@ static void poll_vortex(struct net_devic
{
struct vortex_private *vp = netdev_priv(dev);
unsigned long flags;
@@ -37,7 +33,7 @@
}
#endif
-@@ -1920,12 +1920,12 @@ static void vortex_tx_timeout(struct net_device *dev)
+@@ -1920,12 +1920,12 @@ static void vortex_tx_timeout(struct net
* Block interrupts because vortex_interrupt does a bare spin_lock()
*/
unsigned long flags;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-random-reduce-preempt-disabled-region.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0025-drivers-random-Reduce-preempt-disabled-region.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0025-drivers-random-Reduce-preempt-disabled-region.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-random-reduce-preempt-disabled-region.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From f8d2d716a11367c1961fb00e19123380a9d48ee4 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:30 -0500
-Subject: [025/256] drivers: random: Reduce preempt disabled region
+Subject: drivers: random: Reduce preempt disabled region
No need to keep preemption disabled across the whole function.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/char/random.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
-diff --git a/drivers/char/random.c b/drivers/char/random.c
-index 4ec04a7..1e37cf4 100644
---- a/drivers/char/random.c
-+++ b/drivers/char/random.c
-@@ -633,8 +633,11 @@ static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
+Index: linux-stable/drivers/char/random.c
+===================================================================
+--- linux-stable.orig/drivers/char/random.c
++++ linux-stable/drivers/char/random.c
+@@ -679,9 +679,12 @@ static void add_timer_randomness(struct
preempt_disable();
/* if over the trickle threshold, use only 1 in 4096 samples */
if (input_pool.entropy_count > trickle_thresh &&
@@ -25,11 +25,12 @@
+ preempt_enable();
+ return;
+ }
-+ preempt_enable();
++ preempt_enable();
sample.jiffies = jiffies;
-
-@@ -680,8 +683,6 @@ static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
+ sample.cycles = get_cycles();
+ sample.num = num;
+@@ -722,8 +725,6 @@ static void add_timer_randomness(struct
credit_entropy_bits(&input_pool,
min_t(int, fls(delta>>1), 11));
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-serial-call-flush_to_ldisc-when-the-irq-is-t.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0193-serial-8250-Call-flush_to_ldisc-when-the-irq-is-thre.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0193-serial-8250-Call-flush_to_ldisc-when-the-irq-is-thre.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-serial-call-flush_to_ldisc-when-the-irq-is-t.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,19 @@
-From e447d6e43e11faf76069bfabd1d43c1a55bc57aa Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:01 -0500
-Subject: [193/256] serial: 8250: Call flush_to_ldisc when the irq is threaded
+Subject: serial: 8250: Call flush_to_ldisc when the irq is threaded
Signed-off-by: Ingo Molnar <mingo at elte.hu>
+
---
drivers/tty/serial/8250/8250.c | 2 ++
drivers/tty/tty_buffer.c | 4 ++++
2 files changed, 6 insertions(+)
-diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c
-index 6ede5a7..ff93c70 100644
---- a/drivers/tty/serial/8250/8250.c
-+++ b/drivers/tty/serial/8250/8250.c
-@@ -1584,12 +1584,14 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
+Index: linux-stable/drivers/tty/serial/8250/8250.c
+===================================================================
+--- linux-stable.orig/drivers/tty/serial/8250/8250.c
++++ linux-stable/drivers/tty/serial/8250/8250.c
+@@ -1549,12 +1549,14 @@ static irqreturn_t serial8250_interrupt(
l = l->next;
@@ -28,11 +28,11 @@
} while (l != end);
spin_unlock(&i->lock);
-diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
-index 6c9b7cd..a56c223 100644
---- a/drivers/tty/tty_buffer.c
-+++ b/drivers/tty/tty_buffer.c
-@@ -493,10 +493,14 @@ void tty_flip_buffer_push(struct tty_struct *tty)
+Index: linux-stable/drivers/tty/tty_buffer.c
+===================================================================
+--- linux-stable.orig/drivers/tty/tty_buffer.c
++++ linux-stable/drivers/tty/tty_buffer.c
+@@ -538,10 +538,14 @@ void tty_flip_buffer_push(struct tty_str
tty->buf.tail->commit = tty->buf.tail->used;
spin_unlock_irqrestore(&tty->buf.lock, flags);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-serial-cleanup-locking-for-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0192-serial-8250-Clean-up-the-locking-for-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0192-serial-8250-Clean-up-the-locking-for-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-serial-cleanup-locking-for-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,19 @@
-From 6503c468cedb29732e4dd282219e3d311837e031 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:01 -0500
-Subject: [192/256] serial: 8250: Clean up the locking for -rt
+Subject: serial: 8250: Clean up the locking for -rt
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/tty/serial/8250/8250.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
-diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c
-index d537431..6ede5a7 100644
---- a/drivers/tty/serial/8250/8250.c
-+++ b/drivers/tty/serial/8250/8250.c
-@@ -2808,14 +2808,10 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
+Index: linux-stable/drivers/tty/serial/8250/8250.c
+===================================================================
+--- linux-stable.orig/drivers/tty/serial/8250/8250.c
++++ linux-stable/drivers/tty/serial/8250/8250.c
+@@ -2773,14 +2773,10 @@ serial8250_console_write(struct console
touch_nmi_watchdog();
@@ -32,7 +32,7 @@
/*
* First save the IER then disable the interrupts
-@@ -2847,8 +2843,7 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
+@@ -2812,8 +2808,7 @@ serial8250_console_write(struct console
serial8250_modem_status(up);
if (locked)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/drivers-tty-fix-omap-lock-crap.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0194-drivers-tty-fix-omap-lock-crap.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0194-drivers-tty-fix-omap-lock-crap.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/drivers-tty-fix-omap-lock-crap.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 3cbc89cb4588fb756ae01316e2652119eb6dd5fc Mon Sep 17 00:00:00 2001
+Subject: drivers-tty-fix-omap-lock-crap.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 28 Jul 2011 13:32:57 +0200
-Subject: [194/256] drivers-tty-fix-omap-lock-crap.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
drivers/tty/serial/omap-serial.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
-diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
-index d00b38e..f697492 100644
---- a/drivers/tty/serial/omap-serial.c
-+++ b/drivers/tty/serial/omap-serial.c
-@@ -1064,13 +1064,10 @@ serial_omap_console_write(struct console *co, const char *s,
+Index: linux-stable/drivers/tty/serial/omap-serial.c
+===================================================================
+--- linux-stable.orig/drivers/tty/serial/omap-serial.c
++++ linux-stable/drivers/tty/serial/omap-serial.c
+@@ -1082,13 +1082,10 @@ serial_omap_console_write(struct console
pm_runtime_get_sync(&up->pdev->dev);
@@ -29,7 +28,7 @@
/*
* First save the IER then disable the interrupts
-@@ -1099,8 +1096,7 @@ serial_omap_console_write(struct console *co, const char *s,
+@@ -1117,8 +1114,7 @@ serial_omap_console_write(struct console
pm_runtime_mark_last_busy(&up->pdev->dev);
pm_runtime_put_autosuspend(&up->pdev->dev);
if (locked)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/early-printk-consolidate.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0057-early-printk-consolidate.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0057-early-printk-consolidate.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/early-printk-consolidate.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,32 +1,31 @@
-From 5f55e0bba8030011d082892e2c5c789795450715 Mon Sep 17 00:00:00 2001
+Subject: early-printk-consolidate.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 23 Jul 2011 11:04:08 +0200
-Subject: [057/256] early-printk-consolidate.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
arch/arm/kernel/early_printk.c | 17 +++--------------
arch/blackfin/kernel/early_printk.c | 2 --
arch/microblaze/kernel/early_printk.c | 26 ++++----------------------
- arch/mips/kernel/early_printk.c | 10 ++++------
+ arch/mips/kernel/early_printk.c | 11 +++++------
arch/powerpc/kernel/udbg.c | 6 ++----
arch/sh/kernel/sh_bios.c | 2 --
arch/sparc/kernel/setup_32.c | 1 +
arch/sparc/kernel/setup_64.c | 8 +++++++-
- arch/tile/kernel/early_printk.c | 26 ++++----------------------
+ arch/tile/kernel/early_printk.c | 27 +++++----------------------
arch/um/kernel/early_printk.c | 8 +++++---
arch/unicore32/kernel/early_printk.c | 12 ++++--------
arch/x86/kernel/early_printk.c | 21 ++-------------------
include/linux/console.h | 1 +
- include/linux/printk.h | 5 +++++
+ include/linux/printk.h | 6 ++++++
kernel/printk.c | 30 +++++++++++++++++++++++-------
- 15 files changed, 65 insertions(+), 110 deletions(-)
+ 15 files changed, 68 insertions(+), 110 deletions(-)
-diff --git a/arch/arm/kernel/early_printk.c b/arch/arm/kernel/early_printk.c
-index 85aa2b2..4307653 100644
---- a/arch/arm/kernel/early_printk.c
-+++ b/arch/arm/kernel/early_printk.c
-@@ -29,28 +29,17 @@ static void early_console_write(struct console *con, const char *s, unsigned n)
+Index: linux-stable/arch/arm/kernel/early_printk.c
+===================================================================
+--- linux-stable.orig/arch/arm/kernel/early_printk.c
++++ linux-stable/arch/arm/kernel/early_printk.c
+@@ -29,28 +29,17 @@ static void early_console_write(struct c
early_write(s, n);
}
@@ -58,11 +57,11 @@
return 0;
}
-diff --git a/arch/blackfin/kernel/early_printk.c b/arch/blackfin/kernel/early_printk.c
-index 84ed837..61fbd2d 100644
---- a/arch/blackfin/kernel/early_printk.c
-+++ b/arch/blackfin/kernel/early_printk.c
-@@ -25,8 +25,6 @@ extern struct console *bfin_earlyserial_init(unsigned int port,
+Index: linux-stable/arch/blackfin/kernel/early_printk.c
+===================================================================
+--- linux-stable.orig/arch/blackfin/kernel/early_printk.c
++++ linux-stable/arch/blackfin/kernel/early_printk.c
+@@ -25,8 +25,6 @@ extern struct console *bfin_earlyserial_
extern struct console *bfin_jc_early_init(void);
#endif
@@ -71,10 +70,10 @@
/* Default console */
#define DEFAULT_PORT 0
#define DEFAULT_CFLAG CS8|B57600
-diff --git a/arch/microblaze/kernel/early_printk.c b/arch/microblaze/kernel/early_printk.c
-index aba1f9a..b099a86 100644
---- a/arch/microblaze/kernel/early_printk.c
-+++ b/arch/microblaze/kernel/early_printk.c
+Index: linux-stable/arch/microblaze/kernel/early_printk.c
+===================================================================
+--- linux-stable.orig/arch/microblaze/kernel/early_printk.c
++++ linux-stable/arch/microblaze/kernel/early_printk.c
@@ -21,7 +21,6 @@
#include <asm/setup.h>
#include <asm/prom.h>
@@ -83,7 +82,7 @@
static u32 base_addr;
#ifdef CONFIG_SERIAL_UARTLITE_CONSOLE
-@@ -109,27 +108,11 @@ static struct console early_serial_uart16550_console = {
+@@ -109,27 +108,11 @@ static struct console early_serial_uart1
};
#endif /* CONFIG_SERIAL_8250_CONSOLE */
@@ -141,11 +140,19 @@
- early_console_initialized = 0;
+ early_console = NULL;
}
-diff --git a/arch/mips/kernel/early_printk.c b/arch/mips/kernel/early_printk.c
-index 9ae813e..973c995 100644
---- a/arch/mips/kernel/early_printk.c
-+++ b/arch/mips/kernel/early_printk.c
-@@ -25,20 +25,18 @@ early_console_write(struct console *con, const char *s, unsigned n)
+Index: linux-stable/arch/mips/kernel/early_printk.c
+===================================================================
+--- linux-stable.orig/arch/mips/kernel/early_printk.c
++++ linux-stable/arch/mips/kernel/early_printk.c
+@@ -8,6 +8,7 @@
+ * written by Ralf Baechle (ralf at linux-mips.org)
+ */
+ #include <linux/console.h>
++#include <linux/printk.h>
+ #include <linux/init.h>
+
+ #include <asm/setup.h>
+@@ -25,20 +26,18 @@ early_console_write(struct console *con,
}
}
@@ -170,10 +177,10 @@
- register_console(&early_console);
+ register_console(&early_console_prom);
}
-diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
-index c39c1ca..8b00aab 100644
---- a/arch/powerpc/kernel/udbg.c
-+++ b/arch/powerpc/kernel/udbg.c
+Index: linux-stable/arch/powerpc/kernel/udbg.c
+===================================================================
+--- linux-stable.orig/arch/powerpc/kernel/udbg.c
++++ linux-stable/arch/powerpc/kernel/udbg.c
@@ -179,15 +179,13 @@ static struct console udbg_console = {
.index = 0,
};
@@ -191,7 +198,7 @@
return;
if (!udbg_putc)
-@@ -197,7 +195,7 @@ void __init register_early_udbg_console(void)
+@@ -197,7 +195,7 @@ void __init register_early_udbg_console(
printk(KERN_INFO "early console immortal !\n");
udbg_console.flags &= ~CON_BOOT;
}
@@ -200,10 +207,10 @@
register_console(&udbg_console);
}
-diff --git a/arch/sh/kernel/sh_bios.c b/arch/sh/kernel/sh_bios.c
-index 47475cc..a5b51b9 100644
---- a/arch/sh/kernel/sh_bios.c
-+++ b/arch/sh/kernel/sh_bios.c
+Index: linux-stable/arch/sh/kernel/sh_bios.c
+===================================================================
+--- linux-stable.orig/arch/sh/kernel/sh_bios.c
++++ linux-stable/arch/sh/kernel/sh_bios.c
@@ -144,8 +144,6 @@ static struct console bios_console = {
.index = -1,
};
@@ -213,23 +220,23 @@
static int __init setup_early_printk(char *buf)
{
int keep_early = 0;
-diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c
-index d444468..a000aa5 100644
---- a/arch/sparc/kernel/setup_32.c
-+++ b/arch/sparc/kernel/setup_32.c
-@@ -221,6 +221,7 @@ void __init setup_arch(char **cmdline_p)
+Index: linux-stable/arch/sparc/kernel/setup_32.c
+===================================================================
+--- linux-stable.orig/arch/sparc/kernel/setup_32.c
++++ linux-stable/arch/sparc/kernel/setup_32.c
+@@ -309,6 +309,7 @@ void __init setup_arch(char **cmdline_p)
boot_flags_init(*cmdline_p);
+ early_console = &prom_early_console;
register_console(&prom_early_console);
- /* Set sparc_cpu_model */
-diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c
-index 1414d16..8b37e5a 100644
---- a/arch/sparc/kernel/setup_64.c
-+++ b/arch/sparc/kernel/setup_64.c
-@@ -487,6 +487,12 @@ static void __init init_sparc64_elf_hwcap(void)
+ printk("ARCH: ");
+Index: linux-stable/arch/sparc/kernel/setup_64.c
+===================================================================
+--- linux-stable.orig/arch/sparc/kernel/setup_64.c
++++ linux-stable/arch/sparc/kernel/setup_64.c
+@@ -487,6 +487,12 @@ static void __init init_sparc64_elf_hwca
popc_patch();
}
@@ -251,11 +258,19 @@
if (tlb_type == hypervisor)
printk("ARCH: SUN4V\n");
-diff --git a/arch/tile/kernel/early_printk.c b/arch/tile/kernel/early_printk.c
-index afb9c9a..ff25220 100644
---- a/arch/tile/kernel/early_printk.c
-+++ b/arch/tile/kernel/early_printk.c
-@@ -33,25 +33,8 @@ static struct console early_hv_console = {
+Index: linux-stable/arch/tile/kernel/early_printk.c
+===================================================================
+--- linux-stable.orig/arch/tile/kernel/early_printk.c
++++ linux-stable/arch/tile/kernel/early_printk.c
+@@ -17,6 +17,7 @@
+ #include <linux/init.h>
+ #include <linux/string.h>
+ #include <linux/irqflags.h>
++#include <linux/printk.h>
+ #include <asm/setup.h>
+ #include <hv/hypervisor.h>
+
+@@ -33,25 +34,8 @@ static struct console early_hv_console =
};
/* Direct interface for emergencies */
@@ -281,7 +296,7 @@
void early_panic(const char *fmt, ...)
{
va_list ap;
-@@ -69,14 +52,13 @@ static int __initdata keep_early;
+@@ -69,14 +53,13 @@ static int __initdata keep_early;
static int __init setup_early_printk(char *str)
{
@@ -297,7 +312,7 @@
register_console(early_console);
return 0;
-@@ -85,12 +67,12 @@ static int __init setup_early_printk(char *str)
+@@ -85,12 +68,12 @@ static int __init setup_early_printk(cha
void __init disable_early_printk(void)
{
early_console_complete = 1;
@@ -312,7 +327,7 @@
} else {
early_printk("keeping early console\n");
}
-@@ -98,7 +80,7 @@ void __init disable_early_printk(void)
+@@ -98,7 +81,7 @@ void __init disable_early_printk(void)
void warn_early_printk(void)
{
@@ -321,11 +336,11 @@
return;
early_printk("\
Machine shutting down before console output is fully initialized.\n\
-diff --git a/arch/um/kernel/early_printk.c b/arch/um/kernel/early_printk.c
-index ec649bf..183060f 100644
---- a/arch/um/kernel/early_printk.c
-+++ b/arch/um/kernel/early_printk.c
-@@ -16,7 +16,7 @@ static void early_console_write(struct console *con, const char *s, unsigned int
+Index: linux-stable/arch/um/kernel/early_printk.c
+===================================================================
+--- linux-stable.orig/arch/um/kernel/early_printk.c
++++ linux-stable/arch/um/kernel/early_printk.c
+@@ -16,7 +16,7 @@ static void early_console_write(struct c
um_early_printk(s, n);
}
@@ -347,11 +362,11 @@
return 0;
}
-diff --git a/arch/unicore32/kernel/early_printk.c b/arch/unicore32/kernel/early_printk.c
-index 3922255..9be0d5d 100644
---- a/arch/unicore32/kernel/early_printk.c
-+++ b/arch/unicore32/kernel/early_printk.c
-@@ -33,21 +33,17 @@ static struct console early_ocd_console = {
+Index: linux-stable/arch/unicore32/kernel/early_printk.c
+===================================================================
+--- linux-stable.orig/arch/unicore32/kernel/early_printk.c
++++ linux-stable/arch/unicore32/kernel/early_printk.c
+@@ -33,21 +33,17 @@ static struct console early_ocd_console
.index = -1,
};
@@ -377,11 +392,11 @@
if (keep_early)
early_console->flags &= ~CON_BOOT;
-diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
-index 9b9f18b..d15f575 100644
---- a/arch/x86/kernel/early_printk.c
-+++ b/arch/x86/kernel/early_printk.c
-@@ -169,25 +169,9 @@ static struct console early_serial_console = {
+Index: linux-stable/arch/x86/kernel/early_printk.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/early_printk.c
++++ linux-stable/arch/x86/kernel/early_printk.c
+@@ -169,25 +169,9 @@ static struct console early_serial_conso
.index = -1,
};
@@ -408,7 +423,7 @@
printk(KERN_CRIT "ERROR: earlyprintk= %s already used\n",
con->name);
return;
-@@ -207,9 +191,8 @@ static int __init setup_early_printk(char *buf)
+@@ -207,9 +191,8 @@ static int __init setup_early_printk(cha
if (!buf)
return 0;
@@ -419,10 +434,10 @@
keep = (strstr(buf, "keep") != NULL);
-diff --git a/include/linux/console.h b/include/linux/console.h
-index 7201ce4..dec7f97 100644
---- a/include/linux/console.h
-+++ b/include/linux/console.h
+Index: linux-stable/include/linux/console.h
+===================================================================
+--- linux-stable.orig/include/linux/console.h
++++ linux-stable/include/linux/console.h
@@ -133,6 +133,7 @@ struct console {
for (con = console_drivers; con != NULL; con = con->next)
@@ -431,17 +446,18 @@
extern int add_preferred_console(char *name, int idx, char *options);
extern int update_console_cmdline(char *name, int idx, char *name_new, int idx_new, char *options);
-diff --git a/include/linux/printk.h b/include/linux/printk.h
-index 0525927..c8d7f7b 100644
---- a/include/linux/printk.h
-+++ b/include/linux/printk.h
-@@ -88,8 +88,13 @@ int no_printk(const char *fmt, ...)
+Index: linux-stable/include/linux/printk.h
+===================================================================
+--- linux-stable.orig/include/linux/printk.h
++++ linux-stable/include/linux/printk.h
+@@ -95,8 +95,14 @@ int no_printk(const char *fmt, ...)
return 0;
}
+#ifdef CONFIG_EARLY_PRINTK
extern asmlinkage __printf(1, 2)
void early_printk(const char *fmt, ...);
++void early_vprintk(const char *fmt, va_list ap);
+#else
+static inline __printf(1, 2) __cold
+void early_printk(const char *s, ...) { }
@@ -449,11 +465,11 @@
extern int printk_needs_cpu(int cpu);
extern void printk_tick(void);
-diff --git a/kernel/printk.c b/kernel/printk.c
-index b663c2c..c442606 100644
---- a/kernel/printk.c
-+++ b/kernel/printk.c
-@@ -47,13 +47,6 @@
+Index: linux-stable/kernel/printk.c
+===================================================================
+--- linux-stable.orig/kernel/printk.c
++++ linux-stable/kernel/printk.c
+@@ -48,13 +48,6 @@
#define CREATE_TRACE_POINTS
#include <trace/events/printk.h>
@@ -464,17 +480,17 @@
-{
-}
-
- #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
-
/* printk's without a loglevel use this.. */
-@@ -524,6 +517,29 @@ static void __call_console_drivers(unsigned start, unsigned end)
- }
+ #define DEFAULT_MESSAGE_LOGLEVEL CONFIG_DEFAULT_MESSAGE_LOGLEVEL
+
+@@ -1232,6 +1225,29 @@ SYSCALL_DEFINE3(syslog, int, type, char
+ return do_syslog(type, buf, len, SYSLOG_FROM_CALL);
}
+#ifdef CONFIG_EARLY_PRINTK
+struct console *early_console;
+
-+static void early_vprintk(const char *fmt, va_list ap)
++void early_vprintk(const char *fmt, va_list ap)
+{
+ if (early_console) {
+ char buf[512];
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/epoll-use-get-cpu-light.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0206-epoll.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0206-epoll.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/epoll-use-get-cpu-light.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From e00039cd78706b8e320bb3009c12991e4ec6e303 Mon Sep 17 00:00:00 2001
+Subject: epoll.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Fri, 8 Jul 2011 16:35:35 +0200
-Subject: [206/256] epoll.patch
+Date: Fri, 08 Jul 2011 16:35:35 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
fs/eventpoll.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/fs/eventpoll.c b/fs/eventpoll.c
-index c0b3c70..39a2364 100644
---- a/fs/eventpoll.c
-+++ b/fs/eventpoll.c
-@@ -488,12 +488,12 @@ static int ep_poll_wakeup_proc(void *priv, void *cookie, int call_nests)
+Index: linux-stable/fs/eventpoll.c
+===================================================================
+--- linux-stable.orig/fs/eventpoll.c
++++ linux-stable/fs/eventpoll.c
+@@ -495,12 +495,12 @@ static int ep_poll_wakeup_proc(void *pri
*/
static void ep_poll_safewake(wait_queue_head_t *wq)
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/filemap-fix-up.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0036-filemap-fix-up.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0036-filemap-fix-up.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/filemap-fix-up.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From aa2098c961cc12184d7df1e87ff12c6020d5f785 Mon Sep 17 00:00:00 2001
+Subject: filemap-fix-up.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 17 Jun 2011 18:56:24 +0200
-Subject: [036/256] filemap-fix-up.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Wrecked-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
@@ -10,11 +9,11 @@
mm/filemap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/mm/filemap.c b/mm/filemap.c
-index 79c4b2b..51c34c0 100644
---- a/mm/filemap.c
-+++ b/mm/filemap.c
-@@ -2036,7 +2036,7 @@ size_t iov_iter_copy_from_user_atomic(struct page *page,
+Index: linux-stable/mm/filemap.c
+===================================================================
+--- linux-stable.orig/mm/filemap.c
++++ linux-stable/mm/filemap.c
+@@ -1955,7 +1955,7 @@ size_t iov_iter_copy_from_user_atomic(st
char *kaddr;
size_t copied;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0051-x86-Do-not-disable-preemption-in-int3-on-32bit.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0051-x86-Do-not-disable-preemption-in-int3-on-32bit.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,5 @@
-From 66eecab296c168e350a2f94e157a443b6243e63e Mon Sep 17 00:00:00 2001
From: Steven Rostedt <rostedt at goodmis.org>
-Date: Thu, 7 Jun 2012 07:46:49 -0400
-Subject: [051/256] x86: Do not disable preemption in int3 on 32bit
+Subject: x86: Do not disable preemption in int3 on 32bit
Preemption must be disabled before enabling interrupts in do_trap
on x86_64 because the stack in use for int3 and debug is a per CPU
@@ -19,15 +17,16 @@
Cc: stable-rt at vger.kernel.org
Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
arch/x86/kernel/traps.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
-diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
-index ff9281f1..0b01977 100644
---- a/arch/x86/kernel/traps.c
-+++ b/arch/x86/kernel/traps.c
-@@ -87,9 +87,21 @@ static inline void conditional_sti(struct pt_regs *regs)
+Index: linux-stable/arch/x86/kernel/traps.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/traps.c
++++ linux-stable/arch/x86/kernel/traps.c
+@@ -87,9 +87,21 @@ static inline void conditional_sti(struc
local_irq_enable();
}
@@ -50,7 +49,7 @@
if (regs->flags & X86_EFLAGS_IF)
local_irq_enable();
}
-@@ -100,11 +112,13 @@ static inline void conditional_cli(struct pt_regs *regs)
+@@ -100,11 +112,13 @@ static inline void conditional_cli(struc
local_irq_disable();
}
@@ -65,7 +64,7 @@
}
static void __kprobes
-@@ -226,9 +240,9 @@ dotraplinkage void do_stack_segment(struct pt_regs *regs, long error_code)
+@@ -225,9 +239,9 @@ dotraplinkage void do_stack_segment(stru
if (notify_die(DIE_TRAP, "stack segment", regs, error_code,
X86_TRAP_SS, SIGBUS) == NOTIFY_STOP)
return;
@@ -77,7 +76,7 @@
}
dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
-@@ -320,9 +334,9 @@ dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code)
+@@ -327,9 +341,9 @@ dotraplinkage void __kprobes notrace do_
* as we may switch to the interrupt stack.
*/
debug_stack_usage_inc();
@@ -89,7 +88,7 @@
debug_stack_usage_dec();
}
-@@ -423,12 +437,12 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
+@@ -430,12 +444,12 @@ dotraplinkage void __kprobes do_debug(st
debug_stack_usage_inc();
/* It's safe to allow irq's after DR6 has been saved */
@@ -104,7 +103,7 @@
debug_stack_usage_dec();
return;
}
-@@ -448,7 +462,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
+@@ -455,7 +469,7 @@ dotraplinkage void __kprobes do_debug(st
si_code = get_si_code(tsk->thread.debugreg6);
if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS) || user_icebp)
send_sigtrap(tsk, regs, error_code, si_code);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/fs-block-rt-support.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0199-fs-block-rt-support.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0199-fs-block-rt-support.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/fs-block-rt-support.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 144c78a3b223b226689db343fedd8d47fbd7dc2d Mon Sep 17 00:00:00 2001
+Subject: fs-block-rt-support.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 14 Jun 2011 17:05:09 +0200
-Subject: [199/256] fs-block-rt-support.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
fs/file.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
-diff --git a/block/blk-core.c b/block/blk-core.c
-index 0d947d0..f068328 100644
---- a/block/blk-core.c
-+++ b/block/blk-core.c
-@@ -237,7 +237,7 @@ EXPORT_SYMBOL(blk_delay_queue);
+Index: linux-stable/block/blk-core.c
+===================================================================
+--- linux-stable.orig/block/blk-core.c
++++ linux-stable/block/blk-core.c
+@@ -239,7 +239,7 @@ EXPORT_SYMBOL(blk_delay_queue);
**/
void blk_start_queue(struct request_queue *q)
{
@@ -22,11 +21,11 @@
queue_flag_clear(QUEUE_FLAG_STOPPED, q);
__blk_run_queue(q);
-diff --git a/fs/file.c b/fs/file.c
-index 6f176f5..9f5343d 100644
---- a/fs/file.c
-+++ b/fs/file.c
-@@ -105,14 +105,14 @@ void free_fdtable_rcu(struct rcu_head *rcu)
+Index: linux-stable/fs/file.c
+===================================================================
+--- linux-stable.orig/fs/file.c
++++ linux-stable/fs/file.c
+@@ -105,14 +105,14 @@ void free_fdtable_rcu(struct rcu_head *r
kfree(fdt->open_fds);
kfree(fdt);
} else {
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0245-fs-dcache-Use-cpu_chill-in-trylock-loops.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0245-fs-dcache-Use-cpu_chill-in-trylock-loops.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From ba7ac3a9415b0c09e16f37e5c56fc5cf64aaf71f Mon Sep 17 00:00:00 2001
+Subject: fs: dcache: Use cpu_chill() in trylock loops
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Wed, 7 Mar 2012 21:00:34 +0100
-Subject: [245/256] fs: dcache: Use cpu_chill() in trylock loops
+Date: Wed, 07 Mar 2012 21:00:34 +0100
Retry loops on RT might loop forever when the modifying side was
preempted. Use cpu_chill() instead of cpu_relax() to let the system
@@ -16,10 +15,10 @@
fs/namespace.c | 3 ++-
4 files changed, 8 insertions(+), 5 deletions(-)
-diff --git a/fs/autofs4/autofs_i.h b/fs/autofs4/autofs_i.h
-index 908e184..bdd1788 100644
---- a/fs/autofs4/autofs_i.h
-+++ b/fs/autofs4/autofs_i.h
+Index: linux-stable/fs/autofs4/autofs_i.h
+===================================================================
+--- linux-stable.orig/fs/autofs4/autofs_i.h
++++ linux-stable/fs/autofs4/autofs_i.h
@@ -34,6 +34,7 @@
#include <linux/sched.h>
#include <linux/mount.h>
@@ -28,11 +27,11 @@
#include <asm/current.h>
#include <asm/uaccess.h>
-diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
-index 1feb68e..859badd 100644
---- a/fs/autofs4/expire.c
-+++ b/fs/autofs4/expire.c
-@@ -171,7 +171,7 @@ again:
+Index: linux-stable/fs/autofs4/expire.c
+===================================================================
+--- linux-stable.orig/fs/autofs4/expire.c
++++ linux-stable/fs/autofs4/expire.c
+@@ -166,7 +166,7 @@ again:
parent = p->d_parent;
if (!spin_trylock(&parent->d_lock)) {
spin_unlock(&p->d_lock);
@@ -41,10 +40,10 @@
goto relock;
}
spin_unlock(&p->d_lock);
-diff --git a/fs/dcache.c b/fs/dcache.c
-index b80531c..0801198 100644
---- a/fs/dcache.c
-+++ b/fs/dcache.c
+Index: linux-stable/fs/dcache.c
+===================================================================
+--- linux-stable.orig/fs/dcache.c
++++ linux-stable/fs/dcache.c
@@ -37,6 +37,7 @@
#include <linux/rculist_bl.h>
#include <linux/prefetch.h>
@@ -53,7 +52,7 @@
#include "internal.h"
#include "mount.h"
-@@ -472,7 +473,7 @@ static inline struct dentry *dentry_kill(struct dentry *dentry, int ref)
+@@ -488,7 +489,7 @@ static inline struct dentry *dentry_kill
if (inode && !spin_trylock(&inode->i_lock)) {
relock:
spin_unlock(&dentry->d_lock);
@@ -62,7 +61,7 @@
return dentry; /* try again with same dentry */
}
if (IS_ROOT(dentry))
-@@ -858,7 +859,7 @@ relock:
+@@ -876,7 +877,7 @@ relock:
if (!spin_trylock(&dentry->d_lock)) {
spin_unlock(&dcache_lru_lock);
@@ -71,7 +70,7 @@
goto relock;
}
-@@ -2040,7 +2041,7 @@ again:
+@@ -2115,7 +2116,7 @@ again:
if (dentry->d_count == 1) {
if (inode && !spin_trylock(&inode->i_lock)) {
spin_unlock(&dentry->d_lock);
@@ -80,10 +79,10 @@
goto again;
}
dentry->d_flags &= ~DCACHE_CANT_MOUNT;
-diff --git a/fs/namespace.c b/fs/namespace.c
-index 6dc617c..02f02ea 100644
---- a/fs/namespace.c
-+++ b/fs/namespace.c
+Index: linux-stable/fs/namespace.c
+===================================================================
+--- linux-stable.orig/fs/namespace.c
++++ linux-stable/fs/namespace.c
@@ -20,6 +20,7 @@
#include <linux/fs_struct.h> /* get_fs_root et.al. */
#include <linux/fsnotify.h> /* fsnotify_vfsmount_delete */
@@ -92,7 +91,7 @@
#include "pnode.h"
#include "internal.h"
-@@ -315,7 +316,7 @@ int mnt_want_write(struct vfsmount *m)
+@@ -313,7 +314,7 @@ int __mnt_want_write(struct vfsmount *m)
smp_mb();
while (mnt->mnt.mnt_flags & MNT_WRITE_HOLD) {
preempt_enable();
Added: dists/trunk/linux/debian/patches/features/all/rt/fs-jbd-pull-plug-when-waiting-for-space.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/fs-jbd-pull-plug-when-waiting-for-space.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,31 @@
+From: Mike Galbraith <mgalbraith at suse.de>
+Date: Wed, 11 Jul 2012 22:05:20 +0000
+Subject: fs, jbd: pull your plug when waiting for space
+
+With an -rt kernel, and a heavy sync IO load, tasks can jam
+up on journal locks without unplugging, which can lead to
+terminal IO starvation. Unplug and schedule when waiting for space.
+
+Signed-off-by: Mike Galbraith <mgalbraith at suse.de>
+Cc: Steven Rostedt <rostedt at goodmis.org>
+Cc: Theodore Tso <tytso at mit.edu>
+Link: http://lkml.kernel.org/r/1341812414.7370.73.camel@marge.simpson.net
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
+---
+ fs/jbd/checkpoint.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+Index: linux-stable/fs/jbd/checkpoint.c
+===================================================================
+--- linux-stable.orig/fs/jbd/checkpoint.c
++++ linux-stable/fs/jbd/checkpoint.c
+@@ -129,6 +129,8 @@ void __log_wait_for_space(journal_t *jou
+ if (journal->j_flags & JFS_ABORT)
+ return;
+ spin_unlock(&journal->j_state_lock);
++ if (current->plug)
++ io_schedule();
+ mutex_lock(&journal->j_checkpoint_mutex);
+
+ /*
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/fs-jbd-replace-bh_state-lock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0078-fs-jbd-jbd2-Make-state-lock-and-journal-head-lock-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0078-fs-jbd-jbd2-Make-state-lock-and-journal-head-lock-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/fs-jbd-replace-bh_state-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From 2e64cea6269df0581e5f38a53232c0d1b495b6b8 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 18 Mar 2011 10:11:25 +0100
-Subject: [078/256] fs: jbd/jbd2: Make state lock and journal head lock rt
- safe
+Subject: fs: jbd/jbd2: Make state lock and journal head lock rt safe
bit_spin_locks break under RT.
@@ -14,15 +12,11 @@
include/linux/buffer_head.h | 10 ++++++++++
include/linux/jbd_common.h | 24 ++++++++++++++++++++++++
2 files changed, 34 insertions(+)
----
- include/linux/buffer_head.h | 10 ++++++++++
- include/linux/jbd_common.h | 24 ++++++++++++++++++++++++
- 2 files changed, 34 insertions(+)
-diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
-index 5c16cf1..3f8e27b 100644
---- a/include/linux/buffer_head.h
-+++ b/include/linux/buffer_head.h
+Index: linux-stable/include/linux/buffer_head.h
+===================================================================
+--- linux-stable.orig/include/linux/buffer_head.h
++++ linux-stable/include/linux/buffer_head.h
@@ -74,6 +74,11 @@ struct buffer_head {
atomic_t b_count; /* users using this buffer_head */
#ifdef CONFIG_PREEMPT_RT_BASE
@@ -35,7 +29,7 @@
#endif
};
-@@ -105,6 +110,11 @@ static inline void buffer_head_init_locks(struct buffer_head *bh)
+@@ -105,6 +110,11 @@ static inline void buffer_head_init_lock
{
#ifdef CONFIG_PREEMPT_RT_BASE
spin_lock_init(&bh->b_uptodate_lock);
@@ -47,11 +41,11 @@
#endif
}
-diff --git a/include/linux/jbd_common.h b/include/linux/jbd_common.h
-index 6230f85..11c313e 100644
---- a/include/linux/jbd_common.h
-+++ b/include/linux/jbd_common.h
-@@ -37,32 +37,56 @@ static inline struct journal_head *bh2jh(struct buffer_head *bh)
+Index: linux-stable/include/linux/jbd_common.h
+===================================================================
+--- linux-stable.orig/include/linux/jbd_common.h
++++ linux-stable/include/linux/jbd_common.h
+@@ -39,32 +39,56 @@ static inline struct journal_head *bh2jh
static inline void jbd_lock_bh_state(struct buffer_head *bh)
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/fs-namespace-preemption-fix.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0196-fs-namespace-preemption-fix.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0196-fs-namespace-preemption-fix.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/fs-namespace-preemption-fix.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 02c6cb04ae86544743ced9468bb81a8659473acc Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 19 Jul 2009 08:44:27 -0500
-Subject: [196/256] fs: namespace preemption fix
+Subject: fs: namespace preemption fix
On RT we cannot loop with preemption disabled here as
mnt_make_readonly() might have been preempted. We can safely enable
@@ -9,15 +8,16 @@
as well.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
fs/namespace.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
-diff --git a/fs/namespace.c b/fs/namespace.c
-index 4e46539..6dc617c 100644
---- a/fs/namespace.c
-+++ b/fs/namespace.c
-@@ -313,8 +313,11 @@ int mnt_want_write(struct vfsmount *m)
+Index: linux-stable/fs/namespace.c
+===================================================================
+--- linux-stable.orig/fs/namespace.c
++++ linux-stable/fs/namespace.c
+@@ -311,8 +311,11 @@ int __mnt_want_write(struct vfsmount *m)
* incremented count after it has set MNT_WRITE_HOLD.
*/
smp_mb();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/fs-ntfs-disable-interrupt-non-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0200-fs-ntfs-disable-interrupt-only-on-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0200-fs-ntfs-disable-interrupt-only-on-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/fs-ntfs-disable-interrupt-non-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 8cd9691b9af403d1373b92eaeaa06ba645cb3e26 Mon Sep 17 00:00:00 2001
From: Mike Galbraith <efault at gmx.de>
Date: Fri, 3 Jul 2009 08:44:12 -0500
-Subject: [200/256] fs: ntfs: disable interrupt only on !RT
+Subject: fs: ntfs: disable interrupt only on !RT
On Sat, 2007-10-27 at 11:44 +0200, Ingo Molnar wrote:
> * Nick Piggin <nickpiggin at yahoo.com.au> wrote:
@@ -35,15 +34,16 @@
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
fs/ntfs/aops.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
-index 4e4ca73..f5d4565 100644
---- a/fs/ntfs/aops.c
-+++ b/fs/ntfs/aops.c
-@@ -144,13 +144,13 @@ static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate)
+Index: linux-stable/fs/ntfs/aops.c
+===================================================================
+--- linux-stable.orig/fs/ntfs/aops.c
++++ linux-stable/fs/ntfs/aops.c
+@@ -144,13 +144,13 @@ static void ntfs_end_buffer_async_read(s
recs = PAGE_CACHE_SIZE / rec_size;
/* Should have been verified before we got here... */
BUG_ON(!recs);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/fs-replace-bh_uptodate_lock-for-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0077-buffer_head-Replace-bh_uptodate_lock-for-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0077-buffer_head-Replace-bh_uptodate_lock-for-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/fs-replace-bh_uptodate_lock-for-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 050653e6f4bca360d267b8e6cfbc85184bcc89bf Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 18 Mar 2011 09:18:52 +0100
-Subject: [077/256] buffer_head: Replace bh_uptodate_lock for -rt
+Subject: buffer_head: Replace bh_uptodate_lock for -rt
Wrap the bit_spin_lock calls into a separate inline and add the RT
replacements with a real spinlock.
@@ -13,11 +12,11 @@
include/linux/buffer_head.h | 34 ++++++++++++++++++++++++++++++++++
3 files changed, 44 insertions(+), 21 deletions(-)
-diff --git a/fs/buffer.c b/fs/buffer.c
-index ad5938c..38956b5 100644
---- a/fs/buffer.c
-+++ b/fs/buffer.c
-@@ -281,8 +281,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
+Index: linux-stable/fs/buffer.c
+===================================================================
+--- linux-stable.orig/fs/buffer.c
++++ linux-stable/fs/buffer.c
+@@ -281,8 +281,7 @@ static void end_buffer_async_read(struct
* decide that the page is now completely done.
*/
first = page_buffers(page);
@@ -27,7 +26,7 @@
clear_buffer_async_read(bh);
unlock_buffer(bh);
tmp = bh;
-@@ -295,8 +294,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
+@@ -295,8 +294,7 @@ static void end_buffer_async_read(struct
}
tmp = tmp->b_this_page;
} while (tmp != bh);
@@ -37,7 +36,7 @@
/*
* If none of the buffers had errors and they are all
-@@ -308,9 +306,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
+@@ -308,9 +306,7 @@ static void end_buffer_async_read(struct
return;
still_busy:
@@ -48,7 +47,7 @@
}
/*
-@@ -344,8 +340,7 @@ void end_buffer_async_write(struct buffer_head *bh, int uptodate)
+@@ -344,8 +340,7 @@ void end_buffer_async_write(struct buffe
}
first = page_buffers(page);
@@ -58,7 +57,7 @@
clear_buffer_async_write(bh);
unlock_buffer(bh);
-@@ -357,15 +352,12 @@ void end_buffer_async_write(struct buffer_head *bh, int uptodate)
+@@ -357,15 +352,12 @@ void end_buffer_async_write(struct buffe
}
tmp = tmp->b_this_page;
}
@@ -76,7 +75,7 @@
}
EXPORT_SYMBOL(end_buffer_async_write);
-@@ -3187,6 +3179,7 @@ struct buffer_head *alloc_buffer_head(gfp_t gfp_flags)
+@@ -3177,6 +3169,7 @@ struct buffer_head *alloc_buffer_head(gf
struct buffer_head *ret = kmem_cache_zalloc(bh_cachep, gfp_flags);
if (ret) {
INIT_LIST_HEAD(&ret->b_assoc_buffers);
@@ -84,11 +83,11 @@
preempt_disable();
__this_cpu_inc(bh_accounting.nr);
recalc_bh_state();
-diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
-index fa9c05f..4e4ca73 100644
---- a/fs/ntfs/aops.c
-+++ b/fs/ntfs/aops.c
-@@ -108,8 +108,7 @@ static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate)
+Index: linux-stable/fs/ntfs/aops.c
+===================================================================
+--- linux-stable.orig/fs/ntfs/aops.c
++++ linux-stable/fs/ntfs/aops.c
+@@ -108,8 +108,7 @@ static void ntfs_end_buffer_async_read(s
"0x%llx.", (unsigned long long)bh->b_blocknr);
}
first = page_buffers(page);
@@ -98,7 +97,7 @@
clear_buffer_async_read(bh);
unlock_buffer(bh);
tmp = bh;
-@@ -124,8 +123,7 @@ static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate)
+@@ -124,8 +123,7 @@ static void ntfs_end_buffer_async_read(s
}
tmp = tmp->b_this_page;
} while (tmp != bh);
@@ -108,7 +107,7 @@
/*
* If none of the buffers had errors then we can set the page uptodate,
* but we first have to perform the post read mst fixups, if the
-@@ -160,9 +158,7 @@ static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate)
+@@ -160,9 +158,7 @@ static void ntfs_end_buffer_async_read(s
unlock_page(page);
return;
still_busy:
@@ -119,10 +118,10 @@
}
/**
-diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
-index 458f497..5c16cf1 100644
---- a/include/linux/buffer_head.h
-+++ b/include/linux/buffer_head.h
+Index: linux-stable/include/linux/buffer_head.h
+===================================================================
+--- linux-stable.orig/include/linux/buffer_head.h
++++ linux-stable/include/linux/buffer_head.h
@@ -72,8 +72,42 @@ struct buffer_head {
struct address_space *b_assoc_map; /* mapping this buffer is
associated with */
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ftrace-crap.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0155-ftrace-crap.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0155-ftrace-crap.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ftrace-crap.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From e634e6cb2d7783c3387fae3c98f3f96011802330 Mon Sep 17 00:00:00 2001
+Subject: ftrace-crap.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Fri, 9 Sep 2011 16:55:53 +0200
-Subject: [155/256] ftrace-crap.patch
+Date: Fri, 09 Sep 2011 16:55:53 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
kernel/trace/trace.h | 1 -
2 files changed, 24 insertions(+), 3 deletions(-)
-diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
-index ee744f3..6a00ff4 100644
---- a/kernel/trace/trace.c
-+++ b/kernel/trace/trace.c
-@@ -414,11 +414,13 @@ EXPORT_SYMBOL_GPL(tracing_is_on);
+Index: linux-stable/kernel/trace/trace.c
+===================================================================
+--- linux-stable.orig/kernel/trace/trace.c
++++ linux-stable/kernel/trace/trace.c
+@@ -402,11 +402,13 @@ EXPORT_SYMBOL_GPL(tracing_is_on);
*/
void trace_wake_up(void)
{
@@ -27,7 +26,7 @@
}
static int __init set_buf_size(char *str)
-@@ -775,6 +777,12 @@ update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
+@@ -756,6 +758,12 @@ update_max_tr_single(struct trace_array
}
#endif /* CONFIG_TRACER_MAX_TRACE */
@@ -40,7 +39,7 @@
/**
* register_tracer - register a tracer with the ftrace system.
* @type - the plugin for the tracer
-@@ -3303,6 +3311,7 @@ static int tracing_release_pipe(struct inode *inode, struct file *file)
+@@ -3365,6 +3373,7 @@ static int tracing_release_pipe(struct i
return 0;
}
@@ -48,7 +47,7 @@
static unsigned int
tracing_poll_pipe(struct file *filp, poll_table *poll_table)
{
-@@ -3324,8 +3333,7 @@ tracing_poll_pipe(struct file *filp, poll_table *poll_table)
+@@ -3386,8 +3395,7 @@ tracing_poll_pipe(struct file *filp, pol
}
}
@@ -58,7 +57,7 @@
{
DEFINE_WAIT(wait);
-@@ -3336,6 +3344,20 @@ void default_wait_pipe(struct trace_iterator *iter)
+@@ -3398,6 +3406,20 @@ void default_wait_pipe(struct trace_iter
finish_wait(&trace_wait, &wait);
}
@@ -79,11 +78,11 @@
/*
* This is a make-shift waitqueue.
-diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
-index f95d65d..fe96b7c 100644
---- a/kernel/trace/trace.h
-+++ b/kernel/trace/trace.h
-@@ -354,7 +354,6 @@ void trace_init_global_iter(struct trace_iterator *iter);
+Index: linux-stable/kernel/trace/trace.h
+===================================================================
+--- linux-stable.orig/kernel/trace/trace.h
++++ linux-stable/kernel/trace/trace.h
+@@ -367,7 +367,6 @@ void trace_init_global_iter(struct trace
void tracing_iter_reset(struct trace_iterator *iter, int cpu);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ftrace-migrate-disable-tracing.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0144-ftrace-migrate-disable-tracing.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0144-ftrace-migrate-disable-tracing.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ftrace-migrate-disable-tracing.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From a270094d07da20d6324798c10bdd3e277fa65af4 Mon Sep 17 00:00:00 2001
+Subject: ftrace-migrate-disable-tracing.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 21:56:42 +0200
-Subject: [144/256] ftrace-migrate-disable-tracing.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -11,10 +10,10 @@
kernel/trace/trace_output.c | 5 +++++
4 files changed, 14 insertions(+), 4 deletions(-)
-diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
-index 176a939..14cac32 100644
---- a/include/linux/ftrace_event.h
-+++ b/include/linux/ftrace_event.h
+Index: linux-stable/include/linux/ftrace_event.h
+===================================================================
+--- linux-stable.orig/include/linux/ftrace_event.h
++++ linux-stable/include/linux/ftrace_event.h
@@ -49,7 +49,8 @@ struct trace_entry {
unsigned char flags;
unsigned char preempt_count;
@@ -25,11 +24,11 @@
};
#define FTRACE_MAX_EVENT \
-diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
-index 464a96f..8e79f40 100644
---- a/kernel/trace/trace.c
-+++ b/kernel/trace/trace.c
-@@ -1179,6 +1179,8 @@ tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
+Index: linux-stable/kernel/trace/trace.c
+===================================================================
+--- linux-stable.orig/kernel/trace/trace.c
++++ linux-stable/kernel/trace/trace.c
+@@ -1155,6 +1155,8 @@ tracing_generic_entry_update(struct trac
((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) |
(need_resched() ? TRACE_FLAG_NEED_RESCHED : 0);
@@ -38,7 +37,7 @@
}
EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
-@@ -1937,9 +1939,10 @@ static void print_lat_help_header(struct seq_file *m)
+@@ -1980,9 +1982,10 @@ static void print_lat_help_header(struct
seq_puts(m, "# | / _----=> need-resched \n");
seq_puts(m, "# || / _---=> hardirq/softirq \n");
seq_puts(m, "# ||| / _--=> preempt-depth \n");
@@ -52,11 +51,11 @@
}
static void print_event_info(struct trace_array *tr, struct seq_file *m)
-diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
-index 29111da..4c3a7b3 100644
---- a/kernel/trace/trace_events.c
-+++ b/kernel/trace/trace_events.c
-@@ -116,6 +116,7 @@ static int trace_define_common_fields(void)
+Index: linux-stable/kernel/trace/trace_events.c
+===================================================================
+--- linux-stable.orig/kernel/trace/trace_events.c
++++ linux-stable/kernel/trace/trace_events.c
+@@ -116,6 +116,7 @@ static int trace_define_common_fields(vo
__common_field(unsigned char, flags);
__common_field(unsigned char, preempt_count);
__common_field(int, pid);
@@ -64,11 +63,11 @@
__common_field(int, padding);
return ret;
-diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
-index df611a0..1b79535 100644
---- a/kernel/trace/trace_output.c
-+++ b/kernel/trace/trace_output.c
-@@ -593,6 +593,11 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
+Index: linux-stable/kernel/trace/trace_output.c
+===================================================================
+--- linux-stable.orig/kernel/trace/trace_output.c
++++ linux-stable/kernel/trace/trace_output.c
+@@ -593,6 +593,11 @@ int trace_print_lat_fmt(struct trace_seq
else
ret = trace_seq_putc(s, '.');
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/futex-requeue-pi-fix.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0173-futex-Fix-bug-on-when-a-requeued-RT-task-times-out.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0173-futex-Fix-bug-on-when-a-requeued-RT-task-times-out.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/futex-requeue-pi-fix.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,12 +1,11 @@
-From a385ed1641702529dd5906ce0fc1ad203538430c Mon Sep 17 00:00:00 2001
From: Steven Rostedt <rostedt at goodmis.org>
-Date: Thu, 7 Jun 2012 07:47:03 -0400
-Subject: [173/256] futex: Fix bug on when a requeued RT task times out
+Subject: futex: Fix bug on when a requeued RT task times out
Requeue with timeout causes a bug with PREEMPT_RT_FULL.
The bug comes from a timed out condition.
+
TASK 1 TASK 2
------ ------
futex_wait_requeue_pi()
@@ -16,12 +15,13 @@
double_lock_hb();
raw_spin_lock(pi_lock);
- if (current->pi_blocked_on) {
+ if (current->pi_blocked_on) {
} else {
current->pi_blocked_on = PI_WAKE_INPROGRESS;
run_spin_unlock(pi_lock);
spin_lock(hb->lock); <-- blocked!
+
plist_for_each_entry_safe(this) {
rt_mutex_start_proxy_lock();
task_blocks_on_rt_mutex();
@@ -47,16 +47,18 @@
Cc: stable-rt at vger.kernel.org
Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
+
---
kernel/rtmutex.c | 32 +++++++++++++++++++++++++++++++-
kernel/rtmutex_common.h | 1 +
2 files changed, 32 insertions(+), 1 deletion(-)
-diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
-index 1e98e24..7a96797 100644
---- a/kernel/rtmutex.c
-+++ b/kernel/rtmutex.c
-@@ -69,7 +69,8 @@ static void fixup_rt_mutex_waiters(struct rt_mutex *lock)
+Index: linux-stable/kernel/rtmutex.c
+===================================================================
+--- linux-stable.orig/kernel/rtmutex.c
++++ linux-stable/kernel/rtmutex.c
+@@ -69,7 +69,8 @@ static void fixup_rt_mutex_waiters(struc
static int rt_mutex_real_waiter(struct rt_mutex_waiter *waiter)
{
@@ -66,7 +68,7 @@
}
/*
-@@ -1002,6 +1003,35 @@ int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
+@@ -1002,6 +1003,35 @@ int rt_mutex_start_proxy_lock(struct rt_
return 1;
}
@@ -89,24 +91,24 @@
+ * PI_REQUEUE_INPROGRESS, so that if the task is waking up
+ * it will know that we are in the process of requeuing it.
+ */
-+ raw_spin_lock(&task->pi_lock);
++ raw_spin_lock_irq(&task->pi_lock);
+ if (task->pi_blocked_on) {
-+ raw_spin_unlock(&task->pi_lock);
++ raw_spin_unlock_irq(&task->pi_lock);
+ raw_spin_unlock(&lock->wait_lock);
+ return -EAGAIN;
+ }
+ task->pi_blocked_on = PI_REQUEUE_INPROGRESS;
-+ raw_spin_unlock(&task->pi_lock);
++ raw_spin_unlock_irq(&task->pi_lock);
+#endif
+
ret = task_blocks_on_rt_mutex(lock, waiter, task, detect_deadlock);
if (ret && !rt_mutex_owner(lock)) {
-diff --git a/kernel/rtmutex_common.h b/kernel/rtmutex_common.h
-index b43d832..47290ec 100644
---- a/kernel/rtmutex_common.h
-+++ b/kernel/rtmutex_common.h
-@@ -104,6 +104,7 @@ static inline struct task_struct *rt_mutex_owner(struct rt_mutex *lock)
+Index: linux-stable/kernel/rtmutex_common.h
+===================================================================
+--- linux-stable.orig/kernel/rtmutex_common.h
++++ linux-stable/kernel/rtmutex_common.h
+@@ -104,6 +104,7 @@ static inline struct task_struct *rt_mut
* PI-futex support (proxy locking functions, etc.):
*/
#define PI_WAKEUP_INPROGRESS ((struct rt_mutex_waiter *) 1)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/generic-cmpxchg-use-raw-local-irq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0024-generic-Use-raw-local-irq-variant-for-generic-cmpxch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0024-generic-Use-raw-local-irq-variant-for-generic-cmpxch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/generic-cmpxchg-use-raw-local-irq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From 42beaeae2dcd8371ff2e0c229f83a58bc1fc425a Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:30 -0500
-Subject: [024/256] generic: Use raw local irq variant for generic cmpxchg
+Subject: generic: Use raw local irq variant for generic cmpxchg
No point in tracing those.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/asm-generic/cmpxchg-local.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
-diff --git a/include/asm-generic/cmpxchg-local.h b/include/asm-generic/cmpxchg-local.h
-index 2533fdd..d8d4c89 100644
---- a/include/asm-generic/cmpxchg-local.h
-+++ b/include/asm-generic/cmpxchg-local.h
-@@ -21,7 +21,7 @@ static inline unsigned long __cmpxchg_local_generic(volatile void *ptr,
+Index: linux-stable/include/asm-generic/cmpxchg-local.h
+===================================================================
+--- linux-stable.orig/include/asm-generic/cmpxchg-local.h
++++ linux-stable/include/asm-generic/cmpxchg-local.h
+@@ -21,7 +21,7 @@ static inline unsigned long __cmpxchg_lo
if (size == 8 && sizeof(unsigned long) != 8)
wrong_size_cmpxchg(ptr);
@@ -24,7 +24,7 @@
switch (size) {
case 1: prev = *(u8 *)ptr;
if (prev == old)
-@@ -42,7 +42,7 @@ static inline unsigned long __cmpxchg_local_generic(volatile void *ptr,
+@@ -42,7 +42,7 @@ static inline unsigned long __cmpxchg_lo
default:
wrong_size_cmpxchg(ptr);
}
@@ -33,7 +33,7 @@
return prev;
}
-@@ -55,11 +55,11 @@ static inline u64 __cmpxchg64_local_generic(volatile void *ptr,
+@@ -55,11 +55,11 @@ static inline u64 __cmpxchg64_local_gene
u64 prev;
unsigned long flags;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/genirq-add-default-mask-cmdline-option.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0251-genirq-Add-default-affinity-mask-command-line-option.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0251-genirq-Add-default-affinity-mask-command-line-option.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/genirq-add-default-mask-cmdline-option.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 909da5deefc2d3dcede823c42a91380ea0bec608 Mon Sep 17 00:00:00 2001
+Subject: genirq: Add default affinity mask command line option
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 25 May 2012 16:59:47 +0200
-Subject: [251/256] genirq: Add default affinity mask command line option
If we isolate CPUs, then we don't want random device interrupts on
them. Even w/o the user space irq balancer enabled we can end up with
@@ -15,11 +14,11 @@
kernel/irq/irqdesc.c | 21 +++++++++++++++++++--
2 files changed, 28 insertions(+), 2 deletions(-)
-diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 1e0150e..67d1350 100644
---- a/Documentation/kernel-parameters.txt
-+++ b/Documentation/kernel-parameters.txt
-@@ -1126,6 +1126,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+Index: linux-stable/Documentation/kernel-parameters.txt
+===================================================================
+--- linux-stable.orig/Documentation/kernel-parameters.txt
++++ linux-stable/Documentation/kernel-parameters.txt
+@@ -1157,6 +1157,15 @@ bytes respectively. Such letter suffixes
See comment before ip2_setup() in
drivers/char/ip2/ip2base.c.
@@ -35,10 +34,10 @@
irqfixup [HW]
When an interrupt is not handled search all handlers
for it. Intended to get systems with badly broken
-diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
-index 192a302..473b2b6 100644
---- a/kernel/irq/irqdesc.c
-+++ b/kernel/irq/irqdesc.c
+Index: linux-stable/kernel/irq/irqdesc.c
+===================================================================
+--- linux-stable.orig/kernel/irq/irqdesc.c
++++ linux-stable/kernel/irq/irqdesc.c
@@ -23,10 +23,27 @@
static struct lock_class_key irq_desc_lock_class;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/genirq-disable-irqpoll-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0081-genirq-disable-irqpoll-on-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0081-genirq-disable-irqpoll-on-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/genirq-disable-irqpoll-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From 21ae6fbad1ee6a562b0b8dd536f6915614e79c5b Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:57 -0500
-Subject: [081/256] genirq: disable irqpoll on -rt
+Subject: genirq: disable irqpoll on -rt
Creates long latencies for no value
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/irq/spurious.c | 10 ++++++++++
1 file changed, 10 insertions(+)
-diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c
-index 611cd60..d1c80fa 100644
---- a/kernel/irq/spurious.c
-+++ b/kernel/irq/spurious.c
-@@ -341,6 +341,11 @@ MODULE_PARM_DESC(noirqdebug, "Disable irq lockup detection when true");
+Index: linux-stable/kernel/irq/spurious.c
+===================================================================
+--- linux-stable.orig/kernel/irq/spurious.c
++++ linux-stable/kernel/irq/spurious.c
+@@ -341,6 +341,11 @@ MODULE_PARM_DESC(noirqdebug, "Disable ir
static int __init irqfixup_setup(char *str)
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/genirq-force-threading.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0082-genirq-force-threading.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0082-genirq-force-threading.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/genirq-force-threading.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 314b6e5ffef017ed2493a828cf32f886cb61e850 Mon Sep 17 00:00:00 2001
+Subject: genirq-force-threading.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Sun, 3 Apr 2011 11:57:29 +0200
-Subject: [082/256] genirq-force-threading.patch
+Date: Sun, 03 Apr 2011 11:57:29 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
kernel/irq/manage.c | 2 ++
2 files changed, 8 insertions(+), 2 deletions(-)
-diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index d2cc272..9027bde 100644
---- a/include/linux/interrupt.h
-+++ b/include/linux/interrupt.h
-@@ -394,9 +394,13 @@ static inline int disable_irq_wake(unsigned int irq)
+Index: linux-stable/include/linux/interrupt.h
+===================================================================
+--- linux-stable.orig/include/linux/interrupt.h
++++ linux-stable/include/linux/interrupt.h
+@@ -388,9 +388,13 @@ static inline int disable_irq_wake(unsig
#ifdef CONFIG_IRQ_FORCED_THREADING
@@ -29,11 +28,11 @@
#endif
#ifndef __ARCH_SET_SOFTIRQ_PENDING
-diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
-index 89a3ea8..975b3a1 100644
---- a/kernel/irq/manage.c
-+++ b/kernel/irq/manage.c
-@@ -18,6 +18,7 @@
+Index: linux-stable/kernel/irq/manage.c
+===================================================================
+--- linux-stable.orig/kernel/irq/manage.c
++++ linux-stable/kernel/irq/manage.c
+@@ -21,6 +21,7 @@
#include "internals.h"
#ifdef CONFIG_IRQ_FORCED_THREADING
@@ -41,7 +40,7 @@
__read_mostly bool force_irqthreads;
static int __init setup_forced_irqthreads(char *arg)
-@@ -26,6 +27,7 @@ static int __init setup_forced_irqthreads(char *arg)
+@@ -29,6 +30,7 @@ static int __init setup_forced_irqthread
return 0;
}
early_param("threadirqs", setup_forced_irqthreads);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/genirq-nodebug-shirq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0079-genirq-Disable-DEBUG_SHIRQ-for-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0079-genirq-Disable-DEBUG_SHIRQ-for-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/genirq-nodebug-shirq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From caa14a79da63821e3ba4076f7c83c41c5873eefc Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Fri, 18 Mar 2011 10:22:04 +0100
-Subject: [079/256] genirq: Disable DEBUG_SHIRQ for rt
+Date: Sun, 18 Mar 2011 10:22:04 +0100
+Subject: genirq: Disable DEBUG_SHIRQ for rt
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
lib/Kconfig.debug | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 6777153..1d80795 100644
---- a/lib/Kconfig.debug
-+++ b/lib/Kconfig.debug
-@@ -151,7 +151,7 @@ config DEBUG_KERNEL
+Index: linux-stable/lib/Kconfig.debug
+===================================================================
+--- linux-stable.orig/lib/Kconfig.debug
++++ linux-stable/lib/Kconfig.debug
+@@ -164,7 +164,7 @@ config DEBUG_KERNEL
config DEBUG_SHIRQ
bool "Debug shared IRQ handlers"
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/harirq-h-define-softirq_count-as-oul-to-kill-build-warning.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0163-hardirq.h-Define-softirq_count-as-OUL-to-kill-build-.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0163-hardirq.h-Define-softirq_count-as-OUL-to-kill-build-.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/harirq-h-define-softirq_count-as-oul-to-kill-build-warning.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,11 +1,6 @@
-From 1d5690ccc588e836538cfb08ae21f10ce857f488 Mon Sep 17 00:00:00 2001
+Subject: hardirq.h: Define softirq_count() as OUL to kill build warning
From: Yong Zhang <yong.zhang0 at gmail.com>
Date: Thu, 13 Oct 2011 17:19:09 +0800
-Subject: [163/256] hardirq.h: Define softirq_count() as OUL to kill build
- warning
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
kernel/lockdep.c: In function âprint_bad_irq_dependencyâ:
kernel/lockdep.c:1476:3: warning: format â%luâ expects type âlong unsigned intâ, but argument 7 has type âunsigned intâ
@@ -27,10 +22,10 @@
include/linux/hardirq.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h
-index cbd7c99..318d91e 100644
---- a/include/linux/hardirq.h
-+++ b/include/linux/hardirq.h
+Index: linux-stable/include/linux/hardirq.h
+===================================================================
+--- linux-stable.orig/include/linux/hardirq.h
++++ linux-stable/include/linux/hardirq.h
@@ -84,7 +84,7 @@
# define softirq_count() (preempt_count() & SOFTIRQ_MASK)
# define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/hotplug-call-cpu_unplug_begin-a-little-early.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0143-hotplug-Call-cpu_unplug_begin-before-DOWN_PREPARE.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0143-hotplug-Call-cpu_unplug_begin-before-DOWN_PREPARE.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/hotplug-call-cpu_unplug_begin-a-little-early.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 9831e60c0e5b45404bc3410179206b9fb3e8c3dc Mon Sep 17 00:00:00 2001
+Subject: hotplug: Call cpu_unplug_begin() before DOWN_PREPARE
From: Yong Zhang <yong.zhang0 at gmail.com>
Date: Sun, 16 Oct 2011 18:56:44 +0800
-Subject: [143/256] hotplug: Call cpu_unplug_begin() before DOWN_PREPARE
cpu_unplug_begin() should be called before CPU_DOWN_PREPARE, because
at CPU_DOWN_PREPARE cpu_active is cleared and sched_domain is
@@ -26,11 +25,11 @@
kernel/cpu.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
-diff --git a/kernel/cpu.c b/kernel/cpu.c
-index c8aee90..37b2212 100644
---- a/kernel/cpu.c
-+++ b/kernel/cpu.c
-@@ -337,22 +337,20 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
+Index: linux-stable/kernel/cpu.c
+===================================================================
+--- linux-stable.orig/kernel/cpu.c
++++ linux-stable/kernel/cpu.c
+@@ -383,22 +383,20 @@ static int __ref _cpu_down(unsigned int
return -EBUSY;
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/hotplug-light-get-online-cpus.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0138-hotplug-Lightweight-get-online-cpus.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0138-hotplug-Lightweight-get-online-cpus.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/hotplug-light-get-online-cpus.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 9698a154a5ca400da809937bca83bdc7589df9be Mon Sep 17 00:00:00 2001
+Subject: hotplug: Lightweight get online cpus
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 15 Jun 2011 12:36:06 +0200
-Subject: [138/256] hotplug: Lightweight get online cpus
get_online_cpus() is a heavy weight function which involves a global
mutex. migrate_disable() wants a simpler construct which prevents only
@@ -13,15 +12,15 @@
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/cpu.h | 4 ++
- kernel/cpu.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++++--
+ include/linux/cpu.h | 4 +
+ kernel/cpu.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 128 insertions(+), 3 deletions(-)
-diff --git a/include/linux/cpu.h b/include/linux/cpu.h
-index ee28844..00d2f6f8 100644
---- a/include/linux/cpu.h
-+++ b/include/linux/cpu.h
-@@ -176,6 +176,8 @@ extern struct bus_type cpu_subsys;
+Index: linux-stable/include/linux/cpu.h
+===================================================================
+--- linux-stable.orig/include/linux/cpu.h
++++ linux-stable/include/linux/cpu.h
+@@ -175,6 +175,8 @@ extern struct bus_type cpu_subsys;
extern void get_online_cpus(void);
extern void put_online_cpus(void);
@@ -30,7 +29,7 @@
#define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri)
#define register_hotcpu_notifier(nb) register_cpu_notifier(nb)
#define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb)
-@@ -198,6 +200,8 @@ static inline void cpu_hotplug_driver_unlock(void)
+@@ -198,6 +200,8 @@ static inline void cpu_hotplug_driver_un
#define get_online_cpus() do { } while (0)
#define put_online_cpus() do { } while (0)
@@ -39,11 +38,11 @@
#define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0)
/* These aren't inline functions due to a GCC bug. */
#define register_hotcpu_notifier(nb) ({ (void)(nb); 0; })
-diff --git a/kernel/cpu.c b/kernel/cpu.c
-index 2060c6e..8aaa210 100644
---- a/kernel/cpu.c
-+++ b/kernel/cpu.c
-@@ -58,6 +58,102 @@ static struct {
+Index: linux-stable/kernel/cpu.c
+===================================================================
+--- linux-stable.orig/kernel/cpu.c
++++ linux-stable/kernel/cpu.c
+@@ -63,6 +63,102 @@ static struct {
.refcount = 0,
};
@@ -146,7 +145,7 @@
void get_online_cpus(void)
{
might_sleep();
-@@ -210,13 +306,14 @@ static int __ref take_cpu_down(void *_param)
+@@ -256,13 +352,14 @@ static int __ref take_cpu_down(void *_pa
/* Requires cpu_add_remove_lock to be held */
static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
{
@@ -162,7 +161,7 @@
if (num_online_cpus() == 1)
return -EBUSY;
-@@ -224,7 +321,20 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
+@@ -270,7 +367,20 @@ static int __ref _cpu_down(unsigned int
if (!cpu_online(cpu))
return -EINVAL;
@@ -184,7 +183,7 @@
err = __cpu_notify(CPU_DOWN_PREPARE | mod, hcpu, -1, &nr_calls);
if (err) {
-@@ -232,7 +342,16 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
+@@ -278,7 +388,16 @@ static int __ref _cpu_down(unsigned int
__cpu_notify(CPU_DOWN_FAILED | mod, hcpu, nr_calls, NULL);
printk("%s: attempt to take down CPU %u failed\n",
__func__, cpu);
@@ -202,7 +201,7 @@
}
err = __stop_machine(take_cpu_down, &tcd_param, cpumask_of(cpu));
-@@ -263,6 +382,8 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
+@@ -309,6 +428,8 @@ static int __ref _cpu_down(unsigned int
check_for_tasks(cpu);
out_release:
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0139-hotplug-sync_unplug-No.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0139-hotplug-sync_unplug-No.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 4210eba03aafc8271a8f97fccfab1ad0893f4086 Mon Sep 17 00:00:00 2001
+Subject: hotplug: sync_unplug: No "\n" in task name
From: Yong Zhang <yong.zhang0 at gmail.com>
Date: Sun, 16 Oct 2011 18:56:43 +0800
-Subject: [139/256] hotplug: sync_unplug: No " " in task name
Otherwise the output will look a little odd.
@@ -12,11 +11,11 @@
kernel/cpu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/kernel/cpu.c b/kernel/cpu.c
-index 8aaa210..da4ed4f 100644
---- a/kernel/cpu.c
-+++ b/kernel/cpu.c
-@@ -138,7 +138,7 @@ static int cpu_unplug_begin(unsigned int cpu)
+Index: linux-stable/kernel/cpu.c
+===================================================================
+--- linux-stable.orig/kernel/cpu.c
++++ linux-stable/kernel/cpu.c
+@@ -143,7 +143,7 @@ static int cpu_unplug_begin(unsigned int
struct task_struct *tsk;
init_completion(&hp->synced);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/hotplug-use-migrate-disable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0142-hotplug-use-migrate-disable.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0142-hotplug-use-migrate-disable.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/hotplug-use-migrate-disable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 5963228cdaa3c49a09035f1251f15113e0a3dd2c Mon Sep 17 00:00:00 2001
+Subject: hotplug-use-migrate-disable.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 19:35:29 +0200
-Subject: [142/256] hotplug-use-migrate-disable.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/cpu.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
-diff --git a/kernel/cpu.c b/kernel/cpu.c
-index 1e80dff..c8aee90 100644
---- a/kernel/cpu.c
-+++ b/kernel/cpu.c
-@@ -329,14 +329,13 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
+Index: linux-stable/kernel/cpu.c
+===================================================================
+--- linux-stable.orig/kernel/cpu.c
++++ linux-stable/kernel/cpu.c
+@@ -375,14 +375,13 @@ static int __ref _cpu_down(unsigned int
cpumask_andnot(cpumask, cpu_online_mask, cpumask_of(cpu));
set_cpus_allowed_ptr(current, cpumask);
free_cpumask_var(cpumask);
@@ -29,7 +28,7 @@
err = __cpu_notify(CPU_DOWN_PREPARE | mod, hcpu, -1, &nr_calls);
if (err) {
-@@ -386,6 +385,7 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
+@@ -432,6 +431,7 @@ static int __ref _cpu_down(unsigned int
out_release:
cpu_unplug_done(cpu);
out_cancel:
Added: dists/trunk/linux/debian/patches/features/all/rt/hrtimer-add-missing-debug_activate-aid.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/hrtimer-add-missing-debug_activate-aid.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,49 @@
+From: Yong Zhang <yong.zhang0 at gmail.com>
+Subject: hrtimer: Add missing debug_activate() aid
+Date: Thu, 13 Oct 2011 15:52:30 +0800
+
+It will fix below warning, which is also reported by Fernando:
+
+[ 7.616090] ------------[ cut here ]------------
+[ 7.616093] WARNING: at kernel/hrtimer.c:391 hrtimer_fixup_activate+0x27/0x50()
+[ 7.616094] Hardware name: OptiPlex 755
+[ 7.616096] Modules linked in:
+[ 7.616099] Pid: 0, comm: kworker/0:0 Tainted: G W 3.0.6-rt17-00284-g9d73a61 #15
+[ 7.616100] Call Trace:
+[ 7.616103] [<c014d9a2>] warn_slowpath_common+0x72/0xa0
+[ 7.616106] [<c0175417>] ? hrtimer_fixup_activate+0x27/0x50
+[ 7.616109] [<c0175417>] ? hrtimer_fixup_activate+0x27/0x50
+[ 7.616112] [<c014d9f2>] warn_slowpath_null+0x22/0x30
+[ 7.616115] [<c0175417>] hrtimer_fixup_activate+0x27/0x50
+[ 7.616118] [<c03b3ab0>] debug_object_activate+0x100/0x130
+[ 7.616121] [<c0176b96>] ? hrtimer_start_range_ns+0x26/0x30
+[ 7.616123] [<c0175a59>] enqueue_hrtimer+0x19/0x100
+[ 7.616126] [<c0176b96>] ? hrtimer_start_range_ns+0x26/0x30
+[ 7.616129] [<c0176744>] __hrtimer_start_range_ns+0x144/0x540
+[ 7.616132] [<c072705a>] ? _raw_spin_unlock_irqrestore+0x3a/0x80
+[ 7.616136] [<c0176b96>] hrtimer_start_range_ns+0x26/0x30
+[ 7.616139] [<c01852b5>] tick_nohz_restart_sched_tick+0x185/0x1b0
+[ 7.616142] [<c0101878>] cpu_idle+0x98/0xc0
+[ 7.616146] [<c071fcd8>] start_secondary+0x1d3/0x1da
+[ 7.616148] ---[ end trace 0000000000000003 ]---
+
+Reported-by: Fernando Lopez-Lezcano <nando at ccrma.stanford.edu>
+Signed-off-by: Yong Zhang <yong.zhang0 at gmail.com>
+Link: http://lkml.kernel.org/r/20111013075230.GA2740@zhy
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/hrtimer.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: linux-stable/kernel/hrtimer.c
+===================================================================
+--- linux-stable.orig/kernel/hrtimer.c
++++ linux-stable/kernel/hrtimer.c
+@@ -1063,6 +1063,7 @@ int __hrtimer_start_range_ns(struct hrti
+ * remove it again and report a failure. This avoids
+ * stale base->first entries.
+ */
++ debug_deactivate(timer);
+ __remove_hrtimer(timer, new_base,
+ timer->state & HRTIMER_STATE_CALLBACK, 0);
+ }
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/hrtimer-fix-reprogram-madness.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0119-hrtimer-fix-reprogram-madness.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0119-hrtimer-fix-reprogram-madness.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/hrtimer-fix-reprogram-madness.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 251da2a935bd80dc09d674a1c0466f03ada7dfac Mon Sep 17 00:00:00 2001
+Subject: hrtimer-fix-reprogram-madness.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 14 Sep 2011 14:48:43 +0200
-Subject: [119/256] hrtimer-fix-reprogram-madness.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/hrtimer.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
-diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
-index d363df8..3991464 100644
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
-@@ -1317,7 +1317,11 @@ static void hrtimer_rt_reprogram(int restart, struct hrtimer *timer,
+Index: linux-stable/kernel/hrtimer.c
+===================================================================
+--- linux-stable.orig/kernel/hrtimer.c
++++ linux-stable/kernel/hrtimer.c
+@@ -1338,7 +1338,11 @@ static void hrtimer_rt_reprogram(int res
if (!enqueue_hrtimer(timer, base))
return;
@@ -25,7 +24,7 @@
goto requeue;
} else if (hrtimer_active(timer)) {
-@@ -1326,6 +1330,7 @@ static void hrtimer_rt_reprogram(int restart, struct hrtimer *timer,
+@@ -1347,6 +1351,7 @@ static void hrtimer_rt_reprogram(int res
* the event device.
*/
if (&timer->node == base->active.next &&
@@ -33,7 +32,7 @@
hrtimer_reprogram(timer, base))
goto requeue;
}
-@@ -1338,6 +1343,7 @@ requeue:
+@@ -1359,6 +1364,7 @@ requeue:
*/
__remove_hrtimer(timer, base, timer->state, 0);
list_add_tail(&timer->cb_entry, &base->expired);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0116-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0116-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From b852214ab58a1fe26b51298ed91c0a7ed3dd465d Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 3 Jul 2009 08:44:31 -0500
-Subject: [116/256] hrtimer: fixup hrtimer callback changes for preempt-rt
+Subject: hrtimer: fixup hrtimer callback changes for preempt-rt
In preempt-rt we can not call the callbacks which take sleeping locks
from the timer interrupt context.
@@ -11,29 +10,30 @@
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Signed-off-by: Ingo Molnar <mingo at elte.hu>
+
---
- include/linux/hrtimer.h | 3 +
- kernel/hrtimer.c | 190 +++++++++++++++++++++++++++++++++++++++++-----
- kernel/sched/core.c | 1 +
- kernel/sched/rt.c | 1 +
- kernel/time/tick-sched.c | 1 +
- kernel/watchdog.c | 1 +
- 6 files changed, 179 insertions(+), 18 deletions(-)
+ include/linux/hrtimer.h | 3
+ kernel/hrtimer.c | 196 ++++++++++++++++++++++++++++++++++++++++++-----
+ kernel/sched/core.c | 1
+ kernel/sched/rt.c | 1
+ kernel/time/tick-sched.c | 1
+ kernel/watchdog.c | 1
+ 6 files changed, 183 insertions(+), 20 deletions(-)
-diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
-index e8b395d..0e37086 100644
---- a/include/linux/hrtimer.h
-+++ b/include/linux/hrtimer.h
+Index: linux-stable/include/linux/hrtimer.h
+===================================================================
+--- linux-stable.orig/include/linux/hrtimer.h
++++ linux-stable/include/linux/hrtimer.h
@@ -111,6 +111,8 @@ struct hrtimer {
enum hrtimer_restart (*function)(struct hrtimer *);
struct hrtimer_clock_base *base;
unsigned long state;
+ struct list_head cb_entry;
+ int irqsafe;
- #ifdef CONFIG_TIMER_STATS
- int start_pid;
- void *start_site;
-@@ -147,6 +149,7 @@ struct hrtimer_clock_base {
+ #ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
+ ktime_t praecox;
+ #endif
+@@ -150,6 +152,7 @@ struct hrtimer_clock_base {
int index;
clockid_t clockid;
struct timerqueue_head active;
@@ -41,11 +41,11 @@
ktime_t resolution;
ktime_t (*get_time)(void);
ktime_t softirq_time;
-diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
-index 905e2cd2..1dd627b 100644
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
-@@ -589,8 +589,7 @@ static int hrtimer_reprogram(struct hrtimer *timer,
+Index: linux-stable/kernel/hrtimer.c
+===================================================================
+--- linux-stable.orig/kernel/hrtimer.c
++++ linux-stable/kernel/hrtimer.c
+@@ -589,8 +589,7 @@ static int hrtimer_reprogram(struct hrti
* When the callback is running, we do not reprogram the clock event
* device. The timer callback is either running on a different CPU or
* the callback is executed in the hrtimer_interrupt context. The
@@ -55,7 +55,7 @@
*/
if (hrtimer_callback_running(timer))
return 0;
-@@ -625,6 +624,9 @@ static int hrtimer_reprogram(struct hrtimer *timer,
+@@ -625,6 +624,9 @@ static int hrtimer_reprogram(struct hrti
return res;
}
@@ -65,13 +65,13 @@
/*
* Initialize the high resolution related parts of cpu_base
*/
-@@ -644,7 +646,29 @@ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
+@@ -644,7 +646,29 @@ static inline int hrtimer_enqueue_reprog
struct hrtimer_clock_base *base,
int wakeup)
{
+#ifdef CONFIG_PREEMPT_RT_BASE
+again:
-+ if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) {
+ if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) {
+ /*
+ * Move softirq based timers away from the rbtree in
+ * case it expired already. Otherwise we would have a
@@ -90,12 +90,12 @@
+ return 1;
+ }
+#else
- if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) {
++ if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) {
+#endif
if (wakeup) {
raw_spin_unlock(&base->cpu_base->lock);
raise_softirq_irqoff(HRTIMER_SOFTIRQ);
-@@ -733,6 +757,11 @@ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
+@@ -743,6 +767,11 @@ static inline int hrtimer_enqueue_reprog
}
static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) { }
static inline void retrigger_next_event(void *arg) { }
@@ -107,7 +107,7 @@
#endif /* CONFIG_HIGH_RES_TIMERS */
-@@ -864,9 +893,9 @@ void hrtimer_wait_for_timer(const struct hrtimer *timer)
+@@ -874,9 +903,9 @@ void hrtimer_wait_for_timer(const struct
{
struct hrtimer_clock_base *base = timer->base;
@@ -119,7 +119,7 @@
}
#else
-@@ -916,6 +945,11 @@ static void __remove_hrtimer(struct hrtimer *timer,
+@@ -926,6 +955,11 @@ static void __remove_hrtimer(struct hrti
if (!(timer->state & HRTIMER_STATE_ENQUEUED))
goto out;
@@ -131,7 +131,7 @@
next_timer = timerqueue_getnext(&base->active);
timerqueue_del(&base->active, &timer->node);
if (&timer->node == next_timer) {
-@@ -1178,6 +1212,7 @@ static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
+@@ -1199,6 +1233,7 @@ static void __hrtimer_init(struct hrtime
base = hrtimer_clockid_to_base(clock_id);
timer->base = &cpu_base->clock_base[base];
@@ -139,7 +139,7 @@
timerqueue_init(&timer->node);
#ifdef CONFIG_TIMER_STATS
-@@ -1261,10 +1296,118 @@ static void __run_hrtimer(struct hrtimer *timer, ktime_t *now)
+@@ -1282,10 +1317,118 @@ static void __run_hrtimer(struct hrtimer
timer->state &= ~HRTIMER_STATE_CALLBACK;
}
@@ -260,7 +260,7 @@
/*
* High resolution timer interrupt
* Called with interrupts disabled
-@@ -1273,7 +1416,7 @@ void hrtimer_interrupt(struct clock_event_device *dev)
+@@ -1294,7 +1437,7 @@ void hrtimer_interrupt(struct clock_even
{
struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
ktime_t expires_next, now, entry_time, delta;
@@ -269,7 +269,7 @@
BUG_ON(!cpu_base->hres_active);
cpu_base->nr_events++;
-@@ -1340,7 +1483,10 @@ retry:
+@@ -1361,7 +1504,10 @@ retry:
break;
}
@@ -281,7 +281,7 @@
}
}
-@@ -1355,6 +1501,10 @@ retry:
+@@ -1376,6 +1522,10 @@ retry:
if (expires_next.tv64 == KTIME_MAX ||
!tick_program_event(expires_next, 0)) {
cpu_base->hang_detected = 0;
@@ -292,30 +292,41 @@
return;
}
-@@ -1430,17 +1580,17 @@ void hrtimer_peek_ahead_timers(void)
+@@ -1456,24 +1606,26 @@ void hrtimer_peek_ahead_timers(void)
local_irq_restore(flags);
}
--static void run_hrtimer_softirq(struct softirq_action *h)
--{
-- hrtimer_peek_ahead_timers();
--}
--
- #else /* CONFIG_HIGH_RES_TIMERS */
-
- static inline void __hrtimer_peek_ahead_timers(void) { }
++#else /* CONFIG_HIGH_RES_TIMERS */
++
++static inline void __hrtimer_peek_ahead_timers(void) { }
++
++#endif /* !CONFIG_HIGH_RES_TIMERS */
++
+ static void run_hrtimer_softirq(struct softirq_action *h)
+ {
++#ifdef CONFIG_HIGH_RES_TIMERS
+ struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
- #endif /* !CONFIG_HIGH_RES_TIMERS */
+ if (cpu_base->clock_was_set) {
+ cpu_base->clock_was_set = 0;
+ clock_was_set();
+ }
++#endif
-+static void run_hrtimer_softirq(struct softirq_action *h)
-+{
+- hrtimer_peek_ahead_timers();
+ hrtimer_rt_run_pending();
-+}
-+
+ }
+
+-#else /* CONFIG_HIGH_RES_TIMERS */
+-
+-static inline void __hrtimer_peek_ahead_timers(void) { }
+-
+-#endif /* !CONFIG_HIGH_RES_TIMERS */
+-
/*
* Called from timer softirq every jiffy, expire hrtimers:
*
-@@ -1473,7 +1623,7 @@ void hrtimer_run_queues(void)
+@@ -1506,7 +1658,7 @@ void hrtimer_run_queues(void)
struct timerqueue_node *node;
struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
struct hrtimer_clock_base *base;
@@ -324,7 +335,7 @@
if (hrtimer_hres_active())
return;
-@@ -1498,12 +1648,16 @@ void hrtimer_run_queues(void)
+@@ -1531,12 +1683,16 @@ void hrtimer_run_queues(void)
hrtimer_get_expires_tv64(timer))
break;
@@ -343,7 +354,7 @@
}
/*
-@@ -1525,6 +1679,7 @@ static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer)
+@@ -1558,6 +1714,7 @@ static enum hrtimer_restart hrtimer_wake
void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task)
{
sl->timer.function = hrtimer_wakeup;
@@ -351,7 +362,7 @@
sl->task = task;
}
EXPORT_SYMBOL_GPL(hrtimer_init_sleeper);
-@@ -1663,6 +1818,7 @@ static void __cpuinit init_hrtimers_cpu(int cpu)
+@@ -1696,6 +1853,7 @@ static void __cpuinit init_hrtimers_cpu(
for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
cpu_base->clock_base[i].cpu_base = cpu_base;
timerqueue_init_head(&cpu_base->clock_base[i].active);
@@ -359,7 +370,7 @@
}
hrtimer_init_hres(cpu_base);
-@@ -1781,9 +1937,7 @@ void __init hrtimers_init(void)
+@@ -1814,9 +1972,7 @@ void __init hrtimers_init(void)
hrtimer_cpu_notify(&hrtimers_nb, (unsigned long)CPU_UP_PREPARE,
(void *)(long)smp_processor_id());
register_cpu_notifier(&hrtimers_nb);
@@ -369,11 +380,11 @@
}
/**
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 83a36dd..bf42b7d 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -480,6 +480,7 @@ static void init_rq_hrtick(struct rq *rq)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -480,6 +480,7 @@ static void init_rq_hrtick(struct rq *rq
hrtimer_init(&rq->hrtick_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
rq->hrtick_timer.function = hrtick;
@@ -381,11 +392,11 @@
}
#else /* CONFIG_SCHED_HRTICK */
static inline void hrtick_clear(struct rq *rq)
-diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
-index 44af55e..8bb9f00 100644
---- a/kernel/sched/rt.c
-+++ b/kernel/sched/rt.c
-@@ -41,6 +41,7 @@ void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime)
+Index: linux-stable/kernel/sched/rt.c
+===================================================================
+--- linux-stable.orig/kernel/sched/rt.c
++++ linux-stable/kernel/sched/rt.c
+@@ -41,6 +41,7 @@ void init_rt_bandwidth(struct rt_bandwid
hrtimer_init(&rt_b->rt_period_timer,
CLOCK_MONOTONIC, HRTIMER_MODE_REL);
@@ -393,11 +404,11 @@
rt_b->rt_period_timer.function = sched_rt_period_timer;
}
-diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
-index a607a7c..5d409b0 100644
---- a/kernel/time/tick-sched.c
-+++ b/kernel/time/tick-sched.c
-@@ -840,6 +840,7 @@ void tick_setup_sched_timer(void)
+Index: linux-stable/kernel/time/tick-sched.c
+===================================================================
+--- linux-stable.orig/kernel/time/tick-sched.c
++++ linux-stable/kernel/time/tick-sched.c
+@@ -873,6 +873,7 @@ void tick_setup_sched_timer(void)
* Emulate tick processing via per-CPU hrtimers:
*/
hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
@@ -405,11 +416,11 @@
ts->sched_timer.function = tick_sched_timer;
/* Get the next period (per cpu) */
-diff --git a/kernel/watchdog.c b/kernel/watchdog.c
-index de08263..87192eb 100644
---- a/kernel/watchdog.c
-+++ b/kernel/watchdog.c
-@@ -441,6 +441,7 @@ static void watchdog_prepare_cpu(int cpu)
+Index: linux-stable/kernel/watchdog.c
+===================================================================
+--- linux-stable.orig/kernel/watchdog.c
++++ linux-stable/kernel/watchdog.c
+@@ -470,6 +470,7 @@ static void watchdog_prepare_cpu(int cpu
WARN_ON(per_cpu(softlockup_watchdog, cpu));
hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
hrtimer->function = watchdog_timer_fn;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/hrtimers-prepare-full-preemption.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0115-hrtimers-prepare-full-preemption.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0115-hrtimers-prepare-full-preemption.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/hrtimers-prepare-full-preemption.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,13 +1,13 @@
-From f845e00d0d0639b3c0b3817300c7b50c3185d5d0 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:34 -0500
-Subject: [115/256] hrtimers: prepare full preemption
+Subject: hrtimers: prepare full preemption
Make cancellation of a running callback in softirq context safe
against preemption.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/hrtimer.h | 10 ++++++++++
kernel/hrtimer.c | 33 ++++++++++++++++++++++++++++++++-
@@ -15,11 +15,11 @@
kernel/posix-timers.c | 33 +++++++++++++++++++++++++++++++++
4 files changed, 76 insertions(+), 1 deletion(-)
-diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
-index fd0dc30..e8b395d 100644
---- a/include/linux/hrtimer.h
-+++ b/include/linux/hrtimer.h
-@@ -187,6 +187,9 @@ struct hrtimer_cpu_base {
+Index: linux-stable/include/linux/hrtimer.h
+===================================================================
+--- linux-stable.orig/include/linux/hrtimer.h
++++ linux-stable/include/linux/hrtimer.h
+@@ -192,6 +192,9 @@ struct hrtimer_cpu_base {
unsigned long nr_hangs;
ktime_t max_hang_time;
#endif
@@ -29,7 +29,7 @@
struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES];
};
-@@ -374,6 +377,13 @@ static inline int hrtimer_restart(struct hrtimer *timer)
+@@ -385,6 +388,13 @@ static inline int hrtimer_restart(struct
return hrtimer_start_expires(timer, HRTIMER_MODE_ABS);
}
@@ -43,11 +43,11 @@
/* Query timers: */
extern ktime_t hrtimer_get_remaining(const struct hrtimer *timer);
extern int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp);
-diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
-index 1a3695e..905e2cd2 100644
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
-@@ -847,6 +847,32 @@ u64 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval)
+Index: linux-stable/kernel/hrtimer.c
+===================================================================
+--- linux-stable.orig/kernel/hrtimer.c
++++ linux-stable/kernel/hrtimer.c
+@@ -857,6 +857,32 @@ u64 hrtimer_forward(struct hrtimer *time
}
EXPORT_SYMBOL_GPL(hrtimer_forward);
@@ -80,7 +80,7 @@
/*
* enqueue_hrtimer - internal function to (re)start a timer
*
-@@ -1073,7 +1099,7 @@ int hrtimer_cancel(struct hrtimer *timer)
+@@ -1094,7 +1120,7 @@ int hrtimer_cancel(struct hrtimer *timer
if (ret >= 0)
return ret;
@@ -89,7 +89,7 @@
}
}
EXPORT_SYMBOL_GPL(hrtimer_cancel);
-@@ -1476,6 +1502,8 @@ void hrtimer_run_queues(void)
+@@ -1509,6 +1535,8 @@ void hrtimer_run_queues(void)
}
raw_spin_unlock(&cpu_base->lock);
}
@@ -98,7 +98,7 @@
}
/*
-@@ -1638,6 +1666,9 @@ static void __cpuinit init_hrtimers_cpu(int cpu)
+@@ -1671,6 +1699,9 @@ static void __cpuinit init_hrtimers_cpu(
}
hrtimer_init_hres(cpu_base);
@@ -108,10 +108,10 @@
}
#ifdef CONFIG_HOTPLUG_CPU
-diff --git a/kernel/itimer.c b/kernel/itimer.c
-index 8d262b4..d051390 100644
---- a/kernel/itimer.c
-+++ b/kernel/itimer.c
+Index: linux-stable/kernel/itimer.c
+===================================================================
+--- linux-stable.orig/kernel/itimer.c
++++ linux-stable/kernel/itimer.c
@@ -213,6 +213,7 @@ again:
/* We are sharing ->siglock with it_real_fn() */
if (hrtimer_try_to_cancel(timer) < 0) {
@@ -120,11 +120,11 @@
goto again;
}
expires = timeval_to_ktime(value->it_value);
-diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c
-index 7b73c34..6a74800 100644
---- a/kernel/posix-timers.c
-+++ b/kernel/posix-timers.c
-@@ -766,6 +766,20 @@ SYSCALL_DEFINE1(timer_getoverrun, timer_t, timer_id)
+Index: linux-stable/kernel/posix-timers.c
+===================================================================
+--- linux-stable.orig/kernel/posix-timers.c
++++ linux-stable/kernel/posix-timers.c
+@@ -766,6 +766,20 @@ SYSCALL_DEFINE1(timer_getoverrun, timer_
return overrun;
}
@@ -182,7 +182,7 @@
spin_lock(¤t->sighand->siglock);
list_del(&timer->list);
-@@ -920,8 +943,18 @@ static void itimer_delete(struct k_itimer *timer)
+@@ -920,8 +943,18 @@ static void itimer_delete(struct k_itime
retry_delete:
spin_lock_irqsave(&timer->it_lock, flags);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/hwlatdetect.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0055-hwlatdetect.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0055-hwlatdetect.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/hwlatdetect.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,28 +1,24 @@
-From 994f3a6efaab1873be49220e12dd8a4992fab8df Mon Sep 17 00:00:00 2001
+Subject: hwlatdetect.patch
From: Carsten Emde <C.Emde at osadl.org>
Date: Tue, 19 Jul 2011 13:53:12 +0100
-Subject: [055/256] hwlatdetect.patch
Jon Masters developed this wonderful SMI detector. For details please
consult Documentation/hwlat_detector.txt. It could be ported to Linux
3.0 RT without any major change.
Signed-off-by: Carsten Emde <C.Emde at osadl.org>
+
---
Documentation/hwlat_detector.txt | 64 ++
- MAINTAINERS | 9 +
- drivers/misc/Kconfig | 29 +
- drivers/misc/Makefile | 1 +
- drivers/misc/hwlat_detector.c | 1212 ++++++++++++++++++++++++++++++++++++++
- 5 files changed, 1315 insertions(+)
- create mode 100644 Documentation/hwlat_detector.txt
- create mode 100644 drivers/misc/hwlat_detector.c
+ drivers/misc/Kconfig | 29
+ drivers/misc/Makefile | 1
+ drivers/misc/hwlat_detector.c | 1212 +++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 1306 insertions(+)
-diff --git a/Documentation/hwlat_detector.txt b/Documentation/hwlat_detector.txt
-new file mode 100644
-index 0000000..cb61516
+Index: linux-stable/Documentation/hwlat_detector.txt
+===================================================================
--- /dev/null
-+++ b/Documentation/hwlat_detector.txt
++++ linux-stable/Documentation/hwlat_detector.txt
@@ -0,0 +1,64 @@
+Introduction:
+-------------
@@ -88,31 +84,11 @@
+observe any latencies that exceed the threshold (initially 100 usecs),
+then we write to a global sample ring buffer of 8K samples, which is
+consumed by reading from the "sample" (pipe) debugfs file interface.
-diff --git a/MAINTAINERS b/MAINTAINERS
-index b362709..249426c 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -3081,6 +3081,15 @@ L: linuxppc-dev at lists.ozlabs.org
- S: Odd Fixes
- F: drivers/tty/hvc/
-
-+HARDWARE LATENCY DETECTOR
-+P: Jon Masters
-+M: jcm at jonmasters.org
-+W: http://www.kernel.org/pub/linux/kernel/people/jcm/hwlat_detector/
-+S: Supported
-+L: linux-kernel at vger.kernel.org
-+F: Documentation/hwlat_detector.txt
-+F: drivers/misc/hwlat_detector.c
-+
- HARDWARE MONITORING
- M: Jean Delvare <khali at linux-fr.org>
- M: Guenter Roeck <guenter.roeck at ericsson.com>
-diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index 504daa3..eead6ce 100644
---- a/drivers/misc/Kconfig
-+++ b/drivers/misc/Kconfig
-@@ -130,6 +130,35 @@ config IBM_ASM
+Index: linux-stable/drivers/misc/Kconfig
+===================================================================
+--- linux-stable.orig/drivers/misc/Kconfig
++++ linux-stable/drivers/misc/Kconfig
+@@ -131,6 +131,35 @@ config IBM_ASM
for information on the specific driver level and support statement
for your IBM server.
@@ -148,20 +124,19 @@
config PHANTOM
tristate "Sensable PHANToM (PCI)"
depends on PCI
-diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
-index 3e1d8010..c7c058a 100644
---- a/drivers/misc/Makefile
-+++ b/drivers/misc/Makefile
-@@ -49,3 +49,4 @@ obj-y += carma/
+Index: linux-stable/drivers/misc/Makefile
+===================================================================
+--- linux-stable.orig/drivers/misc/Makefile
++++ linux-stable/drivers/misc/Makefile
+@@ -50,3 +50,4 @@ obj-y += carma/
obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o
obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/
- obj-$(CONFIG_MAX8997_MUIC) += max8997-muic.o
+ obj-$(CONFIG_INTEL_MEI) += mei/
+obj-$(CONFIG_HWLAT_DETECTOR) += hwlat_detector.o
-diff --git a/drivers/misc/hwlat_detector.c b/drivers/misc/hwlat_detector.c
-new file mode 100644
-index 0000000..b7b7c90
+Index: linux-stable/drivers/misc/hwlat_detector.c
+===================================================================
--- /dev/null
-+++ b/drivers/misc/hwlat_detector.c
++++ linux-stable/drivers/misc/hwlat_detector.c
@@ -0,0 +1,1212 @@
+/*
+ * hwlat_detector.c - A simple Hardware Latency detector.
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ide-use-nort-local-irq-variants.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0065-ide-Do-not-disable-interrupts-for-PREEMPT-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0065-ide-Do-not-disable-interrupts-for-PREEMPT-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ide-use-nort-local-irq-variants.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,12 +1,12 @@
-From 7bd701e724b6ac30489d769e303c3becfbfbfcfc Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:16 -0500
-Subject: [065/256] ide: Do not disable interrupts for PREEMPT-RT
+Subject: ide: Do not disable interrupts for PREEMPT-RT
Use the local_irq_*_nort variants.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/ide/alim15x3.c | 4 ++--
drivers/ide/hpt366.c | 4 ++--
@@ -17,11 +17,11 @@
drivers/ide/ide-taskfile.c | 6 +++---
7 files changed, 16 insertions(+), 16 deletions(-)
-diff --git a/drivers/ide/alim15x3.c b/drivers/ide/alim15x3.c
-index 2c8016a..6fd6037 100644
---- a/drivers/ide/alim15x3.c
-+++ b/drivers/ide/alim15x3.c
-@@ -234,7 +234,7 @@ static int init_chipset_ali15x3(struct pci_dev *dev)
+Index: linux-stable/drivers/ide/alim15x3.c
+===================================================================
+--- linux-stable.orig/drivers/ide/alim15x3.c
++++ linux-stable/drivers/ide/alim15x3.c
+@@ -234,7 +234,7 @@ static int init_chipset_ali15x3(struct p
isa_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL);
@@ -39,11 +39,11 @@
return 0;
}
-diff --git a/drivers/ide/hpt366.c b/drivers/ide/hpt366.c
-index 58c51cd..d2a4059 100644
---- a/drivers/ide/hpt366.c
-+++ b/drivers/ide/hpt366.c
-@@ -1241,7 +1241,7 @@ static int __devinit init_dma_hpt366(ide_hwif_t *hwif,
+Index: linux-stable/drivers/ide/hpt366.c
+===================================================================
+--- linux-stable.orig/drivers/ide/hpt366.c
++++ linux-stable/drivers/ide/hpt366.c
+@@ -1241,7 +1241,7 @@ static int __devinit init_dma_hpt366(ide
dma_old = inb(base + 2);
@@ -52,7 +52,7 @@
dma_new = dma_old;
pci_read_config_byte(dev, hwif->channel ? 0x4b : 0x43, &masterdma);
-@@ -1252,7 +1252,7 @@ static int __devinit init_dma_hpt366(ide_hwif_t *hwif,
+@@ -1252,7 +1252,7 @@ static int __devinit init_dma_hpt366(ide
if (dma_new != dma_old)
outb(dma_new, base + 2);
@@ -61,11 +61,11 @@
printk(KERN_INFO " %s: BM-DMA at 0x%04lx-0x%04lx\n",
hwif->name, base, base + 7);
-diff --git a/drivers/ide/ide-io-std.c b/drivers/ide/ide-io-std.c
-index 1976397..4169433 100644
---- a/drivers/ide/ide-io-std.c
-+++ b/drivers/ide/ide-io-std.c
-@@ -175,7 +175,7 @@ void ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
+Index: linux-stable/drivers/ide/ide-io-std.c
+===================================================================
+--- linux-stable.orig/drivers/ide/ide-io-std.c
++++ linux-stable/drivers/ide/ide-io-std.c
+@@ -175,7 +175,7 @@ void ide_input_data(ide_drive_t *drive,
unsigned long uninitialized_var(flags);
if ((io_32bit & 2) && !mmio) {
@@ -74,7 +74,7 @@
ata_vlb_sync(io_ports->nsect_addr);
}
-@@ -186,7 +186,7 @@ void ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
+@@ -186,7 +186,7 @@ void ide_input_data(ide_drive_t *drive,
insl(data_addr, buf, words);
if ((io_32bit & 2) && !mmio)
@@ -83,7 +83,7 @@
if (((len + 1) & 3) < 2)
return;
-@@ -219,7 +219,7 @@ void ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
+@@ -219,7 +219,7 @@ void ide_output_data(ide_drive_t *drive,
unsigned long uninitialized_var(flags);
if ((io_32bit & 2) && !mmio) {
@@ -92,7 +92,7 @@
ata_vlb_sync(io_ports->nsect_addr);
}
-@@ -230,7 +230,7 @@ void ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
+@@ -230,7 +230,7 @@ void ide_output_data(ide_drive_t *drive,
outsl(data_addr, buf, words);
if ((io_32bit & 2) && !mmio)
@@ -101,11 +101,11 @@
if (((len + 1) & 3) < 2)
return;
-diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
-index 177db6d..079ae6b 100644
---- a/drivers/ide/ide-io.c
-+++ b/drivers/ide/ide-io.c
-@@ -659,7 +659,7 @@ void ide_timer_expiry (unsigned long data)
+Index: linux-stable/drivers/ide/ide-io.c
+===================================================================
+--- linux-stable.orig/drivers/ide/ide-io.c
++++ linux-stable/drivers/ide/ide-io.c
+@@ -659,7 +659,7 @@ void ide_timer_expiry (unsigned long dat
/* disable_irq_nosync ?? */
disable_irq(hwif->irq);
/* local CPU only, as if we were handling an interrupt */
@@ -114,11 +114,11 @@
if (hwif->polling) {
startstop = handler(drive);
} else if (drive_is_ready(drive)) {
-diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
-index 376f2dc..f014dd1 100644
---- a/drivers/ide/ide-iops.c
-+++ b/drivers/ide/ide-iops.c
-@@ -129,12 +129,12 @@ int __ide_wait_stat(ide_drive_t *drive, u8 good, u8 bad,
+Index: linux-stable/drivers/ide/ide-iops.c
+===================================================================
+--- linux-stable.orig/drivers/ide/ide-iops.c
++++ linux-stable/drivers/ide/ide-iops.c
+@@ -129,12 +129,12 @@ int __ide_wait_stat(ide_drive_t *drive,
if ((stat & ATA_BUSY) == 0)
break;
@@ -133,11 +133,11 @@
}
/*
* Allow status to settle, then read it again.
-diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
-index 068cef0..38e69e1 100644
---- a/drivers/ide/ide-probe.c
-+++ b/drivers/ide/ide-probe.c
-@@ -196,10 +196,10 @@ static void do_identify(ide_drive_t *drive, u8 cmd, u16 *id)
+Index: linux-stable/drivers/ide/ide-probe.c
+===================================================================
+--- linux-stable.orig/drivers/ide/ide-probe.c
++++ linux-stable/drivers/ide/ide-probe.c
+@@ -196,10 +196,10 @@ static void do_identify(ide_drive_t *dri
int bswap = 1;
/* local CPU only; some systems need this */
@@ -150,11 +150,11 @@
drive->dev_flags |= IDE_DFLAG_ID_READ;
#ifdef DEBUG
-diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
-index 729428e..3a9a1fc 100644
---- a/drivers/ide/ide-taskfile.c
-+++ b/drivers/ide/ide-taskfile.c
-@@ -251,7 +251,7 @@ void ide_pio_bytes(ide_drive_t *drive, struct ide_cmd *cmd,
+Index: linux-stable/drivers/ide/ide-taskfile.c
+===================================================================
+--- linux-stable.orig/drivers/ide/ide-taskfile.c
++++ linux-stable/drivers/ide/ide-taskfile.c
+@@ -251,7 +251,7 @@ void ide_pio_bytes(ide_drive_t *drive, s
page_is_high = PageHighMem(page);
if (page_is_high)
@@ -163,7 +163,7 @@
buf = kmap_atomic(page) + offset;
-@@ -272,7 +272,7 @@ void ide_pio_bytes(ide_drive_t *drive, struct ide_cmd *cmd,
+@@ -272,7 +272,7 @@ void ide_pio_bytes(ide_drive_t *drive, s
kunmap_atomic(buf);
if (page_is_high)
@@ -172,7 +172,7 @@
len -= nr_bytes;
}
-@@ -415,7 +415,7 @@ static ide_startstop_t pre_task_out_intr(ide_drive_t *drive,
+@@ -415,7 +415,7 @@ static ide_startstop_t pre_task_out_intr
}
if ((drive->dev_flags & IDE_DFLAG_UNMASK) == 0)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/infiniband-mellanox-ib-use-nort-irq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0066-infiniband-Mellanox-IB-driver-patch-use-_nort-primit.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0066-infiniband-Mellanox-IB-driver-patch-use-_nort-primit.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/infiniband-mellanox-ib-use-nort-irq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From bcd7012f3bfabeb95de135946520f8f240f11778 Mon Sep 17 00:00:00 2001
From: Sven-Thorsten Dietrich <sdietrich at novell.com>
Date: Fri, 3 Jul 2009 08:30:35 -0500
-Subject: [066/256] infiniband: Mellanox IB driver patch use _nort()
- primitives
+Subject: infiniband: Mellanox IB driver patch use _nort() primitives
Fixes in_atomic stack-dump, when Mellanox module is loaded into the RT
Kernel.
@@ -15,15 +13,16 @@
Signed-off-by: Sven-Thorsten Dietrich <sven at thebigcorporation.com>
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
-index 20ebc6f..525fca6 100644
---- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
-+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
-@@ -798,7 +798,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
+Index: linux-stable/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+===================================================================
+--- linux-stable.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
++++ linux-stable/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+@@ -783,7 +783,7 @@ void ipoib_mcast_restart_task(struct wor
ipoib_mcast_stop_thread(dev, 0);
@@ -32,7 +31,7 @@
netif_addr_lock(dev);
spin_lock(&priv->lock);
-@@ -880,7 +880,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
+@@ -865,7 +865,7 @@ void ipoib_mcast_restart_task(struct wor
spin_unlock(&priv->lock);
netif_addr_unlock(dev);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/inpt-gameport-use-local-irq-nort.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0067-input-gameport-Do-not-disable-interrupts-on-PREEMPT_.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0067-input-gameport-Do-not-disable-interrupts-on-PREEMPT_.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/inpt-gameport-use-local-irq-nort.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From 9c42db1c94f200b115c6ea592ec7567706e43098 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:16 -0500
-Subject: [067/256] input: gameport: Do not disable interrupts on PREEMPT_RT
+Subject: input: gameport: Do not disable interrupts on PREEMPT_RT
Use the _nort() primitives.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/input/gameport/gameport.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
-diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
-index da739d9..18fdafe 100644
---- a/drivers/input/gameport/gameport.c
-+++ b/drivers/input/gameport/gameport.c
-@@ -87,12 +87,12 @@ static int gameport_measure_speed(struct gameport *gameport)
+Index: linux-stable/drivers/input/gameport/gameport.c
+===================================================================
+--- linux-stable.orig/drivers/input/gameport/gameport.c
++++ linux-stable/drivers/input/gameport/gameport.c
+@@ -87,12 +87,12 @@ static int gameport_measure_speed(struct
tx = 1 << 30;
for(i = 0; i < 50; i++) {
@@ -30,7 +30,7 @@
udelay(i * 10);
if ((t = DELTA(t2,t1) - DELTA(t3,t2)) < tx) tx = t;
}
-@@ -111,11 +111,11 @@ static int gameport_measure_speed(struct gameport *gameport)
+@@ -111,11 +111,11 @@ static int gameport_measure_speed(struct
tx = 1 << 30;
for(i = 0; i < 50; i++) {
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/intel_idle-convert-i7300_idle_lock-to-raw-spinlock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0013-intel_idle-Convert-i7300_idle_lock-to-raw-spinlock.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0013-intel_idle-Convert-i7300_idle_lock-to-raw-spinlock.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/intel_idle-convert-i7300_idle_lock-to-raw-spinlock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 6ee54eb5fc1def247b63e36c83b26ab5dfb34ce2 Mon Sep 17 00:00:00 2001
+Subject: intel_idle: Convert i7300_idle_lock to raw spinlock
From: Mike Galbraith <efault at gmx.de>
-Date: Wed, 7 Dec 2011 12:48:42 +0100
-Subject: [013/256] intel_idle: Convert i7300_idle_lock to raw spinlock
+Date: Wed, 07 Dec 2011 12:48:42 +0100
24 core Intel box's first exposure to 3.0.12-rt30-rc3 didn't go well.
@@ -23,14 +22,15 @@
Cc: Steven Rostedt <rostedt at goodmis.org>
Link: http://lkml.kernel.org/r/1323258522.5057.73.camel@marge.simson.net
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/idle/i7300_idle.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
-diff --git a/drivers/idle/i7300_idle.c b/drivers/idle/i7300_idle.c
-index fa080eb..ffeebc7 100644
---- a/drivers/idle/i7300_idle.c
-+++ b/drivers/idle/i7300_idle.c
+Index: linux-stable/drivers/idle/i7300_idle.c
+===================================================================
+--- linux-stable.orig/drivers/idle/i7300_idle.c
++++ linux-stable/drivers/idle/i7300_idle.c
@@ -75,7 +75,7 @@ static unsigned long past_skip;
static struct pci_dev *fbd_dev;
@@ -40,7 +40,7 @@
static int i7300_idle_active;
static u8 i7300_idle_thrtctl_saved;
-@@ -457,7 +457,7 @@ static int i7300_idle_notifier(struct notifier_block *nb, unsigned long val,
+@@ -457,7 +457,7 @@ static int i7300_idle_notifier(struct no
idle_begin_time = ktime_get();
}
@@ -49,7 +49,7 @@
if (val == IDLE_START) {
cpumask_set_cpu(smp_processor_id(), idle_cpumask);
-@@ -506,7 +506,7 @@ static int i7300_idle_notifier(struct notifier_block *nb, unsigned long val,
+@@ -506,7 +506,7 @@ static int i7300_idle_notifier(struct no
}
}
end:
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ipc-make-rt-aware.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0103-ipc-Make-the-ipc-code-rt-aware.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0103-ipc-Make-the-ipc-code-rt-aware.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ipc-make-rt-aware.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 739544c0eab09ad0faf0f47b7bd099e078a80a2e Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:12 -0500
-Subject: [103/256] ipc: Make the ipc code -rt aware
+Subject: ipc: Make the ipc code -rt aware
RT serializes the code with the (rt)spinlock but keeps preemption
enabled. Some parts of the code need to be atomic nevertheless.
@@ -10,16 +9,17 @@
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
ipc/mqueue.c | 5 +++++
ipc/msg.c | 16 ++++++++++++++++
2 files changed, 21 insertions(+)
-diff --git a/ipc/mqueue.c b/ipc/mqueue.c
-index 28bd64d..dd9e66a 100644
---- a/ipc/mqueue.c
-+++ b/ipc/mqueue.c
-@@ -813,12 +813,17 @@ static inline void pipelined_send(struct mqueue_inode_info *info,
+Index: linux-stable/ipc/mqueue.c
+===================================================================
+--- linux-stable.orig/ipc/mqueue.c
++++ linux-stable/ipc/mqueue.c
+@@ -912,12 +912,17 @@ static inline void pipelined_send(struct
struct msg_msg *message,
struct ext_wait_queue *receiver)
{
@@ -37,11 +37,11 @@
}
/* pipelined_receive() - if there is task waiting in sys_mq_timedsend()
-diff --git a/ipc/msg.c b/ipc/msg.c
-index 7385de2..06642ac 100644
---- a/ipc/msg.c
-+++ b/ipc/msg.c
-@@ -259,12 +259,20 @@ static void expunge_all(struct msg_queue *msq, int res)
+Index: linux-stable/ipc/msg.c
+===================================================================
+--- linux-stable.orig/ipc/msg.c
++++ linux-stable/ipc/msg.c
+@@ -259,12 +259,20 @@ static void expunge_all(struct msg_queue
while (tmp != &msq->q_receivers) {
struct msg_receiver *msr;
@@ -62,7 +62,7 @@
}
}
-@@ -611,6 +619,12 @@ static inline int pipelined_send(struct msg_queue *msq, struct msg_msg *msg)
+@@ -611,6 +619,12 @@ static inline int pipelined_send(struct
!security_msg_queue_msgrcv(msq, msg, msr->r_tsk,
msr->r_msgtype, msr->r_mode)) {
@@ -75,7 +75,7 @@
list_del(&msr->r_list);
if (msr->r_maxsize < msg->m_ts) {
msr->r_msg = NULL;
-@@ -624,9 +638,11 @@ static inline int pipelined_send(struct msg_queue *msq, struct msg_msg *msg)
+@@ -624,9 +638,11 @@ static inline int pipelined_send(struct
wake_up_process(msr->r_tsk);
smp_mb();
msr->r_msg = msg;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ipc-mqueue-add-a-critical-section-to-avoid-a-deadlock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0104-ipc-mqueue-Add-a-critical-section-to-avoid-a-deadloc.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0104-ipc-mqueue-Add-a-critical-section-to-avoid-a-deadloc.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ipc-mqueue-add-a-critical-section-to-avoid-a-deadlock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From ef6628d7653c6738f606413c6e3d65877f16a130 Mon Sep 17 00:00:00 2001
+Subject: ipc/mqueue: Add a critical section to avoid a deadlock
From: KOBAYASHI Yoshitake <yoshitake.kobayashi at toshiba.co.jp>
Date: Sat, 23 Jul 2011 11:57:36 +0900
-Subject: [104/256] ipc/mqueue: Add a critical section to avoid a deadlock
(Repost for v3.0-rt1 and changed the distination addreses)
I have tested the following patch on v3.0-rt1 with PREEMPT_RT_FULL.
@@ -22,6 +21,7 @@
*. receiver will never wake up and cannot change sender's state to
STATE_READY because sender has higher priority
+
Signed-off-by: Yoshitake Kobayashi <yoshitake.kobayashi at toshiba.co.jp>
Cc: viro at zeniv.linux.org.uk
Cc: dchinner at redhat.com
@@ -31,32 +31,36 @@
Link: http://lkml.kernel.org/r/4E2A38A0.1090601@toshiba.co.jp
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- ipc/mqueue.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
+ ipc/mqueue.c | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
-diff --git a/ipc/mqueue.c b/ipc/mqueue.c
-index dd9e66a..e630272 100644
---- a/ipc/mqueue.c
-+++ b/ipc/mqueue.c
-@@ -837,15 +837,19 @@ static inline void pipelined_receive(struct mqueue_inode_info *info)
+Index: linux-stable/ipc/mqueue.c
+===================================================================
+--- linux-stable.orig/ipc/mqueue.c
++++ linux-stable/ipc/mqueue.c
+@@ -936,13 +936,18 @@ static inline void pipelined_receive(str
wake_up_interruptible(&info->wait_q);
return;
}
+- if (msg_insert(sender->msg, info))
+- return;
+- list_del(&sender->list);
+- sender->state = STATE_PENDING;
+- wake_up_process(sender->task);
+- smp_wmb();
+- sender->state = STATE_READY;
+ /*
+ * Keep them in one critical section for PREEMPT_RT:
+ */
+ preempt_disable_rt();
- msg_insert(sender->msg, info);
- list_del(&sender->list);
- sender->state = STATE_PENDING;
- wake_up_process(sender->task);
- smp_wmb();
- sender->state = STATE_READY;
++ if (!msg_insert(sender->msg, info)) {
++ list_del(&sender->list);
++ sender->state = STATE_PENDING;
++ wake_up_process(sender->task);
++ smp_wmb();
++ sender->state = STATE_READY;
++ }
+ preempt_enable_rt();
}
--
--SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
-+ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
- size_t, msg_len, unsigned int, msg_prio,
- const struct timespec __user *, u_abs_timeout)
- {
+
+ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ipc-sem-rework-semaphore-wakeups.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0228-ipc-sem-Rework-semaphore-wakeups.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0228-ipc-sem-Rework-semaphore-wakeups.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ipc-sem-rework-semaphore-wakeups.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,10 @@
-From 8654f9ddc402aa902c8573788ca744c0f602c7b7 Mon Sep 17 00:00:00 2001
+Subject: ipc/sem: Rework semaphore wakeups
+From: Peter Zijlstra <peterz at infradead.org>
+Date: Wed, 14 Sep 2011 11:57:04 +0200
+
+Subject: ipc/sem: Rework semaphore wakeups
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Tue, 13 Sep 2011 15:09:40 +0200
-Subject: [228/256] ipc/sem: Rework semaphore wakeups
+Date: Tue Sep 13 15:09:40 CEST 2011
Current sysv sems have a weird ass wakeup scheme that involves keeping
preemption disabled over a potential O(n^2) loop and busy waiting on
@@ -28,10 +31,10 @@
ipc/sem.c | 10 ++++++++++
1 file changed, 10 insertions(+)
-diff --git a/ipc/sem.c b/ipc/sem.c
-index 5215a81..5eaf684 100644
---- a/ipc/sem.c
-+++ b/ipc/sem.c
+Index: linux-stable/ipc/sem.c
+===================================================================
+--- linux-stable.orig/ipc/sem.c
++++ linux-stable/ipc/sem.c
@@ -461,6 +461,13 @@ undo:
static void wake_up_sem_queue_prepare(struct list_head *pt,
struct sem_queue *q, int error)
@@ -46,7 +49,7 @@
if (list_empty(pt)) {
/*
* Hold preempt off so that we don't get preempted and have the
-@@ -472,6 +479,7 @@ static void wake_up_sem_queue_prepare(struct list_head *pt,
+@@ -472,6 +479,7 @@ static void wake_up_sem_queue_prepare(st
q->pid = error;
list_add_tail(&q->simple_list, pt);
@@ -54,7 +57,7 @@
}
/**
-@@ -485,6 +493,7 @@ static void wake_up_sem_queue_prepare(struct list_head *pt,
+@@ -485,6 +493,7 @@ static void wake_up_sem_queue_prepare(st
*/
static void wake_up_sem_queue_do(struct list_head *pt)
{
@@ -62,7 +65,7 @@
struct sem_queue *q, *t;
int did_something;
-@@ -497,6 +506,7 @@ static void wake_up_sem_queue_do(struct list_head *pt)
+@@ -497,6 +506,7 @@ static void wake_up_sem_queue_do(struct
}
if (did_something)
preempt_enable();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0168-genirq-Allow-disabling-of-softirq-processing-in-irq-.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0168-genirq-Allow-disabling-of-softirq-processing-in-irq-.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From 0d4fd56e30a154612e0fee6b73a182ec739d8086 Mon Sep 17 00:00:00 2001
+Subject: genirq: Allow disabling of softirq processing in irq thread context
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 31 Jan 2012 13:01:27 +0100
-Subject: [168/256] genirq: Allow disabling of softirq processing in irq
- thread context
The processing of softirqs in irq thread context is a performance gain
for the non-rt workloads of a system, but it's counterproductive for
@@ -20,19 +18,19 @@
kernel/softirq.c | 7 +++++++
5 files changed, 37 insertions(+), 2 deletions(-)
-diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index be33625..773dbc9 100644
---- a/include/linux/interrupt.h
-+++ b/include/linux/interrupt.h
-@@ -59,6 +59,7 @@
+Index: linux-stable/include/linux/interrupt.h
+===================================================================
+--- linux-stable.orig/include/linux/interrupt.h
++++ linux-stable/include/linux/interrupt.h
+@@ -58,6 +58,7 @@
* IRQF_NO_THREAD - Interrupt cannot be threaded
* IRQF_EARLY_RESUME - Resume IRQ early during syscore instead of at device
* resume time.
+ * IRQF_NO_SOFTIRQ_CALL - Do not process softirqs in the irq thread context (RT)
*/
#define IRQF_DISABLED 0x00000020
- #define IRQF_SAMPLE_RANDOM 0x00000040
-@@ -73,6 +74,7 @@
+ #define IRQF_SHARED 0x00000080
+@@ -71,6 +72,7 @@
#define IRQF_FORCE_RESUME 0x00008000
#define IRQF_NO_THREAD 0x00010000
#define IRQF_EARLY_RESUME 0x00020000
@@ -40,11 +38,11 @@
#define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD)
-diff --git a/include/linux/irq.h b/include/linux/irq.h
-index b27cfcf..496fa99 100644
---- a/include/linux/irq.h
-+++ b/include/linux/irq.h
-@@ -73,6 +73,7 @@ typedef void (*irq_preflow_handler_t)(struct irq_data *data);
+Index: linux-stable/include/linux/irq.h
+===================================================================
+--- linux-stable.orig/include/linux/irq.h
++++ linux-stable/include/linux/irq.h
+@@ -73,6 +73,7 @@ typedef void (*irq_preflow_handler_t)(st
* IRQ_MOVE_PCNTXT - Interrupt can be migrated from process context
* IRQ_NESTED_TRHEAD - Interrupt nests into another thread
* IRQ_PER_CPU_DEVID - Dev_id is a per-cpu variable
@@ -68,11 +66,11 @@
#define IRQ_NO_BALANCING_MASK (IRQ_PER_CPU | IRQ_NO_BALANCING)
-diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
-index 975b3a1..cd4eb0a 100644
---- a/kernel/irq/manage.c
-+++ b/kernel/irq/manage.c
-@@ -749,7 +749,15 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
+Index: linux-stable/kernel/irq/manage.c
+===================================================================
+--- linux-stable.orig/kernel/irq/manage.c
++++ linux-stable/kernel/irq/manage.c
+@@ -757,7 +757,15 @@ irq_forced_thread_fn(struct irq_desc *de
local_bh_disable();
ret = action->thread_fn(action->irq, action->dev_id);
irq_finalize_oneshot(desc, action);
@@ -89,7 +87,7 @@
return ret;
}
-@@ -1071,6 +1079,9 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
+@@ -1090,6 +1098,9 @@ __setup_irq(unsigned int irq, struct irq
irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
}
@@ -99,10 +97,10 @@
/* Set default affinity mask once everything is setup */
setup_affinity(irq, desc, mask);
-diff --git a/kernel/irq/settings.h b/kernel/irq/settings.h
-index 1162f10..0d2c381 100644
---- a/kernel/irq/settings.h
-+++ b/kernel/irq/settings.h
+Index: linux-stable/kernel/irq/settings.h
+===================================================================
+--- linux-stable.orig/kernel/irq/settings.h
++++ linux-stable/kernel/irq/settings.h
@@ -14,6 +14,7 @@ enum {
_IRQ_NO_BALANCING = IRQ_NO_BALANCING,
_IRQ_NESTED_THREAD = IRQ_NESTED_THREAD,
@@ -119,7 +117,7 @@
#undef IRQF_MODIFY_MASK
#define IRQF_MODIFY_MASK GOT_YOU_MORON
-@@ -36,6 +38,16 @@ irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set)
+@@ -36,6 +38,16 @@ irq_settings_clr_and_set(struct irq_desc
desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK);
}
@@ -136,11 +134,11 @@
static inline bool irq_settings_is_per_cpu(struct irq_desc *desc)
{
return desc->status_use_accessors & _IRQ_PER_CPU;
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index aec7d69..35fb713 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
-@@ -425,6 +425,13 @@ void local_bh_enable_ip(unsigned long ip)
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
+@@ -434,6 +434,13 @@ void local_bh_enable_ip(unsigned long ip
}
EXPORT_SYMBOL(local_bh_enable_ip);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/jump-label-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0213-jump-label-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0213-jump-label-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/jump-label-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 5ec9a9a754ce7dd17932e66e12a9754c9d14ea28 Mon Sep 17 00:00:00 2001
+Subject: jump-label-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 13 Jul 2011 11:03:16 +0200
-Subject: [213/256] jump-label-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/jump_label.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
-index c513a40..f47f3e0 100644
---- a/include/linux/jump_label.h
-+++ b/include/linux/jump_label.h
-@@ -51,7 +51,8 @@
+Index: linux-stable/include/linux/jump_label.h
+===================================================================
+--- linux-stable.orig/include/linux/jump_label.h
++++ linux-stable/include/linux/jump_label.h
+@@ -50,7 +50,8 @@
#include <linux/compiler.h>
#include <linux/workqueue.h>
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/kconfig-disable-a-few-options-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0252-kconfig-disable-a-few-options-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0252-kconfig-disable-a-few-options-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/kconfig-disable-a-few-options-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 14b8eadbeb7464a5e6b566f75cde75853ad6b528 Mon Sep 17 00:00:00 2001
+Subject: kconfig-disable-a-few-options-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 24 Jul 2011 12:11:43 +0200
-Subject: [252/256] kconfig-disable-a-few-options-rt.patch
Disable stuff which is known to have issues on RT
@@ -12,10 +11,10 @@
mm/Kconfig | 2 +-
3 files changed, 3 insertions(+), 1 deletion(-)
-diff --git a/arch/Kconfig b/arch/Kconfig
-index 684eb5a..417ff4c 100644
---- a/arch/Kconfig
-+++ b/arch/Kconfig
+Index: linux-stable/arch/Kconfig
+===================================================================
+--- linux-stable.orig/arch/Kconfig
++++ linux-stable/arch/Kconfig
@@ -6,6 +6,7 @@ config OPROFILE
tristate "OProfile system profiling"
depends on PROFILING
@@ -24,11 +23,11 @@
select RING_BUFFER
select RING_BUFFER_ALLOW_SWAP
help
-diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
-index b982854..8b53d92 100644
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -156,6 +156,7 @@ config MACVTAP
+Index: linux-stable/drivers/net/Kconfig
+===================================================================
+--- linux-stable.orig/drivers/net/Kconfig
++++ linux-stable/drivers/net/Kconfig
+@@ -153,6 +153,7 @@ config MACVTAP
config NETCONSOLE
tristate "Network console logging support"
@@ -36,11 +35,11 @@
---help---
If you want to log kernel messages over the network, enable this.
See <file:Documentation/networking/netconsole.txt> for details.
-diff --git a/mm/Kconfig b/mm/Kconfig
-index e338407..096f436 100644
---- a/mm/Kconfig
-+++ b/mm/Kconfig
-@@ -313,7 +313,7 @@ config NOMMU_INITIAL_TRIM_EXCESS
+Index: linux-stable/mm/Kconfig
+===================================================================
+--- linux-stable.orig/mm/Kconfig
++++ linux-stable/mm/Kconfig
+@@ -318,7 +318,7 @@ config NOMMU_INITIAL_TRIM_EXCESS
config TRANSPARENT_HUGEPAGE
bool "Transparent Hugepage Support"
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/kconfig-preempt-rt-full.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0253-kconfig-preempt-rt-full.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0253-kconfig-preempt-rt-full.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/kconfig-preempt-rt-full.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From d520488a76082f5f4811de981d57fb52bd6233f2 Mon Sep 17 00:00:00 2001
+Subject: kconfig-preempt-rt-full.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 29 Jun 2011 14:58:57 +0200
-Subject: [253/256] kconfig-preempt-rt-full.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -10,20 +9,20 @@
scripts/mkcompile_h | 4 +++-
3 files changed, 11 insertions(+), 2 deletions(-)
-diff --git a/init/Makefile b/init/Makefile
-index 0bf677a..6b473cd 100644
---- a/init/Makefile
-+++ b/init/Makefile
-@@ -29,4 +29,4 @@ silent_chk_compile.h = :
+Index: linux-stable/init/Makefile
+===================================================================
+--- linux-stable.orig/init/Makefile
++++ linux-stable/init/Makefile
+@@ -33,4 +33,4 @@ silent_chk_compile.h = :
include/generated/compile.h: FORCE
@$($(quiet)chk_compile.h)
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
- "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(KBUILD_CFLAGS)"
+ "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CONFIG_PREEMPT_RT_FULL)" "$(CC) $(KBUILD_CFLAGS)"
-diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
-index 885efbd..c9f006b 100644
---- a/kernel/Kconfig.preempt
-+++ b/kernel/Kconfig.preempt
+Index: linux-stable/kernel/Kconfig.preempt
+===================================================================
+--- linux-stable.orig/kernel/Kconfig.preempt
++++ linux-stable/kernel/Kconfig.preempt
@@ -67,6 +67,13 @@ config PREEMPT_RTB
enables changes which are preliminary for the full preemptiple
RT kernel.
@@ -38,10 +37,10 @@
endchoice
config PREEMPT_COUNT
-diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
-index f221ddf..5f44009 100755
---- a/scripts/mkcompile_h
-+++ b/scripts/mkcompile_h
+Index: linux-stable/scripts/mkcompile_h
+===================================================================
+--- linux-stable.orig/scripts/mkcompile_h
++++ linux-stable/scripts/mkcompile_h
@@ -4,7 +4,8 @@ TARGET=$1
ARCH=$2
SMP=$3
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/kgb-serial-hackaround.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0225-kgdb-serial-Short-term-workaround.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0225-kgdb-serial-Short-term-workaround.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/kgb-serial-hackaround.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 0eba936278d1f093cf1b178ab6baff17d4c9fb59 Mon Sep 17 00:00:00 2001
From: Jason Wessel <jason.wessel at windriver.com>
Date: Thu, 28 Jul 2011 12:42:23 -0500
-Subject: [225/256] kgdb/serial: Short term workaround
+Subject: kgdb/serial: Short term workaround
On 07/27/2011 04:37 PM, Thomas Gleixner wrote:
> - KGDB (not yet disabled) is reportedly unusable on -rt right now due
@@ -17,16 +16,17 @@
Thanks,
Jason.
+
---
drivers/tty/serial/8250/8250.c | 3 ++-
include/linux/kdb.h | 2 ++
kernel/debug/kdb/kdb_io.c | 6 ++----
3 files changed, 6 insertions(+), 5 deletions(-)
-diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c
-index a785ec0..0db379e 100644
---- a/drivers/tty/serial/8250/8250.c
-+++ b/drivers/tty/serial/8250/8250.c
+Index: linux-stable/drivers/tty/serial/8250/8250.c
+===================================================================
+--- linux-stable.orig/drivers/tty/serial/8250/8250.c
++++ linux-stable/drivers/tty/serial/8250/8250.c
@@ -38,6 +38,7 @@
#include <linux/nmi.h>
#include <linux/mutex.h>
@@ -35,7 +35,7 @@
#ifdef CONFIG_SPARC
#include <linux/sunserialcore.h>
#endif
-@@ -2817,7 +2818,7 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
+@@ -2782,7 +2783,7 @@ serial8250_console_write(struct console
touch_nmi_watchdog();
@@ -44,11 +44,11 @@
locked = spin_trylock_irqsave(&port->lock, flags);
else
spin_lock_irqsave(&port->lock, flags);
-diff --git a/include/linux/kdb.h b/include/linux/kdb.h
-index 0647258..0d1ebfc 100644
---- a/include/linux/kdb.h
-+++ b/include/linux/kdb.h
-@@ -150,12 +150,14 @@ extern int kdb_register(char *, kdb_func_t, char *, char *, short);
+Index: linux-stable/include/linux/kdb.h
+===================================================================
+--- linux-stable.orig/include/linux/kdb.h
++++ linux-stable/include/linux/kdb.h
+@@ -148,12 +148,14 @@ extern int kdb_register(char *, kdb_func
extern int kdb_register_repeat(char *, kdb_func_t, char *, char *,
short, kdb_repeat_t);
extern int kdb_unregister(char *);
@@ -63,19 +63,19 @@
#endif /* CONFIG_KGDB_KDB */
enum {
KDB_NOT_INITIALIZED,
-diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c
-index bb9520f..eb68a9d 100644
---- a/kernel/debug/kdb/kdb_io.c
-+++ b/kernel/debug/kdb/kdb_io.c
-@@ -553,7 +553,6 @@ int vkdb_printf(const char *fmt, va_list ap)
- int diag;
+Index: linux-stable/kernel/debug/kdb/kdb_io.c
+===================================================================
+--- linux-stable.orig/kernel/debug/kdb/kdb_io.c
++++ linux-stable/kernel/debug/kdb/kdb_io.c
+@@ -554,7 +554,6 @@ int vkdb_printf(const char *fmt, va_list
int linecount;
+ int colcount;
int logging, saved_loglevel = 0;
- int saved_trap_printk;
int got_printf_lock = 0;
int retlen = 0;
int fnd, len;
-@@ -564,8 +563,6 @@ int vkdb_printf(const char *fmt, va_list ap)
+@@ -565,8 +564,6 @@ int vkdb_printf(const char *fmt, va_list
unsigned long uninitialized_var(flags);
preempt_disable();
@@ -84,7 +84,7 @@
/* Serialize kdb_printf if multiple cpus try to write at once.
* But if any cpu goes recursive in kdb, just print the output,
-@@ -821,7 +818,6 @@ kdb_print_out:
+@@ -833,7 +830,6 @@ kdb_print_out:
} else {
__release(kdb_printf_lock);
}
@@ -92,7 +92,7 @@
preempt_enable();
return retlen;
}
-@@ -831,9 +827,11 @@ int kdb_printf(const char *fmt, ...)
+@@ -843,9 +839,11 @@ int kdb_printf(const char *fmt, ...)
va_list ap;
int r;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/latency-hist.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0054-latency-hist.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0054-latency-hist.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/latency-hist.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 99509daf04c5a160ff9db1283595c58cd130ffd1 Mon Sep 17 00:00:00 2001
+Subject: latency-hist.patch
From: Carsten Emde <C.Emde at osadl.org>
Date: Tue, 19 Jul 2011 14:03:41 +0100
-Subject: [054/256] latency-hist.patch
This patch provides a recording mechanism to store data of potential
sources of system latencies. The recordings separately determine the
@@ -12,27 +11,24 @@
Signed-off-by: Carsten Emde <C.Emde at osadl.org>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- Documentation/trace/histograms.txt | 186 ++++++
- include/linux/sched.h | 6 +
- include/trace/events/hist.h | 69 +++
- include/trace/events/latency_hist.h | 30 +
- kernel/hrtimer.c | 11 +
- kernel/trace/Kconfig | 104 ++++
- kernel/trace/Makefile | 4 +
- kernel/trace/latency_hist.c | 1170 +++++++++++++++++++++++++++++++++++
- kernel/trace/trace_irqsoff.c | 11 +
- 9 files changed, 1591 insertions(+)
- create mode 100644 Documentation/trace/histograms.txt
- create mode 100644 include/trace/events/hist.h
- create mode 100644 include/trace/events/latency_hist.h
- create mode 100644 kernel/trace/latency_hist.c
+ Documentation/trace/histograms.txt | 186 +++++
+ include/linux/hrtimer.h | 3
+ include/linux/sched.h | 6
+ include/trace/events/hist.h | 69 ++
+ include/trace/events/latency_hist.h | 30
+ kernel/hrtimer.c | 23
+ kernel/trace/Kconfig | 104 +++
+ kernel/trace/Makefile | 4
+ kernel/trace/latency_hist.c | 1176 ++++++++++++++++++++++++++++++++++++
+ kernel/trace/trace_irqsoff.c | 11
+ 10 files changed, 1612 insertions(+)
-diff --git a/Documentation/trace/histograms.txt b/Documentation/trace/histograms.txt
-new file mode 100644
-index 0000000..6f2aeab
+Index: linux-stable/Documentation/trace/histograms.txt
+===================================================================
--- /dev/null
-+++ b/Documentation/trace/histograms.txt
++++ linux-stable/Documentation/trace/histograms.txt
@@ -0,0 +1,186 @@
+ Using the Linux Kernel Latency Histograms
+
@@ -220,28 +216,41 @@
+is provided.
+
+These data are also reset when the wakeup histogram is reset.
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index f14b965..5b63855 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1614,6 +1614,12 @@ struct task_struct {
+Index: linux-stable/include/linux/hrtimer.h
+===================================================================
+--- linux-stable.orig/include/linux/hrtimer.h
++++ linux-stable/include/linux/hrtimer.h
+@@ -111,6 +111,9 @@ struct hrtimer {
+ enum hrtimer_restart (*function)(struct hrtimer *);
+ struct hrtimer_clock_base *base;
+ unsigned long state;
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++ ktime_t praecox;
++#endif
+ #ifdef CONFIG_TIMER_STATS
+ int start_pid;
+ void *start_site;
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1583,6 +1583,12 @@ struct task_struct {
unsigned long trace;
/* bitmask and counter of trace recursion */
unsigned long trace_recursion;
+#ifdef CONFIG_WAKEUP_LATENCY_HIST
+ u64 preempt_timestamp_hist;
+#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
-+ unsigned long timer_offset;
++ long timer_offset;
+#endif
+#endif
#endif /* CONFIG_TRACING */
- #ifdef CONFIG_CGROUP_MEM_RES_CTLR /* memcg uses this to do batch job */
+ #ifdef CONFIG_MEMCG /* memcg uses this to do batch job */
struct memcg_batch_info {
-diff --git a/include/trace/events/hist.h b/include/trace/events/hist.h
-new file mode 100644
-index 0000000..28646db
+Index: linux-stable/include/trace/events/hist.h
+===================================================================
--- /dev/null
-+++ b/include/trace/events/hist.h
++++ linux-stable/include/trace/events/hist.h
@@ -0,0 +1,69 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM hist
@@ -312,12 +321,11 @@
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
-diff --git a/include/trace/events/latency_hist.h b/include/trace/events/latency_hist.h
-new file mode 100644
-index 0000000..d6b5d77
+Index: linux-stable/include/trace/events/latency_hist.h
+===================================================================
--- /dev/null
-+++ b/include/trace/events/latency_hist.h
-@@ -0,0 +1,30 @@
++++ linux-stable/include/trace/events/latency_hist.h
+@@ -0,0 +1,29 @@
+#ifndef _LATENCY_HIST_H
+#define _LATENCY_HIST_H
+
@@ -347,11 +355,10 @@
+}
+
+#endif /* _LATENCY_HIST_H */
-+
-diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
-index ae34bf5..1a3695e 100644
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
+Index: linux-stable/kernel/hrtimer.c
+===================================================================
+--- linux-stable.orig/kernel/hrtimer.c
++++ linux-stable/kernel/hrtimer.c
@@ -49,6 +49,7 @@
#include <asm/uaccess.h>
@@ -360,7 +367,25 @@
/*
* The timer bases:
-@@ -1236,6 +1237,8 @@ static void __run_hrtimer(struct hrtimer *timer, ktime_t *now)
+@@ -983,6 +984,17 @@ int __hrtimer_start_range_ns(struct hrti
+ #endif
+ }
+
++#ifdef CONFIG_MISSED_TIMER_OFFSETS_HIST
++ {
++ ktime_t now = new_base->get_time();
++
++ if (ktime_to_ns(tim) < ktime_to_ns(now))
++ timer->praecox = now;
++ else
++ timer->praecox = ktime_set(0, 0);
++ }
++#endif
++
+ hrtimer_set_expires_range_ns(timer, tim, delta_ns);
+
+ timer_stats_hrtimer_set_start_info(timer);
+@@ -1246,6 +1258,8 @@ static void __run_hrtimer(struct hrtimer
#ifdef CONFIG_HIGH_RES_TIMERS
@@ -369,13 +394,14 @@
/*
* High resolution timer interrupt
* Called with interrupts disabled
-@@ -1280,6 +1283,14 @@ retry:
+@@ -1289,6 +1303,15 @@ retry:
timer = container_of(node, struct hrtimer, node);
+ trace_hrtimer_interrupt(raw_smp_processor_id(),
-+ ktime_to_ns(ktime_sub(
-+ hrtimer_get_expires(timer), basenow)),
++ ktime_to_ns(ktime_sub(ktime_to_ns(timer->praecox) ?
++ timer->praecox : hrtimer_get_expires(timer),
++ basenow)),
+ current,
+ timer->function == hrtimer_wakeup ?
+ container_of(timer, struct hrtimer_sleeper,
@@ -384,11 +410,11 @@
/*
* The immediate goal for using the softexpires is
* minimizing wakeups, not running timers at the
-diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
-index a1d2849..23c737e 100644
---- a/kernel/trace/Kconfig
-+++ b/kernel/trace/Kconfig
-@@ -192,6 +192,24 @@ config IRQSOFF_TRACER
+Index: linux-stable/kernel/trace/Kconfig
+===================================================================
+--- linux-stable.orig/kernel/trace/Kconfig
++++ linux-stable/kernel/trace/Kconfig
+@@ -191,6 +191,24 @@ config IRQSOFF_TRACER
enabled. This option and the preempt-off timing option can be
used together or separately.)
@@ -413,7 +439,7 @@
config PREEMPT_TRACER
bool "Preemption-off Latency Tracer"
default n
-@@ -214,6 +232,24 @@ config PREEMPT_TRACER
+@@ -213,6 +231,24 @@ config PREEMPT_TRACER
enabled. This option and the irqs-off timing option can be
used together or separately.)
@@ -438,7 +464,7 @@
config SCHED_TRACER
bool "Scheduling Latency Tracer"
select GENERIC_TRACER
-@@ -223,6 +259,74 @@ config SCHED_TRACER
+@@ -222,6 +258,74 @@ config SCHED_TRACER
This tracer tracks the latency of the highest priority task
to be scheduled in, starting from the point it has woken up.
@@ -513,11 +539,11 @@
config ENABLE_DEFAULT_TRACERS
bool "Trace process context switches and events"
depends on !GENERIC_TRACER
-diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile
-index 5f39a07..108a387 100644
---- a/kernel/trace/Makefile
-+++ b/kernel/trace/Makefile
-@@ -36,6 +36,10 @@ obj-$(CONFIG_FUNCTION_TRACER) += trace_functions.o
+Index: linux-stable/kernel/trace/Makefile
+===================================================================
+--- linux-stable.orig/kernel/trace/Makefile
++++ linux-stable/kernel/trace/Makefile
+@@ -36,6 +36,10 @@ obj-$(CONFIG_FUNCTION_TRACER) += trace_f
obj-$(CONFIG_IRQSOFF_TRACER) += trace_irqsoff.o
obj-$(CONFIG_PREEMPT_TRACER) += trace_irqsoff.o
obj-$(CONFIG_SCHED_TRACER) += trace_sched_wakeup.o
@@ -528,12 +554,11 @@
obj-$(CONFIG_NOP_TRACER) += trace_nop.o
obj-$(CONFIG_STACK_TRACER) += trace_stack.o
obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o
-diff --git a/kernel/trace/latency_hist.c b/kernel/trace/latency_hist.c
-new file mode 100644
-index 0000000..9d49fcb
+Index: linux-stable/kernel/trace/latency_hist.c
+===================================================================
--- /dev/null
-+++ b/kernel/trace/latency_hist.c
-@@ -0,0 +1,1170 @@
++++ linux-stable/kernel/trace/latency_hist.c
+@@ -0,0 +1,1176 @@
+/*
+ * kernel/trace/latency_hist.c
+ *
@@ -563,6 +588,8 @@
+#include "trace.h"
+#include <trace/events/sched.h>
+
++#define NSECS_PER_USECS 1000L
++
+#define CREATE_TRACE_POINTS
+#include <trace/events/hist.h>
+
@@ -582,11 +609,11 @@
+struct hist_data {
+ atomic_t hist_mode; /* 0 log, 1 don't log */
+ long offset; /* set it to MAX_ENTRY_NUM/2 for a bipolar scale */
-+ unsigned long min_lat;
-+ unsigned long max_lat;
++ long min_lat;
++ long max_lat;
+ unsigned long long below_hist_bound_samples;
+ unsigned long long above_hist_bound_samples;
-+ unsigned long long accumulate_lat;
++ long long accumulate_lat;
+ unsigned long long total_samples;
+ unsigned long long hist_array[MAX_ENTRY_NUM];
+};
@@ -688,8 +715,8 @@
+static DEFINE_PER_CPU(struct maxlatproc_data, timerandwakeup_maxlatproc);
+#endif
+
-+void notrace latency_hist(int latency_type, int cpu, unsigned long latency,
-+ unsigned long timeroffset, cycle_t stop,
++void notrace latency_hist(int latency_type, int cpu, long latency,
++ long timeroffset, cycle_t stop,
+ struct task_struct *p)
+{
+ struct hist_data *my_hist;
@@ -760,7 +787,7 @@
+ my_hist->hist_array[latency]++;
+
+ if (unlikely(latency > my_hist->max_lat ||
-+ my_hist->min_lat == ULONG_MAX)) {
++ my_hist->min_lat == LONG_MAX)) {
+#if defined(CONFIG_WAKEUP_LATENCY_HIST) || \
+ defined(CONFIG_MISSED_TIMER_OFFSETS_HIST)
+ if (latency_type == WAKEUP_LATENCY ||
@@ -799,15 +826,14 @@
+ atomic_dec(&my_hist->hist_mode);
+
+ if (likely(my_hist->total_samples)) {
-+ unsigned long avg = (unsigned long)
-+ div64_u64(my_hist->accumulate_lat,
++ long avg = (long) div64_s64(my_hist->accumulate_lat,
+ my_hist->total_samples);
+ snprintf(minstr, sizeof(minstr), "%ld",
-+ (long) my_hist->min_lat - my_hist->offset);
++ my_hist->min_lat - my_hist->offset);
+ snprintf(avgstr, sizeof(avgstr), "%ld",
-+ (long) avg - my_hist->offset);
++ avg - my_hist->offset);
+ snprintf(maxstr, sizeof(maxstr), "%ld",
-+ (long) my_hist->max_lat - my_hist->offset);
++ my_hist->max_lat - my_hist->offset);
+ } else {
+ strcpy(minstr, "<undef>");
+ strcpy(avgstr, minstr);
@@ -912,10 +938,10 @@
+ memset(hist->hist_array, 0, sizeof(hist->hist_array));
+ hist->below_hist_bound_samples = 0ULL;
+ hist->above_hist_bound_samples = 0ULL;
-+ hist->min_lat = ULONG_MAX;
-+ hist->max_lat = 0UL;
++ hist->min_lat = LONG_MAX;
++ hist->max_lat = LONG_MIN;
+ hist->total_samples = 0ULL;
-+ hist->accumulate_lat = 0ULL;
++ hist->accumulate_lat = 0LL;
+
+ atomic_inc(&hist->hist_mode);
+}
@@ -1326,9 +1352,9 @@
+
+ stop = ftrace_now(cpu);
+ time_set++;
-+ if (start && stop >= start) {
-+ unsigned long latency =
-+ nsecs_to_usecs(stop - start);
++ if (start) {
++ long latency = ((long) (stop - start)) /
++ NSECS_PER_USECS;
+
+ latency_hist(IRQSOFF_LATENCY, cpu, latency, 0,
+ stop, NULL);
@@ -1344,9 +1370,9 @@
+
+ if (!(time_set++))
+ stop = ftrace_now(cpu);
-+ if (start && stop >= start) {
-+ unsigned long latency =
-+ nsecs_to_usecs(stop - start);
++ if (start) {
++ long latency = ((long) (stop - start)) /
++ NSECS_PER_USECS;
+
+ latency_hist(PREEMPTOFF_LATENCY, cpu, latency,
+ 0, stop, NULL);
@@ -1363,9 +1389,10 @@
+
+ if (!time_set)
+ stop = ftrace_now(cpu);
-+ if (start && stop >= start) {
-+ unsigned long latency =
-+ nsecs_to_usecs(stop - start);
++ if (start) {
++ long latency = ((long) (stop - start)) /
++ NSECS_PER_USECS;
++
+ latency_hist(PREEMPTIRQSOFF_LATENCY, cpu,
+ latency, 0, stop, NULL);
+ }
@@ -1444,7 +1471,7 @@
+{
+ unsigned long flags;
+ int cpu = task_cpu(next);
-+ unsigned long latency;
++ long latency;
+ cycle_t stop;
+ struct task_struct *cpu_wakeup_task;
+
@@ -1469,13 +1496,17 @@
+ goto out;
+ }
+
++ if (current->prio == cpu_wakeup_task->prio)
++ per_cpu(wakeup_sharedprio, cpu) = 1;
++
+ /*
+ * The task we are waiting for is about to be switched to.
+ * Calculate latency and store it in histogram.
+ */
+ stop = ftrace_now(raw_smp_processor_id());
+
-+ latency = nsecs_to_usecs(stop - next->preempt_timestamp_hist);
++ latency = ((long) (stop - next->preempt_timestamp_hist)) /
++ NSECS_PER_USECS;
+
+ if (per_cpu(wakeup_sharedprio, cpu)) {
+ latency_hist(WAKEUP_LATENCY_SHAREDPRIO, cpu, latency, 0, stop,
@@ -1511,7 +1542,7 @@
+ (task->prio < curr->prio ||
+ (task->prio == curr->prio &&
+ !cpumask_test_cpu(cpu, &task->cpus_allowed)))) {
-+ unsigned long latency;
++ long latency;
+ cycle_t now;
+
+ if (missed_timer_offsets_pid) {
@@ -1521,7 +1552,7 @@
+ }
+
+ now = ftrace_now(cpu);
-+ latency = (unsigned long) div_s64(-latency_ns, 1000);
++ latency = (long) div_s64(-latency_ns, NSECS_PER_USECS);
+ latency_hist(MISSED_TIMER_OFFSETS, cpu, latency, latency, now,
+ task);
+#ifdef CONFIG_WAKEUP_LATENCY_HIST
@@ -1562,7 +1593,7 @@
+ &per_cpu(irqsoff_hist, i), &latency_hist_fops);
+ my_hist = &per_cpu(irqsoff_hist, i);
+ atomic_set(&my_hist->hist_mode, 1);
-+ my_hist->min_lat = 0xFFFFFFFFUL;
++ my_hist->min_lat = LONG_MAX;
+ }
+ entry = debugfs_create_file("reset", 0644, dentry,
+ (void *)IRQSOFF_LATENCY, &latency_hist_reset_fops);
@@ -1577,7 +1608,7 @@
+ &per_cpu(preemptoff_hist, i), &latency_hist_fops);
+ my_hist = &per_cpu(preemptoff_hist, i);
+ atomic_set(&my_hist->hist_mode, 1);
-+ my_hist->min_lat = 0xFFFFFFFFUL;
++ my_hist->min_lat = LONG_MAX;
+ }
+ entry = debugfs_create_file("reset", 0644, dentry,
+ (void *)PREEMPTOFF_LATENCY, &latency_hist_reset_fops);
@@ -1592,7 +1623,7 @@
+ &per_cpu(preemptirqsoff_hist, i), &latency_hist_fops);
+ my_hist = &per_cpu(preemptirqsoff_hist, i);
+ atomic_set(&my_hist->hist_mode, 1);
-+ my_hist->min_lat = 0xFFFFFFFFUL;
++ my_hist->min_lat = LONG_MAX;
+ }
+ entry = debugfs_create_file("reset", 0644, dentry,
+ (void *)PREEMPTIRQSOFF_LATENCY, &latency_hist_reset_fops);
@@ -1617,14 +1648,14 @@
+ &latency_hist_fops);
+ my_hist = &per_cpu(wakeup_latency_hist, i);
+ atomic_set(&my_hist->hist_mode, 1);
-+ my_hist->min_lat = 0xFFFFFFFFUL;
++ my_hist->min_lat = LONG_MAX;
+
+ entry = debugfs_create_file(name, 0444, dentry_sharedprio,
+ &per_cpu(wakeup_latency_hist_sharedprio, i),
+ &latency_hist_fops);
+ my_hist = &per_cpu(wakeup_latency_hist_sharedprio, i);
+ atomic_set(&my_hist->hist_mode, 1);
-+ my_hist->min_lat = 0xFFFFFFFFUL;
++ my_hist->min_lat = LONG_MAX;
+
+ sprintf(name, cpufmt_maxlatproc, i);
+
@@ -1658,7 +1689,7 @@
+ &per_cpu(missed_timer_offsets, i), &latency_hist_fops);
+ my_hist = &per_cpu(missed_timer_offsets, i);
+ atomic_set(&my_hist->hist_mode, 1);
-+ my_hist->min_lat = 0xFFFFFFFFUL;
++ my_hist->min_lat = LONG_MAX;
+
+ sprintf(name, cpufmt_maxlatproc, i);
+ mp = &per_cpu(missed_timer_offsets_maxlatproc, i);
@@ -1686,7 +1717,7 @@
+ &latency_hist_fops);
+ my_hist = &per_cpu(timerandwakeup_latency_hist, i);
+ atomic_set(&my_hist->hist_mode, 1);
-+ my_hist->min_lat = 0xFFFFFFFFUL;
++ my_hist->min_lat = LONG_MAX;
+
+ sprintf(name, cpufmt_maxlatproc, i);
+ mp = &per_cpu(timerandwakeup_maxlatproc, i);
@@ -1704,10 +1735,10 @@
+}
+
+__initcall(latency_hist_init);
-diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
-index 99d20e9..384f603 100644
---- a/kernel/trace/trace_irqsoff.c
-+++ b/kernel/trace/trace_irqsoff.c
+Index: linux-stable/kernel/trace/trace_irqsoff.c
+===================================================================
+--- linux-stable.orig/kernel/trace/trace_irqsoff.c
++++ linux-stable/kernel/trace/trace_irqsoff.c
@@ -17,6 +17,7 @@
#include <linux/fs.h>
@@ -1730,7 +1761,7 @@
if (preempt_trace() || irq_trace())
stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
}
-@@ -451,6 +454,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings);
+@@ -451,6 +454,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings)
#ifdef CONFIG_PROVE_LOCKING
void time_hardirqs_on(unsigned long a0, unsigned long a1)
{
@@ -1738,7 +1769,7 @@
if (!preempt_trace() && irq_trace())
stop_critical_timing(a0, a1);
}
-@@ -459,6 +463,7 @@ void time_hardirqs_off(unsigned long a0, unsigned long a1)
+@@ -459,6 +463,7 @@ void time_hardirqs_off(unsigned long a0,
{
if (!preempt_trace() && irq_trace())
start_critical_timing(a0, a1);
@@ -1746,7 +1777,7 @@
}
#else /* !CONFIG_PROVE_LOCKING */
-@@ -484,6 +489,7 @@ inline void print_irqtrace_events(struct task_struct *curr)
+@@ -484,6 +489,7 @@ inline void print_irqtrace_events(struct
*/
void trace_hardirqs_on(void)
{
@@ -1768,7 +1799,7 @@
if (!preempt_trace() && irq_trace())
stop_critical_timing(CALLER_ADDR0, caller_addr);
}
-@@ -507,6 +515,7 @@ void trace_hardirqs_off_caller(unsigned long caller_addr)
+@@ -507,6 +515,7 @@ void trace_hardirqs_off_caller(unsigned
{
if (!preempt_trace() && irq_trace())
start_critical_timing(CALLER_ADDR0, caller_addr);
@@ -1776,7 +1807,7 @@
}
EXPORT_SYMBOL(trace_hardirqs_off_caller);
-@@ -516,12 +525,14 @@ EXPORT_SYMBOL(trace_hardirqs_off_caller);
+@@ -516,12 +525,14 @@ EXPORT_SYMBOL(trace_hardirqs_off_caller)
#ifdef CONFIG_PREEMPT_TRACER
void trace_preempt_on(unsigned long a0, unsigned long a1)
{
Added: dists/trunk/linux/debian/patches/features/all/rt/lglocks-rt.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/lglocks-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,168 @@
+Subject: lglocks-rt.patch
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Wed, 15 Jun 2011 11:02:21 +0200
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ include/linux/lglock.h | 13 ++++++++++-
+ kernel/lglock.c | 54 ++++++++++++++++++++++++++++++++-----------------
+ 2 files changed, 48 insertions(+), 19 deletions(-)
+
+Index: linux-stable/include/linux/lglock.h
+===================================================================
+--- linux-stable.orig/include/linux/lglock.h
++++ linux-stable/include/linux/lglock.h
+@@ -49,18 +49,29 @@
+ #endif
+
+ struct lglock {
++#ifndef CONFIG_PREEMPT_RT_FULL
+ arch_spinlock_t __percpu *lock;
++#else
++ struct rt_mutex __percpu *lock;
++#endif
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+ struct lock_class_key lock_key;
+ struct lockdep_map lock_dep_map;
+ #endif
+ };
+
+-#define DEFINE_LGLOCK(name) \
++#ifndef CONFIG_PREEMPT_RT_FULL
++# define DEFINE_LGLOCK(name) \
+ DEFINE_LGLOCK_LOCKDEP(name); \
+ DEFINE_PER_CPU(arch_spinlock_t, name ## _lock) \
+ = __ARCH_SPIN_LOCK_UNLOCKED; \
+ struct lglock name = { .lock = &name ## _lock }
++#else
++# define DEFINE_LGLOCK(name) \
++ DEFINE_LGLOCK_LOCKDEP(name); \
++ DEFINE_PER_CPU(struct rt_mutex, name ## _lock); \
++ struct lglock name = { .lock = &name ## _lock }
++#endif
+
+ void lg_lock_init(struct lglock *lg, char *name);
+ void lg_local_lock(struct lglock *lg);
+Index: linux-stable/kernel/lglock.c
+===================================================================
+--- linux-stable.orig/kernel/lglock.c
++++ linux-stable/kernel/lglock.c
+@@ -4,6 +4,15 @@
+ #include <linux/cpu.h>
+ #include <linux/string.h>
+
++#ifndef CONFIG_PREEMPT_RT_FULL
++# define lg_lock_ptr arch_spinlock_t
++# define lg_do_lock(l) arch_spin_lock(l)
++# define lg_do_unlock(l) arch_spin_unlock(l)
++#else
++# define lg_lock_ptr struct rt_mutex
++# define lg_do_lock(l) __rt_spin_lock(l)
++# define lg_do_unlock(l) __rt_spin_unlock(l)
++#endif
+ /*
+ * Note there is no uninit, so lglocks cannot be defined in
+ * modules (but it's fine to use them from there)
+@@ -12,51 +21,60 @@
+
+ void lg_lock_init(struct lglock *lg, char *name)
+ {
++#ifdef CONFIG_PREEMPT_RT_FULL
++ int i;
++
++ for_each_possible_cpu(i) {
++ struct rt_mutex *lock = per_cpu_ptr(lg->lock, i);
++
++ rt_mutex_init(lock);
++ }
++#endif
+ LOCKDEP_INIT_MAP(&lg->lock_dep_map, name, &lg->lock_key, 0);
+ }
+ EXPORT_SYMBOL(lg_lock_init);
+
+ void lg_local_lock(struct lglock *lg)
+ {
+- arch_spinlock_t *lock;
++ lg_lock_ptr *lock;
+
+- preempt_disable();
++ migrate_disable();
+ rwlock_acquire_read(&lg->lock_dep_map, 0, 0, _RET_IP_);
+ lock = this_cpu_ptr(lg->lock);
+- arch_spin_lock(lock);
++ lg_do_lock(lock);
+ }
+ EXPORT_SYMBOL(lg_local_lock);
+
+ void lg_local_unlock(struct lglock *lg)
+ {
+- arch_spinlock_t *lock;
++ lg_lock_ptr *lock;
+
+ rwlock_release(&lg->lock_dep_map, 1, _RET_IP_);
+ lock = this_cpu_ptr(lg->lock);
+- arch_spin_unlock(lock);
+- preempt_enable();
++ lg_do_unlock(lock);
++ migrate_enable();
+ }
+ EXPORT_SYMBOL(lg_local_unlock);
+
+ void lg_local_lock_cpu(struct lglock *lg, int cpu)
+ {
+- arch_spinlock_t *lock;
++ lg_lock_ptr *lock;
+
+- preempt_disable();
++ preempt_disable_nort();
+ rwlock_acquire_read(&lg->lock_dep_map, 0, 0, _RET_IP_);
+ lock = per_cpu_ptr(lg->lock, cpu);
+- arch_spin_lock(lock);
++ lg_do_lock(lock);
+ }
+ EXPORT_SYMBOL(lg_local_lock_cpu);
+
+ void lg_local_unlock_cpu(struct lglock *lg, int cpu)
+ {
+- arch_spinlock_t *lock;
++ lg_lock_ptr *lock;
+
+ rwlock_release(&lg->lock_dep_map, 1, _RET_IP_);
+ lock = per_cpu_ptr(lg->lock, cpu);
+- arch_spin_unlock(lock);
+- preempt_enable();
++ lg_do_unlock(lock);
++ preempt_enable_nort();
+ }
+ EXPORT_SYMBOL(lg_local_unlock_cpu);
+
+@@ -64,12 +82,12 @@ void lg_global_lock(struct lglock *lg)
+ {
+ int i;
+
+- preempt_disable();
++ preempt_disable_nort();
+ rwlock_acquire(&lg->lock_dep_map, 0, 0, _RET_IP_);
+ for_each_possible_cpu(i) {
+- arch_spinlock_t *lock;
++ lg_lock_ptr *lock;
+ lock = per_cpu_ptr(lg->lock, i);
+- arch_spin_lock(lock);
++ lg_do_lock(lock);
+ }
+ }
+ EXPORT_SYMBOL(lg_global_lock);
+@@ -80,10 +98,10 @@ void lg_global_unlock(struct lglock *lg)
+
+ rwlock_release(&lg->lock_dep_map, 1, _RET_IP_);
+ for_each_possible_cpu(i) {
+- arch_spinlock_t *lock;
++ lg_lock_ptr *lock;
+ lock = per_cpu_ptr(lg->lock, i);
+- arch_spin_unlock(lock);
++ lg_do_unlock(lock);
+ }
+- preempt_enable();
++ preempt_enable_nort();
+ }
+ EXPORT_SYMBOL(lg_global_unlock);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/list-add-list-last-entry.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0042-list-add-list-last-entry.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0042-list-add-list-last-entry.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/list-add-list-last-entry.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 94ad3dcec7e5a27500e28453ff4e56f36d0b7f59 Mon Sep 17 00:00:00 2001
+Subject: list-add-list-last-entry.patch
From: Peter Zijlstra <peterz at infradead.org>
Date: Tue, 21 Jun 2011 11:22:36 +0200
-Subject: [042/256] list-add-list-last-entry.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/list.h | 11 +++++++++++
1 file changed, 11 insertions(+)
-diff --git a/include/linux/list.h b/include/linux/list.h
-index cc6d2aa..7a9851b 100644
---- a/include/linux/list.h
-+++ b/include/linux/list.h
-@@ -362,6 +362,17 @@ static inline void list_splice_tail_init(struct list_head *list,
+Index: linux-stable/include/linux/list.h
+===================================================================
+--- linux-stable.orig/include/linux/list.h
++++ linux-stable/include/linux/list.h
+@@ -362,6 +362,17 @@ static inline void list_splice_tail_init
list_entry((ptr)->next, type, member)
/**
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/local-irq-rt-depending-variants.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0062-rt-local_irq_-variants-depending-on-RT-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0062-rt-local_irq_-variants-depending-on-RT-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/local-irq-rt-depending-variants.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,23 +1,23 @@
-From cdee38a4db2ab8e78e70a2e7fab7a381e9a1c19b Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 21 Jul 2009 22:34:14 +0200
-Subject: [062/256] rt: local_irq_* variants depending on RT/!RT
+Subject: rt: local_irq_* variants depending on RT/!RT
Add local_irq_*_(no)rt variant which are mainly used to break
interrupt disabled sections on PREEMPT_RT or to explicitely disable
interrupts on PREEMPT_RT.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/interrupt.h | 2 +-
include/linux/irqflags.h | 19 +++++++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
-diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index 02c3c4f..d2cc272 100644
---- a/include/linux/interrupt.h
-+++ b/include/linux/interrupt.h
-@@ -217,7 +217,7 @@ extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id);
+Index: linux-stable/include/linux/interrupt.h
+===================================================================
+--- linux-stable.orig/include/linux/interrupt.h
++++ linux-stable/include/linux/interrupt.h
+@@ -211,7 +211,7 @@ extern void devm_free_irq(struct device
#ifdef CONFIG_LOCKDEP
# define local_irq_enable_in_hardirq() do { } while (0)
#else
@@ -26,10 +26,10 @@
#endif
extern void disable_irq_nosync(unsigned int irq);
-diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h
-index d176d65..37b13c4 100644
---- a/include/linux/irqflags.h
-+++ b/include/linux/irqflags.h
+Index: linux-stable/include/linux/irqflags.h
+===================================================================
+--- linux-stable.orig/include/linux/irqflags.h
++++ linux-stable/include/linux/irqflags.h
@@ -147,4 +147,23 @@
#endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/local-var.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0087-local-var.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0087-local-var.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/local-var.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 837bb14712ddecfcbb5f97570c5f1fac911f487c Mon Sep 17 00:00:00 2001
+Subject: local-var.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 24 Jun 2011 18:40:37 +0200
-Subject: [087/256] local-var.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/percpu.h | 5 +++++
1 file changed, 5 insertions(+)
-diff --git a/include/linux/percpu.h b/include/linux/percpu.h
-index 21638ae..3d13ce0 100644
---- a/include/linux/percpu.h
-+++ b/include/linux/percpu.h
+Index: linux-stable/include/linux/percpu.h
+===================================================================
+--- linux-stable.orig/include/linux/percpu.h
++++ linux-stable/include/linux/percpu.h
@@ -48,6 +48,11 @@
preempt_enable(); \
} while (0)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/local-vars-migrate-disable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0169-local-vars-migrate-disable.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0169-local-vars-migrate-disable.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/local-vars-migrate-disable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 33500c174f6780a82e62ac6067e4590e0206cdb5 Mon Sep 17 00:00:00 2001
+Subject: local-vars-migrate-disable.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 28 Jun 2011 20:42:16 +0200
-Subject: [169/256] local-vars-migrate-disable.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/percpu.h | 28 ++++++++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
-diff --git a/include/linux/percpu.h b/include/linux/percpu.h
-index 3d13ce0..5a56f183 100644
---- a/include/linux/percpu.h
-+++ b/include/linux/percpu.h
+Index: linux-stable/include/linux/percpu.h
+===================================================================
+--- linux-stable.orig/include/linux/percpu.h
++++ linux-stable/include/linux/percpu.h
@@ -48,10 +48,30 @@
preempt_enable(); \
} while (0)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/localversion.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0056-localversion.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0056-localversion.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/localversion.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From baf31d140dfceb0b856805d9b715efddc084054d Mon Sep 17 00:00:00 2001
+Subject: localversion.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Fri, 8 Jul 2011 20:25:16 +0200
-Subject: [056/256] localversion.patch
+Date: Fri, 08 Jul 2011 20:25:16 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
@@ -9,12 +8,10 @@
---
localversion-rt | 1 +
1 file changed, 1 insertion(+)
- create mode 100644 localversion-rt
-diff --git a/localversion-rt b/localversion-rt
-new file mode 100644
-index 0000000..700c857
+Index: linux-stable/localversion-rt
+===================================================================
--- /dev/null
-+++ b/localversion-rt
++++ linux-stable/localversion-rt
@@ -0,0 +1 @@
-+-rt8
++-rt6
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/lockdep-no-softirq-accounting-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0159-lockdep-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0159-lockdep-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/lockdep-no-softirq-accounting-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 029ada8a8245ee5fdb3124448b95f7114f8cb2b6 Mon Sep 17 00:00:00 2001
+Subject: lockdep-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 18:51:23 +0200
-Subject: [159/256] lockdep-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,10 +8,10 @@
kernel/lockdep.c | 2 ++
2 files changed, 9 insertions(+), 3 deletions(-)
-diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h
-index 37b13c4..a52b35d 100644
---- a/include/linux/irqflags.h
-+++ b/include/linux/irqflags.h
+Index: linux-stable/include/linux/irqflags.h
+===================================================================
+--- linux-stable.orig/include/linux/irqflags.h
++++ linux-stable/include/linux/irqflags.h
@@ -25,8 +25,6 @@
# define trace_softirqs_enabled(p) ((p)->softirqs_enabled)
# define trace_hardirq_enter() do { current->hardirq_context++; } while (0)
@@ -39,11 +38,11 @@
#endif
#if defined(CONFIG_IRQSOFF_TRACER) || \
-diff --git a/kernel/lockdep.c b/kernel/lockdep.c
-index ea9ee45..6537c1c 100644
---- a/kernel/lockdep.c
-+++ b/kernel/lockdep.c
-@@ -3495,6 +3495,7 @@ static void check_flags(unsigned long flags)
+Index: linux-stable/kernel/lockdep.c
+===================================================================
+--- linux-stable.orig/kernel/lockdep.c
++++ linux-stable/kernel/lockdep.c
+@@ -3495,6 +3495,7 @@ static void check_flags(unsigned long fl
}
}
@@ -51,7 +50,7 @@
/*
* We dont accurately track softirq state in e.g.
* hardirq contexts (such as on 4KSTACKS), so only
-@@ -3509,6 +3510,7 @@ static void check_flags(unsigned long flags)
+@@ -3509,6 +3510,7 @@ static void check_flags(unsigned long fl
DEBUG_LOCKS_WARN_ON(!current->softirqs_enabled);
}
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/lockdep-selftest-convert-spinlock-to-raw-spinlock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0249-lockdep-Selftest-convert-spinlock-to-raw-spinlock.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0249-lockdep-Selftest-convert-spinlock-to-raw-spinlock.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/lockdep-selftest-convert-spinlock-to-raw-spinlock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,8 @@
-From 396350c9bf8c577fc3b8ca8009ad73bfa720380a Mon Sep 17 00:00:00 2001
-From: Yong Zhang <yong.zhang at windriver.com>
+Subject: lockdep: Selftest: convert spinlock to raw spinlock
+From: Yong Zhang <yong.zhang0 at gmail.com>
Date: Mon, 16 Apr 2012 15:01:55 +0800
-Subject: [249/256] lockdep: Selftest: convert spinlock to raw spinlock
+
+From: Yong Zhang <yong.zhang at windriver.com>
spinlock is sleepable on -rt and can not be used in
interrupt context.
@@ -14,11 +15,11 @@
lib/locking-selftest.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
-diff --git a/lib/locking-selftest.c b/lib/locking-selftest.c
-index 7aae0f2..c3eb261 100644
---- a/lib/locking-selftest.c
-+++ b/lib/locking-selftest.c
-@@ -47,10 +47,10 @@ __setup("debug_locks_verbose=", setup_debug_locks_verbose);
+Index: linux-stable/lib/locking-selftest.c
+===================================================================
+--- linux-stable.orig/lib/locking-selftest.c
++++ linux-stable/lib/locking-selftest.c
+@@ -47,10 +47,10 @@ __setup("debug_locks_verbose=", setup_de
* Normal standalone locks, for the circular and irq-context
* dependency tests:
*/
@@ -80,7 +81,7 @@
#define WL(x) write_lock(&rwlock_##x)
#define WU(x) write_unlock(&rwlock_##x)
-@@ -911,7 +911,7 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion_soft)
+@@ -911,7 +911,7 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_read_
#define I2(x) \
do { \
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0250-lockdep-Selftest-Only-do-hardirq-context-test-for-ra.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0250-lockdep-Selftest-Only-do-hardirq-context-test-for-ra.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,8 @@
-From ddaed6a3e4ed4924642d2ca42cc21011f0c4a2a8 Mon Sep 17 00:00:00 2001
-From: Yong Zhang <yong.zhang at windriver.com>
+Subject: lockdep: Selftest: Only do hardirq context test for raw spinlock
+From: Yong Zhang <yong.zhang0 at gmail.com>
Date: Mon, 16 Apr 2012 15:01:56 +0800
-Subject: [250/256] lockdep: Selftest: Only do hardirq context test for raw
- spinlock
+
+From: Yong Zhang <yong.zhang at windriver.com>
On -rt there is no softirq context any more and rwlock is sleepable,
disable softirq context test and rwlock+irq test.
@@ -15,10 +15,10 @@
lib/locking-selftest.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
-diff --git a/lib/locking-selftest.c b/lib/locking-selftest.c
-index c3eb261..23b8564 100644
---- a/lib/locking-selftest.c
-+++ b/lib/locking-selftest.c
+Index: linux-stable/lib/locking-selftest.c
+===================================================================
+--- linux-stable.orig/lib/locking-selftest.c
++++ linux-stable/lib/locking-selftest.c
@@ -1175,6 +1175,7 @@ void locking_selftest(void)
printk(" --------------------------------------------------------------------------\n");
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/locking-various-init-fixes.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0052-locking-various-init-fixes.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0052-locking-various-init-fixes.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/locking-various-init-fixes.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,21 @@
-From 7532d53febc3ff8b396d8c78a76c52ce99461b19 Mon Sep 17 00:00:00 2001
+Subject: locking-various-init-fixes.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 21:25:03 +0200
-Subject: [052/256] locking-various-init-fixes.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- drivers/char/random.c | 6 +++---
- drivers/usb/gadget/ci13xxx_udc.c | 2 +-
- fs/file.c | 2 +-
- include/linux/idr.h | 2 +-
- kernel/cred.c | 2 +-
+ drivers/char/random.c | 6 +++---
+ drivers/usb/chipidea/debug.c | 2 +-
+ fs/file.c | 2 +-
+ include/linux/idr.h | 2 +-
+ kernel/cred.c | 2 +-
5 files changed, 7 insertions(+), 7 deletions(-)
-diff --git a/drivers/char/random.c b/drivers/char/random.c
-index 1e37cf4..85b9419b1 100644
---- a/drivers/char/random.c
-+++ b/drivers/char/random.c
-@@ -433,7 +433,7 @@ static struct entropy_store input_pool = {
+Index: linux-stable/drivers/char/random.c
+===================================================================
+--- linux-stable.orig/drivers/char/random.c
++++ linux-stable/drivers/char/random.c
+@@ -448,7 +448,7 @@ static struct entropy_store input_pool =
.poolinfo = &poolinfo_table[0],
.name = "input",
.limit = 1,
@@ -25,7 +24,7 @@
.pool = input_pool_data
};
-@@ -442,7 +442,7 @@ static struct entropy_store blocking_pool = {
+@@ -457,7 +457,7 @@ static struct entropy_store blocking_poo
.name = "blocking",
.limit = 1,
.pull = &input_pool,
@@ -34,7 +33,7 @@
.pool = blocking_pool_data
};
-@@ -450,7 +450,7 @@ static struct entropy_store nonblocking_pool = {
+@@ -465,7 +465,7 @@ static struct entropy_store nonblocking_
.poolinfo = &poolinfo_table[1],
.name = "nonblocking",
.pull = &input_pool,
@@ -43,11 +42,11 @@
.pool = nonblocking_pool_data
};
-diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c
-index 243ef1a..238372e 100644
---- a/drivers/usb/gadget/ci13xxx_udc.c
-+++ b/drivers/usb/gadget/ci13xxx_udc.c
-@@ -834,7 +834,7 @@ static struct {
+Index: linux-stable/drivers/usb/chipidea/debug.c
+===================================================================
+--- linux-stable.orig/drivers/usb/chipidea/debug.c
++++ linux-stable/drivers/usb/chipidea/debug.c
+@@ -225,7 +225,7 @@ static struct {
} dbg_data = {
.idx = 0,
.tty = 0,
@@ -56,10 +55,10 @@
};
/**
-diff --git a/fs/file.c b/fs/file.c
-index ba3f605..6f176f5 100644
---- a/fs/file.c
-+++ b/fs/file.c
+Index: linux-stable/fs/file.c
+===================================================================
+--- linux-stable.orig/fs/file.c
++++ linux-stable/fs/file.c
@@ -421,7 +421,7 @@ struct files_struct init_files = {
.close_on_exec = init_files.close_on_exec_init,
.open_fds = init_files.open_fds_init,
@@ -69,10 +68,10 @@
};
/*
-diff --git a/include/linux/idr.h b/include/linux/idr.h
-index 255491c..4eaacf0 100644
---- a/include/linux/idr.h
-+++ b/include/linux/idr.h
+Index: linux-stable/include/linux/idr.h
+===================================================================
+--- linux-stable.orig/include/linux/idr.h
++++ linux-stable/include/linux/idr.h
@@ -136,7 +136,7 @@ struct ida {
struct ida_bitmap *free_bitmap;
};
@@ -82,10 +81,10 @@
#define DEFINE_IDA(name) struct ida name = IDA_INIT(name)
int ida_pre_get(struct ida *ida, gfp_t gfp_mask);
-diff --git a/kernel/cred.c b/kernel/cred.c
-index e70683d..fed7c3f 100644
---- a/kernel/cred.c
-+++ b/kernel/cred.c
+Index: linux-stable/kernel/cred.c
+===================================================================
+--- linux-stable.orig/kernel/cred.c
++++ linux-stable/kernel/cred.c
@@ -36,7 +36,7 @@ static struct kmem_cache *cred_jar;
static struct thread_group_cred init_tgcred = {
.usage = ATOMIC_INIT(2),
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/md-raid5-percpu-handling-rt-aware.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0170-md-raid5-Make-raid5_percpu-handling-RT-aware.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0170-md-raid5-Make-raid5_percpu-handling-RT-aware.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/md-raid5-percpu-handling-rt-aware.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 0b38a99846981f3d58096100972ae9f2003737d8 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 6 Apr 2010 16:51:31 +0200
-Subject: [170/256] md: raid5: Make raid5_percpu handling RT aware
+Subject: md: raid5: Make raid5_percpu handling RT aware
__raid_run_ops() disables preemption with get_cpu() around the access
to the raid5_percpu variables. That causes scheduling while atomic
@@ -13,16 +12,17 @@
Reported-by: Udo van den Heuvel <udovdh at xs4all.nl>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Tested-by: Udo van den Heuvel <udovdh at xs4all.nl>
+
---
drivers/md/raid5.c | 7 +++++--
drivers/md/raid5.h | 1 +
2 files changed, 6 insertions(+), 2 deletions(-)
-diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
-index f351422..02e2ea3 100644
---- a/drivers/md/raid5.c
-+++ b/drivers/md/raid5.c
-@@ -1309,8 +1309,9 @@ static void __raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
+Index: linux-stable/drivers/md/raid5.c
+===================================================================
+--- linux-stable.orig/drivers/md/raid5.c
++++ linux-stable/drivers/md/raid5.c
+@@ -1373,8 +1373,9 @@ static void __raid_run_ops(struct stripe
struct raid5_percpu *percpu;
unsigned long cpu;
@@ -33,7 +33,7 @@
if (test_bit(STRIPE_OP_BIOFILL, &ops_request)) {
ops_run_biofill(sh);
overlap_clear++;
-@@ -1362,7 +1363,8 @@ static void __raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
+@@ -1426,7 +1427,8 @@ static void __raid_run_ops(struct stripe
if (test_and_clear_bit(R5_Overlap, &dev->flags))
wake_up(&sh->raid_conf->wait_for_overlap);
}
@@ -43,7 +43,7 @@
}
#ifdef CONFIG_MULTICORE_RAID456
-@@ -4758,6 +4760,7 @@ static int raid5_alloc_percpu(struct r5conf *conf)
+@@ -4925,6 +4927,7 @@ static int raid5_alloc_percpu(struct r5c
break;
}
per_cpu_ptr(conf->percpu, cpu)->scribble = scribble;
@@ -51,11 +51,11 @@
}
#ifdef CONFIG_HOTPLUG_CPU
conf->cpu_notify.notifier_call = raid456_cpu_notify;
-diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h
-index 8d8e139..a784311 100644
---- a/drivers/md/raid5.h
-+++ b/drivers/md/raid5.h
-@@ -417,6 +417,7 @@ struct r5conf {
+Index: linux-stable/drivers/md/raid5.h
+===================================================================
+--- linux-stable.orig/drivers/md/raid5.h
++++ linux-stable/drivers/md/raid5.h
+@@ -427,6 +427,7 @@ struct r5conf {
int recovery_disabled;
/* per cpu variables */
struct raid5_percpu {
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/migrate-disable-rt-variant.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0146-migrate-disable-rt-variant.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0146-migrate-disable-rt-variant.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/migrate-disable-rt-variant.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From a9b8647d496680f8dea9ab039593d1903cc12d54 Mon Sep 17 00:00:00 2001
+Subject: migrate-disable-rt-variant.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 19:48:20 +0200
-Subject: [146/256] migrate-disable-rt-variant.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/preempt.h | 4 ++++
1 file changed, 4 insertions(+)
-diff --git a/include/linux/preempt.h b/include/linux/preempt.h
-index c5d2a36..714a08c 100644
---- a/include/linux/preempt.h
-+++ b/include/linux/preempt.h
+Index: linux-stable/include/linux/preempt.h
+===================================================================
+--- linux-stable.orig/include/linux/preempt.h
++++ linux-stable/include/linux/preempt.h
@@ -121,11 +121,15 @@ extern void migrate_enable(void);
# define preempt_enable_rt() preempt_enable()
# define preempt_disable_nort() do { } while (0)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mips-disable-highmem-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0222-mips-disable-highmem-on-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0222-mips-disable-highmem-on-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mips-disable-highmem-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 51c704a93041eb2ec8f017736454fc28aeeb316f Mon Sep 17 00:00:00 2001
+Subject: mips-disable-highmem-on-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 18 Jul 2011 17:10:12 +0200
-Subject: [222/256] mips-disable-highmem-on-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
arch/mips/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
-index ce30e2f..f0bc185 100644
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -2081,7 +2081,7 @@ config CPU_R4400_WORKAROUNDS
+Index: linux-stable/arch/mips/Kconfig
+===================================================================
+--- linux-stable.orig/arch/mips/Kconfig
++++ linux-stable/arch/mips/Kconfig
+@@ -2119,7 +2119,7 @@ config CPU_R4400_WORKAROUNDS
#
config HIGHMEM
bool "High Memory Support"
Added: dists/trunk/linux/debian/patches/features/all/rt/mips-enable-interrupts-in-signal.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/mips-enable-interrupts-in-signal.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,21 @@
+Subject: mips-enable-interrupts-in-signal.patch
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Mon, 18 Jul 2011 21:32:10 +0200
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ arch/mips/kernel/signal.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: linux-stable/arch/mips/kernel/signal.c
+===================================================================
+--- linux-stable.orig/arch/mips/kernel/signal.c
++++ linux-stable/arch/mips/kernel/signal.c
+@@ -606,6 +606,7 @@ asmlinkage void do_notify_resume(struct
+ __u32 thread_info_flags)
+ {
+ local_irq_enable();
++ preempt_check_resched();
+
+ /* deal with pending signal delivery */
+ if (thread_info_flags & _TIF_SIGPENDING)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-allow-slab-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0100-mm-Allow-only-slab-on-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0100-mm-Allow-only-slab-on-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-allow-slab-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,19 @@
-From 401ea3678872166ee1015195db7fd631e9c56192 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:44:03 -0500
-Subject: [100/256] mm: Allow only slab on RT
+Subject: mm: Allow only slab on RT
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
init/Kconfig | 2 ++
1 file changed, 2 insertions(+)
-diff --git a/init/Kconfig b/init/Kconfig
-index 6cfd71d..7c0b369 100644
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -1265,6 +1265,7 @@ config SLAB
+Index: linux-stable/init/Kconfig
+===================================================================
+--- linux-stable.orig/init/Kconfig
++++ linux-stable/init/Kconfig
+@@ -1441,6 +1441,7 @@ config SLAB
config SLUB
bool "SLUB (Unqueued Allocator)"
@@ -21,7 +21,7 @@
help
SLUB is a slab allocator that minimizes cache line usage
instead of managing queues of cached objects (SLAB approach).
-@@ -1276,6 +1277,7 @@ config SLUB
+@@ -1452,6 +1453,7 @@ config SLUB
config SLOB
depends on EXPERT
bool "SLOB (Simple Allocator)"
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-cgroup-page-bit-spinlock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0076-mm-Replace-cgroup_page-bit-spinlock.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0076-mm-Replace-cgroup_page-bit-spinlock.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-cgroup-page-bit-spinlock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,20 +1,20 @@
-From 12aee8794ad4dc4aa3132329f9b57d2248c4def9 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 19 Aug 2009 09:56:42 +0200
-Subject: [076/256] mm: Replace cgroup_page bit spinlock
+Subject: mm: Replace cgroup_page bit spinlock
Bit spinlocks are not working on RT. Replace them.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/page_cgroup.h | 15 +++++++++++++++
mm/page_cgroup.c | 11 +++++++++++
2 files changed, 26 insertions(+)
-diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h
-index a88cdba..5f0fe2d 100644
---- a/include/linux/page_cgroup.h
-+++ b/include/linux/page_cgroup.h
+Index: linux-stable/include/linux/page_cgroup.h
+===================================================================
+--- linux-stable.orig/include/linux/page_cgroup.h
++++ linux-stable/include/linux/page_cgroup.h
@@ -24,6 +24,9 @@ enum {
*/
struct page_cgroup {
@@ -25,7 +25,7 @@
struct mem_cgroup *mem_cgroup;
};
-@@ -74,12 +77,20 @@ static inline void lock_page_cgroup(struct page_cgroup *pc)
+@@ -74,12 +77,20 @@ static inline void lock_page_cgroup(stru
* Don't take this lock in IRQ context.
* This lock is for pc->mem_cgroup, USED, MIGRATION
*/
@@ -45,8 +45,8 @@
+#endif
}
- #else /* CONFIG_CGROUP_MEM_RES_CTLR */
-@@ -102,6 +113,10 @@ static inline void __init page_cgroup_init_flatmem(void)
+ #else /* CONFIG_MEMCG */
+@@ -102,6 +113,10 @@ static inline void __init page_cgroup_in
{
}
@@ -54,13 +54,13 @@
+{
+}
+
- #endif /* CONFIG_CGROUP_MEM_RES_CTLR */
+ #endif /* CONFIG_MEMCG */
#include <linux/swap.h>
-diff --git a/mm/page_cgroup.c b/mm/page_cgroup.c
-index 1ccbd71..84f3ce8 100644
---- a/mm/page_cgroup.c
-+++ b/mm/page_cgroup.c
+Index: linux-stable/mm/page_cgroup.c
+===================================================================
+--- linux-stable.orig/mm/page_cgroup.c
++++ linux-stable/mm/page_cgroup.c
@@ -13,6 +13,14 @@
static unsigned long total_usage;
@@ -76,7 +76,7 @@
#if !defined(CONFIG_SPARSEMEM)
-@@ -60,6 +68,7 @@ static int __init alloc_node_page_cgroup(int nid)
+@@ -60,6 +68,7 @@ static int __init alloc_node_page_cgroup
return -ENOMEM;
NODE_DATA(nid)->node_page_cgroup = base;
total_usage += table_size;
@@ -84,7 +84,7 @@
return 0;
}
-@@ -150,6 +159,8 @@ static int __meminit init_section_page_cgroup(unsigned long pfn, int nid)
+@@ -150,6 +159,8 @@ static int __meminit init_section_page_c
return -ENOMEM;
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-convert-swap-to-percpu-locked.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0096-mm-convert-swap-to-percpu-locked.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0096-mm-convert-swap-to-percpu-locked.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-convert-swap-to-percpu-locked.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,18 @@
-From bc50ce006d4e6a76038c1ac504a219c4a4fd3b09 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:51 -0500
-Subject: [096/256] mm: convert swap to percpu locked
+Subject: mm: convert swap to percpu locked
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
mm/swap.c | 33 +++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)
-diff --git a/mm/swap.c b/mm/swap.c
-index 5c13f13..2051da9 100644
---- a/mm/swap.c
-+++ b/mm/swap.c
+Index: linux-stable/mm/swap.c
+===================================================================
+--- linux-stable.orig/mm/swap.c
++++ linux-stable/mm/swap.c
@@ -30,6 +30,7 @@
#include <linux/backing-dev.h>
#include <linux/memcontrol.h>
@@ -21,7 +21,7 @@
#include "internal.h"
-@@ -40,6 +41,9 @@ static DEFINE_PER_CPU(struct pagevec[NR_LRU_LISTS], lru_add_pvecs);
+@@ -40,6 +41,9 @@ static DEFINE_PER_CPU(struct pagevec[NR_
static DEFINE_PER_CPU(struct pagevec, lru_rotate_pvecs);
static DEFINE_PER_CPU(struct pagevec, lru_deactivate_pvecs);
@@ -31,7 +31,7 @@
/*
* This path almost never happens for VM activity - pages are normally
* freed via pagevecs. But it gets used by networking.
-@@ -268,11 +272,11 @@ void rotate_reclaimable_page(struct page *page)
+@@ -354,11 +358,11 @@ void rotate_reclaimable_page(struct page
unsigned long flags;
page_cache_get(page);
@@ -45,7 +45,7 @@
}
}
-@@ -328,12 +332,13 @@ static void activate_page_drain(int cpu)
+@@ -403,12 +407,13 @@ static void activate_page_drain(int cpu)
void activate_page(struct page *page)
{
if (PageLRU(page) && !PageActive(page) && !PageUnevictable(page)) {
@@ -61,7 +61,7 @@
}
}
-@@ -373,12 +378,12 @@ EXPORT_SYMBOL(mark_page_accessed);
+@@ -448,12 +453,12 @@ EXPORT_SYMBOL(mark_page_accessed);
void __lru_cache_add(struct page *page, enum lru_list lru)
{
@@ -76,7 +76,7 @@
}
EXPORT_SYMBOL(__lru_cache_add);
-@@ -513,9 +518,9 @@ void lru_add_drain_cpu(int cpu)
+@@ -588,9 +593,9 @@ void lru_add_drain_cpu(int cpu)
unsigned long flags;
/* No harm done if a racing interrupt already did this */
@@ -88,7 +88,7 @@
}
pvec = &per_cpu(lru_deactivate_pvecs, cpu);
-@@ -543,18 +548,19 @@ void deactivate_page(struct page *page)
+@@ -618,18 +623,19 @@ void deactivate_page(struct page *page)
return;
if (likely(get_page_unless_zero(page))) {
@@ -112,7 +112,7 @@
}
static void lru_add_drain_per_cpu(struct work_struct *dummy)
-@@ -768,6 +774,9 @@ void __init swap_setup(void)
+@@ -847,6 +853,9 @@ void __init swap_setup(void)
{
unsigned long megs = totalram_pages >> (20 - PAGE_SHIFT);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-make-vmstat-rt-aware.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0097-mm-make-vmstat-rt-aware.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0097-mm-make-vmstat-rt-aware.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-make-vmstat-rt-aware.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,20 +1,20 @@
-From f48741aeb7f4257bf0ab2f95e7468dcf293f4e65 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:13 -0500
-Subject: [097/256] mm: make vmstat -rt aware
+Subject: [PATCH] mm: make vmstat -rt aware
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/vmstat.h | 4 ++++
mm/vmstat.c | 6 ++++++
2 files changed, 10 insertions(+)
-diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
-index 65efb92..1b3f2ef 100644
---- a/include/linux/vmstat.h
-+++ b/include/linux/vmstat.h
-@@ -29,7 +29,9 @@ DECLARE_PER_CPU(struct vm_event_state, vm_event_states);
+Index: linux-stable/include/linux/vmstat.h
+===================================================================
+--- linux-stable.orig/include/linux/vmstat.h
++++ linux-stable/include/linux/vmstat.h
+@@ -29,7 +29,9 @@ DECLARE_PER_CPU(struct vm_event_state, v
static inline void __count_vm_event(enum vm_event_item item)
{
@@ -24,7 +24,7 @@
}
static inline void count_vm_event(enum vm_event_item item)
-@@ -39,7 +41,9 @@ static inline void count_vm_event(enum vm_event_item item)
+@@ -39,7 +41,9 @@ static inline void count_vm_event(enum v
static inline void __count_vm_events(enum vm_event_item item, long delta)
{
@@ -34,11 +34,11 @@
}
static inline void count_vm_events(enum vm_event_item item, long delta)
-diff --git a/mm/vmstat.c b/mm/vmstat.c
-index 7db1b9b..172212f 100644
---- a/mm/vmstat.c
-+++ b/mm/vmstat.c
-@@ -216,6 +216,7 @@ void __mod_zone_page_state(struct zone *zone, enum zone_stat_item item,
+Index: linux-stable/mm/vmstat.c
+===================================================================
+--- linux-stable.orig/mm/vmstat.c
++++ linux-stable/mm/vmstat.c
+@@ -216,6 +216,7 @@ void __mod_zone_page_state(struct zone *
long x;
long t;
@@ -46,7 +46,7 @@
x = delta + __this_cpu_read(*p);
t = __this_cpu_read(pcp->stat_threshold);
-@@ -225,6 +226,7 @@ void __mod_zone_page_state(struct zone *zone, enum zone_stat_item item,
+@@ -225,6 +226,7 @@ void __mod_zone_page_state(struct zone *
x = 0;
}
__this_cpu_write(*p, x);
@@ -54,7 +54,7 @@
}
EXPORT_SYMBOL(__mod_zone_page_state);
-@@ -257,6 +259,7 @@ void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
+@@ -257,6 +259,7 @@ void __inc_zone_state(struct zone *zone,
s8 __percpu *p = pcp->vm_stat_diff + item;
s8 v, t;
@@ -62,7 +62,7 @@
v = __this_cpu_inc_return(*p);
t = __this_cpu_read(pcp->stat_threshold);
if (unlikely(v > t)) {
-@@ -265,6 +268,7 @@ void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
+@@ -265,6 +268,7 @@ void __inc_zone_state(struct zone *zone,
zone_page_state_add(v + overstep, zone, item);
__this_cpu_write(*p, -overstep);
}
@@ -70,7 +70,7 @@
}
void __inc_zone_page_state(struct page *page, enum zone_stat_item item)
-@@ -279,6 +283,7 @@ void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
+@@ -279,6 +283,7 @@ void __dec_zone_state(struct zone *zone,
s8 __percpu *p = pcp->vm_stat_diff + item;
s8 v, t;
@@ -78,7 +78,7 @@
v = __this_cpu_dec_return(*p);
t = __this_cpu_read(pcp->stat_threshold);
if (unlikely(v < - t)) {
-@@ -287,6 +292,7 @@ void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
+@@ -287,6 +292,7 @@ void __dec_zone_state(struct zone *zone,
zone_page_state_add(v - overstep, zone, item);
__this_cpu_write(*p, overstep);
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-fix.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0095-mm-page-alloc-fix.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0095-mm-page-alloc-fix.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-fix.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From ca7cb6af82a59552dc519e7b1dde7084d6fa928c Mon Sep 17 00:00:00 2001
+Subject: mm-page-alloc-fix.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 21 Jul 2011 16:47:49 +0200
-Subject: [095/256] mm-page-alloc-fix.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
mm/page_alloc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 2edd044..4a68c8f 100644
---- a/mm/page_alloc.c
-+++ b/mm/page_alloc.c
-@@ -2095,8 +2095,8 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
+Index: linux-stable/mm/page_alloc.c
+===================================================================
+--- linux-stable.orig/mm/page_alloc.c
++++ linux-stable/mm/page_alloc.c
+@@ -2180,8 +2180,8 @@ __alloc_pages_direct_compact(gfp_t gfp_m
if (*did_some_progress != COMPACT_SKIPPED) {
/* Page migration frees to the PCP lists but we want merging */
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-use-list-last-entry.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0043-mm-page-alloc-use-list-last-entry.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0043-mm-page-alloc-use-list-last-entry.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-use-list-last-entry.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From feb16311a9c91515ef2b12f9d98c93df62a01c65 Mon Sep 17 00:00:00 2001
+Subject: mm-page-alloc-use-list-last-entry.patch
From: Peter Zijlstra <peterz at infradead.org>
Date: Tue, 21 Jun 2011 11:24:35 +0200
-Subject: [043/256] mm-page-alloc-use-list-last-entry.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
mm/page_alloc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 918330f..b27e8cb 100644
---- a/mm/page_alloc.c
-+++ b/mm/page_alloc.c
-@@ -663,7 +663,7 @@ static void free_pcppages_bulk(struct zone *zone, int count,
+Index: linux-stable/mm/page_alloc.c
+===================================================================
+--- linux-stable.orig/mm/page_alloc.c
++++ linux-stable/mm/page_alloc.c
+@@ -668,7 +668,7 @@ static void free_pcppages_bulk(struct zo
batch_free = to_free;
do {
Added: dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-use-local-lock-on-target-cpu.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-page-alloc-use-local-lock-on-target-cpu.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,59 @@
+Subject: mm: page_alloc: Use local_lock_on() instead of plain spinlock
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 27 Sep 2012 11:11:46 +0200
+
+The plain spinlock while sufficient does not update the local_lock
+internals. Use a proper local_lock function instead to ease debugging.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+---
+ include/linux/locallock.h | 11 +++++++++++
+ mm/page_alloc.c | 4 ++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+Index: linux-stable/include/linux/locallock.h
+===================================================================
+--- linux-stable.orig/include/linux/locallock.h
++++ linux-stable/include/linux/locallock.h
+@@ -137,6 +137,12 @@ static inline int __local_lock_irqsave(s
+ _flags = __get_cpu_var(lvar).flags; \
+ } while (0)
+
++#define local_lock_irqsave_on(lvar, _flags, cpu) \
++ do { \
++ __local_lock_irqsave(&per_cpu(lvar, cpu)); \
++ _flags = per_cpu(lvar, cpu).flags; \
++ } while (0)
++
+ static inline int __local_unlock_irqrestore(struct local_irq_lock *lv,
+ unsigned long flags)
+ {
+@@ -156,6 +162,11 @@ static inline int __local_unlock_irqrest
+ put_local_var(lvar); \
+ } while (0)
+
++#define local_unlock_irqrestore_on(lvar, flags, cpu) \
++ do { \
++ __local_unlock_irqrestore(&per_cpu(lvar, cpu), flags); \
++ } while (0)
++
+ #define local_spin_trylock_irq(lvar, lock) \
+ ({ \
+ int __locked; \
+Index: linux-stable/mm/page_alloc.c
+===================================================================
+--- linux-stable.orig/mm/page_alloc.c
++++ linux-stable/mm/page_alloc.c
+@@ -221,9 +221,9 @@ static DEFINE_LOCAL_IRQ_LOCK(pa_lock);
+
+ #ifdef CONFIG_PREEMPT_RT_BASE
+ # define cpu_lock_irqsave(cpu, flags) \
+- spin_lock_irqsave(&per_cpu(pa_lock, cpu).lock, flags)
++ local_lock_irqsave_on(pa_lock, flags, cpu)
+ # define cpu_unlock_irqrestore(cpu, flags) \
+- spin_unlock_irqrestore(&per_cpu(pa_lock, cpu).lock, flags)
++ local_unlock_irqrestore_on(pa_lock, flags, cpu)
+ #else
+ # define cpu_lock_irqsave(cpu, flags) local_irq_save(flags)
+ # define cpu_unlock_irqrestore(cpu, flags) local_irq_restore(flags)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-page_alloc-reduce-lock-sections-further.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0094-mm-page_alloc-reduce-lock-sections-further.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0094-mm-page_alloc-reduce-lock-sections-further.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-page_alloc-reduce-lock-sections-further.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 486036f250d0c976bdee08f7ed718aa80c2913c7 Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
Date: Fri, 3 Jul 2009 08:44:37 -0500
-Subject: [094/256] mm: page_alloc reduce lock sections further
+Subject: mm: page_alloc reduce lock sections further
Split out the pages which are to be freed into a separate list and
call free_pages_bulk() outside of the percpu page allocator locks.
@@ -9,14 +8,14 @@
Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- mm/page_alloc.c | 77 +++++++++++++++++++++++++++++++++++++++++--------------
- 1 file changed, 58 insertions(+), 19 deletions(-)
+ mm/page_alloc.c | 81 +++++++++++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 60 insertions(+), 21 deletions(-)
-diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index dbe4146..2edd044 100644
---- a/mm/page_alloc.c
-+++ b/mm/page_alloc.c
-@@ -632,7 +632,7 @@ static inline int free_pages_check(struct page *page)
+Index: linux-stable/mm/page_alloc.c
+===================================================================
+--- linux-stable.orig/mm/page_alloc.c
++++ linux-stable/mm/page_alloc.c
+@@ -637,7 +637,7 @@ static inline int free_pages_check(struc
}
/*
@@ -25,7 +24,7 @@
* Assumes all pages on list are in same zone, and of same order.
* count is the number of pages to free.
*
-@@ -643,16 +643,42 @@ static inline int free_pages_check(struct page *page)
+@@ -648,16 +648,42 @@ static inline int free_pages_check(struc
* pinned" detection logic.
*/
static void free_pcppages_bulk(struct zone *zone, int count,
@@ -72,7 +71,7 @@
while (to_free) {
struct page *page;
struct list_head *list;
-@@ -668,7 +694,7 @@ static void free_pcppages_bulk(struct zone *zone, int count,
+@@ -673,7 +699,7 @@ static void free_pcppages_bulk(struct zo
batch_free++;
if (++migratetype == MIGRATE_PCPTYPES)
migratetype = 0;
@@ -81,7 +80,7 @@
} while (list_empty(list));
/* This is the only non-empty list. Free them all. */
-@@ -677,27 +703,24 @@ static void free_pcppages_bulk(struct zone *zone, int count,
+@@ -682,27 +708,24 @@ static void free_pcppages_bulk(struct zo
do {
page = list_last_entry(list, struct page, lru);
@@ -114,7 +113,7 @@
}
static bool free_pages_prepare(struct page *page, unsigned int order)
-@@ -1124,6 +1147,7 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
+@@ -1168,6 +1191,7 @@ static int rmqueue_bulk(struct zone *zon
void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
{
unsigned long flags;
@@ -122,19 +121,20 @@
int to_drain;
local_lock_irqsave(pa_lock, flags);
-@@ -1131,9 +1155,10 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
- to_drain = pcp->batch;
+@@ -1176,10 +1200,11 @@ void drain_zone_pages(struct zone *zone,
else
to_drain = pcp->count;
-- free_pcppages_bulk(zone, to_drain, pcp);
-+ isolate_pcp_pages(to_drain, pcp, &dst);
- pcp->count -= to_drain;
+ if (to_drain > 0) {
+- free_pcppages_bulk(zone, to_drain, pcp);
++ isolate_pcp_pages(to_drain, pcp, &dst);
+ pcp->count -= to_drain;
+ }
local_unlock_irqrestore(pa_lock, flags);
+ free_pcppages_bulk(zone, to_drain, &dst);
}
#endif
-@@ -1152,16 +1177,21 @@ static void drain_pages(unsigned int cpu)
+@@ -1198,16 +1223,21 @@ static void drain_pages(unsigned int cpu
for_each_populated_zone(zone) {
struct per_cpu_pageset *pset;
struct per_cpu_pages *pcp;
@@ -158,7 +158,7 @@
}
}
-@@ -1302,8 +1332,15 @@ void free_hot_cold_page(struct page *page, int cold)
+@@ -1348,8 +1378,15 @@ void free_hot_cold_page(struct page *pag
list_add(&page->lru, &pcp->lists[migratetype]);
pcp->count++;
if (pcp->count >= pcp->high) {
@@ -175,7 +175,7 @@
}
out:
-@@ -3874,12 +3911,14 @@ static int __zone_pcp_update(void *data)
+@@ -5888,14 +5925,16 @@ static int __meminit __zone_pcp_update(v
for_each_possible_cpu(cpu) {
struct per_cpu_pageset *pset;
struct per_cpu_pages *pcp;
@@ -185,9 +185,13 @@
pcp = &pset->pcp;
cpu_lock_irqsave(cpu, flags);
-- free_pcppages_bulk(zone, pcp->count, pcp);
-+ isolate_pcp_pages(pcp->count, pcp, &dst);
-+ free_pcppages_bulk(zone, pcp->count, &dst);
- setup_pageset(pset, batch);
+- if (pcp->count > 0)
+- free_pcppages_bulk(zone, pcp->count, pcp);
+- setup_pageset(pset, batch);
++ if (pcp->count > 0) {
++ isolate_pcp_pages(pcp->count, pcp, &dst);
++ free_pcppages_bulk(zone, pcp->count, &dst);
++ }
cpu_unlock_irqrestore(cpu, flags);
}
+ return 0;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-page_alloc-rt-friendly-per-cpu-pages.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0093-mm-page_alloc-rt-friendly-per-cpu-pages.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0093-mm-page_alloc-rt-friendly-per-cpu-pages.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-page_alloc-rt-friendly-per-cpu-pages.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From a422a5e6bef77e77648b2847565f4f62898664cb Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:37 -0500
-Subject: [093/256] mm: page_alloc: rt-friendly per-cpu pages
+Subject: mm: page_alloc: rt-friendly per-cpu pages
rt-friendly per-cpu pages: convert the irqs-off per-cpu locking
method into a preemptible, explicit-per-cpu-locks method.
@@ -12,22 +11,23 @@
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- mm/page_alloc.c | 53 +++++++++++++++++++++++++++++++++++++----------------
- 1 file changed, 37 insertions(+), 16 deletions(-)
+ mm/page_alloc.c | 57 ++++++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 39 insertions(+), 18 deletions(-)
-diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index b27e8cb..dbe4146 100644
---- a/mm/page_alloc.c
-+++ b/mm/page_alloc.c
-@@ -57,6 +57,7 @@
- #include <linux/ftrace_event.h>
- #include <linux/memcontrol.h>
+Index: linux-stable/mm/page_alloc.c
+===================================================================
+--- linux-stable.orig/mm/page_alloc.c
++++ linux-stable/mm/page_alloc.c
+@@ -58,6 +58,7 @@
#include <linux/prefetch.h>
-+#include <linux/locallock.h>
+ #include <linux/migrate.h>
#include <linux/page-debug-flags.h>
++#include <linux/locallock.h>
#include <asm/tlbflush.h>
+ #include <asm/div64.h>
@@ -216,6 +217,18 @@ EXPORT_SYMBOL(nr_node_ids);
EXPORT_SYMBOL(nr_online_nodes);
#endif
@@ -46,8 +46,8 @@
+
int page_group_by_mobility_disabled __read_mostly;
- static void set_pageblock_migratetype(struct page *page, int migratetype)
-@@ -721,13 +734,13 @@ static void __free_pages_ok(struct page *page, unsigned int order)
+ /*
+@@ -726,13 +739,13 @@ static void __free_pages_ok(struct page
if (!free_pages_prepare(page, order))
return;
@@ -63,7 +63,7 @@
}
void __meminit __free_pages_bootmem(struct page *page, unsigned int order)
-@@ -1113,14 +1126,14 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
+@@ -1157,7 +1170,7 @@ void drain_zone_pages(struct zone *zone,
unsigned long flags;
int to_drain;
@@ -72,15 +72,16 @@
if (pcp->count >= pcp->batch)
to_drain = pcp->batch;
else
- to_drain = pcp->count;
- free_pcppages_bulk(zone, to_drain, pcp);
- pcp->count -= to_drain;
+@@ -1166,7 +1179,7 @@ void drain_zone_pages(struct zone *zone,
+ free_pcppages_bulk(zone, to_drain, pcp);
+ pcp->count -= to_drain;
+ }
- local_irq_restore(flags);
+ local_unlock_irqrestore(pa_lock, flags);
}
#endif
-@@ -1140,7 +1153,7 @@ static void drain_pages(unsigned int cpu)
+@@ -1186,7 +1199,7 @@ static void drain_pages(unsigned int cpu
struct per_cpu_pageset *pset;
struct per_cpu_pages *pcp;
@@ -89,7 +90,7 @@
pset = per_cpu_ptr(zone->pageset, cpu);
pcp = &pset->pcp;
-@@ -1148,7 +1161,7 @@ static void drain_pages(unsigned int cpu)
+@@ -1194,7 +1207,7 @@ static void drain_pages(unsigned int cpu
free_pcppages_bulk(zone, pcp->count, pcp);
pcp->count = 0;
}
@@ -98,7 +99,7 @@
}
}
-@@ -1201,7 +1214,12 @@ void drain_all_pages(void)
+@@ -1247,7 +1260,12 @@ void drain_all_pages(void)
else
cpumask_clear_cpu(cpu, &cpus_with_pcps);
}
@@ -111,7 +112,7 @@
}
#ifdef CONFIG_HIBERNATION
-@@ -1257,7 +1275,7 @@ void free_hot_cold_page(struct page *page, int cold)
+@@ -1303,7 +1321,7 @@ void free_hot_cold_page(struct page *pag
migratetype = get_pageblock_migratetype(page);
set_page_private(page, migratetype);
@@ -120,7 +121,7 @@
if (unlikely(wasMlocked))
free_page_mlock(page);
__count_vm_event(PGFREE);
-@@ -1289,7 +1307,7 @@ void free_hot_cold_page(struct page *page, int cold)
+@@ -1335,7 +1353,7 @@ void free_hot_cold_page(struct page *pag
}
out:
@@ -129,7 +130,7 @@
}
/*
-@@ -1397,7 +1415,7 @@ again:
+@@ -1447,7 +1465,7 @@ again:
struct per_cpu_pages *pcp;
struct list_head *list;
@@ -138,7 +139,7 @@
pcp = &this_cpu_ptr(zone->pageset)->pcp;
list = &pcp->lists[migratetype];
if (list_empty(list)) {
-@@ -1429,17 +1447,19 @@ again:
+@@ -1479,17 +1497,19 @@ again:
*/
WARN_ON_ONCE(order > 1);
}
@@ -162,7 +163,7 @@
VM_BUG_ON(bad_range(zone, page));
if (prep_new_page(page, order, gfp_flags))
-@@ -1447,7 +1467,7 @@ again:
+@@ -1497,7 +1517,7 @@ again:
return page;
failed:
@@ -171,24 +172,40 @@
return NULL;
}
-@@ -3858,10 +3878,10 @@ static int __zone_pcp_update(void *data)
+@@ -4992,6 +5012,7 @@ static int page_alloc_cpu_notify(struct
+ void __init page_alloc_init(void)
+ {
+ hotcpu_notifier(page_alloc_cpu_notify, 0);
++ local_irq_lock_init(pa_lock);
+ }
+
+ /*
+@@ -5871,11 +5892,11 @@ static int __meminit __zone_pcp_update(v
pset = per_cpu_ptr(zone->pageset, cpu);
pcp = &pset->pcp;
- local_irq_save(flags);
+ cpu_lock_irqsave(cpu, flags);
- free_pcppages_bulk(zone, pcp->count, pcp);
+ if (pcp->count > 0)
+ free_pcppages_bulk(zone, pcp->count, pcp);
setup_pageset(pset, batch);
- local_irq_restore(flags);
+ cpu_unlock_irqrestore(cpu, flags);
}
return 0;
}
-@@ -4892,6 +4912,7 @@ static int page_alloc_cpu_notify(struct notifier_block *self,
- void __init page_alloc_init(void)
- {
- hotcpu_notifier(page_alloc_cpu_notify, 0);
-+ local_irq_lock_init(pa_lock);
+@@ -5892,12 +5913,12 @@ void zone_pcp_reset(struct zone *zone)
+ unsigned long flags;
+
+ /* avoid races with drain_pages() */
+- local_irq_save(flags);
++ local_lock_irqsave(pa_lock, flags);
+ if (zone->pageset != &boot_pageset) {
+ free_percpu(zone->pageset);
+ zone->pageset = &boot_pageset;
+ }
+- local_irq_restore(flags);
++ local_unlock_irqrestore(pa_lock, flags);
}
/*
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-prepare-pf-disable-discoupling.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0032-mm-Prepare-decoupling-the-page-fault-disabling-logic.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0032-mm-Prepare-decoupling-the-page-fault-disabling-logic.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-prepare-pf-disable-discoupling.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,13 +1,13 @@
-From d3010bc0bc13e844bc58c96da28f481604988e28 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:37 -0500
-Subject: [032/256] mm: Prepare decoupling the page fault disabling logic
+Subject: mm: Prepare decoupling the page fault disabling logic
Add a pagefault_disabled variable to task_struct to allow decoupling
the pagefault-disabled logic from the preempt count.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/sched.h | 1 +
include/linux/uaccess.h | 33 +++------------------------------
@@ -15,11 +15,11 @@
mm/memory.c | 29 +++++++++++++++++++++++++++++
4 files changed, 34 insertions(+), 30 deletions(-)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index bd5caa1..f0ee37f 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1478,6 +1478,7 @@ struct task_struct {
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1448,6 +1448,7 @@ struct task_struct {
/* mutex deadlock detection */
struct mutex_waiter *blocked_on;
#endif
@@ -27,10 +27,10 @@
#ifdef CONFIG_TRACE_IRQFLAGS
unsigned int irq_events;
unsigned long hardirq_enable_ip;
-diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
-index 5ca0951..9414a1b 100644
---- a/include/linux/uaccess.h
-+++ b/include/linux/uaccess.h
+Index: linux-stable/include/linux/uaccess.h
+===================================================================
+--- linux-stable.orig/include/linux/uaccess.h
++++ linux-stable/include/linux/uaccess.h
@@ -6,37 +6,10 @@
/*
@@ -72,11 +72,11 @@
#ifndef ARCH_HAS_NOCACHE_UACCESS
-diff --git a/kernel/fork.c b/kernel/fork.c
-index b767e68..fdf0795 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -1265,6 +1265,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+Index: linux-stable/kernel/fork.c
+===================================================================
+--- linux-stable.orig/kernel/fork.c
++++ linux-stable/kernel/fork.c
+@@ -1298,6 +1298,7 @@ static struct task_struct *copy_process(
p->hardirq_context = 0;
p->softirq_context = 0;
#endif
@@ -84,11 +84,11 @@
#ifdef CONFIG_LOCKDEP
p->lockdep_depth = 0; /* no locks held yet */
p->curr_chain_key = 0;
-diff --git a/mm/memory.c b/mm/memory.c
-index 6105f47..c3b9c80 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -3467,6 +3467,35 @@ unlock:
+Index: linux-stable/mm/memory.c
+===================================================================
+--- linux-stable.orig/mm/memory.c
++++ linux-stable/mm/memory.c
+@@ -3484,6 +3484,35 @@ unlock:
return 0;
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-protect-activate-switch-mm.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0197-mm-protect-activate-switch-mm.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0197-mm-protect-activate-switch-mm.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-protect-activate-switch-mm.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From cdcb2a340e5ba784a9b7531ba1f5963076025b4b Mon Sep 17 00:00:00 2001
+Subject: mm-protect-activate-switch-mm.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Mon, 4 Jul 2011 09:48:40 +0200
-Subject: [197/256] mm-protect-activate-switch-mm.patch
+Date: Mon, 04 Jul 2011 09:48:40 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
mm/mmu_context.c | 2 ++
2 files changed, 4 insertions(+)
-diff --git a/fs/exec.c b/fs/exec.c
-index b1fd202..db02d76 100644
---- a/fs/exec.c
-+++ b/fs/exec.c
-@@ -840,10 +840,12 @@ static int exec_mmap(struct mm_struct *mm)
+Index: linux-stable/fs/exec.c
+===================================================================
+--- linux-stable.orig/fs/exec.c
++++ linux-stable/fs/exec.c
+@@ -836,10 +836,12 @@ static int exec_mmap(struct mm_struct *m
}
}
task_lock(tsk);
@@ -26,10 +25,10 @@
task_unlock(tsk);
arch_pick_mmap_layout(mm);
if (old_mm) {
-diff --git a/mm/mmu_context.c b/mm/mmu_context.c
-index 3dcfaf4..8ca7e6b 100644
---- a/mm/mmu_context.c
-+++ b/mm/mmu_context.c
+Index: linux-stable/mm/mmu_context.c
+===================================================================
+--- linux-stable.orig/mm/mmu_context.c
++++ linux-stable/mm/mmu_context.c
@@ -26,6 +26,7 @@ void use_mm(struct mm_struct *mm)
struct task_struct *tsk = current;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-protect-activate_mm-by-preempt_-disable-7cenable-_rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0198-mm-Protect-activate_mm-by-preempt_-disable-7Cenable-.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0198-mm-Protect-activate_mm-by-preempt_-disable-7Cenable-.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-protect-activate_mm-by-preempt_-disable-7cenable-_rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,8 @@
-From 2c67da76777adecd1e2957e2e723f7c2981ea699 Mon Sep 17 00:00:00 2001
-From: Yong Zhang <yong.zhang at windriver.com>
+Subject: mm: Protect activate_mm() by preempt_[disable%7Cenable]_rt()
+From: Yong Zhang <yong.zhang0 at gmail.com>
Date: Tue, 15 May 2012 13:53:56 +0800
-Subject: [198/256] mm: Protect activate_mm() by
- preempt_[disable%7Cenable]_rt()
+
+From: Yong Zhang <yong.zhang at windriver.com>
Otherwise there will be warning on ARM like below:
@@ -37,11 +37,11 @@
mm/mmu_context.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
-diff --git a/fs/exec.c b/fs/exec.c
-index db02d76..9384953 100644
---- a/fs/exec.c
-+++ b/fs/exec.c
-@@ -840,12 +840,12 @@ static int exec_mmap(struct mm_struct *mm)
+Index: linux-stable/fs/exec.c
+===================================================================
+--- linux-stable.orig/fs/exec.c
++++ linux-stable/fs/exec.c
+@@ -836,12 +836,12 @@ static int exec_mmap(struct mm_struct *m
}
}
task_lock(tsk);
@@ -56,10 +56,10 @@
task_unlock(tsk);
arch_pick_mmap_layout(mm);
if (old_mm) {
-diff --git a/mm/mmu_context.c b/mm/mmu_context.c
-index 8ca7e6b..1385e48 100644
---- a/mm/mmu_context.c
-+++ b/mm/mmu_context.c
+Index: linux-stable/mm/mmu_context.c
+===================================================================
+--- linux-stable.orig/mm/mmu_context.c
++++ linux-stable/mm/mmu_context.c
@@ -26,7 +26,7 @@ void use_mm(struct mm_struct *mm)
struct task_struct *tsk = current;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-remove-preempt-count-from-pf.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0037-mm-Remove-preempt-count-from-pagefault-disable-enabl.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0037-mm-Remove-preempt-count-from-pagefault-disable-enabl.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-remove-preempt-count-from-pf.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 8f56a24ee5c838e77eca3bafae7c3219123f6375 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 25 Jul 2009 22:06:27 +0200
-Subject: [037/256] mm: Remove preempt count from pagefault disable/enable
+Subject: mm: Remove preempt count from pagefault disable/enable
Now that all users are cleaned up, we can remove the preemption count.
@@ -10,11 +9,11 @@
mm/memory.c | 7 -------
1 file changed, 7 deletions(-)
-diff --git a/mm/memory.c b/mm/memory.c
-index e996afe..346246c 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -3470,7 +3470,6 @@ unlock:
+Index: linux-stable/mm/memory.c
+===================================================================
+--- linux-stable.orig/mm/memory.c
++++ linux-stable/mm/memory.c
+@@ -3487,7 +3487,6 @@ unlock:
#ifdef CONFIG_PREEMPT_RT_FULL
void pagefault_disable(void)
{
@@ -22,7 +21,7 @@
current->pagefault_disabled++;
/*
* make sure to have issued the store before a pagefault
-@@ -3488,12 +3487,6 @@ void pagefault_enable(void)
+@@ -3505,12 +3504,6 @@ void pagefault_enable(void)
*/
barrier();
current->pagefault_disabled--;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-rt-kmap-atomic-scheduling.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0227-mm-rt-kmap_atomic-scheduling.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0227-mm-rt-kmap_atomic-scheduling.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-rt-kmap-atomic-scheduling.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From f7c2456d5d8fa2dfc1b2e91fb6e9a750472c168a Mon Sep 17 00:00:00 2001
+Subject: mm, rt: kmap_atomic scheduling
From: Peter Zijlstra <peterz at infradead.org>
Date: Thu, 28 Jul 2011 10:43:51 +0200
-Subject: [227/256] mm, rt: kmap_atomic scheduling
In fact, with migrate_disable() existing one could play games with
kmap_atomic. You could save/restore the kmap_atomic slots on context
@@ -21,10 +20,10 @@
mm/memory.c | 2 ++
3 files changed, 43 insertions(+)
-diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
-index ae68473..2b0882a 100644
---- a/arch/x86/kernel/process_32.c
-+++ b/arch/x86/kernel/process_32.c
+Index: linux-stable/arch/x86/kernel/process_32.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/process_32.c
++++ linux-stable/arch/x86/kernel/process_32.c
@@ -36,6 +36,7 @@
#include <linux/uaccess.h>
#include <linux/io.h>
@@ -33,7 +32,7 @@
#include <asm/pgtable.h>
#include <asm/ldt.h>
-@@ -285,6 +286,41 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -276,6 +277,41 @@ __switch_to(struct task_struct *prev_p,
task_thread_info(next_p)->flags & _TIF_WORK_CTXSW_NEXT))
__switch_to_xtra(prev_p, next_p, tss);
@@ -75,10 +74,10 @@
/*
* Leave lazy mode, flushing any hypercalls made here.
* This must be done before restoring TLS segments so
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 372c15d..7fc8321 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
@@ -63,6 +63,7 @@ struct sched_param {
#include <linux/nodemask.h>
#include <linux/mm_types.h>
@@ -87,7 +86,7 @@
#include <asm/page.h>
#include <asm/ptrace.h>
#include <asm/cputime.h>
-@@ -1647,6 +1648,10 @@ struct task_struct {
+@@ -1619,6 +1620,10 @@ struct task_struct {
struct rcu_head put_rcu;
int softirq_nestcnt;
#endif
@@ -98,11 +97,11 @@
};
#ifdef CONFIG_PREEMPT_RT_FULL
-diff --git a/mm/memory.c b/mm/memory.c
-index 68676fd..c63016b 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -3470,6 +3470,7 @@ unlock:
+Index: linux-stable/mm/memory.c
+===================================================================
+--- linux-stable.orig/mm/memory.c
++++ linux-stable/mm/memory.c
+@@ -3487,6 +3487,7 @@ unlock:
#ifdef CONFIG_PREEMPT_RT_FULL
void pagefault_disable(void)
{
@@ -110,7 +109,7 @@
current->pagefault_disabled++;
/*
* make sure to have issued the store before a pagefault
-@@ -3487,6 +3488,7 @@ void pagefault_enable(void)
+@@ -3504,6 +3505,7 @@ void pagefault_enable(void)
*/
barrier();
current->pagefault_disabled--;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-scatterlist-dont-disable-irqs-on-RT.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0073-mm-scatterlist-dont-disable-irqs-on-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0073-mm-scatterlist-dont-disable-irqs-on-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-scatterlist-dont-disable-irqs-on-RT.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 10363e4d2e1b02b302153afcf3d80b2cbe953efa Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 3 Jul 2009 08:44:34 -0500
-Subject: [073/256] mm: scatterlist dont disable irqs on RT
+Subject: mm: scatterlist dont disable irqs on RT
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
lib/scatterlist.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
-diff --git a/lib/scatterlist.c b/lib/scatterlist.c
-index 6096e89..4becb6d 100644
---- a/lib/scatterlist.c
-+++ b/lib/scatterlist.c
-@@ -423,7 +423,7 @@ void sg_miter_stop(struct sg_mapping_iter *miter)
+Index: linux-stable/lib/scatterlist.c
+===================================================================
+--- linux-stable.orig/lib/scatterlist.c
++++ linux-stable/lib/scatterlist.c
+@@ -479,7 +479,7 @@ void sg_miter_stop(struct sg_mapping_ite
flush_kernel_dcache_page(miter->page);
if (miter->__flags & SG_MITER_ATOMIC) {
@@ -21,7 +20,7 @@
kunmap_atomic(miter->addr);
} else
kunmap(miter->page);
-@@ -463,7 +463,7 @@ static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents,
+@@ -519,7 +519,7 @@ static size_t sg_copy_buffer(struct scat
sg_miter_start(&miter, sgl, nents, sg_flags);
@@ -30,7 +29,7 @@
while (sg_miter_next(&miter) && offset < buflen) {
unsigned int len;
-@@ -480,7 +480,7 @@ static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents,
+@@ -536,7 +536,7 @@ static size_t sg_copy_buffer(struct scat
sg_miter_stop(&miter);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-shrink-the-page-frame-to-rt-size.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0098-mm-shrink-the-page-frame-to-rt-size.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0098-mm-shrink-the-page-frame-to-rt-size.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-shrink-the-page-frame-to-rt-size.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 897fe5d6334572eb8c79adf32823f0b602b53f27 Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <peterz at infradead.org>
Date: Fri, 3 Jul 2009 08:44:54 -0500
-Subject: [098/256] mm: shrink the page frame to !-rt size
+Subject: mm: shrink the page frame to !-rt size
He below is a boot-tested hack to shrink the page frame size back to
normal.
@@ -11,17 +10,18 @@
Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/mm.h | 46 +++++++++++++++++++++++++++++++++++++++-------
include/linux/mm_types.h | 6 +++++-
mm/memory.c | 32 ++++++++++++++++++++++++++++++++
3 files changed, 76 insertions(+), 8 deletions(-)
-diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 74aa71b..7e11734 100644
---- a/include/linux/mm.h
-+++ b/include/linux/mm.h
-@@ -1200,27 +1200,59 @@ static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long a
+Index: linux-stable/include/linux/mm.h
+===================================================================
+--- linux-stable.orig/include/linux/mm.h
++++ linux-stable/include/linux/mm.h
+@@ -1225,27 +1225,59 @@ static inline pmd_t *pmd_alloc(struct mm
* overflow into the next struct page (as it might with DEBUG_SPINLOCK).
* When freeing, reset page->mapping so free_pages_check won't complain.
*/
@@ -88,11 +88,11 @@
static inline void pgtable_page_dtor(struct page *page)
{
pte_lock_deinit(page);
-diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index 3cc3062..e70ea9b 100644
---- a/include/linux/mm_types.h
-+++ b/include/linux/mm_types.h
-@@ -118,7 +118,11 @@ struct page {
+Index: linux-stable/include/linux/mm_types.h
+===================================================================
+--- linux-stable.orig/include/linux/mm_types.h
++++ linux-stable/include/linux/mm_types.h
+@@ -145,7 +145,11 @@ struct page {
* system if PG_buddy is set.
*/
#if USE_SPLIT_PTLOCKS
@@ -105,11 +105,11 @@
#endif
struct kmem_cache *slab; /* SLUB: Pointer to slab */
struct page *first_page; /* Compound tail pages */
-diff --git a/mm/memory.c b/mm/memory.c
-index 346246c..68676fd 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -4033,3 +4033,35 @@ void copy_user_huge_page(struct page *dst, struct page *src,
+Index: linux-stable/mm/memory.c
+===================================================================
+--- linux-stable.orig/mm/memory.c
++++ linux-stable/mm/memory.c
+@@ -4062,3 +4062,35 @@ void copy_user_huge_page(struct page *ds
}
}
#endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */
Added: dists/trunk/linux/debian/patches/features/all/rt/mm-slab-fix-potential-deadlock.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-slab-fix-potential-deadlock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,122 @@
+Subject: mm: slab: Fix potential deadlock
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Wed, 26 Sep 2012 16:20:00 +0200
+
+ =============================================
+[ INFO: possible recursive locking detected ]
+ 3.6.0-rt1+ #49 Not tainted
+ ---------------------------------------------
+ swapper/0/1 is trying to acquire lock:
+ lock_slab_on+0x72/0x77
+
+ but task is already holding lock:
+ __local_lock_irq+0x24/0x77
+
+ other info that might help us debug this:
+ Possible unsafe locking scenario:
+
+ CPU0
+ ----
+ lock(&per_cpu(slab_lock, __cpu).lock);
+ lock(&per_cpu(slab_lock, __cpu).lock);
+
+ *** DEADLOCK ***
+
+ May be due to missing lock nesting notation
+
+ 2 locks held by swapper/0/1:
+ kmem_cache_create+0x33/0x89
+ __local_lock_irq+0x24/0x77
+
+ stack backtrace:
+ Pid: 1, comm: swapper/0 Not tainted 3.6.0-rt1+ #49
+ Call Trace:
+ __lock_acquire+0x9a4/0xdc4
+ ? __local_lock_irq+0x24/0x77
+ ? lock_slab_on+0x72/0x77
+ lock_acquire+0xc4/0x108
+ ? lock_slab_on+0x72/0x77
+ ? unlock_slab_on+0x5b/0x5b
+ rt_spin_lock+0x36/0x3d
+ ? lock_slab_on+0x72/0x77
+ ? migrate_disable+0x85/0x93
+ lock_slab_on+0x72/0x77
+ do_ccupdate_local+0x19/0x44
+ slab_on_each_cpu+0x36/0x5a
+ do_tune_cpucache+0xc1/0x305
+ enable_cpucache+0x8c/0xb5
+ setup_cpu_cache+0x28/0x182
+ __kmem_cache_create+0x34b/0x380
+ ? shmem_mount+0x1a/0x1a
+ kmem_cache_create+0x4a/0x89
+ ? shmem_mount+0x1a/0x1a
+ shmem_init+0x3e/0xd4
+ kernel_init+0x11c/0x214
+ kernel_thread_helper+0x4/0x10
+ ? retint_restore_args+0x13/0x13
+ ? start_kernel+0x3bc/0x3bc
+ ? gs_change+0x13/0x13
+
+It's not a missing annotation. It's simply wrong code and needs to be
+fixed. Instead of nesting the local and the remote cpu lock simply
+acquire only the remote cpu lock, which is sufficient protection for
+this procedure.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+---
+ include/linux/locallock.h | 8 ++++++++
+ mm/slab.c | 10 ++--------
+ 2 files changed, 10 insertions(+), 8 deletions(-)
+
+Index: linux-stable/include/linux/locallock.h
+===================================================================
+--- linux-stable.orig/include/linux/locallock.h
++++ linux-stable/include/linux/locallock.h
+@@ -96,6 +96,9 @@ static inline void __local_lock_irq(stru
+ #define local_lock_irq(lvar) \
+ do { __local_lock_irq(&get_local_var(lvar)); } while (0)
+
++#define local_lock_irq_on(lvar, cpu) \
++ do { __local_lock_irq(&per_cpu(lvar, cpu)); } while (0)
++
+ static inline void __local_unlock_irq(struct local_irq_lock *lv)
+ {
+ LL_WARN(!lv->nestcnt);
+@@ -111,6 +114,11 @@ static inline void __local_unlock_irq(st
+ put_local_var(lvar); \
+ } while (0)
+
++#define local_unlock_irq_on(lvar, cpu) \
++ do { \
++ __local_unlock_irq(&per_cpu(lvar, cpu)); \
++ } while (0)
++
+ static inline int __local_lock_irqsave(struct local_irq_lock *lv)
+ {
+ if (lv->owner != current) {
+Index: linux-stable/mm/slab.c
+===================================================================
+--- linux-stable.orig/mm/slab.c
++++ linux-stable/mm/slab.c
+@@ -728,18 +728,12 @@ slab_on_each_cpu(void (*func)(void *arg,
+
+ static void lock_slab_on(unsigned int cpu)
+ {
+- if (cpu == smp_processor_id())
+- local_lock_irq(slab_lock);
+- else
+- local_spin_lock_irq(slab_lock, &per_cpu(slab_lock, cpu).lock);
++ local_lock_irq_on(slab_lock, cpu);
+ }
+
+ static void unlock_slab_on(unsigned int cpu)
+ {
+- if (cpu == smp_processor_id())
+- local_unlock_irq(slab_lock);
+- else
+- local_spin_unlock_irq(slab_lock, &per_cpu(slab_lock, cpu).lock);
++ local_unlock_irq_on(slab_lock, cpu);
+ }
+ #endif
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-slab-more-lock-breaks.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0092-mm-More-lock-breaks-in-slab.c.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0092-mm-More-lock-breaks-in-slab.c.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-slab-more-lock-breaks.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,22 @@
-From bddd60cbc825f7aefb1e62101b454d0410cb47c6 Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
Date: Fri, 3 Jul 2009 08:44:43 -0500
-Subject: [092/256] mm: More lock breaks in slab.c
+Subject: mm: More lock breaks in slab.c
Handle __free_pages outside of the locked regions. This reduces the
lock contention on the percpu slab locks in -rt significantly.
Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- mm/slab.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++---------------
- 1 file changed, 68 insertions(+), 22 deletions(-)
+ mm/slab.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 86 insertions(+), 22 deletions(-)
-diff --git a/mm/slab.c b/mm/slab.c
-index 341748b..15bce6b 100644
---- a/mm/slab.c
-+++ b/mm/slab.c
-@@ -727,6 +727,7 @@ static void slab_set_debugobj_lock_classes(struct kmem_cache *cachep)
+Index: linux-stable/mm/slab.c
+===================================================================
+--- linux-stable.orig/mm/slab.c
++++ linux-stable/mm/slab.c
+@@ -704,6 +704,7 @@ static void slab_set_debugobj_lock_class
#endif
static DEFINE_PER_CPU(struct delayed_work, slab_reap_work);
@@ -24,16 +24,34 @@
static DEFINE_LOCAL_IRQ_LOCK(slab_lock);
#ifndef CONFIG_PREEMPT_RT_BASE
-@@ -742,14 +743,39 @@ slab_on_each_cpu(void (*func)(void *arg, int this_cpu), void *arg)
+@@ -719,14 +720,57 @@ slab_on_each_cpu(void (*func)(void *arg,
{
unsigned int i;
- for_each_online_cpu(i) {
- spin_lock_irq(&per_cpu(slab_lock, i).lock);
++ get_cpu_light();
+ for_each_online_cpu(i)
func(arg, i);
- spin_unlock_irq(&per_cpu(slab_lock, i).lock);
- }
++ put_cpu_light();
++}
++
++static void lock_slab_on(unsigned int cpu)
++{
++ if (cpu == smp_processor_id())
++ local_lock_irq(slab_lock);
++ else
++ local_spin_lock_irq(slab_lock, &per_cpu(slab_lock, cpu).lock);
++}
++
++static void unlock_slab_on(unsigned int cpu)
++{
++ if (cpu == smp_processor_id())
++ local_unlock_irq(slab_lock);
++ else
++ local_spin_unlock_irq(slab_lock, &per_cpu(slab_lock, cpu).lock);
}
#endif
@@ -68,7 +86,7 @@
static inline struct array_cache *cpu_cache_get(struct kmem_cache *cachep)
{
return cachep->array[smp_processor_id()];
-@@ -1245,7 +1271,7 @@ static void __cpuinit cpuup_canceled(long cpu)
+@@ -1340,7 +1384,7 @@ static void __cpuinit cpuup_canceled(lon
free_block(cachep, nc->entry, nc->avail, node);
if (!cpumask_empty(mask)) {
@@ -77,7 +95,7 @@
goto free_array_cache;
}
-@@ -1259,7 +1285,7 @@ static void __cpuinit cpuup_canceled(long cpu)
+@@ -1354,7 +1398,7 @@ static void __cpuinit cpuup_canceled(lon
alien = l3->alien;
l3->alien = NULL;
@@ -86,7 +104,7 @@
kfree(shared);
if (alien) {
-@@ -1540,6 +1566,8 @@ void __init kmem_cache_init(void)
+@@ -1635,6 +1679,8 @@ void __init kmem_cache_init(void)
use_alien_caches = 0;
local_irq_lock_init(slab_lock);
@@ -95,7 +113,7 @@
for (i = 0; i < NUM_INIT_LISTS; i++) {
kmem_list3_init(&initkmem_list3[i]);
-@@ -1868,12 +1896,14 @@ static void *kmem_getpages(struct kmem_cache *cachep, gfp_t flags, int nodeid)
+@@ -1973,12 +2019,14 @@ static void *kmem_getpages(struct kmem_c
/*
* Interface to system's page release.
*/
@@ -112,7 +130,7 @@
kmemcheck_free_shadow(page, cachep->gfporder);
if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
-@@ -1889,7 +1919,13 @@ static void kmem_freepages(struct kmem_cache *cachep, void *addr)
+@@ -1995,7 +2043,13 @@ static void kmem_freepages(struct kmem_c
}
if (current->reclaim_state)
current->reclaim_state->reclaimed_slab += nr_freed;
@@ -127,7 +145,7 @@
}
static void kmem_rcu_free(struct rcu_head *head)
-@@ -1897,7 +1933,7 @@ static void kmem_rcu_free(struct rcu_head *head)
+@@ -2003,7 +2057,7 @@ static void kmem_rcu_free(struct rcu_hea
struct slab_rcu *slab_rcu = (struct slab_rcu *)head;
struct kmem_cache *cachep = slab_rcu->cachep;
@@ -136,7 +154,7 @@
if (OFF_SLAB(cachep))
kmem_cache_free(cachep->slabp_cache, slab_rcu);
}
-@@ -2116,7 +2152,8 @@ static void slab_destroy_debugcheck(struct kmem_cache *cachep, struct slab *slab
+@@ -2222,7 +2276,8 @@ static void slab_destroy_debugcheck(stru
* Before calling the slab must have been unlinked from the cache. The
* cache-lock is not held/needed.
*/
@@ -146,7 +164,7 @@
{
void *addr = slabp->s_mem - slabp->colouroff;
-@@ -2129,7 +2166,7 @@ static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp)
+@@ -2235,7 +2290,7 @@ static void slab_destroy(struct kmem_cac
slab_rcu->addr = addr;
call_rcu(&slab_rcu->head, kmem_rcu_free);
} else {
@@ -155,7 +173,7 @@
if (OFF_SLAB(cachep))
kmem_cache_free(cachep->slabp_cache, slabp);
}
-@@ -2651,9 +2688,15 @@ static void do_drain(void *arg)
+@@ -2700,9 +2755,15 @@ static void do_drain(void *arg)
__do_drain(arg, smp_processor_id());
}
#else
@@ -165,15 +183,15 @@
- __do_drain(arg, this_cpu);
+ LIST_HEAD(tmp);
+
-+ spin_lock_irq(&per_cpu(slab_lock, cpu).lock);
++ lock_slab_on(cpu);
+ __do_drain(arg, cpu);
+ list_splice_init(&per_cpu(slab_free_list, cpu), &tmp);
-+ spin_unlock_irq(&per_cpu(slab_lock, cpu).lock);
++ unlock_slab_on(cpu);
+ free_delayed(&tmp);
}
#endif
-@@ -2711,7 +2754,7 @@ static int drain_freelist(struct kmem_cache *cache,
+@@ -2760,7 +2821,7 @@ static int drain_freelist(struct kmem_ca
*/
l3->free_objects -= cache->num;
local_spin_unlock_irq(slab_lock, &l3->list_lock);
@@ -182,7 +200,7 @@
nr_freed++;
}
out:
-@@ -3046,7 +3089,7 @@ static int cache_grow(struct kmem_cache *cachep,
+@@ -3095,7 +3156,7 @@ static int cache_grow(struct kmem_cache
spin_unlock(&l3->list_lock);
return 1;
opps1:
@@ -191,7 +209,7 @@
failed:
if (local_flags & __GFP_WAIT)
local_lock_irq(slab_lock);
-@@ -3700,7 +3743,7 @@ static void free_block(struct kmem_cache *cachep, void **objpp, int nr_objects,
+@@ -3772,7 +3833,7 @@ static void free_block(struct kmem_cache
* a different cache, refer to comments before
* alloc_slabmgmt.
*/
@@ -200,8 +218,8 @@
} else {
list_add(&slabp->list, &l3->slabs_free);
}
-@@ -3967,7 +4010,7 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
- debug_check_no_obj_freed(objp, obj_size(cachep));
+@@ -4039,7 +4100,7 @@ void kmem_cache_free(struct kmem_cache *
+ debug_check_no_obj_freed(objp, cachep->object_size);
local_lock_irqsave(slab_lock, flags);
__cache_free(cachep, objp, __builtin_return_address(0));
- local_unlock_irqrestore(slab_lock, flags);
@@ -209,8 +227,8 @@
trace_kmem_cache_free(_RET_IP_, objp);
}
-@@ -3997,7 +4040,7 @@ void kfree(const void *objp)
- debug_check_no_obj_freed(objp, obj_size(c));
+@@ -4070,7 +4131,7 @@ void kfree(const void *objp)
+ debug_check_no_obj_freed(objp, c->object_size);
local_lock_irqsave(slab_lock, flags);
__cache_free(c, (void *)objp, __builtin_return_address(0));
- local_unlock_irqrestore(slab_lock, flags);
@@ -218,7 +236,7 @@
}
EXPORT_SYMBOL(kfree);
-@@ -4053,7 +4096,8 @@ static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
+@@ -4126,7 +4187,8 @@ static int alloc_kmemlist(struct kmem_ca
}
l3->free_limit = (1 + nr_cpus_node(node)) *
cachep->batchcount + cachep->num;
@@ -228,17 +246,17 @@
kfree(shared);
free_alien_cache(new_alien);
continue;
-@@ -4119,7 +4163,9 @@ static void do_ccupdate_local(void *info)
+@@ -4192,7 +4254,9 @@ static void do_ccupdate_local(void *info
#else
static void do_ccupdate_local(void *info, int cpu)
{
-+ spin_lock_irq(&per_cpu(slab_lock, cpu).lock);
++ lock_slab_on(cpu);
__do_ccupdate_local(info, cpu);
-+ spin_unlock_irq(&per_cpu(slab_lock, cpu).lock);
++ unlock_slab_on(cpu);
}
#endif
-@@ -4161,8 +4207,8 @@ static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
+@@ -4234,8 +4298,8 @@ static int do_tune_cpucache(struct kmem_
local_spin_lock_irq(slab_lock,
&cachep->nodelists[cpu_to_mem(i)]->list_lock);
free_block(cachep, ccold->entry, ccold->avail, cpu_to_mem(i));
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-slab-move-debug-out.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0044-mm-slab-move-debug-out.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0044-mm-slab-move-debug-out.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-slab-move-debug-out.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,38 +1,38 @@
-From 9fb211972c1f2b363434b729fbea6e2d0c6958da Mon Sep 17 00:00:00 2001
+Subject: mm-slab-move-debug-out.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 20 Jun 2011 10:42:04 +0200
-Subject: [044/256] mm-slab-move-debug-out.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
mm/slab.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/mm/slab.c b/mm/slab.c
-index 1fd4b4d..80c57f9 100644
---- a/mm/slab.c
-+++ b/mm/slab.c
-@@ -3919,10 +3919,10 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
+Index: linux-stable/mm/slab.c
+===================================================================
+--- linux-stable.orig/mm/slab.c
++++ linux-stable/mm/slab.c
+@@ -3991,10 +3991,10 @@ void kmem_cache_free(struct kmem_cache *
{
unsigned long flags;
- local_irq_save(flags);
- debug_check_no_locks_freed(objp, obj_size(cachep));
+ debug_check_no_locks_freed(objp, cachep->object_size);
if (!(cachep->flags & SLAB_DEBUG_OBJECTS))
- debug_check_no_obj_freed(objp, obj_size(cachep));
+ debug_check_no_obj_freed(objp, cachep->object_size);
+ local_irq_save(flags);
__cache_free(cachep, objp, __builtin_return_address(0));
local_irq_restore(flags);
-@@ -3948,11 +3948,11 @@ void kfree(const void *objp)
+@@ -4020,12 +4020,12 @@ void kfree(const void *objp)
if (unlikely(ZERO_OR_NULL_PTR(objp)))
return;
- local_irq_save(flags);
kfree_debugcheck(objp);
c = virt_to_cache(objp);
- debug_check_no_locks_freed(objp, obj_size(c));
- debug_check_no_obj_freed(objp, obj_size(c));
+ debug_check_no_locks_freed(objp, c->object_size);
+
+ debug_check_no_obj_freed(objp, c->object_size);
+ local_irq_save(flags);
__cache_free(c, (void *)objp, __builtin_return_address(0));
local_irq_restore(flags);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-slab-wrap-functions.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0090-mm-slab-wrap-functions.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0090-mm-slab-wrap-functions.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-slab-wrap-functions.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,26 +1,25 @@
-From 001bf667d6da07247e9095511873be13551328a2 Mon Sep 17 00:00:00 2001
+Subject: mm-slab-wrap-functions.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 18 Jun 2011 19:44:43 +0200
-Subject: [090/256] mm-slab-wrap-functions.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- mm/slab.c | 152 ++++++++++++++++++++++++++++++++++++++++++-------------------
- 1 file changed, 104 insertions(+), 48 deletions(-)
+ mm/slab.c | 154 ++++++++++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 105 insertions(+), 49 deletions(-)
-diff --git a/mm/slab.c b/mm/slab.c
-index 80c57f9..dc84364 100644
---- a/mm/slab.c
-+++ b/mm/slab.c
-@@ -116,6 +116,7 @@
+Index: linux-stable/mm/slab.c
+===================================================================
+--- linux-stable.orig/mm/slab.c
++++ linux-stable/mm/slab.c
+@@ -117,6 +117,7 @@
#include <linux/kmemcheck.h>
#include <linux/memory.h>
#include <linux/prefetch.h>
+#include <linux/locallock.h>
- #include <asm/cacheflush.h>
- #include <asm/tlbflush.h>
-@@ -726,12 +727,40 @@ static void slab_set_debugobj_lock_classes(struct kmem_cache *cachep)
+ #include <net/sock.h>
+
+@@ -703,12 +704,40 @@ static void slab_set_debugobj_lock_class
#endif
static DEFINE_PER_CPU(struct delayed_work, slab_reap_work);
@@ -61,7 +60,7 @@
static inline struct kmem_cache *__find_general_cachep(size_t size,
gfp_t gfpflags)
{
-@@ -1080,9 +1109,10 @@ static void reap_alien(struct kmem_cache *cachep, struct kmem_list3 *l3)
+@@ -1175,9 +1204,10 @@ static void reap_alien(struct kmem_cache
if (l3->alien) {
struct array_cache *ac = l3->alien[node];
@@ -74,7 +73,7 @@
}
}
}
-@@ -1097,9 +1127,9 @@ static void drain_alien_cache(struct kmem_cache *cachep,
+@@ -1192,9 +1222,9 @@ static void drain_alien_cache(struct kme
for_each_online_node(i) {
ac = alien[i];
if (ac) {
@@ -86,7 +85,7 @@
}
}
}
-@@ -1178,11 +1208,11 @@ static int init_cache_nodelists_node(int node)
+@@ -1273,11 +1303,11 @@ static int init_cache_nodelists_node(int
cachep->nodelists[node] = l3;
}
@@ -100,7 +99,7 @@
}
return 0;
}
-@@ -1207,7 +1237,7 @@ static void __cpuinit cpuup_canceled(long cpu)
+@@ -1302,7 +1332,7 @@ static void __cpuinit cpuup_canceled(lon
if (!l3)
goto free_array_cache;
@@ -109,7 +108,7 @@
/* Free limit for this kmem_list3 */
l3->free_limit -= cachep->batchcount;
-@@ -1215,7 +1245,7 @@ static void __cpuinit cpuup_canceled(long cpu)
+@@ -1310,7 +1340,7 @@ static void __cpuinit cpuup_canceled(lon
free_block(cachep, nc->entry, nc->avail, node);
if (!cpumask_empty(mask)) {
@@ -118,7 +117,7 @@
goto free_array_cache;
}
-@@ -1229,7 +1259,7 @@ static void __cpuinit cpuup_canceled(long cpu)
+@@ -1324,7 +1354,7 @@ static void __cpuinit cpuup_canceled(lon
alien = l3->alien;
l3->alien = NULL;
@@ -127,7 +126,7 @@
kfree(shared);
if (alien) {
-@@ -1303,7 +1333,7 @@ static int __cpuinit cpuup_prepare(long cpu)
+@@ -1398,7 +1428,7 @@ static int __cpuinit cpuup_prepare(long
l3 = cachep->nodelists[node];
BUG_ON(!l3);
@@ -136,7 +135,7 @@
if (!l3->shared) {
/*
* We are serialised from CPU_DEAD or
-@@ -1318,7 +1348,7 @@ static int __cpuinit cpuup_prepare(long cpu)
+@@ -1413,7 +1443,7 @@ static int __cpuinit cpuup_prepare(long
alien = NULL;
}
#endif
@@ -145,7 +144,7 @@
kfree(shared);
free_alien_cache(alien);
if (cachep->flags & SLAB_DEBUG_OBJECTS)
-@@ -1509,6 +1539,8 @@ void __init kmem_cache_init(void)
+@@ -1604,6 +1634,8 @@ void __init kmem_cache_init(void)
if (num_possible_nodes() == 1)
use_alien_caches = 0;
@@ -154,7 +153,7 @@
for (i = 0; i < NUM_INIT_LISTS; i++) {
kmem_list3_init(&initkmem_list3[i]);
if (i < MAX_NUMNODES)
-@@ -2565,7 +2597,7 @@ EXPORT_SYMBOL(kmem_cache_create);
+@@ -2614,7 +2646,7 @@ __kmem_cache_create (const char *name, s
#if DEBUG
static void check_irq_off(void)
{
@@ -163,7 +162,7 @@
}
static void check_irq_on(void)
-@@ -2600,13 +2632,12 @@ static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
+@@ -2649,26 +2681,37 @@ static void drain_array(struct kmem_cach
struct array_cache *ac,
int force, int node);
@@ -176,10 +175,11 @@
+ int node = cpu_to_mem(cpu);
- check_irq_off();
- ac = cpu_cache_get(cachep);
+- ac = cpu_cache_get(cachep);
++ ac = cpu_cache_get_on_cpu(cachep, cpu);
spin_lock(&cachep->nodelists[node]->list_lock);
free_block(cachep, ac->entry, ac->avail, node);
-@@ -2614,12 +2645,24 @@ static void do_drain(void *arg)
+ spin_unlock(&cachep->nodelists[node]->list_lock);
ac->avail = 0;
}
@@ -205,7 +205,7 @@
check_irq_on();
for_each_online_node(node) {
l3 = cachep->nodelists[node];
-@@ -2650,10 +2693,10 @@ static int drain_freelist(struct kmem_cache *cache,
+@@ -2699,10 +2742,10 @@ static int drain_freelist(struct kmem_ca
nr_freed = 0;
while (nr_freed < tofree && !list_empty(&l3->slabs_free)) {
@@ -218,7 +218,7 @@
goto out;
}
-@@ -2667,7 +2710,7 @@ static int drain_freelist(struct kmem_cache *cache,
+@@ -2716,7 +2759,7 @@ static int drain_freelist(struct kmem_ca
* to the cache.
*/
l3->free_objects -= cache->num;
@@ -227,7 +227,7 @@
slab_destroy(cache, slabp);
nr_freed++;
}
-@@ -2962,7 +3005,7 @@ static int cache_grow(struct kmem_cache *cachep,
+@@ -3011,7 +3054,7 @@ static int cache_grow(struct kmem_cache
offset *= cachep->colour_off;
if (local_flags & __GFP_WAIT)
@@ -236,7 +236,7 @@
/*
* The test for missing atomic flag is performed here, rather than
-@@ -2992,7 +3035,7 @@ static int cache_grow(struct kmem_cache *cachep,
+@@ -3041,7 +3084,7 @@ static int cache_grow(struct kmem_cache
cache_init_objs(cachep, slabp);
if (local_flags & __GFP_WAIT)
@@ -245,7 +245,7 @@
check_irq_off();
spin_lock(&l3->list_lock);
-@@ -3006,7 +3049,7 @@ opps1:
+@@ -3055,7 +3098,7 @@ opps1:
kmem_freepages(cachep, objp);
failed:
if (local_flags & __GFP_WAIT)
@@ -254,7 +254,7 @@
return 0;
}
-@@ -3400,11 +3443,11 @@ retry:
+@@ -3469,11 +3512,11 @@ retry:
* set and go into memory reserves if necessary.
*/
if (local_flags & __GFP_WAIT)
@@ -268,7 +268,7 @@
if (obj) {
/*
* Insert into the appropriate per node queues
-@@ -3522,7 +3565,7 @@ __cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
+@@ -3591,7 +3634,7 @@ __cache_alloc_node(struct kmem_cache *ca
return NULL;
cache_alloc_debugcheck_before(cachep, flags);
@@ -277,16 +277,16 @@
if (nodeid == NUMA_NO_NODE)
nodeid = slab_node;
-@@ -3547,7 +3590,7 @@ __cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
+@@ -3616,7 +3659,7 @@ __cache_alloc_node(struct kmem_cache *ca
/* ___cache_alloc_node can fall back to other nodes */
ptr = ____cache_alloc_node(cachep, flags, nodeid);
out:
- local_irq_restore(save_flags);
+ local_unlock_irqrestore(slab_lock, save_flags);
ptr = cache_alloc_debugcheck_after(cachep, flags, ptr, caller);
- kmemleak_alloc_recursive(ptr, obj_size(cachep), 1, cachep->flags,
+ kmemleak_alloc_recursive(ptr, cachep->object_size, 1, cachep->flags,
flags);
-@@ -3607,9 +3650,9 @@ __cache_alloc(struct kmem_cache *cachep, gfp_t flags, void *caller)
+@@ -3676,9 +3719,9 @@ __cache_alloc(struct kmem_cache *cachep,
return NULL;
cache_alloc_debugcheck_before(cachep, flags);
@@ -296,12 +296,12 @@
- local_irq_restore(save_flags);
+ local_unlock_irqrestore(slab_lock, save_flags);
objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller);
- kmemleak_alloc_recursive(objp, obj_size(cachep), 1, cachep->flags,
+ kmemleak_alloc_recursive(objp, cachep->object_size, 1, cachep->flags,
flags);
-@@ -3922,9 +3965,9 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
- debug_check_no_locks_freed(objp, obj_size(cachep));
+@@ -3994,9 +4037,9 @@ void kmem_cache_free(struct kmem_cache *
+ debug_check_no_locks_freed(objp, cachep->object_size);
if (!(cachep->flags & SLAB_DEBUG_OBJECTS))
- debug_check_no_obj_freed(objp, obj_size(cachep));
+ debug_check_no_obj_freed(objp, cachep->object_size);
- local_irq_save(flags);
+ local_lock_irqsave(slab_lock, flags);
__cache_free(cachep, objp, __builtin_return_address(0));
@@ -310,10 +310,10 @@
trace_kmem_cache_free(_RET_IP_, objp);
}
-@@ -3952,9 +3995,9 @@ void kfree(const void *objp)
- c = virt_to_cache(objp);
- debug_check_no_locks_freed(objp, obj_size(c));
- debug_check_no_obj_freed(objp, obj_size(c));
+@@ -4025,9 +4068,9 @@ void kfree(const void *objp)
+ debug_check_no_locks_freed(objp, c->object_size);
+
+ debug_check_no_obj_freed(objp, c->object_size);
- local_irq_save(flags);
+ local_lock_irqsave(slab_lock, flags);
__cache_free(c, (void *)objp, __builtin_return_address(0));
@@ -322,7 +322,7 @@
}
EXPORT_SYMBOL(kfree);
-@@ -3997,7 +4040,7 @@ static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
+@@ -4070,7 +4113,7 @@ static int alloc_kmemlist(struct kmem_ca
if (l3) {
struct array_cache *shared = l3->shared;
@@ -331,7 +331,7 @@
if (shared)
free_block(cachep, shared->entry,
-@@ -4010,7 +4053,7 @@ static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
+@@ -4083,7 +4126,7 @@ static int alloc_kmemlist(struct kmem_ca
}
l3->free_limit = (1 + nr_cpus_node(node)) *
cachep->batchcount + cachep->num;
@@ -340,7 +340,7 @@
kfree(shared);
free_alien_cache(new_alien);
continue;
-@@ -4057,17 +4100,28 @@ struct ccupdate_struct {
+@@ -4130,17 +4173,28 @@ struct ccupdate_struct {
struct array_cache *new[0];
};
@@ -372,9 +372,9 @@
+}
+#endif
- /* Always called with the cache_chain_mutex held */
+ /* Always called with the slab_mutex held */
static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
-@@ -4093,7 +4147,7 @@ static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
+@@ -4166,7 +4220,7 @@ static int do_tune_cpucache(struct kmem_
}
new->cachep = cachep;
@@ -383,7 +383,7 @@
check_irq_on();
cachep->batchcount = batchcount;
-@@ -4104,9 +4158,11 @@ static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
+@@ -4177,9 +4231,11 @@ static int do_tune_cpucache(struct kmem_
struct array_cache *ccold = new->new[i];
if (!ccold)
continue;
@@ -397,7 +397,7 @@
kfree(ccold);
}
kfree(new);
-@@ -4182,7 +4238,7 @@ static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
+@@ -4255,7 +4311,7 @@ static void drain_array(struct kmem_cach
if (ac->touched && !force) {
ac->touched = 0;
} else {
@@ -406,7 +406,7 @@
if (ac->avail) {
tofree = force ? ac->avail : (ac->limit + 4) / 5;
if (tofree > ac->avail)
-@@ -4192,7 +4248,7 @@ static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
+@@ -4265,7 +4321,7 @@ static void drain_array(struct kmem_cach
memmove(ac->entry, &(ac->entry[tofree]),
sizeof(void *) * ac->avail);
}
@@ -415,7 +415,7 @@
}
}
-@@ -4331,7 +4387,7 @@ static int s_show(struct seq_file *m, void *p)
+@@ -4404,7 +4460,7 @@ static int s_show(struct seq_file *m, vo
continue;
check_irq_on();
@@ -424,7 +424,7 @@
list_for_each_entry(slabp, &l3->slabs_full, list) {
if (slabp->inuse != cachep->num && !error)
-@@ -4356,7 +4412,7 @@ static int s_show(struct seq_file *m, void *p)
+@@ -4429,7 +4485,7 @@ static int s_show(struct seq_file *m, vo
if (l3->shared)
shared_avail += l3->shared->avail;
@@ -433,7 +433,7 @@
}
num_slabs += active_slabs;
num_objs = num_slabs * cachep->num;
-@@ -4585,13 +4641,13 @@ static int leaks_show(struct seq_file *m, void *p)
+@@ -4658,13 +4714,13 @@ static int leaks_show(struct seq_file *m
continue;
check_irq_on();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mm-vmalloc-use-get-cpu-light.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0207-mm-vmalloc.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0207-mm-vmalloc.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mm-vmalloc-use-get-cpu-light.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 05db36ad1189931deb244e393d42c684af76ef5e Mon Sep 17 00:00:00 2001
+Subject: mm-vmalloc.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 12 Jul 2011 11:39:36 +0200
-Subject: [207/256] mm-vmalloc.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
mm/vmalloc.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
-diff --git a/mm/vmalloc.c b/mm/vmalloc.c
-index 1196c77..d049fbd 100644
---- a/mm/vmalloc.c
-+++ b/mm/vmalloc.c
-@@ -782,7 +782,7 @@ static struct vmap_block *new_vmap_block(gfp_t gfp_mask)
+Index: linux-stable/mm/vmalloc.c
+===================================================================
+--- linux-stable.orig/mm/vmalloc.c
++++ linux-stable/mm/vmalloc.c
+@@ -782,7 +782,7 @@ static struct vmap_block *new_vmap_block
struct vmap_block *vb;
struct vmap_area *va;
unsigned long vb_idx;
@@ -21,7 +20,7 @@
node = numa_node_id();
-@@ -821,12 +821,13 @@ static struct vmap_block *new_vmap_block(gfp_t gfp_mask)
+@@ -821,12 +821,13 @@ static struct vmap_block *new_vmap_block
BUG_ON(err);
radix_tree_preload_end();
@@ -37,7 +36,7 @@
return vb;
}
-@@ -900,7 +901,7 @@ static void *vb_alloc(unsigned long size, gfp_t gfp_mask)
+@@ -900,7 +901,7 @@ static void *vb_alloc(unsigned long size
struct vmap_block *vb;
unsigned long addr = 0;
unsigned int order;
@@ -46,7 +45,7 @@
BUG_ON(size & ~PAGE_MASK);
BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC);
-@@ -908,7 +909,8 @@ static void *vb_alloc(unsigned long size, gfp_t gfp_mask)
+@@ -916,7 +917,8 @@ static void *vb_alloc(unsigned long size
again:
rcu_read_lock();
@@ -56,7 +55,7 @@
list_for_each_entry_rcu(vb, &vbq->free, free_list) {
int i;
-@@ -945,7 +947,7 @@ next:
+@@ -953,7 +955,7 @@ next:
if (purge)
purge_fragmented_blocks_thiscpu();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/mutex-no-spin-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0160-mutex-no-spin-on-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0160-mutex-no-spin-on-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/mutex-no-spin-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 849852b9d17acef199af44494634fbdd677179b7 Mon Sep 17 00:00:00 2001
+Subject: mutex-no-spin-on-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 21:51:45 +0200
-Subject: [160/256] mutex-no-spin-on-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/Kconfig.locks | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/kernel/Kconfig.locks b/kernel/Kconfig.locks
-index 2251882..033ebc0 100644
---- a/kernel/Kconfig.locks
-+++ b/kernel/Kconfig.locks
+Index: linux-stable/kernel/Kconfig.locks
+===================================================================
+--- linux-stable.orig/kernel/Kconfig.locks
++++ linux-stable/kernel/Kconfig.locks
@@ -199,4 +199,4 @@ config INLINE_WRITE_UNLOCK_IRQRESTORE
def_bool !DEBUG_SPINLOCK && ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
Added: dists/trunk/linux/debian/patches/features/all/rt/net-another-local-irq-disable-alloc-atomic-headache.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/net-another-local-irq-disable-alloc-atomic-headache.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,49 @@
+Subject: net: Another local_irq_disable/kmalloc headache
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Wed, 26 Sep 2012 16:21:08 +0200
+
+Replace it by a local lock. Though that's pretty inefficient :(
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ net/core/skbuff.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+Index: linux-stable/net/core/skbuff.c
+===================================================================
+--- linux-stable.orig/net/core/skbuff.c
++++ linux-stable/net/core/skbuff.c
+@@ -60,6 +60,7 @@
+ #include <linux/scatterlist.h>
+ #include <linux/errqueue.h>
+ #include <linux/prefetch.h>
++#include <linux/locallock.h>
+
+ #include <net/protocol.h>
+ #include <net/dst.h>
+@@ -345,6 +346,7 @@ struct netdev_alloc_cache {
+ unsigned int pagecnt_bias;
+ };
+ static DEFINE_PER_CPU(struct netdev_alloc_cache, netdev_alloc_cache);
++static DEFINE_LOCAL_IRQ_LOCK(netdev_alloc_lock);
+
+ #define NETDEV_PAGECNT_BIAS (PAGE_SIZE / SMP_CACHE_BYTES)
+
+@@ -354,7 +356,7 @@ static void *__netdev_alloc_frag(unsigne
+ void *data = NULL;
+ unsigned long flags;
+
+- local_irq_save(flags);
++ local_lock_irqsave(netdev_alloc_lock, flags);
+ nc = &__get_cpu_var(netdev_alloc_cache);
+ if (unlikely(!nc->page)) {
+ refill:
+@@ -379,7 +381,7 @@ recycle:
+ nc->offset += fragsz;
+ nc->pagecnt_bias--;
+ end:
+- local_irq_restore(flags);
++ local_unlock_irqrestore(netdev_alloc_lock, flags);
+ return data;
+ }
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/net-flip-lock-dep-thingy.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0047-net-flip-lock-dep-thingy.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0047-net-flip-lock-dep-thingy.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/net-flip-lock-dep-thingy.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From edb592814fb3b5dde0b37237e9a4f1e209228597 Mon Sep 17 00:00:00 2001
+Subject: net-flip-lock-dep-thingy.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 28 Jun 2011 10:59:58 +0200
-Subject: [047/256] net-flip-lock-dep-thingy.patch
=======================================================
[ INFO: possible circular locking dependency detected ]
@@ -15,6 +14,7 @@
which lock already depends on the new lock.
+
the existing dependency chain (in reverse order) is:
-> #1 (sk_lock-AF_INET){+.+...}:
@@ -87,16 +87,17 @@
[<ffffffff8112667a>] sys_close+0xf8/0x13d
[<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
+
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
net/core/sock.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
-diff --git a/net/core/sock.c b/net/core/sock.c
-index b2e14c0..5cd7df1 100644
---- a/net/core/sock.c
-+++ b/net/core/sock.c
-@@ -2139,12 +2139,11 @@ void lock_sock_nested(struct sock *sk, int subclass)
+Index: linux-stable/net/core/sock.c
+===================================================================
+--- linux-stable.orig/net/core/sock.c
++++ linux-stable/net/core/sock.c
+@@ -2204,12 +2204,11 @@ void lock_sock_nested(struct sock *sk, i
if (sk->sk_lock.owned)
__lock_sock(sk);
sk->sk_lock.owned = 1;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/net-netif_rx_ni-migrate-disable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0157-net-netif_rx_ni-migrate-disable.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0157-net-netif_rx_ni-migrate-disable.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/net-netif_rx_ni-migrate-disable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 7ccd0a2f82ac5101bbcfa58cc1d616a7e171aed8 Mon Sep 17 00:00:00 2001
+Subject: net-netif_rx_ni-migrate-disable.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 16:29:27 +0200
-Subject: [157/256] net-netif_rx_ni-migrate-disable.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
net/core/dev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/net/core/dev.c b/net/core/dev.c
-index ca7a845..8b645be 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -2960,11 +2960,11 @@ int netif_rx_ni(struct sk_buff *skb)
+Index: linux-stable/net/core/dev.c
+===================================================================
+--- linux-stable.orig/net/core/dev.c
++++ linux-stable/net/core/dev.c
+@@ -2990,11 +2990,11 @@ int netif_rx_ni(struct sk_buff *skb)
{
int err;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/net-tx-action-avoid-livelock-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0223-net-Avoid-livelock-in-net_tx_action-on-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0223-net-Avoid-livelock-in-net_tx_action-on-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/net-tx-action-avoid-livelock-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 844cc03c2ba864198fb326f63e8b3c8ec288f8ef Mon Sep 17 00:00:00 2001
+Subject: net: Avoid livelock in net_tx_action() on RT
From: Steven Rostedt <srostedt at redhat.com>
-Date: Thu, 6 Oct 2011 10:48:39 -0400
-Subject: [223/256] net: Avoid livelock in net_tx_action() on RT
+Date: Thu, 06 Oct 2011 10:48:39 -0400
qdisc_lock is taken w/o disabling interrupts or bottom halfs. So code
holding a qdisc_lock() can be interrupted and softirqs can run on the
@@ -38,15 +37,16 @@
Cc: John Kacur <jkacur at redhat.com>
Cc: Luis Claudio R. Goncalves <lclaudio at redhat.com>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
net/core/dev.c | 32 +++++++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 4e15710..252c15a 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -2970,6 +2970,36 @@ int netif_rx_ni(struct sk_buff *skb)
+Index: linux-stable/net/core/dev.c
+===================================================================
+--- linux-stable.orig/net/core/dev.c
++++ linux-stable/net/core/dev.c
+@@ -3000,6 +3000,36 @@ int netif_rx_ni(struct sk_buff *skb)
}
EXPORT_SYMBOL(netif_rx_ni);
@@ -83,7 +83,7 @@
static void net_tx_action(struct softirq_action *h)
{
struct softnet_data *sd = &__get_cpu_var(softnet_data);
-@@ -3008,7 +3038,7 @@ static void net_tx_action(struct softirq_action *h)
+@@ -3038,7 +3068,7 @@ static void net_tx_action(struct softirq
head = head->next_sched;
root_lock = qdisc_lock(q);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/net-use-cpu-chill.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0246-net-Use-cpu_chill-instead-of-cpu_relax.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0246-net-Use-cpu_chill-instead-of-cpu_relax.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/net-use-cpu-chill.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 1ed32db89bcd77937d60536a72e83830aee5ae00 Mon Sep 17 00:00:00 2001
+Subject: net: Use cpu_chill() instead of cpu_relax()
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Wed, 7 Mar 2012 21:10:04 +0100
-Subject: [246/256] net: Use cpu_chill() instead of cpu_relax()
+Date: Wed, 07 Mar 2012 21:10:04 +0100
Retry loops on RT might loop forever when the modifying side was
preempted. Use cpu_chill() instead of cpu_relax() to let the system
@@ -14,10 +13,10 @@
net/rds/ib_rdma.c | 3 ++-
2 files changed, 5 insertions(+), 3 deletions(-)
-diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
-index 4f2c0df..8194092 100644
---- a/net/packet/af_packet.c
-+++ b/net/packet/af_packet.c
+Index: linux-stable/net/packet/af_packet.c
+===================================================================
+--- linux-stable.orig/net/packet/af_packet.c
++++ linux-stable/net/packet/af_packet.c
@@ -88,6 +88,7 @@
#include <linux/virtio_net.h>
#include <linux/errqueue.h>
@@ -26,7 +25,7 @@
#ifdef CONFIG_INET
#include <net/inet_common.h>
-@@ -672,7 +673,7 @@ static void prb_retire_rx_blk_timer_expired(unsigned long data)
+@@ -666,7 +667,7 @@ static void prb_retire_rx_blk_timer_expi
if (BLOCK_NUM_PKTS(pbd)) {
while (atomic_read(&pkc->blk_fill_in_prog)) {
/* Waiting for skb_copy_bits to finish... */
@@ -35,7 +34,7 @@
}
}
-@@ -927,7 +928,7 @@ static void prb_retire_current_block(struct tpacket_kbdq_core *pkc,
+@@ -920,7 +921,7 @@ static void prb_retire_current_block(str
if (!(status & TP_STATUS_BLK_TMO)) {
while (atomic_read(&pkc->blk_fill_in_prog)) {
/* Waiting for skb_copy_bits to finish... */
@@ -44,10 +43,10 @@
}
}
prb_close_block(pkc, pbd, po, status);
-diff --git a/net/rds/ib_rdma.c b/net/rds/ib_rdma.c
-index e8fdb17..5a44c6e 100644
---- a/net/rds/ib_rdma.c
-+++ b/net/rds/ib_rdma.c
+Index: linux-stable/net/rds/ib_rdma.c
+===================================================================
+--- linux-stable.orig/net/rds/ib_rdma.c
++++ linux-stable/net/rds/ib_rdma.c
@@ -34,6 +34,7 @@
#include <linux/slab.h>
#include <linux/rculist.h>
@@ -56,7 +55,7 @@
#include "rds.h"
#include "ib.h"
-@@ -286,7 +287,7 @@ static inline void wait_clean_list_grace(void)
+@@ -286,7 +287,7 @@ static inline void wait_clean_list_grace
for_each_online_cpu(cpu) {
flag = &per_cpu(clean_list_grace, cpu);
while (test_bit(CLEAN_LIST_BUSY_BIT, flag))
Added: dists/trunk/linux/debian/patches/features/all/rt/net-use-cpu-light-in-ip-send-unicast-reply.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/net-use-cpu-light-in-ip-send-unicast-reply.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,32 @@
+Subject: net: Use get_cpu_light() in ip_send_unicast_reply()
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Mon, 01 Oct 2012 17:12:35 +0100
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ net/ipv4/ip_output.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+Index: linux-stable/net/ipv4/ip_output.c
+===================================================================
+--- linux-stable.orig/net/ipv4/ip_output.c
++++ linux-stable/net/ipv4/ip_output.c
+@@ -1516,7 +1516,8 @@ void ip_send_unicast_reply(struct net *n
+ if (IS_ERR(rt))
+ return;
+
+- inet = &get_cpu_var(unicast_sock);
++ get_cpu_light();
++ inet = &__get_cpu_var(unicast_sock);
+
+ inet->tos = arg->tos;
+ sk = &inet->sk;
+@@ -1540,7 +1541,7 @@ void ip_send_unicast_reply(struct net *n
+ ip_push_pending_frames(sk, &fl4);
+ }
+
+- put_cpu_var(unicast_sock);
++ put_cpu_light();
+
+ ip_rt_put(rt);
+ }
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/net-wireless-warn-nort.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0075-net-wireless-warn-nort.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0075-net-wireless-warn-nort.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/net-wireless-warn-nort.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 7b41e15ee57890d7282e1fb04c296ae546068502 Mon Sep 17 00:00:00 2001
+Subject: net-wireless-warn-nort.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 21 Jul 2011 21:05:33 +0200
-Subject: [075/256] net-wireless-warn-nort.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
net/mac80211/rx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
-index d64e285..5ddd808 100644
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -3015,7 +3015,7 @@ void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb)
+Index: linux-stable/net/mac80211/rx.c
+===================================================================
+--- linux-stable.orig/net/mac80211/rx.c
++++ linux-stable/net/mac80211/rx.c
+@@ -2960,7 +2960,7 @@ void ieee80211_rx(struct ieee80211_hw *h
struct ieee80211_supported_band *sband;
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ntp-make-ntp-lock-raw-sigh.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0247-ntp-Make-ntp_lock-raw.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0247-ntp-Make-ntp_lock-raw.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ntp-make-ntp-lock-raw-sigh.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 4bfe9cdf14057a0abeabc1bf86ad5b51f61d4ae8 Mon Sep 17 00:00:00 2001
+Subject: ntp: Make ntp_lock raw.
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 10 Apr 2012 11:14:55 +0200
-Subject: [247/256] ntp: Make ntp_lock raw.
This needs to be revisited. Not sure whether we can avoid to make this
lock raw, but it'd really like to.
@@ -11,10 +10,10 @@
kernel/time/ntp.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
-diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
-index e8c8671..85b3bbc 100644
---- a/kernel/time/ntp.c
-+++ b/kernel/time/ntp.c
+Index: linux-stable/kernel/time/ntp.c
+===================================================================
+--- linux-stable.orig/kernel/time/ntp.c
++++ linux-stable/kernel/time/ntp.c
@@ -22,7 +22,7 @@
* NTP timekeeping variables:
*/
@@ -63,8 +62,8 @@
/*
* Leap second processing. If in leap-insert state at the end of the
-@@ -476,7 +476,7 @@ int second_overflow(unsigned long secs)
-
+@@ -478,7 +478,7 @@ int second_overflow(unsigned long secs)
+ time_adjust = 0;
out:
- spin_unlock_irqrestore(&ntp_lock, flags);
@@ -72,7 +71,7 @@
return leap;
}
-@@ -658,7 +658,7 @@ int do_adjtimex(struct timex *txc)
+@@ -660,7 +660,7 @@ int do_adjtimex(struct timex *txc)
getnstimeofday(&ts);
@@ -81,7 +80,7 @@
if (txc->modes & ADJ_ADJTIME) {
long save_adjust = time_adjust;
-@@ -700,7 +700,7 @@ int do_adjtimex(struct timex *txc)
+@@ -702,7 +702,7 @@ int do_adjtimex(struct timex *txc)
/* fill PPS status fields */
pps_fill_timex(txc);
@@ -90,7 +89,7 @@
txc->time.tv_sec = ts.tv_sec;
txc->time.tv_usec = ts.tv_nsec;
-@@ -898,7 +898,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
+@@ -900,7 +900,7 @@ void hardpps(const struct timespec *phas
pts_norm = pps_normalize_ts(*phase_ts);
@@ -99,7 +98,7 @@
/* clear the error bits, they will be set again if needed */
time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR);
-@@ -911,7 +911,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
+@@ -913,7 +913,7 @@ void hardpps(const struct timespec *phas
* just start the frequency interval */
if (unlikely(pps_fbase.tv_sec == 0)) {
pps_fbase = *raw_ts;
@@ -108,7 +107,7 @@
return;
}
-@@ -926,7 +926,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
+@@ -928,7 +928,7 @@ void hardpps(const struct timespec *phas
time_status |= STA_PPSJITTER;
/* restart the frequency calibration interval */
pps_fbase = *raw_ts;
@@ -117,7 +116,7 @@
pr_err("hardpps: PPSJITTER: bad pulse\n");
return;
}
-@@ -943,7 +943,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
+@@ -945,7 +945,7 @@ void hardpps(const struct timespec *phas
hardpps_update_phase(pts_norm.nsec);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/of-convert-devtree-lock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0041-of-convert-devtree-lock.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0041-of-convert-devtree-lock.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/of-convert-devtree-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,20 +1,19 @@
-From a42b5d896edfab5e9608b3c64d711a6ffddde966 Mon Sep 17 00:00:00 2001
+Subject: of-convert-devtree-lock.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 21 Mar 2011 14:35:34 +0100
-Subject: [041/256] of-convert-devtree-lock.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- arch/sparc/kernel/prom_common.c | 4 +-
- drivers/of/base.c | 92 ++++++++++++++++++++++-----------------
- include/linux/of.h | 2 +-
+ arch/sparc/kernel/prom_common.c | 4 -
+ drivers/of/base.c | 92 ++++++++++++++++++++++------------------
+ include/linux/of.h | 2
3 files changed, 55 insertions(+), 43 deletions(-)
-diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c
-index 741df91..ca73a28 100644
---- a/arch/sparc/kernel/prom_common.c
-+++ b/arch/sparc/kernel/prom_common.c
-@@ -65,7 +65,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
+Index: linux-stable/arch/sparc/kernel/prom_common.c
+===================================================================
+--- linux-stable.orig/arch/sparc/kernel/prom_common.c
++++ linux-stable/arch/sparc/kernel/prom_common.c
+@@ -64,7 +64,7 @@ int of_set_property(struct device_node *
err = -ENODEV;
mutex_lock(&of_set_property_mutex);
@@ -23,7 +22,7 @@
prevp = &dp->properties;
while (*prevp) {
struct property *prop = *prevp;
-@@ -92,7 +92,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
+@@ -91,7 +91,7 @@ int of_set_property(struct device_node *
}
prevp = &(*prevp)->next;
}
@@ -32,10 +31,10 @@
mutex_unlock(&of_set_property_mutex);
/* XXX Upate procfs if necessary... */
-diff --git a/drivers/of/base.c b/drivers/of/base.c
-index 043ab4d..b385c39 100644
---- a/drivers/of/base.c
-+++ b/drivers/of/base.c
+Index: linux-stable/drivers/of/base.c
+===================================================================
+--- linux-stable.orig/drivers/of/base.c
++++ linux-stable/drivers/of/base.c
@@ -54,7 +54,7 @@ static DEFINE_MUTEX(of_aliases_mutex);
/* use when traversing tree through the allnext, child, sibling,
* or parent members of struct device_node.
@@ -45,7 +44,7 @@
int of_n_addr_cells(struct device_node *np)
{
-@@ -187,10 +187,11 @@ struct property *of_find_property(const struct device_node *np,
+@@ -187,10 +187,11 @@ struct property *of_find_property(const
int *lenp)
{
struct property *pp;
@@ -59,7 +58,7 @@
return pp;
}
-@@ -208,13 +209,13 @@ struct device_node *of_find_all_nodes(struct device_node *prev)
+@@ -208,13 +209,13 @@ struct device_node *of_find_all_nodes(st
{
struct device_node *np;
@@ -75,7 +74,7 @@
return np;
}
EXPORT_SYMBOL(of_find_all_nodes);
-@@ -273,11 +274,12 @@ static int __of_device_is_compatible(const struct device_node *device,
+@@ -273,11 +274,12 @@ static int __of_device_is_compatible(con
int of_device_is_compatible(const struct device_node *device,
const char *compat)
{
@@ -125,7 +124,7 @@
return parent;
}
-@@ -387,14 +391,15 @@ struct device_node *of_get_next_child(const struct device_node *node,
+@@ -387,14 +391,15 @@ struct device_node *of_get_next_child(co
struct device_node *prev)
{
struct device_node *next;
@@ -143,7 +142,7 @@
return next;
}
EXPORT_SYMBOL(of_get_next_child);
-@@ -409,14 +414,15 @@ EXPORT_SYMBOL(of_get_next_child);
+@@ -436,14 +441,15 @@ EXPORT_SYMBOL(of_get_next_available_chil
struct device_node *of_find_node_by_path(const char *path)
{
struct device_node *np = allnodes;
@@ -161,7 +160,7 @@
return np;
}
EXPORT_SYMBOL(of_find_node_by_path);
-@@ -436,15 +442,16 @@ struct device_node *of_find_node_by_name(struct device_node *from,
+@@ -463,15 +469,16 @@ struct device_node *of_find_node_by_name
const char *name)
{
struct device_node *np;
@@ -180,7 +179,7 @@
return np;
}
EXPORT_SYMBOL(of_find_node_by_name);
-@@ -465,15 +472,16 @@ struct device_node *of_find_node_by_type(struct device_node *from,
+@@ -492,15 +499,16 @@ struct device_node *of_find_node_by_type
const char *type)
{
struct device_node *np;
@@ -199,7 +198,7 @@
return np;
}
EXPORT_SYMBOL(of_find_node_by_type);
-@@ -496,8 +504,9 @@ struct device_node *of_find_compatible_node(struct device_node *from,
+@@ -523,8 +531,9 @@ struct device_node *of_find_compatible_n
const char *type, const char *compatible)
{
struct device_node *np;
@@ -210,7 +209,7 @@
np = from ? from->allnext : allnodes;
for (; np; np = np->allnext) {
if (type
-@@ -508,7 +517,7 @@ struct device_node *of_find_compatible_node(struct device_node *from,
+@@ -535,7 +544,7 @@ struct device_node *of_find_compatible_n
break;
}
of_node_put(from);
@@ -219,7 +218,7 @@
return np;
}
EXPORT_SYMBOL(of_find_compatible_node);
-@@ -530,8 +539,9 @@ struct device_node *of_find_node_with_property(struct device_node *from,
+@@ -557,8 +566,9 @@ struct device_node *of_find_node_with_pr
{
struct device_node *np;
struct property *pp;
@@ -229,8 +228,8 @@
+ raw_spin_lock_irqsave(&devtree_lock, flags);
np = from ? from->allnext : allnodes;
for (; np; np = np->allnext) {
- for (pp = np->properties; pp != 0; pp = pp->next) {
-@@ -543,7 +553,7 @@ struct device_node *of_find_node_with_property(struct device_node *from,
+ for (pp = np->properties; pp; pp = pp->next) {
+@@ -570,7 +580,7 @@ struct device_node *of_find_node_with_pr
}
out:
of_node_put(from);
@@ -239,7 +238,7 @@
return np;
}
EXPORT_SYMBOL(of_find_node_with_property);
-@@ -584,10 +594,11 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches,
+@@ -611,10 +621,11 @@ const struct of_device_id *of_match_node
const struct device_node *node)
{
const struct of_device_id *match;
@@ -253,7 +252,7 @@
return match;
}
EXPORT_SYMBOL(of_match_node);
-@@ -608,15 +619,16 @@ struct device_node *of_find_matching_node(struct device_node *from,
+@@ -635,15 +646,16 @@ struct device_node *of_find_matching_nod
const struct of_device_id *matches)
{
struct device_node *np;
@@ -272,7 +271,7 @@
return np;
}
EXPORT_SYMBOL(of_find_matching_node);
-@@ -659,12 +671,12 @@ struct device_node *of_find_node_by_phandle(phandle handle)
+@@ -686,12 +698,12 @@ struct device_node *of_find_node_by_phan
{
struct device_node *np;
@@ -287,7 +286,7 @@
return np;
}
EXPORT_SYMBOL(of_find_node_by_phandle);
-@@ -1036,18 +1048,18 @@ int prom_add_property(struct device_node *np, struct property *prop)
+@@ -1063,18 +1075,18 @@ int prom_add_property(struct device_node
unsigned long flags;
prop->next = NULL;
@@ -309,7 +308,7 @@
#ifdef CONFIG_PROC_DEVICETREE
/* try to add to proc as well if it was initialized */
-@@ -1072,7 +1084,7 @@ int prom_remove_property(struct device_node *np, struct property *prop)
+@@ -1099,7 +1111,7 @@ int prom_remove_property(struct device_n
unsigned long flags;
int found = 0;
@@ -318,7 +317,7 @@
next = &np->properties;
while (*next) {
if (*next == prop) {
-@@ -1085,7 +1097,7 @@ int prom_remove_property(struct device_node *np, struct property *prop)
+@@ -1112,7 +1124,7 @@ int prom_remove_property(struct device_n
}
next = &(*next)->next;
}
@@ -327,16 +326,16 @@
if (!found)
return -ENODEV;
-@@ -1115,7 +1127,7 @@ int prom_update_property(struct device_node *np,
- unsigned long flags;
- int found = 0;
+@@ -1149,7 +1161,7 @@ int prom_update_property(struct device_n
+ if (!oldprop)
+ return prom_add_property(np, newprop);
- write_lock_irqsave(&devtree_lock, flags);
+ raw_spin_lock_irqsave(&devtree_lock, flags);
next = &np->properties;
while (*next) {
if (*next == oldprop) {
-@@ -1129,7 +1141,7 @@ int prom_update_property(struct device_node *np,
+@@ -1163,7 +1175,7 @@ int prom_update_property(struct device_n
}
next = &(*next)->next;
}
@@ -345,7 +344,7 @@
if (!found)
return -ENODEV;
-@@ -1159,12 +1171,12 @@ void of_attach_node(struct device_node *np)
+@@ -1193,12 +1205,12 @@ void of_attach_node(struct device_node *
{
unsigned long flags;
@@ -360,7 +359,7 @@
}
/**
-@@ -1178,7 +1190,7 @@ void of_detach_node(struct device_node *np)
+@@ -1212,7 +1224,7 @@ void of_detach_node(struct device_node *
struct device_node *parent;
unsigned long flags;
@@ -369,7 +368,7 @@
parent = np->parent;
if (!parent)
-@@ -1209,7 +1221,7 @@ void of_detach_node(struct device_node *np)
+@@ -1243,7 +1255,7 @@ void of_detach_node(struct device_node *
of_node_set_flag(np, OF_DETACHED);
out_unlock:
@@ -378,11 +377,11 @@
}
#endif /* defined(CONFIG_OF_DYNAMIC) */
-diff --git a/include/linux/of.h b/include/linux/of.h
-index fa7fb1d..a7a948f 100644
---- a/include/linux/of.h
-+++ b/include/linux/of.h
-@@ -90,7 +90,7 @@ static inline void of_node_put(struct device_node *node) { }
+Index: linux-stable/include/linux/of.h
+===================================================================
+--- linux-stable.orig/include/linux/of.h
++++ linux-stable/include/linux/of.h
+@@ -91,7 +91,7 @@ static inline void of_node_put(struct de
extern struct device_node *allnodes;
extern struct device_node *of_chosen;
extern struct device_node *of_aliases;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/of-fixup-recursive-locking.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0040-OF-Fixup-resursive-locking-code-paths.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0040-OF-Fixup-resursive-locking-code-paths.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/of-fixup-recursive-locking.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 981491fea2c93f05bf8fd0548c5b85f587f22ef7 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 13 Aug 2009 09:04:10 +0200
-Subject: [040/256] OF: Fixup resursive locking code paths
+Subject: OF: Fixup resursive locking code paths
There is no real reason to use a rwlock for devtree_lock. It even
could be a mutex, but unfortunately it's locked from cpu hotplug
@@ -13,15 +12,16 @@
read_lock.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- drivers/of/base.c | 93 ++++++++++++++++++++++++++++++++++++++++-------------
+ drivers/of/base.c | 93 +++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 71 insertions(+), 22 deletions(-)
-diff --git a/drivers/of/base.c b/drivers/of/base.c
-index 5806449..043ab4d 100644
---- a/drivers/of/base.c
-+++ b/drivers/of/base.c
-@@ -163,16 +163,14 @@ void of_node_put(struct device_node *node)
+Index: linux-stable/drivers/of/base.c
+===================================================================
+--- linux-stable.orig/drivers/of/base.c
++++ linux-stable/drivers/of/base.c
+@@ -163,16 +163,14 @@ void of_node_put(struct device_node *nod
EXPORT_SYMBOL(of_node_put);
#endif /* CONFIG_OF_DYNAMIC */
@@ -37,10 +37,10 @@
return NULL;
- read_lock(&devtree_lock);
- for (pp = np->properties; pp != 0; pp = pp->next) {
+ for (pp = np->properties; pp; pp = pp->next) {
if (of_prop_cmp(pp->name, name) == 0) {
- if (lenp != 0)
-@@ -180,6 +178,18 @@ struct property *of_find_property(const struct device_node *np,
+ if (lenp)
+@@ -180,6 +178,18 @@ struct property *of_find_property(const
break;
}
}
@@ -99,7 +99,7 @@
if (cp == NULL)
return 0;
while (cplen > 0) {
-@@ -244,6 +266,20 @@ int of_device_is_compatible(const struct device_node *device,
+@@ -244,6 +266,20 @@ int of_device_is_compatible(const struct
return 0;
}
@@ -120,7 +120,7 @@
EXPORT_SYMBOL(of_device_is_compatible);
/**
-@@ -467,7 +503,8 @@ struct device_node *of_find_compatible_node(struct device_node *from,
+@@ -494,7 +530,8 @@ struct device_node *of_find_compatible_n
if (type
&& !(np->type && (of_node_cmp(np->type, type) == 0)))
continue;
@@ -130,7 +130,7 @@
break;
}
of_node_put(from);
-@@ -511,15 +548,9 @@ out:
+@@ -538,15 +575,9 @@ out:
}
EXPORT_SYMBOL(of_find_node_with_property);
@@ -149,7 +149,7 @@
{
if (!matches)
return NULL;
-@@ -533,14 +564,32 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches,
+@@ -560,14 +591,32 @@ const struct of_device_id *of_match_node
match &= node->type
&& !strcmp(matches->type, node->type);
if (matches->compatible[0])
@@ -184,7 +184,7 @@
EXPORT_SYMBOL(of_match_node);
/**
-@@ -563,7 +612,7 @@ struct device_node *of_find_matching_node(struct device_node *from,
+@@ -590,7 +639,7 @@ struct device_node *of_find_matching_nod
read_lock(&devtree_lock);
np = from ? from->allnext : allnodes;
for (; np; np = np->allnext) {
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/oleg-signal-rt-fix.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0023-signal-x86-Delay-calling-signals-in-atomic.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0023-signal-x86-Delay-calling-signals-in-atomic.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/oleg-signal-rt-fix.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,5 @@
-From 99d55f84be1b0a85165bfce70267e4e83780cca3 Mon Sep 17 00:00:00 2001
From: Oleg Nesterov <oleg at redhat.com>
-Date: Thu, 7 Jun 2012 07:46:44 -0400
-Subject: [023/256] signal/x86: Delay calling signals in atomic
+Subject: signal/x86: Delay calling signals in atomic
On x86_64 we must disable preemption before we enable interrupts
for stack faults, int3 and debugging, because the current task is using
@@ -30,16 +28,17 @@
Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
+
arch/x86/include/asm/signal.h | 13 +++++++++++++
- arch/x86/kernel/signal.c | 9 +++++++++
+ arch/x86/kernel/signal.c | 8 ++++++++
include/linux/sched.h | 4 ++++
kernel/signal.c | 37 +++++++++++++++++++++++++++++++++++--
- 4 files changed, 61 insertions(+), 2 deletions(-)
+ 4 files changed, 60 insertions(+), 2 deletions(-)
-diff --git a/arch/x86/include/asm/signal.h b/arch/x86/include/asm/signal.h
-index 598457c..1213ebd 100644
---- a/arch/x86/include/asm/signal.h
-+++ b/arch/x86/include/asm/signal.h
+Index: linux-stable/arch/x86/include/asm/signal.h
+===================================================================
+--- linux-stable.orig/arch/x86/include/asm/signal.h
++++ linux-stable/arch/x86/include/asm/signal.h
@@ -31,6 +31,19 @@ typedef struct {
unsigned long sig[_NSIG_WORDS];
} sigset_t;
@@ -60,31 +59,30 @@
#else
/* Here we must cater to libcs that poke about in kernel headers. */
-diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
-index 115eac4..c67d83f 100644
---- a/arch/x86/kernel/signal.c
-+++ b/arch/x86/kernel/signal.c
-@@ -824,6 +824,15 @@ do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags)
+Index: linux-stable/arch/x86/kernel/signal.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/signal.c
++++ linux-stable/arch/x86/kernel/signal.c
+@@ -785,6 +785,14 @@ do_notify_resume(struct pt_regs *regs, v
mce_notify_process();
#endif /* CONFIG_X86_64 && CONFIG_X86_MCE */
+#ifdef ARCH_RT_DELAYS_SIGNAL_SEND
+ if (unlikely(current->forced_info.si_signo)) {
+ struct task_struct *t = current;
-+ force_sig_info(t->forced_info.si_signo,
-+ &t->forced_info, t);
++ force_sig_info(t->forced_info.si_signo, &t->forced_info, t);
+ t->forced_info.si_signo = 0;
+ }
+#endif
+
- /* deal with pending signal delivery */
- if (thread_info_flags & _TIF_SIGPENDING)
- do_signal(regs);
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index b546194..bd5caa1 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1440,6 +1440,10 @@ struct task_struct {
+ if (thread_info_flags & _TIF_UPROBE) {
+ clear_thread_flag(TIF_UPROBE);
+ uprobe_notify_resume(regs);
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1408,6 +1408,10 @@ struct task_struct {
sigset_t blocked, real_blocked;
sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */
struct sigpending pending;
@@ -95,11 +93,11 @@
unsigned long sas_ss_sp;
size_t sas_ss_size;
-diff --git a/kernel/signal.c b/kernel/signal.c
-index a05a4db..65cb5b4 100644
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -1312,8 +1312,8 @@ int do_send_sig_info(int sig, struct siginfo *info, struct task_struct *p,
+Index: linux-stable/kernel/signal.c
+===================================================================
+--- linux-stable.orig/kernel/signal.c
++++ linux-stable/kernel/signal.c
+@@ -1305,8 +1305,8 @@ int do_send_sig_info(int sig, struct sig
* We don't want to have recursive SIGSEGV's etc, for example,
* that is why we also clear SIGNAL_UNKILLABLE.
*/
@@ -110,7 +108,7 @@
{
unsigned long int flags;
int ret, blocked, ignored;
-@@ -1338,6 +1338,39 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
+@@ -1331,6 +1331,39 @@ force_sig_info(int sig, struct siginfo *
return ret;
}
Added: dists/trunk/linux/debian/patches/features/all/rt/panic-disable-random-on-rt.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/panic-disable-random-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,23 @@
+From: Thomas Gleixner <tglx at linutronix.de>
+Subject: panic: skip get_random_bytes for RT_FULL in init_oops_id
+
+---
+ kernel/panic.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+Index: linux-stable/kernel/panic.c
+===================================================================
+--- linux-stable.orig/kernel/panic.c
++++ linux-stable/kernel/panic.c
+@@ -371,9 +371,11 @@ static u64 oops_id;
+
+ static int init_oops_id(void)
+ {
++#ifndef CONFIG_PREEMPT_RT_FULL
+ if (!oops_id)
+ get_random_bytes(&oops_id, sizeof(oops_id));
+ else
++#endif
+ oops_id++;
+
+ return 0;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0188-rcu-Make-ksoftirqd-do-RCU-quiescent-states.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0188-rcu-Make-ksoftirqd-do-RCU-quiescent-states.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 54c5b37a9fe006fec148f43d3cbdcc2d8221b2ee Mon Sep 17 00:00:00 2001
+Subject: rcu: Make ksoftirqd do RCU quiescent states
From: "Paul E. McKenney" <paulmck at linux.vnet.ibm.com>
Date: Wed, 5 Oct 2011 11:45:18 -0700
-Subject: [188/256] rcu: Make ksoftirqd do RCU quiescent states
Implementing RCU-bh in terms of RCU-preempt makes the system vulnerable
to network-based denial-of-service attacks. This patch therefore
@@ -22,6 +21,7 @@
Signed-off-by: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/20111005184518.GA21601@linux.vnet.ibm.com
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/rcupdate.h | 6 ------
kernel/rcutree.c | 7 ++++++-
@@ -30,11 +30,11 @@
kernel/softirq.c | 20 +++++++++++++-------
5 files changed, 21 insertions(+), 15 deletions(-)
-diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
-index 888d24a..aaf8b7d 100644
---- a/include/linux/rcupdate.h
-+++ b/include/linux/rcupdate.h
-@@ -194,13 +194,7 @@ static inline int rcu_preempt_depth(void)
+Index: linux-stable/include/linux/rcupdate.h
+===================================================================
+--- linux-stable.orig/include/linux/rcupdate.h
++++ linux-stable/include/linux/rcupdate.h
+@@ -195,13 +195,7 @@ static inline int rcu_preempt_depth(void
/* Internal to kernel */
extern void rcu_sched_qs(int cpu);
@@ -48,11 +48,11 @@
extern void rcu_check_callbacks(int cpu, int user);
struct notifier_block;
extern void rcu_idle_enter(void);
-diff --git a/kernel/rcutree.c b/kernel/rcutree.c
-index 69e959e..a9ca0e0 100644
---- a/kernel/rcutree.c
-+++ b/kernel/rcutree.c
-@@ -172,7 +172,12 @@ void rcu_sched_qs(int cpu)
+Index: linux-stable/kernel/rcutree.c
+===================================================================
+--- linux-stable.orig/kernel/rcutree.c
++++ linux-stable/kernel/rcutree.c
+@@ -182,7 +182,12 @@ void rcu_sched_qs(int cpu)
rdp->passed_quiesce = 1;
}
@@ -66,11 +66,11 @@
void rcu_bh_qs(int cpu)
{
struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu);
-diff --git a/kernel/rcutree.h b/kernel/rcutree.h
-index cdd1be0..6ee6525 100644
---- a/kernel/rcutree.h
-+++ b/kernel/rcutree.h
-@@ -423,6 +423,7 @@ DECLARE_PER_CPU(char, rcu_cpu_has_work);
+Index: linux-stable/kernel/rcutree.h
+===================================================================
+--- linux-stable.orig/kernel/rcutree.h
++++ linux-stable/kernel/rcutree.h
+@@ -463,6 +463,7 @@ DECLARE_PER_CPU(char, rcu_cpu_has_work);
/* Forward declarations for rcutree_plugin.h */
static void rcu_bootup_announce(void);
long rcu_batches_completed(void);
@@ -78,11 +78,11 @@
static void rcu_preempt_note_context_switch(int cpu);
static int rcu_preempt_blocked_readers_cgp(struct rcu_node *rnp);
#ifdef CONFIG_HOTPLUG_CPU
-diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
-index e4cc151..14acafc 100644
---- a/kernel/rcutree_plugin.h
-+++ b/kernel/rcutree_plugin.h
-@@ -1899,7 +1899,7 @@ static void __cpuinit rcu_prepare_kthreads(int cpu)
+Index: linux-stable/kernel/rcutree_plugin.h
+===================================================================
+--- linux-stable.orig/kernel/rcutree_plugin.h
++++ linux-stable/kernel/rcutree_plugin.h
+@@ -1727,7 +1727,7 @@ static void __cpuinit rcu_prepare_kthrea
#endif /* #else #ifdef CONFIG_RCU_BOOST */
@@ -91,10 +91,10 @@
/*
* Check to see if any future RCU-related work will need to be done
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index 35fb713..34fe1db 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
@@ -139,7 +139,7 @@ static void wakeup_softirqd(void)
wake_up_process(tsk);
}
@@ -104,7 +104,7 @@
{
struct softirq_action *h = softirq_vec;
unsigned int prev_count = preempt_count();
-@@ -162,7 +162,8 @@ static void handle_pending_softirqs(u32 pending, int cpu)
+@@ -162,7 +162,8 @@ static void handle_pending_softirqs(u32
prev_count, (unsigned int) preempt_count());
preempt_count() = prev_count;
}
@@ -114,7 +114,7 @@
}
local_irq_disable();
}
-@@ -314,7 +315,7 @@ restart:
+@@ -322,7 +323,7 @@ restart:
/* Reset the pending bitmask before enabling irqs */
set_softirq_pending(0);
@@ -123,7 +123,7 @@
pending = local_softirq_pending();
if (pending && --max_restart)
-@@ -384,7 +385,12 @@ static inline void ksoftirqd_clr_sched_params(void) { }
+@@ -393,7 +394,12 @@ static inline void ksoftirqd_clr_sched_p
static DEFINE_LOCAL_IRQ_LOCK(local_softirq_lock);
static DEFINE_PER_CPU(struct task_struct *, local_softirq_runner);
@@ -137,7 +137,7 @@
void __init softirq_early_init(void)
{
-@@ -455,7 +461,7 @@ EXPORT_SYMBOL(in_serving_softirq);
+@@ -464,7 +470,7 @@ EXPORT_SYMBOL(in_serving_softirq);
* Called with bh and local interrupts disabled. For full RT cpu must
* be pinned.
*/
@@ -146,7 +146,7 @@
{
u32 pending = local_softirq_pending();
int cpu = smp_processor_id();
-@@ -469,7 +475,7 @@ static void __do_softirq(void)
+@@ -478,7 +484,7 @@ static void __do_softirq(void)
lockdep_softirq_enter();
@@ -155,7 +155,7 @@
pending = local_softirq_pending();
if (pending)
-@@ -508,7 +514,7 @@ static int __thread_do_softirq(int cpu)
+@@ -517,7 +523,7 @@ static int __thread_do_softirq(int cpu)
* schedule!
*/
if (local_softirq_pending())
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/pci-access-use-__wake_up_all_locked.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0053-pci-Use-__wake_up_all_locked-pci_unblock_user_cfg_ac.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0053-pci-Use-__wake_up_all_locked-pci_unblock_user_cfg_ac.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/pci-access-use-__wake_up_all_locked.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From 89f36c4ed5519559922ececc6f47865510d5358d Mon Sep 17 00:00:00 2001
+Subject: pci: Use __wake_up_all_locked pci_unblock_user_cfg_access()
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Thu, 1 Dec 2011 00:07:16 +0100
-Subject: [053/256] pci: Use __wake_up_all_locked
- pci_unblock_user_cfg_access()
+Date: Thu, 01 Dec 2011 00:07:16 +0100
The waitqueue is protected by the pci_lock, so we can just avoid to
lock the waitqueue lock itself. That prevents the
@@ -14,11 +12,11 @@
drivers/pci/access.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/drivers/pci/access.c b/drivers/pci/access.c
-index 2a58164..8e6a88e 100644
---- a/drivers/pci/access.c
-+++ b/drivers/pci/access.c
-@@ -463,7 +463,7 @@ void pci_cfg_access_unlock(struct pci_dev *dev)
+Index: linux-stable/drivers/pci/access.c
+===================================================================
+--- linux-stable.orig/drivers/pci/access.c
++++ linux-stable/drivers/pci/access.c
+@@ -465,7 +465,7 @@ void pci_cfg_access_unlock(struct pci_de
WARN_ON(!dev->block_cfg_access);
dev->block_cfg_access = 0;
Added: dists/trunk/linux/debian/patches/features/all/rt/perf-make-swevent-hrtimer-irqsafe.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/perf-make-swevent-hrtimer-irqsafe.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,70 @@
+From: Yong Zhang <yong.zhang at windriver.com>
+Date: Wed, 11 Jul 2012 22:05:21 +0000
+Subject: perf: Make swevent hrtimer run in irq instead of softirq
+
+Otherwise we get a deadlock like below:
+
+[ 1044.042749] BUG: scheduling while atomic: ksoftirqd/21/141/0x00010003
+[ 1044.042752] INFO: lockdep is turned off.
+[ 1044.042754] Modules linked in:
+[ 1044.042757] Pid: 141, comm: ksoftirqd/21 Tainted: G W 3.4.0-rc2-rt3-23676-ga723175-dirty #29
+[ 1044.042759] Call Trace:
+[ 1044.042761] <IRQ> [<ffffffff8107d8e5>] __schedule_bug+0x65/0x80
+[ 1044.042770] [<ffffffff8168978c>] __schedule+0x83c/0xa70
+[ 1044.042775] [<ffffffff8106bdd2>] ? prepare_to_wait+0x32/0xb0
+[ 1044.042779] [<ffffffff81689a5e>] schedule+0x2e/0xa0
+[ 1044.042782] [<ffffffff81071ebd>] hrtimer_wait_for_timer+0x6d/0xb0
+[ 1044.042786] [<ffffffff8106bb30>] ? wake_up_bit+0x40/0x40
+[ 1044.042790] [<ffffffff81071f20>] hrtimer_cancel+0x20/0x40
+[ 1044.042794] [<ffffffff8111da0c>] perf_swevent_cancel_hrtimer+0x3c/0x50
+[ 1044.042798] [<ffffffff8111da31>] task_clock_event_stop+0x11/0x40
+[ 1044.042802] [<ffffffff8111da6e>] task_clock_event_del+0xe/0x10
+[ 1044.042805] [<ffffffff8111c568>] event_sched_out+0x118/0x1d0
+[ 1044.042809] [<ffffffff8111c649>] group_sched_out+0x29/0x90
+[ 1044.042813] [<ffffffff8111ed7e>] __perf_event_disable+0x18e/0x200
+[ 1044.042817] [<ffffffff8111c343>] remote_function+0x63/0x70
+[ 1044.042821] [<ffffffff810b0aae>] generic_smp_call_function_single_interrupt+0xce/0x120
+[ 1044.042826] [<ffffffff81022bc7>] smp_call_function_single_interrupt+0x27/0x40
+[ 1044.042831] [<ffffffff8168d50c>] call_function_single_interrupt+0x6c/0x80
+[ 1044.042833] <EOI> [<ffffffff811275b0>] ? perf_event_overflow+0x20/0x20
+[ 1044.042840] [<ffffffff8168b970>] ? _raw_spin_unlock_irq+0x30/0x70
+[ 1044.042844] [<ffffffff8168b976>] ? _raw_spin_unlock_irq+0x36/0x70
+[ 1044.042848] [<ffffffff810702e2>] run_hrtimer_softirq+0xc2/0x200
+[ 1044.042853] [<ffffffff811275b0>] ? perf_event_overflow+0x20/0x20
+[ 1044.042857] [<ffffffff81045265>] __do_softirq_common+0xf5/0x3a0
+[ 1044.042862] [<ffffffff81045c3d>] __thread_do_softirq+0x15d/0x200
+[ 1044.042865] [<ffffffff81045dda>] run_ksoftirqd+0xfa/0x210
+[ 1044.042869] [<ffffffff81045ce0>] ? __thread_do_softirq+0x200/0x200
+[ 1044.042873] [<ffffffff81045ce0>] ? __thread_do_softirq+0x200/0x200
+[ 1044.042877] [<ffffffff8106b596>] kthread+0xb6/0xc0
+[ 1044.042881] [<ffffffff8168b97b>] ? _raw_spin_unlock_irq+0x3b/0x70
+[ 1044.042886] [<ffffffff8168d994>] kernel_thread_helper+0x4/0x10
+[ 1044.042889] [<ffffffff8107d98c>] ? finish_task_switch+0x8c/0x110
+[ 1044.042894] [<ffffffff8168b97b>] ? _raw_spin_unlock_irq+0x3b/0x70
+[ 1044.042897] [<ffffffff8168bd5d>] ? retint_restore_args+0xe/0xe
+[ 1044.042900] [<ffffffff8106b4e0>] ? kthreadd+0x1e0/0x1e0
+[ 1044.042902] [<ffffffff8168d990>] ? gs_change+0xb/0xb
+
+Signed-off-by: Yong Zhang <yong.zhang0 at gmail.com>
+Cc: Peter Zijlstra <a.p.zijlstra at chello.nl>
+Cc: Steven Rostedt <rostedt at goodmis.org>
+Link: http://lkml.kernel.org/r/1341476476-5666-1-git-send-email-yong.zhang0@gmail.com
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+
+---
+ kernel/events/core.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: linux-stable/kernel/events/core.c
+===================================================================
+--- linux-stable.orig/kernel/events/core.c
++++ linux-stable/kernel/events/core.c
+@@ -5441,6 +5441,7 @@ static void perf_swevent_init_hrtimer(st
+
+ hrtimer_init(&hwc->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+ hwc->hrtimer.function = perf_swevent_hrtimer;
++ hwc->hrtimer.irqsafe = 1;
+
+ /*
+ * Since hrtimers have a fixed rate, we can do a static freq->period
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/perf-move-irq-work-to-softirq-in-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0215-x86-no-perf-irq-work-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0215-x86-no-perf-irq-work-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/perf-move-irq-work-to-softirq-in-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From e52603f78af80f021e98e5e2d1015e15dbe8f013 Mon Sep 17 00:00:00 2001
+Subject: x86-no-perf-irq-work-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 13 Jul 2011 14:05:05 +0200
-Subject: [215/256] x86-no-perf-irq-work-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -10,11 +9,11 @@
kernel/timer.c | 6 +++++-
3 files changed, 9 insertions(+), 1 deletion(-)
-diff --git a/arch/x86/kernel/irq_work.c b/arch/x86/kernel/irq_work.c
-index ca8f703..129b8bb 100644
---- a/arch/x86/kernel/irq_work.c
-+++ b/arch/x86/kernel/irq_work.c
-@@ -18,6 +18,7 @@ void smp_irq_work_interrupt(struct pt_regs *regs)
+Index: linux-stable/arch/x86/kernel/irq_work.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/irq_work.c
++++ linux-stable/arch/x86/kernel/irq_work.c
+@@ -18,6 +18,7 @@ void smp_irq_work_interrupt(struct pt_re
irq_exit();
}
@@ -27,10 +26,10 @@
#endif
}
+#endif
-diff --git a/kernel/irq_work.c b/kernel/irq_work.c
-index 1588e3b..170c2ea 100644
---- a/kernel/irq_work.c
-+++ b/kernel/irq_work.c
+Index: linux-stable/kernel/irq_work.c
+===================================================================
+--- linux-stable.orig/kernel/irq_work.c
++++ linux-stable/kernel/irq_work.c
@@ -107,8 +107,10 @@ void irq_work_run(void)
if (llist_empty(this_list))
return;
@@ -42,11 +41,11 @@
llnode = llist_del_all(this_list);
while (llnode != NULL) {
-diff --git a/kernel/timer.c b/kernel/timer.c
-index f6f2958..935f46d 100644
---- a/kernel/timer.c
-+++ b/kernel/timer.c
-@@ -1412,7 +1412,7 @@ void update_process_times(int user_tick)
+Index: linux-stable/kernel/timer.c
+===================================================================
+--- linux-stable.orig/kernel/timer.c
++++ linux-stable/kernel/timer.c
+@@ -1426,7 +1426,7 @@ void update_process_times(int user_tick)
scheduler_tick();
run_local_timers();
rcu_check_callbacks(cpu, user_tick);
@@ -55,7 +54,7 @@
if (in_irq())
irq_work_run();
#endif
-@@ -1426,6 +1426,10 @@ static void run_timer_softirq(struct softirq_action *h)
+@@ -1440,6 +1440,10 @@ static void run_timer_softirq(struct sof
{
struct tvec_base *base = __this_cpu_read(tvec_bases);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-hrtimer.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0117-hrtimer-Don-t-call-the-timer-handler-from-hrtimer_st.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0117-hrtimer-Don-t-call-the-timer-handler-from-hrtimer_st.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-hrtimer.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 64c3e837013143386069c3dda8d67f137fd63500 Mon Sep 17 00:00:00 2001
+Subject: hrtimer: Don't call the timer handler from hrtimer_start
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Fri, 12 Aug 2011 17:39:54 +0200
-Subject: [117/256] hrtimer: Don't call the timer handler from hrtimer_start
+Date: Fri Aug 12 17:39:54 CEST 2011
[<ffffffff812de4a9>] __delay+0xf/0x11
[<ffffffff812e36e9>] do_raw_spin_lock+0xd2/0x13c
@@ -31,11 +30,11 @@
kernel/hrtimer.c | 48 +++++++++++++++++++++++-------------------------
1 file changed, 23 insertions(+), 25 deletions(-)
-diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
-index 1dd627b..358442b 100644
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
-@@ -646,37 +646,24 @@ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
+Index: linux-stable/kernel/hrtimer.c
+===================================================================
+--- linux-stable.orig/kernel/hrtimer.c
++++ linux-stable/kernel/hrtimer.c
+@@ -646,37 +646,24 @@ static inline int hrtimer_enqueue_reprog
struct hrtimer_clock_base *base,
int wakeup)
{
@@ -83,7 +82,7 @@
}
return 0;
-@@ -1046,8 +1033,19 @@ int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
+@@ -1067,8 +1054,19 @@ int __hrtimer_start_range_ns(struct hrti
*
* XXX send_remote_softirq() ?
*/
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable-2.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0148-sched-Generic-migrate_disable.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0148-sched-Generic-migrate_disable.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable-2.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From d648a9940a4f406cfa10d9161fb31d37719d3b37 Mon Sep 17 00:00:00 2001
+Subject: sched: Generic migrate_disable
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Thu, 11 Aug 2011 15:14:58 +0200
-Subject: [148/256] sched: Generic migrate_disable
+Date: Thu Aug 11 15:14:58 CEST 2011
Make migrate_disable() be a preempt_disable() for !rt kernels. This
allows generic code to use it but still enforces that these code
@@ -22,10 +21,10 @@
lib/smp_processor_id.c | 2 +-
6 files changed, 30 insertions(+), 23 deletions(-)
-diff --git a/include/linux/preempt.h b/include/linux/preempt.h
-index 714a08c..5af46d0 100644
---- a/include/linux/preempt.h
-+++ b/include/linux/preempt.h
+Index: linux-stable/include/linux/preempt.h
+===================================================================
+--- linux-stable.orig/include/linux/preempt.h
++++ linux-stable/include/linux/preempt.h
@@ -108,28 +108,25 @@ do { \
#endif /* CONFIG_PREEMPT_COUNT */
@@ -64,21 +63,21 @@
#endif
#ifdef CONFIG_PREEMPT_NOTIFIERS
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index c5f690a..cf6809b 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1302,7 +1302,9 @@ struct task_struct {
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1275,7 +1275,9 @@ struct task_struct {
#endif
unsigned int policy;
+#ifdef CONFIG_PREEMPT_RT_FULL
int migrate_disable;
+#endif
+ int nr_cpus_allowed;
cpumask_t cpus_allowed;
- #ifdef CONFIG_PREEMPT_RCU
-@@ -2771,11 +2773,22 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
+@@ -2771,11 +2773,22 @@ static inline void set_task_cpu(struct t
#endif /* CONFIG_SMP */
@@ -101,11 +100,11 @@
return &p->cpus_allowed;
}
-diff --git a/include/linux/smp.h b/include/linux/smp.h
-index 980c525..3001ba5 100644
---- a/include/linux/smp.h
-+++ b/include/linux/smp.h
-@@ -218,13 +218,8 @@ smp_call_function_any(const struct cpumask *mask, smp_call_func_t func,
+Index: linux-stable/include/linux/smp.h
+===================================================================
+--- linux-stable.orig/include/linux/smp.h
++++ linux-stable/include/linux/smp.h
+@@ -218,13 +218,8 @@ static inline void kick_all_cpus_sync(vo
#define get_cpu() ({ preempt_disable(); smp_processor_id(); })
#define put_cpu() preempt_enable()
@@ -121,11 +120,11 @@
/*
* Callback to arch code if there's nosmp or maxcpus=0 on the
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index fb1e8bb..954dfa9 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -4976,7 +4976,7 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -5203,7 +5203,7 @@ void __cpuinit init_idle(struct task_str
#ifdef CONFIG_SMP
void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask)
{
@@ -133,8 +132,8 @@
+ if (!__migrate_disabled(p)) {
if (p->sched_class && p->sched_class->set_cpus_allowed)
p->sched_class->set_cpus_allowed(p, new_mask);
- p->rt.nr_cpus_allowed = cpumask_weight(new_mask);
-@@ -5032,7 +5032,7 @@ int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)
+ p->nr_cpus_allowed = cpumask_weight(new_mask);
+@@ -5259,7 +5259,7 @@ int set_cpus_allowed_ptr(struct task_str
do_set_cpus_allowed(p, new_mask);
/* Can the task run on the task's current CPU? If so, we're done */
@@ -143,7 +142,7 @@
goto out;
dest_cpu = cpumask_any_and(cpu_active_mask, new_mask);
-@@ -5051,6 +5051,7 @@ out:
+@@ -5278,6 +5278,7 @@ out:
}
EXPORT_SYMBOL_GPL(set_cpus_allowed_ptr);
@@ -151,7 +150,7 @@
void migrate_disable(void)
{
struct task_struct *p = current;
-@@ -5143,6 +5144,7 @@ void migrate_enable(void)
+@@ -5370,6 +5371,7 @@ void migrate_enable(void)
preempt_enable();
}
EXPORT_SYMBOL(migrate_enable);
@@ -159,11 +158,11 @@
/*
* Move (not current) task off this cpu, onto dest cpu. We're doing
-diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
-index 8e79f40..ee744f3 100644
---- a/kernel/trace/trace.c
-+++ b/kernel/trace/trace.c
-@@ -1180,7 +1180,7 @@ tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
+Index: linux-stable/kernel/trace/trace.c
+===================================================================
+--- linux-stable.orig/kernel/trace/trace.c
++++ linux-stable/kernel/trace/trace.c
+@@ -1156,7 +1156,7 @@ tracing_generic_entry_update(struct trac
((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) |
(need_resched() ? TRACE_FLAG_NEED_RESCHED : 0);
@@ -172,11 +171,11 @@
}
EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
-diff --git a/lib/smp_processor_id.c b/lib/smp_processor_id.c
-index 0a846e7..dbb1570 100644
---- a/lib/smp_processor_id.c
-+++ b/lib/smp_processor_id.c
-@@ -41,7 +41,7 @@ notrace unsigned int debug_smp_processor_id(void)
+Index: linux-stable/lib/smp_processor_id.c
+===================================================================
+--- linux-stable.orig/lib/smp_processor_id.c
++++ linux-stable/lib/smp_processor_id.c
+@@ -41,7 +41,7 @@ notrace unsigned int debug_smp_processor
printk(KERN_ERR "BUG: using smp_processor_id() in preemptible [%08x %08x] "
"code: %s/%d\n", preempt_count() - 1,
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0147-sched-Optimize-migrate_disable.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0147-sched-Optimize-migrate_disable.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 6ff6774bdeef497a14f274c7e70cddba59099c03 Mon Sep 17 00:00:00 2001
+Subject: sched: Optimize migrate_disable
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Thu, 11 Aug 2011 15:03:35 +0200
-Subject: [147/256] sched: Optimize migrate_disable
+Date: Thu Aug 11 15:03:35 CEST 2011
Change from task_rq_lock() to raw_spin_lock(&rq->lock) to avoid a few
atomic ops. See comment on why it should be safe.
@@ -12,11 +11,11 @@
kernel/sched/core.c | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 42efb3c..fb1e8bb 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -5071,7 +5071,19 @@ void migrate_disable(void)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -5298,7 +5298,19 @@ void migrate_disable(void)
preempt_enable();
return;
}
@@ -37,16 +36,16 @@
p->migrate_disable = 1;
mask = tsk_cpus_allowed(p);
-@@ -5082,7 +5094,7 @@ void migrate_disable(void)
+@@ -5309,7 +5321,7 @@ void migrate_disable(void)
p->sched_class->set_cpus_allowed(p, mask);
- p->rt.nr_cpus_allowed = cpumask_weight(mask);
+ p->nr_cpus_allowed = cpumask_weight(mask);
}
- task_rq_unlock(rq, p, &flags);
+ raw_spin_unlock_irqrestore(&rq->lock, flags);
preempt_enable();
}
EXPORT_SYMBOL(migrate_disable);
-@@ -5110,7 +5122,11 @@ void migrate_enable(void)
+@@ -5337,7 +5349,11 @@ void migrate_enable(void)
return;
}
@@ -59,8 +58,8 @@
p->migrate_disable = 0;
mask = tsk_cpus_allowed(p);
-@@ -5122,7 +5138,7 @@ void migrate_enable(void)
- p->rt.nr_cpus_allowed = cpumask_weight(mask);
+@@ -5349,7 +5365,7 @@ void migrate_enable(void)
+ p->nr_cpus_allowed = cpumask_weight(mask);
}
- task_rq_unlock(rq, p, &flags);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-pagefault_disable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0034-mm-pagefault_disabled.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0034-mm-pagefault_disabled.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-pagefault_disable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 18f00091ed648f77ace207462cf93d1c86de0194 Mon Sep 17 00:00:00 2001
+Subject: mm: pagefault_disabled()
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Thu, 11 Aug 2011 15:31:31 +0200
-Subject: [034/256] mm: pagefault_disabled()
+Date: Thu Aug 11 15:31:31 CEST 2011
Wrap the test for pagefault_disabled() into a helper, this allows us
to remove the need for current->pagefault_disabled on !-rt kernels.
@@ -24,7 +23,7 @@
arch/powerpc/mm/fault.c | 2 +-
arch/s390/mm/fault.c | 6 +++---
arch/score/mm/fault.c | 2 +-
- arch/sh/mm/fault_32.c | 2 +-
+ arch/sh/mm/fault.c | 2 +-
arch/sparc/mm/fault_32.c | 2 +-
arch/sparc/mm/fault_64.c | 2 +-
arch/tile/mm/fault.c | 2 +-
@@ -35,11 +34,11 @@
kernel/fork.c | 2 ++
24 files changed, 40 insertions(+), 25 deletions(-)
-diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
-index 0ddf6c0..ab6b9d13 100644
---- a/arch/alpha/mm/fault.c
-+++ b/arch/alpha/mm/fault.c
-@@ -106,7 +106,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
+Index: linux-stable/arch/alpha/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/alpha/mm/fault.c
++++ linux-stable/arch/alpha/mm/fault.c
+@@ -108,7 +108,7 @@ do_page_fault(unsigned long address, uns
/* If we're in an interrupt context, or have no user context,
we must not take the fault. */
@@ -48,11 +47,11 @@
goto no_context;
#ifdef CONFIG_ALPHA_LARGE_VMALLOC
-diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
-index 40bd40f..17a9f4a 100644
---- a/arch/arm/mm/fault.c
-+++ b/arch/arm/mm/fault.c
-@@ -279,7 +279,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
+Index: linux-stable/arch/arm/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/arm/mm/fault.c
++++ linux-stable/arch/arm/mm/fault.c
+@@ -279,7 +279,7 @@ do_page_fault(unsigned long addr, unsign
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -61,11 +60,11 @@
goto no_context;
/*
-diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c
-index 623a027..155ad8d 100644
---- a/arch/avr32/mm/fault.c
-+++ b/arch/avr32/mm/fault.c
-@@ -81,8 +81,7 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
+Index: linux-stable/arch/avr32/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/avr32/mm/fault.c
++++ linux-stable/arch/avr32/mm/fault.c
+@@ -81,8 +81,7 @@ asmlinkage void do_page_fault(unsigned l
* If we're in an interrupt or have no user context, we must
* not take the fault...
*/
@@ -75,11 +74,11 @@
goto no_context;
local_irq_enable();
-diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c
-index 1c1630e..886be8e 100644
---- a/arch/cris/mm/fault.c
-+++ b/arch/cris/mm/fault.c
-@@ -112,7 +112,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
+Index: linux-stable/arch/cris/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/cris/mm/fault.c
++++ linux-stable/arch/cris/mm/fault.c
+@@ -114,7 +114,7 @@ do_page_fault(unsigned long address, str
* user context, we must not take the fault.
*/
@@ -87,12 +86,12 @@
+ if (!mm || pagefault_disabled())
goto no_context;
- down_read(&mm->mmap_sem);
-diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c
-index 6372088..e87972c 100644
---- a/arch/frv/mm/fault.c
-+++ b/arch/frv/mm/fault.c
-@@ -78,7 +78,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
+ retry:
+Index: linux-stable/arch/frv/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/frv/mm/fault.c
++++ linux-stable/arch/frv/mm/fault.c
+@@ -78,7 +78,7 @@ asmlinkage void do_page_fault(int datamm
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -101,11 +100,11 @@
goto no_context;
down_read(&mm->mmap_sem);
-diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
-index 721dbb9..8ca850e 100644
---- a/arch/ia64/mm/fault.c
-+++ b/arch/ia64/mm/fault.c
-@@ -88,7 +88,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
+Index: linux-stable/arch/ia64/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/ia64/mm/fault.c
++++ linux-stable/arch/ia64/mm/fault.c
+@@ -98,7 +98,7 @@ ia64_do_page_fault (unsigned long addres
/*
* If we're in an interrupt or have no user context, we must not take the fault..
*/
@@ -114,11 +113,11 @@
goto no_context;
#ifdef CONFIG_VIRTUAL_MEM_MAP
-diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c
-index 1eec8af..6945056 100644
---- a/arch/m32r/mm/fault.c
-+++ b/arch/m32r/mm/fault.c
-@@ -114,7 +114,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code,
+Index: linux-stable/arch/m32r/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/m32r/mm/fault.c
++++ linux-stable/arch/m32r/mm/fault.c
+@@ -114,7 +114,7 @@ asmlinkage void do_page_fault(struct pt_
* If we're in an interrupt or have no user context or are running in an
* atomic region then we must not take the fault..
*/
@@ -127,11 +126,11 @@
goto bad_area_nosemaphore;
/* When running in the kernel we expect faults to occur only to
-diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
-index 7a4cc68..46b8cce 100644
---- a/arch/m68k/mm/fault.c
-+++ b/arch/m68k/mm/fault.c
-@@ -84,7 +84,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
+Index: linux-stable/arch/m68k/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/m68k/mm/fault.c
++++ linux-stable/arch/m68k/mm/fault.c
+@@ -85,7 +85,7 @@ int do_page_fault(struct pt_regs *regs,
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -139,12 +138,12 @@
+ if (!mm || pagefault_disabled())
goto no_context;
- down_read(&mm->mmap_sem);
-diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
-index 621ad49..a438434 100644
---- a/arch/microblaze/mm/fault.c
-+++ b/arch/microblaze/mm/fault.c
-@@ -106,7 +106,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
+ retry:
+Index: linux-stable/arch/microblaze/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/microblaze/mm/fault.c
++++ linux-stable/arch/microblaze/mm/fault.c
+@@ -108,7 +108,7 @@ void do_page_fault(struct pt_regs *regs,
if ((error_code & 0x13) == 0x13 || (error_code & 0x11) == 0x11)
is_write = 0;
@@ -153,11 +152,11 @@
if (kernel_mode(regs))
goto bad_area_nosemaphore;
-diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
-index 3468e69..39a3180 100644
---- a/arch/mips/mm/fault.c
-+++ b/arch/mips/mm/fault.c
-@@ -89,7 +89,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ
+Index: linux-stable/arch/mips/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/mips/mm/fault.c
++++ linux-stable/arch/mips/mm/fault.c
+@@ -89,7 +89,7 @@ asmlinkage void __kprobes do_page_fault(
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -166,11 +165,11 @@
goto bad_area_nosemaphore;
retry:
-diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c
-index ff5acf5..5d9e10f 100644
---- a/arch/mn10300/mm/fault.c
-+++ b/arch/mn10300/mm/fault.c
-@@ -167,7 +167,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long fault_code,
+Index: linux-stable/arch/mn10300/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/mn10300/mm/fault.c
++++ linux-stable/arch/mn10300/mm/fault.c
+@@ -167,7 +167,7 @@ asmlinkage void do_page_fault(struct pt_
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -179,11 +178,11 @@
goto no_context;
down_read(&mm->mmap_sem);
-diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
-index 09ecc8a..df22f39 100644
---- a/arch/parisc/mm/fault.c
-+++ b/arch/parisc/mm/fault.c
-@@ -176,7 +176,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
+Index: linux-stable/arch/parisc/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/parisc/mm/fault.c
++++ linux-stable/arch/parisc/mm/fault.c
+@@ -176,7 +176,7 @@ void do_page_fault(struct pt_regs *regs,
unsigned long acc_type;
int fault;
@@ -192,11 +191,11 @@
goto no_context;
down_read(&mm->mmap_sem);
-diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
-index 6642dff..7bd8f27 100644
---- a/arch/powerpc/mm/fault.c
-+++ b/arch/powerpc/mm/fault.c
-@@ -261,7 +261,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
+Index: linux-stable/arch/powerpc/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/powerpc/mm/fault.c
++++ linux-stable/arch/powerpc/mm/fault.c
+@@ -261,7 +261,7 @@ int __kprobes do_page_fault(struct pt_re
if (!arch_irq_disabled_regs(regs))
local_irq_enable();
@@ -205,11 +204,11 @@
if (!user_mode(regs))
return SIGSEGV;
/* in_atomic() in user mode is really bad,
-diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
-index f7d796f..e2994cb 100644
---- a/arch/s390/mm/fault.c
-+++ b/arch/s390/mm/fault.c
-@@ -283,8 +283,8 @@ static inline int do_exception(struct pt_regs *regs, int access)
+Index: linux-stable/arch/s390/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/s390/mm/fault.c
++++ linux-stable/arch/s390/mm/fault.c
+@@ -286,8 +286,8 @@ static inline int do_exception(struct pt
* user context.
*/
fault = VM_FAULT_BADCONTEXT;
@@ -220,7 +219,7 @@
goto out;
address = trans_exc_code & __FAIL_ADDR_MASK;
-@@ -417,7 +417,7 @@ void __kprobes do_asce_exception(struct pt_regs *regs)
+@@ -425,7 +425,7 @@ void __kprobes do_asce_exception(struct
trans_exc_code = regs->int_parm_long;
if (unlikely(!user_space_fault(trans_exc_code) || in_atomic() || !mm ||
@@ -229,11 +228,11 @@
goto no_context;
down_read(&mm->mmap_sem);
-diff --git a/arch/score/mm/fault.c b/arch/score/mm/fault.c
-index 4c12824..59fccbe 100644
---- a/arch/score/mm/fault.c
-+++ b/arch/score/mm/fault.c
-@@ -72,7 +72,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
+Index: linux-stable/arch/score/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/score/mm/fault.c
++++ linux-stable/arch/score/mm/fault.c
+@@ -72,7 +72,7 @@ asmlinkage void do_page_fault(struct pt_
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -242,24 +241,24 @@
goto bad_area_nosemaphore;
down_read(&mm->mmap_sem);
-diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c
-index 8c3ae42..1aca948 100644
---- a/arch/sh/mm/fault_32.c
-+++ b/arch/sh/mm/fault_32.c
-@@ -166,7 +166,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
+Index: linux-stable/arch/sh/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/sh/mm/fault.c
++++ linux-stable/arch/sh/mm/fault.c
+@@ -445,7 +445,7 @@ asmlinkage void __kprobes do_page_fault(
* If we're in an interrupt, have no user context or are running
* in an atomic region then we must not take the fault:
*/
-- if (in_atomic() || !mm || current->pagefault_disabled)
-+ if (!mm || pagefault_disabled())
- goto no_context;
-
- down_read(&mm->mmap_sem);
-diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
-index ffaa99e..77b37e0 100644
---- a/arch/sparc/mm/fault_32.c
-+++ b/arch/sparc/mm/fault_32.c
-@@ -248,7 +248,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
+- if (unlikely(in_atomic() || !mm || current->pagefault_disabled)) {
++ if (unlikely(!mm || pagefault_disabled())) {
+ bad_area_nosemaphore(regs, error_code, address);
+ return;
+ }
+Index: linux-stable/arch/sparc/mm/fault_32.c
+===================================================================
+--- linux-stable.orig/arch/sparc/mm/fault_32.c
++++ linux-stable/arch/sparc/mm/fault_32.c
+@@ -200,7 +200,7 @@ asmlinkage void do_sparc_fault(struct pt
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -268,11 +267,11 @@
goto no_context;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
-diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
-index fbd5e11..ea4e14b 100644
---- a/arch/sparc/mm/fault_64.c
-+++ b/arch/sparc/mm/fault_64.c
-@@ -323,7 +323,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
+Index: linux-stable/arch/sparc/mm/fault_64.c
+===================================================================
+--- linux-stable.orig/arch/sparc/mm/fault_64.c
++++ linux-stable/arch/sparc/mm/fault_64.c
+@@ -323,7 +323,7 @@ asmlinkage void __kprobes do_sparc64_fau
* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -281,11 +280,11 @@
goto intr_or_no_mm;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
-diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c
-index f683aad..3e85178 100644
---- a/arch/tile/mm/fault.c
-+++ b/arch/tile/mm/fault.c
-@@ -355,7 +355,7 @@ static int handle_page_fault(struct pt_regs *regs,
+Index: linux-stable/arch/tile/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/tile/mm/fault.c
++++ linux-stable/arch/tile/mm/fault.c
+@@ -359,7 +359,7 @@ static int handle_page_fault(struct pt_r
* If we're in an interrupt, have no user context or are running in an
* atomic region then we must not take the fault.
*/
@@ -294,24 +293,24 @@
vma = NULL; /* happy compiler */
goto bad_area_nosemaphore;
}
-diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
-index a283400..7878069 100644
---- a/arch/um/kernel/trap.c
-+++ b/arch/um/kernel/trap.c
-@@ -37,7 +37,7 @@ int handle_page_fault(unsigned long address, unsigned long ip,
+Index: linux-stable/arch/um/kernel/trap.c
+===================================================================
+--- linux-stable.orig/arch/um/kernel/trap.c
++++ linux-stable/arch/um/kernel/trap.c
+@@ -39,7 +39,7 @@ int handle_page_fault(unsigned long addr
* If the fault was during atomic operation, don't take the fault, just
* fail.
*/
-- if (in_atomic() || !mm || current->pagefault_disabled)
-+ if (!mm || pagefault_disabled())
+- if (in_atomic() || current->pagefault_disabled)
++ if (pagefault_disabled())
goto out_nosemaphore;
- down_read(&mm->mmap_sem);
-diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
-index bb891f2..9d57357 100644
---- a/arch/x86/mm/fault.c
-+++ b/arch/x86/mm/fault.c
-@@ -1094,7 +1094,7 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code)
+ retry:
+Index: linux-stable/arch/x86/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/x86/mm/fault.c
++++ linux-stable/arch/x86/mm/fault.c
+@@ -1094,7 +1094,7 @@ do_page_fault(struct pt_regs *regs, unsi
* If we're in an interrupt, have no user context or are running
* in an atomic region then we must not take the fault:
*/
@@ -320,11 +319,11 @@
bad_area_nosemaphore(regs, error_code, address);
return;
}
-diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
-index cc58b7c..93d33ee 100644
---- a/arch/xtensa/mm/fault.c
-+++ b/arch/xtensa/mm/fault.c
-@@ -56,7 +56,7 @@ void do_page_fault(struct pt_regs *regs)
+Index: linux-stable/arch/xtensa/mm/fault.c
+===================================================================
+--- linux-stable.orig/arch/xtensa/mm/fault.c
++++ linux-stable/arch/xtensa/mm/fault.c
+@@ -57,7 +57,7 @@ void do_page_fault(struct pt_regs *regs)
/* If we're in an interrupt or have no user
* context, we must not take the fault..
*/
@@ -333,19 +332,19 @@
bad_page_fault(regs, address, SIGSEGV);
return;
}
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index f0ee37f..f14b965 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -90,6 +90,7 @@ struct sched_param {
- #include <linux/latencytop.h>
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -91,6 +91,7 @@ struct sched_param {
#include <linux/cred.h>
#include <linux/llist.h>
+ #include <linux/uidgid.h>
+#include <linux/hardirq.h>
#include <asm/processor.h>
-@@ -1478,7 +1479,9 @@ struct task_struct {
+@@ -1448,7 +1449,9 @@ struct task_struct {
/* mutex deadlock detection */
struct mutex_waiter *blocked_on;
#endif
@@ -355,7 +354,7 @@
#ifdef CONFIG_TRACE_IRQFLAGS
unsigned int irq_events;
unsigned long hardirq_enable_ip;
-@@ -1628,6 +1631,17 @@ struct task_struct {
+@@ -1600,6 +1603,17 @@ struct task_struct {
/* Future-safe accessor for struct task_struct's cpus_allowed. */
#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
@@ -373,11 +372,11 @@
/*
* Priority of a process goes from 0..MAX_PRIO-1, valid RT
* priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
-diff --git a/kernel/fork.c b/kernel/fork.c
-index fdf0795..4c9def3 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -1265,7 +1265,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+Index: linux-stable/kernel/fork.c
+===================================================================
+--- linux-stable.orig/kernel/fork.c
++++ linux-stable/kernel/fork.c
+@@ -1298,7 +1298,9 @@ static struct task_struct *copy_process(
p->hardirq_context = 0;
p->softirq_context = 0;
#endif
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-rcu.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0184-rcu-Frob-softirq-test.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0184-rcu-Frob-softirq-test.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/peter_zijlstra-frob-rcu.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From d5ea213392a0b5d8cf42b252755f521848824f97 Mon Sep 17 00:00:00 2001
+Subject: rcu: Frob softirq test
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Sat, 13 Aug 2011 00:23:17 +0200
-Subject: [184/256] rcu: Frob softirq test
+Date: Sat Aug 13 00:23:17 CEST 2011
With RT_FULL we get the below wreckage:
@@ -11,15 +10,15 @@
[ 126.060490] -------------------------------------------------------
[ 126.060492] irq/24-eth0/1235 is trying to acquire lock:
[ 126.060495] (&(lock)->wait_lock#2){+.+...}, at: [<ffffffff81501c81>] rt_mutex_slowunlock+0x16/0x55
-[ 126.060503]
+[ 126.060503]
[ 126.060504] but task is already holding lock:
[ 126.060506] (&p->pi_lock){-...-.}, at: [<ffffffff81074fdc>] try_to_wake_up+0x35/0x429
-[ 126.060511]
+[ 126.060511]
[ 126.060511] which lock already depends on the new lock.
-[ 126.060513]
-[ 126.060514]
+[ 126.060513]
+[ 126.060514]
[ 126.060514] the existing dependency chain (in reverse order) is:
-[ 126.060516]
+[ 126.060516]
[ 126.060516] -> #1 (&p->pi_lock){-...-.}:
[ 126.060519] [<ffffffff810afe9e>] lock_acquire+0x145/0x18a
[ 126.060524] [<ffffffff8150291e>] _raw_spin_lock_irqsave+0x4b/0x85
@@ -30,7 +29,7 @@
[ 126.060541] [<ffffffff810d90ce>] rcu_boost_kthread+0x7d/0x9b
[ 126.060544] [<ffffffff8109a760>] kthread+0x99/0xa1
[ 126.060547] [<ffffffff81509b14>] kernel_thread_helper+0x4/0x10
-[ 126.060551]
+[ 126.060551]
[ 126.060552] -> #0 (&(lock)->wait_lock#2){+.+...}:
[ 126.060555] [<ffffffff810af1b8>] __lock_acquire+0x1157/0x1816
[ 126.060558] [<ffffffff810afe9e>] lock_acquire+0x145/0x18a
@@ -50,23 +49,23 @@
[ 126.060603] [<ffffffff810d582c>] irq_thread+0xde/0x1af
[ 126.060606] [<ffffffff8109a760>] kthread+0x99/0xa1
[ 126.060608] [<ffffffff81509b14>] kernel_thread_helper+0x4/0x10
-[ 126.060611]
+[ 126.060611]
[ 126.060612] other info that might help us debug this:
-[ 126.060614]
+[ 126.060614]
[ 126.060615] Possible unsafe locking scenario:
-[ 126.060616]
+[ 126.060616]
[ 126.060617] CPU0 CPU1
[ 126.060619] ---- ----
[ 126.060620] lock(&p->pi_lock);
[ 126.060623] lock(&(lock)->wait_lock);
[ 126.060625] lock(&p->pi_lock);
[ 126.060627] lock(&(lock)->wait_lock);
-[ 126.060629]
+[ 126.060629]
[ 126.060629] *** DEADLOCK ***
-[ 126.060630]
+[ 126.060630]
[ 126.060632] 1 lock held by irq/24-eth0/1235:
[ 126.060633] #0: (&p->pi_lock){-...-.}, at: [<ffffffff81074fdc>] try_to_wake_up+0x35/0x429
-[ 126.060638]
+[ 126.060638]
[ 126.060638] stack backtrace:
[ 126.060641] Pid: 1235, comm: irq/24-eth0 Not tainted 3.0.1-rt10+ #30
[ 126.060643] Call Trace:
@@ -154,11 +153,11 @@
kernel/rcutree_plugin.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
-index c023464..e4cc151 100644
---- a/kernel/rcutree_plugin.h
-+++ b/kernel/rcutree_plugin.h
-@@ -339,7 +339,7 @@ static noinline void rcu_read_unlock_special(struct task_struct *t)
+Index: linux-stable/kernel/rcutree_plugin.h
+===================================================================
+--- linux-stable.orig/kernel/rcutree_plugin.h
++++ linux-stable/kernel/rcutree_plugin.h
+@@ -331,7 +331,7 @@ void rcu_read_unlock_special(struct task
}
/* Hardware IRQ handlers cannot block. */
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/peterz-raw_pagefault_disable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0035-mm-raw_pagefault_disable.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0035-mm-raw_pagefault_disable.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/peterz-raw_pagefault_disable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 024afe6afcd8a2c40595b12375d3573d4bf2119b Mon Sep 17 00:00:00 2001
+Subject: mm: raw_pagefault_disable
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Fri, 5 Aug 2011 17:16:58 +0200
-Subject: [035/256] mm: raw_pagefault_disable
+Date: Fri Aug 05 17:16:58 CEST 2011
Adding migrate_disable() to pagefault_disable() to preserve the
per-cpu thing for kmap_atomic might not have been the best of choices.
@@ -71,6 +70,7 @@
[<ffffffff814ffb38>] smp_apic_timer_interrupt+0x85/0x98
[<ffffffff814fef13>] apic_timer_interrupt+0x13/0x20
+
Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
Link: http://lkml.kernel.org/n/tip-31keae8mkjiv8esq4rl76cib@git.kernel.org
---
@@ -78,10 +78,10 @@
mm/memory.c | 2 ++
2 files changed, 30 insertions(+), 2 deletions(-)
-diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
-index 9414a1b..44b3751 100644
---- a/include/linux/uaccess.h
-+++ b/include/linux/uaccess.h
+Index: linux-stable/include/linux/uaccess.h
+===================================================================
+--- linux-stable.orig/include/linux/uaccess.h
++++ linux-stable/include/linux/uaccess.h
@@ -8,8 +8,34 @@
* These routines enable/disable the pagefault handler in that
* it will not take any MM locks and go straight to the fixup table.
@@ -117,7 +117,7 @@
#ifndef ARCH_HAS_NOCACHE_UACCESS
-@@ -50,9 +76,9 @@ static inline unsigned long __copy_from_user_nocache(void *to,
+@@ -50,9 +76,9 @@ static inline unsigned long __copy_from_
mm_segment_t old_fs = get_fs(); \
\
set_fs(KERNEL_DS); \
@@ -129,11 +129,11 @@
set_fs(old_fs); \
ret; \
})
-diff --git a/mm/memory.c b/mm/memory.c
-index c3b9c80..e996afe 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -3467,6 +3467,7 @@ unlock:
+Index: linux-stable/mm/memory.c
+===================================================================
+--- linux-stable.orig/mm/memory.c
++++ linux-stable/mm/memory.c
+@@ -3484,6 +3484,7 @@ unlock:
return 0;
}
@@ -141,7 +141,7 @@
void pagefault_disable(void)
{
inc_preempt_count();
-@@ -3495,6 +3496,7 @@ void pagefault_enable(void)
+@@ -3512,6 +3513,7 @@ void pagefault_enable(void)
preempt_check_resched();
}
EXPORT_SYMBOL_GPL(pagefault_enable);
Added: dists/trunk/linux/debian/patches/features/all/rt/peterz-srcu-crypto-chain.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/peterz-srcu-crypto-chain.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,196 @@
+Subject: crypto: Convert crypto notifier chain to SRCU
+From: Peter Zijlstra <peterz at infradead.org>
+Date: Fri, 05 Oct 2012 09:03:24 +0100
+
+The crypto notifier deadlocks on RT. Though this can be a real deadlock
+on mainline as well due to fifo fair rwsems.
+
+The involved parties here are:
+
+[ 82.172678] swapper/0 S 0000000000000001 0 1 0 0x00000000
+[ 82.172682] ffff88042f18fcf0 0000000000000046 ffff88042f18fc80 ffffffff81491238
+[ 82.172685] 0000000000011cc0 0000000000011cc0 ffff88042f18c040 ffff88042f18ffd8
+[ 82.172688] 0000000000011cc0 0000000000011cc0 ffff88042f18ffd8 0000000000011cc0
+[ 82.172689] Call Trace:
+[ 82.172697] [<ffffffff81491238>] ? _raw_spin_unlock_irqrestore+0x6c/0x7a
+[ 82.172701] [<ffffffff8148fd3f>] schedule+0x64/0x66
+[ 82.172704] [<ffffffff8148ec6b>] schedule_timeout+0x27/0xd0
+[ 82.172708] [<ffffffff81043c0c>] ? unpin_current_cpu+0x1a/0x6c
+[ 82.172713] [<ffffffff8106e491>] ? migrate_enable+0x12f/0x141
+[ 82.172716] [<ffffffff8148fbbd>] wait_for_common+0xbb/0x11f
+[ 82.172719] [<ffffffff810709f2>] ? try_to_wake_up+0x182/0x182
+[ 82.172722] [<ffffffff8148fc96>] wait_for_completion_interruptible+0x1d/0x2e
+[ 82.172726] [<ffffffff811debfd>] crypto_wait_for_test+0x49/0x6b
+[ 82.172728] [<ffffffff811ded32>] crypto_register_alg+0x53/0x5a
+[ 82.172730] [<ffffffff811ded6c>] crypto_register_algs+0x33/0x72
+[ 82.172734] [<ffffffff81ad7686>] ? aes_init+0x12/0x12
+[ 82.172737] [<ffffffff81ad76ea>] aesni_init+0x64/0x66
+[ 82.172741] [<ffffffff81000318>] do_one_initcall+0x7f/0x13b
+[ 82.172744] [<ffffffff81ac4d34>] kernel_init+0x199/0x22c
+[ 82.172747] [<ffffffff81ac44ef>] ? loglevel+0x31/0x31
+[ 82.172752] [<ffffffff814987c4>] kernel_thread_helper+0x4/0x10
+[ 82.172755] [<ffffffff81491574>] ? retint_restore_args+0x13/0x13
+[ 82.172759] [<ffffffff81ac4b9b>] ? start_kernel+0x3ca/0x3ca
+[ 82.172761] [<ffffffff814987c0>] ? gs_change+0x13/0x13
+
+[ 82.174186] cryptomgr_test S 0000000000000001 0 41 2 0x00000000
+[ 82.174189] ffff88042c971980 0000000000000046 ffffffff81d74830 0000000000000292
+[ 82.174192] 0000000000011cc0 0000000000011cc0 ffff88042c96eb80 ffff88042c971fd8
+[ 82.174195] 0000000000011cc0 0000000000011cc0 ffff88042c971fd8 0000000000011cc0
+[ 82.174195] Call Trace:
+[ 82.174198] [<ffffffff8148fd3f>] schedule+0x64/0x66
+[ 82.174201] [<ffffffff8148ec6b>] schedule_timeout+0x27/0xd0
+[ 82.174204] [<ffffffff81043c0c>] ? unpin_current_cpu+0x1a/0x6c
+[ 82.174206] [<ffffffff8106e491>] ? migrate_enable+0x12f/0x141
+[ 82.174209] [<ffffffff8148fbbd>] wait_for_common+0xbb/0x11f
+[ 82.174212] [<ffffffff810709f2>] ? try_to_wake_up+0x182/0x182
+[ 82.174215] [<ffffffff8148fc96>] wait_for_completion_interruptible+0x1d/0x2e
+[ 82.174218] [<ffffffff811e4883>] cryptomgr_notify+0x280/0x385
+[ 82.174221] [<ffffffff814943de>] notifier_call_chain+0x6b/0x98
+[ 82.174224] [<ffffffff8108a11c>] ? rt_down_read+0x10/0x12
+[ 82.174227] [<ffffffff810677cd>] __blocking_notifier_call_chain+0x70/0x8d
+[ 82.174230] [<ffffffff810677fe>] blocking_notifier_call_chain+0x14/0x16
+[ 82.174234] [<ffffffff811dd272>] crypto_probing_notify+0x24/0x50
+[ 82.174236] [<ffffffff811dd7a1>] crypto_alg_mod_lookup+0x3e/0x74
+[ 82.174238] [<ffffffff811dd949>] crypto_alloc_base+0x36/0x8f
+[ 82.174241] [<ffffffff811e9408>] cryptd_alloc_ablkcipher+0x6e/0xb5
+[ 82.174243] [<ffffffff811dd591>] ? kzalloc.clone.5+0xe/0x10
+[ 82.174246] [<ffffffff8103085d>] ablk_init_common+0x1d/0x38
+[ 82.174249] [<ffffffff8103852a>] ablk_ecb_init+0x15/0x17
+[ 82.174251] [<ffffffff811dd8c6>] __crypto_alloc_tfm+0xc7/0x114
+[ 82.174254] [<ffffffff811e0caa>] ? crypto_lookup_skcipher+0x1f/0xe4
+[ 82.174256] [<ffffffff811e0dcf>] crypto_alloc_ablkcipher+0x60/0xa5
+[ 82.174258] [<ffffffff811e5bde>] alg_test_skcipher+0x24/0x9b
+[ 82.174261] [<ffffffff8106d96d>] ? finish_task_switch+0x3f/0xfa
+[ 82.174263] [<ffffffff811e6b8e>] alg_test+0x16f/0x1d7
+[ 82.174267] [<ffffffff811e45ac>] ? cryptomgr_probe+0xac/0xac
+[ 82.174269] [<ffffffff811e45d8>] cryptomgr_test+0x2c/0x47
+[ 82.174272] [<ffffffff81061161>] kthread+0x7e/0x86
+[ 82.174275] [<ffffffff8106d9dd>] ? finish_task_switch+0xaf/0xfa
+[ 82.174278] [<ffffffff814987c4>] kernel_thread_helper+0x4/0x10
+[ 82.174281] [<ffffffff81491574>] ? retint_restore_args+0x13/0x13
+[ 82.174284] [<ffffffff810610e3>] ? __init_kthread_worker+0x8c/0x8c
+[ 82.174287] [<ffffffff814987c0>] ? gs_change+0x13/0x13
+
+[ 82.174329] cryptomgr_probe D 0000000000000002 0 47 2 0x00000000
+[ 82.174332] ffff88042c991b70 0000000000000046 ffff88042c991bb0 0000000000000006
+[ 82.174335] 0000000000011cc0 0000000000011cc0 ffff88042c98ed00 ffff88042c991fd8
+[ 82.174338] 0000000000011cc0 0000000000011cc0 ffff88042c991fd8 0000000000011cc0
+[ 82.174338] Call Trace:
+[ 82.174342] [<ffffffff8148fd3f>] schedule+0x64/0x66
+[ 82.174344] [<ffffffff814901ad>] __rt_mutex_slowlock+0x85/0xbe
+[ 82.174347] [<ffffffff814902d2>] rt_mutex_slowlock+0xec/0x159
+[ 82.174351] [<ffffffff81089c4d>] rt_mutex_fastlock.clone.8+0x29/0x2f
+[ 82.174353] [<ffffffff81490372>] rt_mutex_lock+0x33/0x37
+[ 82.174356] [<ffffffff8108a0f2>] __rt_down_read+0x50/0x5a
+[ 82.174358] [<ffffffff8108a11c>] ? rt_down_read+0x10/0x12
+[ 82.174360] [<ffffffff8108a11c>] rt_down_read+0x10/0x12
+[ 82.174363] [<ffffffff810677b5>] __blocking_notifier_call_chain+0x58/0x8d
+[ 82.174366] [<ffffffff810677fe>] blocking_notifier_call_chain+0x14/0x16
+[ 82.174369] [<ffffffff811dd272>] crypto_probing_notify+0x24/0x50
+[ 82.174372] [<ffffffff811debd6>] crypto_wait_for_test+0x22/0x6b
+[ 82.174374] [<ffffffff811decd3>] crypto_register_instance+0xb4/0xc0
+[ 82.174377] [<ffffffff811e9b76>] cryptd_create+0x378/0x3b6
+[ 82.174379] [<ffffffff811de512>] ? __crypto_lookup_template+0x5b/0x63
+[ 82.174382] [<ffffffff811e4545>] cryptomgr_probe+0x45/0xac
+[ 82.174385] [<ffffffff811e4500>] ? crypto_alloc_pcomp+0x1b/0x1b
+[ 82.174388] [<ffffffff81061161>] kthread+0x7e/0x86
+[ 82.174391] [<ffffffff8106d9dd>] ? finish_task_switch+0xaf/0xfa
+[ 82.174394] [<ffffffff814987c4>] kernel_thread_helper+0x4/0x10
+[ 82.174398] [<ffffffff81491574>] ? retint_restore_args+0x13/0x13
+[ 82.174401] [<ffffffff810610e3>] ? __init_kthread_worker+0x8c/0x8c
+[ 82.174403] [<ffffffff814987c0>] ? gs_change+0x13/0x13
+
+cryptomgr_test spawns the cryptomgr_probe thread from the notifier
+call. The probe thread fires the same notifier as the test thread and
+deadlocks on the rwsem on RT.
+
+Now this is a potential deadlock in mainline as well, because we have
+fifo fair rwsems. If another thread blocks with a down_write() on the
+notifier chain before the probe thread issues the down_read() it will
+block the probe thread and the whole party is dead locked.
+
+Signed-off-by: Peter Zijlstra <peterz at infradead.org>
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ crypto/algapi.c | 5 +++--
+ crypto/api.c | 6 +++---
+ crypto/internal.h | 4 ++--
+ 3 files changed, 8 insertions(+), 7 deletions(-)
+
+Index: linux-stable/crypto/algapi.c
+===================================================================
+--- linux-stable.orig/crypto/algapi.c
++++ linux-stable/crypto/algapi.c
+@@ -683,13 +683,13 @@ EXPORT_SYMBOL_GPL(crypto_spawn_tfm2);
+
+ int crypto_register_notifier(struct notifier_block *nb)
+ {
+- return blocking_notifier_chain_register(&crypto_chain, nb);
++ return srcu_notifier_chain_register(&crypto_chain, nb);
+ }
+ EXPORT_SYMBOL_GPL(crypto_register_notifier);
+
+ int crypto_unregister_notifier(struct notifier_block *nb)
+ {
+- return blocking_notifier_chain_unregister(&crypto_chain, nb);
++ return srcu_notifier_chain_unregister(&crypto_chain, nb);
+ }
+ EXPORT_SYMBOL_GPL(crypto_unregister_notifier);
+
+@@ -956,6 +956,7 @@ EXPORT_SYMBOL_GPL(crypto_xor);
+
+ static int __init crypto_algapi_init(void)
+ {
++ srcu_init_notifier_head(&crypto_chain);
+ crypto_init_proc();
+ return 0;
+ }
+Index: linux-stable/crypto/api.c
+===================================================================
+--- linux-stable.orig/crypto/api.c
++++ linux-stable/crypto/api.c
+@@ -31,7 +31,7 @@ EXPORT_SYMBOL_GPL(crypto_alg_list);
+ DECLARE_RWSEM(crypto_alg_sem);
+ EXPORT_SYMBOL_GPL(crypto_alg_sem);
+
+-BLOCKING_NOTIFIER_HEAD(crypto_chain);
++struct srcu_notifier_head crypto_chain;
+ EXPORT_SYMBOL_GPL(crypto_chain);
+
+ static inline struct crypto_alg *crypto_alg_get(struct crypto_alg *alg)
+@@ -237,10 +237,10 @@ int crypto_probing_notify(unsigned long
+ {
+ int ok;
+
+- ok = blocking_notifier_call_chain(&crypto_chain, val, v);
++ ok = srcu_notifier_call_chain(&crypto_chain, val, v);
+ if (ok == NOTIFY_DONE) {
+ request_module("cryptomgr");
+- ok = blocking_notifier_call_chain(&crypto_chain, val, v);
++ ok = srcu_notifier_call_chain(&crypto_chain, val, v);
+ }
+
+ return ok;
+Index: linux-stable/crypto/internal.h
+===================================================================
+--- linux-stable.orig/crypto/internal.h
++++ linux-stable/crypto/internal.h
+@@ -48,7 +48,7 @@ struct crypto_larval {
+
+ extern struct list_head crypto_alg_list;
+ extern struct rw_semaphore crypto_alg_sem;
+-extern struct blocking_notifier_head crypto_chain;
++extern struct srcu_notifier_head crypto_chain;
+
+ #ifdef CONFIG_PROC_FS
+ void __init crypto_init_proc(void);
+@@ -136,7 +136,7 @@ static inline int crypto_is_moribund(str
+
+ static inline void crypto_notify(unsigned long val, void *v)
+ {
+- blocking_notifier_call_chain(&crypto_chain, val, v);
++ srcu_notifier_call_chain(&crypto_chain, val, v);
+ }
+
+ #endif /* _CRYPTO_INTERNAL_H */
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/pid-h-include-atomic-h.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0045-rwsem-inlcude-fix.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0045-rwsem-inlcude-fix.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/pid-h-include-atomic-h.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 712a03975ed20d20f189565f9a307949f62c762b Mon Sep 17 00:00:00 2001
+Subject: rwsem-inlcude-fix.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 15 Jul 2011 21:24:27 +0200
-Subject: [045/256] rwsem-inlcude-fix.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/pid.h | 1 +
1 file changed, 1 insertion(+)
-diff --git a/include/linux/pid.h b/include/linux/pid.h
-index b152d44..7f33683 100644
---- a/include/linux/pid.h
-+++ b/include/linux/pid.h
+Index: linux-stable/include/linux/pid.h
+===================================================================
+--- linux-stable.orig/include/linux/pid.h
++++ linux-stable/include/linux/pid.h
@@ -2,6 +2,7 @@
#define _LINUX_PID_H
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/ping-sysrq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0224-ping-sysrq.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0224-ping-sysrq.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/ping-sysrq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From c03b593dacf8da19b3422391c38a566fba3d7a02 Mon Sep 17 00:00:00 2001
+Subject: net: sysrq via icmp
From: Carsten Emde <C.Emde at osadl.org>
Date: Tue, 19 Jul 2011 13:51:17 +0100
-Subject: [224/256] ping-sysrq.patch
There are (probably rare) situations when a system crashed and the system
console becomes unresponsive but the network icmp layer still is alive.
@@ -11,6 +10,7 @@
Documentation/sysrq.txt for details.
Signed-off-by: Carsten Emde <C.Emde at osadl.org>
+
---
Documentation/sysrq.txt | 11 +++++++++--
include/net/netns/ipv4.h | 1 +
@@ -18,11 +18,11 @@
net/ipv4/sysctl_net_ipv4.c | 7 +++++++
4 files changed, 47 insertions(+), 2 deletions(-)
-diff --git a/Documentation/sysrq.txt b/Documentation/sysrq.txt
-index 642f844..bd283ed 100644
---- a/Documentation/sysrq.txt
-+++ b/Documentation/sysrq.txt
-@@ -57,10 +57,17 @@ On PowerPC - Press 'ALT - Print Screen (or F13) - <command key>,
+Index: linux-stable/Documentation/sysrq.txt
+===================================================================
+--- linux-stable.orig/Documentation/sysrq.txt
++++ linux-stable/Documentation/sysrq.txt
+@@ -57,10 +57,17 @@ On PowerPC - Press 'ALT - Print Screen (
On other - If you know of the key combos for other architectures, please
let me know so I can add them to this section.
@@ -35,18 +35,18 @@
+ echo 0x01020304 >/proc/sys/net/ipv4/icmp_echo_sysrq
+ Send an ICMP echo request with this pattern plus the particular
+ SysRq command key. Example:
-+ # ping -c1 -s57 -p0102030468
++ # ping -c1 -s57 -p0102030468
+ will trigger the SysRq-H (help) command.
+
+
* What are the 'command' keys?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'b' - Will immediately reboot the system without syncing or unmounting
-diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
-index bbd023a..643911e 100644
---- a/include/net/netns/ipv4.h
-+++ b/include/net/netns/ipv4.h
-@@ -47,6 +47,7 @@ struct netns_ipv4 {
+Index: linux-stable/include/net/netns/ipv4.h
+===================================================================
+--- linux-stable.orig/include/net/netns/ipv4.h
++++ linux-stable/include/net/netns/ipv4.h
+@@ -57,6 +57,7 @@ struct netns_ipv4 {
int sysctl_icmp_echo_ignore_all;
int sysctl_icmp_echo_ignore_broadcasts;
@@ -54,10 +54,10 @@
int sysctl_icmp_ignore_bogus_error_responses;
int sysctl_icmp_ratelimit;
int sysctl_icmp_ratemask;
-diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
-index 2cb2bf8..9a37732 100644
---- a/net/ipv4/icmp.c
-+++ b/net/ipv4/icmp.c
+Index: linux-stable/net/ipv4/icmp.c
+===================================================================
+--- linux-stable.orig/net/ipv4/icmp.c
++++ linux-stable/net/ipv4/icmp.c
@@ -69,6 +69,7 @@
#include <linux/jiffies.h>
#include <linux/kernel.h>
@@ -66,7 +66,7 @@
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/inet.h>
-@@ -799,6 +800,30 @@ out_err:
+@@ -767,6 +768,30 @@ static void icmp_redirect(struct sk_buff
}
/*
@@ -97,7 +97,7 @@
* Handle ICMP_ECHO ("ping") requests.
*
* RFC 1122: 3.2.2.6 MUST have an echo server that answers ICMP echo
-@@ -825,6 +850,11 @@ static void icmp_echo(struct sk_buff *skb)
+@@ -793,6 +818,11 @@ static void icmp_echo(struct sk_buff *sk
icmp_param.data_len = skb->len;
icmp_param.head_len = sizeof(struct icmphdr);
icmp_reply(&icmp_param, skb);
@@ -109,11 +109,11 @@
}
}
-diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
-index 7a7724d..96c6109 100644
---- a/net/ipv4/sysctl_net_ipv4.c
-+++ b/net/ipv4/sysctl_net_ipv4.c
-@@ -718,6 +718,13 @@ static struct ctl_table ipv4_net_table[] = {
+Index: linux-stable/net/ipv4/sysctl_net_ipv4.c
+===================================================================
+--- linux-stable.orig/net/ipv4/sysctl_net_ipv4.c
++++ linux-stable/net/ipv4/sysctl_net_ipv4.c
+@@ -756,6 +756,13 @@ static struct ctl_table ipv4_net_table[]
.proc_handler = proc_dointvec
},
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/posix-timers-avoid-wakeups-when-no-timers-are-active.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0123-posix-timers-Avoid-wakeups-when-no-timers-are-active.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0123-posix-timers-Avoid-wakeups-when-no-timers-are-active.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/posix-timers-avoid-wakeups-when-no-timers-are-active.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,19 @@
-From a819843d215ebad5b84fbdb585d2aa4f7bed7748 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 3 Jul 2009 08:44:44 -0500
-Subject: [123/256] posix-timers: Avoid wakeups when no timers are active
+Subject: posix-timers: Avoid wakeups when no timers are active
Waking the thread even when no timers are scheduled is useless.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/posix-cpu-timers.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
-diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c
-index 09eb469..2af6ea68 100644
---- a/kernel/posix-cpu-timers.c
-+++ b/kernel/posix-cpu-timers.c
+Index: linux-stable/kernel/posix-cpu-timers.c
+===================================================================
+--- linux-stable.orig/kernel/posix-cpu-timers.c
++++ linux-stable/kernel/posix-cpu-timers.c
@@ -1408,6 +1408,21 @@ wait_to_die:
return 0;
}
@@ -36,7 +36,7 @@
void run_posix_cpu_timers(struct task_struct *tsk)
{
unsigned long cpu = smp_processor_id();
-@@ -1420,7 +1435,7 @@ void run_posix_cpu_timers(struct task_struct *tsk)
+@@ -1420,7 +1435,7 @@ void run_posix_cpu_timers(struct task_st
tasklist = per_cpu(posix_timer_tasklist, cpu);
/* check to see if we're already queued */
@@ -45,7 +45,7 @@
get_task_struct(tsk);
if (tasklist) {
tsk->posix_timer_list = tasklist;
-@@ -1432,9 +1447,9 @@ void run_posix_cpu_timers(struct task_struct *tsk)
+@@ -1432,9 +1447,9 @@ void run_posix_cpu_timers(struct task_st
tsk->posix_timer_list = tsk;
}
per_cpu(posix_timer_tasklist, cpu) = tsk;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/posix-timers-no-broadcast.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0021-posix-timers-Prevent-broadcast-signals.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0021-posix-timers-Prevent-broadcast-signals.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/posix-timers-no-broadcast.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From d4e4500394adb167a94c878ed6c7cc8ecdb26da1 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 3 Jul 2009 08:29:20 -0500
-Subject: [021/256] posix-timers: Prevent broadcast signals
+Subject: posix-timers: Prevent broadcast signals
Posix timers should not send broadcast signals and kernel only
signals. Prevent it.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/posix-timers.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
-diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c
-index 69185ae..7b73c34 100644
---- a/kernel/posix-timers.c
-+++ b/kernel/posix-timers.c
-@@ -439,6 +439,7 @@ static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer)
+Index: linux-stable/kernel/posix-timers.c
+===================================================================
+--- linux-stable.orig/kernel/posix-timers.c
++++ linux-stable/kernel/posix-timers.c
+@@ -439,6 +439,7 @@ static enum hrtimer_restart posix_timer_
static struct pid *good_sigevent(sigevent_t * event)
{
struct task_struct *rtn = current->group_leader;
@@ -23,7 +23,7 @@
if ((event->sigev_notify & SIGEV_THREAD_ID ) &&
(!(rtn = find_task_by_vpid(event->sigev_notify_thread_id)) ||
-@@ -447,7 +448,8 @@ static struct pid *good_sigevent(sigevent_t * event)
+@@ -447,7 +448,8 @@ static struct pid *good_sigevent(sigeven
return NULL;
if (((event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) &&
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/posix-timers-shorten-cpu-timers-thread.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0122-posix-timers-Shorten-posix_cpu_timers-CPU-kernel-thr.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0122-posix-timers-Shorten-posix_cpu_timers-CPU-kernel-thr.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/posix-timers-shorten-cpu-timers-thread.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From d43c6637939cbe4ffd20739ab80b6089d7c8f07e Mon Sep 17 00:00:00 2001
From: Arnaldo Carvalho de Melo <acme at redhat.com>
Date: Fri, 3 Jul 2009 08:30:00 -0500
-Subject: [122/256] posix-timers: Shorten posix_cpu_timers/<CPU> kernel thread
- names
+Subject: posix-timers: Shorten posix_cpu_timers/<CPU> kernel thread names
Shorten the softirq kernel thread names because they always overflow the
limited comm length, appearing as "posix_cpu_timer" CPU# times.
@@ -10,15 +8,16 @@
Signed-off-by: Arnaldo Carvalho de Melo <acme at redhat.com>
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/posix-cpu-timers.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c
-index 63468d1..09eb469 100644
---- a/kernel/posix-cpu-timers.c
-+++ b/kernel/posix-cpu-timers.c
-@@ -1451,7 +1451,7 @@ static int posix_cpu_thread_call(struct notifier_block *nfb,
+Index: linux-stable/kernel/posix-cpu-timers.c
+===================================================================
+--- linux-stable.orig/kernel/posix-cpu-timers.c
++++ linux-stable/kernel/posix-cpu-timers.c
+@@ -1451,7 +1451,7 @@ static int posix_cpu_thread_call(struct
switch (action) {
case CPU_UP_PREPARE:
p = kthread_create(posix_cpu_timers_thread, hcpu,
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/posix-timers-thread-posix-cpu-timers-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0121-posix-timers-thread-posix-cpu-timers-on-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0121-posix-timers-thread-posix-cpu-timers-on-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/posix-timers-thread-posix-cpu-timers-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 2bb51fa71528853384b1cf3873f06853fd454b51 Mon Sep 17 00:00:00 2001
From: John Stultz <johnstul at us.ibm.com>
Date: Fri, 3 Jul 2009 08:29:58 -0500
-Subject: [121/256] posix-timers: thread posix-cpu-timers on -rt
+Subject: posix-timers: thread posix-cpu-timers on -rt
posix-cpu-timer code takes non -rt safe locks in hard irq
context. Move it to a thread.
@@ -10,19 +9,20 @@
Signed-off-by: John Stultz <johnstul at us.ibm.com>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- include/linux/init_task.h | 7 ++
- include/linux/sched.h | 3 +
- init/main.c | 1 +
- kernel/fork.c | 3 +
- kernel/posix-cpu-timers.c | 182 +++++++++++++++++++++++++++++++++++++++++++--
+ include/linux/init_task.h | 7 +
+ include/linux/sched.h | 3
+ init/main.c | 1
+ kernel/fork.c | 3
+ kernel/posix-cpu-timers.c | 182 ++++++++++++++++++++++++++++++++++++++++++++--
5 files changed, 190 insertions(+), 6 deletions(-)
-diff --git a/include/linux/init_task.h b/include/linux/init_task.h
-index e4baff5..29334a5 100644
---- a/include/linux/init_task.h
-+++ b/include/linux/init_task.h
-@@ -132,6 +132,12 @@ extern struct cred init_cred;
+Index: linux-stable/include/linux/init_task.h
+===================================================================
+--- linux-stable.orig/include/linux/init_task.h
++++ linux-stable/include/linux/init_task.h
+@@ -141,6 +141,12 @@ extern struct task_group root_task_group
# define INIT_PERF_EVENTS(tsk)
#endif
@@ -35,7 +35,7 @@
#define INIT_TASK_COMM "swapper"
/*
-@@ -186,6 +192,7 @@ extern struct cred init_cred;
+@@ -196,6 +202,7 @@ extern struct task_group root_task_group
.cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \
.pi_lock = __RAW_SPIN_LOCK_UNLOCKED(tsk.pi_lock), \
.timer_slack_ns = 50000, /* 50 usec default slack */ \
@@ -43,11 +43,11 @@
.pids = { \
[PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID), \
[PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 5b63855..b997506 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1403,6 +1403,9 @@ struct task_struct {
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1373,6 +1373,9 @@ struct task_struct {
struct task_cputime cputime_expires;
struct list_head cpu_timers[3];
@@ -57,23 +57,23 @@
/* process credentials */
const struct cred __rcu *real_cred; /* objective and real subjective task
-diff --git a/init/main.c b/init/main.c
-index b08c5f7..7896ec9 100644
---- a/init/main.c
-+++ b/init/main.c
-@@ -68,6 +68,7 @@
- #include <linux/shmem_fs.h>
+Index: linux-stable/init/main.c
+===================================================================
+--- linux-stable.orig/init/main.c
++++ linux-stable/init/main.c
+@@ -69,6 +69,7 @@
#include <linux/slab.h>
#include <linux/perf_event.h>
+ #include <linux/file.h>
+#include <linux/posix-timers.h>
#include <asm/io.h>
#include <asm/bugs.h>
-diff --git a/kernel/fork.c b/kernel/fork.c
-index 4c9def3..45a45b7 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -1098,6 +1098,9 @@ void mm_init_owner(struct mm_struct *mm, struct task_struct *p)
+Index: linux-stable/kernel/fork.c
+===================================================================
+--- linux-stable.orig/kernel/fork.c
++++ linux-stable/kernel/fork.c
+@@ -1130,6 +1130,9 @@ void mm_init_owner(struct mm_struct *mm,
*/
static void posix_cpu_timers_init(struct task_struct *tsk)
{
@@ -83,11 +83,11 @@
tsk->cputime_expires.prof_exp = 0;
tsk->cputime_expires.virt_exp = 0;
tsk->cputime_expires.sched_exp = 0;
-diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c
-index 125cb67..63468d1 100644
---- a/kernel/posix-cpu-timers.c
-+++ b/kernel/posix-cpu-timers.c
-@@ -682,7 +682,7 @@ static int posix_cpu_timer_set(struct k_itimer *timer, int flags,
+Index: linux-stable/kernel/posix-cpu-timers.c
+===================================================================
+--- linux-stable.orig/kernel/posix-cpu-timers.c
++++ linux-stable/kernel/posix-cpu-timers.c
+@@ -682,7 +682,7 @@ static int posix_cpu_timer_set(struct k_
/*
* Disarm any old timer after extracting its expiry time.
*/
@@ -96,7 +96,7 @@
ret = 0;
old_incr = timer->it.cpu.incr;
-@@ -1198,7 +1198,7 @@ void posix_cpu_timer_schedule(struct k_itimer *timer)
+@@ -1198,7 +1198,7 @@ void posix_cpu_timer_schedule(struct k_i
/*
* Now re-arm for the new expiry time.
*/
@@ -105,7 +105,7 @@
arm_timer(timer);
spin_unlock(&p->sighand->siglock);
-@@ -1262,10 +1262,11 @@ static inline int fastpath_timer_check(struct task_struct *tsk)
+@@ -1262,10 +1262,11 @@ static inline int fastpath_timer_check(s
sig = tsk->signal;
if (sig->cputimer.running) {
struct task_cputime group_sample;
@@ -119,7 +119,7 @@
if (task_cputime_expired(&group_sample, &sig->cputime_expires))
return 1;
-@@ -1279,13 +1280,13 @@ static inline int fastpath_timer_check(struct task_struct *tsk)
+@@ -1279,13 +1280,13 @@ static inline int fastpath_timer_check(s
* already updated our counts. We need to check if any timers fire now.
* Interrupts are disabled.
*/
@@ -135,7 +135,7 @@
/*
* The fast path checks that there are no expired thread or thread
-@@ -1343,6 +1344,175 @@ void run_posix_cpu_timers(struct task_struct *tsk)
+@@ -1343,6 +1344,175 @@ void run_posix_cpu_timers(struct task_st
}
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/power-disable-highmem-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0219-power-disable-highmem-on-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0219-power-disable-highmem-on-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/power-disable-highmem-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,23 +1,22 @@
-From b0c5b2c481c27ca0c81463536b9fd60e0375b1e6 Mon Sep 17 00:00:00 2001
+Subject: power-disable-highmem-on-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 18 Jul 2011 17:08:34 +0200
-Subject: [219/256] power-disable-highmem-on-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
arch/powerpc/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
-index 981d71f..86e2322 100644
---- a/arch/powerpc/Kconfig
-+++ b/arch/powerpc/Kconfig
-@@ -283,7 +283,7 @@ menu "Kernel options"
+Index: linux-stable/arch/powerpc/Kconfig
+===================================================================
+--- linux-stable.orig/arch/powerpc/Kconfig
++++ linux-stable/arch/powerpc/Kconfig
+@@ -278,7 +278,7 @@ menu "Kernel options"
config HIGHMEM
bool "High memory support"
- depends on PPC32
+ depends on PPC32 && !PREEMPT_RT_FULL
- source kernel/time/Kconfig
source kernel/Kconfig.hz
+ source kernel/Kconfig.preempt
Added: dists/trunk/linux/debian/patches/features/all/rt/power-use-generic-rwsem-on-rt.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/power-use-generic-rwsem-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,25 @@
+From: Thomas Gleixner <tglx at linutronix.de>
+Subject: Powerpc: Use generic rwsem on RT
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ arch/powerpc/Kconfig | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+Index: linux-stable/arch/powerpc/Kconfig
+===================================================================
+--- linux-stable.orig/arch/powerpc/Kconfig
++++ linux-stable/arch/powerpc/Kconfig
+@@ -60,10 +60,11 @@ config LOCKDEP_SUPPORT
+
+ config RWSEM_GENERIC_SPINLOCK
+ bool
++ default y if PREEMPT_RT_FULL
+
+ config RWSEM_XCHGADD_ALGORITHM
+ bool
+- default y
++ default y if !PREEMPT_RT_FULL
+
+ config GENERIC_LOCKBREAK
+ bool
Added: dists/trunk/linux/debian/patches/features/all/rt/ppc-mark-low-level-handlers-no-thread.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/ppc-mark-low-level-handlers-no-thread.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,39 @@
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Mon, 18 Jun 2012 19:53:17 +0200
+Subject: powerpc: Mark low level irq handlers NO_THREAD
+
+These low level handlers cannot be threaded. Mark them NO_THREAD
+
+Reported-by: leroy christophe <christophe.leroy at c-s.fr>
+Tested-by: leroy christophe <christophe.leroy at c-s.fr>
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
+---
+ arch/powerpc/platforms/8xx/m8xx_setup.c | 1 +
+ arch/powerpc/sysdev/cpm1.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+Index: linux-stable/arch/powerpc/platforms/8xx/m8xx_setup.c
+===================================================================
+--- linux-stable.orig/arch/powerpc/platforms/8xx/m8xx_setup.c
++++ linux-stable/arch/powerpc/platforms/8xx/m8xx_setup.c
+@@ -43,6 +43,7 @@ static irqreturn_t timebase_interrupt(in
+
+ static struct irqaction tbint_irqaction = {
+ .handler = timebase_interrupt,
++ .flags = IRQF_NO_THREAD,
+ .name = "tbint",
+ };
+
+Index: linux-stable/arch/powerpc/sysdev/cpm1.c
+===================================================================
+--- linux-stable.orig/arch/powerpc/sysdev/cpm1.c
++++ linux-stable/arch/powerpc/sysdev/cpm1.c
+@@ -120,6 +120,7 @@ static irqreturn_t cpm_error_interrupt(i
+
+ static struct irqaction cpm_error_irqaction = {
+ .handler = cpm_error_interrupt,
++ .flags = IRQF_NO_THREAD,
+ .name = "error",
+ };
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/preempt-nort-rt-variants.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0063-preempt-Provide-preempt_-_-no-rt-variants.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0063-preempt-Provide-preempt_-_-no-rt-variants.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/preempt-nort-rt-variants.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,20 +1,20 @@
-From 80a25976f8e91af5f742c4cb2603fc67615da181 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 24 Jul 2009 12:38:56 +0200
-Subject: [063/256] preempt: Provide preempt_*_(no)rt variants
+Subject: preempt: Provide preempt_*_(no)rt variants
RT needs a few preempt_disable/enable points which are not necessary
otherwise. Implement variants to avoid #ifdeffery.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/preempt.h | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
-diff --git a/include/linux/preempt.h b/include/linux/preempt.h
-index 5a710b9..5b46536 100644
---- a/include/linux/preempt.h
-+++ b/include/linux/preempt.h
+Index: linux-stable/include/linux/preempt.h
+===================================================================
+--- linux-stable.orig/include/linux/preempt.h
++++ linux-stable/include/linux/preempt.h
@@ -54,11 +54,15 @@ do { \
dec_preempt_count(); \
} while (0)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0059-printk-force_early_printk-boot-param-to-help-with-de.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0059-printk-force_early_printk-boot-param-to-help-with-de.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,10 @@
-From a68766e166c72cd6c07a4a2cb2cbbaba2a18a220 Mon Sep 17 00:00:00 2001
+Subject: printk: %27force_early_printk%27 boot param to help with debugging
+From: Peter Zijlstra <peterz at infradead.org>
+Date: Fri, 02 Sep 2011 14:41:29 +0200
+
+Subject: printk: 'force_early_printk' boot param to help with debugging
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Fri, 2 Sep 2011 14:29:33 +0200
-Subject: [059/256] printk: 'force_early_printk' boot param to help with
- debugging
+Date: Fri Sep 02 14:29:33 CEST 2011
Gives me an option to screw printk and actually see what the machine
says.
@@ -15,11 +17,11 @@
kernel/printk.c | 7 +++++++
1 file changed, 7 insertions(+)
-diff --git a/kernel/printk.c b/kernel/printk.c
-index 5a172f9..300952e 100644
---- a/kernel/printk.c
-+++ b/kernel/printk.c
-@@ -547,6 +547,13 @@ asmlinkage void early_printk(const char *fmt, ...)
+Index: linux-stable/kernel/printk.c
+===================================================================
+--- linux-stable.orig/kernel/printk.c
++++ linux-stable/kernel/printk.c
+@@ -1255,6 +1255,13 @@ asmlinkage void early_printk(const char
*/
static bool __read_mostly printk_killswitch;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/printk-kill.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0058-printk-kill.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0058-printk-kill.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/printk-kill.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 88a4cc8d3aa5b6010db77faa48003759d22d64d8 Mon Sep 17 00:00:00 2001
+Subject: printk-kill.patch
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 22 Jul 2011 17:58:40 +0200
-Subject: [058/256] printk-kill.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -10,14 +9,14 @@
kernel/watchdog.c | 15 +++++++++++++--
3 files changed, 48 insertions(+), 3 deletions(-)
-diff --git a/include/linux/printk.h b/include/linux/printk.h
-index c8d7f7b..d5e6eed 100644
---- a/include/linux/printk.h
-+++ b/include/linux/printk.h
-@@ -91,9 +91,11 @@ int no_printk(const char *fmt, ...)
- #ifdef CONFIG_EARLY_PRINTK
+Index: linux-stable/include/linux/printk.h
+===================================================================
+--- linux-stable.orig/include/linux/printk.h
++++ linux-stable/include/linux/printk.h
+@@ -99,9 +99,11 @@ int no_printk(const char *fmt, ...)
extern asmlinkage __printf(1, 2)
void early_printk(const char *fmt, ...);
+ void early_vprintk(const char *fmt, va_list ap);
+extern void printk_kill(void);
#else
static inline __printf(1, 2) __cold
@@ -26,7 +25,7 @@
#endif
extern int printk_needs_cpu(int cpu);
-@@ -119,7 +121,6 @@ extern int __printk_ratelimit(const char *func);
+@@ -138,7 +140,6 @@ extern int __printk_ratelimit(const char
#define printk_ratelimit() __printk_ratelimit(__func__)
extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
unsigned int interval_msec);
@@ -34,11 +33,11 @@
extern int printk_delay_msec;
extern int dmesg_restrict;
extern int kptr_restrict;
-diff --git a/kernel/printk.c b/kernel/printk.c
-index c442606..5a172f9 100644
---- a/kernel/printk.c
-+++ b/kernel/printk.c
-@@ -538,6 +538,32 @@ asmlinkage void early_printk(const char *fmt, ...)
+Index: linux-stable/kernel/printk.c
+===================================================================
+--- linux-stable.orig/kernel/printk.c
++++ linux-stable/kernel/printk.c
+@@ -1246,6 +1246,32 @@ asmlinkage void early_printk(const char
early_vprintk(fmt, ap);
va_end(ap);
}
@@ -71,9 +70,9 @@
#endif
static bool __read_mostly ignore_loglevel;
-@@ -862,6 +888,13 @@ asmlinkage int vprintk(const char *fmt, va_list args)
- size_t plen;
- char special;
+@@ -1508,6 +1534,13 @@ asmlinkage int vprintk_emit(int facility
+ int this_cpu;
+ int printed_len = 0;
+ /*
+ * Fall back to early_printk if a debugging subsystem has
@@ -85,11 +84,11 @@
boot_delay_msec();
printk_delay();
-diff --git a/kernel/watchdog.c b/kernel/watchdog.c
-index df30ee0..de08263 100644
---- a/kernel/watchdog.c
-+++ b/kernel/watchdog.c
-@@ -201,6 +201,8 @@ static int is_softlockup(unsigned long touch_ts)
+Index: linux-stable/kernel/watchdog.c
+===================================================================
+--- linux-stable.orig/kernel/watchdog.c
++++ linux-stable/kernel/watchdog.c
+@@ -202,6 +202,8 @@ static int is_softlockup(unsigned long t
#ifdef CONFIG_HARDLOCKUP_DETECTOR
@@ -98,7 +97,7 @@
static struct perf_event_attr wd_hw_attr = {
.type = PERF_TYPE_HARDWARE,
.config = PERF_COUNT_HW_CPU_CYCLES,
-@@ -235,10 +237,19 @@ static void watchdog_overflow_callback(struct perf_event *event,
+@@ -236,10 +238,19 @@ static void watchdog_overflow_callback(s
if (__this_cpu_read(hard_watchdog_warn) == true)
return;
Added: dists/trunk/linux/debian/patches/features/all/rt/printk-rt-aware.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/printk-rt-aware.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,103 @@
+Subject: printk-rt-aware.patch
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Wed, 19 Sep 2012 14:50:37 +0200
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/printk.c | 33 +++++++++++++++++++++++++++++----
+ 1 file changed, 29 insertions(+), 4 deletions(-)
+
+Index: linux-stable/kernel/printk.c
+===================================================================
+--- linux-stable.orig/kernel/printk.c
++++ linux-stable/kernel/printk.c
+@@ -1312,6 +1312,7 @@ static void call_console_drivers(int lev
+ if (!console_drivers)
+ return;
+
++ migrate_disable();
+ for_each_console(con) {
+ if (exclusive_console && con != exclusive_console)
+ continue;
+@@ -1324,6 +1325,7 @@ static void call_console_drivers(int lev
+ continue;
+ con->write(con, text, len);
+ }
++ migrate_enable();
+ }
+
+ /*
+@@ -1383,12 +1385,18 @@ static inline int can_use_console(unsign
+ * interrupts disabled. It should return with 'lockbuf_lock'
+ * released but interrupts still disabled.
+ */
+-static int console_trylock_for_printk(unsigned int cpu)
++static int console_trylock_for_printk(unsigned int cpu, unsigned long flags)
+ __releases(&logbuf_lock)
+ {
+ int retval = 0, wake = 0;
++#ifdef CONFIG_PREEMPT_RT_FULL
++ int lock = !early_boot_irqs_disabled && !irqs_disabled_flags(flags) &&
++ (preempt_count() <= 1);
++#else
++ int lock = 1;
++#endif
+
+- if (console_trylock()) {
++ if (lock && console_trylock()) {
+ retval = 1;
+
+ /*
+@@ -1667,8 +1675,15 @@ asmlinkage int vprintk_emit(int facility
+ * The console_trylock_for_printk() function will release 'logbuf_lock'
+ * regardless of whether it actually gets the console semaphore or not.
+ */
+- if (console_trylock_for_printk(this_cpu))
++ if (console_trylock_for_printk(this_cpu, flags)) {
++#ifndef CONFIG_PREEMPT_RT_FULL
++ console_unlock();
++#else
++ raw_local_irq_restore(flags);
+ console_unlock();
++ raw_local_irq_save(flags);
++#endif
++ }
+
+ lockdep_on();
+ out_restore_irqs:
+@@ -2057,11 +2072,16 @@ static void console_cont_flush(char *tex
+ goto out;
+
+ len = cont_print_text(text, size);
++#ifndef CONFIG_PREEMPT_RT_FULL
+ raw_spin_unlock(&logbuf_lock);
+ stop_critical_timings();
+ call_console_drivers(cont.level, text, len);
+ start_critical_timings();
+ local_irq_restore(flags);
++#else
++ raw_spin_unlock_irqrestore(&logbuf_lock, flags);
++ call_console_drivers(cont.level, text, len);
++#endif
+ return;
+ out:
+ raw_spin_unlock_irqrestore(&logbuf_lock, flags);
+@@ -2144,12 +2164,17 @@ skip:
+ console_idx = log_next(console_idx);
+ console_seq++;
+ console_prev = msg->flags;
+- raw_spin_unlock(&logbuf_lock);
+
++#ifndef CONFIG_PREEMPT_RT_FULL
++ raw_spin_unlock(&logbuf_lock);
+ stop_critical_timings(); /* don't trace print latency */
+ call_console_drivers(level, text, len);
+ start_critical_timings();
+ local_irq_restore(flags);
++#else
++ raw_spin_unlock_irqrestore(&logbuf_lock, flags);
++ call_console_drivers(level, text, len);
++#endif
+ }
+ console_locked = 0;
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/radix-tree-rt-aware.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0101-radix-tree-rt-aware.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0101-radix-tree-rt-aware.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/radix-tree-rt-aware.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From bd3ec47b69cea1ae02ae7d50ac1090eabc6c2edb Mon Sep 17 00:00:00 2001
+Subject: radix-tree-rt-aware.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 21:33:18 +0200
-Subject: [101/256] radix-tree-rt-aware.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
lib/radix-tree.c | 5 ++++-
2 files changed, 11 insertions(+), 2 deletions(-)
-diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h
-index ffc444c..7ddfbf9 100644
---- a/include/linux/radix-tree.h
-+++ b/include/linux/radix-tree.h
-@@ -230,7 +230,13 @@ unsigned long radix_tree_next_hole(struct radix_tree_root *root,
+Index: linux-stable/include/linux/radix-tree.h
+===================================================================
+--- linux-stable.orig/include/linux/radix-tree.h
++++ linux-stable/include/linux/radix-tree.h
+@@ -230,7 +230,13 @@ unsigned long radix_tree_next_hole(struc
unsigned long index, unsigned long max_scan);
unsigned long radix_tree_prev_hole(struct radix_tree_root *root,
unsigned long index, unsigned long max_scan);
@@ -27,7 +26,7 @@
void radix_tree_init(void);
void *radix_tree_tag_set(struct radix_tree_root *root,
unsigned long index, unsigned int tag);
-@@ -255,7 +261,7 @@ unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item);
+@@ -255,7 +261,7 @@ unsigned long radix_tree_locate_item(str
static inline void radix_tree_preload_end(void)
{
@@ -36,11 +35,11 @@
}
/**
-diff --git a/lib/radix-tree.c b/lib/radix-tree.c
-index 3ac50dc..52ebdb1 100644
---- a/lib/radix-tree.c
-+++ b/lib/radix-tree.c
-@@ -202,12 +202,13 @@ radix_tree_node_alloc(struct radix_tree_root *root)
+Index: linux-stable/lib/radix-tree.c
+===================================================================
+--- linux-stable.orig/lib/radix-tree.c
++++ linux-stable/lib/radix-tree.c
+@@ -215,12 +215,13 @@ radix_tree_node_alloc(struct radix_tree_
* succeed in getting a node here (and never reach
* kmem_cache_alloc)
*/
@@ -55,7 +54,7 @@
}
if (ret == NULL)
ret = kmem_cache_alloc(radix_tree_node_cachep, gfp_mask);
-@@ -242,6 +243,7 @@ radix_tree_node_free(struct radix_tree_node *node)
+@@ -255,6 +256,7 @@ radix_tree_node_free(struct radix_tree_n
call_rcu(&node->rcu_head, radix_tree_node_rcu_free);
}
@@ -63,7 +62,7 @@
/*
* Load up this CPU's radix_tree_node buffer with sufficient objects to
* ensure that the addition of a single element in the tree cannot fail. On
-@@ -276,6 +278,7 @@ out:
+@@ -289,6 +291,7 @@ out:
return ret;
}
EXPORT_SYMBOL(radix_tree_preload);
Added: dists/trunk/linux/debian/patches/features/all/rt/random-make-it-work-on-rt.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/random-make-it-work-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,124 @@
+Subject: random: Make it work on rt
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Tue, 21 Aug 2012 20:38:50 +0200
+
+Delegate the random insertion to the forced threaded interrupt
+handler. Store the return IP of the hard interrupt handler in the irq
+descriptor and feed it into the random generator as a source of
+entropy.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+---
+ drivers/char/random.c | 10 ++++++----
+ include/linux/irqdesc.h | 1 +
+ include/linux/random.h | 2 +-
+ kernel/irq/handle.c | 8 +++++++-
+ kernel/irq/manage.c | 6 ++++++
+ 5 files changed, 21 insertions(+), 6 deletions(-)
+
+Index: linux-stable/drivers/char/random.c
+===================================================================
+--- linux-stable.orig/drivers/char/random.c
++++ linux-stable/drivers/char/random.c
+@@ -745,18 +745,16 @@ EXPORT_SYMBOL_GPL(add_input_randomness);
+
+ static DEFINE_PER_CPU(struct fast_pool, irq_randomness);
+
+-void add_interrupt_randomness(int irq, int irq_flags)
++void add_interrupt_randomness(int irq, int irq_flags, __u64 ip)
+ {
+ struct entropy_store *r;
+ struct fast_pool *fast_pool = &__get_cpu_var(irq_randomness);
+- struct pt_regs *regs = get_irq_regs();
+ unsigned long now = jiffies;
+ __u32 input[4], cycles = get_cycles();
+
+ input[0] = cycles ^ jiffies;
+ input[1] = irq;
+- if (regs) {
+- __u64 ip = instruction_pointer(regs);
++ if (ip) {
+ input[2] = ip;
+ input[3] = ip >> 32;
+ }
+@@ -770,7 +768,11 @@ void add_interrupt_randomness(int irq, i
+ fast_pool->last = now;
+
+ r = nonblocking_pool.initialized ? &input_pool : &nonblocking_pool;
++#ifndef CONFIG_PREEMPT_RT_FULL
+ __mix_pool_bytes(r, &fast_pool->pool, sizeof(fast_pool->pool), NULL);
++#else
++ mix_pool_bytes(r, &fast_pool->pool, sizeof(fast_pool->pool), NULL);
++#endif
+ /*
+ * If we don't have a valid cycle counter, and we see
+ * back-to-back timer interrupts, then skip giving credit for
+Index: linux-stable/include/linux/irqdesc.h
+===================================================================
+--- linux-stable.orig/include/linux/irqdesc.h
++++ linux-stable/include/linux/irqdesc.h
+@@ -52,6 +52,7 @@ struct irq_desc {
+ unsigned int irq_count; /* For detecting broken IRQs */
+ unsigned long last_unhandled; /* Aging timer for unhandled count */
+ unsigned int irqs_unhandled;
++ u64 random_ip;
+ raw_spinlock_t lock;
+ struct cpumask *percpu_enabled;
+ #ifdef CONFIG_SMP
+Index: linux-stable/include/linux/random.h
+===================================================================
+--- linux-stable.orig/include/linux/random.h
++++ linux-stable/include/linux/random.h
+@@ -51,7 +51,7 @@ struct rnd_state {
+ extern void add_device_randomness(const void *, unsigned int);
+ extern void add_input_randomness(unsigned int type, unsigned int code,
+ unsigned int value);
+-extern void add_interrupt_randomness(int irq, int irq_flags);
++extern void add_interrupt_randomness(int irq, int irq_flags, __u64 ip);
+
+ extern void get_random_bytes(void *buf, int nbytes);
+ extern void get_random_bytes_arch(void *buf, int nbytes);
+Index: linux-stable/kernel/irq/handle.c
+===================================================================
+--- linux-stable.orig/kernel/irq/handle.c
++++ linux-stable/kernel/irq/handle.c
+@@ -132,6 +132,8 @@ static void irq_wake_thread(struct irq_d
+ irqreturn_t
+ handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action)
+ {
++ struct pt_regs *regs = get_irq_regs();
++ u64 ip = regs ? instruction_pointer(regs) : 0;
+ irqreturn_t retval = IRQ_NONE;
+ unsigned int flags = 0, irq = desc->irq_data.irq;
+
+@@ -172,7 +174,11 @@ handle_irq_event_percpu(struct irq_desc
+ action = action->next;
+ } while (action);
+
+- add_interrupt_randomness(irq, flags);
++#ifndef CONFIG_PREEMPT_RT_FULL
++ add_interrupt_randomness(irq, flags, ip);
++#else
++ desc->random_ip = ip;
++#endif
+
+ if (!noirqdebug)
+ note_interrupt(irq, desc, retval);
+Index: linux-stable/kernel/irq/manage.c
+===================================================================
+--- linux-stable.orig/kernel/irq/manage.c
++++ linux-stable/kernel/irq/manage.c
+@@ -852,6 +852,12 @@ static int irq_thread(void *data)
+ if (!noirqdebug)
+ note_interrupt(action->irq, desc, action_ret);
+
++#ifdef CONFIG_PREEMPT_RT_FULL
++ migrate_disable();
++ add_interrupt_randomness(action->irq, 0,
++ desc->random_ip ^ (u64) action);
++ migrate_enable();
++#endif
+ wake_threads_waitq(desc);
+ }
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rcu-fix-build-break.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0189-rcu-Fix-build-break.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0189-rcu-Fix-build-break.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rcu-fix-build-break.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,10 +1,6 @@
-From 1516657b9f046ff3d8091a556863bda9c891e314 Mon Sep 17 00:00:00 2001
+Subject: rcu: Fix build break
From: John Kacur <jkacur at redhat.com>
Date: Fri, 13 Apr 2012 12:54:21 +0200
-Subject: [189/256] rcu: Fix build break
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
A build break can occur with the following config options enabled
@@ -32,12 +28,12 @@
kernel/rcutree_plugin.h | 5 +++++
1 file changed, 5 insertions(+)
-diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
-index 14acafc..2844d7d 100644
---- a/kernel/rcutree_plugin.h
-+++ b/kernel/rcutree_plugin.h
-@@ -1914,6 +1914,9 @@ int rcu_needs_cpu(int cpu)
- {
+Index: linux-stable/kernel/rcutree_plugin.h
+===================================================================
+--- linux-stable.orig/kernel/rcutree_plugin.h
++++ linux-stable/kernel/rcutree_plugin.h
+@@ -1743,6 +1743,9 @@ int rcu_needs_cpu(int cpu, unsigned long
+ *delta_jiffies = ULONG_MAX;
return rcu_cpu_has_callbacks(cpu);
}
+#endif /* !defined(CONFIG_RCU_FAST_NO_HZ) || defined(CONFIG_PREEMPT_RT_FULL) */
@@ -46,19 +42,19 @@
/*
* Because we do not have RCU_FAST_NO_HZ, don't bother initializing for it.
-@@ -1984,6 +1987,7 @@ static DEFINE_PER_CPU(struct hrtimer, rcu_idle_gp_timer);
- static ktime_t rcu_idle_gp_wait; /* If some non-lazy callbacks. */
- static ktime_t rcu_idle_lazy_gp_wait; /* If only lazy callbacks. */
+@@ -1859,6 +1862,7 @@ static bool rcu_cpu_has_nonlazy_callback
+ rcu_preempt_cpu_has_nonlazy_callbacks(cpu);
+ }
+#ifndef CONFIG_PREEMPT_RT_FULL
/*
* Allow the CPU to enter dyntick-idle mode if either: (1) There are no
* callbacks on this CPU, (2) this CPU has not yet attempted to enter
-@@ -2001,6 +2005,7 @@ int rcu_needs_cpu(int cpu)
- /* Otherwise, RCU needs the CPU only if it recently tried and failed. */
- return per_cpu(rcu_dyntick_holdoff, cpu) == jiffies;
+@@ -1902,6 +1906,7 @@ int rcu_needs_cpu(int cpu, unsigned long
+ }
+ return 0;
}
+#endif /* #ifndef CONFIG_PREEMPT_RT_FULL */
/*
- * Does the specified flavor of RCU have non-lazy callbacks pending on
+ * Handler for smp_call_function_single(). The only point of this
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rcu-force-preempt-rcu-for-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0183-RCU-Force-PREEMPT_RCU-for-PREEMPT-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0183-RCU-Force-PREEMPT_RCU-for-PREEMPT-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rcu-force-preempt-rcu-for-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 9640a57ed1d6ef1f9b41b08d68aba97add9dca95 Mon Sep 17 00:00:00 2001
+Subject: RCU: Force PREEMPT_RCU for PREEMPT-RT
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:30 -0500
-Subject: [183/256] RCU: Force PREEMPT_RCU for PREEMPT-RT
PREEMPT_RT relies on PREEMPT_RCU - only allow RCU to be configured
interactively in the !PREEMPT_RT case.
@@ -15,11 +14,11 @@
init/Kconfig | 1 -
1 file changed, 1 deletion(-)
-diff --git a/init/Kconfig b/init/Kconfig
-index c06208b..7c0b369 100644
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -746,7 +746,6 @@ config RT_GROUP_SCHED
+Index: linux-stable/init/Kconfig
+===================================================================
+--- linux-stable.orig/init/Kconfig
++++ linux-stable/init/Kconfig
+@@ -806,7 +806,6 @@ config RT_GROUP_SCHED
bool "Group scheduling for SCHED_RR/FIFO"
depends on EXPERIMENTAL
depends on CGROUP_SCHED
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0185-rcu-Merge-RCU-bh-into-RCU-preempt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0185-rcu-Merge-RCU-bh-into-RCU-preempt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From f786c807198155ff8dad9591045035a53aeed4c0 Mon Sep 17 00:00:00 2001
-From: Thomas Gleixner <tglx at linutronix.de>
+Subject: rcu: Merge RCU-bh into RCU-preempt
Date: Wed, 5 Oct 2011 11:59:38 -0700
-Subject: [185/256] rcu: Merge RCU-bh into RCU-preempt
+From: Thomas Gleixner <tglx at linutronix.de>
The Linux kernel has long RCU-bh read-side critical sections that
intolerably increase scheduling latency under mainline's RCU-bh rules,
@@ -23,6 +22,7 @@
Signed-off-by: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/20111005185938.GA20403@linux.vnet.ibm.com
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/rcupdate.h | 25 +++++++++++++++++++++++++
include/linux/rcutree.h | 18 ++++++++++++++++--
@@ -30,11 +30,11 @@
kernel/rcutree.c | 10 ++++++++++
4 files changed, 53 insertions(+), 2 deletions(-)
-diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
-index 23a500f..888d24a 100644
---- a/include/linux/rcupdate.h
-+++ b/include/linux/rcupdate.h
-@@ -101,6 +101,9 @@ extern void call_rcu(struct rcu_head *head,
+Index: linux-stable/include/linux/rcupdate.h
+===================================================================
+--- linux-stable.orig/include/linux/rcupdate.h
++++ linux-stable/include/linux/rcupdate.h
+@@ -101,6 +101,9 @@ extern void call_rcu(struct rcu_head *he
#endif /* #else #ifdef CONFIG_PREEMPT_RCU */
@@ -44,7 +44,7 @@
/**
* call_rcu_bh() - Queue an RCU for invocation after a quicker grace period.
* @head: structure to be used for queueing the RCU updates.
-@@ -121,6 +124,7 @@ extern void call_rcu(struct rcu_head *head,
+@@ -121,6 +124,7 @@ extern void call_rcu(struct rcu_head *he
*/
extern void call_rcu_bh(struct rcu_head *head,
void (*func)(struct rcu_head *head));
@@ -52,7 +52,7 @@
/**
* call_rcu_sched() - Queue an RCU for invocation after sched grace period.
-@@ -190,7 +194,13 @@ static inline int rcu_preempt_depth(void)
+@@ -191,7 +195,13 @@ static inline int rcu_preempt_depth(void
/* Internal to kernel */
extern void rcu_sched_qs(int cpu);
@@ -66,7 +66,7 @@
extern void rcu_check_callbacks(int cpu, int user);
struct notifier_block;
extern void rcu_idle_enter(void);
-@@ -331,7 +341,14 @@ static inline int rcu_read_lock_held(void)
+@@ -328,7 +338,14 @@ static inline int rcu_read_lock_held(voi
* rcu_read_lock_bh_held() is defined out of line to avoid #include-file
* hell.
*/
@@ -81,7 +81,7 @@
/**
* rcu_read_lock_sched_held() - might we be in RCU-sched read-side critical section?
-@@ -780,10 +797,14 @@ static inline void rcu_read_unlock(void)
+@@ -776,10 +793,14 @@ static inline void rcu_read_unlock(void)
static inline void rcu_read_lock_bh(void)
{
local_bh_disable();
@@ -96,7 +96,7 @@
}
/*
-@@ -793,10 +814,14 @@ static inline void rcu_read_lock_bh(void)
+@@ -789,10 +810,14 @@ static inline void rcu_read_lock_bh(void
*/
static inline void rcu_read_unlock_bh(void)
{
@@ -111,23 +111,23 @@
local_bh_enable();
}
-diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h
-index e8ee5dd..5b2d03e 100644
---- a/include/linux/rcutree.h
-+++ b/include/linux/rcutree.h
-@@ -57,7 +57,11 @@ static inline void exit_rcu(void)
-
- #endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */
+Index: linux-stable/include/linux/rcutree.h
+===================================================================
+--- linux-stable.orig/include/linux/rcutree.h
++++ linux-stable/include/linux/rcutree.h
+@@ -45,7 +45,11 @@ static inline void rcu_virt_note_context
+ rcu_note_context_switch(cpu);
+ }
-+#ifndef CONFIG_PREEMPT_RT_FULL
- extern void synchronize_rcu_bh(void);
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define synchronize_rcu_bh synchronize_rcu
+#else
-+# define synchronize_rcu_bh() synchronize_rcu()
+ extern void synchronize_rcu_bh(void);
+#endif
extern void synchronize_sched_expedited(void);
extern void synchronize_rcu_expedited(void);
-@@ -85,19 +89,29 @@ static inline void synchronize_rcu_bh_expedited(void)
+@@ -73,20 +77,30 @@ static inline void synchronize_rcu_bh_ex
}
extern void rcu_barrier(void);
@@ -148,6 +148,9 @@
-extern void rcu_bh_force_quiescent_state(void);
extern void rcu_sched_force_quiescent_state(void);
+ extern void rcu_scheduler_starting(void);
+ extern int rcu_scheduler_active __read_mostly;
+
+#ifndef CONFIG_PREEMPT_RT_FULL
+extern void rcu_bh_force_quiescent_state(void);
+extern long rcu_batches_completed_bh(void);
@@ -156,14 +159,12 @@
+# define rcu_batches_completed_bh rcu_batches_completed
+#endif
+
- /* A context switch is a grace period for RCU-sched and RCU-bh. */
- static inline int rcu_blocking_is_gp(void)
- {
-diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c
-index a86f174..63fc4b3 100644
---- a/kernel/rcupdate.c
-+++ b/kernel/rcupdate.c
-@@ -77,6 +77,7 @@ int debug_lockdep_rcu_enabled(void)
+ #endif /* __LINUX_RCUTREE_H */
+Index: linux-stable/kernel/rcupdate.c
+===================================================================
+--- linux-stable.orig/kernel/rcupdate.c
++++ linux-stable/kernel/rcupdate.c
+@@ -149,6 +149,7 @@ int debug_lockdep_rcu_enabled(void)
}
EXPORT_SYMBOL_GPL(debug_lockdep_rcu_enabled);
@@ -171,7 +172,7 @@
/**
* rcu_read_lock_bh_held() - might we be in RCU-bh read-side critical section?
*
-@@ -103,6 +104,7 @@ int rcu_read_lock_bh_held(void)
+@@ -175,6 +176,7 @@ int rcu_read_lock_bh_held(void)
return in_softirq() || irqs_disabled();
}
EXPORT_SYMBOL_GPL(rcu_read_lock_bh_held);
@@ -179,11 +180,11 @@
#endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
-diff --git a/kernel/rcutree.c b/kernel/rcutree.c
-index d0c5baf..69e959e 100644
---- a/kernel/rcutree.c
-+++ b/kernel/rcutree.c
-@@ -172,6 +172,7 @@ void rcu_sched_qs(int cpu)
+Index: linux-stable/kernel/rcutree.c
+===================================================================
+--- linux-stable.orig/kernel/rcutree.c
++++ linux-stable/kernel/rcutree.c
+@@ -182,6 +182,7 @@ void rcu_sched_qs(int cpu)
rdp->passed_quiesce = 1;
}
@@ -191,7 +192,7 @@
void rcu_bh_qs(int cpu)
{
struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu);
-@@ -182,6 +183,7 @@ void rcu_bh_qs(int cpu)
+@@ -192,6 +193,7 @@ void rcu_bh_qs(int cpu)
trace_rcu_grace_period("rcu_bh", rdp->gpnum, "cpuqs");
rdp->passed_quiesce = 1;
}
@@ -199,7 +200,7 @@
/*
* Note a context switch. This is a quiescent state for RCU-sched,
-@@ -228,6 +230,7 @@ long rcu_batches_completed_sched(void)
+@@ -238,6 +240,7 @@ long rcu_batches_completed_sched(void)
}
EXPORT_SYMBOL_GPL(rcu_batches_completed_sched);
@@ -207,7 +208,7 @@
/*
* Return the number of RCU BH batches processed thus far for debug & stats.
*/
-@@ -245,6 +248,7 @@ void rcu_bh_force_quiescent_state(void)
+@@ -255,6 +258,7 @@ void rcu_bh_force_quiescent_state(void)
force_quiescent_state(&rcu_bh_state, 0);
}
EXPORT_SYMBOL_GPL(rcu_bh_force_quiescent_state);
@@ -215,7 +216,7 @@
/*
* Record the number of times rcutorture tests have been initiated and
-@@ -1884,6 +1888,7 @@ void call_rcu_sched(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
+@@ -1970,6 +1974,7 @@ void call_rcu_sched(struct rcu_head *hea
}
EXPORT_SYMBOL_GPL(call_rcu_sched);
@@ -223,15 +224,15 @@
/*
* Queue an RCU callback for invocation after a quicker grace period.
*/
-@@ -1892,6 +1897,7 @@ void call_rcu_bh(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
+@@ -1978,6 +1983,7 @@ void call_rcu_bh(struct rcu_head *head,
__call_rcu(head, func, &rcu_bh_state, 0);
}
EXPORT_SYMBOL_GPL(call_rcu_bh);
+#endif
- /**
- * synchronize_sched - wait until an rcu-sched grace period has elapsed.
-@@ -1928,6 +1934,7 @@ void synchronize_sched(void)
+ /*
+ * Because a context switch is a grace period for RCU-sched and RCU-bh,
+@@ -2034,6 +2040,7 @@ void synchronize_sched(void)
}
EXPORT_SYMBOL_GPL(synchronize_sched);
@@ -239,7 +240,7 @@
/**
* synchronize_rcu_bh - wait until an rcu_bh grace period has elapsed.
*
-@@ -1948,6 +1955,7 @@ void synchronize_rcu_bh(void)
+@@ -2054,6 +2061,7 @@ void synchronize_rcu_bh(void)
wait_rcu_gp(call_rcu_bh);
}
EXPORT_SYMBOL_GPL(synchronize_rcu_bh);
@@ -247,16 +248,16 @@
static atomic_t sync_sched_expedited_started = ATOMIC_INIT(0);
static atomic_t sync_sched_expedited_done = ATOMIC_INIT(0);
-@@ -2223,6 +2231,7 @@ static void _rcu_barrier(struct rcu_state *rsp,
- mutex_unlock(&rcu_barrier_mutex);
+@@ -2460,6 +2468,7 @@ static void _rcu_barrier(struct rcu_stat
+ destroy_rcu_head_on_stack(&rd.barrier_head);
}
+#ifndef CONFIG_PREEMPT_RT_FULL
/**
* rcu_barrier_bh - Wait until all in-flight call_rcu_bh() callbacks complete.
*/
-@@ -2231,6 +2240,7 @@ void rcu_barrier_bh(void)
- _rcu_barrier(&rcu_bh_state, call_rcu_bh);
+@@ -2468,6 +2477,7 @@ void rcu_barrier_bh(void)
+ _rcu_barrier(&rcu_bh_state);
}
EXPORT_SYMBOL_GPL(rcu_barrier_bh);
+#endif
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rcu-tiny-merge-bh.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0187-rcu-more-fallout.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0187-rcu-more-fallout.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rcu-tiny-merge-bh.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 9edeec52fd841c2807974b7db2b4ef958b4e7dba Mon Sep 17 00:00:00 2001
+Subject: rcu-more-fallout.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 14 Nov 2011 10:57:54 +0100
-Subject: [187/256] rcu-more-fallout.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/rcutiny.c | 2 ++
1 file changed, 2 insertions(+)
-diff --git a/kernel/rcutiny.c b/kernel/rcutiny.c
-index 37a5444..fc581fb 100644
---- a/kernel/rcutiny.c
-+++ b/kernel/rcutiny.c
-@@ -368,6 +368,7 @@ void call_rcu_sched(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
+Index: linux-stable/kernel/rcutiny.c
+===================================================================
+--- linux-stable.orig/kernel/rcutiny.c
++++ linux-stable/kernel/rcutiny.c
+@@ -368,6 +368,7 @@ void call_rcu_sched(struct rcu_head *hea
}
EXPORT_SYMBOL_GPL(call_rcu_sched);
@@ -20,7 +19,7 @@
/*
* Post an RCU bottom-half callback to be invoked after any subsequent
* quiescent state.
-@@ -377,3 +378,4 @@ void call_rcu_bh(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
+@@ -377,3 +378,4 @@ void call_rcu_bh(struct rcu_head *head,
__call_rcu(head, func, &rcu_bh_ctrlblk);
}
EXPORT_SYMBOL_GPL(call_rcu_bh);
Added: dists/trunk/linux/debian/patches/features/all/rt/rcu-tiny-solve-rt-mistery.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/rcu-tiny-solve-rt-mistery.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,44 @@
+Subject: rcu: rcutiny: Prevent RCU stall
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Tue, 16 Oct 2012 18:36:51 +0200
+
+rcu_read_unlock_special() checks in_serving_softirq() and leaves early
+when true. On RT this is obviously wrong as softirq processing context
+can be preempted and therefor such a task can be on the gp_tasks
+list. Leaving early here will leave the task on the list and therefor
+block RCU processing forever.
+
+This cannot happen on mainline because softirq processing context
+cannot be preempted and therefor this can never happen at all.
+
+In fact this check looks quite questionable in general. Neither irq
+context nor softirq processing context in mainline can ever be
+preempted in mainline so the special unlock case should not ever be
+invoked in such context. Now the only explanation might be a
+rcu_read_unlock() being interrupted and therefor leave the rcu nest
+count at 0 before the special unlock bit has been cleared. That looks
+fragile. At least it's missing a big fat comment. Paul ????
+
+See mainline commits: ec433f0c5 and 8762705a for further enlightment.
+
+Reported-by: Kristian Lehmann <krleit00 at hs-esslingen.de>
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+
+---
+ kernel/rcutiny_plugin.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-stable/kernel/rcutiny_plugin.h
+===================================================================
+--- linux-stable.orig/kernel/rcutiny_plugin.h
++++ linux-stable/kernel/rcutiny_plugin.h
+@@ -560,7 +560,7 @@ void rcu_read_unlock_special(struct task
+ rcu_preempt_cpu_qs();
+
+ /* Hardware IRQ handlers cannot block. */
+- if (in_irq() || in_serving_softirq()) {
++ if (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_OFFSET)) {
+ local_irq_restore(flags);
+ return;
+ }
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/re-migrate_disable-race-with-cpu-hotplug-3f.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0140-hotplug-Reread-hotplug_pcp-on-pin_current_cpu-retry.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0140-hotplug-Reread-hotplug_pcp-on-pin_current_cpu-retry.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/re-migrate_disable-race-with-cpu-hotplug-3f.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 73d949d0e1f86dd881ae7dea5f2f27241e2e45ba Mon Sep 17 00:00:00 2001
From: Yong Zhang <yong.zhang0 at gmail.com>
Date: Thu, 28 Jul 2011 11:16:00 +0800
-Subject: [140/256] hotplug: Reread hotplug_pcp on pin_current_cpu() retry
+Subject: hotplug: Reread hotplug_pcp on pin_current_cpu() retry
When retry happens, it's likely that the task has been migrated to
another cpu (except unplug failed), but it still derefernces the
@@ -18,11 +17,11 @@
kernel/cpu.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
-diff --git a/kernel/cpu.c b/kernel/cpu.c
-index da4ed4f..1e80dff 100644
---- a/kernel/cpu.c
-+++ b/kernel/cpu.c
-@@ -76,9 +76,11 @@ static DEFINE_PER_CPU(struct hotplug_pcp, hotplug_pcp);
+Index: linux-stable/kernel/cpu.c
+===================================================================
+--- linux-stable.orig/kernel/cpu.c
++++ linux-stable/kernel/cpu.c
+@@ -81,9 +81,11 @@ static DEFINE_PER_CPU(struct hotplug_pcp
*/
void pin_current_cpu(void)
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0099-ARM-Initialize-ptl-lock-for-vector-page.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0099-ARM-Initialize-ptl-lock-for-vector-page.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 9e6883b3845df25a28bbbba0dac73967166197d0 Mon Sep 17 00:00:00 2001
+Subject: ARM: Initialize ptl->lock for vector page
From: Frank Rowand <frank.rowand at am.sony.com>
Date: Sat, 1 Oct 2011 18:58:13 -0700
-Subject: [099/256] ARM: Initialize ptl->lock for vector page
Without this patch, ARM can not use SPLIT_PTLOCK_CPUS if
PREEMPT_RT_FULL=y because vectors_user_mapping() creates a
@@ -34,11 +33,11 @@
arch/arm/kernel/process.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
-diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
-index 2b7b017..ed2300e 100644
---- a/arch/arm/kernel/process.c
-+++ b/arch/arm/kernel/process.c
-@@ -526,6 +526,31 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
+Index: linux-stable/arch/arm/kernel/process.c
+===================================================================
+--- linux-stable.orig/arch/arm/kernel/process.c
++++ linux-stable/arch/arm/kernel/process.c
+@@ -508,6 +508,31 @@ unsigned long arch_randomize_brk(struct
}
#ifdef CONFIG_MMU
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/relay-fix-timer-madness.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0105-relay-fix-timer-madness.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0105-relay-fix-timer-madness.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/relay-fix-timer-madness.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From f1b9277c8523774819cd00dc1b0f2c401db94a88 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:44:07 -0500
-Subject: [105/256] relay: fix timer madness
+Subject: relay: fix timer madness
remove timer calls (!!!) from deep within the tracing infrastructure.
This was totally bogus code that can cause lockups and worse. Poll
@@ -9,15 +8,16 @@
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/relay.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
-diff --git a/kernel/relay.c b/kernel/relay.c
-index ab56a17..0fb9799 100644
---- a/kernel/relay.c
-+++ b/kernel/relay.c
-@@ -340,6 +340,10 @@ static void wakeup_readers(unsigned long data)
+Index: linux-stable/kernel/relay.c
+===================================================================
+--- linux-stable.orig/kernel/relay.c
++++ linux-stable/kernel/relay.c
+@@ -340,6 +340,10 @@ static void wakeup_readers(unsigned long
{
struct rchan_buf *buf = (struct rchan_buf *)data;
wake_up_interruptible(&buf->read_wait);
@@ -28,7 +28,7 @@
}
/**
-@@ -357,6 +361,7 @@ static void __relay_reset(struct rchan_buf *buf, unsigned int init)
+@@ -357,6 +361,7 @@ static void __relay_reset(struct rchan_b
init_waitqueue_head(&buf->read_wait);
kref_init(&buf->kref);
setup_timer(&buf->timer, wakeup_readers, (unsigned long)buf);
@@ -36,7 +36,7 @@
} else
del_timer_sync(&buf->timer);
-@@ -739,15 +744,6 @@ size_t relay_switch_subbuf(struct rchan_buf *buf, size_t length)
+@@ -739,15 +744,6 @@ size_t relay_switch_subbuf(struct rchan_
else
buf->early_bytes += buf->chan->subbuf_size -
buf->padding[old_subbuf];
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/resource-counters-use-localirq-nort.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0070-core-Do-not-disable-interrupts-on-RT-in-res_counter..patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0070-core-Do-not-disable-interrupts-on-RT-in-res_counter..patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/resource-counters-use-localirq-nort.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From deb750df13d81367349e2878a3a2d445f1b7bb01 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:44:33 -0500
-Subject: [070/256] core: Do not disable interrupts on RT in res_counter.c
+Subject: core: Do not disable interrupts on RT in res_counter.c
Frederic Weisbecker reported this warning:
@@ -42,39 +41,40 @@
Reported-by: Frederic Weisbecker <fweisbec at gmail.com>
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/res_counter.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
-diff --git a/kernel/res_counter.c b/kernel/res_counter.c
-index d508363..402f91a 100644
---- a/kernel/res_counter.c
-+++ b/kernel/res_counter.c
-@@ -43,7 +43,7 @@ int res_counter_charge(struct res_counter *counter, unsigned long val,
- struct res_counter *c, *u;
+Index: linux-stable/kernel/res_counter.c
+===================================================================
+--- linux-stable.orig/kernel/res_counter.c
++++ linux-stable/kernel/res_counter.c
+@@ -49,7 +49,7 @@ static int __res_counter_charge(struct r
+ r = ret = 0;
*limit_fail_at = NULL;
- local_irq_save(flags);
+ local_irq_save_nort(flags);
for (c = counter; c != NULL; c = c->parent) {
spin_lock(&c->lock);
- ret = res_counter_charge_locked(c, val);
-@@ -62,7 +62,7 @@ undo:
- spin_unlock(&u->lock);
+ r = res_counter_charge_locked(c, val, force);
+@@ -69,7 +69,7 @@ static int __res_counter_charge(struct r
+ spin_unlock(&u->lock);
+ }
}
- done:
- local_irq_restore(flags);
+ local_irq_restore_nort(flags);
+
return ret;
}
-
-@@ -104,13 +104,13 @@ void res_counter_uncharge(struct res_counter *counter, unsigned long val)
+@@ -101,13 +101,13 @@ void res_counter_uncharge_until(struct r
unsigned long flags;
struct res_counter *c;
- local_irq_save(flags);
+ local_irq_save_nort(flags);
- for (c = counter; c != NULL; c = c->parent) {
+ for (c = counter; c != top; c = c->parent) {
spin_lock(&c->lock);
res_counter_uncharge_locked(c, val);
spin_unlock(&c->lock);
@@ -83,4 +83,4 @@
+ local_irq_restore_nort(flags);
}
-
+ void res_counter_uncharge(struct res_counter *counter, unsigned long val)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rfc-printk-don-27t-call-printk_tick-in-printk_needs_cpu.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0114-printk-Don-t-call-printk_tick-in-printk_needs_cpu-on.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0114-printk-Don-t-call-printk_tick-in-printk_needs_cpu-on.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rfc-printk-don-27t-call-printk_tick-in-printk_needs_cpu.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From f246e95b5dd41a2ff8fc54d50a83e40cb5c9e9b5 Mon Sep 17 00:00:00 2001
+Subject: printk: Don't call printk_tick in printk_needs_cpu() on RT
From: Yong Zhang <yong.zhang0 at gmail.com>
Date: Sun, 16 Oct 2011 18:56:45 +0800
-Subject: [114/256] printk: Don't call printk_tick in printk_needs_cpu() on RT
printk_tick() can't be called in atomic context when RT is enabled,
otherwise below warning will show:
@@ -31,11 +30,11 @@
kernel/printk.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/kernel/printk.c b/kernel/printk.c
-index 300952e..9a27a94 100644
---- a/kernel/printk.c
-+++ b/kernel/printk.c
-@@ -1298,8 +1298,8 @@ void printk_tick(void)
+Index: linux-stable/kernel/printk.c
+===================================================================
+--- linux-stable.orig/kernel/printk.c
++++ linux-stable/kernel/printk.c
+@@ -2027,8 +2027,8 @@ void printk_tick(void)
int printk_needs_cpu(int cpu)
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0238-sched-rt-Fix-wait_task_interactive-to-test-rt_spin_l.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0238-sched-rt-Fix-wait_task_interactive-to-test-rt_spin_l.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From 61b20fa24de8e05b9156f00953b223ad15076808 Mon Sep 17 00:00:00 2001
+Subject: sched/rt: Fix wait_task_interactive() to test rt_spin_lock state
From: Steven Rostedt <rostedt at goodmis.org>
-Date: Thu, 1 Mar 2012 13:55:33 -0500
-Subject: [238/256] sched/rt: Fix wait_task_interactive() to test rt_spin_lock
- state
+Date: Thu, 01 Mar 2012 13:55:33 -0500
The wait_task_interactive() will have a task sleep waiting for another
task to have a certain state. But it ignores the rt_spin_locks state
@@ -24,11 +22,11 @@
kernel/sched/core.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 599cc25..e8d5a10 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -1174,7 +1174,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -1172,7 +1172,8 @@ unsigned long wait_task_inactive(struct
* is actually now running somewhere else!
*/
while (task_running(rq, p)) {
@@ -38,7 +36,7 @@
return 0;
cpu_relax();
}
-@@ -1189,7 +1190,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)
+@@ -1187,7 +1188,8 @@ unsigned long wait_task_inactive(struct
running = task_running(rq, p);
on_rq = p->on_rq;
ncsw = 0;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-locks.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0180-rt-Add-the-preempt-rt-lock-replacement-APIs.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0180-rt-Add-the-preempt-rt-lock-replacement-APIs.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-locks.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,31 +1,27 @@
-From 275349693ff49e04119066402e460cd59060ab93 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 26 Jul 2009 19:39:56 +0200
-Subject: [180/256] rt: Add the preempt-rt lock replacement APIs
+Subject: rt: Add the preempt-rt lock replacement APIs
Map spinlocks, rwlocks, rw_semaphores and semaphores to the rt_mutex
based locking functions for preempt-rt.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- include/linux/rwlock_rt.h | 123 +++++++++++
- include/linux/spinlock.h | 12 +-
- include/linux/spinlock_api_smp.h | 4 +-
- include/linux/spinlock_rt.h | 156 ++++++++++++++
- kernel/Makefile | 9 +-
- kernel/rt.c | 442 ++++++++++++++++++++++++++++++++++++++
- kernel/spinlock.c | 7 +
- lib/spinlock_debug.c | 5 +
- 8 files changed, 754 insertions(+), 4 deletions(-)
- create mode 100644 include/linux/rwlock_rt.h
- create mode 100644 include/linux/spinlock_rt.h
- create mode 100644 kernel/rt.c
+ include/linux/rwlock_rt.h | 123 ++++++++++
+ include/linux/spinlock.h | 12 -
+ include/linux/spinlock_api_smp.h | 4
+ include/linux/spinlock_rt.h | 158 +++++++++++++
+ kernel/Makefile | 9
+ kernel/rt.c | 442 +++++++++++++++++++++++++++++++++++++++
+ kernel/spinlock.c | 7
+ lib/spinlock_debug.c | 5
+ 8 files changed, 756 insertions(+), 4 deletions(-)
-diff --git a/include/linux/rwlock_rt.h b/include/linux/rwlock_rt.h
-new file mode 100644
-index 0000000..853ee36
+Index: linux-stable/include/linux/rwlock_rt.h
+===================================================================
--- /dev/null
-+++ b/include/linux/rwlock_rt.h
++++ linux-stable/include/linux/rwlock_rt.h
@@ -0,0 +1,123 @@
+#ifndef __LINUX_RWLOCK_RT_H
+#define __LINUX_RWLOCK_RT_H
@@ -150,11 +146,11 @@
+ } while (0)
+
+#endif
-diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h
-index 7d537ce..0c11a7c 100644
---- a/include/linux/spinlock.h
-+++ b/include/linux/spinlock.h
-@@ -254,7 +254,11 @@ static inline void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock)
+Index: linux-stable/include/linux/spinlock.h
+===================================================================
+--- linux-stable.orig/include/linux/spinlock.h
++++ linux-stable/include/linux/spinlock.h
+@@ -254,7 +254,11 @@ static inline void do_raw_spin_unlock(ra
#define raw_spin_can_lock(lock) (!raw_spin_is_locked(lock))
/* Include rwlock functions */
@@ -167,7 +163,7 @@
/*
* Pull the _spin_*()/_read_*()/_write_*() functions/declarations:
-@@ -265,6 +269,10 @@ static inline void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock)
+@@ -265,6 +269,10 @@ static inline void do_raw_spin_unlock(ra
# include <linux/spinlock_api_up.h>
#endif
@@ -178,18 +174,18 @@
/*
* Map the spin_lock functions to the raw variants for PREEMPT_RT=n
*/
-@@ -394,4 +402,6 @@ extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
+@@ -394,4 +402,6 @@ extern int _atomic_dec_and_lock(atomic_t
#define atomic_dec_and_lock(atomic, lock) \
__cond_lock(lock, _atomic_dec_and_lock(atomic, lock))
+#endif /* !PREEMPT_RT_FULL */
+
#endif /* __LINUX_SPINLOCK_H */
-diff --git a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h
-index 51df117..3f68f50 100644
---- a/include/linux/spinlock_api_smp.h
-+++ b/include/linux/spinlock_api_smp.h
-@@ -191,6 +191,8 @@ static inline int __raw_spin_trylock_bh(raw_spinlock_t *lock)
+Index: linux-stable/include/linux/spinlock_api_smp.h
+===================================================================
+--- linux-stable.orig/include/linux/spinlock_api_smp.h
++++ linux-stable/include/linux/spinlock_api_smp.h
+@@ -191,6 +191,8 @@ static inline int __raw_spin_trylock_bh(
return 0;
}
@@ -199,12 +195,11 @@
+#endif
#endif /* __LINUX_SPINLOCK_API_SMP_H */
-diff --git a/include/linux/spinlock_rt.h b/include/linux/spinlock_rt.h
-new file mode 100644
-index 0000000..205ca95
+Index: linux-stable/include/linux/spinlock_rt.h
+===================================================================
--- /dev/null
-+++ b/include/linux/spinlock_rt.h
-@@ -0,0 +1,156 @@
++++ linux-stable/include/linux/spinlock_rt.h
+@@ -0,0 +1,158 @@
+#ifndef __LINUX_SPINLOCK_RT_H
+#define __LINUX_SPINLOCK_RT_H
+
@@ -212,6 +207,8 @@
+#error Do not include directly. Use spinlock.h
+#endif
+
++#include <linux/bug.h>
++
+extern void
+__rt_spin_lock_init(spinlock_t *lock, char *name, struct lock_class_key *key);
+
@@ -361,22 +358,22 @@
+ atomic_dec_and_spin_lock(atomic, lock)
+
+#endif
-diff --git a/kernel/Makefile b/kernel/Makefile
-index cb41b95..f4bf68a 100644
---- a/kernel/Makefile
-+++ b/kernel/Makefile
-@@ -7,8 +7,8 @@ obj-y = fork.o exec_domain.o panic.o printk.o \
+Index: linux-stable/kernel/Makefile
+===================================================================
+--- linux-stable.orig/kernel/Makefile
++++ linux-stable/kernel/Makefile
+@@ -7,8 +7,8 @@ obj-y = fork.o exec_domain.o panic.o
sysctl.o sysctl_binary.o capability.o ptrace.o timer.o user.o \
- signal.o sys.o kmod.o workqueue.o pid.o \
+ signal.o sys.o kmod.o workqueue.o pid.o task_work.o \
rcupdate.o extable.o params.o posix-timers.o \
- kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
- hrtimer.o rwsem.o nsproxy.o srcu.o semaphore.o \
+ kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o \
+ hrtimer.o nsproxy.o srcu.o semaphore.o \
notifier.o ksysfs.o cred.o \
- async.o range.o groups.o
+ async.o range.o groups.o lglock.o
-@@ -29,7 +29,11 @@ obj-$(CONFIG_FREEZER) += freezer.o
+@@ -32,7 +32,11 @@ obj-$(CONFIG_FREEZER) += freezer.o
obj-$(CONFIG_PROFILING) += profile.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-y += time/
@@ -388,19 +385,18 @@
obj-$(CONFIG_LOCKDEP) += lockdep.o
ifeq ($(CONFIG_PROC_FS),y)
obj-$(CONFIG_LOCKDEP) += lockdep_proc.o
-@@ -41,6 +45,7 @@ endif
+@@ -44,6 +48,7 @@ endif
obj-$(CONFIG_RT_MUTEXES) += rtmutex.o
obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o
obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o
+obj-$(CONFIG_PREEMPT_RT_FULL) += rt.o
obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
obj-$(CONFIG_SMP) += smp.o
- ifneq ($(CONFIG_SMP),y)
-diff --git a/kernel/rt.c b/kernel/rt.c
-new file mode 100644
-index 0000000..092d6b3
+ obj-$(CONFIG_SMP) += smpboot.o
+Index: linux-stable/kernel/rt.c
+===================================================================
--- /dev/null
-+++ b/kernel/rt.c
++++ linux-stable/kernel/rt.c
@@ -0,0 +1,442 @@
+/*
+ * kernel/rt.c
@@ -844,11 +840,11 @@
+ return 1;
+}
+EXPORT_SYMBOL(atomic_dec_and_mutex_lock);
-diff --git a/kernel/spinlock.c b/kernel/spinlock.c
-index 5cdd806..da9775b 100644
---- a/kernel/spinlock.c
-+++ b/kernel/spinlock.c
-@@ -110,8 +110,11 @@ void __lockfunc __raw_##op##_lock_bh(locktype##_t *lock) \
+Index: linux-stable/kernel/spinlock.c
+===================================================================
+--- linux-stable.orig/kernel/spinlock.c
++++ linux-stable/kernel/spinlock.c
+@@ -110,8 +110,11 @@ void __lockfunc __raw_##op##_lock_bh(loc
* __[spin|read|write]_lock_bh()
*/
BUILD_LOCK_OPS(spin, raw_spinlock);
@@ -860,7 +856,7 @@
#endif
-@@ -195,6 +198,8 @@ void __lockfunc _raw_spin_unlock_bh(raw_spinlock_t *lock)
+@@ -195,6 +198,8 @@ void __lockfunc _raw_spin_unlock_bh(raw_
EXPORT_SYMBOL(_raw_spin_unlock_bh);
#endif
@@ -869,7 +865,7 @@
#ifndef CONFIG_INLINE_READ_TRYLOCK
int __lockfunc _raw_read_trylock(rwlock_t *lock)
{
-@@ -339,6 +344,8 @@ void __lockfunc _raw_write_unlock_bh(rwlock_t *lock)
+@@ -339,6 +344,8 @@ void __lockfunc _raw_write_unlock_bh(rwl
EXPORT_SYMBOL(_raw_write_unlock_bh);
#endif
@@ -878,11 +874,11 @@
#ifdef CONFIG_DEBUG_LOCK_ALLOC
void __lockfunc _raw_spin_lock_nested(raw_spinlock_t *lock, int subclass)
-diff --git a/lib/spinlock_debug.c b/lib/spinlock_debug.c
-index 525d160..5f5eae5 100644
---- a/lib/spinlock_debug.c
-+++ b/lib/spinlock_debug.c
-@@ -31,6 +31,7 @@ void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
+Index: linux-stable/lib/spinlock_debug.c
+===================================================================
+--- linux-stable.orig/lib/spinlock_debug.c
++++ linux-stable/lib/spinlock_debug.c
+@@ -31,6 +31,7 @@ void __raw_spin_lock_init(raw_spinlock_t
EXPORT_SYMBOL(__raw_spin_lock_init);
@@ -890,7 +886,7 @@
void __rwlock_init(rwlock_t *lock, const char *name,
struct lock_class_key *key)
{
-@@ -48,6 +49,7 @@ void __rwlock_init(rwlock_t *lock, const char *name,
+@@ -48,6 +49,7 @@ void __rwlock_init(rwlock_t *lock, const
}
EXPORT_SYMBOL(__rwlock_init);
@@ -898,7 +894,7 @@
static void spin_dump(raw_spinlock_t *lock, const char *msg)
{
-@@ -155,6 +157,7 @@ void do_raw_spin_unlock(raw_spinlock_t *lock)
+@@ -155,6 +157,7 @@ void do_raw_spin_unlock(raw_spinlock_t *
arch_spin_unlock(&lock->raw_lock);
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-spinlock-to-headers.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0177-rt-add-rt-spinlocks.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0177-rt-add-rt-spinlocks.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-spinlock-to-headers.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,18 @@
-From cf7aac26c5a28cf20b70fd431be88839c0058778 Mon Sep 17 00:00:00 2001
+Subject: rt-add-rt-spinlocks.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 29 Jun 2011 19:43:35 +0200
-Subject: [177/256] rt-add-rt-spinlocks.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/rwlock_types_rt.h | 33 +++++++++++++++++++++++++
- include/linux/spinlock_types.h | 11 ++++++---
- include/linux/spinlock_types_rt.h | 49 +++++++++++++++++++++++++++++++++++++
+ include/linux/spinlock_types.h | 11 ++++++--
+ include/linux/spinlock_types_rt.h | 49 ++++++++++++++++++++++++++++++++++++++
3 files changed, 90 insertions(+), 3 deletions(-)
- create mode 100644 include/linux/rwlock_types_rt.h
- create mode 100644 include/linux/spinlock_types_rt.h
-diff --git a/include/linux/rwlock_types_rt.h b/include/linux/rwlock_types_rt.h
-new file mode 100644
-index 0000000..b138321
+Index: linux-stable/include/linux/rwlock_types_rt.h
+===================================================================
--- /dev/null
-+++ b/include/linux/rwlock_types_rt.h
++++ linux-stable/include/linux/rwlock_types_rt.h
@@ -0,0 +1,33 @@
+#ifndef __LINUX_RWLOCK_TYPES_RT_H
+#define __LINUX_RWLOCK_TYPES_RT_H
@@ -51,10 +47,10 @@
+ rwlock_t name __cacheline_aligned_in_smp = __RW_LOCK_UNLOCKED(name)
+
+#endif
-diff --git a/include/linux/spinlock_types.h b/include/linux/spinlock_types.h
-index 5c8664d..10bac71 100644
---- a/include/linux/spinlock_types.h
-+++ b/include/linux/spinlock_types.h
+Index: linux-stable/include/linux/spinlock_types.h
+===================================================================
+--- linux-stable.orig/include/linux/spinlock_types.h
++++ linux-stable/include/linux/spinlock_types.h
@@ -11,8 +11,13 @@
#include <linux/spinlock_types_raw.h>
@@ -72,11 +68,10 @@
+#endif
#endif /* __LINUX_SPINLOCK_TYPES_H */
-diff --git a/include/linux/spinlock_types_rt.h b/include/linux/spinlock_types_rt.h
-new file mode 100644
-index 0000000..1fe8fc0
+Index: linux-stable/include/linux/spinlock_types_rt.h
+===================================================================
--- /dev/null
-+++ b/include/linux/spinlock_types_rt.h
++++ linux-stable/include/linux/spinlock_types_rt.h
@@ -0,0 +1,49 @@
+#ifndef __LINUX_SPINLOCK_TYPES_RT_H
+#define __LINUX_SPINLOCK_TYPES_RT_H
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-to-mutex-headers.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0178-rt-add-rt-to-mutex-headers.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0178-rt-add-rt-to-mutex-headers.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-add-rt-to-mutex-headers.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,17 @@
-From 9b84e782f207e5da7a3fa04cc65d8e4ac17026e9 Mon Sep 17 00:00:00 2001
+Subject: rt-add-rt-to-mutex-headers.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 29 Jun 2011 20:56:22 +0200
-Subject: [178/256] rt-add-rt-to-mutex-headers.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/mutex.h | 21 ++++++++----
- include/linux/mutex_rt.h | 84 ++++++++++++++++++++++++++++++++++++++++++++++
+ include/linux/mutex.h | 21 +++++++----
+ include/linux/mutex_rt.h | 84 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 98 insertions(+), 7 deletions(-)
- create mode 100644 include/linux/mutex_rt.h
-diff --git a/include/linux/mutex.h b/include/linux/mutex.h
-index 9121595..bdf1da2 100644
---- a/include/linux/mutex.h
-+++ b/include/linux/mutex.h
+Index: linux-stable/include/linux/mutex.h
+===================================================================
+--- linux-stable.orig/include/linux/mutex.h
++++ linux-stable/include/linux/mutex.h
@@ -17,6 +17,17 @@
#include <linux/atomic.h>
@@ -46,7 +44,7 @@
#define __MUTEX_INITIALIZER(lockname) \
{ .count = ATOMIC_INIT(1) \
, .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock) \
-@@ -167,6 +171,9 @@ extern int __must_check mutex_lock_killable(struct mutex *lock);
+@@ -167,6 +171,9 @@ extern int __must_check mutex_lock_killa
*/
extern int mutex_trylock(struct mutex *lock);
extern void mutex_unlock(struct mutex *lock);
@@ -56,11 +54,10 @@
extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock);
#ifndef CONFIG_HAVE_ARCH_MUTEX_CPU_RELAX
-diff --git a/include/linux/mutex_rt.h b/include/linux/mutex_rt.h
-new file mode 100644
-index 0000000..c38a44b
+Index: linux-stable/include/linux/mutex_rt.h
+===================================================================
--- /dev/null
-+++ b/include/linux/mutex_rt.h
++++ linux-stable/include/linux/mutex_rt.h
@@ -0,0 +1,84 @@
+#ifndef __LINUX_MUTEX_RT_H
+#define __LINUX_MUTEX_RT_H
Added: dists/trunk/linux/debian/patches/features/all/rt/rt-disable-rt-group-sched.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-disable-rt-group-sched.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,29 @@
+From f9e7eb3419db82245b3396074c137b687b42df06 Mon Sep 17 00:00:00 2001
+From: Carsten Emde <C.Emde at osadl.org>
+Date: Wed, 11 Jul 2012 22:05:18 +0000
+Subject: Disable RT_GROUP_SCHED in PREEMPT_RT_FULL
+
+Strange CPU stalls have been observed in RT when RT_GROUP_SCHED
+was configured.
+
+Disable it for now.
+
+Signed-off-by: Carsten Emde <C.Emde at osadl.org>
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
+---
+ init/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: linux-stable/init/Kconfig
+===================================================================
+--- linux-stable.orig/init/Kconfig
++++ linux-stable/init/Kconfig
+@@ -806,6 +806,7 @@ config RT_GROUP_SCHED
+ bool "Group scheduling for SCHED_RR/FIFO"
+ depends on EXPERIMENTAL
+ depends on CGROUP_SCHED
++ depends on !PREEMPT_RT_FULL
+ default n
+ help
+ This feature lets you explicitly allocate real CPU bandwidth
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-introduce-cpu-chill.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0244-rt-Introduce-cpu_chill.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0244-rt-Introduce-cpu_chill.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-introduce-cpu-chill.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 00fa0b57d2e9dcfc2482e72e85111776fac22e53 Mon Sep 17 00:00:00 2001
+Subject: rt: Introduce cpu_chill()
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Wed, 7 Mar 2012 20:51:03 +0100
-Subject: [244/256] rt: Introduce cpu_chill()
+Date: Wed, 07 Mar 2012 20:51:03 +0100
Retry loops on RT might loop forever when the modifying side was
preempted. Add cpu_chill() to replace cpu_relax(). cpu_chill()
@@ -14,11 +13,11 @@
include/linux/delay.h | 6 ++++++
1 file changed, 6 insertions(+)
-diff --git a/include/linux/delay.h b/include/linux/delay.h
-index a6ecb34..e23a7c0 100644
---- a/include/linux/delay.h
-+++ b/include/linux/delay.h
-@@ -52,4 +52,10 @@ static inline void ssleep(unsigned int seconds)
+Index: linux-stable/include/linux/delay.h
+===================================================================
+--- linux-stable.orig/include/linux/delay.h
++++ linux-stable/include/linux/delay.h
+@@ -52,4 +52,10 @@ static inline void ssleep(unsigned int s
msleep(seconds * 1000);
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-local-irq-lock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0088-rt-local-irq-lock.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0088-rt-local-irq-lock.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-local-irq-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,16 @@
-From 892c3a442dd0abcd683c165f7b2fe3a1b0918bc4 Mon Sep 17 00:00:00 2001
+Subject: rt-local-irq-lock.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 20 Jun 2011 09:03:47 +0200
-Subject: [088/256] rt-local-irq-lock.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/locallock.h | 230 +++++++++++++++++++++++++++++++++++++++++++++
+ include/linux/locallock.h | 230 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 230 insertions(+)
- create mode 100644 include/linux/locallock.h
-diff --git a/include/linux/locallock.h b/include/linux/locallock.h
-new file mode 100644
-index 0000000..8fbc393
+Index: linux-stable/include/linux/locallock.h
+===================================================================
--- /dev/null
-+++ b/include/linux/locallock.h
++++ linux-stable/include/linux/locallock.h
@@ -0,0 +1,230 @@
+#ifndef _LINUX_LOCALLOCK_H
+#define _LINUX_LOCALLOCK_H
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-mutex-add-sleeping-spinlocks-support.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0174-rt-mutex-add-sleeping-spinlocks-support.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0174-rt-mutex-add-sleeping-spinlocks-support.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-mutex-add-sleeping-spinlocks-support.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,20 +1,19 @@
-From 324904375b11bf2a728446415012297ca09c6022 Mon Sep 17 00:00:00 2001
+Subject: rt-mutex-add-sleeping-spinlocks-support.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 10 Jun 2011 11:21:25 +0200
-Subject: [174/256] rt-mutex-add-sleeping-spinlocks-support.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/rtmutex.h | 35 ++++-
- kernel/futex.c | 3 +-
- kernel/rtmutex.c | 384 ++++++++++++++++++++++++++++++++++++++++++++---
- kernel/rtmutex_common.h | 9 ++
+ include/linux/rtmutex.h | 35 +++-
+ kernel/futex.c | 3
+ kernel/rtmutex.c | 384 +++++++++++++++++++++++++++++++++++++++++++++---
+ kernel/rtmutex_common.h | 9 +
4 files changed, 404 insertions(+), 27 deletions(-)
-diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h
-index 3561eb2..928d93e 100644
---- a/include/linux/rtmutex.h
-+++ b/include/linux/rtmutex.h
+Index: linux-stable/include/linux/rtmutex.h
+===================================================================
+--- linux-stable.orig/include/linux/rtmutex.h
++++ linux-stable/include/linux/rtmutex.h
@@ -29,9 +29,10 @@ struct rt_mutex {
raw_spinlock_t wait_lock;
struct plist_head wait_list;
@@ -73,11 +72,11 @@
#define DEFINE_RT_MUTEX(mutexname) \
struct rt_mutex mutexname = __RT_MUTEX_INITIALIZER(mutexname)
-diff --git a/kernel/futex.c b/kernel/futex.c
-index 9decb1c..3ee96ed 100644
---- a/kernel/futex.c
-+++ b/kernel/futex.c
-@@ -2299,8 +2299,7 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,
+Index: linux-stable/kernel/futex.c
+===================================================================
+--- linux-stable.orig/kernel/futex.c
++++ linux-stable/kernel/futex.c
+@@ -2302,8 +2302,7 @@ static int futex_wait_requeue_pi(u32 __u
* The waiter is allocated on our stack, manipulated by the requeue
* code while we sleep on uaddr.
*/
@@ -87,10 +86,10 @@
ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, VERIFY_WRITE);
if (unlikely(ret != 0))
-diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
-index 7a96797..f9baaae 100644
---- a/kernel/rtmutex.c
-+++ b/kernel/rtmutex.c
+Index: linux-stable/kernel/rtmutex.c
+===================================================================
+--- linux-stable.orig/kernel/rtmutex.c
++++ linux-stable/kernel/rtmutex.c
@@ -8,6 +8,12 @@
* Copyright (C) 2005 Kihon Technologies Inc., Steven Rostedt
* Copyright (C) 2006 Esben Nielsen
@@ -104,7 +103,7 @@
* See Documentation/rt-mutex-design.txt for details.
*/
#include <linux/spinlock.h>
-@@ -96,6 +102,12 @@ static inline void mark_rt_mutex_waiters(struct rt_mutex *lock)
+@@ -96,6 +102,12 @@ static inline void mark_rt_mutex_waiters
}
#endif
@@ -117,7 +116,7 @@
/*
* Calculate task priority from the waiter list priority
*
-@@ -142,6 +154,14 @@ static void rt_mutex_adjust_prio(struct task_struct *task)
+@@ -142,6 +154,14 @@ static void rt_mutex_adjust_prio(struct
raw_spin_unlock_irqrestore(&task->pi_lock, flags);
}
@@ -132,7 +131,7 @@
/*
* Max number of times we'll walk the boosting chain:
*/
-@@ -253,13 +273,15 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task,
+@@ -253,13 +273,15 @@ static int rt_mutex_adjust_prio_chain(st
/* Release the task */
raw_spin_unlock_irqrestore(&task->pi_lock, flags);
if (!rt_mutex_owner(lock)) {
@@ -151,7 +150,7 @@
raw_spin_unlock(&lock->wait_lock);
goto out_put_task;
}
-@@ -304,6 +326,25 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task,
+@@ -304,6 +326,25 @@ static int rt_mutex_adjust_prio_chain(st
return ret;
}
@@ -177,7 +176,7 @@
/*
* Try to take an rt-mutex
*
-@@ -313,8 +354,9 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task,
+@@ -313,8 +354,9 @@ static int rt_mutex_adjust_prio_chain(st
* @task: the task which wants to acquire the lock
* @waiter: the waiter that is queued to the lock's wait list. (could be NULL)
*/
@@ -189,7 +188,7 @@
{
/*
* We have to be careful here if the atomic speedups are
-@@ -347,12 +389,14 @@ static int try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task,
+@@ -347,12 +389,14 @@ static int try_to_take_rt_mutex(struct r
* 3) it is top waiter
*/
if (rt_mutex_has_waiters(lock)) {
@@ -208,7 +207,7 @@
if (waiter || rt_mutex_has_waiters(lock)) {
unsigned long flags;
struct rt_mutex_waiter *top;
-@@ -377,7 +421,6 @@ static int try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task,
+@@ -377,7 +421,6 @@ static int try_to_take_rt_mutex(struct r
raw_spin_unlock_irqrestore(&task->pi_lock, flags);
}
@@ -216,7 +215,7 @@
debug_rt_mutex_lock(lock);
rt_mutex_set_owner(lock, task);
-@@ -387,6 +430,13 @@ static int try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task,
+@@ -387,6 +430,13 @@ static int try_to_take_rt_mutex(struct r
return 1;
}
@@ -230,7 +229,7 @@
/*
* Task blocks on lock.
*
-@@ -501,7 +551,7 @@ static void wakeup_next_waiter(struct rt_mutex *lock)
+@@ -501,7 +551,7 @@ static void wakeup_next_waiter(struct rt
raw_spin_unlock_irqrestore(¤t->pi_lock, flags);
@@ -239,7 +238,7 @@
}
/*
-@@ -580,18 +630,315 @@ void rt_mutex_adjust_pi(struct task_struct *task)
+@@ -580,18 +630,315 @@ void rt_mutex_adjust_pi(struct task_stru
return;
}
@@ -558,7 +557,7 @@
* @timeout: the pre-initialized and started timer, or NULL for none
* @waiter: the pre-initialized rt_mutex_waiter
*
-@@ -647,9 +994,10 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state,
+@@ -647,9 +994,10 @@ rt_mutex_slowlock(struct rt_mutex *lock,
struct rt_mutex_waiter waiter;
int ret = 0;
@@ -570,7 +569,7 @@
/* Try to acquire the lock again: */
if (try_to_take_rt_mutex(lock, current, NULL)) {
-@@ -702,6 +1050,7 @@ rt_mutex_slowtrylock(struct rt_mutex *lock)
+@@ -702,6 +1050,7 @@ rt_mutex_slowtrylock(struct rt_mutex *lo
int ret = 0;
raw_spin_lock(&lock->wait_lock);
@@ -601,10 +600,10 @@
debug_rt_mutex_proxy_lock(lock, proxy_owner);
rt_mutex_set_owner(lock, proxy_owner);
rt_mutex_deadlock_account_lock(lock, proxy_owner);
-diff --git a/kernel/rtmutex_common.h b/kernel/rtmutex_common.h
-index 47290ec..6ec3dc1 100644
---- a/kernel/rtmutex_common.h
-+++ b/kernel/rtmutex_common.h
+Index: linux-stable/kernel/rtmutex_common.h
+===================================================================
+--- linux-stable.orig/kernel/rtmutex_common.h
++++ linux-stable/kernel/rtmutex_common.h
@@ -49,6 +49,7 @@ struct rt_mutex_waiter {
struct plist_node pi_list_entry;
struct task_struct *task;
@@ -613,7 +612,7 @@
#ifdef CONFIG_DEBUG_RT_MUTEXES
unsigned long ip;
struct pid *deadlock_task_pid;
-@@ -126,4 +127,12 @@ extern int rt_mutex_finish_proxy_lock(struct rt_mutex *lock,
+@@ -126,4 +127,12 @@ extern int rt_mutex_finish_proxy_lock(st
# include "rtmutex.h"
#endif
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-preempt-base-config.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0060-rt-preempt-base-config.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0060-rt-preempt-base-config.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-preempt-base-config.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From affafa484e6797dab272f3bc2d8b4f68da70e050 Mon Sep 17 00:00:00 2001
+Subject: rt-preempt-base-config.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 17 Jun 2011 12:39:57 +0200
-Subject: [060/256] rt-preempt-base-config.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/Kconfig.preempt | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
-diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
-index 3f9c974..885efbd 100644
---- a/kernel/Kconfig.preempt
-+++ b/kernel/Kconfig.preempt
+Index: linux-stable/kernel/Kconfig.preempt
+===================================================================
+--- linux-stable.orig/kernel/Kconfig.preempt
++++ linux-stable/kernel/Kconfig.preempt
@@ -1,3 +1,10 @@
+config PREEMPT
+ bool
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-rcutree-warn-fix.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0190-rt-rcutree-Move-misplaced-prototype.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0190-rt-rcutree-Move-misplaced-prototype.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-rcutree-warn-fix.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,10 +1,6 @@
-From 2b9c6eb39777cbe4d3b9cfbd293fc683c5e10da6 Mon Sep 17 00:00:00 2001
+Subject: rt/rcutree: Move misplaced prototype
From: Ingo Molnar <mingo at elte.hu>
-Date: Wed, 14 Dec 2011 12:51:28 +0100
-Subject: [190/256] rt/rcutree: Move misplaced prototype
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
+Date: Wed Dec 14 12:51:28 CET 2011
Fix this warning on x86 defconfig:
@@ -16,15 +12,16 @@
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
+---
kernel/rcutree.c | 2 ++
kernel/rcutree.h | 1 -
2 files changed, 2 insertions(+), 1 deletion(-)
-diff --git a/kernel/rcutree.c b/kernel/rcutree.c
-index a9ca0e0..0c3f4a9 100644
---- a/kernel/rcutree.c
-+++ b/kernel/rcutree.c
-@@ -173,6 +173,8 @@ void rcu_sched_qs(int cpu)
+Index: linux-stable/kernel/rcutree.c
+===================================================================
+--- linux-stable.orig/kernel/rcutree.c
++++ linux-stable/kernel/rcutree.c
+@@ -183,6 +183,8 @@ void rcu_sched_qs(int cpu)
}
#ifdef CONFIG_PREEMPT_RT_FULL
@@ -33,11 +30,11 @@
void rcu_bh_qs(int cpu)
{
rcu_preempt_qs(cpu);
-diff --git a/kernel/rcutree.h b/kernel/rcutree.h
-index 6ee6525..cdd1be0 100644
---- a/kernel/rcutree.h
-+++ b/kernel/rcutree.h
-@@ -423,7 +423,6 @@ DECLARE_PER_CPU(char, rcu_cpu_has_work);
+Index: linux-stable/kernel/rcutree.h
+===================================================================
+--- linux-stable.orig/kernel/rcutree.h
++++ linux-stable/kernel/rcutree.h
+@@ -463,7 +463,6 @@ DECLARE_PER_CPU(char, rcu_cpu_has_work);
/* Forward declarations for rcutree_plugin.h */
static void rcu_bootup_announce(void);
long rcu_batches_completed(void);
Added: dists/trunk/linux/debian/patches/features/all/rt/rt-rw-lockdep-annotations.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-rw-lockdep-annotations.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,121 @@
+Subject: rt: rwsem/rwlock: lockdep annotations
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Fri, 28 Sep 2012 10:49:42 +0100
+
+rwlocks and rwsems on RT do not allow multiple readers. Annotate the
+lockdep acquire functions accordingly.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+---
+ kernel/rt.c | 46 +++++++++++++++++++++++++---------------------
+ 1 file changed, 25 insertions(+), 21 deletions(-)
+
+Index: linux-stable/kernel/rt.c
+===================================================================
+--- linux-stable.orig/kernel/rt.c
++++ linux-stable/kernel/rt.c
+@@ -216,15 +216,17 @@ int __lockfunc rt_read_trylock(rwlock_t
+ * write locked.
+ */
+ migrate_disable();
+- if (rt_mutex_owner(lock) != current)
++ if (rt_mutex_owner(lock) != current) {
+ ret = rt_mutex_trylock(lock);
+- else if (!rwlock->read_depth)
++ if (ret)
++ rwlock_acquire(&rwlock->dep_map, 0, 1, _RET_IP_);
++ } else if (!rwlock->read_depth) {
+ ret = 0;
++ }
+
+- if (ret) {
++ if (ret)
+ rwlock->read_depth++;
+- rwlock_acquire_read(&rwlock->dep_map, 0, 1, _RET_IP_);
+- } else
++ else
+ migrate_enable();
+
+ return ret;
+@@ -242,13 +244,13 @@ void __lockfunc rt_read_lock(rwlock_t *r
+ {
+ struct rt_mutex *lock = &rwlock->lock;
+
+- rwlock_acquire_read(&rwlock->dep_map, 0, 0, _RET_IP_);
+-
+ /*
+ * recursive read locks succeed when current owns the lock
+ */
+- if (rt_mutex_owner(lock) != current)
++ if (rt_mutex_owner(lock) != current) {
++ rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_);
+ __rt_spin_lock(lock);
++ }
+ rwlock->read_depth++;
+ }
+
+@@ -264,11 +266,11 @@ EXPORT_SYMBOL(rt_write_unlock);
+
+ void __lockfunc rt_read_unlock(rwlock_t *rwlock)
+ {
+- rwlock_release(&rwlock->dep_map, 1, _RET_IP_);
+-
+ /* Release the lock only when read_depth is down to 0 */
+- if (--rwlock->read_depth == 0)
++ if (--rwlock->read_depth == 0) {
++ rwlock_release(&rwlock->dep_map, 1, _RET_IP_);
+ __rt_spin_unlock(&rwlock->lock);
++ }
+ }
+ EXPORT_SYMBOL(rt_read_unlock);
+
+@@ -315,9 +317,10 @@ EXPORT_SYMBOL(rt_up_write);
+
+ void rt_up_read(struct rw_semaphore *rwsem)
+ {
+- rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
+- if (--rwsem->read_depth == 0)
++ if (--rwsem->read_depth == 0) {
++ rwsem_release(&rwsem->dep_map, 1, _RET_IP_);
+ rt_mutex_unlock(&rwsem->lock);
++ }
+ }
+ EXPORT_SYMBOL(rt_up_read);
+
+@@ -366,15 +369,16 @@ int rt_down_read_trylock(struct rw_sema
+ * but not when read_depth == 0 which means that the rwsem is
+ * write locked.
+ */
+- if (rt_mutex_owner(lock) != current)
++ if (rt_mutex_owner(lock) != current) {
+ ret = rt_mutex_trylock(&rwsem->lock);
+- else if (!rwsem->read_depth)
++ if (ret)
++ rwsem_acquire(&rwsem->dep_map, 0, 1, _RET_IP_);
++ } else if (!rwsem->read_depth) {
+ ret = 0;
++ }
+
+- if (ret) {
++ if (ret)
+ rwsem->read_depth++;
+- rwsem_acquire(&rwsem->dep_map, 0, 1, _RET_IP_);
+- }
+ return ret;
+ }
+ EXPORT_SYMBOL(rt_down_read_trylock);
+@@ -383,10 +387,10 @@ static void __rt_down_read(struct rw_sem
+ {
+ struct rt_mutex *lock = &rwsem->lock;
+
+- rwsem_acquire_read(&rwsem->dep_map, subclass, 0, _RET_IP_);
+-
+- if (rt_mutex_owner(lock) != current)
++ if (rt_mutex_owner(lock) != current) {
++ rwsem_acquire(&rwsem->dep_map, subclass, 0, _RET_IP_);
+ rt_mutex_lock(&rwsem->lock);
++ }
+ rwsem->read_depth++;
+ }
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-sched-do-not-compare-cpu-masks-in-scheduler.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0152-sched-Do-not-compare-cpu-masks-in-scheduler.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0152-sched-Do-not-compare-cpu-masks-in-scheduler.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-sched-do-not-compare-cpu-masks-in-scheduler.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,34 +1,34 @@
-From 013916cf88baff0309f2dd8b7cbc80a01177a28b Mon Sep 17 00:00:00 2001
-From: Peter Zijlstra <a.p.zijlstra at chello.nl>
+Subject: sched: Do not compare cpu masks in scheduler
Date: Tue, 27 Sep 2011 08:40:24 -0400
-Subject: [152/256] sched: Do not compare cpu masks in scheduler
+From: Peter Zijlstra <a.p.zijlstra at chello.nl>
Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
Cc: Peter Zijlstra <peterz at infradead.org>
Cc: Clark Williams <williams at redhat.com>
Link: http://lkml.kernel.org/r/20110927124423.128129033@goodmis.org
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/sched/core.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 388c4ab..44b5b11 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -3164,16 +3164,12 @@ static inline void update_migrate_disable(struct task_struct *p)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -3398,16 +3398,12 @@ static inline void update_migrate_disabl
*/
mask = tsk_cpus_allowed(p);
- WARN_ON(!cpumask_test_cpu(smp_processor_id(), mask));
+ if (p->sched_class->set_cpus_allowed)
+ p->sched_class->set_cpus_allowed(p, mask);
-+ p->rt.nr_cpus_allowed = cpumask_weight(mask);
++ p->nr_cpus_allowed = cpumask_weight(mask);
- if (!cpumask_equal(&p->cpus_allowed, mask)) {
- if (p->sched_class->set_cpus_allowed)
- p->sched_class->set_cpus_allowed(p, mask);
-- p->rt.nr_cpus_allowed = cpumask_weight(mask);
+- p->nr_cpus_allowed = cpumask_weight(mask);
-
- /* Let migrate_enable know to fix things back up */
- p->migrate_disable |= MIGRATE_DISABLE_SET_AFFIN;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-sched-have-migrate_disable-ignore-bounded-threads.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0153-sched-Have-migrate_disable-ignore-bounded-threads.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0153-sched-Have-migrate_disable-ignore-bounded-threads.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-sched-have-migrate_disable-ignore-bounded-threads.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,22 @@
-From fdabe6279466f19b4a00a28d07003d12dbf18e6a Mon Sep 17 00:00:00 2001
-From: Peter Zijlstra <a.p.zijlstra at chello.nl>
+Subject: sched: Have migrate_disable ignore bounded threads
Date: Tue, 27 Sep 2011 08:40:25 -0400
-Subject: [153/256] sched: Have migrate_disable ignore bounded threads
+From: Peter Zijlstra <a.p.zijlstra at chello.nl>
Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
Cc: Peter Zijlstra <peterz at infradead.org>
Cc: Clark Williams <williams at redhat.com>
Link: http://lkml.kernel.org/r/20110927124423.567944215@goodmis.org
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/sched/core.c | 23 +++++++++--------------
1 file changed, 9 insertions(+), 14 deletions(-)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 44b5b11..8afb5e9 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -3176,7 +3176,7 @@ void migrate_disable(void)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -3410,7 +3410,7 @@ void migrate_disable(void)
{
struct task_struct *p = current;
@@ -25,7 +25,7 @@
#ifdef CONFIG_SCHED_DEBUG
p->migrate_disable_atomic++;
#endif
-@@ -3207,7 +3207,7 @@ void migrate_enable(void)
+@@ -3441,7 +3441,7 @@ void migrate_enable(void)
unsigned long flags;
struct rq *rq;
@@ -34,7 +34,7 @@
#ifdef CONFIG_SCHED_DEBUG
p->migrate_disable_atomic--;
#endif
-@@ -3228,26 +3228,21 @@ void migrate_enable(void)
+@@ -3462,26 +3462,21 @@ void migrate_enable(void)
if (unlikely(migrate_disabled_updated(p))) {
/*
@@ -59,12 +59,12 @@
- mask = tsk_cpus_allowed(p);
- if (p->sched_class->set_cpus_allowed)
- p->sched_class->set_cpus_allowed(p, mask);
-- p->rt.nr_cpus_allowed = cpumask_weight(mask);
+- p->nr_cpus_allowed = cpumask_weight(mask);
- }
+ mask = tsk_cpus_allowed(p);
+ if (p->sched_class->set_cpus_allowed)
+ p->sched_class->set_cpus_allowed(p, mask);
-+ p->rt.nr_cpus_allowed = cpumask_weight(mask);
++ p->nr_cpus_allowed = cpumask_weight(mask);
raw_spin_unlock_irqrestore(&rq->lock, flags);
} else
p->migrate_disable = 0;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-sched-postpone-actual-migration-disalbe-to-schedule.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0151-sched-Postpone-actual-migration-disalbe-to-schedule.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0151-sched-Postpone-actual-migration-disalbe-to-schedule.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-sched-postpone-actual-migration-disalbe-to-schedule.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From bcc549901e49108b06e373d3cdf26fecf43b2706 Mon Sep 17 00:00:00 2001
+Subject: sched: Postpone actual migration disalbe to schedule
From: Steven Rostedt <rostedt at goodmis.org>
Date: Tue, 27 Sep 2011 08:40:23 -0400
-Subject: [151/256] sched: Postpone actual migration disalbe to schedule
The migrate_disable() can cause a bit of a overhead to the RT kernel,
as changing the affinity is expensive to do at every lock encountered.
@@ -18,15 +17,16 @@
Cc: Clark Williams <williams at redhat.com>
Link: http://lkml.kernel.org/r/20110927124422.779693167@goodmis.org
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- kernel/sched/core.c | 251 +++++++++++++++++++++++++++------------------------
+ kernel/sched/core.c | 251 +++++++++++++++++++++++++++-------------------------
1 file changed, 132 insertions(+), 119 deletions(-)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index d2cc5a0..388c4ab 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -3136,6 +3136,135 @@ static inline void schedule_debug(struct task_struct *prev)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -3370,6 +3370,135 @@ static inline void schedule_debug(struct
schedstat_inc(this_rq(), sched_count);
}
@@ -63,7 +63,7 @@
+ if (!cpumask_equal(&p->cpus_allowed, mask)) {
+ if (p->sched_class->set_cpus_allowed)
+ p->sched_class->set_cpus_allowed(p, mask);
-+ p->rt.nr_cpus_allowed = cpumask_weight(mask);
++ p->nr_cpus_allowed = cpumask_weight(mask);
+
+ /* Let migrate_enable know to fix things back up */
+ p->migrate_disable |= MIGRATE_DISABLE_SET_AFFIN;
@@ -144,7 +144,7 @@
+ mask = tsk_cpus_allowed(p);
+ if (p->sched_class->set_cpus_allowed)
+ p->sched_class->set_cpus_allowed(p, mask);
-+ p->rt.nr_cpus_allowed = cpumask_weight(mask);
++ p->nr_cpus_allowed = cpumask_weight(mask);
+ }
+ raw_spin_unlock_irqrestore(&rq->lock, flags);
+ } else
@@ -162,7 +162,7 @@
static void put_prev_task(struct rq *rq, struct task_struct *prev)
{
if (prev->on_rq || rq->skip_clock_update < 0)
-@@ -3195,6 +3324,8 @@ need_resched:
+@@ -3429,6 +3558,8 @@ need_resched:
raw_spin_lock_irq(&rq->lock);
@@ -171,7 +171,7 @@
switch_count = &prev->nivcsw;
if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
if (unlikely(signal_pending_state(prev->state, prev))) {
-@@ -4976,7 +5107,7 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu)
+@@ -5203,7 +5334,7 @@ void __cpuinit init_idle(struct task_str
#ifdef CONFIG_SMP
void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask)
{
@@ -179,8 +179,8 @@
+ if (!migrate_disabled_updated(p)) {
if (p->sched_class && p->sched_class->set_cpus_allowed)
p->sched_class->set_cpus_allowed(p, new_mask);
- p->rt.nr_cpus_allowed = cpumask_weight(new_mask);
-@@ -5051,124 +5182,6 @@ out:
+ p->nr_cpus_allowed = cpumask_weight(new_mask);
+@@ -5278,124 +5409,6 @@ out:
}
EXPORT_SYMBOL_GPL(set_cpus_allowed_ptr);
@@ -237,7 +237,7 @@
- if (!cpumask_equal(&p->cpus_allowed, mask)) {
- if (p->sched_class->set_cpus_allowed)
- p->sched_class->set_cpus_allowed(p, mask);
-- p->rt.nr_cpus_allowed = cpumask_weight(mask);
+- p->nr_cpus_allowed = cpumask_weight(mask);
- }
- raw_spin_unlock_irqrestore(&rq->lock, flags);
- preempt_enable();
@@ -292,7 +292,7 @@
- mask = tsk_cpus_allowed(p);
- if (p->sched_class->set_cpus_allowed)
- p->sched_class->set_cpus_allowed(p, mask);
-- p->rt.nr_cpus_allowed = cpumask_weight(mask);
+- p->nr_cpus_allowed = cpumask_weight(mask);
- }
-
- raw_spin_unlock_irqrestore(&rq->lock, flags);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-serial-warn-fix.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0195-rt-Improve-the-serial-console-PASS_LIMIT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0195-rt-Improve-the-serial-console-PASS_LIMIT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-serial-warn-fix.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,10 +1,6 @@
-From ed2487dbf09bdff49c997cadf6e0484c27e10a31 Mon Sep 17 00:00:00 2001
+Subject: rt: Improve the serial console PASS_LIMIT
From: Ingo Molnar <mingo at elte.hu>
-Date: Wed, 14 Dec 2011 13:05:54 +0100
-Subject: [195/256] rt: Improve the serial console PASS_LIMIT
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
+Date: Wed Dec 14 13:05:54 CET 2011
Beyond the warning:
@@ -19,11 +15,11 @@
drivers/tty/serial/8250/8250.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
-diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c
-index ff93c70..a785ec0 100644
---- a/drivers/tty/serial/8250/8250.c
-+++ b/drivers/tty/serial/8250/8250.c
-@@ -80,7 +80,16 @@ static unsigned int skip_txen_test; /* force skip of txen test at init time */
+Index: linux-stable/drivers/tty/serial/8250/8250.c
+===================================================================
+--- linux-stable.orig/drivers/tty/serial/8250/8250.c
++++ linux-stable/drivers/tty/serial/8250/8250.c
+@@ -80,7 +80,16 @@ static unsigned int skip_txen_test; /* f
#define DEBUG_INTR(fmt...) do { } while (0)
#endif
@@ -41,7 +37,7 @@
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
-@@ -1584,14 +1593,12 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
+@@ -1549,14 +1558,12 @@ static irqreturn_t serial8250_interrupt(
l = l->next;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rt-tracing-show-padding-as-unsigned-short.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0145-tracing-Show-padding-as-unsigned-short.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0145-tracing-Show-padding-as-unsigned-short.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rt-tracing-show-padding-as-unsigned-short.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From e8940c2513f302ea32fc52c3b1d34f22c093df05 Mon Sep 17 00:00:00 2001
+Subject: tracing: Show padding as unsigned short
From: Steven Rostedt <rostedt at goodmis.org>
Date: Wed, 16 Nov 2011 13:19:35 -0500
-Subject: [145/256] tracing: Show padding as unsigned short
RT added two bytes to trace migrate disable counting to the trace events
and used two bytes of the padding to make the change. The structures and
@@ -20,6 +19,7 @@
field:unsigned short common_migrate_disable; offset:8; size:2; signed:0;
field:int common_padding; offset:10; size:2; signed:0;
+
The field for common_padding has the correct size and offset, but the
use of "int" might confuse some parsers (and people that are reading
it). This needs to be changed to "unsigned short".
@@ -28,15 +28,16 @@
Link: http://lkml.kernel.org/r/1321467575.4181.36.camel@frodo
Cc: stable-rt at vger.kernel.org
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/trace/trace_events.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
-index 4c3a7b3..9d94e2f 100644
---- a/kernel/trace/trace_events.c
-+++ b/kernel/trace/trace_events.c
-@@ -117,7 +117,7 @@ static int trace_define_common_fields(void)
+Index: linux-stable/kernel/trace/trace_events.c
+===================================================================
+--- linux-stable.orig/kernel/trace/trace_events.c
++++ linux-stable/kernel/trace/trace_events.c
+@@ -117,7 +117,7 @@ static int trace_define_common_fields(vo
__common_field(unsigned char, preempt_count);
__common_field(int, pid);
__common_field(unsigned short, migrate_disable);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rtmutex-avoid-include-hell.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0176-rtmutex-avoid-include-hell.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0176-rtmutex-avoid-include-hell.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rtmutex-avoid-include-hell.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 6894c43fe47e28d2a8cc7167922f5b7fba6fb66d Mon Sep 17 00:00:00 2001
+Subject: rtmutex-avoid-include-hell.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 29 Jun 2011 20:06:39 +0200
-Subject: [176/256] rtmutex-avoid-include-hell.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/rtmutex.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h
-index 928d93e..5ebd0bb 100644
---- a/include/linux/rtmutex.h
-+++ b/include/linux/rtmutex.h
+Index: linux-stable/include/linux/rtmutex.h
+===================================================================
+--- linux-stable.orig/include/linux/rtmutex.h
++++ linux-stable/include/linux/rtmutex.h
@@ -14,7 +14,7 @@
#include <linux/linkage.h>
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rtmutex-futex-prepare-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0172-rtmutex-futex-prepare-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0172-rtmutex-futex-prepare-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rtmutex-futex-prepare-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,18 @@
-From 360ec2bb1bda440032020cd8a0ba02fffde8e3fc Mon Sep 17 00:00:00 2001
+Subject: rtmutex-futex-prepare-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 10 Jun 2011 11:04:15 +0200
-Subject: [172/256] rtmutex-futex-prepare-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- kernel/futex.c | 77 ++++++++++++++++++++++++++++++++++++++---------
+ kernel/futex.c | 77 ++++++++++++++++++++++++++++++++++++++----------
kernel/rtmutex.c | 31 ++++++++++++++++---
- kernel/rtmutex_common.h | 2 ++
+ kernel/rtmutex_common.h | 2 +
3 files changed, 91 insertions(+), 19 deletions(-)
-diff --git a/kernel/futex.c b/kernel/futex.c
-index e2b0fb9..9decb1c 100644
---- a/kernel/futex.c
-+++ b/kernel/futex.c
+Index: linux-stable/kernel/futex.c
+===================================================================
+--- linux-stable.orig/kernel/futex.c
++++ linux-stable/kernel/futex.c
@@ -1423,6 +1423,16 @@ retry_private:
requeue_pi_wake_futex(this, &key2, hb2);
drop_count++;
@@ -31,7 +30,7 @@
} else if (ret) {
/* -EDEADLK */
this->pi_state = NULL;
-@@ -2267,7 +2277,7 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,
+@@ -2267,7 +2277,7 @@ static int futex_wait_requeue_pi(u32 __u
struct hrtimer_sleeper timeout, *to = NULL;
struct rt_mutex_waiter rt_waiter;
struct rt_mutex *pi_mutex = NULL;
@@ -40,7 +39,7 @@
union futex_key key2 = FUTEX_KEY_INIT;
struct futex_q q = futex_q_init;
int res, ret;
-@@ -2311,20 +2321,55 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,
+@@ -2314,20 +2324,55 @@ static int futex_wait_requeue_pi(u32 __u
/* Queue the futex_q, drop the hb lock, wait for wakeup. */
futex_wait_queue_me(hb, &q, to);
@@ -107,7 +106,7 @@
/* Check if the requeue code acquired the second futex for us. */
if (!q.rt_waiter) {
-@@ -2333,9 +2378,10 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,
+@@ -2336,9 +2381,10 @@ static int futex_wait_requeue_pi(u32 __u
* did a lock-steal - fix up the PI-state in that case.
*/
if (q.pi_state && (q.pi_state->owner != current)) {
@@ -120,7 +119,7 @@
}
} else {
/*
-@@ -2348,7 +2394,8 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,
+@@ -2351,7 +2397,8 @@ static int futex_wait_requeue_pi(u32 __u
ret = rt_mutex_finish_proxy_lock(pi_mutex, to, &rt_waiter, 1);
debug_rt_mutex_free_waiter(&rt_waiter);
@@ -130,11 +129,11 @@
/*
* Fixup the pi_state owner and possibly acquire the lock if we
* haven't already.
-diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
-index f641ce9..1e98e24 100644
---- a/kernel/rtmutex.c
-+++ b/kernel/rtmutex.c
-@@ -67,6 +67,11 @@ static void fixup_rt_mutex_waiters(struct rt_mutex *lock)
+Index: linux-stable/kernel/rtmutex.c
+===================================================================
+--- linux-stable.orig/kernel/rtmutex.c
++++ linux-stable/kernel/rtmutex.c
+@@ -67,6 +67,11 @@ static void fixup_rt_mutex_waiters(struc
clear_rt_mutex_waiters(lock);
}
@@ -146,7 +145,7 @@
/*
* We can speed up the acquire/release, if the architecture
* supports cmpxchg and if there's no debugging state to be set up
-@@ -196,7 +201,7 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task,
+@@ -196,7 +201,7 @@ static int rt_mutex_adjust_prio_chain(st
* reached or the state of the chain has changed while we
* dropped the locks.
*/
@@ -155,7 +154,7 @@
goto out_unlock_pi;
/*
-@@ -399,6 +404,23 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock,
+@@ -399,6 +404,23 @@ static int task_blocks_on_rt_mutex(struc
int chain_walk = 0, res;
raw_spin_lock_irqsave(&task->pi_lock, flags);
@@ -179,7 +178,7 @@
__rt_mutex_adjust_prio(task);
waiter->task = task;
waiter->lock = lock;
-@@ -423,7 +445,7 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock,
+@@ -423,7 +445,7 @@ static int task_blocks_on_rt_mutex(struc
plist_add(&waiter->pi_list_entry, &owner->pi_waiters);
__rt_mutex_adjust_prio(owner);
@@ -188,7 +187,7 @@
chain_walk = 1;
raw_spin_unlock_irqrestore(&owner->pi_lock, flags);
}
-@@ -517,7 +539,7 @@ static void remove_waiter(struct rt_mutex *lock,
+@@ -517,7 +539,7 @@ static void remove_waiter(struct rt_mute
}
__rt_mutex_adjust_prio(owner);
@@ -197,7 +196,7 @@
chain_walk = 1;
raw_spin_unlock_irqrestore(&owner->pi_lock, flags);
-@@ -551,7 +573,8 @@ void rt_mutex_adjust_pi(struct task_struct *task)
+@@ -551,7 +573,8 @@ void rt_mutex_adjust_pi(struct task_stru
raw_spin_lock_irqsave(&task->pi_lock, flags);
waiter = task->pi_blocked_on;
@@ -207,11 +206,11 @@
raw_spin_unlock_irqrestore(&task->pi_lock, flags);
return;
}
-diff --git a/kernel/rtmutex_common.h b/kernel/rtmutex_common.h
-index 53a66c8..b43d832 100644
---- a/kernel/rtmutex_common.h
-+++ b/kernel/rtmutex_common.h
-@@ -103,6 +103,8 @@ static inline struct task_struct *rt_mutex_owner(struct rt_mutex *lock)
+Index: linux-stable/kernel/rtmutex_common.h
+===================================================================
+--- linux-stable.orig/kernel/rtmutex_common.h
++++ linux-stable/kernel/rtmutex_common.h
+@@ -103,6 +103,8 @@ static inline struct task_struct *rt_mut
/*
* PI-futex support (proxy locking functions, etc.):
*/
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rtmutex-lock-killable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0171-rtmutex-lock-killable.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0171-rtmutex-lock-killable.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rtmutex-lock-killable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 19ba6a96866ef2762878a0e3a4741570aab52aa2 Mon Sep 17 00:00:00 2001
+Subject: rtmutex-lock-killable.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Thu, 9 Jun 2011 11:43:52 +0200
-Subject: [171/256] rtmutex-lock-killable.patch
+Date: Thu, 09 Jun 2011 11:43:52 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
kernel/rtmutex.c | 33 +++++++++++++++++++++++++++------
2 files changed, 28 insertions(+), 6 deletions(-)
-diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h
-index de17134..3561eb2 100644
---- a/include/linux/rtmutex.h
-+++ b/include/linux/rtmutex.h
-@@ -90,6 +90,7 @@ extern void rt_mutex_destroy(struct rt_mutex *lock);
+Index: linux-stable/include/linux/rtmutex.h
+===================================================================
+--- linux-stable.orig/include/linux/rtmutex.h
++++ linux-stable/include/linux/rtmutex.h
+@@ -90,6 +90,7 @@ extern void rt_mutex_destroy(struct rt_m
extern void rt_mutex_lock(struct rt_mutex *lock);
extern int rt_mutex_lock_interruptible(struct rt_mutex *lock,
int detect_deadlock);
@@ -21,10 +20,10 @@
extern int rt_mutex_timed_lock(struct rt_mutex *lock,
struct hrtimer_sleeper *timeout,
int detect_deadlock);
-diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
-index a242e69..f641ce9 100644
---- a/kernel/rtmutex.c
-+++ b/kernel/rtmutex.c
+Index: linux-stable/kernel/rtmutex.c
+===================================================================
+--- linux-stable.orig/kernel/rtmutex.c
++++ linux-stable/kernel/rtmutex.c
@@ -791,12 +791,12 @@ EXPORT_SYMBOL_GPL(rt_mutex_lock);
/**
* rt_mutex_lock_interruptible - lock a rt_mutex interruptible
@@ -41,7 +40,7 @@
* -EDEADLK when the lock would deadlock (when deadlock detection is on)
*/
int __sched rt_mutex_lock_interruptible(struct rt_mutex *lock,
-@@ -810,17 +810,38 @@ int __sched rt_mutex_lock_interruptible(struct rt_mutex *lock,
+@@ -810,17 +810,38 @@ int __sched rt_mutex_lock_interruptible(
EXPORT_SYMBOL_GPL(rt_mutex_lock_interruptible);
/**
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/rwsem-add-rt-variant.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0179-rwsem-add-rt-variant.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0179-rwsem-add-rt-variant.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/rwsem-add-rt-variant.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,20 +1,18 @@
-From c1daad4c6bc6fc32b5b82b388d9217375f65ab6a Mon Sep 17 00:00:00 2001
+Subject: rwsem-add-rt-variant.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 29 Jun 2011 21:02:53 +0200
-Subject: [179/256] rwsem-add-rt-variant.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/rwsem.h | 6 +++
- include/linux/rwsem_rt.h | 105 ++++++++++++++++++++++++++++++++++++++++++++++
- lib/Makefile | 3 ++
+ include/linux/rwsem.h | 6 ++
+ include/linux/rwsem_rt.h | 105 +++++++++++++++++++++++++++++++++++++++++++++++
+ lib/Makefile | 3 +
3 files changed, 114 insertions(+)
- create mode 100644 include/linux/rwsem_rt.h
-diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
-index 54bd7cd..3f7df4a 100644
---- a/include/linux/rwsem.h
-+++ b/include/linux/rwsem.h
+Index: linux-stable/include/linux/rwsem.h
+===================================================================
+--- linux-stable.orig/include/linux/rwsem.h
++++ linux-stable/include/linux/rwsem.h
@@ -16,6 +16,10 @@
#include <linux/atomic.h>
@@ -26,18 +24,17 @@
struct rw_semaphore;
#ifdef CONFIG_RWSEM_GENERIC_SPINLOCK
-@@ -130,4 +134,6 @@ extern void down_write_nested(struct rw_semaphore *sem, int subclass);
+@@ -130,4 +134,6 @@ extern void down_write_nested(struct rw_
# define down_write_nested(sem, subclass) down_write(sem)
#endif
+#endif /* !PREEMPT_RT_FULL */
+
#endif /* _LINUX_RWSEM_H */
-diff --git a/include/linux/rwsem_rt.h b/include/linux/rwsem_rt.h
-new file mode 100644
-index 0000000..802c690
+Index: linux-stable/include/linux/rwsem_rt.h
+===================================================================
--- /dev/null
-+++ b/include/linux/rwsem_rt.h
++++ linux-stable/include/linux/rwsem_rt.h
@@ -0,0 +1,105 @@
+#ifndef _LINUX_RWSEM_RT_H
+#define _LINUX_RWSEM_RT_H
@@ -144,11 +141,11 @@
+}
+
+#endif
-diff --git a/lib/Makefile b/lib/Makefile
-index 18515f0..a8da407 100644
---- a/lib/Makefile
-+++ b/lib/Makefile
-@@ -38,8 +38,11 @@ obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o devres.o
+Index: linux-stable/lib/Makefile
+===================================================================
+--- linux-stable.orig/lib/Makefile
++++ linux-stable/lib/Makefile
+@@ -38,8 +38,11 @@ obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o
obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o
obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o
obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock_debug.o
Added: dists/trunk/linux/debian/patches/features/all/rt/sched-better-debug-output-for-might-sleep.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-better-debug-output-for-might-sleep.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,76 @@
+Subject: sched: Better debug output for might sleep
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Fri, 05 Oct 2012 08:56:15 +0100
+
+might sleep can tell us where interrupts have been disabled, but we
+have no idea what disabled preemption. Add some debug infrastructure.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ include/linux/sched.h | 4 ++++
+ kernel/sched/core.c | 23 +++++++++++++++++++++--
+ 2 files changed, 25 insertions(+), 2 deletions(-)
+
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1624,6 +1624,10 @@ struct task_struct {
+ int kmap_idx;
+ pte_t kmap_pte[KM_TYPE_NR];
+ #endif
++
++#ifdef CONFIG_DEBUG_PREEMPT
++ unsigned long preempt_disable_ip;
++#endif
+ };
+
+ #ifdef CONFIG_PREEMPT_RT_FULL
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -3311,8 +3311,13 @@ void __kprobes add_preempt_count(int val
+ DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >=
+ PREEMPT_MASK - 10);
+ #endif
+- if (preempt_count() == val)
+- trace_preempt_off(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
++ if (preempt_count() == val) {
++ unsigned long ip = get_parent_ip(CALLER_ADDR1);
++#ifdef CONFIG_DEBUG_PREEMPT
++ current->preempt_disable_ip = ip;
++#endif
++ trace_preempt_off(CALLER_ADDR0, ip);
++ }
+ }
+ EXPORT_SYMBOL(add_preempt_count);
+
+@@ -3355,6 +3360,13 @@ static noinline void __schedule_bug(stru
+ print_modules();
+ if (irqs_disabled())
+ print_irqtrace_events(prev);
++#ifdef DEBUG_PREEMPT
++ if (in_atomic_preempt_off()) {
++ pr_err("Preemption disabled at:");
++ print_ip_sym(current->preempt_disable_ip);
++ pr_cont("\n");
++ }
++#endif
+ dump_stack();
+ add_taint(TAINT_WARN);
+ }
+@@ -7700,6 +7712,13 @@ void __might_sleep(const char *file, int
+ debug_show_held_locks(current);
+ if (irqs_disabled())
+ print_irqtrace_events(current);
++#ifdef DEBUG_PREEMPT
++ if (!preempt_count_equals(preempt_offset)) {
++ pr_err("Preemption disabled at:");
++ print_ip_sym(current->preempt_disable_ip);
++ pr_cont("\n");
++ }
++#endif
+ dump_stack();
+ }
+ EXPORT_SYMBOL(__might_sleep);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-clear-pf-thread-bound-on-fallback-rq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0154-sched-clear-pf-thread-bound-on-fallback-rq.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0154-sched-clear-pf-thread-bound-on-fallback-rq.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-clear-pf-thread-bound-on-fallback-rq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 1ce97be705d59baa210b67744f1145ee3d6259fb Mon Sep 17 00:00:00 2001
+Subject: sched-clear-pf-thread-bound-on-fallback-rq.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Fri, 4 Nov 2011 20:48:36 +0100
-Subject: [154/256] sched-clear-pf-thread-bound-on-fallback-rq.patch
+Date: Fri, 04 Nov 2011 20:48:36 +0100
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/sched/core.c | 6 ++++++
1 file changed, 6 insertions(+)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 8afb5e9..599cc25 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -1325,6 +1325,12 @@ out:
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -1323,6 +1323,12 @@ out:
}
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-cond-resched.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0129-sched-cond-resched.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0129-sched-cond-resched.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-cond-resched.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 1aa975279d4a5596e082534477783a3961a32c62 Mon Sep 17 00:00:00 2001
+Subject: sched-cond-resched.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Tue, 7 Jun 2011 11:25:03 +0200
-Subject: [129/256] sched-cond-resched.patch
+Date: Tue, 07 Jun 2011 11:25:03 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/sched/core.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 7fd59a2..dbe9a7d 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -4554,9 +4554,17 @@ static inline int should_resched(void)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -4781,9 +4781,17 @@ static inline int should_resched(void)
static void __cond_resched(void)
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-delay-put-task.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0124-sched-delay-put-task.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0124-sched-delay-put-task.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-delay-put-task.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 1d69cb2f49e57b61483843705efd9cfdc4471f53 Mon Sep 17 00:00:00 2001
+Subject: sched-delay-put-task.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 31 May 2011 16:59:16 +0200
-Subject: [124/256] sched-delay-put-task.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,13 +8,13 @@
kernel/fork.c | 11 +++++++++++
2 files changed, 24 insertions(+)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index b997506..0fbffda 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1635,6 +1635,9 @@ struct task_struct {
- #ifdef CONFIG_HAVE_HW_BREAKPOINT
- atomic_t ptrace_bp_refcnt;
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1607,6 +1607,9 @@ struct task_struct {
+ #ifdef CONFIG_UPROBES
+ struct uprobe_task *utask;
#endif
+#ifdef CONFIG_PREEMPT_RT_BASE
+ struct rcu_head put_rcu;
@@ -23,7 +22,7 @@
};
/* Future-safe accessor for struct task_struct's cpus_allowed. */
-@@ -1819,6 +1822,15 @@ extern struct pid *cad_pid;
+@@ -1791,6 +1794,15 @@ extern struct pid *cad_pid;
extern void free_task(struct task_struct *tsk);
#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
@@ -39,7 +38,7 @@
extern void __put_task_struct(struct task_struct *t);
static inline void put_task_struct(struct task_struct *t)
-@@ -1826,6 +1838,7 @@ static inline void put_task_struct(struct task_struct *t)
+@@ -1798,6 +1810,7 @@ static inline void put_task_struct(struc
if (atomic_dec_and_test(&t->usage))
__put_task_struct(t);
}
@@ -47,11 +46,11 @@
extern void task_times(struct task_struct *p, cputime_t *ut, cputime_t *st);
extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *st);
-diff --git a/kernel/fork.c b/kernel/fork.c
-index 45a45b7..e13be8a 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -202,7 +202,18 @@ void __put_task_struct(struct task_struct *tsk)
+Index: linux-stable/kernel/fork.c
+===================================================================
+--- linux-stable.orig/kernel/fork.c
++++ linux-stable/kernel/fork.c
+@@ -244,7 +244,18 @@ void __put_task_struct(struct task_struc
if (!profile_handoff_task(tsk))
free_task(tsk);
}
@@ -68,5 +67,5 @@
+EXPORT_SYMBOL_GPL(__put_task_struct_cb);
+#endif
- /*
- * macro override instead of weak attribute alias, to workaround
+ void __init __weak arch_task_cache_init(void) { }
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-disable-rt-group-sched-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0133-sched-Disable-CONFIG_RT_GROUP_SCHED-on-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0133-sched-Disable-CONFIG_RT_GROUP_SCHED-on-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-disable-rt-group-sched-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From de9fd92b8ecd080a473c9a42c46613124cd30aff Mon Sep 17 00:00:00 2001
+Subject: sched: Disable CONFIG_RT_GROUP_SCHED on RT
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 18 Jul 2011 17:03:52 +0200
-Subject: [133/256] sched: Disable CONFIG_RT_GROUP_SCHED on RT
Carsten reported problems when running:
@@ -17,11 +16,11 @@
init/Kconfig | 1 +
1 file changed, 1 insertion(+)
-diff --git a/init/Kconfig b/init/Kconfig
-index 7c0b369..c06208b 100644
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -746,6 +746,7 @@ config RT_GROUP_SCHED
+Index: linux-stable/init/Kconfig
+===================================================================
+--- linux-stable.orig/init/Kconfig
++++ linux-stable/init/Kconfig
+@@ -806,6 +806,7 @@ config RT_GROUP_SCHED
bool "Group scheduling for SCHED_RR/FIFO"
depends on EXPERIMENTAL
depends on CGROUP_SCHED
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-disable-ttwu-queue.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0132-sched-disable-ttwu-queue.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0132-sched-disable-ttwu-queue.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-disable-ttwu-queue.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From fb8f00d3e186dd2fbe684e86a24cf5099399ecae Mon Sep 17 00:00:00 2001
+Subject: sched-disable-ttwu-queue.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 13 Sep 2011 16:42:35 +0200
-Subject: [132/256] sched-disable-ttwu-queue.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/sched/features.h | 4 ++++
1 file changed, 4 insertions(+)
-diff --git a/kernel/sched/features.h b/kernel/sched/features.h
-index de00a48..27afd1e 100644
---- a/kernel/sched/features.h
-+++ b/kernel/sched/features.h
+Index: linux-stable/kernel/sched/features.h
+===================================================================
+--- linux-stable.orig/kernel/sched/features.h
++++ linux-stable/kernel/sched/features.h
@@ -60,11 +60,15 @@ SCHED_FEAT(OWNER_SPIN, true)
*/
SCHED_FEAT(NONTASK_POWER, true)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-limit-nr-migrate.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0125-sched-limit-nr-migrate.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0125-sched-limit-nr-migrate.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-limit-nr-migrate.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 784b804e6ec857d95df910f424252632126fcf11 Mon Sep 17 00:00:00 2001
+Subject: sched-limit-nr-migrate.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Mon, 6 Jun 2011 12:12:51 +0200
-Subject: [125/256] sched-limit-nr-migrate.patch
+Date: Mon, 06 Jun 2011 12:12:51 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/sched/core.c | 4 ++++
1 file changed, 4 insertions(+)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index bf42b7d..c0e6a70 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
@@ -263,7 +263,11 @@ late_initcall(sched_init_debug);
* Number of tasks to iterate in a single balance run.
* Limited because this is done with IRQs disabled.
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-might-sleep-do-not-account-rcu-depth.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0128-sched-might-sleep-do-not-account-rcu-depth.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0128-sched-might-sleep-do-not-account-rcu-depth.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-might-sleep-do-not-account-rcu-depth.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 15ae181ec2b59ad4bbd5f54bee6fbd68bd9358b3 Mon Sep 17 00:00:00 2001
+Subject: sched-might-sleep-do-not-account-rcu-depth.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Tue, 7 Jun 2011 09:19:06 +0200
-Subject: [128/256] sched-might-sleep-do-not-account-rcu-depth.patch
+Date: Tue, 07 Jun 2011 09:19:06 +0200
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
kernel/sched/core.c | 3 ++-
2 files changed, 9 insertions(+), 1 deletion(-)
-diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
-index 20fb776..23a500f 100644
---- a/include/linux/rcupdate.h
-+++ b/include/linux/rcupdate.h
-@@ -156,6 +156,11 @@ void synchronize_rcu(void);
+Index: linux-stable/include/linux/rcupdate.h
+===================================================================
+--- linux-stable.orig/include/linux/rcupdate.h
++++ linux-stable/include/linux/rcupdate.h
+@@ -157,6 +157,11 @@ void synchronize_rcu(void);
* types of kernel builds, the rcu_read_lock() nesting depth is unknowable.
*/
#define rcu_preempt_depth() (current->rcu_read_lock_nesting)
@@ -25,7 +24,7 @@
#else /* #ifdef CONFIG_PREEMPT_RCU */
-@@ -179,6 +184,8 @@ static inline int rcu_preempt_depth(void)
+@@ -180,6 +185,8 @@ static inline int rcu_preempt_depth(void
return 0;
}
@@ -34,11 +33,11 @@
#endif /* #else #ifdef CONFIG_PREEMPT_RCU */
/* Internal to kernel */
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 720783a..7fd59a2 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -7091,7 +7091,8 @@ void __init sched_init(void)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -7450,7 +7450,8 @@ void __init sched_init(void)
#ifdef CONFIG_DEBUG_ATOMIC_SLEEP
static inline int preempt_count_equals(int preempt_offset)
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-migrate-disable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0141-sched-migrate-disable.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0141-sched-migrate-disable.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-migrate-disable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,19 @@
-From 02cf9f02bdf247447eb54ded7fefa843d4ea4628 Mon Sep 17 00:00:00 2001
+Subject: sched-migrate-disable.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 16 Jun 2011 13:26:08 +0200
-Subject: [141/256] sched-migrate-disable.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/preempt.h | 8 +++++
+ include/linux/preempt.h | 8 ++++
include/linux/sched.h | 13 +++++--
- include/linux/smp.h | 1 -
- kernel/sched/core.c | 88 ++++++++++++++++++++++++++++++++++++++++++++---
- lib/smp_processor_id.c | 6 ++--
- 5 files changed, 104 insertions(+), 12 deletions(-)
+ kernel/sched/core.c | 88 +++++++++++++++++++++++++++++++++++++++++++++---
+ lib/smp_processor_id.c | 6 +--
+ 4 files changed, 104 insertions(+), 11 deletions(-)
-diff --git a/include/linux/preempt.h b/include/linux/preempt.h
-index 5b46536..c5d2a36 100644
---- a/include/linux/preempt.h
-+++ b/include/linux/preempt.h
+Index: linux-stable/include/linux/preempt.h
+===================================================================
+--- linux-stable.orig/include/linux/preempt.h
++++ linux-stable/include/linux/preempt.h
@@ -108,6 +108,14 @@ do { \
#endif /* CONFIG_PREEMPT_COUNT */
@@ -31,19 +29,19 @@
#ifdef CONFIG_PREEMPT_RT_FULL
# define preempt_disable_rt() preempt_disable()
# define preempt_enable_rt() preempt_enable()
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index cdfc16e..c5f690a 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1302,6 +1302,7 @@ struct task_struct {
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1275,6 +1275,7 @@ struct task_struct {
#endif
unsigned int policy;
+ int migrate_disable;
+ int nr_cpus_allowed;
cpumask_t cpus_allowed;
- #ifdef CONFIG_PREEMPT_RCU
-@@ -1642,9 +1643,6 @@ struct task_struct {
+@@ -1614,9 +1615,6 @@ struct task_struct {
#endif
};
@@ -53,7 +51,7 @@
#ifdef CONFIG_PREEMPT_RT_FULL
static inline bool cur_pf_disabled(void) { return current->pagefault_disabled; }
#else
-@@ -2773,6 +2771,15 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
+@@ -2773,6 +2771,15 @@ static inline void set_task_cpu(struct t
#endif /* CONFIG_SMP */
@@ -69,23 +67,11 @@
extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask);
extern long sched_getaffinity(pid_t pid, struct cpumask *mask);
-diff --git a/include/linux/smp.h b/include/linux/smp.h
-index 04e7ed9..980c525 100644
---- a/include/linux/smp.h
-+++ b/include/linux/smp.h
-@@ -80,7 +80,6 @@ void __smp_call_function_single(int cpuid, struct call_single_data *data,
-
- int smp_call_function_any(const struct cpumask *mask,
- smp_call_func_t func, void *info, int wait);
--
- /*
- * Generic and arch helpers
- */
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index d591b69..42efb3c 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -4976,11 +4976,12 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -5203,11 +5203,12 @@ void __cpuinit init_idle(struct task_str
#ifdef CONFIG_SMP
void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask)
{
@@ -95,14 +81,14 @@
+ if (!p->migrate_disable) {
+ if (p->sched_class && p->sched_class->set_cpus_allowed)
+ p->sched_class->set_cpus_allowed(p, new_mask);
-+ p->rt.nr_cpus_allowed = cpumask_weight(new_mask);
++ p->nr_cpus_allowed = cpumask_weight(new_mask);
+ }
cpumask_copy(&p->cpus_allowed, new_mask);
-- p->rt.nr_cpus_allowed = cpumask_weight(new_mask);
+- p->nr_cpus_allowed = cpumask_weight(new_mask);
}
/*
-@@ -5031,7 +5032,7 @@ int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)
+@@ -5258,7 +5259,7 @@ int set_cpus_allowed_ptr(struct task_str
do_set_cpus_allowed(p, new_mask);
/* Can the task run on the task's current CPU? If so, we're done */
@@ -111,7 +97,7 @@
goto out;
dest_cpu = cpumask_any_and(cpu_active_mask, new_mask);
-@@ -5050,6 +5051,83 @@ out:
+@@ -5277,6 +5278,83 @@ out:
}
EXPORT_SYMBOL_GPL(set_cpus_allowed_ptr);
@@ -144,7 +130,7 @@
+ if (!cpumask_equal(&p->cpus_allowed, mask)) {
+ if (p->sched_class->set_cpus_allowed)
+ p->sched_class->set_cpus_allowed(p, mask);
-+ p->rt.nr_cpus_allowed = cpumask_weight(mask);
++ p->nr_cpus_allowed = cpumask_weight(mask);
+ }
+ task_rq_unlock(rq, p, &flags);
+ preempt_enable();
@@ -183,7 +169,7 @@
+ if (!cpumask_equal(&p->cpus_allowed, mask)) {
+ if (p->sched_class->set_cpus_allowed)
+ p->sched_class->set_cpus_allowed(p, mask);
-+ p->rt.nr_cpus_allowed = cpumask_weight(mask);
++ p->nr_cpus_allowed = cpumask_weight(mask);
+ }
+
+ task_rq_unlock(rq, p, &flags);
@@ -195,11 +181,11 @@
/*
* Move (not current) task off this cpu, onto dest cpu. We're doing
* this because either it can't run here any more (set_cpus_allowed()
-diff --git a/lib/smp_processor_id.c b/lib/smp_processor_id.c
-index 4c0d0e5..0a846e7 100644
---- a/lib/smp_processor_id.c
-+++ b/lib/smp_processor_id.c
-@@ -39,9 +39,9 @@ notrace unsigned int debug_smp_processor_id(void)
+Index: linux-stable/lib/smp_processor_id.c
+===================================================================
+--- linux-stable.orig/lib/smp_processor_id.c
++++ linux-stable/lib/smp_processor_id.c
+@@ -39,9 +39,9 @@ notrace unsigned int debug_smp_processor
if (!printk_ratelimit())
goto out_enable;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-mmdrop-delayed.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0126-sched-mmdrop-delayed.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0126-sched-mmdrop-delayed.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-mmdrop-delayed.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 585fd2cf2eb2cc2f1af23a454fceb6331921c0b8 Mon Sep 17 00:00:00 2001
+Subject: sched-mmdrop-delayed.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Mon, 6 Jun 2011 12:20:33 +0200
-Subject: [126/256] sched-mmdrop-delayed.patch
+Date: Mon, 06 Jun 2011 12:20:33 +0200
Needs thread context (pgd_lock) -> ifdeffed. workqueues wont work with
RT
@@ -11,36 +10,36 @@
include/linux/mm_types.h | 4 ++++
include/linux/sched.h | 12 ++++++++++++
kernel/fork.c | 15 ++++++++++++++-
- kernel/sched/core.c | 21 +++++++++++++++++++--
- 4 files changed, 49 insertions(+), 3 deletions(-)
+ kernel/sched/core.c | 19 +++++++++++++++++--
+ 4 files changed, 47 insertions(+), 3 deletions(-)
-diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index e70ea9b..8574996 100644
---- a/include/linux/mm_types.h
-+++ b/include/linux/mm_types.h
+Index: linux-stable/include/linux/mm_types.h
+===================================================================
+--- linux-stable.orig/include/linux/mm_types.h
++++ linux-stable/include/linux/mm_types.h
@@ -12,6 +12,7 @@
#include <linux/completion.h>
#include <linux/cpumask.h>
#include <linux/page-debug-flags.h>
+#include <linux/rcupdate.h>
+ #include <linux/uprobes.h>
#include <asm/page.h>
#include <asm/mmu.h>
-
-@@ -392,6 +393,9 @@ struct mm_struct {
- #ifdef CONFIG_CPUMASK_OFFSTACK
+@@ -409,6 +410,9 @@ struct mm_struct {
struct cpumask cpumask_allocation;
#endif
+ struct uprobes_state uprobes_state;
+#ifdef CONFIG_PREEMPT_RT_BASE
+ struct rcu_head delayed_drop;
+#endif
};
static inline void mm_init_cpumask(struct mm_struct *mm)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 0fbffda..a198e77 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -2324,12 +2324,24 @@ extern struct mm_struct * mm_alloc(void);
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -2324,12 +2324,24 @@ extern struct mm_struct * mm_alloc(void)
/* mmdrop drops the mm and the page tables */
extern void __mmdrop(struct mm_struct *);
@@ -65,11 +64,11 @@
/* mmput gets rid of the mappings and all user-space */
extern void mmput(struct mm_struct *);
/* Grab a reference to a task's mm, if it is not already going away */
-diff --git a/kernel/fork.c b/kernel/fork.c
-index e13be8a..e6cf9db 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -207,7 +207,7 @@ EXPORT_SYMBOL_GPL(__put_task_struct);
+Index: linux-stable/kernel/fork.c
+===================================================================
+--- linux-stable.orig/kernel/fork.c
++++ linux-stable/kernel/fork.c
+@@ -249,7 +249,7 @@ EXPORT_SYMBOL_GPL(__put_task_struct);
#else
void __put_task_struct_cb(struct rcu_head *rhp)
{
@@ -78,7 +77,7 @@
__put_task_struct(tsk);
-@@ -574,6 +574,19 @@ void __mmdrop(struct mm_struct *mm)
+@@ -608,6 +608,19 @@ void __mmdrop(struct mm_struct *mm)
}
EXPORT_SYMBOL_GPL(__mmdrop);
@@ -98,11 +97,11 @@
/*
* Decrement the use count and release all resources for an mm.
*/
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index c0e6a70..f491ef7 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -1934,8 +1934,12 @@ static void finish_task_switch(struct rq *rq, struct task_struct *prev)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -1970,8 +1970,12 @@ static void finish_task_switch(struct rq
finish_arch_post_lock_switch();
fire_sched_in_preempt_notifiers(current);
@@ -116,7 +115,7 @@
if (unlikely(prev_state == TASK_DEAD)) {
/*
* Remove function-return probe instances associated with this
-@@ -5075,6 +5079,8 @@ static int migration_cpu_stop(void *data)
+@@ -5302,6 +5306,8 @@ static int migration_cpu_stop(void *data
#ifdef CONFIG_HOTPLUG_CPU
@@ -125,7 +124,7 @@
/*
* Ensures that the idle task is using init_mm right before its cpu goes
* offline.
-@@ -5087,7 +5093,12 @@ void idle_task_exit(void)
+@@ -5314,7 +5320,12 @@ void idle_task_exit(void)
if (mm != &init_mm)
switch_mm(mm, &init_mm, current);
@@ -139,16 +138,14 @@
}
/*
-@@ -5408,6 +5419,12 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
- migrate_nr_uninterruptible(rq);
- calc_global_load_remove(rq);
- break;
-+ case CPU_DEAD:
+@@ -5622,6 +5633,10 @@ migration_call(struct notifier_block *nf
+
+ case CPU_DEAD:
+ calc_load_migrate(rq);
+ if (per_cpu(idle_last_mm, cpu)) {
+ mmdrop(per_cpu(idle_last_mm, cpu));
+ per_cpu(idle_last_mm, cpu) = NULL;
+ }
-+ break;
+ break;
#endif
}
-
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-rt-fix-migrate_enable-thinko.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0149-sched-rt-Fix-migrate_enable-thinko.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0149-sched-rt-Fix-migrate_enable-thinko.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-rt-fix-migrate_enable-thinko.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 7a11a2f07de6f75b3bd692921dea4f8ea611affd Mon Sep 17 00:00:00 2001
+Subject: sched, rt: Fix migrate_enable() thinko
From: Mike Galbraith <efault at gmx.de>
Date: Tue, 23 Aug 2011 16:12:43 +0200
-Subject: [149/256] sched, rt: Fix migrate_enable() thinko
Assigning mask = tsk_cpus_allowed(p) after p->migrate_disable = 0 ensures
that we won't see a mask change.. no push/pull, we stack tasks on one CPU.
@@ -15,16 +14,17 @@
Cc: Peter Zijlstra <peterz at infradead.org>
Link: http://lkml.kernel.org/r/1314108763.6689.4.camel@marge.simson.net
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/sched/core.c | 4 +++-
kernel/sched/debug.c | 7 +++++++
2 files changed, 10 insertions(+), 1 deletion(-)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 954dfa9..06b99e1 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -5128,12 +5128,14 @@ void migrate_enable(void)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -5355,12 +5355,14 @@ void migrate_enable(void)
*/
rq = this_rq();
raw_spin_lock_irqsave(&rq->lock, flags);
@@ -39,12 +39,12 @@
+ mask = tsk_cpus_allowed(p);
if (p->sched_class->set_cpus_allowed)
p->sched_class->set_cpus_allowed(p, mask);
- p->rt.nr_cpus_allowed = cpumask_weight(mask);
-diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
-index 09acaa1..451512ff 100644
---- a/kernel/sched/debug.c
-+++ b/kernel/sched/debug.c
-@@ -237,6 +237,9 @@ void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq)
+ p->nr_cpus_allowed = cpumask_weight(mask);
+Index: linux-stable/kernel/sched/debug.c
+===================================================================
+--- linux-stable.orig/kernel/sched/debug.c
++++ linux-stable/kernel/sched/debug.c
+@@ -237,6 +237,9 @@ void print_rt_rq(struct seq_file *m, int
P(rt_throttled);
PN(rt_time);
PN(rt_runtime);
@@ -54,14 +54,14 @@
#undef PN
#undef P
-@@ -485,6 +488,10 @@ void proc_sched_show_task(struct task_struct *p, struct seq_file *m)
+@@ -491,6 +494,10 @@ void proc_sched_show_task(struct task_st
P(se.load.weight);
P(policy);
P(prio);
+#ifdef CONFIG_PREEMPT_RT_FULL
+ P(migrate_disable);
+#endif
-+ P(rt.nr_cpus_allowed);
++ P(nr_cpus_allowed);
#undef PN
#undef __PN
#undef P
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-rt-mutex-wakeup.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0127-sched-rt-mutex-wakeup.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0127-sched-rt-mutex-wakeup.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-rt-mutex-wakeup.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 1ad26e9ea3f939e309d3ef31161f6f6a4b023b09 Mon Sep 17 00:00:00 2001
+Subject: sched-rt-mutex-wakeup.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 25 Jun 2011 09:21:04 +0200
-Subject: [127/256] sched-rt-mutex-wakeup.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
kernel/sched/core.c | 31 ++++++++++++++++++++++++++++++-
2 files changed, 33 insertions(+), 1 deletion(-)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index a198e77..d177da5 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1109,6 +1109,7 @@ struct sched_domain;
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1080,6 +1080,7 @@ struct sched_domain;
#define WF_SYNC 0x01 /* waker goes to sleep after wakup */
#define WF_FORK 0x02 /* child wakeup after fork */
#define WF_MIGRATED 0x04 /* internal use, task got migrated */
@@ -21,7 +20,7 @@
#define ENQUEUE_WAKEUP 1
#define ENQUEUE_HEAD 2
-@@ -1264,6 +1265,7 @@ enum perf_event_task_context {
+@@ -1234,6 +1235,7 @@ enum perf_event_task_context {
struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
@@ -29,7 +28,7 @@
void *stack;
atomic_t usage;
unsigned int flags; /* per process flags, defined below */
-@@ -2234,6 +2236,7 @@ extern void xtime_update(unsigned long ticks);
+@@ -2220,6 +2222,7 @@ extern void xtime_update(unsigned long t
extern int wake_up_state(struct task_struct *tsk, unsigned int state);
extern int wake_up_process(struct task_struct *tsk);
@@ -37,11 +36,11 @@
extern void wake_up_new_task(struct task_struct *tsk);
#ifdef CONFIG_SMP
extern void kick_process(struct task_struct *tsk);
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index f491ef7..720783a 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -1586,8 +1586,25 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -1588,8 +1588,25 @@ try_to_wake_up(struct task_struct *p, un
smp_wmb();
raw_spin_lock_irqsave(&p->pi_lock, flags);
@@ -68,7 +67,7 @@
success = 1; /* we're going to change ->state */
cpu = task_cpu(p);
-@@ -1659,6 +1676,18 @@ int wake_up_process(struct task_struct *p)
+@@ -1695,6 +1712,18 @@ int wake_up_process(struct task_struct *
}
EXPORT_SYMBOL(wake_up_process);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-teach-migrate_disable-about-atomic-contexts.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0150-sched-teach-migrate_disable-about-atomic-contexts.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0150-sched-teach-migrate_disable-about-atomic-contexts.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-teach-migrate_disable-about-atomic-contexts.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,10 @@
-From 2ca12d4381688b8f8520ae6c18a74f823b5b295f Mon Sep 17 00:00:00 2001
+Subject: sched: Teach migrate_disable about atomic contexts
+From: Peter Zijlstra <peterz at infradead.org>
+Date: Fri, 02 Sep 2011 14:41:37 +0200
+
+Subject: sched: teach migrate_disable about atomic contexts
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Fri, 2 Sep 2011 14:29:27 +0200
-Subject: [150/256] sched: teach migrate_disable about atomic contexts
+Date: Fri Sep 02 14:29:27 CEST 2011
<NMI> [<ffffffff812dafd8>] spin_bug+0x94/0xa8
[<ffffffff812db07f>] do_raw_spin_lock+0x43/0xea
@@ -34,25 +37,25 @@
kernel/sched/core.c | 21 +++++++++++++++++++++
2 files changed, 24 insertions(+)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index cf6809b..01f2d96 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1304,6 +1304,9 @@ struct task_struct {
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1277,6 +1277,9 @@ struct task_struct {
unsigned int policy;
#ifdef CONFIG_PREEMPT_RT_FULL
int migrate_disable;
-+#ifdef CONFIG_SCHED_DEBUG
++# ifdef CONFIG_SCHED_DEBUG
+ int migrate_disable_atomic;
-+#endif
++# endif
#endif
+ int nr_cpus_allowed;
cpumask_t cpus_allowed;
-
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 06b99e1..d2cc5a0 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -5059,6 +5059,17 @@ void migrate_disable(void)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -5286,6 +5286,17 @@ void migrate_disable(void)
unsigned long flags;
struct rq *rq;
@@ -70,7 +73,7 @@
preempt_disable();
if (p->migrate_disable) {
p->migrate_disable++;
-@@ -5107,6 +5118,16 @@ void migrate_enable(void)
+@@ -5334,6 +5345,16 @@ void migrate_enable(void)
unsigned long flags;
struct rq *rq;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sched-ttwu-ensure-success-return-is-correct.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0134-sched-ttwu-Return-success-when-only-changing-the-sav.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0134-sched-ttwu-Return-success-when-only-changing-the-sav.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sched-ttwu-ensure-success-return-is-correct.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From da5490969335713ca6076add89da5b7b473a09c3 Mon Sep 17 00:00:00 2001
+Subject: sched: ttwu: Return success when only changing the saved_state value
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 13 Dec 2011 21:42:19 +0100
-Subject: [134/256] sched: ttwu: Return success when only changing the
- saved_state value
When a task blocks on a rt lock, it saves the current state in
p->saved_state, so a lock related wake up will not destroy the
@@ -20,11 +18,11 @@
kernel/sched/core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index e88cccc..d591b69 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -1593,8 +1593,10 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -1595,8 +1595,10 @@ try_to_wake_up(struct task_struct *p, un
* if the wakeup condition is true.
*/
if (!(wake_flags & WF_LOCK_SLEEPER)) {
Added: dists/trunk/linux/debian/patches/features/all/rt/scsi-fcoe-rt-aware.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/scsi-fcoe-rt-aware.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,117 @@
+Subject: scsi-fcoe-rt-aware.patch
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Sat, 12 Nov 2011 14:00:48 +0100
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ drivers/scsi/fcoe/fcoe.c | 18 +++++++++---------
+ drivers/scsi/fcoe/fcoe_ctlr.c | 4 ++--
+ drivers/scsi/libfc/fc_exch.c | 4 ++--
+ 3 files changed, 13 insertions(+), 13 deletions(-)
+
+Index: linux-stable/drivers/scsi/fcoe/fcoe.c
+===================================================================
+--- linux-stable.orig/drivers/scsi/fcoe/fcoe.c
++++ linux-stable/drivers/scsi/fcoe/fcoe.c
+@@ -1272,7 +1272,7 @@ static void fcoe_percpu_thread_destroy(u
+ struct sk_buff *skb;
+ #ifdef CONFIG_SMP
+ struct fcoe_percpu_s *p0;
+- unsigned targ_cpu = get_cpu();
++ unsigned targ_cpu = get_cpu_light();
+ #endif /* CONFIG_SMP */
+
+ FCOE_DBG("Destroying receive thread for CPU %d\n", cpu);
+@@ -1328,7 +1328,7 @@ static void fcoe_percpu_thread_destroy(u
+ kfree_skb(skb);
+ spin_unlock_bh(&p->fcoe_rx_list.lock);
+ }
+- put_cpu();
++ put_cpu_light();
+ #else
+ /*
+ * This a non-SMP scenario where the singular Rx thread is
+@@ -1546,11 +1546,11 @@ err2:
+ static int fcoe_alloc_paged_crc_eof(struct sk_buff *skb, int tlen)
+ {
+ struct fcoe_percpu_s *fps;
+- int rc;
++ int rc, cpu = get_cpu_light();
+
+- fps = &get_cpu_var(fcoe_percpu);
++ fps = &per_cpu(fcoe_percpu, cpu);
+ rc = fcoe_get_paged_crc_eof(skb, tlen, fps);
+- put_cpu_var(fcoe_percpu);
++ put_cpu_light();
+
+ return rc;
+ }
+@@ -1745,11 +1745,11 @@ static inline int fcoe_filter_frames(str
+ return 0;
+ }
+
+- stats = per_cpu_ptr(lport->stats, get_cpu());
++ stats = per_cpu_ptr(lport->stats, get_cpu_light());
+ stats->InvalidCRCCount++;
+ if (stats->InvalidCRCCount < 5)
+ printk(KERN_WARNING "fcoe: dropping frame with CRC error\n");
+- put_cpu();
++ put_cpu_light();
+ return -EINVAL;
+ }
+
+@@ -1825,13 +1825,13 @@ static void fcoe_recv_frame(struct sk_bu
+ goto drop;
+
+ if (!fcoe_filter_frames(lport, fp)) {
+- put_cpu();
++ put_cpu_light();
+ fc_exch_recv(lport, fp);
+ return;
+ }
+ drop:
+ stats->ErrorFrames++;
+- put_cpu();
++ put_cpu_light();
+ kfree_skb(skb);
+ }
+
+Index: linux-stable/drivers/scsi/fcoe/fcoe_ctlr.c
+===================================================================
+--- linux-stable.orig/drivers/scsi/fcoe/fcoe_ctlr.c
++++ linux-stable/drivers/scsi/fcoe/fcoe_ctlr.c
+@@ -792,7 +792,7 @@ static unsigned long fcoe_ctlr_age_fcfs(
+
+ INIT_LIST_HEAD(&del_list);
+
+- stats = per_cpu_ptr(fip->lp->stats, get_cpu());
++ stats = per_cpu_ptr(fip->lp->stats, get_cpu_light());
+
+ list_for_each_entry_safe(fcf, next, &fip->fcfs, list) {
+ deadline = fcf->time + fcf->fka_period + fcf->fka_period / 2;
+@@ -828,7 +828,7 @@ static unsigned long fcoe_ctlr_age_fcfs(
+ sel_time = fcf->time;
+ }
+ }
+- put_cpu();
++ put_cpu_light();
+
+ list_for_each_entry_safe(fcf, next, &del_list, list) {
+ /* Removes fcf from current list */
+Index: linux-stable/drivers/scsi/libfc/fc_exch.c
+===================================================================
+--- linux-stable.orig/drivers/scsi/libfc/fc_exch.c
++++ linux-stable/drivers/scsi/libfc/fc_exch.c
+@@ -730,10 +730,10 @@ static struct fc_exch *fc_exch_em_alloc(
+ }
+ memset(ep, 0, sizeof(*ep));
+
+- cpu = get_cpu();
++ cpu = get_cpu_light();
+ pool = per_cpu_ptr(mp->pool, cpu);
+ spin_lock_bh(&pool->lock);
+- put_cpu();
++ put_cpu_light();
+
+ /* peek cache of free slot */
+ if (pool->left != FC_XID_UNKNOWN) {
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0242-scsi-qla2xxx-Use-local_irq_save_nort-in-qla2x00_poll.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0242-scsi-qla2xxx-Use-local_irq_save_nort-in-qla2x00_poll.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 5a4b2e924ae169d59702be5635169c483bd1b15f Mon Sep 17 00:00:00 2001
+Subject: scsi: qla2xxx: Use local_irq_save_nort() in qla2x00_poll
From: John Kacur <jkacur at redhat.com>
Date: Fri, 27 Apr 2012 12:48:46 +0200
-Subject: [242/256] scsi: qla2xxx: Use local_irq_save_nort() in qla2x00_poll
RT triggers the following:
@@ -29,10 +28,10 @@
drivers/scsi/qla2xxx/qla_inline.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h
-index 6e45764..28d9a8d 100644
---- a/drivers/scsi/qla2xxx/qla_inline.h
-+++ b/drivers/scsi/qla2xxx/qla_inline.h
+Index: linux-stable/drivers/scsi/qla2xxx/qla_inline.h
+===================================================================
+--- linux-stable.orig/drivers/scsi/qla2xxx/qla_inline.h
++++ linux-stable/drivers/scsi/qla2xxx/qla_inline.h
@@ -36,12 +36,12 @@ qla2x00_poll(struct rsp_que *rsp)
{
unsigned long flags;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0234-seqlock-Prevent-rt-starvation.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0234-seqlock-Prevent-rt-starvation.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From bc7c3dc37654e8cf7fb12264d7cf31e595d80c25 Mon Sep 17 00:00:00 2001
+Subject: seqlock: Prevent rt starvation
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 22 Feb 2012 12:03:30 +0100
-Subject: [234/256] seqlock: Prevent rt starvation
If a low prio writer gets preempted while holding the seqlock write
locked, a high prio reader spins forever on RT.
@@ -16,16 +15,17 @@
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Cc: stable-rt at vger.kernel.org
+
---
- include/linux/seqlock.h | 55 ++++++++++++++++++++++++++++++++++++++---------
- include/net/neighbour.h | 2 +-
+ include/linux/seqlock.h | 55 +++++++++++++++++++++++++++++++++++++++---------
+ include/net/neighbour.h | 2 -
2 files changed, 46 insertions(+), 11 deletions(-)
-diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
-index 1829905..c2dcae4 100644
---- a/include/linux/seqlock.h
-+++ b/include/linux/seqlock.h
-@@ -146,18 +146,30 @@ static inline int read_seqcount_retry(const seqcount_t *s, unsigned start)
+Index: linux-stable/include/linux/seqlock.h
+===================================================================
+--- linux-stable.orig/include/linux/seqlock.h
++++ linux-stable/include/linux/seqlock.h
+@@ -146,18 +146,30 @@ static inline int read_seqcount_retry(co
* Sequence counter only version assumes that callers are using their
* own mutexing.
*/
@@ -92,7 +92,7 @@
static inline unsigned read_seqretry(const seqlock_t *sl, unsigned start)
{
-@@ -216,36 +251,36 @@ static inline unsigned read_seqretry(const seqlock_t *sl, unsigned start)
+@@ -216,36 +251,36 @@ static inline unsigned read_seqretry(con
static inline void write_seqlock(seqlock_t *sl)
{
spin_lock(&sl->lock);
@@ -135,7 +135,7 @@
spin_unlock_irq(&sl->lock);
}
-@@ -254,7 +289,7 @@ static inline unsigned long __write_seqlock_irqsave(seqlock_t *sl)
+@@ -254,7 +289,7 @@ static inline unsigned long __write_seql
unsigned long flags;
spin_lock_irqsave(&sl->lock, flags);
@@ -144,7 +144,7 @@
return flags;
}
-@@ -264,7 +299,7 @@ static inline unsigned long __write_seqlock_irqsave(seqlock_t *sl)
+@@ -264,7 +299,7 @@ static inline unsigned long __write_seql
static inline void
write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)
{
@@ -153,11 +153,11 @@
spin_unlock_irqrestore(&sl->lock, flags);
}
-diff --git a/include/net/neighbour.h b/include/net/neighbour.h
-index 34c996f..8e626fa 100644
---- a/include/net/neighbour.h
-+++ b/include/net/neighbour.h
-@@ -394,7 +394,7 @@ struct neighbour_cb {
+Index: linux-stable/include/net/neighbour.h
+===================================================================
+--- linux-stable.orig/include/net/neighbour.h
++++ linux-stable/include/net/neighbour.h
+@@ -385,7 +385,7 @@ struct neighbour_cb {
#define NEIGH_CB(skb) ((struct neighbour_cb *)(skb)->cb)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/seqlock-remove-unused-functions.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0010-seqlock-Remove-unused-functions.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0010-seqlock-Remove-unused-functions.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/seqlock-remove-unused-functions.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From fbb8f521da2e9e4a3ade472fa472491c58eb197b Mon Sep 17 00:00:00 2001
+Subject: seqlock: Remove unused functions
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 16 Jul 2011 18:38:22 +0200
-Subject: [010/256] seqlock: Remove unused functions
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/seqlock.h | 21 ---------------------
1 file changed, 21 deletions(-)
-diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
-index 600060e2..cb0599c 100644
---- a/include/linux/seqlock.h
-+++ b/include/linux/seqlock.h
-@@ -69,17 +69,6 @@ static inline void write_sequnlock(seqlock_t *sl)
+Index: linux-stable/include/linux/seqlock.h
+===================================================================
+--- linux-stable.orig/include/linux/seqlock.h
++++ linux-stable/include/linux/seqlock.h
+@@ -69,17 +69,6 @@ static inline void write_sequnlock(seqlo
spin_unlock(&sl->lock);
}
@@ -30,7 +29,7 @@
/* Start of read calculation -- fetch last complete writer token */
static __always_inline unsigned read_seqbegin(const seqlock_t *sl)
{
-@@ -269,14 +258,4 @@ static inline void write_seqcount_barrier(seqcount_t *s)
+@@ -269,14 +258,4 @@ static inline void write_seqcount_barrie
#define write_sequnlock_bh(lock) \
do { write_sequnlock(lock); local_bh_enable(); } while(0)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/seqlock-use-seqcount.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0011-seqlock-Use-seqcount.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0011-seqlock-Use-seqcount.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/seqlock-use-seqcount.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,18 @@
-From 4d3af0da43d7f2d1f2665ddd5e04a24173dca6fe Mon Sep 17 00:00:00 2001
+Subject: seqlock: Use seqcount
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sat, 16 Jul 2011 18:40:26 +0200
-Subject: [011/256] seqlock: Use seqcount
No point in having different implementations for the same thing.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/seqlock.h | 174 +++++++++++++++++++++++++----------------------
- 1 file changed, 92 insertions(+), 82 deletions(-)
+ include/linux/seqlock.h | 176 +++++++++++++++++++++++++-----------------------
+ 1 file changed, 93 insertions(+), 83 deletions(-)
-diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
-index cb0599c..1829905 100644
---- a/include/linux/seqlock.h
-+++ b/include/linux/seqlock.h
+Index: linux-stable/include/linux/seqlock.h
+===================================================================
+--- linux-stable.orig/include/linux/seqlock.h
++++ linux-stable/include/linux/seqlock.h
@@ -30,81 +30,12 @@
#include <linux/preempt.h>
#include <asm/processor.h>
@@ -96,7 +95,7 @@
typedef struct seqcount {
unsigned sequence;
} seqcount_t;
-@@ -207,7 +138,6 @@ static inline int __read_seqcount_retry(const seqcount_t *s, unsigned start)
+@@ -207,7 +138,6 @@ static inline int __read_seqcount_retry(
static inline int read_seqcount_retry(const seqcount_t *s, unsigned start)
{
smp_rmb();
@@ -104,7 +103,7 @@
return __read_seqcount_retry(s, start);
}
-@@ -241,21 +171,101 @@ static inline void write_seqcount_barrier(seqcount_t *s)
+@@ -241,21 +171,101 @@ static inline void write_seqcount_barrie
s->sequence+=2;
}
@@ -113,10 +112,11 @@
+ spinlock_t lock;
+} seqlock_t;
+
-+/*
+ /*
+- * Possible sw/hw IRQ protected versions of the interfaces.
+ * These macros triggered gcc-3.x compile-time problems. We think these are
+ * OK now. Be cautious.
-+ */
+ */
+#define __SEQLOCK_UNLOCKED(lockname) \
+ { \
+ .seqcount = SEQCNT_ZERO, \
@@ -145,12 +145,11 @@
+ return read_seqcount_retry(&sl->seqcount, start);
+}
+
- /*
-- * Possible sw/hw IRQ protected versions of the interfaces.
++/*
+ * Lock out other writers and update the count.
+ * Acts like a normal spin_lock/unlock.
+ * Don't need preempt_disable() because that is in the spin_lock already.
- */
++ */
+static inline void write_seqlock(seqlock_t *sl)
+{
+ spin_lock(&sl->lock);
@@ -202,14 +201,15 @@
- do { local_irq_disable(); write_seqlock(lock); } while (0)
-#define write_seqlock_bh(lock) \
- do { local_bh_disable(); write_seqlock(lock); } while (0)
-+ do { flags = __write_seqlock_irqsave(lock); } while (0)
-
+-
-#define write_sequnlock_irqrestore(lock, flags) \
- do { write_sequnlock(lock); local_irq_restore(flags); } while(0)
-#define write_sequnlock_irq(lock) \
- do { write_sequnlock(lock); local_irq_enable(); } while(0)
-#define write_sequnlock_bh(lock) \
- do { write_sequnlock(lock); local_bh_enable(); } while(0)
++ do { flags = __write_seqlock_irqsave(lock); } while (0)
++
+static inline void
+write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)
+{
Modified: dists/trunk/linux/debian/patches/features/all/rt/series
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/series Wed Oct 24 13:58:28 2012 (r19457)
+++ dists/trunk/linux/debian/patches/features/all/rt/series Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,254 +1,602 @@
-0001-Revert-workqueue-skip-nr_running-sanity-check-in-wor.patch
-0002-slab-lockdep-Annotate-all-slab-caches.patch
-0003-x86-kprobes-Remove-remove-bogus-preempt_enable.patch
-0004-tick-Add-tick-skew-boot-option.patch
-0005-x86-hpet-Disable-MSI-on-Lenovo-W510.patch
-0006-block-Shorten-interrupt-disabled-regions.patch
-0007-sched-Distangle-worker-accounting-from-rq-3Elock.patch
-0008-mips-enable-interrupts-in-signal.patch.patch
-0009-arm-enable-interrupts-in-signal-code.patch.patch
-0010-seqlock-Remove-unused-functions.patch
-0011-seqlock-Use-seqcount.patch
-0012-timekeeping-Split-xtime_lock.patch
-0013-intel_idle-Convert-i7300_idle_lock-to-raw-spinlock.patch
-0014-tracing-Account-for-preempt-off-in-preempt_schedule.patch
-0015-signal-revert-ptrace-preempt-magic.patch.patch
-0016-arm-Mark-pmu-interupt-IRQF_NO_THREAD.patch
-0017-arm-Allow-forced-irq-threading.patch
-0018-preempt-rt-Convert-arm-boot_lock-to-raw.patch
-0019-arm-omap-make-wakeupgen_lock-raw.patch.patch
-0020-signals-Do-not-wakeup-self.patch
-0021-posix-timers-Prevent-broadcast-signals.patch
-0022-signals-Allow-rt-tasks-to-cache-one-sigqueue-struct.patch
-0023-signal-x86-Delay-calling-signals-in-atomic.patch
-0024-generic-Use-raw-local-irq-variant-for-generic-cmpxch.patch
-0025-drivers-random-Reduce-preempt-disabled-region.patch
-0026-ARM-AT91-PIT-Remove-irq-handler-when-clock-event-is-.patch
-0027-clocksource-TCLIB-Allow-higher-clock-rates-for-clock.patch
-0028-drivers-net-tulip_remove_one-needs-to-call-pci_disab.patch
-0029-drivers-net-Use-disable_irq_nosync-in-8139too.patch
-0030-drivers-net-ehea-Make-rx-irq-handler-non-threaded-IR.patch
-0031-drivers-net-at91_ether-Make-mdio-protection-rt-safe.patch
-0032-mm-Prepare-decoupling-the-page-fault-disabling-logic.patch
-0033-mm-Fixup-all-fault-handlers-to-check-current-pagefau.patch
-0034-mm-pagefault_disabled.patch
-0035-mm-raw_pagefault_disable.patch
-0036-filemap-fix-up.patch.patch
-0037-mm-Remove-preempt-count-from-pagefault-disable-enabl.patch
-0038-x86-highmem-Replace-BUG_ON-by-WARN_ON.patch
-0039-suspend-Prevent-might-sleep-splats.patch
-0040-OF-Fixup-resursive-locking-code-paths.patch
-0041-of-convert-devtree-lock.patch.patch
-0042-list-add-list-last-entry.patch.patch
-0043-mm-page-alloc-use-list-last-entry.patch.patch
-0044-mm-slab-move-debug-out.patch.patch
-0045-rwsem-inlcude-fix.patch.patch
-0046-sysctl-include-fix.patch.patch
-0047-net-flip-lock-dep-thingy.patch.patch
-0048-softirq-thread-do-softirq.patch.patch
-0049-softirq-split-out-code.patch.patch
-0050-x86-Do-not-unmask-io_apic-when-interrupt-is-in-progr.patch
-0051-x86-Do-not-disable-preemption-in-int3-on-32bit.patch
-0052-locking-various-init-fixes.patch.patch
-0053-pci-Use-__wake_up_all_locked-pci_unblock_user_cfg_ac.patch
-0054-latency-hist.patch.patch
-0055-hwlatdetect.patch.patch
-0056-localversion.patch.patch
-0057-early-printk-consolidate.patch.patch
-0058-printk-kill.patch.patch
-0059-printk-force_early_printk-boot-param-to-help-with-de.patch
-0060-rt-preempt-base-config.patch.patch
-0061-bug-BUG_ON-WARN_ON-variants-dependend-on-RT-RT.patch
-0062-rt-local_irq_-variants-depending-on-RT-RT.patch
-0063-preempt-Provide-preempt_-_-no-rt-variants.patch
-0064-ata-Do-not-disable-interrupts-in-ide-code-for-preemp.patch
-0065-ide-Do-not-disable-interrupts-for-PREEMPT-RT.patch
-0066-infiniband-Mellanox-IB-driver-patch-use-_nort-primit.patch
-0067-input-gameport-Do-not-disable-interrupts-on-PREEMPT_.patch
-0068-acpi-Do-not-disable-interrupts-on-PREEMPT_RT.patch
-0069-core-Do-not-disable-interrupts-on-RT-in-kernel-users.patch
-0070-core-Do-not-disable-interrupts-on-RT-in-res_counter..patch
-0071-usb-Use-local_irq_-_nort-variants.patch
-0072-tty-Do-not-disable-interrupts-in-put_ldisc-on-rt.patch
-0073-mm-scatterlist-dont-disable-irqs-on-RT.patch
-0074-signal-fix-up-rcu-wreckage.patch.patch
-0075-net-wireless-warn-nort.patch.patch
-0076-mm-Replace-cgroup_page-bit-spinlock.patch
-0077-buffer_head-Replace-bh_uptodate_lock-for-rt.patch
-0078-fs-jbd-jbd2-Make-state-lock-and-journal-head-lock-rt.patch
-0079-genirq-Disable-DEBUG_SHIRQ-for-rt.patch
-0080-genirq-Disable-random-call-on-preempt-rt.patch
-0081-genirq-disable-irqpoll-on-rt.patch
-0082-genirq-force-threading.patch.patch
-0083-drivers-net-fix-livelock-issues.patch
-0084-drivers-net-vortex-fix-locking-issues.patch
-0085-drivers-net-gianfar-Make-RT-aware.patch
-0086-USB-Fix-the-mouse-problem-when-copying-large-amounts.patch
-0087-local-var.patch.patch
-0088-rt-local-irq-lock.patch.patch
-0089-cpu-rt-variants.patch.patch
-0090-mm-slab-wrap-functions.patch.patch
-0091-slab-Fix-__do_drain-to-use-the-right-array-cache.patch
-0092-mm-More-lock-breaks-in-slab.c.patch
-0093-mm-page_alloc-rt-friendly-per-cpu-pages.patch
-0094-mm-page_alloc-reduce-lock-sections-further.patch
-0095-mm-page-alloc-fix.patch.patch
-0096-mm-convert-swap-to-percpu-locked.patch
-0097-mm-make-vmstat-rt-aware.patch
-0098-mm-shrink-the-page-frame-to-rt-size.patch
-0099-ARM-Initialize-ptl-lock-for-vector-page.patch
-0100-mm-Allow-only-slab-on-RT.patch
-0101-radix-tree-rt-aware.patch.patch
-0102-panic-disable-random-on-rt.patch
-0103-ipc-Make-the-ipc-code-rt-aware.patch
-0104-ipc-mqueue-Add-a-critical-section-to-avoid-a-deadloc.patch
-0105-relay-fix-timer-madness.patch
-0106-net-ipv4-route-use-locks-on-up-rt.patch.patch
-0107-workqueue-avoid-the-lock-in-cpu-dying.patch.patch
-0108-timers-prepare-for-full-preemption.patch
-0109-timers-preempt-rt-support.patch
-0110-timers-fix-timer-hotplug-on-rt.patch
-0111-timers-mov-printk_tick-to-soft-interrupt.patch
-0112-timer-delay-waking-softirqs-from-the-jiffy-tick.patch
-0113-timers-Avoid-the-switch-timers-base-set-to-NULL-tric.patch
-0114-printk-Don-t-call-printk_tick-in-printk_needs_cpu-on.patch
-0115-hrtimers-prepare-full-preemption.patch
-0116-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
-0117-hrtimer-Don-t-call-the-timer-handler-from-hrtimer_st.patch
-0118-hrtimer-Add-missing-debug_activate-aid-Was-Re-ANNOUN.patch
-0119-hrtimer-fix-reprogram-madness.patch.patch
-0120-timer-fd-Prevent-live-lock.patch
-0121-posix-timers-thread-posix-cpu-timers-on-rt.patch
-0122-posix-timers-Shorten-posix_cpu_timers-CPU-kernel-thr.patch
-0123-posix-timers-Avoid-wakeups-when-no-timers-are-active.patch
-0124-sched-delay-put-task.patch.patch
-0125-sched-limit-nr-migrate.patch.patch
-0126-sched-mmdrop-delayed.patch.patch
-0127-sched-rt-mutex-wakeup.patch.patch
-0128-sched-might-sleep-do-not-account-rcu-depth.patch.patch
-0129-sched-cond-resched.patch.patch
-0130-cond-resched-softirq-fix.patch.patch
-0131-cond-resched-lock-rt-tweak.patch.patch
-0132-sched-disable-ttwu-queue.patch.patch
-0133-sched-Disable-CONFIG_RT_GROUP_SCHED-on-RT.patch
-0134-sched-ttwu-Return-success-when-only-changing-the-sav.patch
-0135-stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
-0136-stomp-machine-mark-stomper-thread.patch.patch
-0137-stomp-machine-raw-lock.patch.patch
-0138-hotplug-Lightweight-get-online-cpus.patch
-0139-hotplug-sync_unplug-No.patch
-0140-hotplug-Reread-hotplug_pcp-on-pin_current_cpu-retry.patch
-0141-sched-migrate-disable.patch.patch
-0142-hotplug-use-migrate-disable.patch.patch
-0143-hotplug-Call-cpu_unplug_begin-before-DOWN_PREPARE.patch
-0144-ftrace-migrate-disable-tracing.patch.patch
-0145-tracing-Show-padding-as-unsigned-short.patch
-0146-migrate-disable-rt-variant.patch.patch
-0147-sched-Optimize-migrate_disable.patch
-0148-sched-Generic-migrate_disable.patch
-0149-sched-rt-Fix-migrate_enable-thinko.patch
-0150-sched-teach-migrate_disable-about-atomic-contexts.patch
-0151-sched-Postpone-actual-migration-disalbe-to-schedule.patch
-0152-sched-Do-not-compare-cpu-masks-in-scheduler.patch
-0153-sched-Have-migrate_disable-ignore-bounded-threads.patch
-0154-sched-clear-pf-thread-bound-on-fallback-rq.patch.patch
-0155-ftrace-crap.patch.patch
-0156-ring-buffer-Convert-reader_lock-from-raw_spin_lock-i.patch
-0157-net-netif_rx_ni-migrate-disable.patch.patch
-0158-softirq-Sanitize-softirq-pending-for-NOHZ-RT.patch
-0159-lockdep-rt.patch.patch
-0160-mutex-no-spin-on-rt.patch.patch
-0161-softirq-local-lock.patch.patch
-0162-softirq-Export-in_serving_softirq.patch
-0163-hardirq.h-Define-softirq_count-as-OUL-to-kill-build-.patch
-0164-softirq-Fix-unplug-deadlock.patch
-0165-softirq-disable-softirq-stacks-for-rt.patch.patch
-0166-softirq-make-fifo.patch.patch
-0167-tasklet-Prevent-tasklets-from-going-into-infinite-sp.patch
-0168-genirq-Allow-disabling-of-softirq-processing-in-irq-.patch
-0169-local-vars-migrate-disable.patch.patch
-0170-md-raid5-Make-raid5_percpu-handling-RT-aware.patch
-0171-rtmutex-lock-killable.patch.patch
-0172-rtmutex-futex-prepare-rt.patch.patch
-0173-futex-Fix-bug-on-when-a-requeued-RT-task-times-out.patch
-0174-rt-mutex-add-sleeping-spinlocks-support.patch.patch
-0175-spinlock-types-separate-raw.patch.patch
-0176-rtmutex-avoid-include-hell.patch.patch
-0177-rt-add-rt-spinlocks.patch.patch
-0178-rt-add-rt-to-mutex-headers.patch.patch
-0179-rwsem-add-rt-variant.patch.patch
-0180-rt-Add-the-preempt-rt-lock-replacement-APIs.patch
-0181-rwlocks-Fix-section-mismatch.patch
-0182-timer-handle-idle-trylock-in-get-next-timer-irq.patc.patch
-0183-RCU-Force-PREEMPT_RCU-for-PREEMPT-RT.patch
-0184-rcu-Frob-softirq-test.patch
-0185-rcu-Merge-RCU-bh-into-RCU-preempt.patch
-0186-rcu-Fix-macro-substitution-for-synchronize_rcu_bh-on.patch
-0187-rcu-more-fallout.patch.patch
-0188-rcu-Make-ksoftirqd-do-RCU-quiescent-states.patch
-0189-rcu-Fix-build-break.patch
-0190-rt-rcutree-Move-misplaced-prototype.patch
-0191-lglocks-rt.patch.patch
-0192-serial-8250-Clean-up-the-locking-for-rt.patch
-0193-serial-8250-Call-flush_to_ldisc-when-the-irq-is-thre.patch
-0194-drivers-tty-fix-omap-lock-crap.patch.patch
-0195-rt-Improve-the-serial-console-PASS_LIMIT.patch
-0196-fs-namespace-preemption-fix.patch
-0197-mm-protect-activate-switch-mm.patch.patch
-0198-mm-Protect-activate_mm-by-preempt_-disable-7Cenable-.patch
-0199-fs-block-rt-support.patch.patch
-0200-fs-ntfs-disable-interrupt-only-on-RT.patch
-0201-x86-Convert-mce-timer-to-hrtimer.patch
-0202-x86-stackprotector-Avoid-random-pool-on-rt.patch
-0203-x86-Use-generic-rwsem_spinlocks-on-rt.patch
-0204-x86-Disable-IST-stacks-for-debug-int-3-stack-fault-f.patch
-0205-workqueue-use-get-cpu-light.patch.patch
-0206-epoll.patch.patch
-0207-mm-vmalloc.patch.patch
-0208-workqueue-Fix-cpuhotplug-trainwreck.patch
-0209-workqueue-Fix-PF_THREAD_BOUND-abuse.patch
-0210-workqueue-Use-get_cpu_light-in-flush_gcwq.patch
-0211-hotplug-stuff.patch.patch
-0212-debugobjects-rt.patch.patch
-0213-jump-label-rt.patch.patch
-0214-skbufhead-raw-lock.patch.patch
-0215-x86-no-perf-irq-work-rt.patch.patch
-0216-console-make-rt-friendly.patch.patch
-0217-fix-printk-flush-of-messages.patch
-0218-power-use-generic-rwsem-on-rt.patch
-0219-power-disable-highmem-on-rt.patch.patch
-0220-arm-disable-highmem-on-rt.patch.patch
-0221-ARM-at91-tclib-Default-to-tclib-timer-for-RT.patch
-0222-mips-disable-highmem-on-rt.patch.patch
-0223-net-Avoid-livelock-in-net_tx_action-on-RT.patch
-0224-ping-sysrq.patch.patch
-0225-kgdb-serial-Short-term-workaround.patch
-0226-add-sys-kernel-realtime-entry.patch
-0227-mm-rt-kmap_atomic-scheduling.patch
-0228-ipc-sem-Rework-semaphore-wakeups.patch
-0229-x86-kvm-require-const-tsc-for-rt.patch.patch
-0230-scsi-fcoe-rt-aware.patch.patch
-0231-x86-crypto-Reduce-preempt-disabled-regions.patch
-0232-dm-Make-rt-aware.patch
-0233-cpumask-Disable-CONFIG_CPUMASK_OFFSTACK-for-RT.patch
-0234-seqlock-Prevent-rt-starvation.patch
-0235-timer-Fix-hotplug-for-rt.patch
-0236-futex-rt-Fix-possible-lockup-when-taking-pi_lock-in-.patch
-0237-ring-buffer-rt-Check-for-irqs-disabled-before-grabbi.patch
-0238-sched-rt-Fix-wait_task_interactive-to-test-rt_spin_l.patch
-0239-lglock-rt-Use-non-rt-for_each_cpu-in-rt-code.patch
-0240-cpu-Make-hotplug.lock-a-sleeping-spinlock-on-RT.patch
-0241-softirq-Check-preemption-after-reenabling-interrupts.patch
-0242-scsi-qla2xxx-Use-local_irq_save_nort-in-qla2x00_poll.patch
-0243-net-RT-REmove-preemption-disabling-in-netif_rx.patch
-0244-rt-Introduce-cpu_chill.patch
-0245-fs-dcache-Use-cpu_chill-in-trylock-loops.patch
-0246-net-Use-cpu_chill-instead-of-cpu_relax.patch
-0247-ntp-Make-ntp_lock-raw.patch
-0248-mips-remove-smp-reserve-lock.patch.patch
-0249-lockdep-Selftest-convert-spinlock-to-raw-spinlock.patch
-0250-lockdep-Selftest-Only-do-hardirq-context-test-for-ra.patch
-0251-genirq-Add-default-affinity-mask-command-line-option.patch
-0252-kconfig-disable-a-few-options-rt.patch.patch
-0253-kconfig-preempt-rt-full.patch.patch
-0254-Linux-3.4.2-rt10-REBASE.patch
+###########################################################
+# DELTA against a known Linus release
+###########################################################
+
+############################################################
+# UPSTREAM changes queued
+############################################################
+
+############################################################
+# UPSTREAM FIXES, patches pending
+############################################################
+
+############################################################
+# Stuff broken upstream, patches submitted
+############################################################
+x86-kprobes-remove-bogus-preempt-enable.patch
+
+############################################################
+# Stuff which needs addressing upstream, but requires more
+# information
+############################################################
+x86-hpet-disable-msi-on-lenovo-w510.patch
+
+############################################################
+# Stuff broken upstream, need to be sent
+############################################################
+
+############################################################
+# Submitted on LKML
+############################################################
+# SCHED BLOCK/WQ
+block-shorten-interrupt-disabled-regions.patch
+
+# CHECKME sched-distangle-worker-accounting-from-rq-3elock.patch
+
+############################################################
+# Submitted to mips ML
+############################################################
+mips-enable-interrupts-in-signal.patch
+
+############################################################
+# Submitted to ARM ML
+############################################################
+
+############################################################
+# Submitted on LKML
+############################################################
+
+# JBD
+
+# SCHED
+
+############################################################
+# Submitted on ppc-devel
+############################################################
+
+############################################################
+# Submitted to net-dev
+############################################################
+
+############################################################
+# Pending in tip
+############################################################
+
+# WATCHDOG
+
+# CLOCKSOURCE
+
+# RTMUTEX CLEANUP
+
+# RAW SPINLOCKS
+
+# X86
+
+############################################################
+# Pending in peterz's scheduler queue
+############################################################
+
+
+############################################################
+# Stuff which should go upstream ASAP
+############################################################
+
+# GENIRQ
+genirq-add-default-mask-cmdline-option.patch
+
+# PPC
+ppc-mark-low-level-handlers-no-thread.patch
+
+# Timekeeping / VDSO
+
+# SEQLOCK
+seqlock-remove-unused-functions.patch
+seqlock-use-seqcount.patch
+
+# RAW SPINLOCKS
+timekeeping-split-xtime-lock.patch
+intel_idle-convert-i7300_idle_lock-to-raw-spinlock.patch
+ntp-make-ntp-lock-raw-sigh.patch
+
+# MM memcg
+
+# Tracing
+tracing-account-for-preempt-off-in-preempt_schedule.patch
+
+# PTRACE/SIGNAL crap
+signal-revert-ptrace-preempt-magic.patch
+
+# ARM IRQF_NO_TRHEAD / IRQ THREADING SUPPORT
+arm-mark-pmu-interupt-no-thread.patch
+arm-allow-irq-threading.patch
+arm-convert-boot-lock-to-raw.patch
+arm-omap-make-wakeupgen_lock-raw.patch
+
+# PREEMPT_ENABLE_NO_RESCHED
+
+# SIGNALS / POSIXTIMERS
+signals-do-not-wake-self.patch
+posix-timers-no-broadcast.patch
+signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch
+oleg-signal-rt-fix.patch
+
+# SCHED
+
+# GENERIC CMPXCHG
+generic-cmpxchg-use-raw-local-irq.patch
+
+# SHORTEN PREEMPT DISABLED
+drivers-random-reduce-preempt-disabled-region.patch
+
+# CLOCKSOURCE
+arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch
+clocksource-tclib-allow-higher-clockrates.patch
+
+# HW LATENCY DETECTOR - this really wants a rewrite
+#hw-latency-detector.patch
+
+# DRIVERS NET
+drivers-net-tulip-add-missing-pci-disable.patch
+drivers-net-8139-disable-irq-nosync.patch
+drivers-net-ehea-mark-rx-irq-no-thread.patch
+drivers-net-at91-make-mdio-protection-rt-safe.patch
+
+# PREEMPT
+
+# PAGEFAULT DISABLE
+mm-prepare-pf-disable-discoupling.patch
+arch-use-pagefault-disabled.patch
+peter_zijlstra-frob-pagefault_disable.patch
+peterz-raw_pagefault_disable.patch
+# highmem-explicitly-disable-preemption.patch -- peterz
+filemap-fix-up.patch
+mm-remove-preempt-count-from-pf.patch
+
+# HIGHMEM
+x86-highmem-warn.patch
+
+# PM
+suspend-prevernt-might-sleep-splats.patch
+
+# DEVICE TREE
+of-fixup-recursive-locking.patch
+of-convert-devtree-lock.patch
+
+# MM/LISTS
+list-add-list-last-entry.patch
+mm-page-alloc-use-list-last-entry.patch
+mm-slab-move-debug-out.patch
+
+# INCLUDE MESS
+pid-h-include-atomic-h.patch
+sysctl-include-atomic-h.patch
+
+# NETWORKING
+net-flip-lock-dep-thingy.patch
+
+# SOFTIRQ
+softirq-thread-do-softirq.patch
+softirq-split-out-code.patch
+
+# X86
+x86-io-apic-migra-no-unmask.patch
+fix-rt-int3-x86_32-3.2-rt.patch
+
+# RCU
+
+# LOCKING INIT FIXES
+locking-various-init-fixes.patch
+
+# PCI
+pci-access-use-__wake_up_all_locked.patch
+
+#####################################################
+# Stuff which should go mainline, but wants some care
+#####################################################
+
+# SEQLOCK
+
+# ANON RW SEMAPHORES
+
+# TRACING
+latency-hist.patch
+
+# HW latency detector
+hwlatdetect.patch
+
+##################################################
+# REAL RT STUFF starts here
+##################################################
+
+# Add RT to version
+localversion.patch
+
+# PRINTK
+early-printk-consolidate.patch
+printk-kill.patch
+printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch
+
+# BASE RT CONFIG
+rt-preempt-base-config.patch
+
+# WARN/BUG_ON_RT
+bug-rt-dependend-variants.patch
+
+# LOCAL_IRQ_RT/NON_RT
+local-irq-rt-depending-variants.patch
+
+# PREEMPT NORT
+preempt-nort-rt-variants.patch
+
+# ANNOTATE local_irq_disable sites
+ata-disable-interrupts-if-non-rt.patch
+ide-use-nort-local-irq-variants.patch
+infiniband-mellanox-ib-use-nort-irq.patch
+inpt-gameport-use-local-irq-nort.patch
+acpi-use-local-irq-nort.patch
+user-use-local-irq-nort.patch
+resource-counters-use-localirq-nort.patch
+usb-hcd-use-local-irq-nort.patch
+tty-use-local-irq-nort.patch
+mm-scatterlist-dont-disable-irqs-on-RT.patch
+
+# Sigh
+signal-fix-up-rcu-wreckage.patch
+
+# ANNOTATE BUG/WARNON
+net-wireless-warn-nort.patch
+
+# BIT SPINLOCKS - SIGH
+mm-cgroup-page-bit-spinlock.patch
+fs-replace-bh_uptodate_lock-for-rt.patch
+fs-jbd-replace-bh_state-lock.patch
+
+# GENIRQ
+genirq-nodebug-shirq.patch
+genirq-disable-irqpoll-on-rt.patch
+genirq-force-threading.patch
+
+# DRIVERS NET
+drivers-net-fix-livelock-issues.patch
+drivers-net-vortex-fix-locking-issues.patch
+drivers-net-gianfar-make-rt-aware.patch
+
+# DRIVERS USB
+# Revisit. Looks weird
+#usb-rt-support.patch
+usb-fix-mouse-problem-copying-large-data.patch
+
+# LOCAL_IRQ_LOCKS
+local-var.patch
+rt-local-irq-lock.patch
+cpu-rt-variants.patch
+
+# MM SLAB
+mm-slab-wrap-functions.patch
+mm-slab-more-lock-breaks.patch
+
+# MM PAGE_ALLOC
+mm-page_alloc-rt-friendly-per-cpu-pages.patch
+mm-page_alloc-reduce-lock-sections-further.patch
+mm-page-alloc-fix.patch
+
+# MM SWAP
+mm-convert-swap-to-percpu-locked.patch
+
+# MM vmstat
+mm-make-vmstat-rt-aware.patch
+
+# MM memory
+#mm-memory-rt.patch - ZAP... is unused
+mm-shrink-the-page-frame-to-rt-size.patch
+re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch
+
+# MM SLAB only
+mm-allow-slab-rt.patch
+
+# Revisit for avr/frv/ia64/mn10300/sh/sparc ...
+#mm-quicklists-percpu-locked.patch
+
+# RADIX TREE
+radix-tree-rt-aware.patch
+
+# PANIC
+panic-disable-random-on-rt.patch
+
+# IPC
+ipc-make-rt-aware.patch
+ipc-mqueue-add-a-critical-section-to-avoid-a-deadlock.patch
+
+# RELAY
+relay-fix-timer-madness.patch
+
+# NETWORKING
+
+# WORKQUEUE SIGH
+
+# TIMERS
+timers-prepare-for-full-preemption.patch
+timers-preempt-rt-support.patch
+timers-mov-printk_tick-to-soft-interrupt.patch
+timer-delay-waking-softirqs-from-the-jiffy-tick.patch
+timers-avoid-the-base-null-otptimization-on-rt.patch
+
+# More PRINTK
+rfc-printk-don-27t-call-printk_tick-in-printk_needs_cpu.patch
+
+# HRTIMERS
+hrtimers-prepare-full-preemption.patch
+hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
+peter_zijlstra-frob-hrtimer.patch
+hrtimer-add-missing-debug_activate-aid.patch
+hrtimer-fix-reprogram-madness.patch
+timer-fd-avoid-live-lock.patch
+
+# POSIX-CPU-TIMERS
+posix-timers-thread-posix-cpu-timers-on-rt.patch
+posix-timers-shorten-cpu-timers-thread.patch
+posix-timers-avoid-wakeups-when-no-timers-are-active.patch
+
+# SCHEDULER
+sched-delay-put-task.patch
+sched-limit-nr-migrate.patch
+sched-mmdrop-delayed.patch
+sched-rt-mutex-wakeup.patch
+sched-might-sleep-do-not-account-rcu-depth.patch
+# CHECKME sched-load-balance-break-on-rq-contention.patch
+sched-cond-resched.patch
+cond-resched-softirq-rt.patch
+cond-resched-lock-rt-tweak.patch
+sched-disable-ttwu-queue.patch
+sched-disable-rt-group-sched-on-rt.patch
+sched-ttwu-ensure-success-return-is-correct.patch
+
+# STOP MACHINE
+stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
+stomp-machine-mark-stomper-thread.patch
+stomp-machine-raw-lock.patch
+
+# MIGRATE DISABLE AND PER CPU
+hotplug-light-get-online-cpus.patch
+hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch
+re-migrate_disable-race-with-cpu-hotplug-3f.patch
+sched-migrate-disable.patch
+hotplug-use-migrate-disable.patch
+hotplug-call-cpu_unplug_begin-a-little-early.patch
+
+ftrace-migrate-disable-tracing.patch
+rt-tracing-show-padding-as-unsigned-short.patch
+
+migrate-disable-rt-variant.patch
+peter_zijlstra-frob-migrate_disable.patch
+peter_zijlstra-frob-migrate_disable-2.patch
+sched-rt-fix-migrate_enable-thinko.patch
+sched-teach-migrate_disable-about-atomic-contexts.patch
+rt-sched-postpone-actual-migration-disalbe-to-schedule.patch
+rt-sched-do-not-compare-cpu-masks-in-scheduler.patch
+rt-sched-have-migrate_disable-ignore-bounded-threads.patch
+sched-clear-pf-thread-bound-on-fallback-rq.patch
+
+# FTRACE
+ftrace-crap.patch
+# CHECKME rt-ring-buffer-convert-reader_lock-from-raw_spin_lock-into-spin_lock.patch
+# CHECKME rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch
+
+# NETWORKING
+net-netif_rx_ni-migrate-disable.patch
+
+# NOHZ
+softirq-sanitize-softirq-pending.patch
+
+# LOCKDEP
+lockdep-no-softirq-accounting-on-rt.patch
+
+# SOFTIRQ local lock
+mutex-no-spin-on-rt.patch
+softirq-local-lock.patch
+softirq-export-in-serving-softirq.patch
+harirq-h-define-softirq_count-as-oul-to-kill-build-warning.patch
+softirq-fix-unplug-deadlock.patch
+softirq-disable-softirq-stacks-for-rt.patch
+softirq-make-fifo.patch
+tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch
+irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch
+
+# LOCAL VARS and GETCPU STUFF
+local-vars-migrate-disable.patch
+
+# RAID5
+md-raid5-percpu-handling-rt-aware.patch
+
+# RTMUTEX
+rtmutex-lock-killable.patch
+
+# FUTEX/RTMUTEX
+rtmutex-futex-prepare-rt.patch
+futex-requeue-pi-fix.patch
+
+# RTMUTEX
+rt-mutex-add-sleeping-spinlocks-support.patch
+spinlock-types-separate-raw.patch
+rtmutex-avoid-include-hell.patch
+rt-add-rt-spinlock-to-headers.patch
+rt-add-rt-to-mutex-headers.patch
+rwsem-add-rt-variant.patch
+rt-add-rt-locks.patch
+
+# RTMUTEX Fallout
+tasklist-lock-fix-section-conflict.patch
+
+# NOHZ/RTMUTEX
+timer-handle-idle-trylock-in-get-next-timer-irq.patch
+timer.c-fix-build-fail-for-RT_FULL.patch
+
+# RCU
+rcu-force-preempt-rcu-for-rt.patch
+peter_zijlstra-frob-rcu.patch
+rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch
+rcu-tiny-merge-bh.patch
+patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch
+rcu-fix-build-break.patch
+rt-rcutree-warn-fix.patch
+
+# LGLOCKS - lovely
+lglocks-rt.patch
+
+# DRIVERS SERIAL
+drivers-serial-cleanup-locking-for-rt.patch
+drivers-serial-call-flush_to_ldisc-when-the-irq-is-t.patch
+drivers-tty-fix-omap-lock-crap.patch
+rt-serial-warn-fix.patch
+
+# FS
+fs-namespace-preemption-fix.patch
+mm-protect-activate-switch-mm.patch
+mm-protect-activate_mm-by-preempt_-disable-7cenable-_rt.patch
+fs-block-rt-support.patch
+fs-ntfs-disable-interrupt-non-rt.patch
+
+# X86
+x86-mce-timer-hrtimer.patch
+x86-stackprot-no-random-on-rt.patch
+# x86-no-highmem-with-rt.patch -- peterz
+x86-use-gen-rwsem-spinlocks-rt.patch
+x86-disable-debug-stack.patch
+
+# CPU get light
+workqueue-use-get-cpu-light.patch
+epoll-use-get-cpu-light.patch
+mm-vmalloc-use-get-cpu-light.patch
+
+# WORKQUEUE more fixes
+# CHECKME workqueue-sanity.patch
+# CHECKME workqueue-fix-PF_THREAD_BOUND.patch
+# CHECKME workqueue-hotplug-fix.patch
+# CHECKME workqueue-more-hotplug-fallout.patch
+
+# DEBUGOBJECTS
+debugobjects-rt.patch
+
+# JUMPLABEL
+jump-label-rt.patch
+
+# NET
+skbufhead-raw-lock.patch
+
+# PERF
+perf-move-irq-work-to-softirq-in-rt.patch
+
+# CONSOLE. NEEDS more thought !!!
+printk-rt-aware.patch
+
+# POWERC
+power-use-generic-rwsem-on-rt.patch
+power-disable-highmem-on-rt.patch
+
+# ARM
+arm-disable-highmem-on-rt.patch
+arm-at91-tclib-default-to-tclib-timer-for-rt.patch
+
+# MIPS
+mips-disable-highmem-on-rt.patch
+
+# NETWORK livelock fix
+net-tx-action-avoid-livelock-on-rt.patch
+
+# NETWORK DEBUGGING AID
+ping-sysrq.patch
+
+# KGDB
+kgb-serial-hackaround.patch
+
+# SYSFS - RT indicator
+sysfs-realtime-entry.patch
+
+# KMAP/HIGHMEM
+mm-rt-kmap-atomic-scheduling.patch
+
+# IPC
+ipc-sem-rework-semaphore-wakeups.patch
+
+# SYSRQ
+
+# KVM require constant freq TSC (smp function call -> cpufreq)
+x86-kvm-require-const-tsc-for-rt.patch
+
+# SCSI/FCOE
+scsi-fcoe-rt-aware.patch
+
+# X86 crypto
+x86-crypto-reduce-preempt-disabled-regions.patch
+
+# Device mapper
+dm-make-rt-aware.patch
+
+# ACPI
+# Dropped those two as they cause a scheduling in atomic failure and
+# we have no clue why we made those locks raw in the first place.
+# acpi-make-gbl-hardware-lock-raw.patch
+# acpi-make-ec-lock-raw-as-well.patch
+
+# This one is just a follow up to the raw spin locks
+# Simple raw spinlock based waitqueue
+# wait-simple-version.patch
+# acpi-gpe-use-wait-simple.patch
+
+# CPUMASK OFFSTACK
+cpumask-disable-offstack-on-rt.patch
+
+# Various fixes - fold them back
+seqlock-prevent-rt-starvation.patch
+#fs-protect-opencoded-isize-seqcount.patch
+#net-u64-stat-protect-seqcount.patch
+rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch
+
+cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch
+
+softirq-preempt-fix-3-re.patch
+scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch
+upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch
+
+# FS LIVELOCK PREVENTION
+rt-introduce-cpu-chill.patch
+fs-dcache-use-cpu-chill-in-trylock-loops.patch
+net-use-cpu-chill.patch
+
+# LOCKDEP
+lockdep-selftest-convert-spinlock-to-raw-spinlock.patch
+lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch
+
+rt-disable-rt-group-sched.patch
+fs-jbd-pull-plug-when-waiting-for-space.patch
+perf-make-swevent-hrtimer-irqsafe.patch
+cpu-rt-rework-cpu-down.patch
+
+# Stable-rt stuff: Fold back when Steve grabbed it
+random-make-it-work-on-rt.patch
+softirq-init-softirq-local-lock-after-per-cpu-section-is-set-up.patch
+mm-slab-fix-potential-deadlock.patch
+mm-page-alloc-use-local-lock-on-target-cpu.patch
+rt-rw-lockdep-annotations.patch
+sched-better-debug-output-for-might-sleep.patch
+stomp-machine-deal-clever-with-stopper-lock.patch
+
+# 3.6 specific updates
+net-another-local-irq-disable-alloc-atomic-headache.patch
+net-use-cpu-light-in-ip-send-unicast-reply.patch
+peterz-srcu-crypto-chain.patch
+crypto-make-core-static-and-init-scru-early.patch
+x86-perf-uncore-deal-with-kfree.patch
+softirq-make-serving-softirqs-a-task-flag.patch
+softirq-split-handling-function.patch
+softirq-split-locks.patch
+
+# Needs more thought
+# block-wrap-raise-softirq-in-local-bh-to-avoid-context-switches.patch
+# nohz-fix-sirq-fallout.patch
+
+# Enable full RT
+rcu-tiny-solve-rt-mistery.patch
+kconfig-disable-a-few-options-rt.patch
+kconfig-preempt-rt-full.patch
+#rt-replace-rt-spin-lock-to-raw-one-in-res_counter.patch
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0074-signal-fix-up-rcu-wreckage.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0074-signal-fix-up-rcu-wreckage.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From dd353e8519898078c6fdb5df18362b69f3f88bfe Mon Sep 17 00:00:00 2001
+Subject: signal-fix-up-rcu-wreckage.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 22 Jul 2011 08:07:08 +0200
-Subject: [074/256] signal-fix-up-rcu-wreckage.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/signal.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
-diff --git a/kernel/signal.c b/kernel/signal.c
-index 65cb5b4..3d32651 100644
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -1401,12 +1401,12 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
+Index: linux-stable/kernel/signal.c
+===================================================================
+--- linux-stable.orig/kernel/signal.c
++++ linux-stable/kernel/signal.c
+@@ -1394,12 +1394,12 @@ struct sighand_struct *__lock_task_sigha
struct sighand_struct *sighand;
for (;;) {
@@ -27,7 +26,7 @@
break;
}
-@@ -1417,7 +1417,7 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
+@@ -1410,7 +1410,7 @@ struct sighand_struct *__lock_task_sigha
}
spin_unlock(&sighand->siglock);
rcu_read_unlock();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/signal-revert-ptrace-preempt-magic.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0015-signal-revert-ptrace-preempt-magic.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0015-signal-revert-ptrace-preempt-magic.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/signal-revert-ptrace-preempt-magic.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 62a95221e057c426137cdcce9f252716b532e3de Mon Sep 17 00:00:00 2001
+Subject: signal-revert-ptrace-preempt-magic.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 21 Sep 2011 19:57:12 +0200
-Subject: [015/256] signal-revert-ptrace-preempt-magic.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/signal.c | 8 --------
1 file changed, 8 deletions(-)
-diff --git a/kernel/signal.c b/kernel/signal.c
-index 17afcaf..6b5071f 100644
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -1909,15 +1909,7 @@ static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info)
+Index: linux-stable/kernel/signal.c
+===================================================================
+--- linux-stable.orig/kernel/signal.c
++++ linux-stable/kernel/signal.c
+@@ -1898,15 +1898,7 @@ static void ptrace_stop(int exit_code, i
if (gstop_done && ptrace_reparented(current))
do_notify_parent_cldstop(current, false, why);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0022-signals-Allow-rt-tasks-to-cache-one-sigqueue-struct.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0022-signals-Allow-rt-tasks-to-cache-one-sigqueue-struct.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,25 +1,25 @@
-From 1b1af762f485c34db690823e315a89a67f840181 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 3 Jul 2009 08:44:56 -0500
-Subject: [022/256] signals: Allow rt tasks to cache one sigqueue struct
+Subject: signals: Allow rt tasks to cache one sigqueue struct
To avoid allocation allow rt tasks to cache one sigqueue struct in
task struct.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- include/linux/sched.h | 1 +
- include/linux/signal.h | 1 +
- kernel/exit.c | 2 +-
- kernel/fork.c | 1 +
- kernel/signal.c | 83 +++++++++++++++++++++++++++++++++++++++++++++---
+ include/linux/sched.h | 1
+ include/linux/signal.h | 1
+ kernel/exit.c | 2 -
+ kernel/fork.c | 1
+ kernel/signal.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++---
5 files changed, 83 insertions(+), 5 deletions(-)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 81a173c..b546194 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1435,6 +1435,7 @@ struct task_struct {
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1403,6 +1403,7 @@ struct task_struct {
/* signal handlers */
struct signal_struct *signal;
struct sighand_struct *sighand;
@@ -27,11 +27,11 @@
sigset_t blocked, real_blocked;
sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */
-diff --git a/include/linux/signal.h b/include/linux/signal.h
-index 7987ce74..24cc7a4 100644
---- a/include/linux/signal.h
-+++ b/include/linux/signal.h
-@@ -229,6 +229,7 @@ static inline void init_sigpending(struct sigpending *sig)
+Index: linux-stable/include/linux/signal.h
+===================================================================
+--- linux-stable.orig/include/linux/signal.h
++++ linux-stable/include/linux/signal.h
+@@ -229,6 +229,7 @@ static inline void init_sigpending(struc
}
extern void flush_sigqueue(struct sigpending *queue);
@@ -39,11 +39,11 @@
/* Test if 'sig' is valid signal. Use this instead of testing _NSIG directly */
static inline int valid_signal(unsigned long sig)
-diff --git a/kernel/exit.c b/kernel/exit.c
-index d8bd3b42..35ab292 100644
---- a/kernel/exit.c
-+++ b/kernel/exit.c
-@@ -143,7 +143,7 @@ static void __exit_signal(struct task_struct *tsk)
+Index: linux-stable/kernel/exit.c
+===================================================================
+--- linux-stable.orig/kernel/exit.c
++++ linux-stable/kernel/exit.c
+@@ -155,7 +155,7 @@ static void __exit_signal(struct task_st
* Do this under ->siglock, we can race with another thread
* doing sigqueue_free() if we have SIGQUEUE_PREALLOC signals.
*/
@@ -52,11 +52,11 @@
tsk->sighand = NULL;
spin_unlock(&sighand->siglock);
-diff --git a/kernel/fork.c b/kernel/fork.c
-index 8163333..b767e68 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -1206,6 +1206,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+Index: linux-stable/kernel/fork.c
+===================================================================
+--- linux-stable.orig/kernel/fork.c
++++ linux-stable/kernel/fork.c
+@@ -1239,6 +1239,7 @@ static struct task_struct *copy_process(
spin_lock_init(&p->alloc_lock);
init_sigpending(&p->pending);
@@ -64,11 +64,11 @@
p->utime = p->stime = p->gtime = 0;
p->utimescaled = p->stimescaled = 0;
-diff --git a/kernel/signal.c b/kernel/signal.c
-index 099746c..a05a4db 100644
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -345,13 +345,45 @@ static bool task_participate_group_stop(struct task_struct *task)
+Index: linux-stable/kernel/signal.c
+===================================================================
+--- linux-stable.orig/kernel/signal.c
++++ linux-stable/kernel/signal.c
+@@ -346,13 +346,45 @@ static bool task_participate_group_stop(
return false;
}
@@ -115,7 +115,7 @@
{
struct sigqueue *q = NULL;
struct user_struct *user;
-@@ -368,7 +400,10 @@ __sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimi
+@@ -369,7 +401,10 @@ __sigqueue_alloc(int sig, struct task_st
if (override_rlimit ||
atomic_read(&user->sigpending) <=
task_rlimit(t, RLIMIT_SIGPENDING)) {
@@ -127,7 +127,7 @@
} else {
print_dropped_signal(sig);
}
-@@ -385,6 +420,13 @@ __sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimi
+@@ -386,6 +421,13 @@ __sigqueue_alloc(int sig, struct task_st
return q;
}
@@ -141,7 +141,7 @@
static void __sigqueue_free(struct sigqueue *q)
{
if (q->flags & SIGQUEUE_PREALLOC)
-@@ -394,6 +436,21 @@ static void __sigqueue_free(struct sigqueue *q)
+@@ -395,6 +437,21 @@ static void __sigqueue_free(struct sigqu
kmem_cache_free(sigqueue_cachep, q);
}
@@ -163,7 +163,7 @@
void flush_sigqueue(struct sigpending *queue)
{
struct sigqueue *q;
-@@ -407,6 +464,21 @@ void flush_sigqueue(struct sigpending *queue)
+@@ -408,6 +465,21 @@ void flush_sigqueue(struct sigpending *q
}
/*
@@ -185,7 +185,7 @@
* Flush all pending signals for a task.
*/
void __flush_signals(struct task_struct *t)
-@@ -555,7 +627,7 @@ static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
+@@ -556,7 +628,7 @@ static void collect_signal(int sig, stru
still_pending:
list_del_init(&first->list);
copy_siginfo(info, &first->info);
@@ -194,7 +194,7 @@
} else {
/*
* Ok, it wasn't in the queue. This must be
-@@ -601,6 +673,8 @@ int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
+@@ -602,6 +674,8 @@ int dequeue_signal(struct task_struct *t
{
int signr;
@@ -203,7 +203,7 @@
/* We only dequeue private signals from ourselves, we don't let
* signalfd steal them
*/
-@@ -1557,7 +1631,8 @@ EXPORT_SYMBOL(kill_pid);
+@@ -1548,7 +1622,8 @@ EXPORT_SYMBOL(kill_pid);
*/
struct sigqueue *sigqueue_alloc(void)
{
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/signals-do-not-wake-self.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0020-signals-Do-not-wakeup-self.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0020-signals-Do-not-wakeup-self.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/signals-do-not-wake-self.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From d593d9a98592b53916884a81482f8102d7d591cf Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 3 Jul 2009 08:44:44 -0500
-Subject: [020/256] signals: Do not wakeup self
+Subject: signals: Do not wakeup self
Signals which are delivered by current to current can do without
waking up current :)
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/signal.c | 3 +++
1 file changed, 3 insertions(+)
-diff --git a/kernel/signal.c b/kernel/signal.c
-index 6b5071f..099746c 100644
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -683,6 +683,9 @@ void signal_wake_up(struct task_struct *t, int resume)
+Index: linux-stable/kernel/signal.c
+===================================================================
+--- linux-stable.orig/kernel/signal.c
++++ linux-stable/kernel/signal.c
+@@ -684,6 +684,9 @@ void signal_wake_up(struct task_struct *
set_tsk_thread_flag(t, TIF_SIGPENDING);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/skbufhead-raw-lock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0214-skbufhead-raw-lock.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0214-skbufhead-raw-lock.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/skbufhead-raw-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From b27d25a2928bb69b76ba3be5b4a2416a8106e7b2 Mon Sep 17 00:00:00 2001
+Subject: skbufhead-raw-lock.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 12 Jul 2011 15:38:34 +0200
-Subject: [214/256] skbufhead-raw-lock.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -10,22 +9,22 @@
net/core/dev.c | 26 ++++++++++++++++++++------
3 files changed, 28 insertions(+), 6 deletions(-)
-diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index 33900a5..1fcc9ba 100644
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -1734,6 +1734,7 @@ struct softnet_data {
- unsigned dropped;
+Index: linux-stable/include/linux/netdevice.h
+===================================================================
+--- linux-stable.orig/include/linux/netdevice.h
++++ linux-stable/include/linux/netdevice.h
+@@ -1765,6 +1765,7 @@ struct softnet_data {
+ unsigned int dropped;
struct sk_buff_head input_pkt_queue;
struct napi_struct backlog;
+ struct sk_buff_head tofree_queue;
};
static inline void input_queue_head_incr(struct softnet_data *sd)
-diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index c168907..1a9b025 100644
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
+Index: linux-stable/include/linux/skbuff.h
+===================================================================
+--- linux-stable.orig/include/linux/skbuff.h
++++ linux-stable/include/linux/skbuff.h
@@ -132,6 +132,7 @@ struct sk_buff_head {
__u32 qlen;
@@ -34,7 +33,7 @@
};
struct sk_buff;
-@@ -967,6 +968,12 @@ static inline void skb_queue_head_init(struct sk_buff_head *list)
+@@ -995,6 +996,12 @@ static inline void skb_queue_head_init(s
__skb_queue_head_init(list);
}
@@ -47,11 +46,11 @@
static inline void skb_queue_head_init_class(struct sk_buff_head *list,
struct lock_class_key *class)
{
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 8b645be..4e15710 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -220,14 +220,14 @@ static inline struct hlist_head *dev_index_hash(struct net *net, int ifindex)
+Index: linux-stable/net/core/dev.c
+===================================================================
+--- linux-stable.orig/net/core/dev.c
++++ linux-stable/net/core/dev.c
+@@ -221,14 +221,14 @@ static inline struct hlist_head *dev_ind
static inline void rps_lock(struct softnet_data *sd)
{
#ifdef CONFIG_RPS
@@ -68,7 +67,7 @@
#endif
}
-@@ -3327,7 +3327,7 @@ static void flush_backlog(void *arg)
+@@ -3399,7 +3399,7 @@ static void flush_backlog(void *arg)
skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) {
if (skb->dev == dev) {
__skb_unlink(skb, &sd->input_pkt_queue);
@@ -77,7 +76,7 @@
input_queue_head_incr(sd);
}
}
-@@ -3336,10 +3336,13 @@ static void flush_backlog(void *arg)
+@@ -3408,10 +3408,13 @@ static void flush_backlog(void *arg)
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
if (skb->dev == dev) {
__skb_unlink(skb, &sd->process_queue);
@@ -92,7 +91,7 @@
}
static int napi_gro_complete(struct sk_buff *skb)
-@@ -3823,10 +3826,17 @@ static void net_rx_action(struct softirq_action *h)
+@@ -3900,10 +3903,17 @@ static void net_rx_action(struct softirq
struct softnet_data *sd = &__get_cpu_var(softnet_data);
unsigned long time_limit = jiffies + 2;
int budget = netdev_budget;
@@ -110,7 +109,7 @@
while (!list_empty(&sd->poll_list)) {
struct napi_struct *n;
int work, weight;
-@@ -6253,6 +6263,9 @@ static int dev_cpu_callback(struct notifier_block *nfb,
+@@ -6334,6 +6344,9 @@ static int dev_cpu_callback(struct notif
netif_rx(skb);
input_queue_head_incr(oldsd);
}
@@ -120,7 +119,7 @@
return NOTIFY_OK;
}
-@@ -6516,8 +6529,9 @@ static int __init net_dev_init(void)
+@@ -6598,8 +6611,9 @@ static int __init net_dev_init(void)
struct softnet_data *sd = &per_cpu(softnet_data, i);
memset(sd, 0, sizeof(*sd));
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0165-softirq-disable-softirq-stacks-for-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0165-softirq-disable-softirq-stacks-for-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 0a78fc3e819a0fbd2eb4a5e9c9741c6ba9c43a4f Mon Sep 17 00:00:00 2001
+Subject: softirq-disable-softirq-stacks-for-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 18 Jul 2011 13:59:17 +0200
-Subject: [165/256] softirq-disable-softirq-stacks-for-rt.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -16,11 +15,11 @@
include/linux/interrupt.h | 3 +--
9 files changed, 17 insertions(+), 3 deletions(-)
-diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
-index 641da9e..7841465 100644
---- a/arch/powerpc/kernel/irq.c
-+++ b/arch/powerpc/kernel/irq.c
-@@ -538,6 +538,7 @@ void irq_ctx_init(void)
+Index: linux-stable/arch/powerpc/kernel/irq.c
+===================================================================
+--- linux-stable.orig/arch/powerpc/kernel/irq.c
++++ linux-stable/arch/powerpc/kernel/irq.c
+@@ -584,6 +584,7 @@ void irq_ctx_init(void)
}
}
@@ -28,7 +27,7 @@
static inline void do_softirq_onstack(void)
{
struct thread_info *curtp, *irqtp;
-@@ -574,6 +575,7 @@ void do_softirq(void)
+@@ -620,6 +621,7 @@ void do_softirq(void)
local_irq_restore(flags);
}
@@ -36,10 +35,10 @@
irq_hw_number_t virq_to_hw(unsigned int virq)
{
-diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S
-index 7cd07b4..46c6073 100644
---- a/arch/powerpc/kernel/misc_32.S
-+++ b/arch/powerpc/kernel/misc_32.S
+Index: linux-stable/arch/powerpc/kernel/misc_32.S
+===================================================================
+--- linux-stable.orig/arch/powerpc/kernel/misc_32.S
++++ linux-stable/arch/powerpc/kernel/misc_32.S
@@ -36,6 +36,7 @@
.text
@@ -56,10 +55,10 @@
_GLOBAL(call_handle_irq)
mflr r0
-diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
-index 616921e..2961d75 100644
---- a/arch/powerpc/kernel/misc_64.S
-+++ b/arch/powerpc/kernel/misc_64.S
+Index: linux-stable/arch/powerpc/kernel/misc_64.S
+===================================================================
+--- linux-stable.orig/arch/powerpc/kernel/misc_64.S
++++ linux-stable/arch/powerpc/kernel/misc_64.S
@@ -29,6 +29,7 @@
.text
@@ -76,10 +75,10 @@
_GLOBAL(call_handle_irq)
ld r8,0(r6)
-diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c
-index a3ee919..9127bc0 100644
---- a/arch/sh/kernel/irq.c
-+++ b/arch/sh/kernel/irq.c
+Index: linux-stable/arch/sh/kernel/irq.c
+===================================================================
+--- linux-stable.orig/arch/sh/kernel/irq.c
++++ linux-stable/arch/sh/kernel/irq.c
@@ -149,6 +149,7 @@ void irq_ctx_exit(int cpu)
hardirq_ctx[cpu] = NULL;
}
@@ -96,11 +95,11 @@
#else
static inline void handle_one_irq(unsigned int irq)
{
-diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
-index dff2c3d..618d4c2 100644
---- a/arch/sparc/kernel/irq_64.c
-+++ b/arch/sparc/kernel/irq_64.c
-@@ -698,6 +698,7 @@ void __irq_entry handler_irq(int pil, struct pt_regs *regs)
+Index: linux-stable/arch/sparc/kernel/irq_64.c
+===================================================================
+--- linux-stable.orig/arch/sparc/kernel/irq_64.c
++++ linux-stable/arch/sparc/kernel/irq_64.c
+@@ -698,6 +698,7 @@ void __irq_entry handler_irq(int pil, st
set_irq_regs(old_regs);
}
@@ -116,11 +115,11 @@
#ifdef CONFIG_HOTPLUG_CPU
void fixup_irqs(void)
-diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
-index cdc79b5..1bfb07b 100644
---- a/arch/x86/kernel/entry_64.S
-+++ b/arch/x86/kernel/entry_64.S
-@@ -1240,6 +1240,7 @@ ENTRY(kernel_execve)
+Index: linux-stable/arch/x86/kernel/entry_64.S
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/entry_64.S
++++ linux-stable/arch/x86/kernel/entry_64.S
+@@ -1252,6 +1252,7 @@ ENTRY(kernel_execve)
CFI_ENDPROC
END(kernel_execve)
@@ -128,7 +127,7 @@
/* Call softirq on interrupt stack. Interrupts are off. */
ENTRY(call_softirq)
CFI_STARTPROC
-@@ -1259,6 +1260,7 @@ ENTRY(call_softirq)
+@@ -1271,6 +1272,7 @@ ENTRY(call_softirq)
ret
CFI_ENDPROC
END(call_softirq)
@@ -136,10 +135,10 @@
#ifdef CONFIG_XEN
zeroentry xen_hypervisor_callback xen_do_hypervisor_callback
-diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c
-index 58b7f27..a7b4e1b 100644
---- a/arch/x86/kernel/irq_32.c
-+++ b/arch/x86/kernel/irq_32.c
+Index: linux-stable/arch/x86/kernel/irq_32.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/irq_32.c
++++ linux-stable/arch/x86/kernel/irq_32.c
@@ -149,6 +149,7 @@ void __cpuinit irq_ctx_init(int cpu)
cpu, per_cpu(hardirq_ctx, cpu), per_cpu(softirq_ctx, cpu));
}
@@ -156,11 +155,11 @@
bool handle_irq(unsigned irq, struct pt_regs *regs)
{
-diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c
-index d04d3ec..831f247 100644
---- a/arch/x86/kernel/irq_64.c
-+++ b/arch/x86/kernel/irq_64.c
-@@ -88,7 +88,7 @@ bool handle_irq(unsigned irq, struct pt_regs *regs)
+Index: linux-stable/arch/x86/kernel/irq_64.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/irq_64.c
++++ linux-stable/arch/x86/kernel/irq_64.c
+@@ -88,7 +88,7 @@ bool handle_irq(unsigned irq, struct pt_
return true;
}
@@ -174,11 +173,11 @@
local_irq_restore(flags);
}
+#endif
-diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index e53bd8b..5dde591 100644
---- a/include/linux/interrupt.h
-+++ b/include/linux/interrupt.h
-@@ -454,10 +454,9 @@ struct softirq_action
+Index: linux-stable/include/linux/interrupt.h
+===================================================================
+--- linux-stable.orig/include/linux/interrupt.h
++++ linux-stable/include/linux/interrupt.h
+@@ -448,10 +448,9 @@ struct softirq_action
void (*action)(struct softirq_action *);
};
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-export-in-serving-softirq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0162-softirq-Export-in_serving_softirq.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0162-softirq-Export-in_serving_softirq.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-export-in-serving-softirq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 87e052e01a12050b98d72bbbce9e31321ab891a7 Mon Sep 17 00:00:00 2001
+Subject: softirq: Export in_serving_softirq()
From: John Kacur <jkacur at redhat.com>
Date: Mon, 14 Nov 2011 02:44:43 +0100
-Subject: [162/256] softirq: Export in_serving_softirq()
ERROR: "in_serving_softirq" [net/sched/cls_cgroup.ko] undefined!
@@ -12,15 +11,16 @@
Cc: stable-rt at vger.kernel.org
Link: http://lkml.kernel.org/r/1321235083-21756-2-git-send-email-jkacur@redhat.com
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/softirq.c | 1 +
1 file changed, 1 insertion(+)
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index a6207be..5741cf7 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
-@@ -439,6 +439,7 @@ int in_serving_softirq(void)
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
+@@ -448,6 +448,7 @@ int in_serving_softirq(void)
preempt_enable();
return res;
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-fix-unplug-deadlock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0164-softirq-Fix-unplug-deadlock.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0164-softirq-Fix-unplug-deadlock.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-fix-unplug-deadlock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,10 @@
-From 47d14a163f22cc98ed1066403b17b834766de351 Mon Sep 17 00:00:00 2001
+Subject: softirq: Fix unplug deadlock
+From: Peter Zijlstra <peterz at infradead.org>
+Date: Fri, 30 Sep 2011 15:59:16 +0200
+
+Subject: [RT] softirq: Fix unplug deadlock
From: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Date: Fri, 30 Sep 2011 15:52:14 +0200
-Subject: [164/256] softirq: Fix unplug deadlock
+Date: Fri Sep 30 15:52:14 CEST 2011
If ksoftirqd gets woken during hot-unplug, __thread_do_softirq() will
call pin_current_cpu() which will block on the held cpu_hotplug.lock.
@@ -27,11 +30,11 @@
kernel/softirq.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index 5741cf7..d1fdb91 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
-@@ -1078,9 +1078,8 @@ static int __cpuinit cpu_callback(struct notifier_block *nfb,
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
+@@ -1087,9 +1087,8 @@ static int __cpuinit cpu_callback(struct
int hotcpu = (unsigned long)hcpu;
struct task_struct *p;
@@ -42,7 +45,7 @@
p = kthread_create_on_node(run_ksoftirqd,
hcpu,
cpu_to_node(hotcpu),
-@@ -1093,19 +1092,16 @@ static int __cpuinit cpu_callback(struct notifier_block *nfb,
+@@ -1102,19 +1101,16 @@ static int __cpuinit cpu_callback(struct
per_cpu(ksoftirqd, hotcpu) = p;
break;
case CPU_ONLINE:
Added: dists/trunk/linux/debian/patches/features/all/rt/softirq-init-softirq-local-lock-after-per-cpu-section-is-set-up.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-init-softirq-local-lock-after-per-cpu-section-is-set-up.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,135 @@
+Subject: softirq: Init softirq local lock after per cpu section is set up
+From: Steven Rostedt <rostedt at goodmis.org>
+Date: Thu, 04 Oct 2012 11:02:04 -0400
+
+I discovered this bug when booting 3.4-rt on my powerpc box. It crashed
+with the following report:
+
+------------[ cut here ]------------
+kernel BUG at /work/rt/stable-rt.git/kernel/rtmutex_common.h:75!
+Oops: Exception in kernel mode, sig: 5 [#1]
+PREEMPT SMP NR_CPUS=64 NUMA PA Semi PWRficient
+Modules linked in:
+NIP: c0000000004aa03c LR: c0000000004aa01c CTR: c00000000009b2ac
+REGS: c00000003e8d7950 TRAP: 0700 Not tainted (3.4.11-test-rt19)
+MSR: 9000000000029032 <SF,HV,EE,ME,IR,DR,RI> CR: 24000082 XER: 20000000
+SOFTE: 0
+TASK = c00000003e8fdcd0[11] 'ksoftirqd/1' THREAD: c00000003e8d4000 CPU: 1
+GPR00: 0000000000000001 c00000003e8d7bd0 c000000000d6cbb0 0000000000000000
+GPR04: c00000003e8fdcd0 0000000000000000 0000000024004082 c000000000011454
+GPR08: 0000000000000000 0000000080000001 c00000003e8fdcd1 0000000000000000
+GPR12: 0000000024000084 c00000000fff0280 ffffffffffffffff 000000003ffffad8
+GPR16: ffffffffffffffff 000000000072c798 0000000000000060 0000000000000000
+GPR20: 0000000000642741 000000000072c858 000000003ffffaf0 0000000000000417
+GPR24: 000000000072dcd0 c00000003e7ff990 0000000000000000 0000000000000001
+GPR28: 0000000000000000 c000000000792340 c000000000ccec78 c000000001182338
+NIP [c0000000004aa03c] .wakeup_next_waiter+0x44/0xb8
+LR [c0000000004aa01c] .wakeup_next_waiter+0x24/0xb8
+Call Trace:
+[c00000003e8d7bd0] [c0000000004aa01c] .wakeup_next_waiter+0x24/0xb8 (unreliable)
+[c00000003e8d7c60] [c0000000004a0320] .rt_spin_lock_slowunlock+0x8c/0xe4
+[c00000003e8d7ce0] [c0000000004a07cc] .rt_spin_unlock+0x54/0x64
+[c00000003e8d7d60] [c0000000000636bc] .__thread_do_softirq+0x130/0x174
+[c00000003e8d7df0] [c00000000006379c] .run_ksoftirqd+0x9c/0x1a4
+[c00000003e8d7ea0] [c000000000080b68] .kthread+0xa8/0xb4
+[c00000003e8d7f90] [c00000000001c2f8] .kernel_thread+0x54/0x70
+Instruction dump:
+60000000 e86d01c8 38630730 4bff7061 60000000 ebbf0008 7c7c1b78 e81d0040
+7fe00278 7c000074 7800d182 68000001 <0b000000> e88d01c8 387d0010 38840738
+
+The rtmutex_common.h:75 is:
+
+rt_mutex_top_waiter(struct rt_mutex *lock)
+{
+ struct rt_mutex_waiter *w;
+
+ w = plist_first_entry(&lock->wait_list, struct rt_mutex_waiter,
+ list_entry);
+ BUG_ON(w->lock != lock);
+
+ return w;
+}
+
+Where the waiter->lock is corrupted. I saw various other random bugs
+that all had to with the softirq lock and plist. As plist needs to be
+initialized before it is used I investigated how this lock is
+initialized. It's initialized with:
+
+void __init softirq_early_init(void)
+{
+ local_irq_lock_init(local_softirq_lock);
+}
+
+Where:
+
+#define local_irq_lock_init(lvar) \
+ do { \
+ int __cpu; \
+ for_each_possible_cpu(__cpu) \
+ spin_lock_init(&per_cpu(lvar, __cpu).lock); \
+ } while (0)
+
+As the softirq lock is a local_irq_lock, which is a per_cpu lock, the
+initialization is done to all per_cpu versions of the lock. But lets
+look at where the softirq_early_init() is called from.
+
+In init/main.c: start_kernel()
+
+/*
+ * Interrupts are still disabled. Do necessary setups, then
+ * enable them
+ */
+ softirq_early_init();
+ tick_init();
+ boot_cpu_init();
+ page_address_init();
+ printk(KERN_NOTICE "%s", linux_banner);
+ setup_arch(&command_line);
+ mm_init_owner(&init_mm, &init_task);
+ mm_init_cpumask(&init_mm);
+ setup_command_line(command_line);
+ setup_nr_cpu_ids();
+ setup_per_cpu_areas();
+ smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
+
+One of the first things that is called is the initialization of the
+softirq lock. But if you look further down, we see the per_cpu areas
+have not been set up yet. Thus initializing a local_irq_lock() before
+the per_cpu section is set up, may not work as it is initializing the
+per cpu locks before the per cpu exists.
+
+By moving the softirq_early_init() right after setup_per_cpu_areas(),
+the kernel boots fine.
+
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+Cc: Clark Williams <clark at redhat.com>
+Cc: John Kacur <jkacur at redhat.com>
+Cc: Carsten Emde <cbe at osadl.org>
+Cc: vomlehn at texas.net
+Link: http://lkml.kernel.org/r/1349362924.6755.18.camel@gandalf.local.home
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
+---
+ init/main.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-stable/init/main.c
+===================================================================
+--- linux-stable.orig/init/main.c
++++ linux-stable/init/main.c
+@@ -491,7 +491,6 @@ asmlinkage void __init start_kernel(void
+ * Interrupts are still disabled. Do necessary setups, then
+ * enable them
+ */
+- softirq_early_init();
+ tick_init();
+ boot_cpu_init();
+ page_address_init();
+@@ -502,6 +501,7 @@ asmlinkage void __init start_kernel(void
+ setup_command_line(command_line);
+ setup_nr_cpu_ids();
+ setup_per_cpu_areas();
++ softirq_early_init();
+ smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
+
+ build_all_zonelists(NULL, NULL);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-local-lock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0161-softirq-local-lock.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0161-softirq-local-lock.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-local-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,20 @@
-From 1f07442472223feea29df54cfe6dd782aaeef0db Mon Sep 17 00:00:00 2001
+Subject: softirq-local-lock.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 28 Jun 2011 15:57:18 +0200
-Subject: [161/256] softirq-local-lock.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/hardirq.h | 16 ++++-
- include/linux/interrupt.h | 12 ++++
- include/linux/sched.h | 1 +
- init/main.c | 1 +
- kernel/softirq.c | 166 ++++++++++++++++++++++++++++++++++++++++++++-
+ include/linux/hardirq.h | 16 +++-
+ include/linux/interrupt.h | 12 +++
+ include/linux/sched.h | 1
+ init/main.c | 1
+ kernel/softirq.c | 166 +++++++++++++++++++++++++++++++++++++++++++++-
5 files changed, 191 insertions(+), 5 deletions(-)
-diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h
-index bb7f309..cbd7c99 100644
---- a/include/linux/hardirq.h
-+++ b/include/linux/hardirq.h
+Index: linux-stable/include/linux/hardirq.h
+===================================================================
+--- linux-stable.orig/include/linux/hardirq.h
++++ linux-stable/include/linux/hardirq.h
@@ -60,7 +60,11 @@
#define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT)
#define NMI_OFFSET (1UL << NMI_SHIFT)
@@ -56,11 +55,11 @@
/*
* Are we in NMI context?
-diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index d3b1727..e53bd8b 100644
---- a/include/linux/interrupt.h
-+++ b/include/linux/interrupt.h
-@@ -456,7 +456,13 @@ struct softirq_action
+Index: linux-stable/include/linux/interrupt.h
+===================================================================
+--- linux-stable.orig/include/linux/interrupt.h
++++ linux-stable/include/linux/interrupt.h
+@@ -450,7 +450,13 @@ struct softirq_action
asmlinkage void do_softirq(void);
asmlinkage void __do_softirq(void);
@@ -74,7 +73,7 @@
extern void open_softirq(int nr, void (*action)(struct softirq_action *));
extern void softirq_init(void);
extern void __raise_softirq_irqoff(unsigned int nr);
-@@ -643,6 +649,12 @@ void tasklet_hrtimer_cancel(struct tasklet_hrtimer *ttimer)
+@@ -637,6 +643,12 @@ void tasklet_hrtimer_cancel(struct taskl
tasklet_kill(&ttimer->tasklet);
}
@@ -87,11 +86,11 @@
/*
* Autoprobing for irqs:
*
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 01f2d96..372c15d 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1645,6 +1645,7 @@ struct task_struct {
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1617,6 +1617,7 @@ struct task_struct {
#endif
#ifdef CONFIG_PREEMPT_RT_BASE
struct rcu_head put_rcu;
@@ -99,11 +98,11 @@
#endif
};
-diff --git a/init/main.c b/init/main.c
-index 7896ec9..f07f2b0 100644
---- a/init/main.c
-+++ b/init/main.c
-@@ -490,6 +490,7 @@ asmlinkage void __init start_kernel(void)
+Index: linux-stable/init/main.c
+===================================================================
+--- linux-stable.orig/init/main.c
++++ linux-stable/init/main.c
+@@ -491,6 +491,7 @@ asmlinkage void __init start_kernel(void
* Interrupts are still disabled. Do necessary setups, then
* enable them
*/
@@ -111,10 +110,10 @@
tick_init();
boot_cpu_init();
page_address_init();
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index 6f84f09..a6207be 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
@@ -24,6 +24,7 @@
#include <linux/ftrace.h>
#include <linux/smp.h>
@@ -123,7 +122,7 @@
#define CREATE_TRACE_POINTS
#include <trace/events/irq.h>
-@@ -165,6 +166,7 @@ static void handle_pending_softirqs(u32 pending, int cpu)
+@@ -165,6 +166,7 @@ static void handle_pending_softirqs(u32
local_irq_disable();
}
@@ -131,7 +130,7 @@
/*
* preempt_count and SOFTIRQ_OFFSET usage:
* - preempt_count is changed by SOFTIRQ_OFFSET on entering or leaving
-@@ -368,6 +370,162 @@ asmlinkage void do_softirq(void)
+@@ -377,6 +379,162 @@ asmlinkage void do_softirq(void)
#endif
@@ -294,7 +293,7 @@
/*
* Enter an interrupt context.
*/
-@@ -381,9 +539,9 @@ void irq_enter(void)
+@@ -390,9 +548,9 @@ void irq_enter(void)
* Prevent raise_softirq from needlessly waking up ksoftirqd
* here, as softirq will be serviced on return from interrupt.
*/
@@ -306,7 +305,7 @@
}
__irq_enter();
-@@ -391,6 +549,7 @@ void irq_enter(void)
+@@ -400,6 +558,7 @@ void irq_enter(void)
static inline void invoke_softirq(void)
{
@@ -314,7 +313,7 @@
if (!force_irqthreads) {
#ifdef __ARCH_IRQ_EXIT_IRQS_DISABLED
__do_softirq();
-@@ -403,6 +562,9 @@ static inline void invoke_softirq(void)
+@@ -412,6 +571,9 @@ static inline void invoke_softirq(void)
wakeup_softirqd();
__local_bh_enable(SOFTIRQ_OFFSET);
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-make-fifo.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0166-softirq-make-fifo.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0166-softirq-make-fifo.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-make-fifo.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From fc0e323ce062c258ce7a7d0eca1a6a0570b1f168 Mon Sep 17 00:00:00 2001
+Subject: softirq-make-fifo.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 21 Jul 2011 21:06:43 +0200
-Subject: [166/256] softirq-make-fifo.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/softirq.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index d1fdb91..86561c0 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
-@@ -372,6 +372,8 @@ asmlinkage void do_softirq(void)
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
+@@ -381,6 +381,8 @@ asmlinkage void do_softirq(void)
static inline void local_bh_disable_nort(void) { local_bh_disable(); }
static inline void _local_bh_enable_nort(void) { _local_bh_enable(); }
@@ -21,7 +20,7 @@
#else /* !PREEMPT_RT_FULL */
-@@ -526,6 +528,20 @@ static int ksoftirqd_do_softirq(int cpu)
+@@ -535,6 +537,20 @@ static int ksoftirqd_do_softirq(int cpu)
static inline void local_bh_disable_nort(void) { }
static inline void _local_bh_enable_nort(void) { }
@@ -42,7 +41,7 @@
#endif /* PREEMPT_RT_FULL */
/*
* Enter an interrupt context.
-@@ -977,6 +993,8 @@ void __init softirq_init(void)
+@@ -986,6 +1002,8 @@ void __init softirq_init(void)
static int run_ksoftirqd(void * __bind_cpu)
{
@@ -51,7 +50,7 @@
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
-@@ -1002,6 +1020,7 @@ static int run_ksoftirqd(void * __bind_cpu)
+@@ -1011,6 +1029,7 @@ static int run_ksoftirqd(void * __bind_c
wait_to_die:
preempt_enable();
Added: dists/trunk/linux/debian/patches/features/all/rt/softirq-make-serving-softirqs-a-task-flag.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-make-serving-softirqs-a-task-flag.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,78 @@
+Subject: softirq: Make serving softirqs a task flag
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 04 Oct 2012 14:30:25 +0100
+
+Avoid the percpu softirq_runner pointer magic by using a task flag.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ include/linux/sched.h | 1 +
+ kernel/softirq.c | 20 +++-----------------
+ 2 files changed, 4 insertions(+), 17 deletions(-)
+
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1845,6 +1845,7 @@ extern void thread_group_times(struct ta
+ #define PF_MEMALLOC 0x00000800 /* Allocating memory */
+ #define PF_NPROC_EXCEEDED 0x00001000 /* set_user noticed that RLIMIT_NPROC was exceeded */
+ #define PF_USED_MATH 0x00002000 /* if unset the fpu must be initialized before use */
++#define PF_IN_SOFTIRQ 0x00004000 /* Task is serving softirq */
+ #define PF_NOFREEZE 0x00008000 /* this thread should not be frozen */
+ #define PF_FROZEN 0x00010000 /* frozen for system suspend */
+ #define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
+@@ -392,7 +392,6 @@ static inline void ksoftirqd_clr_sched_p
+ * On RT we serialize softirq execution with a cpu local lock
+ */
+ static DEFINE_LOCAL_IRQ_LOCK(local_softirq_lock);
+-static DEFINE_PER_CPU(struct task_struct *, local_softirq_runner);
+
+ static void __do_softirq_common(int need_rcu_bh_qs);
+
+@@ -447,22 +446,9 @@ void _local_bh_enable(void)
+ }
+ EXPORT_SYMBOL(_local_bh_enable);
+
+-/* For tracing */
+-int notrace __in_softirq(void)
+-{
+- if (__get_cpu_var(local_softirq_lock).owner == current)
+- return __get_cpu_var(local_softirq_lock).nestcnt;
+- return 0;
+-}
+-
+ int in_serving_softirq(void)
+ {
+- int res;
+-
+- preempt_disable();
+- res = __get_cpu_var(local_softirq_runner) == current;
+- preempt_enable();
+- return res;
++ return current->flags & PF_IN_SOFTIRQ;
+ }
+ EXPORT_SYMBOL(in_serving_softirq);
+
+@@ -480,7 +466,7 @@ static void __do_softirq_common(int need
+ /* Reset the pending bitmask before enabling irqs */
+ set_softirq_pending(0);
+
+- __get_cpu_var(local_softirq_runner) = current;
++ current->flags |= PF_IN_SOFTIRQ;
+
+ lockdep_softirq_enter();
+
+@@ -491,7 +477,7 @@ static void __do_softirq_common(int need
+ wakeup_softirqd();
+
+ lockdep_softirq_exit();
+- __get_cpu_var(local_softirq_runner) = NULL;
++ current->flags &= ~PF_IN_SOFTIRQ;
+
+ current->softirq_nestcnt--;
+ }
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-preempt-fix-3-re.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0241-softirq-Check-preemption-after-reenabling-interrupts.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0241-softirq-Check-preemption-after-reenabling-interrupts.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-preempt-fix-3-re.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From d0af9326880d64fe4c2d2940e692c6bc93031d64 Mon Sep 17 00:00:00 2001
+Subject: softirq: Check preemption after reenabling interrupts
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Sun, 13 Nov 2011 17:17:09 +0100
-Subject: [241/256] softirq: Check preemption after reenabling interrupts
+Date: Sun, 13 Nov 2011 17:17:09 +0100 (CET)
raise_softirq_irqoff() disables interrupts and wakes the softirq
daemon, but after reenabling interrupts there is no preemption check,
@@ -21,11 +20,11 @@
net/core/dev.c | 6 ++++++
4 files changed, 15 insertions(+)
-diff --git a/block/blk-iopoll.c b/block/blk-iopoll.c
-index 58916af..f7ca9b4 100644
---- a/block/blk-iopoll.c
-+++ b/block/blk-iopoll.c
-@@ -38,6 +38,7 @@ void blk_iopoll_sched(struct blk_iopoll *iop)
+Index: linux-stable/block/blk-iopoll.c
+===================================================================
+--- linux-stable.orig/block/blk-iopoll.c
++++ linux-stable/block/blk-iopoll.c
+@@ -38,6 +38,7 @@ void blk_iopoll_sched(struct blk_iopoll
list_add_tail(&iop->list, &__get_cpu_var(blk_cpu_iopoll));
__raise_softirq_irqoff(BLOCK_IOPOLL_SOFTIRQ);
local_irq_restore(flags);
@@ -33,7 +32,7 @@
}
EXPORT_SYMBOL(blk_iopoll_sched);
-@@ -135,6 +136,7 @@ static void blk_iopoll_softirq(struct softirq_action *h)
+@@ -135,6 +136,7 @@ static void blk_iopoll_softirq(struct so
__raise_softirq_irqoff(BLOCK_IOPOLL_SOFTIRQ);
local_irq_enable();
@@ -41,7 +40,7 @@
}
/**
-@@ -204,6 +206,7 @@ static int __cpuinit blk_iopoll_cpu_notify(struct notifier_block *self,
+@@ -204,6 +206,7 @@ static int __cpuinit blk_iopoll_cpu_noti
&__get_cpu_var(blk_cpu_iopoll));
__raise_softirq_irqoff(BLOCK_IOPOLL_SOFTIRQ);
local_irq_enable();
@@ -49,10 +48,10 @@
}
return NOTIFY_OK;
-diff --git a/block/blk-softirq.c b/block/blk-softirq.c
-index 467c8de..3fe2368 100644
---- a/block/blk-softirq.c
-+++ b/block/blk-softirq.c
+Index: linux-stable/block/blk-softirq.c
+===================================================================
+--- linux-stable.orig/block/blk-softirq.c
++++ linux-stable/block/blk-softirq.c
@@ -51,6 +51,7 @@ static void trigger_softirq(void *data)
raise_softirq_irqoff(BLOCK_SOFTIRQ);
@@ -61,7 +60,7 @@
}
/*
-@@ -93,6 +94,7 @@ static int __cpuinit blk_cpu_notify(struct notifier_block *self,
+@@ -93,6 +94,7 @@ static int __cpuinit blk_cpu_notify(stru
&__get_cpu_var(blk_cpu_done));
raise_softirq_irqoff(BLOCK_SOFTIRQ);
local_irq_enable();
@@ -77,10 +76,10 @@
}
/**
-diff --git a/include/linux/preempt.h b/include/linux/preempt.h
-index 5af46d0..5e71285 100644
---- a/include/linux/preempt.h
-+++ b/include/linux/preempt.h
+Index: linux-stable/include/linux/preempt.h
+===================================================================
+--- linux-stable.orig/include/linux/preempt.h
++++ linux-stable/include/linux/preempt.h
@@ -56,8 +56,10 @@ do { \
#ifndef CONFIG_PREEMPT_RT_BASE
@@ -100,11 +99,11 @@
#endif /* CONFIG_PREEMPT_COUNT */
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 252c15a..292930b 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -1807,6 +1807,7 @@ static inline void __netif_reschedule(struct Qdisc *q)
+Index: linux-stable/net/core/dev.c
+===================================================================
+--- linux-stable.orig/net/core/dev.c
++++ linux-stable/net/core/dev.c
+@@ -1836,6 +1836,7 @@ static inline void __netif_reschedule(st
sd->output_queue_tailp = &q->next_sched;
raise_softirq_irqoff(NET_TX_SOFTIRQ);
local_irq_restore(flags);
@@ -112,7 +111,7 @@
}
void __netif_schedule(struct Qdisc *q)
-@@ -1828,6 +1829,7 @@ void dev_kfree_skb_irq(struct sk_buff *skb)
+@@ -1857,6 +1858,7 @@ void dev_kfree_skb_irq(struct sk_buff *s
sd->completion_queue = skb;
raise_softirq_irqoff(NET_TX_SOFTIRQ);
local_irq_restore(flags);
@@ -120,7 +119,7 @@
}
}
EXPORT_SYMBOL(dev_kfree_skb_irq);
-@@ -2897,6 +2899,7 @@ enqueue:
+@@ -2927,6 +2929,7 @@ enqueue:
rps_unlock(sd);
local_irq_restore(flags);
@@ -128,7 +127,7 @@
atomic_long_inc(&skb->dev->rx_dropped);
kfree_skb(skb);
-@@ -3710,6 +3713,7 @@ static void net_rps_action_and_irq_enable(struct softnet_data *sd)
+@@ -3787,6 +3790,7 @@ static void net_rps_action_and_irq_enabl
} else
#endif
local_irq_enable();
@@ -136,7 +135,7 @@
}
static int process_backlog(struct napi_struct *napi, int quota)
-@@ -3782,6 +3786,7 @@ void __napi_schedule(struct napi_struct *n)
+@@ -3859,6 +3863,7 @@ void __napi_schedule(struct napi_struct
local_irq_save(flags);
____napi_schedule(&__get_cpu_var(softnet_data), n);
local_irq_restore(flags);
@@ -144,7 +143,7 @@
}
EXPORT_SYMBOL(__napi_schedule);
-@@ -6283,6 +6288,7 @@ static int dev_cpu_callback(struct notifier_block *nfb,
+@@ -6364,6 +6369,7 @@ static int dev_cpu_callback(struct notif
raise_softirq_irqoff(NET_TX_SOFTIRQ);
local_irq_enable();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-sanitize-softirq-pending.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0158-softirq-Sanitize-softirq-pending-for-NOHZ-RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0158-softirq-Sanitize-softirq-pending-for-NOHZ-RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-sanitize-softirq-pending.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,20 +1,20 @@
-From 13b3cd058255b7a21cf6b1380ac872b6abea55ea Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 3 Jul 2009 13:16:38 -0500
-Subject: [158/256] softirq: Sanitize softirq pending for NOHZ/RT
+Subject: softirq: Sanitize softirq pending for NOHZ/RT
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- include/linux/interrupt.h | 2 ++
- kernel/softirq.c | 61 +++++++++++++++++++++++++++++++++++++++++++++
- kernel/time/tick-sched.c | 8 +-----
+ include/linux/interrupt.h | 2 +
+ kernel/softirq.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++
+ kernel/time/tick-sched.c | 8 ------
3 files changed, 64 insertions(+), 7 deletions(-)
-diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index 9027bde..d3b1727 100644
---- a/include/linux/interrupt.h
-+++ b/include/linux/interrupt.h
-@@ -464,6 +464,8 @@ extern void __raise_softirq_irqoff(unsigned int nr);
+Index: linux-stable/include/linux/interrupt.h
+===================================================================
+--- linux-stable.orig/include/linux/interrupt.h
++++ linux-stable/include/linux/interrupt.h
+@@ -458,6 +458,8 @@ extern void __raise_softirq_irqoff(unsig
extern void raise_softirq_irqoff(unsigned int nr);
extern void raise_softirq(unsigned int nr);
@@ -23,10 +23,10 @@
/* This is the worklist that queues up per-cpu softirq work.
*
* send_remote_sendirq() adds work to these lists, and
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index 6ec3a78..6f84f09 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
@@ -61,6 +61,67 @@ char *softirq_to_name[NR_SOFTIRQS] = {
"TASKLET", "SCHED", "HRTIMER", "RCU"
};
@@ -95,12 +95,12 @@
/*
* we cannot loop indefinitely here to avoid userspace starvation,
* but we also don't want to introduce a worst case 1/HZ latency
-diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
-index 5d409b0..9f958cb 100644
---- a/kernel/time/tick-sched.c
-+++ b/kernel/time/tick-sched.c
-@@ -307,13 +307,7 @@ static void tick_nohz_stop_sched_tick(struct tick_sched *ts)
- return;
+Index: linux-stable/kernel/time/tick-sched.c
+===================================================================
+--- linux-stable.orig/kernel/time/tick-sched.c
++++ linux-stable/kernel/time/tick-sched.c
+@@ -438,13 +438,7 @@ static bool can_stop_idle_tick(int cpu,
+ return false;
if (unlikely(local_softirq_pending() && cpu_online(cpu))) {
- static int ratelimit;
@@ -111,6 +111,6 @@
- ratelimit++;
- }
+ softirq_check_pending_idle();
- return;
+ return false;
}
Added: dists/trunk/linux/debian/patches/features/all/rt/softirq-split-handling-function.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-split-handling-function.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,70 @@
+Subject: softirq: Split handling function
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 04 Oct 2012 15:33:53 +0100
+
+Split out the inner handling function, so RT can reuse it.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/softirq.c | 43 +++++++++++++++++++++++--------------------
+ 1 file changed, 23 insertions(+), 20 deletions(-)
+
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
+@@ -139,31 +139,34 @@ static void wakeup_softirqd(void)
+ wake_up_process(tsk);
+ }
+
+-static void handle_pending_softirqs(u32 pending, int cpu, int need_rcu_bh_qs)
++static void handle_softirq(unsigned int vec_nr, int cpu, int need_rcu_bh_qs)
+ {
+- struct softirq_action *h = softirq_vec;
++ struct softirq_action *h = softirq_vec + vec_nr;
+ unsigned int prev_count = preempt_count();
+
+- local_irq_enable();
+- for ( ; pending; h++, pending >>= 1) {
+- unsigned int vec_nr = h - softirq_vec;
++ kstat_incr_softirqs_this_cpu(vec_nr);
++ trace_softirq_entry(vec_nr);
++ h->action(h);
++ trace_softirq_exit(vec_nr);
++
++ if (unlikely(prev_count != preempt_count())) {
++ pr_err("softirq %u %s %p preempt count leak: %08x -> %08x\n",
++ vec_nr, softirq_to_name[vec_nr], h->action,
++ prev_count, (unsigned int) preempt_count());
++ preempt_count() = prev_count;
++ }
++ if (need_rcu_bh_qs)
++ rcu_bh_qs(cpu);
++}
+
+- if (!(pending & 1))
+- continue;
++static void handle_pending_softirqs(u32 pending, int cpu, int need_rcu_bh_qs)
++{
++ unsigned int vec_nr;
+
+- kstat_incr_softirqs_this_cpu(vec_nr);
+- trace_softirq_entry(vec_nr);
+- h->action(h);
+- trace_softirq_exit(vec_nr);
+- if (unlikely(prev_count != preempt_count())) {
+- printk(KERN_ERR
+- "huh, entered softirq %u %s %p with preempt_count %08x exited with %08x?\n",
+- vec_nr, softirq_to_name[vec_nr], h->action,
+- prev_count, (unsigned int) preempt_count());
+- preempt_count() = prev_count;
+- }
+- if (need_rcu_bh_qs)
+- rcu_bh_qs(cpu);
++ local_irq_enable();
++ for (vec_nr = 0; pending; vec_nr++, pending >>= 1) {
++ if (pending & 1)
++ handle_softirq(vec_nr, cpu, need_rcu_bh_qs);
+ }
+ local_irq_disable();
+ }
Added: dists/trunk/linux/debian/patches/features/all/rt/softirq-split-locks.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-split-locks.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,443 @@
+Subject: softirq: Split softirq locks
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 04 Oct 2012 14:20:47 +0100
+
+The 3.x RT series removed the split softirq implementation in favour
+of pushing softirq processing into the context of the thread which
+raised it. Though this prevents us from handling the various softirqs
+at different priorities. Now instead of reintroducing the split
+softirq threads we split the locks which serialize the softirq
+processing.
+
+If a softirq is raised in context of a thread, then the softirq is
+noted on a per thread field, if the thread is in a bh disabled
+region. If the softirq is raised from hard interrupt context, then the
+bit is set in the flag field of ksoftirqd and ksoftirqd is invoked.
+When a thread leaves a bh disabled region, then it tries to execute
+the softirqs which have been raised in its own context. It acquires
+the per softirq / per cpu lock for the softirq and then checks,
+whether the softirq is still pending in the per cpu
+local_softirq_pending() field. If yes, it runs the softirq. If no,
+then some other task executed it already. This allows for zero config
+softirq elevation in the context of user space tasks or interrupt
+threads.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ include/linux/sched.h | 1
+ kernel/softirq.c | 281 ++++++++++++++++++++++++++++++++------------------
+ 2 files changed, 183 insertions(+), 99 deletions(-)
+
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1619,6 +1619,7 @@ struct task_struct {
+ #ifdef CONFIG_PREEMPT_RT_BASE
+ struct rcu_head put_rcu;
+ int softirq_nestcnt;
++ unsigned int softirqs_raised;
+ #endif
+ #if defined CONFIG_PREEMPT_RT_FULL && defined CONFIG_HIGHMEM
+ int kmap_idx;
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
+@@ -159,6 +159,7 @@ static void handle_softirq(unsigned int
+ rcu_bh_qs(cpu);
+ }
+
++#ifndef CONFIG_PREEMPT_RT_FULL
+ static void handle_pending_softirqs(u32 pending, int cpu, int need_rcu_bh_qs)
+ {
+ unsigned int vec_nr;
+@@ -171,7 +172,6 @@ static void handle_pending_softirqs(u32
+ local_irq_disable();
+ }
+
+-#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+ * preempt_count and SOFTIRQ_OFFSET usage:
+ * - preempt_count is changed by SOFTIRQ_OFFSET on entering or leaving
+@@ -384,28 +384,117 @@ asmlinkage void do_softirq(void)
+
+ #endif
+
++/*
++ * This function must run with irqs disabled!
++ */
++void raise_softirq_irqoff(unsigned int nr)
++{
++ __raise_softirq_irqoff(nr);
++
++ /*
++ * If we're in an interrupt or softirq, we're done
++ * (this also catches softirq-disabled code). We will
++ * actually run the softirq once we return from
++ * the irq or softirq.
++ *
++ * Otherwise we wake up ksoftirqd to make sure we
++ * schedule the softirq soon.
++ */
++ if (!in_interrupt())
++ wakeup_softirqd();
++}
++
++void __raise_softirq_irqoff(unsigned int nr)
++{
++ trace_softirq_raise(nr);
++ or_softirq_pending(1UL << nr);
++}
++
+ static inline void local_bh_disable_nort(void) { local_bh_disable(); }
+ static inline void _local_bh_enable_nort(void) { _local_bh_enable(); }
+ static inline void ksoftirqd_set_sched_params(void) { }
+ static inline void ksoftirqd_clr_sched_params(void) { }
+
++static inline int ksoftirqd_softirq_pending(void)
++{
++ return local_softirq_pending();
++}
++
+ #else /* !PREEMPT_RT_FULL */
+
+ /*
+- * On RT we serialize softirq execution with a cpu local lock
++ * On RT we serialize softirq execution with a cpu local lock per softirq
+ */
+-static DEFINE_LOCAL_IRQ_LOCK(local_softirq_lock);
++static DEFINE_PER_CPU(struct local_irq_lock [NR_SOFTIRQS], local_softirq_locks);
+
+-static void __do_softirq_common(int need_rcu_bh_qs);
++void __init softirq_early_init(void)
++{
++ int i;
+
+-void __do_softirq(void)
++ for (i = 0; i < NR_SOFTIRQS; i++)
++ local_irq_lock_init(local_softirq_locks[i]);
++}
++
++static void lock_softirq(int which)
+ {
+- __do_softirq_common(0);
++ __local_lock(&__get_cpu_var(local_softirq_locks[which]));
+ }
+
+-void __init softirq_early_init(void)
++static void unlock_softirq(int which)
++{
++ __local_unlock(&__get_cpu_var(local_softirq_locks[which]));
++}
++
++static void do_single_softirq(int which, int need_rcu_bh_qs)
++{
++ unsigned long old_flags = current->flags;
++
++ current->flags &= ~PF_MEMALLOC;
++ account_system_vtime(current);
++ current->flags |= PF_IN_SOFTIRQ;
++ lockdep_softirq_enter();
++ local_irq_enable();
++ handle_softirq(which, smp_processor_id(), need_rcu_bh_qs);
++ local_irq_disable();
++ lockdep_softirq_exit();
++ current->flags &= ~PF_IN_SOFTIRQ;
++ account_system_vtime(current);
++ tsk_restore_flags(current, old_flags, PF_MEMALLOC);
++}
++
++/*
++ * Called with interrupts disabled. Process softirqs which were raised
++ * in current context (or on behalf of ksoftirqd).
++ */
++static void do_current_softirqs(int need_rcu_bh_qs)
+ {
+- local_irq_lock_init(local_softirq_lock);
++ while (current->softirqs_raised) {
++ int i = __ffs(current->softirqs_raised);
++ unsigned int pending, mask = (1U << i);
++
++ current->softirqs_raised &= ~mask;
++ local_irq_enable();
++
++ /*
++ * If the lock is contended, we boost the owner to
++ * process the softirq or leave the critical section
++ * now.
++ */
++ lock_softirq(i);
++ local_irq_disable();
++ /*
++ * Check with the local_softirq_pending() bits,
++ * whether we need to process this still or if someone
++ * else took care of it.
++ */
++ pending = local_softirq_pending();
++ if (pending & mask) {
++ set_softirq_pending(pending & ~mask);
++ do_single_softirq(i, need_rcu_bh_qs);
++ }
++ unlock_softirq(i);
++ WARN_ON(current->softirq_nestcnt != 1);
++ }
+ }
+
+ void local_bh_disable(void)
+@@ -420,17 +509,11 @@ void local_bh_enable(void)
+ if (WARN_ON(current->softirq_nestcnt == 0))
+ return;
+
+- if ((current->softirq_nestcnt == 1) &&
+- local_softirq_pending() &&
+- local_trylock(local_softirq_lock)) {
++ local_irq_disable();
++ if (current->softirq_nestcnt == 1 && current->softirqs_raised)
++ do_current_softirqs(1);
++ local_irq_enable();
+
+- local_irq_disable();
+- if (local_softirq_pending())
+- __do_softirq();
+- local_irq_enable();
+- local_unlock(local_softirq_lock);
+- WARN_ON(current->softirq_nestcnt != 1);
+- }
+ current->softirq_nestcnt--;
+ migrate_enable();
+ }
+@@ -455,37 +538,8 @@ int in_serving_softirq(void)
+ }
+ EXPORT_SYMBOL(in_serving_softirq);
+
+-/*
+- * Called with bh and local interrupts disabled. For full RT cpu must
+- * be pinned.
+- */
+-static void __do_softirq_common(int need_rcu_bh_qs)
+-{
+- u32 pending = local_softirq_pending();
+- int cpu = smp_processor_id();
+-
+- current->softirq_nestcnt++;
+-
+- /* Reset the pending bitmask before enabling irqs */
+- set_softirq_pending(0);
+-
+- current->flags |= PF_IN_SOFTIRQ;
+-
+- lockdep_softirq_enter();
+-
+- handle_pending_softirqs(pending, cpu, need_rcu_bh_qs);
+-
+- pending = local_softirq_pending();
+- if (pending)
+- wakeup_softirqd();
+-
+- lockdep_softirq_exit();
+- current->flags &= ~PF_IN_SOFTIRQ;
+-
+- current->softirq_nestcnt--;
+-}
+-
+-static int __thread_do_softirq(int cpu)
++/* Called with preemption disabled */
++static int ksoftirqd_do_softirq(int cpu)
+ {
+ /*
+ * Prevent the current cpu from going offline.
+@@ -496,45 +550,90 @@ static int __thread_do_softirq(int cpu)
+ */
+ pin_current_cpu();
+ /*
+- * If called from ksoftirqd (cpu >= 0) we need to check
+- * whether we are on the wrong cpu due to cpu offlining. If
+- * called via thread_do_softirq() no action required.
++ * We need to check whether we are on the wrong cpu due to cpu
++ * offlining.
+ */
+- if (cpu >= 0 && cpu_is_offline(cpu)) {
++ if (cpu_is_offline(cpu)) {
+ unpin_current_cpu();
+ return -1;
+ }
+ preempt_enable();
+- local_lock(local_softirq_lock);
+ local_irq_disable();
+- /*
+- * We cannot switch stacks on RT as we want to be able to
+- * schedule!
+- */
+- if (local_softirq_pending())
+- __do_softirq_common(cpu >= 0);
+- local_unlock(local_softirq_lock);
+- unpin_current_cpu();
+- preempt_disable();
++ current->softirq_nestcnt++;
++ do_current_softirqs(1);
++ current->softirq_nestcnt--;
+ local_irq_enable();
++
++ preempt_disable();
++ unpin_current_cpu();
+ return 0;
+ }
+
+ /*
+- * Called from netif_rx_ni(). Preemption enabled.
++ * Called from netif_rx_ni(). Preemption enabled, but migration
++ * disabled. So the cpu can't go away under us.
+ */
+ void thread_do_softirq(void)
+ {
+- if (!in_serving_softirq()) {
+- preempt_disable();
+- __thread_do_softirq(-1);
+- preempt_enable();
++ if (!in_serving_softirq() && current->softirqs_raised) {
++ current->softirq_nestcnt++;
++ do_current_softirqs(0);
++ current->softirq_nestcnt--;
+ }
+ }
+
+-static int ksoftirqd_do_softirq(int cpu)
++void __raise_softirq_irqoff(unsigned int nr)
++{
++ trace_softirq_raise(nr);
++ or_softirq_pending(1UL << nr);
++
++ /*
++ * If we are not in a hard interrupt and inside a bh disabled
++ * region, we simply raise the flag on current. local_bh_enable()
++ * will make sure that the softirq is executed. Otherwise we
++ * delegate it to ksoftirqd.
++ */
++ if (!in_irq() && current->softirq_nestcnt)
++ current->softirqs_raised |= (1U << nr);
++ else if (__this_cpu_read(ksoftirqd))
++ __this_cpu_read(ksoftirqd)->softirqs_raised |= (1U << nr);
++}
++
++/*
++ * This function must run with irqs disabled!
++ */
++void raise_softirq_irqoff(unsigned int nr)
++{
++ __raise_softirq_irqoff(nr);
++
++ /*
++ * If we're in an hard interrupt we let irq return code deal
++ * with the wakeup of ksoftirqd.
++ */
++ if (in_irq())
++ return;
++
++ /*
++ * If we are in thread context but outside of a bh disabled
++ * region, we need to wake ksoftirqd as well.
++ *
++ * CHECKME: Some of the places which do that could be wrapped
++ * into local_bh_disable/enable pairs. Though it's unclear
++ * whether this is worth the effort. To find those places just
++ * raise a WARN() if the condition is met.
++ */
++ if (!current->softirq_nestcnt)
++ wakeup_softirqd();
++}
++
++void do_raise_softirq_irqoff(unsigned int nr)
++{
++ raise_softirq_irqoff(nr);
++}
++
++static inline int ksoftirqd_softirq_pending(void)
+ {
+- return __thread_do_softirq(cpu);
++ return current->softirqs_raised;
+ }
+
+ static inline void local_bh_disable_nort(void) { }
+@@ -545,6 +644,10 @@ static inline void ksoftirqd_set_sched_p
+ struct sched_param param = { .sched_priority = 1 };
+
+ sched_setscheduler(current, SCHED_FIFO, ¶m);
++ /* Take over all pending softirqs when starting */
++ local_irq_disable();
++ current->softirqs_raised = local_softirq_pending();
++ local_irq_enable();
+ }
+
+ static inline void ksoftirqd_clr_sched_params(void)
+@@ -591,8 +694,14 @@ static inline void invoke_softirq(void)
+ wakeup_softirqd();
+ __local_bh_enable(SOFTIRQ_OFFSET);
+ }
+-#else
++#else /* PREEMPT_RT_FULL */
++ unsigned long flags;
++
++ local_irq_save(flags);
++ if (__this_cpu_read(ksoftirqd) &&
++ __this_cpu_read(ksoftirqd)->softirqs_raised)
+ wakeup_softirqd();
++ local_irq_restore(flags);
+ #endif
+ }
+
+@@ -616,26 +725,6 @@ void irq_exit(void)
+ sched_preempt_enable_no_resched();
+ }
+
+-/*
+- * This function must run with irqs disabled!
+- */
+-inline void raise_softirq_irqoff(unsigned int nr)
+-{
+- __raise_softirq_irqoff(nr);
+-
+- /*
+- * If we're in an interrupt or softirq, we're done
+- * (this also catches softirq-disabled code). We will
+- * actually run the softirq once we return from
+- * the irq or softirq.
+- *
+- * Otherwise we wake up ksoftirqd to make sure we
+- * schedule the softirq soon.
+- */
+- if (!in_interrupt())
+- wakeup_softirqd();
+-}
+-
+ void raise_softirq(unsigned int nr)
+ {
+ unsigned long flags;
+@@ -645,12 +734,6 @@ void raise_softirq(unsigned int nr)
+ local_irq_restore(flags);
+ }
+
+-void __raise_softirq_irqoff(unsigned int nr)
+-{
+- trace_softirq_raise(nr);
+- or_softirq_pending(1UL << nr);
+-}
+-
+ void open_softirq(int nr, void (*action)(struct softirq_action *))
+ {
+ softirq_vec[nr].action = action;
+@@ -1102,12 +1185,12 @@ static int run_ksoftirqd(void * __bind_c
+
+ while (!kthread_should_stop()) {
+ preempt_disable();
+- if (!local_softirq_pending())
++ if (!ksoftirqd_softirq_pending())
+ schedule_preempt_disabled();
+
+ __set_current_state(TASK_RUNNING);
+
+- while (local_softirq_pending()) {
++ while (ksoftirqd_softirq_pending()) {
+ if (ksoftirqd_do_softirq((long) __bind_cpu))
+ goto wait_to_die;
+ sched_preempt_enable_no_resched();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-split-out-code.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0049-softirq-split-out-code.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0049-softirq-split-out-code.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-split-out-code.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 3721a6f40ccd5334d85fc368b28927ba01a2546e Mon Sep 17 00:00:00 2001
+Subject: softirq-split-out-code.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 28 Jun 2011 15:46:49 +0200
-Subject: [049/256] softirq-split-out-code.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- kernel/softirq.c | 94 ++++++++++++++++++++++++++++++------------------------
+ kernel/softirq.c | 94 ++++++++++++++++++++++++++++++-------------------------
1 file changed, 52 insertions(+), 42 deletions(-)
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index 671f959..6ec3a78 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
@@ -76,6 +76,34 @@ static void wakeup_softirqd(void)
wake_up_process(tsk);
}
@@ -55,7 +54,7 @@
__u32 pending;
int max_restart = MAX_SOFTIRQ_RESTART;
int cpu;
-@@ -215,7 +242,7 @@ asmlinkage void __do_softirq(void)
+@@ -223,7 +250,7 @@ asmlinkage void __do_softirq(void)
account_system_vtime(current);
__local_bh_disable((unsigned long)__builtin_return_address(0),
@@ -64,7 +63,7 @@
lockdep_softirq_enter();
cpu = smp_processor_id();
-@@ -223,36 +250,7 @@ restart:
+@@ -231,36 +258,7 @@ restart:
/* Reset the pending bitmask before enabling irqs */
set_softirq_pending(0);
@@ -102,8 +101,8 @@
pending = local_softirq_pending();
if (pending && --max_restart)
-@@ -267,6 +265,26 @@ restart:
- __local_bh_enable(SOFTIRQ_OFFSET);
+@@ -276,6 +274,26 @@ restart:
+ tsk_restore_flags(current, old_flags, PF_MEMALLOC);
}
+/*
@@ -129,7 +128,7 @@
#ifndef __ARCH_HAS_DO_SOFTIRQ
asmlinkage void do_softirq(void)
-@@ -739,22 +757,14 @@ static int run_ksoftirqd(void * __bind_cpu)
+@@ -748,22 +766,14 @@ static int run_ksoftirqd(void * __bind_c
while (!kthread_should_stop()) {
preempt_disable();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/softirq-thread-do-softirq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0048-softirq-thread-do-softirq.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0048-softirq-thread-do-softirq.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/softirq-thread-do-softirq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 5f6e092d66f44cd34d42dfe5bebaa8599c1b8337 Mon Sep 17 00:00:00 2001
+Subject: softirq-thread-do-softirq.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 28 Jun 2011 15:44:15 +0200
-Subject: [048/256] softirq-thread-do-softirq.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
net/core/dev.c | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
-diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index 2aea5d2..02c3c4f 100644
---- a/include/linux/interrupt.h
-+++ b/include/linux/interrupt.h
-@@ -452,6 +452,7 @@ struct softirq_action
+Index: linux-stable/include/linux/interrupt.h
+===================================================================
+--- linux-stable.orig/include/linux/interrupt.h
++++ linux-stable/include/linux/interrupt.h
+@@ -446,6 +446,7 @@ struct softirq_action
asmlinkage void do_softirq(void);
asmlinkage void __do_softirq(void);
@@ -21,11 +20,11 @@
extern void open_softirq(int nr, void (*action)(struct softirq_action *));
extern void softirq_init(void);
extern void __raise_softirq_irqoff(unsigned int nr);
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 99e1d75..ca7a845 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -2963,7 +2963,7 @@ int netif_rx_ni(struct sk_buff *skb)
+Index: linux-stable/net/core/dev.c
+===================================================================
+--- linux-stable.orig/net/core/dev.c
++++ linux-stable/net/core/dev.c
+@@ -2993,7 +2993,7 @@ int netif_rx_ni(struct sk_buff *skb)
preempt_disable();
err = netif_rx(skb);
if (local_softirq_pending())
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/spinlock-types-separate-raw.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0175-spinlock-types-separate-raw.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0175-spinlock-types-separate-raw.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/spinlock-types-separate-raw.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,19 @@
-From 9ff9b0b7b9fafebd9d11112ead4c24ec4d8fe5bd Mon Sep 17 00:00:00 2001
+Subject: spinlock-types-separate-raw.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 29 Jun 2011 19:34:01 +0200
-Subject: [175/256] spinlock-types-separate-raw.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- include/linux/rwlock_types.h | 4 ++
- include/linux/spinlock_types.h | 74 +----------------------------------
+ include/linux/rwlock_types.h | 4 +
+ include/linux/spinlock_types.h | 74 ------------------------------------
include/linux/spinlock_types_nort.h | 33 ++++++++++++++++
- include/linux/spinlock_types_raw.h | 56 ++++++++++++++++++++++++++
+ include/linux/spinlock_types_raw.h | 56 +++++++++++++++++++++++++++
4 files changed, 95 insertions(+), 72 deletions(-)
- create mode 100644 include/linux/spinlock_types_nort.h
- create mode 100644 include/linux/spinlock_types_raw.h
-diff --git a/include/linux/rwlock_types.h b/include/linux/rwlock_types.h
-index cc0072e..5317cd9 100644
---- a/include/linux/rwlock_types.h
-+++ b/include/linux/rwlock_types.h
+Index: linux-stable/include/linux/rwlock_types.h
+===================================================================
+--- linux-stable.orig/include/linux/rwlock_types.h
++++ linux-stable/include/linux/rwlock_types.h
@@ -1,6 +1,10 @@
#ifndef __LINUX_RWLOCK_TYPES_H
#define __LINUX_RWLOCK_TYPES_H
@@ -28,10 +25,10 @@
/*
* include/linux/rwlock_types.h - generic rwlock type definitions
* and initializers
-diff --git a/include/linux/spinlock_types.h b/include/linux/spinlock_types.h
-index 73548eb..5c8664d 100644
---- a/include/linux/spinlock_types.h
-+++ b/include/linux/spinlock_types.h
+Index: linux-stable/include/linux/spinlock_types.h
+===================================================================
+--- linux-stable.orig/include/linux/spinlock_types.h
++++ linux-stable/include/linux/spinlock_types.h
@@ -9,79 +9,9 @@
* Released under the General Public License (GPL).
*/
@@ -114,11 +111,10 @@
#include <linux/rwlock_types.h>
-diff --git a/include/linux/spinlock_types_nort.h b/include/linux/spinlock_types_nort.h
-new file mode 100644
-index 0000000..f1dac1f
+Index: linux-stable/include/linux/spinlock_types_nort.h
+===================================================================
--- /dev/null
-+++ b/include/linux/spinlock_types_nort.h
++++ linux-stable/include/linux/spinlock_types_nort.h
@@ -0,0 +1,33 @@
+#ifndef __LINUX_SPINLOCK_TYPES_NORT_H
+#define __LINUX_SPINLOCK_TYPES_NORT_H
@@ -153,11 +149,10 @@
+#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
+
+#endif
-diff --git a/include/linux/spinlock_types_raw.h b/include/linux/spinlock_types_raw.h
-new file mode 100644
-index 0000000..edffc4d
+Index: linux-stable/include/linux/spinlock_types_raw.h
+===================================================================
--- /dev/null
-+++ b/include/linux/spinlock_types_raw.h
++++ linux-stable/include/linux/spinlock_types_raw.h
@@ -0,0 +1,56 @@
+#ifndef __LINUX_SPINLOCK_TYPES_RAW_H
+#define __LINUX_SPINLOCK_TYPES_RAW_H
Added: dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-deal-clever-with-stopper-lock.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-deal-clever-with-stopper-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,60 @@
+Subject: stomp_machine: Use mutex_trylock when called from inactive cpu
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Wed, 03 Oct 2012 17:21:53 +0100
+
+If the stop machinery is called from inactive CPU we cannot use
+mutex_lock, because some other stomp machine invokation might be in
+progress and the mutex can be contended. We cannot schedule from this
+context, so trylock and loop.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+---
+ kernel/stop_machine.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+Index: linux-stable/kernel/stop_machine.c
+===================================================================
+--- linux-stable.orig/kernel/stop_machine.c
++++ linux-stable/kernel/stop_machine.c
+@@ -158,7 +158,7 @@ static DEFINE_PER_CPU(struct cpu_stop_wo
+
+ static void queue_stop_cpus_work(const struct cpumask *cpumask,
+ cpu_stop_fn_t fn, void *arg,
+- struct cpu_stop_done *done)
++ struct cpu_stop_done *done, bool inactive)
+ {
+ struct cpu_stop_work *work;
+ unsigned int cpu;
+@@ -175,7 +175,12 @@ static void queue_stop_cpus_work(const s
+ * Make sure that all work is queued on all cpus before we
+ * any of the cpus can execute it.
+ */
+- mutex_lock(&stopper_lock);
++ if (!inactive) {
++ mutex_lock(&stopper_lock);
++ } else {
++ while (!mutex_trylock(&stopper_lock))
++ cpu_relax();
++ }
+ for_each_cpu(cpu, cpumask)
+ cpu_stop_queue_work(&per_cpu(cpu_stopper, cpu),
+ &per_cpu(stop_cpus_work, cpu));
+@@ -188,7 +193,7 @@ static int __stop_cpus(const struct cpum
+ struct cpu_stop_done done;
+
+ cpu_stop_init_done(&done, cpumask_weight(cpumask));
+- queue_stop_cpus_work(cpumask, fn, arg, &done);
++ queue_stop_cpus_work(cpumask, fn, arg, &done, false);
+ wait_for_stop_done(&done);
+ return done.executed ? done.ret : -ENOENT;
+ }
+@@ -601,7 +606,7 @@ int stop_machine_from_inactive_cpu(int (
+ set_state(&smdata, STOPMACHINE_PREPARE);
+ cpu_stop_init_done(&done, num_active_cpus());
+ queue_stop_cpus_work(cpu_active_mask, stop_machine_cpu_stop, &smdata,
+- &done);
++ &done, true);
+ ret = stop_machine_cpu_stop(&smdata);
+
+ /* Busy wait for completion. */
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-mark-stomper-thread.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0136-stomp-machine-mark-stomper-thread.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0136-stomp-machine-mark-stomper-thread.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-mark-stomper-thread.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 8b7e90abe179dec1e183273d7f6677943b0d2fcc Mon Sep 17 00:00:00 2001
+Subject: stomp-machine-mark-stomper-thread.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 19:53:19 +0200
-Subject: [136/256] stomp-machine-mark-stomper-thread.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -9,11 +8,11 @@
kernel/stop_machine.c | 1 +
2 files changed, 2 insertions(+)
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index a6b9a6d..cdfc16e 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1864,6 +1864,7 @@ extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *
+Index: linux-stable/include/linux/sched.h
+===================================================================
+--- linux-stable.orig/include/linux/sched.h
++++ linux-stable/include/linux/sched.h
+@@ -1836,6 +1836,7 @@ extern void thread_group_times(struct ta
#define PF_FROZEN 0x00010000 /* frozen for system suspend */
#define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */
#define PF_KSWAPD 0x00040000 /* I am kswapd */
@@ -21,11 +20,11 @@
#define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */
#define PF_KTHREAD 0x00200000 /* I am a kernel thread */
#define PF_RANDOMIZE 0x00400000 /* randomize virtual address space */
-diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
-index 61779f8..484a335 100644
---- a/kernel/stop_machine.c
-+++ b/kernel/stop_machine.c
-@@ -327,6 +327,7 @@ static int __cpuinit cpu_stop_cpu_callback(struct notifier_block *nfb,
+Index: linux-stable/kernel/stop_machine.c
+===================================================================
+--- linux-stable.orig/kernel/stop_machine.c
++++ linux-stable/kernel/stop_machine.c
+@@ -327,6 +327,7 @@ static int __cpuinit cpu_stop_cpu_callba
if (IS_ERR(p))
return notifier_from_errno(PTR_ERR(p));
get_task_struct(p);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-raw-lock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0137-stomp-machine-raw-lock.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0137-stomp-machine-raw-lock.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/stomp-machine-raw-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From 788f2922ddf4ac99ce73c5fa847eabad78d0cebd Mon Sep 17 00:00:00 2001
+Subject: stomp-machine-raw-lock.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 29 Jun 2011 11:01:51 +0200
-Subject: [137/256] stomp-machine-raw-lock.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
- kernel/stop_machine.c | 58 ++++++++++++++++++++++++++++++++++---------------
+ kernel/stop_machine.c | 58 +++++++++++++++++++++++++++++++++++---------------
1 file changed, 41 insertions(+), 17 deletions(-)
-diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
-index 484a335..561ba3a 100644
---- a/kernel/stop_machine.c
-+++ b/kernel/stop_machine.c
+Index: linux-stable/kernel/stop_machine.c
+===================================================================
+--- linux-stable.orig/kernel/stop_machine.c
++++ linux-stable/kernel/stop_machine.c
@@ -29,12 +29,12 @@ struct cpu_stop_done {
atomic_t nr_todo; /* nr left to execute */
bool executed; /* actually executed? */
@@ -27,7 +26,7 @@
bool enabled; /* is this stopper enabled? */
struct list_head works; /* list of pending works */
struct task_struct *thread; /* stopper thread */
-@@ -47,7 +47,7 @@ static void cpu_stop_init_done(struct cpu_stop_done *done, unsigned int nr_todo)
+@@ -47,7 +47,7 @@ static void cpu_stop_init_done(struct cp
{
memset(done, 0, sizeof(*done));
atomic_set(&done->nr_todo, nr_todo);
@@ -36,7 +35,7 @@
}
/* signal completion unless @done is NULL */
-@@ -56,8 +56,10 @@ static void cpu_stop_signal_done(struct cpu_stop_done *done, bool executed)
+@@ -56,8 +56,10 @@ static void cpu_stop_signal_done(struct
if (done) {
if (executed)
done->executed = true;
@@ -49,7 +48,7 @@
}
}
-@@ -67,7 +69,7 @@ static void cpu_stop_queue_work(struct cpu_stopper *stopper,
+@@ -67,7 +69,7 @@ static void cpu_stop_queue_work(struct c
{
unsigned long flags;
@@ -58,7 +57,7 @@
if (stopper->enabled) {
list_add_tail(&work->list, &stopper->works);
-@@ -75,7 +77,23 @@ static void cpu_stop_queue_work(struct cpu_stopper *stopper,
+@@ -75,7 +77,23 @@ static void cpu_stop_queue_work(struct c
} else
cpu_stop_signal_done(work->done, false);
@@ -83,7 +82,7 @@
}
/**
-@@ -109,7 +127,7 @@ int stop_one_cpu(unsigned int cpu, cpu_stop_fn_t fn, void *arg)
+@@ -109,7 +127,7 @@ int stop_one_cpu(unsigned int cpu, cpu_s
cpu_stop_init_done(&done, 1);
cpu_stop_queue_work(&per_cpu(cpu_stopper, cpu), &work);
@@ -92,7 +91,7 @@
return done.executed ? done.ret : -ENOENT;
}
-@@ -171,7 +189,7 @@ static int __stop_cpus(const struct cpumask *cpumask,
+@@ -171,7 +189,7 @@ static int __stop_cpus(const struct cpum
cpu_stop_init_done(&done, cpumask_weight(cpumask));
queue_stop_cpus_work(cpumask, fn, arg, &done);
@@ -131,7 +130,7 @@
} else
schedule();
-@@ -337,9 +361,9 @@ static int __cpuinit cpu_stop_cpu_callback(struct notifier_block *nfb,
+@@ -337,9 +361,9 @@ static int __cpuinit cpu_stop_cpu_callba
/* strictly unnecessary, as first user will wake it */
wake_up_process(stopper->thread);
/* mark enabled */
@@ -143,7 +142,7 @@
break;
#ifdef CONFIG_HOTPLUG_CPU
-@@ -352,11 +376,11 @@ static int __cpuinit cpu_stop_cpu_callback(struct notifier_block *nfb,
+@@ -352,11 +376,11 @@ static int __cpuinit cpu_stop_cpu_callba
/* kill the stopper */
kthread_stop(stopper->thread);
/* drain remaining works */
@@ -166,7 +165,7 @@
INIT_LIST_HEAD(&stopper->works);
}
-@@ -581,7 +605,7 @@ int stop_machine_from_inactive_cpu(int (*fn)(void *), void *data,
+@@ -581,7 +605,7 @@ int stop_machine_from_inactive_cpu(int (
ret = stop_machine_cpu_stop(&smdata);
/* Busy wait for completion. */
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0135-stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0135-stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From f6659d411c2ebfc6f8c2dd2b94eb25f24566c12a Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:30:27 -0500
-Subject: [135/256] stop_machine: convert stop_machine_run() to PREEMPT_RT
+Subject: stop_machine: convert stop_machine_run() to PREEMPT_RT
Instead of playing with non-preemption, introduce explicit
startup serialization. This is more robust and cleaner as
@@ -9,15 +8,16 @@
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/stop_machine.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
-diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
-index 2f194e9..61779f8 100644
---- a/kernel/stop_machine.c
-+++ b/kernel/stop_machine.c
-@@ -135,6 +135,7 @@ void stop_one_cpu_nowait(unsigned int cpu, cpu_stop_fn_t fn, void *arg,
+Index: linux-stable/kernel/stop_machine.c
+===================================================================
+--- linux-stable.orig/kernel/stop_machine.c
++++ linux-stable/kernel/stop_machine.c
+@@ -135,6 +135,7 @@ void stop_one_cpu_nowait(unsigned int cp
/* static data for stop_cpus */
static DEFINE_MUTEX(stop_cpus_mutex);
@@ -25,7 +25,7 @@
static DEFINE_PER_CPU(struct cpu_stop_work, stop_cpus_work);
static void queue_stop_cpus_work(const struct cpumask *cpumask,
-@@ -153,15 +154,14 @@ static void queue_stop_cpus_work(const struct cpumask *cpumask,
+@@ -153,15 +154,14 @@ static void queue_stop_cpus_work(const s
}
/*
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/suspend-prevernt-might-sleep-splats.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0039-suspend-Prevent-might-sleep-splats.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0039-suspend-Prevent-might-sleep-splats.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/suspend-prevernt-might-sleep-splats.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 64a6f8ab2972b1cd7aba1d703437b8fe70063303 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 15 Jul 2010 10:29:00 +0200
-Subject: [039/256] suspend: Prevent might sleep splats
+Subject: suspend: Prevent might sleep splats
timekeeping suspend/resume calls read_persistant_clock() which takes
rtc_lock. That results in might sleep warnings because at that point
@@ -17,30 +16,30 @@
Needs to be revisited.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- include/linux/kernel.h | 2 +-
+ include/linux/kernel.h | 1 +
kernel/power/hibernate.c | 7 +++++++
kernel/power/suspend.c | 4 ++++
- 3 files changed, 12 insertions(+), 1 deletion(-)
+ 3 files changed, 12 insertions(+)
-diff --git a/include/linux/kernel.h b/include/linux/kernel.h
-index 645231c..e43a4a2 100644
---- a/include/linux/kernel.h
-+++ b/include/linux/kernel.h
-@@ -374,7 +374,7 @@ extern enum system_states {
+Index: linux-stable/include/linux/kernel.h
+===================================================================
+--- linux-stable.orig/include/linux/kernel.h
++++ linux-stable/include/linux/kernel.h
+@@ -385,6 +385,7 @@ extern enum system_states {
SYSTEM_HALT,
SYSTEM_POWER_OFF,
SYSTEM_RESTART,
-- SYSTEM_SUSPEND_DISK,
+ SYSTEM_SUSPEND,
} system_state;
#define TAINT_PROPRIETARY_MODULE 0
-diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
-index e09dfbf..1aa6e1f 100644
---- a/kernel/power/hibernate.c
-+++ b/kernel/power/hibernate.c
-@@ -270,6 +270,8 @@ static int create_image(int platform_mode)
+Index: linux-stable/kernel/power/hibernate.c
+===================================================================
+--- linux-stable.orig/kernel/power/hibernate.c
++++ linux-stable/kernel/power/hibernate.c
+@@ -275,6 +275,8 @@ static int create_image(int platform_mod
local_irq_disable();
@@ -49,7 +48,7 @@
error = syscore_suspend();
if (error) {
printk(KERN_ERR "PM: Some system devices failed to power down, "
-@@ -297,6 +299,7 @@ static int create_image(int platform_mode)
+@@ -302,6 +304,7 @@ static int create_image(int platform_mod
syscore_resume();
Enable_irqs:
@@ -57,7 +56,7 @@
local_irq_enable();
Enable_cpus:
-@@ -420,6 +423,7 @@ static int resume_target_kernel(bool platform_mode)
+@@ -427,6 +430,7 @@ static int resume_target_kernel(bool pla
goto Enable_cpus;
local_irq_disable();
@@ -65,7 +64,7 @@
error = syscore_suspend();
if (error)
-@@ -453,6 +457,7 @@ static int resume_target_kernel(bool platform_mode)
+@@ -460,6 +464,7 @@ static int resume_target_kernel(bool pla
syscore_resume();
Enable_irqs:
@@ -73,7 +72,7 @@
local_irq_enable();
Enable_cpus:
-@@ -532,6 +537,7 @@ int hibernation_platform_enter(void)
+@@ -542,6 +547,7 @@ int hibernation_platform_enter(void)
goto Platform_finish;
local_irq_disable();
@@ -81,7 +80,7 @@
syscore_suspend();
if (pm_wakeup_pending()) {
error = -EAGAIN;
-@@ -544,6 +550,7 @@ int hibernation_platform_enter(void)
+@@ -554,6 +560,7 @@ int hibernation_platform_enter(void)
Power_up:
syscore_resume();
@@ -89,11 +88,11 @@
local_irq_enable();
enable_nonboot_cpus();
-diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
-index 396d262..d4fb331 100644
---- a/kernel/power/suspend.c
-+++ b/kernel/power/suspend.c
-@@ -164,6 +164,8 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
+Index: linux-stable/kernel/power/suspend.c
+===================================================================
+--- linux-stable.orig/kernel/power/suspend.c
++++ linux-stable/kernel/power/suspend.c
+@@ -165,6 +165,8 @@ static int suspend_enter(suspend_state_t
arch_suspend_disable_irqs();
BUG_ON(!irqs_disabled());
@@ -102,7 +101,7 @@
error = syscore_suspend();
if (!error) {
*wakeup = pm_wakeup_pending();
-@@ -174,6 +176,8 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
+@@ -175,6 +177,8 @@ static int suspend_enter(suspend_state_t
syscore_resume();
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sysctl-include-atomic-h.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0046-sysctl-include-fix.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0046-sysctl-include-fix.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sysctl-include-atomic-h.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,17 +1,16 @@
-From a8e516eff1ffd16b863d136964f1b0537d6037b1 Mon Sep 17 00:00:00 2001
+Subject: sysctl-include-fix.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 14 Nov 2011 10:52:34 +0100
-Subject: [046/256] sysctl-include-fix.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
include/linux/sysctl.h | 1 +
1 file changed, 1 insertion(+)
-diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
-index c34b4c8..4fbc9f7 100644
---- a/include/linux/sysctl.h
-+++ b/include/linux/sysctl.h
+Index: linux-stable/include/linux/sysctl.h
+===================================================================
+--- linux-stable.orig/include/linux/sysctl.h
++++ linux-stable/include/linux/sysctl.h
@@ -933,6 +933,7 @@ enum
#include <linux/rcupdate.h>
#include <linux/wait.h>
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/sysfs-realtime-entry.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0226-add-sys-kernel-realtime-entry.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0226-add-sys-kernel-realtime-entry.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/sysfs-realtime-entry.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 336159d79ec5b0b15dccae3ea19328d433042f47 Mon Sep 17 00:00:00 2001
+Subject: add /sys/kernel/realtime entry
From: Clark Williams <williams at redhat.com>
-Date: Sat, 30 Jul 2011 21:55:53 -0500
-Subject: [226/256] add /sys/kernel/realtime entry
+Date: Sat Jul 30 21:55:53 2011 -0500
Add a /sys/kernel entry to indicate that the kernel is a
realtime kernel.
@@ -18,10 +17,10 @@
kernel/ksysfs.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
-diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c
-index 4e316e1..a546d33 100644
---- a/kernel/ksysfs.c
-+++ b/kernel/ksysfs.c
+Index: linux-stable/kernel/ksysfs.c
+===================================================================
+--- linux-stable.orig/kernel/ksysfs.c
++++ linux-stable/kernel/ksysfs.c
@@ -133,6 +133,15 @@ KERNEL_ATTR_RO(vmcoreinfo);
#endif /* CONFIG_KEXEC */
@@ -38,7 +37,7 @@
/* whether file capabilities are enabled */
static ssize_t fscaps_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
-@@ -182,6 +191,9 @@ static struct attribute * kernel_attrs[] = {
+@@ -182,6 +191,9 @@ static struct attribute * kernel_attrs[]
&kexec_crash_size_attr.attr,
&vmcoreinfo_attr.attr,
#endif
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0167-tasklet-Prevent-tasklets-from-going-into-infinite-sp.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0167-tasklet-Prevent-tasklets-from-going-into-infinite-sp.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From 32cb0e7fe45357b698e1a95cc33bfefd6ea9bd71 Mon Sep 17 00:00:00 2001
+Subject: tasklet: Prevent tasklets from going into infinite spin in RT
From: Ingo Molnar <mingo at elte.hu>
-Date: Tue, 29 Nov 2011 20:18:22 -0500
-Subject: [167/256] tasklet: Prevent tasklets from going into infinite spin in
- RT
+Date: Tue Nov 29 20:18:22 2011 -0500
When CONFIG_PREEMPT_RT_FULL is enabled, tasklets run as threads,
and spinlocks turn are mutexes. But this can cause issues with
@@ -11,21 +9,21 @@
count is increased. When a tasklet runs, it checks this counter
and if it is set, it adds itself back on the softirq queue and
returns.
-
+
The problem arises in RT because ksoftirq will see that a softirq
is ready to run (the tasklet softirq just re-armed itself), and will
not sleep, but instead run the softirqs again. The tasklet softirq
will still see that the count is non-zero and will not execute
the tasklet and requeue itself on the softirq again, which will
cause ksoftirqd to run it again and again and again.
-
+
It gets worse because ksoftirqd runs as a real-time thread.
If it preempted the task that disabled tasklets, and that task
has migration disabled, or can't run for other reasons, the tasklet
softirq will never run because the count will never be zero, and
ksoftirqd will go into an infinite loop. As an RT task, it this
becomes a big problem.
-
+
This is a hack solution to have tasklet_disable stop tasklets, and
when a tasklet runs, instead of requeueing the tasklet softirqd
it delays it. When tasklet_enable() is called, and tasklets are
@@ -33,20 +31,21 @@
This prevents the lock up from ksoftirq going into an infinite loop.
[ rostedt at goodmis.org: ported to 3.0-rt ]
-
+
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- include/linux/interrupt.h | 39 ++++-----
- kernel/softirq.c | 208 ++++++++++++++++++++++++++++++++-------------
+ include/linux/interrupt.h | 39 ++++----
+ kernel/softirq.c | 208 +++++++++++++++++++++++++++++++++-------------
2 files changed, 170 insertions(+), 77 deletions(-)
-diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index 5dde591..be33625 100644
---- a/include/linux/interrupt.h
-+++ b/include/linux/interrupt.h
-@@ -511,8 +511,9 @@ extern void __send_remote_softirq(struct call_single_data *cp, int cpu,
+Index: linux-stable/include/linux/interrupt.h
+===================================================================
+--- linux-stable.orig/include/linux/interrupt.h
++++ linux-stable/include/linux/interrupt.h
+@@ -505,8 +505,9 @@ extern void __send_remote_softirq(struct
to be executed on some cpu at least once after this.
* If the tasklet is already scheduled, but its execution is still not
started, it will be executed only once.
@@ -58,7 +57,7 @@
* Tasklet is strictly serialized wrt itself, but not
wrt another tasklets. If client needs some intertask synchronization,
he makes it with spinlocks.
-@@ -537,27 +538,36 @@ struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data }
+@@ -531,27 +532,36 @@ struct tasklet_struct name = { NULL, 0,
enum
{
TASKLET_STATE_SCHED, /* Tasklet is scheduled for execution */
@@ -101,7 +100,7 @@
#define tasklet_unlock_wait(t) do { } while (0)
#define tasklet_unlock(t) do { } while (0)
#endif
-@@ -606,17 +616,8 @@ static inline void tasklet_disable(struct tasklet_struct *t)
+@@ -600,17 +610,8 @@ static inline void tasklet_disable(struc
smp_mb();
}
@@ -121,10 +120,10 @@
extern void tasklet_kill(struct tasklet_struct *t);
extern void tasklet_kill_immediate(struct tasklet_struct *t, unsigned int cpu);
-diff --git a/kernel/softirq.c b/kernel/softirq.c
-index 86561c0..aec7d69 100644
---- a/kernel/softirq.c
-+++ b/kernel/softirq.c
+Index: linux-stable/kernel/softirq.c
+===================================================================
+--- linux-stable.orig/kernel/softirq.c
++++ linux-stable/kernel/softirq.c
@@ -21,6 +21,7 @@
#include <linux/freezer.h>
#include <linux/kthread.h>
@@ -133,7 +132,7 @@
#include <linux/ftrace.h>
#include <linux/smp.h>
#include <linux/tick.h>
-@@ -656,15 +657,45 @@ struct tasklet_head
+@@ -665,15 +666,45 @@ struct tasklet_head
static DEFINE_PER_CPU(struct tasklet_head, tasklet_vec);
static DEFINE_PER_CPU(struct tasklet_head, tasklet_hi_vec);
@@ -183,7 +182,7 @@
local_irq_restore(flags);
}
-@@ -675,10 +706,7 @@ void __tasklet_hi_schedule(struct tasklet_struct *t)
+@@ -684,10 +715,7 @@ void __tasklet_hi_schedule(struct taskle
unsigned long flags;
local_irq_save(flags);
@@ -195,7 +194,7 @@
local_irq_restore(flags);
}
-@@ -686,50 +714,119 @@ EXPORT_SYMBOL(__tasklet_hi_schedule);
+@@ -695,50 +723,119 @@ EXPORT_SYMBOL(__tasklet_hi_schedule);
void __tasklet_hi_schedule_first(struct tasklet_struct *t)
{
@@ -341,7 +340,7 @@
static void tasklet_hi_action(struct softirq_action *a)
{
struct tasklet_struct *list;
-@@ -740,29 +837,7 @@ static void tasklet_hi_action(struct softirq_action *a)
+@@ -749,29 +846,7 @@ static void tasklet_hi_action(struct sof
__this_cpu_write(tasklet_hi_vec.tail, &__get_cpu_var(tasklet_hi_vec).head);
local_irq_enable();
@@ -372,7 +371,7 @@
}
-@@ -785,7 +860,7 @@ void tasklet_kill(struct tasklet_struct *t)
+@@ -794,7 +869,7 @@ void tasklet_kill(struct tasklet_struct
while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) {
do {
@@ -381,7 +380,7 @@
} while (test_bit(TASKLET_STATE_SCHED, &t->state));
}
tasklet_unlock_wait(t);
-@@ -991,6 +1066,23 @@ void __init softirq_init(void)
+@@ -1000,6 +1075,23 @@ void __init softirq_init(void)
open_softirq(HI_SOFTIRQ, tasklet_hi_action);
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/tasklist-lock-fix-section-conflict.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0181-rwlocks-Fix-section-mismatch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0181-rwlocks-Fix-section-mismatch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/tasklist-lock-fix-section-conflict.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,16 +1,12 @@
-From 4e527692e6bd21dafd6202aeb28df65f12bbcfd1 Mon Sep 17 00:00:00 2001
+Subject: rwlocks: Fix section mismatch
From: John Kacur <jkacur at redhat.com>
-Date: Mon, 19 Sep 2011 11:09:27 +0200
-Subject: [181/256] rwlocks: Fix section mismatch
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
+Date: Mon, 19 Sep 2011 11:09:27 +0200 (CEST)
This fixes the following build error for the preempt-rt kernel.
make kernel/fork.o
CC kernel/fork.o
-kernel/fork.c:90: error: section of ¡tasklist_lock¢ conflicts with previous declaration
+kernel/fork.c:90: error: section of ¡tasklist_lock¢ conflicts with previous declaration
make[2]: *** [kernel/fork.o] Error 1
make[1]: *** [kernel/fork.o] Error 2
@@ -37,10 +33,10 @@
kernel/fork.c | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
-diff --git a/include/linux/rwlock_types.h b/include/linux/rwlock_types.h
-index 5317cd9..d0da966 100644
---- a/include/linux/rwlock_types.h
-+++ b/include/linux/rwlock_types.h
+Index: linux-stable/include/linux/rwlock_types.h
+===================================================================
+--- linux-stable.orig/include/linux/rwlock_types.h
++++ linux-stable/include/linux/rwlock_types.h
@@ -47,6 +47,7 @@ typedef struct {
RW_DEP_MAP_INIT(lockname) }
#endif
@@ -50,11 +46,11 @@
+ rwlock_t name __cacheline_aligned_in_smp = __RW_LOCK_UNLOCKED(name)
#endif /* __LINUX_RWLOCK_TYPES_H */
-diff --git a/kernel/fork.c b/kernel/fork.c
-index e6cf9db..ec2ff23 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -91,7 +91,7 @@ int max_threads; /* tunable limit on nr_threads */
+Index: linux-stable/kernel/fork.c
+===================================================================
+--- linux-stable.orig/kernel/fork.c
++++ linux-stable/kernel/fork.c
+@@ -93,7 +93,7 @@ int max_threads; /* tunable limit on nr
DEFINE_PER_CPU(unsigned long, process_counts) = 0;
Added: dists/trunk/linux/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,527 @@
+Subject: timekeeping: Split xtime_lock
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 01 Mar 2012 15:14:06 +0100
+
+xtime_lock is going to be split apart in mainline, so we can shorten
+the seqcount protected regions and avoid updating seqcount in some
+code pathes. This is a straight forward split, so we can avoid the
+whole mess with raw seqlocks for RT.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/time/jiffies.c | 4 -
+ kernel/time/tick-common.c | 10 ++-
+ kernel/time/tick-internal.h | 3 -
+ kernel/time/tick-sched.c | 16 +++---
+ kernel/time/timekeeping.c | 116 +++++++++++++++++++++++++-------------------
+ 5 files changed, 88 insertions(+), 61 deletions(-)
+
+Index: linux-stable/kernel/time/jiffies.c
+===================================================================
+--- linux-stable.orig/kernel/time/jiffies.c
++++ linux-stable/kernel/time/jiffies.c
+@@ -74,9 +74,9 @@ u64 get_jiffies_64(void)
+ u64 ret;
+
+ do {
+- seq = read_seqbegin(&xtime_lock);
++ seq = read_seqcount_begin(&xtime_seq);
+ ret = jiffies_64;
+- } while (read_seqretry(&xtime_lock, seq));
++ } while (read_seqcount_retry(&xtime_seq, seq));
+ return ret;
+ }
+ EXPORT_SYMBOL(get_jiffies_64);
+Index: linux-stable/kernel/time/tick-common.c
+===================================================================
+--- linux-stable.orig/kernel/time/tick-common.c
++++ linux-stable/kernel/time/tick-common.c
+@@ -63,13 +63,15 @@ int tick_is_oneshot_available(void)
+ static void tick_periodic(int cpu)
+ {
+ if (tick_do_timer_cpu == cpu) {
+- write_seqlock(&xtime_lock);
++ raw_spin_lock(&xtime_lock);
++ write_seqcount_begin(&xtime_seq);
+
+ /* Keep track of the next tick event */
+ tick_next_period = ktime_add(tick_next_period, tick_period);
+
+ do_timer(1);
+- write_sequnlock(&xtime_lock);
++ write_seqcount_end(&xtime_seq);
++ raw_spin_unlock(&xtime_lock);
+ }
+
+ update_process_times(user_mode(get_irq_regs()));
+@@ -130,9 +132,9 @@ void tick_setup_periodic(struct clock_ev
+ ktime_t next;
+
+ do {
+- seq = read_seqbegin(&xtime_lock);
++ seq = read_seqcount_begin(&xtime_seq);
+ next = tick_next_period;
+- } while (read_seqretry(&xtime_lock, seq));
++ } while (read_seqcount_retry(&xtime_seq, seq));
+
+ clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT);
+
+Index: linux-stable/kernel/time/tick-internal.h
+===================================================================
+--- linux-stable.orig/kernel/time/tick-internal.h
++++ linux-stable/kernel/time/tick-internal.h
+@@ -141,4 +141,5 @@ static inline int tick_device_is_functio
+ #endif
+
+ extern void do_timer(unsigned long ticks);
+-extern seqlock_t xtime_lock;
++extern raw_spinlock_t xtime_lock;
++extern seqcount_t xtime_seq;
+Index: linux-stable/kernel/time/tick-sched.c
+===================================================================
+--- linux-stable.orig/kernel/time/tick-sched.c
++++ linux-stable/kernel/time/tick-sched.c
+@@ -56,7 +56,8 @@ static void tick_do_update_jiffies64(kti
+ return;
+
+ /* Reevalute with xtime_lock held */
+- write_seqlock(&xtime_lock);
++ raw_spin_lock(&xtime_lock);
++ write_seqcount_begin(&xtime_seq);
+
+ delta = ktime_sub(now, last_jiffies_update);
+ if (delta.tv64 >= tick_period.tv64) {
+@@ -79,7 +80,8 @@ static void tick_do_update_jiffies64(kti
+ /* Keep the tick_next_period variable up to date */
+ tick_next_period = ktime_add(last_jiffies_update, tick_period);
+ }
+- write_sequnlock(&xtime_lock);
++ write_seqcount_end(&xtime_seq);
++ raw_spin_unlock(&xtime_lock);
+ }
+
+ /*
+@@ -89,12 +91,14 @@ static ktime_t tick_init_jiffy_update(vo
+ {
+ ktime_t period;
+
+- write_seqlock(&xtime_lock);
++ raw_spin_lock(&xtime_lock);
++ write_seqcount_begin(&xtime_seq);
+ /* Did we start the jiffies update yet ? */
+ if (last_jiffies_update.tv64 == 0)
+ last_jiffies_update = tick_next_period;
+ period = last_jiffies_update;
+- write_sequnlock(&xtime_lock);
++ write_seqcount_end(&xtime_seq);
++ raw_spin_unlock(&xtime_lock);
+ return period;
+ }
+
+@@ -282,11 +286,11 @@ static ktime_t tick_nohz_stop_sched_tick
+
+ /* Read jiffies and the time when jiffies were updated last */
+ do {
+- seq = read_seqbegin(&xtime_lock);
++ seq = read_seqcount_begin(&xtime_seq);
+ last_update = last_jiffies_update;
+ last_jiffies = jiffies;
+ time_delta = timekeeping_max_deferment();
+- } while (read_seqretry(&xtime_lock, seq));
++ } while (read_seqcount_retry(&xtime_seq, seq));
+
+ if (rcu_needs_cpu(cpu, &rcu_delta_jiffies) || printk_needs_cpu(cpu) ||
+ arch_needs_cpu(cpu)) {
+Index: linux-stable/kernel/time/timekeeping.c
+===================================================================
+--- linux-stable.orig/kernel/time/timekeeping.c
++++ linux-stable/kernel/time/timekeeping.c
+@@ -74,7 +74,8 @@ struct timekeeper {
+ /* The raw monotonic time for the CLOCK_MONOTONIC_RAW posix clock. */
+ struct timespec raw_time;
+ /* Seqlock for all timekeeper values */
+- seqlock_t lock;
++ seqcount_t seq;
++ raw_spinlock_t lock;
+ };
+
+ static struct timekeeper timekeeper;
+@@ -83,7 +84,8 @@ static struct timekeeper timekeeper;
+ * This read-write spinlock protects us from races in SMP while
+ * playing with xtime.
+ */
+-__cacheline_aligned_in_smp DEFINE_SEQLOCK(xtime_lock);
++__cacheline_aligned_in_smp DEFINE_RAW_SPINLOCK(xtime_lock);
++seqcount_t xtime_seq;
+
+ /* flag for if timekeeping is suspended */
+ int __read_mostly timekeeping_suspended;
+@@ -300,12 +302,12 @@ void getnstimeofday(struct timespec *ts)
+ WARN_ON(timekeeping_suspended);
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+
+ ts->tv_sec = tk->xtime_sec;
+ nsecs = timekeeping_get_ns(tk);
+
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ ts->tv_nsec = 0;
+ timespec_add_ns(ts, nsecs);
+@@ -321,11 +323,11 @@ ktime_t ktime_get(void)
+ WARN_ON(timekeeping_suspended);
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+ secs = tk->xtime_sec + tk->wall_to_monotonic.tv_sec;
+ nsecs = timekeeping_get_ns(tk) + tk->wall_to_monotonic.tv_nsec;
+
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+ /*
+ * Use ktime_set/ktime_add_ns to create a proper ktime on
+ * 32-bit architectures without CONFIG_KTIME_SCALAR.
+@@ -352,12 +354,12 @@ void ktime_get_ts(struct timespec *ts)
+ WARN_ON(timekeeping_suspended);
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+ ts->tv_sec = tk->xtime_sec;
+ nsec = timekeeping_get_ns(tk);
+ tomono = tk->wall_to_monotonic;
+
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ ts->tv_sec += tomono.tv_sec;
+ ts->tv_nsec = 0;
+@@ -385,7 +387,7 @@ void getnstime_raw_and_real(struct times
+ WARN_ON_ONCE(timekeeping_suspended);
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+
+ *ts_raw = tk->raw_time;
+ ts_real->tv_sec = tk->xtime_sec;
+@@ -394,7 +396,7 @@ void getnstime_raw_and_real(struct times
+ nsecs_raw = timekeeping_get_ns_raw(tk);
+ nsecs_real = timekeeping_get_ns(tk);
+
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ timespec_add_ns(ts_raw, nsecs_raw);
+ timespec_add_ns(ts_real, nsecs_real);
+@@ -434,7 +436,8 @@ int do_settimeofday(const struct timespe
+ if (!timespec_valid_strict(tv))
+ return -EINVAL;
+
+- write_seqlock_irqsave(&tk->lock, flags);
++ raw_spin_lock_irqsave(&tk->lock, flags);
++ write_seqcount_begin(&tk->seq);
+
+ timekeeping_forward_now(tk);
+
+@@ -448,7 +451,8 @@ int do_settimeofday(const struct timespe
+
+ timekeeping_update(tk, true);
+
+- write_sequnlock_irqrestore(&tk->lock, flags);
++ write_seqcount_end(&tk->seq);
++ raw_spin_unlock_irqrestore(&tk->lock, flags);
+
+ /* signal hrtimers about time change */
+ clock_was_set();
+@@ -473,7 +477,8 @@ int timekeeping_inject_offset(struct tim
+ if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
+ return -EINVAL;
+
+- write_seqlock_irqsave(&tk->lock, flags);
++ raw_spin_lock_irqsave(&tk->lock, flags);
++ write_seqcount_begin(&tk->seq);
+
+ timekeeping_forward_now(tk);
+
+@@ -490,7 +495,8 @@ int timekeeping_inject_offset(struct tim
+ error: /* even if we error out, we forwarded the time, so call update */
+ timekeeping_update(tk, true);
+
+- write_sequnlock_irqrestore(&tk->lock, flags);
++ write_seqcount_end(&tk->seq);
++ raw_spin_unlock_irqrestore(&tk->lock, flags);
+
+ /* signal hrtimers about time change */
+ clock_was_set();
+@@ -512,7 +518,8 @@ static int change_clocksource(void *data
+
+ new = (struct clocksource *) data;
+
+- write_seqlock_irqsave(&tk->lock, flags);
++ raw_spin_lock_irqsave(&tk->lock, flags);
++ write_seqcount_begin(&tk->seq);
+
+ timekeeping_forward_now(tk);
+ if (!new->enable || new->enable(new) == 0) {
+@@ -523,7 +530,8 @@ static int change_clocksource(void *data
+ }
+ timekeeping_update(tk, true);
+
+- write_sequnlock_irqrestore(&tk->lock, flags);
++ write_seqcount_end(&tk->seq);
++ raw_spin_unlock_irqrestore(&tk->lock, flags);
+
+ return 0;
+ }
+@@ -573,11 +581,11 @@ void getrawmonotonic(struct timespec *ts
+ s64 nsecs;
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+ nsecs = timekeeping_get_ns_raw(tk);
+ *ts = tk->raw_time;
+
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ timespec_add_ns(ts, nsecs);
+ }
+@@ -593,11 +601,11 @@ int timekeeping_valid_for_hres(void)
+ int ret;
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+
+ ret = tk->clock->flags & CLOCK_SOURCE_VALID_FOR_HRES;
+
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ return ret;
+ }
+@@ -612,11 +620,11 @@ u64 timekeeping_max_deferment(void)
+ u64 ret;
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+
+ ret = tk->clock->max_idle_ns;
+
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ return ret;
+ }
+@@ -677,11 +685,13 @@ void __init timekeeping_init(void)
+ boot.tv_nsec = 0;
+ }
+
+- seqlock_init(&tk->lock);
++ raw_spin_lock_init(&tk->lock);
++ seqcount_init(&tk->seq);
+
+ ntp_init();
+
+- write_seqlock_irqsave(&tk->lock, flags);
++ raw_spin_lock_irqsave(&tk->lock, flags);
++ write_seqcount_begin(&tk->seq);
+ clock = clocksource_default_clock();
+ if (clock->enable)
+ clock->enable(clock);
+@@ -700,7 +710,8 @@ void __init timekeeping_init(void)
+ tmp.tv_nsec = 0;
+ tk_set_sleep_time(tk, tmp);
+
+- write_sequnlock_irqrestore(&tk->lock, flags);
++ write_seqcount_end(&tk->seq);
++ raw_spin_unlock_irqrestore(&tk->lock, flags);
+ }
+
+ /* time in seconds when suspend began */
+@@ -747,7 +758,8 @@ void timekeeping_inject_sleeptime(struct
+ if (!(ts.tv_sec == 0 && ts.tv_nsec == 0))
+ return;
+
+- write_seqlock_irqsave(&tk->lock, flags);
++ raw_spin_lock_irqsave(&tk->lock, flags);
++ write_seqcount_begin(&tk->seq);
+
+ timekeeping_forward_now(tk);
+
+@@ -755,7 +767,8 @@ void timekeeping_inject_sleeptime(struct
+
+ timekeeping_update(tk, true);
+
+- write_sequnlock_irqrestore(&tk->lock, flags);
++ write_seqcount_end(&tk->seq);
++ raw_spin_unlock_irqrestore(&tk->lock, flags);
+
+ /* signal hrtimers about time change */
+ clock_was_set();
+@@ -778,7 +791,8 @@ static void timekeeping_resume(void)
+
+ clocksource_resume();
+
+- write_seqlock_irqsave(&tk->lock, flags);
++ raw_spin_lock_irqsave(&tk->lock, flags);
++ write_seqcount_begin(&tk->seq);
+
+ if (timespec_compare(&ts, &timekeeping_suspend_time) > 0) {
+ ts = timespec_sub(ts, timekeeping_suspend_time);
+@@ -789,7 +803,8 @@ static void timekeeping_resume(void)
+ tk->ntp_error = 0;
+ timekeeping_suspended = 0;
+ timekeeping_update(tk, false);
+- write_sequnlock_irqrestore(&tk->lock, flags);
++ write_seqcount_end(&tk->seq);
++ raw_spin_unlock_irqrestore(&tk->lock, flags);
+
+ touch_softlockup_watchdog();
+
+@@ -808,7 +823,8 @@ static int timekeeping_suspend(void)
+
+ read_persistent_clock(&timekeeping_suspend_time);
+
+- write_seqlock_irqsave(&tk->lock, flags);
++ raw_spin_lock_irqsave(&tk->lock, flags);
++ write_seqcount_begin(&tk->seq);
+ timekeeping_forward_now(tk);
+ timekeeping_suspended = 1;
+
+@@ -831,7 +847,8 @@ static int timekeeping_suspend(void)
+ timekeeping_suspend_time =
+ timespec_add(timekeeping_suspend_time, delta_delta);
+ }
+- write_sequnlock_irqrestore(&tk->lock, flags);
++ write_seqcount_end(&tk->seq);
++ raw_spin_unlock_irqrestore(&tk->lock, flags);
+
+ clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
+ clocksource_suspend();
+@@ -1141,7 +1158,8 @@ static void update_wall_time(void)
+ unsigned long flags;
+ s64 remainder;
+
+- write_seqlock_irqsave(&tk->lock, flags);
++ raw_spin_lock_irqsave(&tk->lock, flags);
++ write_seqcount_begin(&tk->seq);
+
+ /* Make sure we're fully resumed: */
+ if (unlikely(timekeeping_suspended))
+@@ -1205,8 +1223,8 @@ static void update_wall_time(void)
+ timekeeping_update(tk, false);
+
+ out:
+- write_sequnlock_irqrestore(&tk->lock, flags);
+-
++ write_seqcount_end(&tk->seq);
++ raw_spin_unlock_irqrestore(&tk->lock, flags);
+ }
+
+ /**
+@@ -1253,13 +1271,13 @@ void get_monotonic_boottime(struct times
+ WARN_ON(timekeeping_suspended);
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+ ts->tv_sec = tk->xtime_sec;
+ nsec = timekeeping_get_ns(tk);
+ tomono = tk->wall_to_monotonic;
+ sleep = tk->total_sleep_time;
+
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ ts->tv_sec += tomono.tv_sec + sleep.tv_sec;
+ ts->tv_nsec = 0;
+@@ -1318,10 +1336,10 @@ struct timespec current_kernel_time(void
+ unsigned long seq;
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+
+ now = tk_xtime(tk);
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ return now;
+ }
+@@ -1334,11 +1352,11 @@ struct timespec get_monotonic_coarse(voi
+ unsigned long seq;
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+
+ now = tk_xtime(tk);
+ mono = tk->wall_to_monotonic;
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ set_normalized_timespec(&now, now.tv_sec + mono.tv_sec,
+ now.tv_nsec + mono.tv_nsec);
+@@ -1371,11 +1389,11 @@ void get_xtime_and_monotonic_and_sleep_o
+ unsigned long seq;
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+ *xtim = tk_xtime(tk);
+ *wtom = tk->wall_to_monotonic;
+ *sleep = tk->total_sleep_time;
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+ }
+
+ #ifdef CONFIG_HIGH_RES_TIMERS
+@@ -1395,14 +1413,14 @@ ktime_t ktime_get_update_offsets(ktime_t
+ u64 secs, nsecs;
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+
+ secs = tk->xtime_sec;
+ nsecs = timekeeping_get_ns(tk);
+
+ *offs_real = tk->offs_real;
+ *offs_boot = tk->offs_boot;
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ now = ktime_add_ns(ktime_set(secs, 0), nsecs);
+ now = ktime_sub(now, *offs_real);
+@@ -1420,9 +1438,9 @@ ktime_t ktime_get_monotonic_offset(void)
+ struct timespec wtom;
+
+ do {
+- seq = read_seqbegin(&tk->lock);
++ seq = read_seqcount_begin(&tk->seq);
+ wtom = tk->wall_to_monotonic;
+- } while (read_seqretry(&tk->lock, seq));
++ } while (read_seqcount_retry(&tk->seq, seq));
+
+ return timespec_to_ktime(wtom);
+ }
+@@ -1436,7 +1454,9 @@ EXPORT_SYMBOL_GPL(ktime_get_monotonic_of
+ */
+ void xtime_update(unsigned long ticks)
+ {
+- write_seqlock(&xtime_lock);
++ raw_spin_lock(&xtime_lock);
++ write_seqcount_begin(&xtime_seq);
+ do_timer(ticks);
+- write_sequnlock(&xtime_lock);
++ write_seqcount_end(&xtime_seq);
++ raw_spin_unlock(&xtime_lock);
+ }
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/timer-delay-waking-softirqs-from-the-jiffy-tick.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0112-timer-delay-waking-softirqs-from-the-jiffy-tick.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0112-timer-delay-waking-softirqs-from-the-jiffy-tick.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/timer-delay-waking-softirqs-from-the-jiffy-tick.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From e829401695c05815c8135aff08b12203d8dfd62d Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <peterz at infradead.org>
Date: Fri, 21 Aug 2009 11:56:45 +0200
-Subject: [112/256] timer: delay waking softirqs from the jiffy tick
+Subject: timer: delay waking softirqs from the jiffy tick
People were complaining about broken balancing with the recent -rt
series.
@@ -52,15 +51,16 @@
Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/timer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/kernel/timer.c b/kernel/timer.c
-index e069d9f..8e410fc 100644
---- a/kernel/timer.c
-+++ b/kernel/timer.c
-@@ -1384,13 +1384,13 @@ void update_process_times(int user_tick)
+Index: linux-stable/kernel/timer.c
+===================================================================
+--- linux-stable.orig/kernel/timer.c
++++ linux-stable/kernel/timer.c
+@@ -1398,13 +1398,13 @@ void update_process_times(int user_tick)
/* Note: this timer irq context must be accounted for as well. */
account_process_tick(p, user_tick);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/timer-fd-avoid-live-lock.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0120-timer-fd-Prevent-live-lock.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0120-timer-fd-Prevent-live-lock.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/timer-fd-avoid-live-lock.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 0af6efbe1030ca203bda5ed92f2870f5b104d2b8 Mon Sep 17 00:00:00 2001
+Subject: timer-fd: Prevent live lock
From: Thomas Gleixner <tglx at linutronix.de>
Date: Wed, 25 Jan 2012 11:08:40 +0100
-Subject: [120/256] timer-fd: Prevent live lock
If hrtimer_try_to_cancel() requires a retry, then depending on the
priority setting te retry loop might prevent timer callback completion
@@ -15,11 +14,11 @@
fs/timerfd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/fs/timerfd.c b/fs/timerfd.c
-index dffeb37..57f0e4e 100644
---- a/fs/timerfd.c
-+++ b/fs/timerfd.c
-@@ -313,7 +313,7 @@ SYSCALL_DEFINE4(timerfd_settime, int, ufd, int, flags,
+Index: linux-stable/fs/timerfd.c
+===================================================================
+--- linux-stable.orig/fs/timerfd.c
++++ linux-stable/fs/timerfd.c
+@@ -313,7 +313,7 @@ SYSCALL_DEFINE4(timerfd_settime, int, uf
if (hrtimer_try_to_cancel(&ctx->tmr) >= 0)
break;
spin_unlock_irq(&ctx->wqh.lock);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/timer-handle-idle-trylock-in-get-next-timer-irq.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0182-timer-handle-idle-trylock-in-get-next-timer-irq.patc.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0182-timer-handle-idle-trylock-in-get-next-timer-irq.patc.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/timer-handle-idle-trylock-in-get-next-timer-irq.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 59b62bae6e0cd7be660a38a8b93e873fec85e078 Mon Sep 17 00:00:00 2001
+Subject: timer-handle-idle-trylock-in-get-next-timer-irq.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 22:08:38 +0200
-Subject: [182/256] timer-handle-idle-trylock-in-get-next-timer-irq.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
@@ -10,11 +9,11 @@
kernel/timer.c | 7 ++++---
3 files changed, 16 insertions(+), 10 deletions(-)
-diff --git a/include/linux/spinlock_rt.h b/include/linux/spinlock_rt.h
-index 205ca95..3b555b4 100644
---- a/include/linux/spinlock_rt.h
-+++ b/include/linux/spinlock_rt.h
-@@ -51,7 +51,17 @@ extern void __lockfunc __rt_spin_unlock(struct rt_mutex *lock);
+Index: linux-stable/include/linux/spinlock_rt.h
+===================================================================
+--- linux-stable.orig/include/linux/spinlock_rt.h
++++ linux-stable/include/linux/spinlock_rt.h
+@@ -53,7 +53,17 @@ extern void __lockfunc __rt_spin_unlock(
#define spin_lock_irq(lock) spin_lock(lock)
@@ -33,10 +32,10 @@
#ifdef CONFIG_LOCKDEP
# define spin_lock_nested(lock, subclass) \
-diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
-index f9baaae..921c90b 100644
---- a/kernel/rtmutex.c
-+++ b/kernel/rtmutex.c
+Index: linux-stable/kernel/rtmutex.c
+===================================================================
+--- linux-stable.orig/kernel/rtmutex.c
++++ linux-stable/kernel/rtmutex.c
@@ -861,15 +861,10 @@ EXPORT_SYMBOL(rt_spin_unlock_wait);
int __lockfunc rt_spin_trylock(spinlock_t *lock)
@@ -54,25 +53,29 @@
return ret;
}
EXPORT_SYMBOL(rt_spin_trylock);
-diff --git a/kernel/timer.c b/kernel/timer.c
-index cc2588b..f6f2958 100644
---- a/kernel/timer.c
-+++ b/kernel/timer.c
-@@ -1373,13 +1373,14 @@ unsigned long get_next_timer_interrupt(unsigned long now)
+Index: linux-stable/kernel/timer.c
+===================================================================
+--- linux-stable.orig/kernel/timer.c
++++ linux-stable/kernel/timer.c
+@@ -1391,9 +1391,10 @@ unsigned long get_next_timer_interrupt(u
/*
* On PREEMPT_RT we cannot sleep here. If the trylock does not
* succeed then we return the worst-case 'expires in 1 tick'
- * value:
-+ * value. We use the rt functions here directly to avoid a
++ * value. We use the rt functions here directly to avoid a
+ * migrate_disable() call.
*/
-- if (spin_trylock(&base->lock)) {
-+ if (spin_do_trylock(&base->lock)) {
- if (time_before_eq(base->next_timer, base->timer_jiffies))
+- if (!spin_trylock(&base->lock))
++ if (!spin_do_trylock(&base->lock))
+ return now + 1;
+ #else
+ spin_lock(&base->lock);
+@@ -1403,7 +1404,7 @@ unsigned long get_next_timer_interrupt(u
base->next_timer = __next_timer_interrupt(base);
expires = base->next_timer;
-- spin_unlock(&base->lock);
-+ rt_spin_unlock(&base->lock);
- } else {
- expires = now + 1;
}
+- spin_unlock(&base->lock);
++ rt_spin_unlock(&base->lock);
+
+ if (time_before_eq(expires, now))
+ return now;
Added: dists/trunk/linux/debian/patches/features/all/rt/timer.c-fix-build-fail-for-RT_FULL.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/timer.c-fix-build-fail-for-RT_FULL.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,45 @@
+From 1f9b191467b70ed79480294395ad99145fea1b5a Mon Sep 17 00:00:00 2001
+From: Paul Gortmaker <paul.gortmaker at windriver.com>
+Date: Tue, 9 Oct 2012 20:20:10 -0400
+Subject: [PATCH] timer.c: fix build fail for ! RT_FULL
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The patch "timer-handle-idle-trylock-in-get-next-timer-irq.patch"
+introduces a use of rt_spin_unlock outside of the RT_FULL, but
+since we have:
+
+ #ifdef CONFIG_PREEMPT_RT_FULL
+ # include <linux/spinlock_rt.h>
+ #else /* PREEMPT_RT_FULL */
+
+we will not get the definition for !RT_FULL and instead see:
+
+kernel/timer.c: In function âget_next_timer_interruptâ:
+kernel/timer.c:1407: error: implicit declaration of function ârt_spin_unlockâ
+make[2]: *** [kernel/timer.o] Error 1
+
+Extend the ifdef usage to cover the unlock case too.
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker at windriver.com>
+
+diff --git a/kernel/timer.c b/kernel/timer.c
+index 00f1d4f..e81d197 100644
+--- a/kernel/timer.c
++++ b/kernel/timer.c
+@@ -1404,7 +1404,11 @@ unsigned long get_next_timer_interrupt(unsigned long now)
+ base->next_timer = __next_timer_interrupt(base);
+ expires = base->next_timer;
+ }
++#ifdef CONFIG_PREEMPT_RT_FULL
+ rt_spin_unlock(&base->lock);
++#else
++ spin_unlock(&base->lock);
++#endif
+
+ if (time_before_eq(expires, now))
+ return now;
+--
+1.7.0.4
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/timers-avoid-the-base-null-otptimization-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0113-timers-Avoid-the-switch-timers-base-set-to-NULL-tric.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0113-timers-Avoid-the-switch-timers-base-set-to-NULL-tric.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/timers-avoid-the-base-null-otptimization-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From be4d0930149b21a8ce3736546849adc15fea5c2d Mon Sep 17 00:00:00 2001
+Subject: timers: Avoid the switch timers base set to NULL trick on RT
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 21 Jul 2011 15:23:39 +0200
-Subject: [113/256] timers: Avoid the switch timers base set to NULL trick on
- RT
On RT that code is preemptible, so we cannot assign NULL to timers
base as a preempter would spin forever in lock_timer_base().
@@ -12,11 +10,11 @@
kernel/timer.c | 40 ++++++++++++++++++++++++++++++++--------
1 file changed, 32 insertions(+), 8 deletions(-)
-diff --git a/kernel/timer.c b/kernel/timer.c
-index 8e410fc..cc2588b 100644
---- a/kernel/timer.c
-+++ b/kernel/timer.c
-@@ -700,6 +700,36 @@ static struct tvec_base *lock_timer_base(struct timer_list *timer,
+Index: linux-stable/kernel/timer.c
+===================================================================
+--- linux-stable.orig/kernel/timer.c
++++ linux-stable/kernel/timer.c
+@@ -737,6 +737,36 @@ static struct tvec_base *lock_timer_base
}
}
@@ -53,7 +51,7 @@
static inline int
__mod_timer(struct timer_list *timer, unsigned long expires,
bool pending_only, int pinned)
-@@ -745,14 +775,8 @@ __mod_timer(struct timer_list *timer, unsigned long expires,
+@@ -775,14 +805,8 @@ __mod_timer(struct timer_list *timer, un
* handler yet has not finished. This also guarantees that
* the timer is serialized wrt itself.
*/
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/timers-mov-printk_tick-to-soft-interrupt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0111-timers-mov-printk_tick-to-soft-interrupt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0111-timers-mov-printk_tick-to-soft-interrupt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/timers-mov-printk_tick-to-soft-interrupt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,19 +1,19 @@
-From be57df33818c14ac40de00d5b436451bdc3f9e1b Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 3 Jul 2009 08:44:30 -0500
-Subject: [111/256] timers: mov printk_tick to soft interrupt
+Subject: timers: mov printk_tick to soft interrupt
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Signed-off-by: Ingo Molnar <mingo at elte.hu>
+
---
kernel/timer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/kernel/timer.c b/kernel/timer.c
-index 7ba0602..e069d9f 100644
---- a/kernel/timer.c
-+++ b/kernel/timer.c
-@@ -1386,7 +1386,6 @@ void update_process_times(int user_tick)
+Index: linux-stable/kernel/timer.c
+===================================================================
+--- linux-stable.orig/kernel/timer.c
++++ linux-stable/kernel/timer.c
+@@ -1400,7 +1400,6 @@ void update_process_times(int user_tick)
account_process_tick(p, user_tick);
run_local_timers();
rcu_check_callbacks(cpu, user_tick);
@@ -21,7 +21,7 @@
#ifdef CONFIG_IRQ_WORK
if (in_irq())
irq_work_run();
-@@ -1402,6 +1401,7 @@ static void run_timer_softirq(struct softirq_action *h)
+@@ -1416,6 +1415,7 @@ static void run_timer_softirq(struct sof
{
struct tvec_base *base = __this_cpu_read(tvec_bases);
Added: dists/trunk/linux/debian/patches/features/all/rt/timers-preempt-rt-support.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/timers-preempt-rt-support.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,58 @@
+From: Ingo Molnar <mingo at elte.hu>
+Date: Fri, 3 Jul 2009 08:30:20 -0500
+Subject: timers: preempt-rt support
+
+Signed-off-by: Ingo Molnar <mingo at elte.hu>
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/timer.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+Index: linux-stable/kernel/timer.c
+===================================================================
+--- linux-stable.orig/kernel/timer.c
++++ linux-stable/kernel/timer.c
+@@ -1363,7 +1363,17 @@ unsigned long get_next_timer_interrupt(u
+ if (cpu_is_offline(smp_processor_id()))
+ return expires;
+
++#ifdef CONFIG_PREEMPT_RT_FULL
++ /*
++ * On PREEMPT_RT we cannot sleep here. If the trylock does not
++ * succeed then we return the worst-case 'expires in 1 tick'
++ * value:
++ */
++ if (!spin_trylock(&base->lock))
++ return now + 1;
++#else
+ spin_lock(&base->lock);
++#endif
+ if (base->active_timers) {
+ if (time_before_eq(base->next_timer, base->timer_jiffies))
+ base->next_timer = __next_timer_interrupt(base);
+@@ -1373,7 +1383,6 @@ unsigned long get_next_timer_interrupt(u
+
+ if (time_before_eq(expires, now))
+ return now;
+-
+ return cmp_next_hrtimer_event(now, expires);
+ }
+ #endif
+@@ -1763,7 +1772,7 @@ static void __cpuinit migrate_timers(int
+
+ BUG_ON(cpu_online(cpu));
+ old_base = per_cpu(tvec_bases, cpu);
+- new_base = get_cpu_var(tvec_bases);
++ new_base = get_local_var(tvec_bases);
+ /*
+ * The caller is globally serialized and nobody else
+ * takes two locks at once, deadlock is not possible.
+@@ -1784,7 +1793,7 @@ static void __cpuinit migrate_timers(int
+
+ spin_unlock(&old_base->lock);
+ spin_unlock_irq(&new_base->lock);
+- put_cpu_var(tvec_bases);
++ put_local_var(tvec_bases);
+ }
+ #endif /* CONFIG_HOTPLUG_CPU */
+
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/timers-prepare-for-full-preemption.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0108-timers-prepare-for-full-preemption.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0108-timers-prepare-for-full-preemption.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/timers-prepare-for-full-preemption.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 956175284be7bd386ecb0b5112988c5bcd07adda Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:34 -0500
-Subject: [108/256] timers: prepare for full preemption
+Subject: timers: prepare for full preemption
When softirqs can be preempted we need to make sure that cancelling
the timer from the active thread can not deadlock vs. a running timer
@@ -9,16 +8,17 @@
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
include/linux/timer.h | 2 +-
kernel/timer.c | 35 ++++++++++++++++++++++++++++++++---
2 files changed, 33 insertions(+), 4 deletions(-)
-diff --git a/include/linux/timer.h b/include/linux/timer.h
-index 6abd913..b703477 100644
---- a/include/linux/timer.h
-+++ b/include/linux/timer.h
-@@ -276,7 +276,7 @@ extern void add_timer(struct timer_list *timer);
+Index: linux-stable/include/linux/timer.h
+===================================================================
+--- linux-stable.orig/include/linux/timer.h
++++ linux-stable/include/linux/timer.h
+@@ -276,7 +276,7 @@ extern void add_timer(struct timer_list
extern int try_to_del_timer_sync(struct timer_list *timer);
@@ -27,10 +27,10 @@
extern int del_timer_sync(struct timer_list *timer);
#else
# define del_timer_sync(t) del_timer(t)
-diff --git a/kernel/timer.c b/kernel/timer.c
-index a297ffc..d7ad9d0 100644
---- a/kernel/timer.c
-+++ b/kernel/timer.c
+Index: linux-stable/kernel/timer.c
+===================================================================
+--- linux-stable.orig/kernel/timer.c
++++ linux-stable/kernel/timer.c
@@ -75,6 +75,7 @@ struct tvec_root {
struct tvec_base {
spinlock_t lock;
@@ -38,8 +38,8 @@
+ wait_queue_head_t wait_for_running_timer;
unsigned long timer_jiffies;
unsigned long next_timer;
- struct tvec_root tv1;
-@@ -725,12 +726,15 @@ __mod_timer(struct timer_list *timer, unsigned long expires,
+ unsigned long active_timers;
+@@ -755,12 +756,15 @@ __mod_timer(struct timer_list *timer, un
debug_activate(timer, expires);
@@ -55,7 +55,7 @@
new_base = per_cpu(tvec_bases, cpu);
if (base != new_base) {
-@@ -931,6 +935,29 @@ void add_timer_on(struct timer_list *timer, int cpu)
+@@ -961,6 +965,29 @@ void add_timer_on(struct timer_list *tim
}
EXPORT_SYMBOL_GPL(add_timer_on);
@@ -85,7 +85,7 @@
/**
* del_timer - deactive a timer.
* @timer: the timer to be deactivated
-@@ -1003,7 +1030,7 @@ out:
+@@ -1018,7 +1045,7 @@ int try_to_del_timer_sync(struct timer_l
}
EXPORT_SYMBOL(try_to_del_timer_sync);
@@ -94,7 +94,7 @@
/**
* del_timer_sync - deactivate a timer and wait for the handler to finish.
* @timer: the timer to be deactivated
-@@ -1063,7 +1090,7 @@ int del_timer_sync(struct timer_list *timer)
+@@ -1078,7 +1105,7 @@ int del_timer_sync(struct timer_list *ti
int ret = try_to_del_timer_sync(timer);
if (ret >= 0)
return ret;
@@ -103,7 +103,7 @@
}
}
EXPORT_SYMBOL(del_timer_sync);
-@@ -1174,10 +1201,11 @@ static inline void __run_timers(struct tvec_base *base)
+@@ -1192,10 +1219,11 @@ static inline void __run_timers(struct t
spin_unlock_irq(&base->lock);
call_timer_fn(timer, fn, data);
@@ -116,7 +116,7 @@
spin_unlock_irq(&base->lock);
}
-@@ -1684,6 +1712,7 @@ static int __cpuinit init_timers_cpu(int cpu)
+@@ -1696,6 +1724,7 @@ static int __cpuinit init_timers_cpu(int
}
spin_lock_init(&base->lock);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0014-tracing-Account-for-preempt-off-in-preempt_schedule.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0014-tracing-Account-for-preempt-off-in-preempt_schedule.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 790051379b585c8e25e9d3ecb014e256cd0b224d Mon Sep 17 00:00:00 2001
From: Steven Rostedt <rostedt at goodmis.org>
Date: Thu, 29 Sep 2011 12:24:30 -0500
-Subject: [014/256] tracing: Account for preempt off in preempt_schedule()
+Subject: tracing: Account for preempt off in preempt_schedule()
The preempt_schedule() uses the preempt_disable_notrace() version
because it can cause infinite recursion by the function tracer as
@@ -26,11 +25,11 @@
kernel/sched/core.c | 9 +++++++++
1 file changed, 9 insertions(+)
-diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 2db74b7..83a36dd 100644
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -3312,7 +3312,16 @@ asmlinkage void __sched notrace preempt_schedule(void)
+Index: linux-stable/kernel/sched/core.c
+===================================================================
+--- linux-stable.orig/kernel/sched/core.c
++++ linux-stable/kernel/sched/core.c
+@@ -3544,7 +3544,16 @@ asmlinkage void __sched notrace preempt_
do {
add_preempt_count_notrace(PREEMPT_ACTIVE);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/tty-use-local-irq-nort.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0072-tty-Do-not-disable-interrupts-in-put_ldisc-on-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0072-tty-Do-not-disable-interrupts-in-put_ldisc-on-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/tty-use-local-irq-nort.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 1768c2fabf9448f25e3df60802631669b34b31af Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 17 Aug 2009 19:49:19 +0200
-Subject: [072/256] tty: Do not disable interrupts in put_ldisc on -rt
+Subject: tty: Do not disable interrupts in put_ldisc on -rt
Fixes the following on PREEMPT_RT:
@@ -21,15 +20,16 @@
....
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/tty/tty_ldisc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
-index 24b95db..7894759 100644
---- a/drivers/tty/tty_ldisc.c
-+++ b/drivers/tty/tty_ldisc.c
-@@ -53,7 +53,7 @@ static void put_ldisc(struct tty_ldisc *ld)
+Index: linux-stable/drivers/tty/tty_ldisc.c
+===================================================================
+--- linux-stable.orig/drivers/tty/tty_ldisc.c
++++ linux-stable/drivers/tty/tty_ldisc.c
+@@ -52,7 +52,7 @@ static void put_ldisc(struct tty_ldisc *
* We really want an "atomic_dec_and_lock_irqsave()",
* but we don't have it, so this does it by hand.
*/
@@ -38,12 +38,12 @@
if (atomic_dec_and_lock(&ld->users, &tty_ldisc_lock)) {
struct tty_ldisc_ops *ldo = ld->ops;
-@@ -64,7 +64,7 @@ static void put_ldisc(struct tty_ldisc *ld)
+@@ -63,7 +63,7 @@ static void put_ldisc(struct tty_ldisc *
kfree(ld);
return;
}
- local_irq_restore(flags);
+ local_irq_restore_nort(flags);
- wake_up(&tty_ldisc_idle);
+ wake_up(&ld->wq_idle);
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0243-net-RT-REmove-preemption-disabling-in-netif_rx.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0243-net-RT-REmove-preemption-disabling-in-netif_rx.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 42a13452102effbafe38310e7bfb4f79a92c3801 Mon Sep 17 00:00:00 2001
+Subject: [UPSTREAM]net,RT:REmove preemption disabling in netif_rx()
From: Priyanka Jain <Priyanka.Jain at freescale.com>
Date: Thu, 17 May 2012 09:35:11 +0530
-Subject: [243/256] net,RT:REmove preemption disabling in netif_rx()
1)enqueue_to_backlog() (called from netif_rx) should be
bind to a particluar CPU. This can be achieved by
@@ -31,14 +30,16 @@
Cc: stable-rt at vger.kernel.org
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
+ Testing: Tested successfully on p4080ds(8-core SMP system)
+
net/core/dev.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 292930b..382a810 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -2937,7 +2937,7 @@ int netif_rx(struct sk_buff *skb)
+Index: linux-stable/net/core/dev.c
+===================================================================
+--- linux-stable.orig/net/core/dev.c
++++ linux-stable/net/core/dev.c
+@@ -2967,7 +2967,7 @@ int netif_rx(struct sk_buff *skb)
struct rps_dev_flow voidflow, *rflow = &voidflow;
int cpu;
@@ -47,7 +48,7 @@
rcu_read_lock();
cpu = get_rps_cpu(skb->dev, skb, &rflow);
-@@ -2947,13 +2947,13 @@ int netif_rx(struct sk_buff *skb)
+@@ -2977,13 +2977,13 @@ int netif_rx(struct sk_buff *skb)
ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
rcu_read_unlock();
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/usb-fix-mouse-problem-copying-large-data.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0086-USB-Fix-the-mouse-problem-when-copying-large-amounts.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0086-USB-Fix-the-mouse-problem-when-copying-large-amounts.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/usb-fix-mouse-problem-copying-large-data.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From 61d7b08ff3cd6e280a253731dd2c96053fb8f180 Mon Sep 17 00:00:00 2001
From: Wu Zhangjin <wuzj at lemote.com>
Date: Mon, 4 Jan 2010 11:33:02 +0800
-Subject: [086/256] USB: Fix the mouse problem when copying large amounts of
- data
+Subject: USB: Fix the mouse problem when copying large amounts of data
When copying large amounts of data between the USB storage devices and
the hard disk, the USB mouse will not work, this patch fixes it.
@@ -12,15 +10,16 @@
Signed-off-by: Hu Hongbing <huhb at lemote.com>
Signed-off-by: Wu Zhangjin <wuzhangjin at gmail.com>
+
---
drivers/usb/host/ohci-hcd.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
-diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
-index 235171f..0157357 100644
---- a/drivers/usb/host/ohci-hcd.c
-+++ b/drivers/usb/host/ohci-hcd.c
-@@ -829,9 +829,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
+Index: linux-stable/drivers/usb/host/ohci-hcd.c
+===================================================================
+--- linux-stable.orig/drivers/usb/host/ohci-hcd.c
++++ linux-stable/drivers/usb/host/ohci-hcd.c
+@@ -829,9 +829,13 @@ static irqreturn_t ohci_irq (struct usb_
}
if (ints & OHCI_INTR_WDH) {
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/usb-hcd-use-local-irq-nort.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0071-usb-Use-local_irq_-_nort-variants.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0071-usb-Use-local_irq_-_nort-variants.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/usb-hcd-use-local-irq-nort.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,22 @@
-From 258bb522623fb90bc43937fbea8306b2dfeda2f5 Mon Sep 17 00:00:00 2001
From: Steven Rostedt <srostedt at redhat.com>
Date: Fri, 3 Jul 2009 08:44:26 -0500
-Subject: [071/256] usb: Use local_irq_*_nort() variants
+Subject: usb: Use local_irq_*_nort() variants
[ tglx: Now that irqf_disabled is dead we should kill that ]
Signed-off-by: Steven Rostedt <srostedt at redhat.com>
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
drivers/usb/core/hcd.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
-index 140d3e1..82ea8bf 100644
---- a/drivers/usb/core/hcd.c
-+++ b/drivers/usb/core/hcd.c
-@@ -2143,7 +2143,7 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd)
+Index: linux-stable/drivers/usb/core/hcd.c
+===================================================================
+--- linux-stable.orig/drivers/usb/core/hcd.c
++++ linux-stable/drivers/usb/core/hcd.c
+@@ -2158,7 +2158,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
* when the first handler doesn't use it. So let's just
* assume it's never used.
*/
@@ -25,7 +25,7 @@
if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
rc = IRQ_NONE;
-@@ -2152,7 +2152,7 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd)
+@@ -2167,7 +2167,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
else
rc = IRQ_HANDLED;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/user-use-local-irq-nort.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0069-core-Do-not-disable-interrupts-on-RT-in-kernel-users.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0069-core-Do-not-disable-interrupts-on-RT-in-kernel-users.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/user-use-local-irq-nort.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From eb024515bfe2198996d05662a0aa4665dd0f2e04 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Tue, 21 Jul 2009 23:06:05 +0200
-Subject: [069/256] core: Do not disable interrupts on RT in kernel/users.c
+Subject: core: Do not disable interrupts on RT in kernel/users.c
Use the local_irq_*_nort variants to reduce latencies in RT. The code
is serialized by the locks. No need to disable interrupts.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
kernel/user.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/kernel/user.c b/kernel/user.c
-index 71dd236..b831e51 100644
---- a/kernel/user.c
-+++ b/kernel/user.c
-@@ -129,11 +129,11 @@ void free_uid(struct user_struct *up)
+Index: linux-stable/kernel/user.c
+===================================================================
+--- linux-stable.orig/kernel/user.c
++++ linux-stable/kernel/user.c
+@@ -147,11 +147,11 @@ void free_uid(struct user_struct *up)
if (!up)
return;
@@ -28,4 +28,4 @@
+ local_irq_restore_nort(flags);
}
- struct user_struct *alloc_uid(struct user_namespace *ns, uid_t uid)
+ struct user_struct *alloc_uid(kuid_t uid)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/workqueue-use-get-cpu-light.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0205-workqueue-use-get-cpu-light.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0205-workqueue-use-get-cpu-light.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/workqueue-use-get-cpu-light.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From 08ce4a26ff20830b3207a1a30506a234bc29d652 Mon Sep 17 00:00:00 2001
+Subject: workqueue-use-get-cpu-light.patch
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 17 Jul 2011 21:42:26 +0200
-Subject: [205/256] workqueue-use-get-cpu-light.patch
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
kernel/workqueue.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/kernel/workqueue.c b/kernel/workqueue.c
-index 3fd5280..33d1095 100644
---- a/kernel/workqueue.c
-+++ b/kernel/workqueue.c
-@@ -1058,8 +1058,8 @@ int queue_work(struct workqueue_struct *wq, struct work_struct *work)
+Index: linux-stable/kernel/workqueue.c
+===================================================================
+--- linux-stable.orig/kernel/workqueue.c
++++ linux-stable/kernel/workqueue.c
+@@ -1067,8 +1067,8 @@ int queue_work(struct workqueue_struct *
{
int ret;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0231-x86-crypto-Reduce-preempt-disabled-regions.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0231-x86-crypto-Reduce-preempt-disabled-regions.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From d6cb28d2349412e322b5ae1a8fd925326abe2224 Mon Sep 17 00:00:00 2001
+Subject: x86: crypto: Reduce preempt disabled regions
From: Peter Zijlstra <peterz at infradead.org>
Date: Mon, 14 Nov 2011 18:19:27 +0100
-Subject: [231/256] x86: crypto: Reduce preempt disabled regions
Restrict the preempt disabled regions to the actual floating point
operations and enable preemption for the administrative actions.
@@ -17,11 +16,11 @@
arch/x86/crypto/aesni-intel_glue.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
-diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
-index c799352..0efa514 100644
---- a/arch/x86/crypto/aesni-intel_glue.c
-+++ b/arch/x86/crypto/aesni-intel_glue.c
-@@ -290,14 +290,14 @@ static int ecb_encrypt(struct blkcipher_desc *desc,
+Index: linux-stable/arch/x86/crypto/aesni-intel_glue.c
+===================================================================
+--- linux-stable.orig/arch/x86/crypto/aesni-intel_glue.c
++++ linux-stable/arch/x86/crypto/aesni-intel_glue.c
+@@ -245,14 +245,14 @@ static int ecb_encrypt(struct blkcipher_
err = blkcipher_walk_virt(desc, &walk);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
@@ -39,7 +38,7 @@
return err;
}
-@@ -314,14 +314,14 @@ static int ecb_decrypt(struct blkcipher_desc *desc,
+@@ -269,14 +269,14 @@ static int ecb_decrypt(struct blkcipher_
err = blkcipher_walk_virt(desc, &walk);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
@@ -56,7 +55,7 @@
return err;
}
-@@ -360,14 +360,14 @@ static int cbc_encrypt(struct blkcipher_desc *desc,
+@@ -293,14 +293,14 @@ static int cbc_encrypt(struct blkcipher_
err = blkcipher_walk_virt(desc, &walk);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
@@ -73,7 +72,7 @@
return err;
}
-@@ -384,14 +384,14 @@ static int cbc_decrypt(struct blkcipher_desc *desc,
+@@ -317,14 +317,14 @@ static int cbc_decrypt(struct blkcipher_
err = blkcipher_walk_virt(desc, &walk);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
@@ -90,7 +89,7 @@
return err;
}
-@@ -446,18 +446,20 @@ static int ctr_crypt(struct blkcipher_desc *desc,
+@@ -357,18 +357,20 @@ static int ctr_crypt(struct blkcipher_de
err = blkcipher_walk_virt_block(desc, &walk, AES_BLOCK_SIZE);
desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-disable-debug-stack.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0204-x86-Disable-IST-stacks-for-debug-int-3-stack-fault-f.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0204-x86-Disable-IST-stacks-for-debug-int-3-stack-fault-f.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-disable-debug-stack.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,8 +1,6 @@
-From e95297fb065f625d14e6eefa32bc89936b24225f Mon Sep 17 00:00:00 2001
From: Andi Kleen <ak at suse.de>
Date: Fri, 3 Jul 2009 08:44:10 -0500
-Subject: [204/256] x86: Disable IST stacks for debug/int 3/stack fault for
- PREEMPT_RT
+Subject: x86: Disable IST stacks for debug/int 3/stack fault for PREEMPT_RT
Normally the x86-64 trap handlers for debug/int 3/stack fault run
on a special interrupt stack to make them more robust
@@ -43,10 +41,10 @@
arch/x86/kernel/dumpstack_64.c | 4 ++++
3 files changed, 21 insertions(+), 6 deletions(-)
-diff --git a/arch/x86/include/asm/page_64_types.h b/arch/x86/include/asm/page_64_types.h
-index 7639dbf..0883ecd 100644
---- a/arch/x86/include/asm/page_64_types.h
-+++ b/arch/x86/include/asm/page_64_types.h
+Index: linux-stable/arch/x86/include/asm/page_64_types.h
+===================================================================
+--- linux-stable.orig/arch/x86/include/asm/page_64_types.h
++++ linux-stable/arch/x86/include/asm/page_64_types.h
@@ -14,12 +14,21 @@
#define IRQ_STACK_ORDER 2
#define IRQ_STACK_SIZE (PAGE_SIZE << IRQ_STACK_ORDER)
@@ -75,11 +73,11 @@
#define PUD_PAGE_SIZE (_AC(1, UL) << PUD_SHIFT)
#define PUD_PAGE_MASK (~(PUD_PAGE_SIZE-1))
-diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index cf79302..f743261 100644
---- a/arch/x86/kernel/cpu/common.c
-+++ b/arch/x86/kernel/cpu/common.c
-@@ -1056,7 +1056,9 @@ DEFINE_PER_CPU(struct task_struct *, fpu_owner_task);
+Index: linux-stable/arch/x86/kernel/cpu/common.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/cpu/common.c
++++ linux-stable/arch/x86/kernel/cpu/common.c
+@@ -1089,7 +1089,9 @@ DEFINE_PER_CPU(struct task_struct *, fpu
*/
static const unsigned int exception_stack_sizes[N_EXCEPTION_STACKS] = {
[0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STKSZ,
@@ -89,10 +87,10 @@
};
static DEFINE_PER_CPU_PAGE_ALIGNED(char, exception_stacks
-diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
-index 17107bd..9d50b30 100644
---- a/arch/x86/kernel/dumpstack_64.c
-+++ b/arch/x86/kernel/dumpstack_64.c
+Index: linux-stable/arch/x86/kernel/dumpstack_64.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/dumpstack_64.c
++++ linux-stable/arch/x86/kernel/dumpstack_64.c
@@ -21,10 +21,14 @@
(N_EXCEPTION_STACKS + DEBUG_STKSZ/EXCEPTION_STKSZ - 2)
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-highmem-warn.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0038-x86-highmem-Replace-BUG_ON-by-WARN_ON.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0038-x86-highmem-Replace-BUG_ON-by-WARN_ON.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-highmem-warn.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,22 @@
-From b3dedd0614e195732983bfef6b77c20c13629bee Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:25 -0500
-Subject: [038/256] x86: highmem: Replace BUG_ON by WARN_ON
+Subject: x86: highmem: Replace BUG_ON by WARN_ON
The machine might survive that problem and be at least in a state
which allows us to get more information about the problem.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
arch/x86/mm/highmem_32.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/arch/x86/mm/highmem_32.c b/arch/x86/mm/highmem_32.c
-index 6f31ee5..ab8683a 100644
---- a/arch/x86/mm/highmem_32.c
-+++ b/arch/x86/mm/highmem_32.c
-@@ -43,7 +43,7 @@ void *kmap_atomic_prot(struct page *page, pgprot_t prot)
+Index: linux-stable/arch/x86/mm/highmem_32.c
+===================================================================
+--- linux-stable.orig/arch/x86/mm/highmem_32.c
++++ linux-stable/arch/x86/mm/highmem_32.c
+@@ -43,7 +43,7 @@ void *kmap_atomic_prot(struct page *page
type = kmap_atomic_idx_push();
idx = type + KM_TYPE_NR*smp_processor_id();
vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-hpet-disable-msi-on-lenovo-w510.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0005-x86-hpet-Disable-MSI-on-Lenovo-W510.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0005-x86-hpet-Disable-MSI-on-Lenovo-W510.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-hpet-disable-msi-on-lenovo-w510.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 3930a7c7ee07fdeebfa913ee0647589eaae47eb8 Mon Sep 17 00:00:00 2001
+Subject: x86: hpet: Disable MSI on Lenovo W510
From: Thomas Gleixner <tglx at linutronix.de>
Date: Fri, 30 Sep 2011 20:03:37 +0200
-Subject: [005/256] x86: hpet: Disable MSI on Lenovo W510
MSI based per cpu timers lose interrupts when intel_idle() is enabled
- independent of the c-state. With idle=poll the problem cannot be
@@ -13,10 +12,10 @@
arch/x86/kernel/hpet.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
-diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
-index ad0de0c..230a200 100644
---- a/arch/x86/kernel/hpet.c
-+++ b/arch/x86/kernel/hpet.c
+Index: linux-stable/arch/x86/kernel/hpet.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/hpet.c
++++ linux-stable/arch/x86/kernel/hpet.c
@@ -8,6 +8,7 @@
#include <linux/slab.h>
#include <linux/hpet.h>
@@ -25,7 +24,7 @@
#include <linux/cpu.h>
#include <linux/pm.h>
#include <linux/io.h>
-@@ -570,6 +571,30 @@ static void init_one_hpet_msi_clockevent(struct hpet_dev *hdev, int cpu)
+@@ -573,6 +574,30 @@ static void init_one_hpet_msi_clockevent
#define RESERVE_TIMERS 0
#endif
@@ -56,7 +55,7 @@
static void hpet_msi_capability_lookup(unsigned int start_timer)
{
unsigned int id;
-@@ -577,6 +602,8 @@ static void hpet_msi_capability_lookup(unsigned int start_timer)
+@@ -580,6 +605,8 @@ static void hpet_msi_capability_lookup(u
unsigned int num_timers_used = 0;
int i;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-io-apic-migra-no-unmask.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0050-x86-Do-not-unmask-io_apic-when-interrupt-is-in-progr.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0050-x86-Do-not-unmask-io_apic-when-interrupt-is-in-progr.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-io-apic-migra-no-unmask.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,22 @@
-From 1072a59271876515f215b3a6d83cd709f13c29ab Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo at elte.hu>
Date: Fri, 3 Jul 2009 08:29:27 -0500
-Subject: [050/256] x86: Do not unmask io_apic when interrupt is in progress
+Subject: x86: Do not unmask io_apic when interrupt is in progress
With threaded interrupts we might see an interrupt in progress on
migration. Do not unmask it when this is the case.
Signed-off-by: Ingo Molnar <mingo at elte.hu>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
arch/x86/kernel/apic/io_apic.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
-index e88300d..01c76a0 100644
---- a/arch/x86/kernel/apic/io_apic.c
-+++ b/arch/x86/kernel/apic/io_apic.c
-@@ -2555,7 +2555,8 @@ atomic_t irq_mis_count;
+Index: linux-stable/arch/x86/kernel/apic/io_apic.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/apic/io_apic.c
++++ linux-stable/arch/x86/kernel/apic/io_apic.c
+@@ -2437,7 +2437,8 @@ static bool io_apic_level_ack_pending(st
static inline bool ioapic_irqd_mask(struct irq_data *data, struct irq_cfg *cfg)
{
/* If we are moving the irq we need to mask it */
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-kprobes-remove-bogus-preempt-enable.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0003-x86-kprobes-Remove-remove-bogus-preempt_enable.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0003-x86-kprobes-Remove-remove-bogus-preempt_enable.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-kprobes-remove-bogus-preempt-enable.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 76e113bcae99f4b0d58f884cd38bc8cfc94f5f93 Mon Sep 17 00:00:00 2001
+Subject: x86: kprobes: Remove remove bogus preempt_enable
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 17 Mar 2011 11:02:15 +0100
-Subject: [003/256] x86: kprobes: Remove remove bogus preempt_enable
The CONFIG_PREEMPT=n section of setup_singlestep() contains:
@@ -16,11 +15,11 @@
arch/x86/kernel/kprobes.c | 1 -
1 file changed, 1 deletion(-)
-diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c
-index e213fc8..b9edf1a 100644
---- a/arch/x86/kernel/kprobes.c
-+++ b/arch/x86/kernel/kprobes.c
-@@ -486,7 +486,6 @@ setup_singlestep(struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *k
+Index: linux-stable/arch/x86/kernel/kprobes.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/kprobes.c
++++ linux-stable/arch/x86/kernel/kprobes.c
+@@ -486,7 +486,6 @@ setup_singlestep(struct kprobe *p, struc
* stepping.
*/
regs->ip = (unsigned long)p->ainsn.insn;
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-kvm-require-const-tsc-for-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0229-x86-kvm-require-const-tsc-for-rt.patch.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0229-x86-kvm-require-const-tsc-for-rt.patch.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-kvm-require-const-tsc-for-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,18 +1,17 @@
-From e805ad7e1c2b49b0b817f7b2afa66c2a409c3f30 Mon Sep 17 00:00:00 2001
+Subject: x86-kvm-require-const-tsc-for-rt.patch
From: Thomas Gleixner <tglx at linutronix.de>
-Date: Sun, 6 Nov 2011 12:26:18 +0100
-Subject: [229/256] x86-kvm-require-const-tsc-for-rt.patch
+Date: Sun, 06 Nov 2011 12:26:18 +0100
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
---
arch/x86/kvm/x86.c | 7 +++++++
1 file changed, 7 insertions(+)
-diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
-index 185a2b8..937bdec 100644
---- a/arch/x86/kvm/x86.c
-+++ b/arch/x86/kvm/x86.c
-@@ -4882,6 +4882,13 @@ int kvm_arch_init(void *opaque)
+Index: linux-stable/arch/x86/kvm/x86.c
+===================================================================
+--- linux-stable.orig/arch/x86/kvm/x86.c
++++ linux-stable/arch/x86/kvm/x86.c
+@@ -4911,6 +4911,13 @@ int kvm_arch_init(void *opaque)
goto out;
}
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-mce-timer-hrtimer.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0201-x86-Convert-mce-timer-to-hrtimer.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0201-x86-Convert-mce-timer-to-hrtimer.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-mce-timer-hrtimer.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,22 +1,22 @@
-From 2c728e0eebc0bf674feaa43bc371ace1e030d2a0 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Mon, 13 Dec 2010 16:33:39 +0100
-Subject: [201/256] x86: Convert mce timer to hrtimer
+Subject: x86: Convert mce timer to hrtimer
mce_timer is started in atomic contexts of cpu bringup. This results
in might_sleep() warnings on RT. Convert mce_timer to a hrtimer to
avoid this.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
- arch/x86/kernel/cpu/mcheck/mce.c | 49 ++++++++++++++++++--------------------
- 1 file changed, 23 insertions(+), 26 deletions(-)
+ arch/x86/kernel/cpu/mcheck/mce.c | 36 ++++++++++++++++--------------------
+ 1 file changed, 16 insertions(+), 20 deletions(-)
-diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
-index 61604ae..473e40d 100644
---- a/arch/x86/kernel/cpu/mcheck/mce.c
-+++ b/arch/x86/kernel/cpu/mcheck/mce.c
-@@ -38,6 +38,7 @@
+Index: linux-stable/arch/x86/kernel/cpu/mcheck/mce.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/cpu/mcheck/mce.c
++++ linux-stable/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -41,6 +41,7 @@
#include <linux/debugfs.h>
#include <linux/irq_work.h>
#include <linux/export.h>
@@ -24,43 +24,32 @@
#include <asm/processor.h>
#include <asm/mce.h>
-@@ -1245,17 +1246,14 @@ void mce_log_therm_throt_event(__u64 status)
- * poller finds an MCE, poll 2x faster. When the poller finds no more
- * errors, poll 2x slower (up to check_interval seconds).
- */
--static int check_interval = 5 * 60; /* 5 minutes */
-+static unsigned long check_interval = 5 * 60; /* 5 minutes */
+@@ -1264,15 +1265,12 @@ void mce_log_therm_throt_event(__u64 sta
+ static unsigned long check_interval = 5 * 60; /* 5 minutes */
--static DEFINE_PER_CPU(int, mce_next_interval); /* in jiffies */
+ static DEFINE_PER_CPU(unsigned long, mce_next_interval); /* in jiffies */
-static DEFINE_PER_CPU(struct timer_list, mce_timer);
-+static DEFINE_PER_CPU(unsigned long, mce_next_interval); /* in jiffies */
+static DEFINE_PER_CPU(struct hrtimer, mce_timer);
--static void mce_start_timer(unsigned long data)
-+static enum hrtimer_restart mce_start_timer(struct hrtimer *timer)
+-static void mce_timer_fn(unsigned long data)
++static enum hrtimer_restart mce_timer_fn(struct hrtimer *timer)
{
-- struct timer_list *t = &per_cpu(mce_timer, data);
-- int *n;
--
-- WARN_ON(smp_processor_id() != data);
-+ unsigned long *n;
+- struct timer_list *t = &__get_cpu_var(mce_timer);
+ unsigned long iv;
+- WARN_ON(smp_processor_id() != data);
+-
if (mce_available(__this_cpu_ptr(&cpu_info))) {
machine_check_poll(MCP_TIMESTAMP,
-@@ -1268,21 +1266,22 @@ static void mce_start_timer(unsigned long data)
- */
- n = &__get_cpu_var(mce_next_interval);
- if (mce_notify_irq())
-- *n = max(*n/2, HZ/100);
-+ *n = max(*n/2, HZ/100UL);
- else
-- *n = min(*n*2, (int)round_jiffies_relative(check_interval*HZ));
-+ *n = min(*n*2, round_jiffies_relative(check_interval*HZ));
+ &__get_cpu_var(mce_poll_banks));
+@@ -1289,17 +1287,18 @@ static void mce_timer_fn(unsigned long d
+ iv = min(iv * 2, round_jiffies_relative(check_interval * HZ));
+ __this_cpu_write(mce_next_interval, iv);
-- t->expires = jiffies + *n;
+- t->expires = jiffies + iv;
- add_timer_on(t, smp_processor_id());
+ hrtimer_forward(timer, timer->base->get_time(),
-+ ns_to_ktime(jiffies_to_usecs(*n) * 1000));
++ ns_to_ktime(jiffies_to_usecs(iv)));
+ return HRTIMER_RESTART;
}
@@ -76,34 +65,32 @@
}
static void mce_do_trigger(struct work_struct *work)
-@@ -1512,10 +1511,11 @@ static void __mcheck_cpu_init_vendor(struct cpuinfo_x86 *c)
+@@ -1596,10 +1595,11 @@ static void __mcheck_cpu_init_vendor(str
static void __mcheck_cpu_init_timer(void)
{
- struct timer_list *t = &__get_cpu_var(mce_timer);
-- int *n = &__get_cpu_var(mce_next_interval);
+ struct hrtimer *t = &__get_cpu_var(mce_timer);
-+ unsigned long *n = &__get_cpu_var(mce_next_interval);
+ unsigned long iv = check_interval * HZ;
-- setup_timer(t, mce_start_timer, smp_processor_id());
+- setup_timer(t, mce_timer_fn, smp_processor_id());
+ hrtimer_init(t, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
-+ t->function = mce_start_timer;
++ t->function = mce_timer_fn;
if (mce_ignore_ce)
return;
-@@ -1523,8 +1523,9 @@ static void __mcheck_cpu_init_timer(void)
- *n = check_interval * HZ;
- if (!*n)
+@@ -1607,8 +1607,8 @@ static void __mcheck_cpu_init_timer(void
+ __this_cpu_write(mce_next_interval, iv);
+ if (!iv)
return;
-- t->expires = round_jiffies(jiffies + *n);
+- t->expires = round_jiffies(jiffies + iv);
- add_timer_on(t, smp_processor_id());
-+
-+ hrtimer_start_range_ns(t, ns_to_ktime(jiffies_to_usecs(*n) * 1000),
-+ 0 , HRTIMER_MODE_REL_PINNED);
++ hrtimer_start_range_ns(t, ns_to_ktime(jiffies_to_usecs(iv) * 1000),
++ 0, HRTIMER_MODE_REL_PINNED);
}
/* Handle unconfigured int18 (should never happen) */
-@@ -2176,6 +2177,8 @@ static void __cpuinit mce_disable_cpu(void *h)
+@@ -2259,6 +2259,8 @@ static void __cpuinit mce_disable_cpu(vo
if (!mce_available(__this_cpu_ptr(&cpu_info)))
return;
@@ -112,7 +99,7 @@
if (!(action & CPU_TASKS_FROZEN))
cmci_clear();
for (i = 0; i < banks; i++) {
-@@ -2202,6 +2205,7 @@ static void __cpuinit mce_reenable_cpu(void *h)
+@@ -2285,6 +2287,7 @@ static void __cpuinit mce_reenable_cpu(v
if (b->init)
wrmsrl(MSR_IA32_MCx_CTL(i), b->ctl);
}
@@ -120,7 +107,7 @@
}
/* Get notified when a cpu comes on/off. Be hotplug friendly. */
-@@ -2209,7 +2213,6 @@ static int __cpuinit
+@@ -2292,7 +2295,6 @@ static int __cpuinit
mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;
@@ -128,7 +115,7 @@
switch (action) {
case CPU_ONLINE:
-@@ -2226,16 +2229,10 @@ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
+@@ -2309,16 +2311,10 @@ mce_cpu_callback(struct notifier_block *
break;
case CPU_DOWN_PREPARE:
case CPU_DOWN_PREPARE_FROZEN:
@@ -139,7 +126,7 @@
case CPU_DOWN_FAILED_FROZEN:
- if (!mce_ignore_ce && check_interval) {
- t->expires = round_jiffies(jiffies +
-- __get_cpu_var(mce_next_interval));
+- per_cpu(mce_next_interval, cpu));
- add_timer_on(t, cpu);
- }
smp_call_function_single(cpu, mce_reenable_cpu, &action, 1);
Added: dists/trunk/linux/debian/patches/features/all/rt/x86-perf-uncore-deal-with-kfree.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-perf-uncore-deal-with-kfree.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -0,0 +1,76 @@
+Subject: x86: perf: Deal with kfree from atomic contexts
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 04 Oct 2012 13:32:46 +0100
+
+The x86 perf code allocates memory upfront because it might need
+it. The detection that it is not needed happens in atomic context and
+calls kfree from there. RT cant do that. Use kfree_rcu instead.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ arch/x86/kernel/cpu/perf_event.h | 1 +
+ arch/x86/kernel/cpu/perf_event_intel.c | 2 +-
+ arch/x86/kernel/cpu/perf_event_intel_uncore.c | 5 +++--
+ arch/x86/kernel/cpu/perf_event_intel_uncore.h | 1 +
+ 4 files changed, 6 insertions(+), 3 deletions(-)
+
+Index: linux-stable/arch/x86/kernel/cpu/perf_event.h
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/cpu/perf_event.h
++++ linux-stable/arch/x86/kernel/cpu/perf_event.h
+@@ -108,6 +108,7 @@ struct intel_shared_regs {
+ struct er_account regs[EXTRA_REG_MAX];
+ int refcnt; /* per-core: #HT threads */
+ unsigned core_id; /* per-core: core id */
++ struct rcu_head rcu;
+ };
+
+ #define MAX_LBR_ENTRIES 16
+Index: linux-stable/arch/x86/kernel/cpu/perf_event_intel.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/cpu/perf_event_intel.c
++++ linux-stable/arch/x86/kernel/cpu/perf_event_intel.c
+@@ -1707,7 +1707,7 @@ static void intel_pmu_cpu_dying(int cpu)
+ pc = cpuc->shared_regs;
+ if (pc) {
+ if (pc->core_id == -1 || --pc->refcnt == 0)
+- kfree(pc);
++ kfree_rcu(pc, rcu);
+ cpuc->shared_regs = NULL;
+ }
+
+Index: linux-stable/arch/x86/kernel/cpu/perf_event_intel_uncore.c
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/cpu/perf_event_intel_uncore.c
++++ linux-stable/arch/x86/kernel/cpu/perf_event_intel_uncore.c
+@@ -2603,7 +2603,7 @@ static void __cpuinit uncore_cpu_dying(i
+ box = *per_cpu_ptr(pmu->box, cpu);
+ *per_cpu_ptr(pmu->box, cpu) = NULL;
+ if (box && atomic_dec_and_test(&box->refcnt))
+- kfree(box);
++ kfree_rcu(box, rcu);
+ }
+ }
+ }
+@@ -2633,7 +2633,8 @@ static int __cpuinit uncore_cpu_starting
+ if (exist && exist->phys_id == phys_id) {
+ atomic_inc(&exist->refcnt);
+ *per_cpu_ptr(pmu->box, cpu) = exist;
+- kfree(box);
++ if (box)
++ kfree_rcu(box, rcu);
+ box = NULL;
+ break;
+ }
+Index: linux-stable/arch/x86/kernel/cpu/perf_event_intel_uncore.h
+===================================================================
+--- linux-stable.orig/arch/x86/kernel/cpu/perf_event_intel_uncore.h
++++ linux-stable/arch/x86/kernel/cpu/perf_event_intel_uncore.h
+@@ -419,6 +419,7 @@ struct intel_uncore_box {
+ struct hrtimer hrtimer;
+ struct list_head list;
+ struct intel_uncore_extra_reg shared_regs[0];
++ struct rcu_head rcu;
+ };
+
+ #define UNCORE_BOX_FLAG_INITIATED 0
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-stackprot-no-random-on-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0202-x86-stackprotector-Avoid-random-pool-on-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0202-x86-stackprotector-Avoid-random-pool-on-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-stackprot-no-random-on-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,7 +1,6 @@
-From 04705414e3888c7ec92de828510fd5d0731713fc Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Thu, 16 Dec 2010 14:25:18 +0100
-Subject: [202/256] x86: stackprotector: Avoid random pool on rt
+Subject: x86: stackprotector: Avoid random pool on rt
CPU bringup calls into the random pool to initialize the stack
canary. During boot that works nicely even on RT as the might sleep
@@ -13,14 +12,15 @@
Reported-by: Carsten Emde <carsten.emde at osadl.org>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
arch/x86/include/asm/stackprotector.h | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
-diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h
-index b5d9533..0f3d7b1 100644
---- a/arch/x86/include/asm/stackprotector.h
-+++ b/arch/x86/include/asm/stackprotector.h
+Index: linux-stable/arch/x86/include/asm/stackprotector.h
+===================================================================
+--- linux-stable.orig/arch/x86/include/asm/stackprotector.h
++++ linux-stable/arch/x86/include/asm/stackprotector.h
@@ -57,7 +57,7 @@
*/
static __always_inline void boot_init_stack_canary(void)
@@ -30,7 +30,7 @@
u64 tsc;
#ifdef CONFIG_X86_64
-@@ -68,8 +68,16 @@ static __always_inline void boot_init_stack_canary(void)
+@@ -68,8 +68,16 @@ static __always_inline void boot_init_st
* of randomness. The TSC only matters for very early init,
* there it already has some randomness on most systems. Later
* on during the bootup the random pool has true entropy too.
Copied and modified: dists/trunk/linux/debian/patches/features/all/rt/x86-use-gen-rwsem-spinlocks-rt.patch (from r19452, dists/trunk/linux/debian/patches/features/all/rt/0203-x86-Use-generic-rwsem_spinlocks-on-rt.patch)
==============================================================================
--- dists/trunk/linux/debian/patches/features/all/rt/0203-x86-Use-generic-rwsem_spinlocks-on-rt.patch Mon Oct 22 13:47:03 2012 (r19452, copy source)
+++ dists/trunk/linux/debian/patches/features/all/rt/x86-use-gen-rwsem-spinlocks-rt.patch Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,21 +1,21 @@
-From 828f2c41971123b04b3fea44459e0ff642b917f7 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx at linutronix.de>
Date: Sun, 26 Jul 2009 02:21:32 +0200
-Subject: [203/256] x86: Use generic rwsem_spinlocks on -rt
+Subject: x86: Use generic rwsem_spinlocks on -rt
Simplifies the separation of anon_rw_semaphores and rw_semaphores for
-rt.
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+
---
arch/x86/Kconfig | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index c9866b0..f556832 100644
---- a/arch/x86/Kconfig
-+++ b/arch/x86/Kconfig
-@@ -155,10 +155,10 @@ config ARCH_MAY_HAVE_PC_FDC
+Index: linux-stable/arch/x86/Kconfig
+===================================================================
+--- linux-stable.orig/arch/x86/Kconfig
++++ linux-stable/arch/x86/Kconfig
+@@ -153,10 +153,10 @@ config ARCH_MAY_HAVE_PC_FDC
def_bool ISA_DMA_API
config RWSEM_GENERIC_SPINLOCK
@@ -26,5 +26,5 @@
- def_bool X86_XADD
+ def_bool X86_XADD && !RWSEM_GENERIC_SPINLOCK && !PREEMPT_RT_FULL
- config ARCH_HAS_CPU_IDLE_WAIT
+ config GENERIC_CALIBRATE_DELAY
def_bool y
Modified: dists/trunk/linux/debian/patches/series-rt
==============================================================================
--- dists/trunk/linux/debian/patches/series-rt Wed Oct 24 13:58:28 2012 (r19457)
+++ dists/trunk/linux/debian/patches/series-rt Wed Oct 24 14:29:13 2012 (r19458)
@@ -1,252 +1,601 @@
-features/all/rt/0001-Revert-workqueue-skip-nr_running-sanity-check-in-wor.patch
-features/all/rt/0002-slab-lockdep-Annotate-all-slab-caches.patch
-features/all/rt/0003-x86-kprobes-Remove-remove-bogus-preempt_enable.patch
-features/all/rt/0004-tick-Add-tick-skew-boot-option.patch
-features/all/rt/0005-x86-hpet-Disable-MSI-on-Lenovo-W510.patch
-features/all/rt/0006-block-Shorten-interrupt-disabled-regions.patch
-features/all/rt/0007-sched-Distangle-worker-accounting-from-rq-3Elock.patch
-features/all/rt/0008-mips-enable-interrupts-in-signal.patch.patch
-features/all/rt/0009-arm-enable-interrupts-in-signal-code.patch.patch
-features/all/rt/0010-seqlock-Remove-unused-functions.patch
-features/all/rt/0011-seqlock-Use-seqcount.patch
-features/all/rt/0012-timekeeping-Split-xtime_lock.patch
-features/all/rt/0013-intel_idle-Convert-i7300_idle_lock-to-raw-spinlock.patch
-features/all/rt/0014-tracing-Account-for-preempt-off-in-preempt_schedule.patch
-features/all/rt/0015-signal-revert-ptrace-preempt-magic.patch.patch
-features/all/rt/0016-arm-Mark-pmu-interupt-IRQF_NO_THREAD.patch
-features/all/rt/0017-arm-Allow-forced-irq-threading.patch
-features/all/rt/0018-preempt-rt-Convert-arm-boot_lock-to-raw.patch
-features/all/rt/0019-arm-omap-make-wakeupgen_lock-raw.patch.patch
-features/all/rt/0020-signals-Do-not-wakeup-self.patch
-features/all/rt/0021-posix-timers-Prevent-broadcast-signals.patch
-features/all/rt/0022-signals-Allow-rt-tasks-to-cache-one-sigqueue-struct.patch
-features/all/rt/0023-signal-x86-Delay-calling-signals-in-atomic.patch
-features/all/rt/0024-generic-Use-raw-local-irq-variant-for-generic-cmpxch.patch
-features/all/rt/0025-drivers-random-Reduce-preempt-disabled-region.patch
-features/all/rt/0026-ARM-AT91-PIT-Remove-irq-handler-when-clock-event-is-.patch
-features/all/rt/0027-clocksource-TCLIB-Allow-higher-clock-rates-for-clock.patch
-features/all/rt/0028-drivers-net-tulip_remove_one-needs-to-call-pci_disab.patch
-features/all/rt/0029-drivers-net-Use-disable_irq_nosync-in-8139too.patch
-features/all/rt/0030-drivers-net-ehea-Make-rx-irq-handler-non-threaded-IR.patch
-features/all/rt/0031-drivers-net-at91_ether-Make-mdio-protection-rt-safe.patch
-features/all/rt/0032-mm-Prepare-decoupling-the-page-fault-disabling-logic.patch
-features/all/rt/0033-mm-Fixup-all-fault-handlers-to-check-current-pagefau.patch
-features/all/rt/0034-mm-pagefault_disabled.patch
-features/all/rt/0035-mm-raw_pagefault_disable.patch
-features/all/rt/0036-filemap-fix-up.patch.patch
-features/all/rt/0037-mm-Remove-preempt-count-from-pagefault-disable-enabl.patch
-features/all/rt/0038-x86-highmem-Replace-BUG_ON-by-WARN_ON.patch
-features/all/rt/0039-suspend-Prevent-might-sleep-splats.patch
-features/all/rt/0040-OF-Fixup-resursive-locking-code-paths.patch
-features/all/rt/0041-of-convert-devtree-lock.patch.patch
-features/all/rt/0042-list-add-list-last-entry.patch.patch
-features/all/rt/0043-mm-page-alloc-use-list-last-entry.patch.patch
-features/all/rt/0044-mm-slab-move-debug-out.patch.patch
-features/all/rt/0045-rwsem-inlcude-fix.patch.patch
-features/all/rt/0046-sysctl-include-fix.patch.patch
-features/all/rt/0047-net-flip-lock-dep-thingy.patch.patch
-features/all/rt/0048-softirq-thread-do-softirq.patch.patch
-features/all/rt/0049-softirq-split-out-code.patch.patch
-features/all/rt/0050-x86-Do-not-unmask-io_apic-when-interrupt-is-in-progr.patch
-features/all/rt/0051-x86-Do-not-disable-preemption-in-int3-on-32bit.patch
-features/all/rt/0052-locking-various-init-fixes.patch.patch
-features/all/rt/0053-pci-Use-__wake_up_all_locked-pci_unblock_user_cfg_ac.patch
-features/all/rt/0054-latency-hist.patch.patch
-features/all/rt/0055-hwlatdetect.patch.patch
-features/all/rt/0057-early-printk-consolidate.patch.patch
-features/all/rt/0058-printk-kill.patch.patch
-features/all/rt/0059-printk-force_early_printk-boot-param-to-help-with-de.patch
-features/all/rt/0060-rt-preempt-base-config.patch.patch
-features/all/rt/0061-bug-BUG_ON-WARN_ON-variants-dependend-on-RT-RT.patch
-features/all/rt/0062-rt-local_irq_-variants-depending-on-RT-RT.patch
-features/all/rt/0063-preempt-Provide-preempt_-_-no-rt-variants.patch
-features/all/rt/0064-ata-Do-not-disable-interrupts-in-ide-code-for-preemp.patch
-features/all/rt/0065-ide-Do-not-disable-interrupts-for-PREEMPT-RT.patch
-features/all/rt/0066-infiniband-Mellanox-IB-driver-patch-use-_nort-primit.patch
-features/all/rt/0067-input-gameport-Do-not-disable-interrupts-on-PREEMPT_.patch
-features/all/rt/0068-acpi-Do-not-disable-interrupts-on-PREEMPT_RT.patch
-features/all/rt/0069-core-Do-not-disable-interrupts-on-RT-in-kernel-users.patch
-features/all/rt/0070-core-Do-not-disable-interrupts-on-RT-in-res_counter..patch
-features/all/rt/0071-usb-Use-local_irq_-_nort-variants.patch
-features/all/rt/0072-tty-Do-not-disable-interrupts-in-put_ldisc-on-rt.patch
-features/all/rt/0073-mm-scatterlist-dont-disable-irqs-on-RT.patch
-features/all/rt/0074-signal-fix-up-rcu-wreckage.patch.patch
-features/all/rt/0075-net-wireless-warn-nort.patch.patch
-features/all/rt/0076-mm-Replace-cgroup_page-bit-spinlock.patch
-features/all/rt/0077-buffer_head-Replace-bh_uptodate_lock-for-rt.patch
-features/all/rt/0078-fs-jbd-jbd2-Make-state-lock-and-journal-head-lock-rt.patch
-features/all/rt/0079-genirq-Disable-DEBUG_SHIRQ-for-rt.patch
-features/all/rt/0080-genirq-Disable-random-call-on-preempt-rt.patch
-features/all/rt/0081-genirq-disable-irqpoll-on-rt.patch
-features/all/rt/0082-genirq-force-threading.patch.patch
-features/all/rt/0083-drivers-net-fix-livelock-issues.patch
-features/all/rt/0084-drivers-net-vortex-fix-locking-issues.patch
-features/all/rt/0085-drivers-net-gianfar-Make-RT-aware.patch
-features/all/rt/0086-USB-Fix-the-mouse-problem-when-copying-large-amounts.patch
-features/all/rt/0087-local-var.patch.patch
-features/all/rt/0088-rt-local-irq-lock.patch.patch
-features/all/rt/0089-cpu-rt-variants.patch.patch
-features/all/rt/0090-mm-slab-wrap-functions.patch.patch
-features/all/rt/0091-slab-Fix-__do_drain-to-use-the-right-array-cache.patch
-features/all/rt/0092-mm-More-lock-breaks-in-slab.c.patch
-features/all/rt/0093-mm-page_alloc-rt-friendly-per-cpu-pages.patch
-features/all/rt/0094-mm-page_alloc-reduce-lock-sections-further.patch
-features/all/rt/0095-mm-page-alloc-fix.patch.patch
-features/all/rt/0096-mm-convert-swap-to-percpu-locked.patch
-features/all/rt/0097-mm-make-vmstat-rt-aware.patch
-features/all/rt/0098-mm-shrink-the-page-frame-to-rt-size.patch
-features/all/rt/0099-ARM-Initialize-ptl-lock-for-vector-page.patch
-features/all/rt/0100-mm-Allow-only-slab-on-RT.patch
-features/all/rt/0101-radix-tree-rt-aware.patch.patch
-features/all/rt/0102-panic-disable-random-on-rt.patch
-features/all/rt/0103-ipc-Make-the-ipc-code-rt-aware.patch
-features/all/rt/0104-ipc-mqueue-Add-a-critical-section-to-avoid-a-deadloc.patch
-features/all/rt/0105-relay-fix-timer-madness.patch
-features/all/rt/0106-net-ipv4-route-use-locks-on-up-rt.patch.patch
-features/all/rt/0107-workqueue-avoid-the-lock-in-cpu-dying.patch.patch
-features/all/rt/0108-timers-prepare-for-full-preemption.patch
-features/all/rt/0109-timers-preempt-rt-support.patch
-features/all/rt/0110-timers-fix-timer-hotplug-on-rt.patch
-features/all/rt/0111-timers-mov-printk_tick-to-soft-interrupt.patch
-features/all/rt/0112-timer-delay-waking-softirqs-from-the-jiffy-tick.patch
-features/all/rt/0113-timers-Avoid-the-switch-timers-base-set-to-NULL-tric.patch
-features/all/rt/0114-printk-Don-t-call-printk_tick-in-printk_needs_cpu-on.patch
-features/all/rt/0115-hrtimers-prepare-full-preemption.patch
-features/all/rt/0116-hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
-features/all/rt/0117-hrtimer-Don-t-call-the-timer-handler-from-hrtimer_st.patch
-features/all/rt/0118-hrtimer-Add-missing-debug_activate-aid-Was-Re-ANNOUN.patch
-features/all/rt/0119-hrtimer-fix-reprogram-madness.patch.patch
-features/all/rt/0120-timer-fd-Prevent-live-lock.patch
-features/all/rt/0121-posix-timers-thread-posix-cpu-timers-on-rt.patch
-features/all/rt/0122-posix-timers-Shorten-posix_cpu_timers-CPU-kernel-thr.patch
-features/all/rt/0123-posix-timers-Avoid-wakeups-when-no-timers-are-active.patch
-features/all/rt/0124-sched-delay-put-task.patch.patch
-features/all/rt/0125-sched-limit-nr-migrate.patch.patch
-features/all/rt/0126-sched-mmdrop-delayed.patch.patch
-features/all/rt/0127-sched-rt-mutex-wakeup.patch.patch
-features/all/rt/0128-sched-might-sleep-do-not-account-rcu-depth.patch.patch
-features/all/rt/0129-sched-cond-resched.patch.patch
-features/all/rt/0130-cond-resched-softirq-fix.patch.patch
-features/all/rt/0131-cond-resched-lock-rt-tweak.patch.patch
-features/all/rt/0132-sched-disable-ttwu-queue.patch.patch
-features/all/rt/0133-sched-Disable-CONFIG_RT_GROUP_SCHED-on-RT.patch
-features/all/rt/0134-sched-ttwu-Return-success-when-only-changing-the-sav.patch
-features/all/rt/0135-stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
-features/all/rt/0136-stomp-machine-mark-stomper-thread.patch.patch
-features/all/rt/0137-stomp-machine-raw-lock.patch.patch
-features/all/rt/0138-hotplug-Lightweight-get-online-cpus.patch
-features/all/rt/0139-hotplug-sync_unplug-No.patch
-features/all/rt/0140-hotplug-Reread-hotplug_pcp-on-pin_current_cpu-retry.patch
-features/all/rt/0141-sched-migrate-disable.patch.patch
-features/all/rt/0142-hotplug-use-migrate-disable.patch.patch
-features/all/rt/0143-hotplug-Call-cpu_unplug_begin-before-DOWN_PREPARE.patch
-features/all/rt/0144-ftrace-migrate-disable-tracing.patch.patch
-features/all/rt/0145-tracing-Show-padding-as-unsigned-short.patch
-features/all/rt/0146-migrate-disable-rt-variant.patch.patch
-features/all/rt/0147-sched-Optimize-migrate_disable.patch
-features/all/rt/0148-sched-Generic-migrate_disable.patch
-features/all/rt/0149-sched-rt-Fix-migrate_enable-thinko.patch
-features/all/rt/0150-sched-teach-migrate_disable-about-atomic-contexts.patch
-features/all/rt/0151-sched-Postpone-actual-migration-disalbe-to-schedule.patch
-features/all/rt/0152-sched-Do-not-compare-cpu-masks-in-scheduler.patch
-features/all/rt/0153-sched-Have-migrate_disable-ignore-bounded-threads.patch
-features/all/rt/0154-sched-clear-pf-thread-bound-on-fallback-rq.patch.patch
-features/all/rt/0155-ftrace-crap.patch.patch
-features/all/rt/0156-ring-buffer-Convert-reader_lock-from-raw_spin_lock-i.patch
-features/all/rt/0157-net-netif_rx_ni-migrate-disable.patch.patch
-features/all/rt/0158-softirq-Sanitize-softirq-pending-for-NOHZ-RT.patch
-features/all/rt/0159-lockdep-rt.patch.patch
-features/all/rt/0160-mutex-no-spin-on-rt.patch.patch
-features/all/rt/0161-softirq-local-lock.patch.patch
-features/all/rt/0162-softirq-Export-in_serving_softirq.patch
-features/all/rt/0163-hardirq.h-Define-softirq_count-as-OUL-to-kill-build-.patch
-features/all/rt/0164-softirq-Fix-unplug-deadlock.patch
-features/all/rt/0165-softirq-disable-softirq-stacks-for-rt.patch.patch
-features/all/rt/0166-softirq-make-fifo.patch.patch
-features/all/rt/0167-tasklet-Prevent-tasklets-from-going-into-infinite-sp.patch
-features/all/rt/0168-genirq-Allow-disabling-of-softirq-processing-in-irq-.patch
-features/all/rt/0169-local-vars-migrate-disable.patch.patch
-features/all/rt/0170-md-raid5-Make-raid5_percpu-handling-RT-aware.patch
-features/all/rt/0171-rtmutex-lock-killable.patch.patch
-features/all/rt/0172-rtmutex-futex-prepare-rt.patch.patch
-features/all/rt/0173-futex-Fix-bug-on-when-a-requeued-RT-task-times-out.patch
-features/all/rt/0174-rt-mutex-add-sleeping-spinlocks-support.patch.patch
-features/all/rt/0175-spinlock-types-separate-raw.patch.patch
-features/all/rt/0176-rtmutex-avoid-include-hell.patch.patch
-features/all/rt/0177-rt-add-rt-spinlocks.patch.patch
-features/all/rt/0178-rt-add-rt-to-mutex-headers.patch.patch
-features/all/rt/0179-rwsem-add-rt-variant.patch.patch
-features/all/rt/0180-rt-Add-the-preempt-rt-lock-replacement-APIs.patch
-features/all/rt/0181-rwlocks-Fix-section-mismatch.patch
-features/all/rt/0182-timer-handle-idle-trylock-in-get-next-timer-irq.patc.patch
-features/all/rt/0183-RCU-Force-PREEMPT_RCU-for-PREEMPT-RT.patch
-features/all/rt/0184-rcu-Frob-softirq-test.patch
-features/all/rt/0185-rcu-Merge-RCU-bh-into-RCU-preempt.patch
-features/all/rt/0186-rcu-Fix-macro-substitution-for-synchronize_rcu_bh-on.patch
-features/all/rt/0187-rcu-more-fallout.patch.patch
-features/all/rt/0188-rcu-Make-ksoftirqd-do-RCU-quiescent-states.patch
-features/all/rt/0189-rcu-Fix-build-break.patch
-features/all/rt/0190-rt-rcutree-Move-misplaced-prototype.patch
-features/all/rt/0191-lglocks-rt.patch.patch
-features/all/rt/0192-serial-8250-Clean-up-the-locking-for-rt.patch
-features/all/rt/0193-serial-8250-Call-flush_to_ldisc-when-the-irq-is-thre.patch
-features/all/rt/0194-drivers-tty-fix-omap-lock-crap.patch.patch
-features/all/rt/0195-rt-Improve-the-serial-console-PASS_LIMIT.patch
-features/all/rt/0196-fs-namespace-preemption-fix.patch
-features/all/rt/0197-mm-protect-activate-switch-mm.patch.patch
-features/all/rt/0198-mm-Protect-activate_mm-by-preempt_-disable-7Cenable-.patch
-features/all/rt/0199-fs-block-rt-support.patch.patch
-features/all/rt/0200-fs-ntfs-disable-interrupt-only-on-RT.patch
-features/all/rt/0201-x86-Convert-mce-timer-to-hrtimer.patch
-features/all/rt/0202-x86-stackprotector-Avoid-random-pool-on-rt.patch
-features/all/rt/0203-x86-Use-generic-rwsem_spinlocks-on-rt.patch
-features/all/rt/0204-x86-Disable-IST-stacks-for-debug-int-3-stack-fault-f.patch
-features/all/rt/0205-workqueue-use-get-cpu-light.patch.patch
-features/all/rt/0206-epoll.patch.patch
-features/all/rt/0207-mm-vmalloc.patch.patch
-features/all/rt/0208-workqueue-Fix-cpuhotplug-trainwreck.patch
-features/all/rt/0209-workqueue-Fix-PF_THREAD_BOUND-abuse.patch
-features/all/rt/0210-workqueue-Use-get_cpu_light-in-flush_gcwq.patch
-features/all/rt/0211-hotplug-stuff.patch.patch
-features/all/rt/0212-debugobjects-rt.patch.patch
-features/all/rt/0213-jump-label-rt.patch.patch
-features/all/rt/0214-skbufhead-raw-lock.patch.patch
-features/all/rt/0215-x86-no-perf-irq-work-rt.patch.patch
-features/all/rt/0216-console-make-rt-friendly.patch.patch
-features/all/rt/0217-fix-printk-flush-of-messages.patch
-features/all/rt/0218-power-use-generic-rwsem-on-rt.patch
-features/all/rt/0219-power-disable-highmem-on-rt.patch.patch
-features/all/rt/0220-arm-disable-highmem-on-rt.patch.patch
-features/all/rt/0221-ARM-at91-tclib-Default-to-tclib-timer-for-RT.patch
-features/all/rt/0222-mips-disable-highmem-on-rt.patch.patch
-features/all/rt/0223-net-Avoid-livelock-in-net_tx_action-on-RT.patch
-features/all/rt/0224-ping-sysrq.patch.patch
-features/all/rt/0225-kgdb-serial-Short-term-workaround.patch
-features/all/rt/0226-add-sys-kernel-realtime-entry.patch
-features/all/rt/0227-mm-rt-kmap_atomic-scheduling.patch
-features/all/rt/0228-ipc-sem-Rework-semaphore-wakeups.patch
-features/all/rt/0229-x86-kvm-require-const-tsc-for-rt.patch.patch
-features/all/rt/0230-scsi-fcoe-rt-aware.patch.patch
-features/all/rt/0231-x86-crypto-Reduce-preempt-disabled-regions.patch
-features/all/rt/0232-dm-Make-rt-aware.patch
-features/all/rt/0233-cpumask-Disable-CONFIG_CPUMASK_OFFSTACK-for-RT.patch
-features/all/rt/0234-seqlock-Prevent-rt-starvation.patch
-features/all/rt/0235-timer-Fix-hotplug-for-rt.patch
-features/all/rt/0236-futex-rt-Fix-possible-lockup-when-taking-pi_lock-in-.patch
-features/all/rt/0237-ring-buffer-rt-Check-for-irqs-disabled-before-grabbi.patch
-features/all/rt/0238-sched-rt-Fix-wait_task_interactive-to-test-rt_spin_l.patch
-features/all/rt/0239-lglock-rt-Use-non-rt-for_each_cpu-in-rt-code.patch
-features/all/rt/0240-cpu-Make-hotplug.lock-a-sleeping-spinlock-on-RT.patch
-features/all/rt/0241-softirq-Check-preemption-after-reenabling-interrupts.patch
-features/all/rt/0242-scsi-qla2xxx-Use-local_irq_save_nort-in-qla2x00_poll.patch
-features/all/rt/0243-net-RT-REmove-preemption-disabling-in-netif_rx.patch
-features/all/rt/0244-rt-Introduce-cpu_chill.patch
-features/all/rt/0245-fs-dcache-Use-cpu_chill-in-trylock-loops.patch
-features/all/rt/0246-net-Use-cpu_chill-instead-of-cpu_relax.patch
-features/all/rt/0247-ntp-Make-ntp_lock-raw.patch
-features/all/rt/0248-mips-remove-smp-reserve-lock.patch.patch
-features/all/rt/0249-lockdep-Selftest-convert-spinlock-to-raw-spinlock.patch
-features/all/rt/0250-lockdep-Selftest-Only-do-hardirq-context-test-for-ra.patch
-features/all/rt/0251-genirq-Add-default-affinity-mask-command-line-option.patch
-features/all/rt/0252-kconfig-disable-a-few-options-rt.patch.patch
-features/all/rt/0253-kconfig-preempt-rt-full.patch.patch
+###########################################################
+# DELTA against a known Linus release
+###########################################################
+
+############################################################
+# UPSTREAM changes queued
+############################################################
+
+############################################################
+# UPSTREAM FIXES, patches pending
+############################################################
+
+############################################################
+# Stuff broken upstream, patches submitted
+############################################################
+features/all/rt/x86-kprobes-remove-bogus-preempt-enable.patch
+
+############################################################
+# Stuff which needs addressing upstream, but requires more
+# information
+############################################################
+features/all/rt/x86-hpet-disable-msi-on-lenovo-w510.patch
+
+############################################################
+# Stuff broken upstream, need to be sent
+############################################################
+
+############################################################
+# Submitted on LKML
+############################################################
+# SCHED BLOCK/WQ
+features/all/rt/block-shorten-interrupt-disabled-regions.patch
+
+# CHECKME sched-distangle-worker-accounting-from-rq-3elock.patch
+
+############################################################
+# Submitted to mips ML
+############################################################
+features/all/rt/mips-enable-interrupts-in-signal.patch
+
+############################################################
+# Submitted to ARM ML
+############################################################
+
+############################################################
+# Submitted on LKML
+############################################################
+
+# JBD
+
+# SCHED
+
+############################################################
+# Submitted on ppc-devel
+############################################################
+
+############################################################
+# Submitted to net-dev
+############################################################
+
+############################################################
+# Pending in tip
+############################################################
+
+# WATCHDOG
+
+# CLOCKSOURCE
+
+# RTMUTEX CLEANUP
+
+# RAW SPINLOCKS
+
+# X86
+
+############################################################
+# Pending in peterz's scheduler queue
+############################################################
+
+
+############################################################
+# Stuff which should go upstream ASAP
+############################################################
+
+# GENIRQ
+features/all/rt/genirq-add-default-mask-cmdline-option.patch
+
+# PPC
+features/all/rt/ppc-mark-low-level-handlers-no-thread.patch
+
+# Timekeeping / VDSO
+
+# SEQLOCK
+features/all/rt/seqlock-remove-unused-functions.patch
+features/all/rt/seqlock-use-seqcount.patch
+
+# RAW SPINLOCKS
+features/all/rt/timekeeping-split-xtime-lock.patch
+features/all/rt/intel_idle-convert-i7300_idle_lock-to-raw-spinlock.patch
+features/all/rt/ntp-make-ntp-lock-raw-sigh.patch
+
+# MM memcg
+
+# Tracing
+features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch
+
+# PTRACE/SIGNAL crap
+features/all/rt/signal-revert-ptrace-preempt-magic.patch
+
+# ARM IRQF_NO_TRHEAD / IRQ THREADING SUPPORT
+features/all/rt/arm-mark-pmu-interupt-no-thread.patch
+features/all/rt/arm-allow-irq-threading.patch
+features/all/rt/arm-convert-boot-lock-to-raw.patch
+features/all/rt/arm-omap-make-wakeupgen_lock-raw.patch
+
+# PREEMPT_ENABLE_NO_RESCHED
+
+# SIGNALS / POSIXTIMERS
+features/all/rt/signals-do-not-wake-self.patch
+features/all/rt/posix-timers-no-broadcast.patch
+features/all/rt/signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch
+features/all/rt/oleg-signal-rt-fix.patch
+
+# SCHED
+
+# GENERIC CMPXCHG
+features/all/rt/generic-cmpxchg-use-raw-local-irq.patch
+
+# SHORTEN PREEMPT DISABLED
+features/all/rt/drivers-random-reduce-preempt-disabled-region.patch
+
+# CLOCKSOURCE
+features/all/rt/arm-at91-pit-remove-irq-handler-when-clock-is-unused.patch
+features/all/rt/clocksource-tclib-allow-higher-clockrates.patch
+
+# HW LATENCY DETECTOR - this really wants a rewrite
+#hw-latency-detector.patch
+
+# DRIVERS NET
+features/all/rt/drivers-net-tulip-add-missing-pci-disable.patch
+features/all/rt/drivers-net-8139-disable-irq-nosync.patch
+features/all/rt/drivers-net-ehea-mark-rx-irq-no-thread.patch
+features/all/rt/drivers-net-at91-make-mdio-protection-rt-safe.patch
+
+# PREEMPT
+
+# PAGEFAULT DISABLE
+features/all/rt/mm-prepare-pf-disable-discoupling.patch
+features/all/rt/arch-use-pagefault-disabled.patch
+features/all/rt/peter_zijlstra-frob-pagefault_disable.patch
+features/all/rt/peterz-raw_pagefault_disable.patch
+# highmem-explicitly-disable-preemption.patch -- peterz
+features/all/rt/filemap-fix-up.patch
+features/all/rt/mm-remove-preempt-count-from-pf.patch
+
+# HIGHMEM
+features/all/rt/x86-highmem-warn.patch
+
+# PM
+features/all/rt/suspend-prevernt-might-sleep-splats.patch
+
+# DEVICE TREE
+features/all/rt/of-fixup-recursive-locking.patch
+features/all/rt/of-convert-devtree-lock.patch
+
+# MM/LISTS
+features/all/rt/list-add-list-last-entry.patch
+features/all/rt/mm-page-alloc-use-list-last-entry.patch
+features/all/rt/mm-slab-move-debug-out.patch
+
+# INCLUDE MESS
+features/all/rt/pid-h-include-atomic-h.patch
+features/all/rt/sysctl-include-atomic-h.patch
+
+# NETWORKING
+features/all/rt/net-flip-lock-dep-thingy.patch
+
+# SOFTIRQ
+features/all/rt/softirq-thread-do-softirq.patch
+features/all/rt/softirq-split-out-code.patch
+
+# X86
+features/all/rt/x86-io-apic-migra-no-unmask.patch
+features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch
+
+# RCU
+
+# LOCKING INIT FIXES
+features/all/rt/locking-various-init-fixes.patch
+
+# PCI
+features/all/rt/pci-access-use-__wake_up_all_locked.patch
+
+#####################################################
+# Stuff which should go mainline, but wants some care
+#####################################################
+
+# SEQLOCK
+
+# ANON RW SEMAPHORES
+
+# TRACING
+features/all/rt/latency-hist.patch
+
+# HW latency detector
+features/all/rt/hwlatdetect.patch
+
+##################################################
+# REAL RT STUFF starts here
+##################################################
+
+# Add RT to version
+#localversion.patch
+
+# PRINTK
+features/all/rt/early-printk-consolidate.patch
+features/all/rt/printk-kill.patch
+features/all/rt/printk-27force_early_printk-27-boot-param-to-help-with-debugging.patch
+
+# BASE RT CONFIG
+features/all/rt/rt-preempt-base-config.patch
+
+# WARN/BUG_ON_RT
+features/all/rt/bug-rt-dependend-variants.patch
+
+# LOCAL_IRQ_RT/NON_RT
+features/all/rt/local-irq-rt-depending-variants.patch
+
+# PREEMPT NORT
+features/all/rt/preempt-nort-rt-variants.patch
+
+# ANNOTATE local_irq_disable sites
+features/all/rt/ata-disable-interrupts-if-non-rt.patch
+features/all/rt/ide-use-nort-local-irq-variants.patch
+features/all/rt/infiniband-mellanox-ib-use-nort-irq.patch
+features/all/rt/inpt-gameport-use-local-irq-nort.patch
+features/all/rt/acpi-use-local-irq-nort.patch
+features/all/rt/user-use-local-irq-nort.patch
+features/all/rt/resource-counters-use-localirq-nort.patch
+features/all/rt/usb-hcd-use-local-irq-nort.patch
+features/all/rt/tty-use-local-irq-nort.patch
+features/all/rt/mm-scatterlist-dont-disable-irqs-on-RT.patch
+
+# Sigh
+features/all/rt/signal-fix-up-rcu-wreckage.patch
+
+# ANNOTATE BUG/WARNON
+features/all/rt/net-wireless-warn-nort.patch
+
+# BIT SPINLOCKS - SIGH
+features/all/rt/mm-cgroup-page-bit-spinlock.patch
+features/all/rt/fs-replace-bh_uptodate_lock-for-rt.patch
+features/all/rt/fs-jbd-replace-bh_state-lock.patch
+
+# GENIRQ
+features/all/rt/genirq-nodebug-shirq.patch
+features/all/rt/genirq-disable-irqpoll-on-rt.patch
+features/all/rt/genirq-force-threading.patch
+
+# DRIVERS NET
+features/all/rt/drivers-net-fix-livelock-issues.patch
+features/all/rt/drivers-net-vortex-fix-locking-issues.patch
+features/all/rt/drivers-net-gianfar-make-rt-aware.patch
+
+# DRIVERS USB
+# Revisit. Looks weird
+#usb-rt-support.patch
+features/all/rt/usb-fix-mouse-problem-copying-large-data.patch
+
+# LOCAL_IRQ_LOCKS
+features/all/rt/local-var.patch
+features/all/rt/rt-local-irq-lock.patch
+features/all/rt/cpu-rt-variants.patch
+
+# MM SLAB
+features/all/rt/mm-slab-wrap-functions.patch
+features/all/rt/mm-slab-more-lock-breaks.patch
+
+# MM PAGE_ALLOC
+features/all/rt/mm-page_alloc-rt-friendly-per-cpu-pages.patch
+features/all/rt/mm-page_alloc-reduce-lock-sections-further.patch
+features/all/rt/mm-page-alloc-fix.patch
+
+# MM SWAP
+features/all/rt/mm-convert-swap-to-percpu-locked.patch
+
+# MM vmstat
+features/all/rt/mm-make-vmstat-rt-aware.patch
+
+# MM memory
+#mm-memory-rt.patch - ZAP... is unused
+features/all/rt/mm-shrink-the-page-frame-to-rt-size.patch
+features/all/rt/re-preempt_rt_full-arm-coredump-fails-for-cpu-3e-3d-4.patch
+
+# MM SLAB only
+features/all/rt/mm-allow-slab-rt.patch
+
+# Revisit for avr/frv/ia64/mn10300/sh/sparc ...
+#mm-quicklists-percpu-locked.patch
+
+# RADIX TREE
+features/all/rt/radix-tree-rt-aware.patch
+
+# PANIC
+features/all/rt/panic-disable-random-on-rt.patch
+
+# IPC
+features/all/rt/ipc-make-rt-aware.patch
+features/all/rt/ipc-mqueue-add-a-critical-section-to-avoid-a-deadlock.patch
+
+# RELAY
+features/all/rt/relay-fix-timer-madness.patch
+
+# NETWORKING
+
+# WORKQUEUE SIGH
+
+# TIMERS
+features/all/rt/timers-prepare-for-full-preemption.patch
+features/all/rt/timers-preempt-rt-support.patch
+features/all/rt/timers-mov-printk_tick-to-soft-interrupt.patch
+features/all/rt/timer-delay-waking-softirqs-from-the-jiffy-tick.patch
+features/all/rt/timers-avoid-the-base-null-otptimization-on-rt.patch
+
+# More PRINTK
+features/all/rt/rfc-printk-don-27t-call-printk_tick-in-printk_needs_cpu.patch
+
+# HRTIMERS
+features/all/rt/hrtimers-prepare-full-preemption.patch
+features/all/rt/hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
+features/all/rt/peter_zijlstra-frob-hrtimer.patch
+features/all/rt/hrtimer-add-missing-debug_activate-aid.patch
+features/all/rt/hrtimer-fix-reprogram-madness.patch
+features/all/rt/timer-fd-avoid-live-lock.patch
+
+# POSIX-CPU-TIMERS
+features/all/rt/posix-timers-thread-posix-cpu-timers-on-rt.patch
+features/all/rt/posix-timers-shorten-cpu-timers-thread.patch
+features/all/rt/posix-timers-avoid-wakeups-when-no-timers-are-active.patch
+
+# SCHEDULER
+features/all/rt/sched-delay-put-task.patch
+features/all/rt/sched-limit-nr-migrate.patch
+features/all/rt/sched-mmdrop-delayed.patch
+features/all/rt/sched-rt-mutex-wakeup.patch
+features/all/rt/sched-might-sleep-do-not-account-rcu-depth.patch
+# CHECKME sched-load-balance-break-on-rq-contention.patch
+features/all/rt/sched-cond-resched.patch
+features/all/rt/cond-resched-softirq-rt.patch
+features/all/rt/cond-resched-lock-rt-tweak.patch
+features/all/rt/sched-disable-ttwu-queue.patch
+features/all/rt/sched-disable-rt-group-sched-on-rt.patch
+features/all/rt/sched-ttwu-ensure-success-return-is-correct.patch
+
+# STOP MACHINE
+features/all/rt/stop_machine-convert-stop_machine_run-to-PREEMPT_RT.patch
+features/all/rt/stomp-machine-mark-stomper-thread.patch
+features/all/rt/stomp-machine-raw-lock.patch
+
+# MIGRATE DISABLE AND PER CPU
+features/all/rt/hotplug-light-get-online-cpus.patch
+features/all/rt/hotplug-sync_unplug-no-27-5cn-27-in-task-name.patch
+features/all/rt/re-migrate_disable-race-with-cpu-hotplug-3f.patch
+features/all/rt/sched-migrate-disable.patch
+features/all/rt/hotplug-use-migrate-disable.patch
+features/all/rt/hotplug-call-cpu_unplug_begin-a-little-early.patch
+
+features/all/rt/ftrace-migrate-disable-tracing.patch
+features/all/rt/rt-tracing-show-padding-as-unsigned-short.patch
+
+features/all/rt/migrate-disable-rt-variant.patch
+features/all/rt/peter_zijlstra-frob-migrate_disable.patch
+features/all/rt/peter_zijlstra-frob-migrate_disable-2.patch
+features/all/rt/sched-rt-fix-migrate_enable-thinko.patch
+features/all/rt/sched-teach-migrate_disable-about-atomic-contexts.patch
+features/all/rt/rt-sched-postpone-actual-migration-disalbe-to-schedule.patch
+features/all/rt/rt-sched-do-not-compare-cpu-masks-in-scheduler.patch
+features/all/rt/rt-sched-have-migrate_disable-ignore-bounded-threads.patch
+features/all/rt/sched-clear-pf-thread-bound-on-fallback-rq.patch
+
+# FTRACE
+features/all/rt/ftrace-crap.patch
+# CHECKME rt-ring-buffer-convert-reader_lock-from-raw_spin_lock-into-spin_lock.patch
+# CHECKME rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch
+
+# NETWORKING
+features/all/rt/net-netif_rx_ni-migrate-disable.patch
+
+# NOHZ
+features/all/rt/softirq-sanitize-softirq-pending.patch
+
+# LOCKDEP
+features/all/rt/lockdep-no-softirq-accounting-on-rt.patch
+
+# SOFTIRQ local lock
+features/all/rt/mutex-no-spin-on-rt.patch
+features/all/rt/softirq-local-lock.patch
+features/all/rt/softirq-export-in-serving-softirq.patch
+features/all/rt/harirq-h-define-softirq_count-as-oul-to-kill-build-warning.patch
+features/all/rt/softirq-fix-unplug-deadlock.patch
+features/all/rt/softirq-disable-softirq-stacks-for-rt.patch
+features/all/rt/softirq-make-fifo.patch
+features/all/rt/tasklet-rt-prevent-tasklets-from-going-into-infinite-spin-in-rt.patch
+features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch
+
+# LOCAL VARS and GETCPU STUFF
+features/all/rt/local-vars-migrate-disable.patch
+
+# RAID5
+features/all/rt/md-raid5-percpu-handling-rt-aware.patch
+
+# RTMUTEX
+features/all/rt/rtmutex-lock-killable.patch
+
+# FUTEX/RTMUTEX
+features/all/rt/rtmutex-futex-prepare-rt.patch
+features/all/rt/futex-requeue-pi-fix.patch
+
+# RTMUTEX
+features/all/rt/rt-mutex-add-sleeping-spinlocks-support.patch
+features/all/rt/spinlock-types-separate-raw.patch
+features/all/rt/rtmutex-avoid-include-hell.patch
+features/all/rt/rt-add-rt-spinlock-to-headers.patch
+features/all/rt/rt-add-rt-to-mutex-headers.patch
+features/all/rt/rwsem-add-rt-variant.patch
+features/all/rt/rt-add-rt-locks.patch
+
+# RTMUTEX Fallout
+features/all/rt/tasklist-lock-fix-section-conflict.patch
+
+# NOHZ/RTMUTEX
+features/all/rt/timer-handle-idle-trylock-in-get-next-timer-irq.patch
+features/all/rt/timer.c-fix-build-fail-for-RT_FULL.patch
+
+# RCU
+features/all/rt/rcu-force-preempt-rcu-for-rt.patch
+features/all/rt/peter_zijlstra-frob-rcu.patch
+features/all/rt/rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch
+features/all/rt/rcu-tiny-merge-bh.patch
+features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch
+features/all/rt/rcu-fix-build-break.patch
+features/all/rt/rt-rcutree-warn-fix.patch
+
+# LGLOCKS - lovely
+features/all/rt/lglocks-rt.patch
+
+# DRIVERS SERIAL
+features/all/rt/drivers-serial-cleanup-locking-for-rt.patch
+features/all/rt/drivers-serial-call-flush_to_ldisc-when-the-irq-is-t.patch
+features/all/rt/drivers-tty-fix-omap-lock-crap.patch
+features/all/rt/rt-serial-warn-fix.patch
+
+# FS
+features/all/rt/fs-namespace-preemption-fix.patch
+features/all/rt/mm-protect-activate-switch-mm.patch
+features/all/rt/mm-protect-activate_mm-by-preempt_-disable-7cenable-_rt.patch
+features/all/rt/fs-block-rt-support.patch
+features/all/rt/fs-ntfs-disable-interrupt-non-rt.patch
+
+# X86
+features/all/rt/x86-mce-timer-hrtimer.patch
+features/all/rt/x86-stackprot-no-random-on-rt.patch
+# x86-no-highmem-with-rt.patch -- peterz
+features/all/rt/x86-use-gen-rwsem-spinlocks-rt.patch
+features/all/rt/x86-disable-debug-stack.patch
+
+# CPU get light
+features/all/rt/workqueue-use-get-cpu-light.patch
+features/all/rt/epoll-use-get-cpu-light.patch
+features/all/rt/mm-vmalloc-use-get-cpu-light.patch
+
+# WORKQUEUE more fixes
+# CHECKME workqueue-sanity.patch
+# CHECKME workqueue-fix-PF_THREAD_BOUND.patch
+# CHECKME workqueue-hotplug-fix.patch
+# CHECKME workqueue-more-hotplug-fallout.patch
+
+# DEBUGOBJECTS
+features/all/rt/debugobjects-rt.patch
+
+# JUMPLABEL
+features/all/rt/jump-label-rt.patch
+
+# NET
+features/all/rt/skbufhead-raw-lock.patch
+
+# PERF
+features/all/rt/perf-move-irq-work-to-softirq-in-rt.patch
+
+# CONSOLE. NEEDS more thought !!!
+features/all/rt/printk-rt-aware.patch
+
+# POWERC
+features/all/rt/power-use-generic-rwsem-on-rt.patch
+features/all/rt/power-disable-highmem-on-rt.patch
+
+# ARM
+features/all/rt/arm-disable-highmem-on-rt.patch
+features/all/rt/arm-at91-tclib-default-to-tclib-timer-for-rt.patch
+
+# MIPS
+features/all/rt/mips-disable-highmem-on-rt.patch
+
+# NETWORK livelock fix
+features/all/rt/net-tx-action-avoid-livelock-on-rt.patch
+
+# NETWORK DEBUGGING AID
+features/all/rt/ping-sysrq.patch
+
+# KGDB
+features/all/rt/kgb-serial-hackaround.patch
+
+# SYSFS - RT indicator
+features/all/rt/sysfs-realtime-entry.patch
+
+# KMAP/HIGHMEM
+features/all/rt/mm-rt-kmap-atomic-scheduling.patch
+
+# IPC
+features/all/rt/ipc-sem-rework-semaphore-wakeups.patch
+
+# SYSRQ
+
+# KVM require constant freq TSC (smp function call -> cpufreq)
+features/all/rt/x86-kvm-require-const-tsc-for-rt.patch
+
+# SCSI/FCOE
+features/all/rt/scsi-fcoe-rt-aware.patch
+
+# X86 crypto
+features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch
+
+# Device mapper
+features/all/rt/dm-make-rt-aware.patch
+
+# ACPI
+# Dropped those two as they cause a scheduling in atomic failure and
+# we have no clue why we made those locks raw in the first place.
+# acpi-make-gbl-hardware-lock-raw.patch
+# acpi-make-ec-lock-raw-as-well.patch
+
+# This one is just a follow up to the raw spin locks
+# Simple raw spinlock based waitqueue
+# wait-simple-version.patch
+# acpi-gpe-use-wait-simple.patch
+
+# CPUMASK OFFSTACK
+features/all/rt/cpumask-disable-offstack-on-rt.patch
+
+# Various fixes - fold them back
+features/all/rt/seqlock-prevent-rt-starvation.patch
+#fs-protect-opencoded-isize-seqcount.patch
+#net-u64-stat-protect-seqcount.patch
+features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch
+
+features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch
+
+features/all/rt/softirq-preempt-fix-3-re.patch
+features/all/rt/scsi-qla2xxx-fix-bug-sleeping-function-called-from-invalid-context.patch
+features/all/rt/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch
+
+# FS LIVELOCK PREVENTION
+features/all/rt/rt-introduce-cpu-chill.patch
+features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch
+features/all/rt/net-use-cpu-chill.patch
+
+# LOCKDEP
+features/all/rt/lockdep-selftest-convert-spinlock-to-raw-spinlock.patch
+features/all/rt/lockdep-selftest-only-do-hardirq-context-test-for-raw-spinlock.patch
+
+features/all/rt/rt-disable-rt-group-sched.patch
+features/all/rt/fs-jbd-pull-plug-when-waiting-for-space.patch
+features/all/rt/perf-make-swevent-hrtimer-irqsafe.patch
+features/all/rt/cpu-rt-rework-cpu-down.patch
+
+# Stable-rt stuff: Fold back when Steve grabbed it
+features/all/rt/random-make-it-work-on-rt.patch
+features/all/rt/softirq-init-softirq-local-lock-after-per-cpu-section-is-set-up.patch
+features/all/rt/mm-slab-fix-potential-deadlock.patch
+features/all/rt/mm-page-alloc-use-local-lock-on-target-cpu.patch
+features/all/rt/rt-rw-lockdep-annotations.patch
+features/all/rt/sched-better-debug-output-for-might-sleep.patch
+features/all/rt/stomp-machine-deal-clever-with-stopper-lock.patch
+
+# 3.6 specific updates
+features/all/rt/net-another-local-irq-disable-alloc-atomic-headache.patch
+features/all/rt/net-use-cpu-light-in-ip-send-unicast-reply.patch
+features/all/rt/peterz-srcu-crypto-chain.patch
+features/all/rt/crypto-make-core-static-and-init-scru-early.patch
+features/all/rt/x86-perf-uncore-deal-with-kfree.patch
+features/all/rt/softirq-make-serving-softirqs-a-task-flag.patch
+features/all/rt/softirq-split-handling-function.patch
+features/all/rt/softirq-split-locks.patch
+
+# Needs more thought
+# block-wrap-raise-softirq-in-local-bh-to-avoid-context-switches.patch
+# nohz-fix-sirq-fallout.patch
+
+# Enable full RT
+features/all/rt/rcu-tiny-solve-rt-mistery.patch
+features/all/rt/kconfig-disable-a-few-options-rt.patch
+features/all/rt/kconfig-preempt-rt-full.patch
More information about the Kernel-svn-changes
mailing list