Re: [ANNOUNCE] 3.6.11-rt26

From: Clark Williams
Date: Mon Feb 04 2013 - 11:59:18 EST


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