On Mon, 4 Feb 2013 09:54:38 -0600 Clark Williams <williams@xxxxxxxxxx> wrote: > On Mon, 4 Feb 2013 15:58:26 +0100 (CET) > Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > > > Dear RT Folks, > > > > I'm pleased to announce the 3.6.11-rt26 release. > > > > Changes since 3.6.11-rt25: > > > > 1) Fix the RT highmem implementation on x86 > > > > 2) Support highmem + RT on ARM > > > > 3) Fix an one off error in the generic highmem code (upstream fix > > did not make it into 3.6.stable) > > > > 4) Upstream SLUB fixes (Christoph Lameter) > > > > 5) Fix a few RT issues in mmc and amba drivers > > > > 6) Initialize local locks in mm/swap.c early > > > > 7) Use simple wait queues for completions. This is a performance > > improvement. > > > > Completions do not have complex callbacks and the wakeup path is > > disabling interrupts anyway. So using simple wait locks with the > > raw spinlock is not a latency problem, but the "sleeping lock" > > in the normal waitqueue is a source for lock bouncing: > > > > T1 T2 > > lock(WQ) > > wakeup(T2) > > ---> preemption > > lock(WQ) > > pi_boost(T1) > > wait_for_lock(WQ) > > unlock(WQ) > > deboost(T1) > > ---> preemption > > .... > > > > The simple waitqueue reduces this to: > > > > T1 T2 > > raw_lock(WQ) > > wakeup(T2) > > raw_unlock(WQ) > > ---> preemption > > raw_lock(WQ) > > .... > > > > @Steven: Sorry, I forgot the stable tags on: > > drivers-tty-pl011-irq-disable-madness.patch > > mmci-remove-bogus-irq-save.patch > > idle-state.patch > > might-sleep-check-for-idle.patch > > mm-swap-fix-initialization.patch > > > > I'm still digging through my mail backlog, so I have not yet decided > > whether this is the last RT release for 3.6. > > > > > > The delta patch against 3.6.11-rt25 is appended below and can be found > > here: > > > > http://www.kernel.org/pub/linux/kernel/projects/rt/3.6/incr/patch-3.6.11-rt25-rt26.patch.xz > > > > The RT patch against 3.6.11 can be found here: > > > > http://www.kernel.org/pub/linux/kernel/projects/rt/3.6/patch-3.6.11-rt26.patch.xz > > > > The split quilt queue is available at: > > > > http://www.kernel.org/pub/linux/kernel/projects/rt/3.6/patches-3.6.11-rt26.tar.xz > > > > Enjoy, > > > > tglx > > > > > Thomas, > > I needed this change to build: > > diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h > index efe4b33..3d5231f 100644 > --- a/include/linux/uprobes.h > +++ b/include/linux/uprobes.h > @@ -26,6 +26,7 @@ > > #include <linux/errno.h> > #include <linux/rbtree.h> > +#include <linux/wait.h> > > struct vm_area_struct; > struct mm_struct; > > > Clark More changes; I was running into a collision with the name kmap_prot. This is not stacked on the above patch, it supercedes it. Clark diff --git a/arch/x86/include/asm/highmem.h b/arch/x86/include/asm/highmem.h index dc7b47e..1004f7d 100644 --- a/arch/x86/include/asm/highmem.h +++ b/arch/x86/include/asm/highmem.h @@ -69,7 +69,7 @@ void *kmap_atomic_pfn(unsigned long pfn); void *kmap_atomic_prot_pfn(unsigned long pfn, pgprot_t prot); struct page *kmap_atomic_to_page(void *ptr); #else -void *kmap_prot(struct page *page, pgprot_t prot); +void *__kmap_prot(struct page *page, pgprot_t prot); # define kmap_atomic(page) \ ({ pagefault_disable(); kmap(page); }) @@ -80,10 +80,10 @@ void *kmap_prot(struct page *page, pgprot_t prot); do { kunmap(kmap_to_page(kvaddr)); pagefault_enable(); } while(0) # define kmap_atomic_prot(page, prot) \ - ({ pagefault_disable(); kmap_prot(page, prot); }) + ({ pagefault_disable(); __kmap_prot(page, prot); }) # define kmap_atomic_prot_pfn(pfn, prot) \ - ({ pagefault_disable(); kmap_prot(pfn_to_page(pfn), prot); }) + ({ pagefault_disable(); __kmap_prot(pfn_to_page(pfn), prot); }) # define kmap_atomic_to_page(kvaddr) \ kmap_to_page(kvaddr) diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 98f84e2..9a85340 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -59,7 +59,7 @@ static inline void *kmap(struct page *page) return page_address(page); } -#define kmap_prot(page, prot) kmap(page) +#define __kmap_prot(page, prot) kmap(page) static inline void kunmap(struct page *page) { diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h index efe4b33..3d5231f 100644 --- a/include/linux/uprobes.h +++ b/include/linux/uprobes.h @@ -26,6 +26,7 @@ #include <linux/errno.h> #include <linux/rbtree.h> +#include <linux/wait.h> struct vm_area_struct; struct mm_struct;
Attachment:
signature.asc
Description: PGP signature