Re: Linux 3.0.43

2012-09-14 Thread Greg KH
diff --git a/Makefile b/Makefile
index d863aa0..4bd7aed 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 0
-SUBLEVEL = 42
+SUBLEVEL = 43
 EXTRAVERSION =
 NAME = Sneaky Weasel
 
diff --git a/arch/alpha/include/asm/socket.h b/arch/alpha/include/asm/socket.h
index 06edfef..3eeb47c 100644
--- a/arch/alpha/include/asm/socket.h
+++ b/arch/alpha/include/asm/socket.h
@@ -69,9 +69,11 @@
 
 #define SO_RXQ_OVFL 40
 
+#ifdef __KERNEL__
 /* O_NONBLOCK clashes with the bits used for socket types.  Therefore we
  * have to define SOCK_NONBLOCK to a different value here.
  */
 #define SOCK_NONBLOCK  0x4000
+#endif /* __KERNEL__ */
 
 #endif /* _ASM_SOCKET_H */
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index f9b212e..fad8e72 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1875,6 +1875,7 @@ source "drivers/cpufreq/Kconfig"
 config CPU_FREQ_IMX
tristate "CPUfreq driver for i.MX CPUs"
depends on ARCH_MXC && CPU_FREQ
+   select CPU_FREQ_TABLE
help
  This enables the CPUfreq driver for i.MX CPUs.
 
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
index 5750704..6afd081 100644
--- a/arch/arm/include/asm/pgtable.h
+++ b/arch/arm/include/asm/pgtable.h
@@ -360,6 +360,18 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
 #define set_pte_ext(ptep,pte,ext) cpu_set_pte_ext(ptep,pte,ext)
 #define pte_clear(mm,addr,ptep)set_pte_ext(ptep, __pte(0), 0)
 
+#define pte_none(pte)  (!pte_val(pte))
+#define pte_present(pte)   (pte_val(pte) & L_PTE_PRESENT)
+#define pte_write(pte) (!(pte_val(pte) & L_PTE_RDONLY))
+#define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY)
+#define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG)
+#define pte_exec(pte)  (!(pte_val(pte) & L_PTE_XN))
+#define pte_special(pte)   (0)
+
+#define pte_present_user(pte) \
+   ((pte_val(pte) & (L_PTE_PRESENT | L_PTE_USER)) == \
+(L_PTE_PRESENT | L_PTE_USER))
+
 #if __LINUX_ARM_ARCH__ < 6
 static inline void __sync_icache_dcache(pte_t pteval)
 {
@@ -371,25 +383,15 @@ extern void __sync_icache_dcache(pte_t pteval);
 static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
  pte_t *ptep, pte_t pteval)
 {
-   if (addr >= TASK_SIZE)
-   set_pte_ext(ptep, pteval, 0);
-   else {
+   unsigned long ext = 0;
+
+   if (addr < TASK_SIZE && pte_present_user(pteval)) {
__sync_icache_dcache(pteval);
-   set_pte_ext(ptep, pteval, PTE_EXT_NG);
+   ext |= PTE_EXT_NG;
}
-}
 
-#define pte_none(pte)  (!pte_val(pte))
-#define pte_present(pte)   (pte_val(pte) & L_PTE_PRESENT)
-#define pte_write(pte) (!(pte_val(pte) & L_PTE_RDONLY))
-#define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY)
-#define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG)
-#define pte_exec(pte)  (!(pte_val(pte) & L_PTE_XN))
-#define pte_special(pte)   (0)
-
-#define pte_present_user(pte) \
-   ((pte_val(pte) & (L_PTE_PRESENT | L_PTE_USER)) == \
-(L_PTE_PRESENT | L_PTE_USER))
+   set_pte_ext(ptep, pteval, ext);
+}
 
 #define PTE_BIT_FUNC(fn,op) \
 static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
@@ -416,13 +418,13 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t 
newprot)
  *
  *   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
- *   <--- offset > <- type --> 0 0 0
+ *   <--- offset --> < type -> 0 0 0
  *
- * This gives us up to 63 swap files and 32GB per swap file.  Note that
+ * This gives us up to 31 swap files and 64GB per swap file.  Note that
  * the offset field is always non-zero.
  */
 #define __SWP_TYPE_SHIFT   3
-#define __SWP_TYPE_BITS6
+#define __SWP_TYPE_BITS5
 #define __SWP_TYPE_MASK((1 << __SWP_TYPE_BITS) - 1)
 #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT)
 
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
index 1a8d4aa..8fda9f7 100644
--- a/arch/arm/mm/flush.c
+++ b/arch/arm/mm/flush.c
@@ -236,8 +236,6 @@ void __sync_icache_dcache(pte_t pteval)
struct page *page;
struct address_space *mapping;
 
-   if (!pte_present_user(pteval))
-   return;
if (cache_is_vipt_nonaliasing() && !pte_exec(pteval))
/* only flush non-aliasing VIPT caches for exec mappings */
return;
diff --git a/arch/arm/mm/tlb-v7.S b/arch/arm/mm/tlb-v7.S
index 875634a..d7d0f7f 100644
--- a/arch/arm/mm/tlb-v7.S
+++ b/arch/arm/mm/tlb-v7.S
@@ -38,10 +38,10 @@ ENTRY(v7wbi_flush_user_tlb_range)
dsb
mov r0, r0, lsr #PAGE_SHIFT @ align address
mov r1, r1, lsr #PAGE_SHIFT
-#ifdef CONFIG_ARM_ERRATA_720789
-   mov r3, #0
-#else
asidr3, 

Re: Linux 3.0.43

2012-09-14 Thread Greg KH
diff --git a/Makefile b/Makefile
index d863aa0..4bd7aed 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 0
-SUBLEVEL = 42
+SUBLEVEL = 43
 EXTRAVERSION =
 NAME = Sneaky Weasel
 
diff --git a/arch/alpha/include/asm/socket.h b/arch/alpha/include/asm/socket.h
index 06edfef..3eeb47c 100644
--- a/arch/alpha/include/asm/socket.h
+++ b/arch/alpha/include/asm/socket.h
@@ -69,9 +69,11 @@
 
 #define SO_RXQ_OVFL 40
 
+#ifdef __KERNEL__
 /* O_NONBLOCK clashes with the bits used for socket types.  Therefore we
  * have to define SOCK_NONBLOCK to a different value here.
  */
 #define SOCK_NONBLOCK  0x4000
+#endif /* __KERNEL__ */
 
 #endif /* _ASM_SOCKET_H */
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index f9b212e..fad8e72 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1875,6 +1875,7 @@ source drivers/cpufreq/Kconfig
 config CPU_FREQ_IMX
tristate CPUfreq driver for i.MX CPUs
depends on ARCH_MXC  CPU_FREQ
+   select CPU_FREQ_TABLE
help
  This enables the CPUfreq driver for i.MX CPUs.
 
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
index 5750704..6afd081 100644
--- a/arch/arm/include/asm/pgtable.h
+++ b/arch/arm/include/asm/pgtable.h
@@ -360,6 +360,18 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
 #define set_pte_ext(ptep,pte,ext) cpu_set_pte_ext(ptep,pte,ext)
 #define pte_clear(mm,addr,ptep)set_pte_ext(ptep, __pte(0), 0)
 
+#define pte_none(pte)  (!pte_val(pte))
+#define pte_present(pte)   (pte_val(pte)  L_PTE_PRESENT)
+#define pte_write(pte) (!(pte_val(pte)  L_PTE_RDONLY))
+#define pte_dirty(pte) (pte_val(pte)  L_PTE_DIRTY)
+#define pte_young(pte) (pte_val(pte)  L_PTE_YOUNG)
+#define pte_exec(pte)  (!(pte_val(pte)  L_PTE_XN))
+#define pte_special(pte)   (0)
+
+#define pte_present_user(pte) \
+   ((pte_val(pte)  (L_PTE_PRESENT | L_PTE_USER)) == \
+(L_PTE_PRESENT | L_PTE_USER))
+
 #if __LINUX_ARM_ARCH__  6
 static inline void __sync_icache_dcache(pte_t pteval)
 {
@@ -371,25 +383,15 @@ extern void __sync_icache_dcache(pte_t pteval);
 static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
  pte_t *ptep, pte_t pteval)
 {
-   if (addr = TASK_SIZE)
-   set_pte_ext(ptep, pteval, 0);
-   else {
+   unsigned long ext = 0;
+
+   if (addr  TASK_SIZE  pte_present_user(pteval)) {
__sync_icache_dcache(pteval);
-   set_pte_ext(ptep, pteval, PTE_EXT_NG);
+   ext |= PTE_EXT_NG;
}
-}
 
-#define pte_none(pte)  (!pte_val(pte))
-#define pte_present(pte)   (pte_val(pte)  L_PTE_PRESENT)
-#define pte_write(pte) (!(pte_val(pte)  L_PTE_RDONLY))
-#define pte_dirty(pte) (pte_val(pte)  L_PTE_DIRTY)
-#define pte_young(pte) (pte_val(pte)  L_PTE_YOUNG)
-#define pte_exec(pte)  (!(pte_val(pte)  L_PTE_XN))
-#define pte_special(pte)   (0)
-
-#define pte_present_user(pte) \
-   ((pte_val(pte)  (L_PTE_PRESENT | L_PTE_USER)) == \
-(L_PTE_PRESENT | L_PTE_USER))
+   set_pte_ext(ptep, pteval, ext);
+}
 
 #define PTE_BIT_FUNC(fn,op) \
 static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
@@ -416,13 +418,13 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t 
newprot)
  *
  *   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
- *   --- offset  - type -- 0 0 0
+ *   --- offset --  type - 0 0 0
  *
- * This gives us up to 63 swap files and 32GB per swap file.  Note that
+ * This gives us up to 31 swap files and 64GB per swap file.  Note that
  * the offset field is always non-zero.
  */
 #define __SWP_TYPE_SHIFT   3
-#define __SWP_TYPE_BITS6
+#define __SWP_TYPE_BITS5
 #define __SWP_TYPE_MASK((1  __SWP_TYPE_BITS) - 1)
 #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT)
 
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
index 1a8d4aa..8fda9f7 100644
--- a/arch/arm/mm/flush.c
+++ b/arch/arm/mm/flush.c
@@ -236,8 +236,6 @@ void __sync_icache_dcache(pte_t pteval)
struct page *page;
struct address_space *mapping;
 
-   if (!pte_present_user(pteval))
-   return;
if (cache_is_vipt_nonaliasing()  !pte_exec(pteval))
/* only flush non-aliasing VIPT caches for exec mappings */
return;
diff --git a/arch/arm/mm/tlb-v7.S b/arch/arm/mm/tlb-v7.S
index 875634a..d7d0f7f 100644
--- a/arch/arm/mm/tlb-v7.S
+++ b/arch/arm/mm/tlb-v7.S
@@ -38,10 +38,10 @@ ENTRY(v7wbi_flush_user_tlb_range)
dsb
mov r0, r0, lsr #PAGE_SHIFT @ align address
mov r1, r1, lsr #PAGE_SHIFT
-#ifdef CONFIG_ARM_ERRATA_720789
-   mov r3, #0
-#else
asidr3, r3  @ mask