[to-be-updated] mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t.patch removed from -mm tree

2021-06-16 Thread akpm


The patch titled
 Subject: mm: rename p4d_page_vaddr to p4d_pgtable and make it return pud_t 
*
has been removed from the -mm tree.  Its filename was
 mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t.patch

This patch was dropped because an updated version will be merged

--
From: "Aneesh Kumar K.V" 
Subject: mm: rename p4d_page_vaddr to p4d_pgtable and make it return pud_t *

No functional change in this patch.

Link: 
https://lkml.kernel.org/r/20210615110859.320299-2-aneesh.ku...@linux.ibm.com
Link: 
https://lore.kernel.org/linuxppc-dev/CAHk-=wi+j+iodze9ftjm3zi4j4oes+qqbkxme9qn4roxpex...@mail.gmail.com/
Signed-off-by: Aneesh Kumar K.V 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Signed-off-by: Andrew Morton 
---

 arch/arm64/include/asm/pgtable.h|4 ++--
 arch/ia64/include/asm/pgtable.h |2 +-
 arch/mips/include/asm/pgtable-64.h  |4 ++--
 arch/powerpc/include/asm/book3s/64/pgtable.h|5 -
 arch/powerpc/include/asm/nohash/64/pgtable-4k.h |6 +-
 arch/powerpc/mm/book3s64/radix_pgtable.c|2 +-
 arch/powerpc/mm/pgtable_64.c|2 +-
 arch/sparc/include/asm/pgtable_64.h |4 ++--
 arch/x86/include/asm/pgtable.h  |4 ++--
 arch/x86/mm/init_64.c   |4 ++--
 include/asm-generic/pgtable-nop4d.h |2 +-
 include/asm-generic/pgtable-nopud.h |2 +-
 include/linux/pgtable.h |2 +-
 13 files changed, 25 insertions(+), 18 deletions(-)

--- 
a/arch/arm64/include/asm/pgtable.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/arm64/include/asm/pgtable.h
@@ -694,9 +694,9 @@ static inline phys_addr_t p4d_page_paddr
return __p4d_to_phys(p4d);
 }
 
-static inline unsigned long p4d_page_vaddr(p4d_t p4d)
+static inline pud_t *p4d_pgtable(p4d_t p4d)
 {
-   return (unsigned long)__va(p4d_page_paddr(p4d));
+   return (pud_t *)__va(p4d_page_paddr(p4d));
 }
 
 /* Find an entry in the frst-level page table. */
--- 
a/arch/ia64/include/asm/pgtable.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/ia64/include/asm/pgtable.h
@@ -281,7 +281,7 @@ ia64_phys_addr_valid (unsigned long addr
 #define p4d_bad(p4d)   (!ia64_phys_addr_valid(p4d_val(p4d)))
 #define p4d_present(p4d)   (p4d_val(p4d) != 0UL)
 #define p4d_clear(p4dp)(p4d_val(*(p4dp)) = 0UL)
-#define p4d_page_vaddr(p4d)((unsigned long) __va(p4d_val(p4d) & 
_PFN_MASK))
+#define p4d_pgtable(p4d)   ((pud_t *) __va(p4d_val(p4d) & 
_PFN_MASK))
 #define p4d_page(p4d)  virt_to_page((p4d_val(p4d) + 
PAGE_OFFSET))
 #endif
 
--- 
a/arch/mips/include/asm/pgtable-64.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/mips/include/asm/pgtable-64.h
@@ -209,9 +209,9 @@ static inline void p4d_clear(p4d_t *p4dp
p4d_val(*p4dp) = (unsigned long)invalid_pud_table;
 }
 
-static inline unsigned long p4d_page_vaddr(p4d_t p4d)
+static inline pud_t *p4d_pgtable(p4d_t p4d)
 {
-   return p4d_val(p4d);
+   return (pud_t *)p4d_val(p4d);
 }
 
 #define p4d_phys(p4d)  virt_to_phys((void *)p4d_val(p4d))
--- 
a/arch/powerpc/include/asm/book3s/64/pgtable.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/powerpc/include/asm/book3s/64/pgtable.h
@@ -1048,7 +1048,10 @@ extern struct page *p4d_page(p4d_t p4d);
 /* Pointers in the page table tree are physical addresses */
 #define __pgtable_ptr_val(ptr) __pa(ptr)
 
-#define p4d_page_vaddr(p4d)__va(p4d_val(p4d) & ~P4D_MASKED_BITS)
+static inline pud_t *p4d_pgtable(p4d_t p4d)
+{
+   return (pud_t *)__va(p4d_val(p4d) & ~P4D_MASKED_BITS);
+}
 
 static inline pmd_t *pud_pgtable(pud_t pud)
 {
--- 
a/arch/powerpc/include/asm/nohash/64/pgtable-4k.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/powerpc/include/asm/nohash/64/pgtable-4k.h
@@ -56,10 +56,14 @@
 #define p4d_none(p4d)  (!p4d_val(p4d))
 #define p4d_bad(p4d)   (p4d_val(p4d) == 0)
 #define p4d_present(p4d)   (p4d_val(p4d) != 0)
-#define p4d_page_vaddr(p4d)(p4d_val(p4d) & ~P4D_MASKED_BITS)
 
 #ifndef __ASSEMBLY__
 
+static inline pud_t *p4d_pgtable(p4d_t p4d)
+{
+   return (pud_t *) (p4d_val(p4d) & ~P4D_MASKED_BITS);
+}
+
 static inline void p4d_clear(p4d_t *p4dp)
 {
*p4dp = __p4d(0);
--- 
a/arch/powerpc/mm/book3s64/radix_pgtable.c~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/powerpc/mm/book3s64/radix_pgtable.c
@@ -860,7 +860,7 @@ static void __meminit remove_pagetable(u
continue;
}
 
-   pud_base = (pud_t *)p4d_page_vaddr(*p4d);
+   pud_base = p4d_pgtable(*p4d);
remove_pud_table(pud_base, addr, 

[to-be-updated] mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t.patch removed from -mm tree

2021-06-16 Thread akpm


The patch titled
 Subject: mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t 
*
has been removed from the -mm tree.  Its filename was
 mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t.patch

This patch was dropped because an updated version will be merged

--
From: "Aneesh Kumar K.V" 
Subject: mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t *

No functional change in this patch.

Link: 
https://lkml.kernel.org/r/20210615110859.320299-1-aneesh.ku...@linux.ibm.com
Link: 
https://lore.kernel.org/linuxppc-dev/CAHk-=wi+j+iodze9ftjm3zi4j4oes+qqbkxme9qn4roxpex...@mail.gmail.com/
Signed-off-by: Aneesh Kumar K.V 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Signed-off-by: Andrew Morton 
---

 arch/alpha/include/asm/pgtable.h |8 +---
 arch/arm/include/asm/pgtable-3level.h|2 +-
 arch/arm64/include/asm/pgtable.h |4 ++--
 arch/ia64/include/asm/pgtable.h  |2 +-
 arch/m68k/include/asm/motorola_pgtable.h |2 +-
 arch/mips/include/asm/pgtable-64.h   |4 ++--
 arch/parisc/include/asm/pgtable.h|4 ++--
 arch/powerpc/include/asm/book3s/64/pgtable.h |6 +-
 arch/powerpc/include/asm/nohash/64/pgtable.h |6 +-
 arch/powerpc/mm/book3s64/radix_pgtable.c |4 ++--
 arch/powerpc/mm/pgtable_64.c |2 +-
 arch/riscv/include/asm/pgtable-64.h  |4 ++--
 arch/sh/include/asm/pgtable-3level.h |4 ++--
 arch/sparc/include/asm/pgtable_32.h  |4 ++--
 arch/sparc/include/asm/pgtable_64.h  |6 +++---
 arch/um/include/asm/pgtable-3level.h |2 +-
 arch/x86/include/asm/pgtable.h   |4 ++--
 arch/x86/mm/pat/set_memory.c |4 ++--
 arch/x86/mm/pgtable.c|2 +-
 include/asm-generic/pgtable-nopmd.h  |2 +-
 include/asm-generic/pgtable-nopud.h  |2 +-
 include/linux/pgtable.h  |2 +-
 22 files changed, 45 insertions(+), 35 deletions(-)

--- 
a/arch/alpha/include/asm/pgtable.h~mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t
+++ a/arch/alpha/include/asm/pgtable.h
@@ -236,8 +236,10 @@ pmd_page_vaddr(pmd_t pmd)
 #define pmd_page(pmd)  (pfn_to_page(pmd_val(pmd) >> 32))
 #define pud_page(pud)  (pfn_to_page(pud_val(pud) >> 32))
 
-extern inline unsigned long pud_page_vaddr(pud_t pgd)
-{ return PAGE_OFFSET + ((pud_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)); }
+static inline pmd_t *pud_pgtable(pud_t pgd)
+{
+   return (pmd_t *)(PAGE_OFFSET + ((pud_val(pgd) & _PFN_MASK) >> 
(32-PAGE_SHIFT)));
+}
 
 extern inline int pte_none(pte_t pte)  { return !pte_val(pte); }
 extern inline int pte_present(pte_t pte)   { return pte_val(pte) & 
_PAGE_VALID; }
@@ -287,7 +289,7 @@ extern inline pte_t pte_mkyoung(pte_t pt
 /* Find an entry in the second-level page table.. */
 extern inline pmd_t * pmd_offset(pud_t * dir, unsigned long address)
 {
-   pmd_t *ret = (pmd_t *) pud_page_vaddr(*dir) + ((address >> PMD_SHIFT) & 
(PTRS_PER_PAGE - 1));
+   pmd_t *ret = pud_pgtable(*dir) + ((address >> PMD_SHIFT) & 
(PTRS_PER_PAGE - 1));
smp_rmb(); /* see above */
return ret;
 }
--- 
a/arch/arm64/include/asm/pgtable.h~mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t
+++ a/arch/arm64/include/asm/pgtable.h
@@ -633,9 +633,9 @@ static inline phys_addr_t pud_page_paddr
return __pud_to_phys(pud);
 }
 
-static inline unsigned long pud_page_vaddr(pud_t pud)
+static inline pmd_t *pud_pgtable(pud_t pud)
 {
-   return (unsigned long)__va(pud_page_paddr(pud));
+   return (pmd_t *)__va(pud_page_paddr(pud));
 }
 
 /* Find an entry in the second-level page table. */
--- 
a/arch/arm/include/asm/pgtable-3level.h~mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t
+++ a/arch/arm/include/asm/pgtable-3level.h
@@ -130,7 +130,7 @@
flush_pmd_entry(pudp);  \
} while (0)
 
-static inline pmd_t *pud_page_vaddr(pud_t pud)
+static inline pmd_t *pud_pgtable(pud_t pud)
 {
return __va(pud_val(pud) & PHYS_MASK & (s32)PAGE_MASK);
 }
--- 
a/arch/ia64/include/asm/pgtable.h~mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t
+++ a/arch/ia64/include/asm/pgtable.h
@@ -273,7 +273,7 @@ ia64_phys_addr_valid (unsigned long addr
 #define pud_bad(pud)   (!ia64_phys_addr_valid(pud_val(pud)))
 #define pud_present(pud)   (pud_val(pud) != 0UL)
 #define pud_clear(pudp)(pud_val(*(pudp)) = 0UL)
-#define pud_page_vaddr(pud)((unsigned long) __va(pud_val(pud) & 
_PFN_MASK))
+#define pud_pgtable(pud)   ((pmd_t *) __va(pud_val(pud) & 
_PFN_MASK))
 #define pud_page(pud)  virt_to_page((pud_val(pud) + 
PAGE_OFFSET))
 
 #if CONFIG_PGTABLE_LEVELS == 4
--- 

+ mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t.patch added to -mm tree

2021-06-15 Thread akpm


The patch titled
 Subject: mm: rename p4d_page_vaddr to p4d_pgtable and make it return pud_t 
*
has been added to the -mm tree.  Its filename is
 mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t.patch

This patch should soon appear at

https://ozlabs.org/~akpm/mmots/broken-out/mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t.patch
and later at

https://ozlabs.org/~akpm/mmotm/broken-out/mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t.patch

Before you just go and hit "reply", please:
   a) Consider who else should be cc'ed
   b) Prefer to cc a suitable mailing list as well
   c) Ideally: find the original patch on the mailing list and do a
  reply-to-all to that, adding suitable additional cc's

*** Remember to use Documentation/process/submit-checklist.rst when testing 
your code ***

The -mm tree is included into linux-next and is updated
there every 3-4 working days

--
From: "Aneesh Kumar K.V" 
Subject: mm: rename p4d_page_vaddr to p4d_pgtable and make it return pud_t *

No functional change in this patch.

Link: 
https://lkml.kernel.org/r/20210615110859.320299-2-aneesh.ku...@linux.ibm.com
Link: 
https://lore.kernel.org/linuxppc-dev/CAHk-=wi+j+iodze9ftjm3zi4j4oes+qqbkxme9qn4roxpex...@mail.gmail.com/
Signed-off-by: Aneesh Kumar K.V 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Signed-off-by: Andrew Morton 
---

 arch/arm64/include/asm/pgtable.h|4 ++--
 arch/ia64/include/asm/pgtable.h |2 +-
 arch/mips/include/asm/pgtable-64.h  |4 ++--
 arch/powerpc/include/asm/book3s/64/pgtable.h|5 -
 arch/powerpc/include/asm/nohash/64/pgtable-4k.h |6 +-
 arch/powerpc/mm/book3s64/radix_pgtable.c|2 +-
 arch/powerpc/mm/pgtable_64.c|2 +-
 arch/sparc/include/asm/pgtable_64.h |4 ++--
 arch/x86/include/asm/pgtable.h  |4 ++--
 arch/x86/mm/init_64.c   |4 ++--
 include/asm-generic/pgtable-nop4d.h |2 +-
 include/asm-generic/pgtable-nopud.h |2 +-
 include/linux/pgtable.h |2 +-
 13 files changed, 25 insertions(+), 18 deletions(-)

--- 
a/arch/arm64/include/asm/pgtable.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/arm64/include/asm/pgtable.h
@@ -694,9 +694,9 @@ static inline phys_addr_t p4d_page_paddr
return __p4d_to_phys(p4d);
 }
 
-static inline unsigned long p4d_page_vaddr(p4d_t p4d)
+static inline pud_t *p4d_pgtable(p4d_t p4d)
 {
-   return (unsigned long)__va(p4d_page_paddr(p4d));
+   return (pud_t *)__va(p4d_page_paddr(p4d));
 }
 
 /* Find an entry in the frst-level page table. */
--- 
a/arch/ia64/include/asm/pgtable.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/ia64/include/asm/pgtable.h
@@ -281,7 +281,7 @@ ia64_phys_addr_valid (unsigned long addr
 #define p4d_bad(p4d)   (!ia64_phys_addr_valid(p4d_val(p4d)))
 #define p4d_present(p4d)   (p4d_val(p4d) != 0UL)
 #define p4d_clear(p4dp)(p4d_val(*(p4dp)) = 0UL)
-#define p4d_page_vaddr(p4d)((unsigned long) __va(p4d_val(p4d) & 
_PFN_MASK))
+#define p4d_pgtable(p4d)   ((pud_t *) __va(p4d_val(p4d) & 
_PFN_MASK))
 #define p4d_page(p4d)  virt_to_page((p4d_val(p4d) + 
PAGE_OFFSET))
 #endif
 
--- 
a/arch/mips/include/asm/pgtable-64.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/mips/include/asm/pgtable-64.h
@@ -209,9 +209,9 @@ static inline void p4d_clear(p4d_t *p4dp
p4d_val(*p4dp) = (unsigned long)invalid_pud_table;
 }
 
-static inline unsigned long p4d_page_vaddr(p4d_t p4d)
+static inline pud_t *p4d_pgtable(p4d_t p4d)
 {
-   return p4d_val(p4d);
+   return (pud_t *)p4d_val(p4d);
 }
 
 #define p4d_phys(p4d)  virt_to_phys((void *)p4d_val(p4d))
--- 
a/arch/powerpc/include/asm/book3s/64/pgtable.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/powerpc/include/asm/book3s/64/pgtable.h
@@ -1048,7 +1048,10 @@ extern struct page *p4d_page(p4d_t p4d);
 /* Pointers in the page table tree are physical addresses */
 #define __pgtable_ptr_val(ptr) __pa(ptr)
 
-#define p4d_page_vaddr(p4d)__va(p4d_val(p4d) & ~P4D_MASKED_BITS)
+static inline pud_t *p4d_pgtable(p4d_t p4d)
+{
+   return (pud_t *)__va(p4d_val(p4d) & ~P4D_MASKED_BITS);
+}
 
 static inline pmd_t *pud_pgtable(pud_t pud)
 {
--- 
a/arch/powerpc/include/asm/nohash/64/pgtable-4k.h~mm-rename-p4d_page_vaddr-to-p4d_pgtable-and-make-it-return-pud_t
+++ a/arch/powerpc/include/asm/nohash/64/pgtable-4k.h
@@ -56,10 +56,14 @@
 #define p4d_none(p4d)  (!p4d_val(p4d))
 #define p4d_bad(p4d)   (p4d_val(p4d) == 0)
 #define p4d_present(p4d)   (p4d_val(p4d) != 0)
-#define

+ mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t.patch added to -mm tree

2021-06-15 Thread akpm


The patch titled
 Subject: mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t 
*
has been added to the -mm tree.  Its filename is
 mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t.patch

This patch should soon appear at

https://ozlabs.org/~akpm/mmots/broken-out/mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t.patch
and later at

https://ozlabs.org/~akpm/mmotm/broken-out/mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t.patch

Before you just go and hit "reply", please:
   a) Consider who else should be cc'ed
   b) Prefer to cc a suitable mailing list as well
   c) Ideally: find the original patch on the mailing list and do a
  reply-to-all to that, adding suitable additional cc's

*** Remember to use Documentation/process/submit-checklist.rst when testing 
your code ***

The -mm tree is included into linux-next and is updated
there every 3-4 working days

--
From: "Aneesh Kumar K.V" 
Subject: mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t *

No functional change in this patch.

Link: 
https://lkml.kernel.org/r/20210615110859.320299-1-aneesh.ku...@linux.ibm.com
Link: 
https://lore.kernel.org/linuxppc-dev/CAHk-=wi+j+iodze9ftjm3zi4j4oes+qqbkxme9qn4roxpex...@mail.gmail.com/
Signed-off-by: Aneesh Kumar K.V 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Cc: 
Signed-off-by: Andrew Morton 
---

 arch/alpha/include/asm/pgtable.h |8 +---
 arch/arm/include/asm/pgtable-3level.h|2 +-
 arch/arm64/include/asm/pgtable.h |4 ++--
 arch/ia64/include/asm/pgtable.h  |2 +-
 arch/m68k/include/asm/motorola_pgtable.h |2 +-
 arch/mips/include/asm/pgtable-64.h   |4 ++--
 arch/parisc/include/asm/pgtable.h|4 ++--
 arch/powerpc/include/asm/book3s/64/pgtable.h |6 +-
 arch/powerpc/include/asm/nohash/64/pgtable.h |6 +-
 arch/powerpc/mm/book3s64/radix_pgtable.c |4 ++--
 arch/powerpc/mm/pgtable_64.c |2 +-
 arch/riscv/include/asm/pgtable-64.h  |4 ++--
 arch/sh/include/asm/pgtable-3level.h |4 ++--
 arch/sparc/include/asm/pgtable_32.h  |4 ++--
 arch/sparc/include/asm/pgtable_64.h  |6 +++---
 arch/um/include/asm/pgtable-3level.h |2 +-
 arch/x86/include/asm/pgtable.h   |4 ++--
 arch/x86/mm/pat/set_memory.c |4 ++--
 arch/x86/mm/pgtable.c|2 +-
 include/asm-generic/pgtable-nopmd.h  |2 +-
 include/asm-generic/pgtable-nopud.h  |2 +-
 include/linux/pgtable.h  |2 +-
 22 files changed, 45 insertions(+), 35 deletions(-)

--- 
a/arch/alpha/include/asm/pgtable.h~mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t
+++ a/arch/alpha/include/asm/pgtable.h
@@ -236,8 +236,10 @@ pmd_page_vaddr(pmd_t pmd)
 #define pmd_page(pmd)  (pfn_to_page(pmd_val(pmd) >> 32))
 #define pud_page(pud)  (pfn_to_page(pud_val(pud) >> 32))
 
-extern inline unsigned long pud_page_vaddr(pud_t pgd)
-{ return PAGE_OFFSET + ((pud_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)); }
+static inline pmd_t *pud_pgtable(pud_t pgd)
+{
+   return (pmd_t *)(PAGE_OFFSET + ((pud_val(pgd) & _PFN_MASK) >> 
(32-PAGE_SHIFT)));
+}
 
 extern inline int pte_none(pte_t pte)  { return !pte_val(pte); }
 extern inline int pte_present(pte_t pte)   { return pte_val(pte) & 
_PAGE_VALID; }
@@ -287,7 +289,7 @@ extern inline pte_t pte_mkyoung(pte_t pt
 /* Find an entry in the second-level page table.. */
 extern inline pmd_t * pmd_offset(pud_t * dir, unsigned long address)
 {
-   pmd_t *ret = (pmd_t *) pud_page_vaddr(*dir) + ((address >> PMD_SHIFT) & 
(PTRS_PER_PAGE - 1));
+   pmd_t *ret = pud_pgtable(*dir) + ((address >> PMD_SHIFT) & 
(PTRS_PER_PAGE - 1));
smp_rmb(); /* see above */
return ret;
 }
--- 
a/arch/arm64/include/asm/pgtable.h~mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t
+++ a/arch/arm64/include/asm/pgtable.h
@@ -633,9 +633,9 @@ static inline phys_addr_t pud_page_paddr
return __pud_to_phys(pud);
 }
 
-static inline unsigned long pud_page_vaddr(pud_t pud)
+static inline pmd_t *pud_pgtable(pud_t pud)
 {
-   return (unsigned long)__va(pud_page_paddr(pud));
+   return (pmd_t *)__va(pud_page_paddr(pud));
 }
 
 /* Find an entry in the second-level page table. */
--- 
a/arch/arm/include/asm/pgtable-3level.h~mm-rename-pud_page_vaddr-to-pud_pgtable-and-make-it-return-pmd_t
+++ a/arch/arm/include/asm/pgtable-3level.h
@@ -130,7 +130,7 @@
flush_pmd_entry(pudp);  \
} while (0)
 
-static inline pmd_t *pud_page_vaddr(pud_t pud)
+static inline pmd_t *pud_pgtable(pud_t pud)
 {
return __va(pud_val(pud) & PHYS_MASK & (s32)PAGE_MASK);
 }
--- 
a/arch/i

[patch 1/2] mm: remove free_area_cache use in powerpc architecture

2013-02-21 Thread akpm
From: Michel Lespinasse wal...@google.com
Subject: mm: remove free_area_cache use in powerpc architecture

As all other architectures have been converted to use vm_unmapped_area(),
we are about to retire the free_area_cache.

This change simply removes the use of that cache in
slice_get_unmapped_area(), which will most certainly have a
performance cost. Next one will convert that function to use the
vm_unmapped_area() infrastructure and regain the performance.

Signed-off-by: Michel Lespinasse wal...@google.com
Acked-by: Rik van Riel r...@redhat.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Paul Mackerras pau...@samba.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/include/asm/page_64.h   |3 
 arch/powerpc/mm/hugetlbpage.c|2 
 arch/powerpc/mm/slice.c  |  108 +++--
 arch/powerpc/platforms/cell/spufs/file.c |2 
 4 files changed, 22 insertions(+), 93 deletions(-)

diff -puN 
arch/powerpc/include/asm/page_64.h~mm-remove-free_area_cache-use-in-powerpc-architecture
 arch/powerpc/include/asm/page_64.h
--- 
a/arch/powerpc/include/asm/page_64.h~mm-remove-free_area_cache-use-in-powerpc-architecture
+++ a/arch/powerpc/include/asm/page_64.h
@@ -99,8 +99,7 @@ extern unsigned long slice_get_unmapped_
 unsigned long len,
 unsigned long flags,
 unsigned int psize,
-int topdown,
-int use_cache);
+int topdown);
 
 extern unsigned int get_slice_psize(struct mm_struct *mm,
unsigned long addr);
diff -puN 
arch/powerpc/mm/hugetlbpage.c~mm-remove-free_area_cache-use-in-powerpc-architecture
 arch/powerpc/mm/hugetlbpage.c
--- 
a/arch/powerpc/mm/hugetlbpage.c~mm-remove-free_area_cache-use-in-powerpc-architecture
+++ a/arch/powerpc/mm/hugetlbpage.c
@@ -742,7 +742,7 @@ unsigned long hugetlb_get_unmapped_area(
struct hstate *hstate = hstate_file(file);
int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate));
 
-   return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1, 0);
+   return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1);
 }
 #endif
 
diff -puN 
arch/powerpc/mm/slice.c~mm-remove-free_area_cache-use-in-powerpc-architecture 
arch/powerpc/mm/slice.c
--- 
a/arch/powerpc/mm/slice.c~mm-remove-free_area_cache-use-in-powerpc-architecture
+++ a/arch/powerpc/mm/slice.c
@@ -240,23 +240,15 @@ static void slice_convert(struct mm_stru
 static unsigned long slice_find_area_bottomup(struct mm_struct *mm,
  unsigned long len,
  struct slice_mask available,
- int psize, int use_cache)
+ int psize)
 {
struct vm_area_struct *vma;
-   unsigned long start_addr, addr;
+   unsigned long addr;
struct slice_mask mask;
int pshift = max_t(int, mmu_psize_defs[psize].shift, PAGE_SHIFT);
 
-   if (use_cache) {
-   if (len = mm-cached_hole_size) {
-   start_addr = addr = TASK_UNMAPPED_BASE;
-   mm-cached_hole_size = 0;
-   } else
-   start_addr = addr = mm-free_area_cache;
-   } else
-   start_addr = addr = TASK_UNMAPPED_BASE;
+   addr = TASK_UNMAPPED_BASE;
 
-full_search:
for (;;) {
addr = _ALIGN_UP(addr, 1ul  pshift);
if ((TASK_SIZE - len)  addr)
@@ -272,63 +264,24 @@ full_search:
addr = _ALIGN_UP(addr + 1,  1ul  
SLICE_HIGH_SHIFT);
continue;
}
-   if (!vma || addr + len = vma-vm_start) {
-   /*
-* Remember the place where we stopped the search:
-*/
-   if (use_cache)
-   mm-free_area_cache = addr + len;
+   if (!vma || addr + len = vma-vm_start)
return addr;
-   }
-   if (use_cache  (addr + mm-cached_hole_size)  vma-vm_start)
-   mm-cached_hole_size = vma-vm_start - addr;
addr = vma-vm_end;
}
 
-   /* Make sure we didn't miss any holes */
-   if (use_cache  start_addr != TASK_UNMAPPED_BASE) {
-   start_addr = addr = TASK_UNMAPPED_BASE;
-   mm-cached_hole_size = 0;
-   goto full_search;
-   }
return -ENOMEM;
 }
 
 static unsigned long slice_find_area_topdown(struct mm_struct *mm,
 unsigned long len,
 struct slice_mask 

[patch 2/2] mm: use vm_unmapped_area() on powerpc architecture

2013-02-21 Thread akpm
From: Michel Lespinasse wal...@google.com
Subject: mm: use vm_unmapped_area() on powerpc architecture

Update the powerpc slice_get_unmapped_area function to make use of
vm_unmapped_area() instead of implementing a brute force search.

Signed-off-by: Michel Lespinasse wal...@google.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Paul Mackerras pau...@samba.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/mm/slice.c |  123 --
 1 file changed, 78 insertions(+), 45 deletions(-)

diff -puN 
arch/powerpc/mm/slice.c~mm-use-vm_unmapped_area-on-powerpc-architecture 
arch/powerpc/mm/slice.c
--- a/arch/powerpc/mm/slice.c~mm-use-vm_unmapped_area-on-powerpc-architecture
+++ a/arch/powerpc/mm/slice.c
@@ -237,36 +237,69 @@ static void slice_convert(struct mm_stru
 #endif
 }
 
+/*
+ * Compute which slice addr is part of;
+ * set *boundary_addr to the start or end boundary of that slice
+ * (depending on 'end' parameter);
+ * return boolean indicating if the slice is marked as available in the
+ * 'available' slice_mark.
+ */
+static bool slice_scan_available(unsigned long addr,
+struct slice_mask available,
+int end,
+unsigned long *boundary_addr)
+{
+   unsigned long slice;
+   if (addr  SLICE_LOW_TOP) {
+   slice = GET_LOW_SLICE_INDEX(addr);
+   *boundary_addr = (slice + end)  SLICE_LOW_SHIFT;
+   return !!(available.low_slices  (1u  slice));
+   } else {
+   slice = GET_HIGH_SLICE_INDEX(addr);
+   *boundary_addr = (slice + end) ?
+   ((slice + end)  SLICE_HIGH_SHIFT) : SLICE_LOW_TOP;
+   return !!(available.high_slices  (1u  slice));
+   }
+}
+
 static unsigned long slice_find_area_bottomup(struct mm_struct *mm,
  unsigned long len,
  struct slice_mask available,
  int psize)
 {
-   struct vm_area_struct *vma;
-   unsigned long addr;
-   struct slice_mask mask;
int pshift = max_t(int, mmu_psize_defs[psize].shift, PAGE_SHIFT);
+   unsigned long addr, found, next_end;
+   struct vm_unmapped_area_info info;
 
-   addr = TASK_UNMAPPED_BASE;
-
-   for (;;) {
-   addr = _ALIGN_UP(addr, 1ul  pshift);
-   if ((TASK_SIZE - len)  addr)
-   break;
-   vma = find_vma(mm, addr);
-   BUG_ON(vma  (addr = vma-vm_end));
+   info.flags = 0;
+   info.length = len;
+   info.align_mask = PAGE_MASK  ((1ul  pshift) - 1);
+   info.align_offset = 0;
 
-   mask = slice_range_to_mask(addr, len);
-   if (!slice_check_fit(mask, available)) {
-   if (addr  SLICE_LOW_TOP)
-   addr = _ALIGN_UP(addr + 1,  1ul  
SLICE_LOW_SHIFT);
-   else
-   addr = _ALIGN_UP(addr + 1,  1ul  
SLICE_HIGH_SHIFT);
+   addr = TASK_UNMAPPED_BASE;
+   while (addr  TASK_SIZE) {
+   info.low_limit = addr;
+   if (!slice_scan_available(addr, available, 1, addr))
continue;
+
+ next_slice:
+   /*
+* At this point [info.low_limit; addr) covers
+* available slices only and ends at a slice boundary.
+* Check if we need to reduce the range, or if we can
+* extend it to cover the next available slice.
+*/
+   if (addr = TASK_SIZE)
+   addr = TASK_SIZE;
+   else if (slice_scan_available(addr, available, 1, next_end)) {
+   addr = next_end;
+   goto next_slice;
}
-   if (!vma || addr + len = vma-vm_start)
-   return addr;
-   addr = vma-vm_end;
+   info.high_limit = addr;
+
+   found = vm_unmapped_area(info);
+   if (!(found  ~PAGE_MASK))
+   return found;
}
 
return -ENOMEM;
@@ -277,39 +310,39 @@ static unsigned long slice_find_area_top
 struct slice_mask available,
 int psize)
 {
-   struct vm_area_struct *vma;
-   unsigned long addr;
-   struct slice_mask mask;
int pshift = max_t(int, mmu_psize_defs[psize].shift, PAGE_SHIFT);
+   unsigned long addr, found, prev;
+   struct vm_unmapped_area_info info;
 
-   addr = mm-mmap_base;
-   while (addr  len) {
-   /* Go down by chunk size */
-   addr = _ALIGN_DOWN(addr - len, 1ul  pshift);
+   info.flags = VM_UNMAPPED_AREA_TOPDOWN;
+   info.length = len;
+   info.align_mask = PAGE_MASK  

[patch 1/1] drivers/edac/mpc85xx_edac.c: fix memory controller compatible for edac

2011-11-15 Thread akpm
From: Shaohui Xie shaohui@freescale.com
Subject: drivers/edac/mpc85xx_edac.c: fix memory controller compatible for edac

compatible in dts has been changed, so the driver needs to be updated
accordingly.

Signed-off-by: Shaohui Xie shaohui@freescale.com
Cc: Kumar Gala ga...@kernel.crashing.org
Cc: Grant Likely grant.lik...@secretlab.ca
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/edac/mpc85xx_edac.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff -puN 
drivers/edac/mpc85xx_edac.c~drivers-edac-mpc85xx_edacc-fix-memory-controller-compatible-for-edac
 drivers/edac/mpc85xx_edac.c
--- 
a/drivers/edac/mpc85xx_edac.c~drivers-edac-mpc85xx_edacc-fix-memory-controller-compatible-for-edac
+++ a/drivers/edac/mpc85xx_edac.c
@@ -1128,7 +1128,7 @@ static struct of_device_id mpc85xx_mc_er
{ .compatible = fsl,p1020-memory-controller, },
{ .compatible = fsl,p1021-memory-controller, },
{ .compatible = fsl,p2020-memory-controller, },
-   { .compatible = fsl,p4080-memory-controller, },
+   { .compatible = fsl,qoriq-memory-controller, },
{},
 };
 MODULE_DEVICE_TABLE(of, mpc85xx_mc_err_of_match);
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 1/2] macintosh: wrong test in fan_{read,write}_reg()

2011-01-18 Thread akpm
From: roel kluin roel.kl...@gmail.com

Fix error test in fan_{read,write}_reg()

Signed-off-by: Roel Kluin roel.kl...@gmail.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/macintosh/therm_pm72.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff -puN 
drivers/macintosh/therm_pm72.c~macintosh-wrong-test-in-fan_readwrite_reg 
drivers/macintosh/therm_pm72.c
--- a/drivers/macintosh/therm_pm72.c~macintosh-wrong-test-in-fan_readwrite_reg
+++ a/drivers/macintosh/therm_pm72.c
@@ -443,7 +443,7 @@ static int fan_read_reg(int reg, unsigne
tries = 0;
for (;;) {
nr = i2c_master_recv(fcu, buf, nb);
-   if (nr  0 || (nr  0  nr != ENODEV) || tries = 100)
+   if (nr  0 || (nr  0  nr != -ENODEV) || tries = 100)
break;
msleep(10);
++tries;
@@ -464,7 +464,7 @@ static int fan_write_reg(int reg, const 
tries = 0;
for (;;) {
nw = i2c_master_send(fcu, buf, nb);
-   if (nw  0 || (nw  0  nw != EIO) || tries = 100)
+   if (nw  0 || (nw  0  nw != -EIO) || tries = 100)
break;
msleep(10);
++tries;
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 2/2] spufs: use simple_write_to_buffer()

2011-01-18 Thread akpm
From: Akinobu Mita akinobu.m...@gmail.com

Simplify several write fileoperations for spufs by using
simple_write_to_buffer().

Signed-off-by: Akinobu Mita akinobu.m...@gmail.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Paul Mackerras pau...@samba.org
Cc: Jeremy Kerr j...@ozlabs.org
Acked-by: Arnd Bergmann a...@arndb.de
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/platforms/cell/spufs/file.c |   27 +
 1 file changed, 7 insertions(+), 20 deletions(-)

diff -puN 
arch/powerpc/platforms/cell/spufs/file.c~spufs-use-simple_write_to_buffer 
arch/powerpc/platforms/cell/spufs/file.c
--- a/arch/powerpc/platforms/cell/spufs/file.c~spufs-use-simple_write_to_buffer
+++ a/arch/powerpc/platforms/cell/spufs/file.c
@@ -219,24 +219,17 @@ spufs_mem_write(struct file *file, const
loff_t pos = *ppos;
int ret;
 
-   if (pos  0)
-   return -EINVAL;
if (pos  LS_SIZE)
return -EFBIG;
-   if (size  LS_SIZE - pos)
-   size = LS_SIZE - pos;
 
ret = spu_acquire(ctx);
if (ret)
return ret;
 
local_store = ctx-ops-get_ls(ctx);
-   ret = copy_from_user(local_store + pos, buffer, size);
+   size = simple_write_to_buffer(local_store, LS_SIZE, ppos, buffer, size);
spu_release(ctx);
 
-   if (ret)
-   return -EFAULT;
-   *ppos = pos + size;
return size;
 }
 
@@ -574,18 +567,15 @@ spufs_regs_write(struct file *file, cons
if (*pos = sizeof(lscsa-gprs))
return -EFBIG;
 
-   size = min_t(ssize_t, sizeof(lscsa-gprs) - *pos, size);
-   *pos += size;
-
ret = spu_acquire_saved(ctx);
if (ret)
return ret;
 
-   ret = copy_from_user((char *)lscsa-gprs + *pos - size,
-buffer, size) ? -EFAULT : size;
+   size = simple_write_to_buffer(lscsa-gprs, sizeof(lscsa-gprs), pos,
+   buffer, size);
 
spu_release_saved(ctx);
-   return ret;
+   return size;
 }
 
 static const struct file_operations spufs_regs_fops = {
@@ -630,18 +620,15 @@ spufs_fpcr_write(struct file *file, cons
if (*pos = sizeof(lscsa-fpcr))
return -EFBIG;
 
-   size = min_t(ssize_t, sizeof(lscsa-fpcr) - *pos, size);
-
ret = spu_acquire_saved(ctx);
if (ret)
return ret;
 
-   *pos += size;
-   ret = copy_from_user((char *)lscsa-fpcr + *pos - size,
-buffer, size) ? -EFAULT : size;
+   size = simple_write_to_buffer(lscsa-fpcr, sizeof(lscsa-fpcr), pos,
+   buffer, size);
 
spu_release_saved(ctx);
-   return ret;
+   return size;
 }
 
 static const struct file_operations spufs_fpcr_fops = {
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 1/1] powerpc: enable ARCH_DMA_ADDR_T_64BIT with ARCH_PHYS_ADDR_T_64BIT

2010-10-20 Thread akpm
From: FUJITA Tomonori fujita.tomon...@lab.ntt.co.jp

Signed-off-by: FUJITA Tomonori fujita.tomon...@lab.ntt.co.jp
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/Kconfig |3 +++
 1 file changed, 3 insertions(+)

diff -puN 
arch/powerpc/Kconfig~powerpc-enable-arch_dma_addr_t_64bit-with-arch_phys_addr_t_64bit
 arch/powerpc/Kconfig
--- 
a/arch/powerpc/Kconfig~powerpc-enable-arch_dma_addr_t_64bit-with-arch_phys_addr_t_64bit
+++ a/arch/powerpc/Kconfig
@@ -16,6 +16,9 @@ config WORD_SIZE
 config ARCH_PHYS_ADDR_T_64BIT
def_bool PPC64 || PHYS_64BIT
 
+config ARCH_DMA_ADDR_T_64BIT
+   def_bool ARCH_PHYS_ADDR_T_64BIT
+
 config MMU
bool
default y
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 1/1] powerpc: enable ARCH_DMA_ADDR_T_64BIT with ARCH_PHYS_ADDR_T_64BIT

2010-10-01 Thread akpm
From: FUJITA Tomonori fujita.tomon...@lab.ntt.co.jp

Signed-off-by: FUJITA Tomonori fujita.tomon...@lab.ntt.co.jp
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/Kconfig |3 +++
 1 file changed, 3 insertions(+)

diff -puN 
arch/powerpc/Kconfig~powerpc-enable-arch_dma_addr_t_64bit-with-arch_phys_addr_t_64bit
 arch/powerpc/Kconfig
--- 
a/arch/powerpc/Kconfig~powerpc-enable-arch_dma_addr_t_64bit-with-arch_phys_addr_t_64bit
+++ a/arch/powerpc/Kconfig
@@ -16,6 +16,9 @@ config WORD_SIZE
 config ARCH_PHYS_ADDR_T_64BIT
def_bool PPC64 || PHYS_64BIT
 
+config ARCH_DMA_ADDR_T_64BIT
+   def_bool ARCH_PHYS_ADDR_T_64BIT
+
 config MMU
bool
default y
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 1/1] powerpc: add rcu_read_lock() to gup_fast() implementation

2010-04-27 Thread akpm
From: Peter Zijlstra a.p.zijls...@chello.nl

The powerpc page table freeing relies on the fact that IRQs hold off an
RCU grace period, this is currently true for all existing RCU
implementations but is not an assumption Paul wants to support.

Therefore, also take the RCU read lock along with disabling IRQs to ensure
the RCU grace period does at least cover these lookups.

Signed-off-by: Peter Zijlstra a.p.zijls...@chello.nl
Requested-by: Paul E. McKenney paul...@linux.vnet.ibm.com
Cc: Nick Piggin npig...@suse.de
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Reviewed-by: Rik van Riel r...@redhat.com
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/mm/gup.c |3 +++
 1 file changed, 3 insertions(+)

diff -puN 
arch/powerpc/mm/gup.c~powerpc-add-rcu_read_lock-to-gup_fast-implementation 
arch/powerpc/mm/gup.c
--- a/arch/powerpc/mm/gup.c~powerpc-add-rcu_read_lock-to-gup_fast-implementation
+++ a/arch/powerpc/mm/gup.c
@@ -142,6 +142,7 @@ int get_user_pages_fast(unsigned long st
 * So long as we atomically load page table pointers versus teardown,
 * we can follow the address down to the the page and take a ref on it.
 */
+   rcu_read_lock();
local_irq_disable();
 
pgdp = pgd_offset(mm, addr);
@@ -162,6 +163,7 @@ int get_user_pages_fast(unsigned long st
} while (pgdp++, addr = next, addr != end);
 
local_irq_enable();
+   rcu_read_unlock();
 
VM_BUG_ON(nr != (end - start)  PAGE_SHIFT);
return nr;
@@ -171,6 +173,7 @@ int get_user_pages_fast(unsigned long st
 
 slow:
local_irq_enable();
+   rcu_read_unlock();
 slow_irqon:
pr_devel(  slow path ! nr = %d\n, nr);
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 1/2] powerpc: Sky CPU: redundant or incorrect tests on unsigned

2010-02-02 Thread akpm
From: Roel Kluin roel.kl...@gmail.com

count is unsigned and cannot be less than 0.

Signed-off-by: Roel Kluin roel.kl...@gmail.com
Acked-by: Cyrill Gorcunov gorcu...@gmail.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Kumar Gala ga...@gate.crashing.org
Cc: Brian Waite wa...@skycomputers.com
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/misc/hdpuftrs/hdpu_cpustate.c |5 -
 1 file changed, 5 deletions(-)

diff -puN 
drivers/misc/hdpuftrs/hdpu_cpustate.c~powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned
 drivers/misc/hdpuftrs/hdpu_cpustate.c
--- 
a/drivers/misc/hdpuftrs/hdpu_cpustate.c~powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned
+++ a/drivers/misc/hdpuftrs/hdpu_cpustate.c
@@ -121,8 +121,6 @@ static ssize_t cpustate_read(struct file
 {
unsigned char data;
 
-   if (count  0)
-   return -EFAULT;
if (count == 0)
return 0;
 
@@ -137,9 +135,6 @@ static ssize_t cpustate_write(struct fil
 {
unsigned char data;
 
-   if (count  0)
-   return -EFAULT;
-
if (count == 0)
return 0;
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 2/2] kbuild: move -fno-dwarf2-cfi-asm to powerpc only

2010-02-02 Thread akpm
From: Andi Kleen a...@firstfloor.org

Better dwarf2 unwind information is a good thing, it allows better
debugging with kgdb and crash and helps systemtap.

Commit 003086497f07f7f1e67c0c295e261740f822b377 (Build with
-fno-dwarf2-cfi-asm) disabled some CFI information globally to work
around a module loader bug on powerpc.

But this disables the better unwind tables for all architectures, not just
powerpc.  Move the workaround to powerpc and also add a suitable comment
that's it really a workaround.

This improves dwarf2 unwind tables on x86 at least.

Signed-off-by: Andi Kleen a...@linux.intel.com
Cc: Kyle McMartin k...@mcmartin.ca
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Michal Marek mma...@suse.cz
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 Makefile  |3 ---
 arch/powerpc/Makefile |5 +
 2 files changed, 5 insertions(+), 3 deletions(-)

diff -puN Makefile~kbuild-move-fno-dwarf2-cfi-asm-to-powerpc-only Makefile
--- a/Makefile~kbuild-move-fno-dwarf2-cfi-asm-to-powerpc-only
+++ a/Makefile
@@ -579,9 +579,6 @@ KBUILD_CFLAGS += $(call cc-option,-Wno-p
 # disable invalid can't wrap optimizations for signed / pointers
 KBUILD_CFLAGS  += $(call cc-option,-fno-strict-overflow)
 
-# revert to pre-gcc-4.4 behaviour of .eh_frame
-KBUILD_CFLAGS  += $(call cc-option,-fno-dwarf2-cfi-asm)
-
 # conserve stack if available
 KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)
 
diff -puN arch/powerpc/Makefile~kbuild-move-fno-dwarf2-cfi-asm-to-powerpc-only 
arch/powerpc/Makefile
--- a/arch/powerpc/Makefile~kbuild-move-fno-dwarf2-cfi-asm-to-powerpc-only
+++ a/arch/powerpc/Makefile
@@ -112,6 +112,11 @@ KBUILD_CFLAGS += $(call cc-option,-mspe=
 # kernel considerably.
 KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time)
 
+# FIXME: the module load should be taught about the additional relocs
+# generated by this.
+# revert to pre-gcc-4.4 behaviour of .eh_frame
+KBUILD_CFLAGS  += $(call cc-option,-fno-dwarf2-cfi-asm)
+
 # Never use string load/store instructions as they are
 # often slow when they are implemented at all
 KBUILD_CFLAGS  += -mno-string
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 1/5] powerpc: Sky CPU: redundant or incorrect tests on unsigned

2009-12-17 Thread akpm
From: Roel Kluin roel.kl...@gmail.com

count is unsigned and cannot be less than 0.

Signed-off-by: Roel Kluin roel.kl...@gmail.com
Acked-by: Cyrill Gorcunov gorcu...@gmail.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Kumar Gala ga...@gate.crashing.org
Cc: Brian Waite wa...@skycomputers.com
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/misc/hdpuftrs/hdpu_cpustate.c |5 -
 1 file changed, 5 deletions(-)

diff -puN 
drivers/misc/hdpuftrs/hdpu_cpustate.c~powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned
 drivers/misc/hdpuftrs/hdpu_cpustate.c
--- 
a/drivers/misc/hdpuftrs/hdpu_cpustate.c~powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned
+++ a/drivers/misc/hdpuftrs/hdpu_cpustate.c
@@ -121,8 +121,6 @@ static ssize_t cpustate_read(struct file
 {
unsigned char data;
 
-   if (count  0)
-   return -EFAULT;
if (count == 0)
return 0;
 
@@ -137,9 +135,6 @@ static ssize_t cpustate_write(struct fil
 {
unsigned char data;
 
-   if (count  0)
-   return -EFAULT;
-
if (count == 0)
return 0;
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 4/5] iseries: convert to proc_fops

2009-12-17 Thread akpm
From: Alexey Dobriyan adobri...@gmail.com

Signed-off-by: Alexey Dobriyan adobri...@gmail.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Michael Ellerman mich...@ellerman.id.au
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/platforms/iseries/mf.c |  147 ++
 1 file changed, 83 insertions(+), 64 deletions(-)

diff -puN arch/powerpc/platforms/iseries/mf.c~iseries-convert-to-proc_fops 
arch/powerpc/platforms/iseries/mf.c
--- a/arch/powerpc/platforms/iseries/mf.c~iseries-convert-to-proc_fops
+++ a/arch/powerpc/platforms/iseries/mf.c
@@ -855,59 +855,58 @@ static int mf_get_boot_rtc(struct rtc_ti
 }
 
 #ifdef CONFIG_PROC_FS
-
-static int proc_mf_dump_cmdline(char *page, char **start, off_t off,
-   int count, int *eof, void *data)
+static int mf_cmdline_proc_show(struct seq_file *m, void *v)
 {
-   int len;
-   char *p;
+   char *page, *p;
struct vsp_cmd_data vsp_cmd;
int rc;
dma_addr_t dma_addr;
 
/* The HV appears to return no more than 256 bytes of command line */
-   if (off = 256)
-   return 0;
-   if ((off + count)  256)
-   count = 256 - off;
+   page = kmalloc(256, GFP_KERNEL);
+   if (!page)
+   return -ENOMEM;
 
-   dma_addr = iseries_hv_map(page, off + count, DMA_FROM_DEVICE);
-   if (dma_addr == DMA_ERROR_CODE)
+   dma_addr = iseries_hv_map(page, 256, DMA_FROM_DEVICE);
+   if (dma_addr == DMA_ERROR_CODE) {
+   kfree(page);
return -ENOMEM;
-   memset(page, 0, off + count);
+   }
+   memset(page, 0, 256);
memset(vsp_cmd, 0, sizeof(vsp_cmd));
vsp_cmd.cmd = 33;
vsp_cmd.sub_data.kern.token = dma_addr;
vsp_cmd.sub_data.kern.address_type = HvLpDma_AddressType_TceIndex;
-   vsp_cmd.sub_data.kern.side = (u64)data;
-   vsp_cmd.sub_data.kern.length = off + count;
+   vsp_cmd.sub_data.kern.side = (u64)m-private;
+   vsp_cmd.sub_data.kern.length = 256;
mb();
rc = signal_vsp_instruction(vsp_cmd);
-   iseries_hv_unmap(dma_addr, off + count, DMA_FROM_DEVICE);
-   if (rc)
+   iseries_hv_unmap(dma_addr, 256, DMA_FROM_DEVICE);
+   if (rc) {
+   kfree(page);
return rc;
-   if (vsp_cmd.result_code != 0)
+   }
+   if (vsp_cmd.result_code != 0) {
+   kfree(page);
return -ENOMEM;
+   }
p = page;
-   len = 0;
-   while (len  (off + count)) {
-   if ((*p == '\0') || (*p == '\n')) {
-   if (*p == '\0')
-   *p = '\n';
-   p++;
-   len++;
-   *eof = 1;
+   while (p - page  256) {
+   if (*p == '\0' || *p == '\n') {
+   *p = '\n';
break;
}
p++;
-   len++;
-   }
 
-   if (len  off) {
-   *eof = 1;
-   len = 0;
}
-   return len;
+   seq_write(m, page, p - page);
+   kfree(page);
+   return 0;
+}
+
+static int mf_cmdline_proc_open(struct inode *inode, struct file *file)
+{
+   return single_open(file, mf_cmdline_proc_show, PDE(inode)-data);
 }
 
 #if 0
@@ -962,10 +961,8 @@ static int proc_mf_dump_vmlinux(char *pa
 }
 #endif
 
-static int proc_mf_dump_side(char *page, char **start, off_t off,
-   int count, int *eof, void *data)
+static int mf_side_proc_show(struct seq_file *m, void *v)
 {
-   int len;
char mf_current_side = ' ';
struct vsp_cmd_data vsp_cmd;
 
@@ -989,21 +986,17 @@ static int proc_mf_dump_side(char *page,
}
}
 
-   len = sprintf(page, %c\n, mf_current_side);
+   seq_printf(m, %c\n, mf_current_side);
+   return 0;
+}
 
-   if (len = (off + count))
-   *eof = 1;
-   *start = page + off;
-   len -= off;
-   if (len  count)
-   len = count;
-   if (len  0)
-   len = 0;
-   return len;
+static int mf_side_proc_open(struct inode *inode, struct file *file)
+{
+   return single_open(file, mf_side_proc_show, NULL);
 }
 
-static int proc_mf_change_side(struct file *file, const char __user *buffer,
-   unsigned long count, void *data)
+static ssize_t mf_side_proc_write(struct file *file, const char __user *buffer,
+ size_t count, loff_t *pos)
 {
char side;
u64 newSide;
@@ -1041,6 +1034,15 @@ static int proc_mf_change_side(struct fi
return count;
 }
 
+static const struct file_operations mf_side_proc_fops = {
+   .owner  = THIS_MODULE,
+   .open   = mf_side_proc_open,
+   .read   = seq_read,
+   .llseek = seq_lseek,
+   .release= single_release,
+   .write  = mf_side_proc_write,
+};
+
 #if 0
 

[patch 5/5] powerpc/85xx: wrong variable returned on error

2009-12-17 Thread akpm
From: Roel Kluin roel.kl...@gmail.com

The wrong variable was returned in the case of an error.

Signed-off-by: Roel Kluin roel.kl...@gmail.com
Cc: Kumar Gala ga...@kernel.crashing.org
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/platforms/85xx/mpc85xx_mds.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff -puN 
arch/powerpc/platforms/85xx/mpc85xx_mds.c~powerpc-85xx-wrong-variable-returned-on-error
 arch/powerpc/platforms/85xx/mpc85xx_mds.c
--- 
a/arch/powerpc/platforms/85xx/mpc85xx_mds.c~powerpc-85xx-wrong-variable-returned-on-error
+++ a/arch/powerpc/platforms/85xx/mpc85xx_mds.c
@@ -86,7 +86,7 @@ static int mpc8568_fixup_125_clock(struc
scr = phy_read(phydev, MV88E_SCR);
 
if (scr  0)
-   return err;
+   return scr;
 
err = phy_write(phydev, MV88E_SCR, scr | 0x0008);
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 3/5] powerpc: make the CMM memory hotplug aware

2009-12-17 Thread akpm
From: Robert Jennings r...@linux.vnet.ibm.com

The Collaborative Memory Manager (CMM) module allocates individual pages
over time that are not migratable.  On a long running system this can
severely impact the ability to find enough pages to support a hotplug
memory remove operation.

This patch adds a memory isolation notifier and a memory hotplug notifier.
The memory isolation notifier will return the number of pages found in
the range specified.  This is used to determine if all of the used pages
in a pageblock are owned by the balloon (or other entities in the notifier
chain).  The hotplug notifier will free pages in the range which is to be
removed.  The priority of this hotplug notifier is low so that it will be
called near last, this helps avoids removing loaned pages in operations
that fail due to other handlers.

CMM activity will be halted when hotplug remove operations are active and
resume activity after a delay period to allow the hypervisor time to
adjust.

Signed-off-by: Robert Jennings r...@linux.vnet.ibm.com
Cc: Mel Gorman m...@csn.ul.ie
Cc: Ingo Molnar mi...@elte.hu
Cc: Brian King brk...@linux.vnet.ibm.com
Cc: Paul Mackerras pau...@samba.org
Cc: Martin Schwidefsky schwidef...@de.ibm.com
Cc: Gerald Schaefer gera...@linux.vnet.ibm.com
Cc: KAMEZAWA Hiroyuki kamezawa.hir...@jp.fujitsu.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/platforms/pseries/cmm.c |  254 -
 1 file changed, 248 insertions(+), 6 deletions(-)

diff -puN 
arch/powerpc/platforms/pseries/cmm.c~powerpc-make-the-cmm-memory-hotplug-aware 
arch/powerpc/platforms/pseries/cmm.c
--- 
a/arch/powerpc/platforms/pseries/cmm.c~powerpc-make-the-cmm-memory-hotplug-aware
+++ a/arch/powerpc/platforms/pseries/cmm.c
@@ -38,19 +38,28 @@
 #include asm/mmu.h
 #include asm/pgalloc.h
 #include asm/uaccess.h
+#include linux/memory.h
 
 #include plpar_wrappers.h
 
 #define CMM_DRIVER_VERSION 1.0.0
 #define CMM_DEFAULT_DELAY  1
+#define CMM_HOTPLUG_DELAY  5
 #define CMM_DEBUG  0
 #define CMM_DISABLE0
 #define CMM_OOM_KB 1024
 #define CMM_MIN_MEM_MB 256
 #define KB2PAGES(_p)   ((_p)(PAGE_SHIFT-10))
 #define PAGES2KB(_p)   ((_p)(PAGE_SHIFT-10))
+/*
+ * The priority level tries to ensure that this notifier is called as
+ * late as possible to reduce thrashing in the shared memory pool.
+ */
+#define CMM_MEM_HOTPLUG_PRI1
+#define CMM_MEM_ISOLATE_PRI15
 
 static unsigned int delay = CMM_DEFAULT_DELAY;
+static unsigned int hotplug_delay = CMM_HOTPLUG_DELAY;
 static unsigned int oom_kb = CMM_OOM_KB;
 static unsigned int cmm_debug = CMM_DEBUG;
 static unsigned int cmm_disabled = CMM_DISABLE;
@@ -65,6 +74,10 @@ MODULE_VERSION(CMM_DRIVER_VERSION);
 module_param_named(delay, delay, uint, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(delay, Delay (in seconds) between polls to query hypervisor 
paging requests. 
 [Default= __stringify(CMM_DEFAULT_DELAY) ]);
+module_param_named(hotplug_delay, hotplug_delay, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(delay, Delay (in seconds) after memory hotplug remove 
+before loaning resumes. 
+[Default= __stringify(CMM_HOTPLUG_DELAY) ]);
 module_param_named(oom_kb, oom_kb, uint, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(oom_kb, Amount of memory in kb to free on OOM. 
 [Default= __stringify(CMM_OOM_KB) ]);
@@ -92,6 +105,9 @@ static unsigned long oom_freed_pages;
 static struct cmm_page_array *cmm_page_list;
 static DEFINE_SPINLOCK(cmm_lock);
 
+static DEFINE_MUTEX(hotplug_mutex);
+static int hotplug_occurred; /* protected by the hotplug mutex */
+
 static struct task_struct *cmm_thread_ptr;
 
 /**
@@ -110,6 +126,17 @@ static long cmm_alloc_pages(long nr)
cmm_dbg(Begin request for %ld pages\n, nr);
 
while (nr) {
+   /* Exit if a hotplug operation is in progress or occurred */
+   if (mutex_trylock(hotplug_mutex)) {
+   if (hotplug_occurred) {
+   mutex_unlock(hotplug_mutex);
+   break;
+   }
+   mutex_unlock(hotplug_mutex);
+   } else {
+   break;
+   }
+
addr = __get_free_page(GFP_NOIO | __GFP_NOWARN |
   __GFP_NORETRY | __GFP_NOMEMALLOC);
if (!addr)
@@ -119,8 +146,9 @@ static long cmm_alloc_pages(long nr)
if (!pa || pa-index = CMM_NR_PAGES) {
/* Need a new page for the page list. */
spin_unlock(cmm_lock);
-   npa = (struct cmm_page_array *)__get_free_page(GFP_NOIO 
| __GFP_NOWARN |
-  
__GFP_NORETRY | __GFP_NOMEMALLOC);
+   npa = (struct 

[patch 2/5] mm: add notifier in pageblock isolation for balloon drivers

2009-12-17 Thread akpm
From: Robert Jennings r...@linux.vnet.ibm.com

Memory balloon drivers can allocate a large amount of memory which is not
movable but could be freed to accomodate memory hotplug remove.

Prior to calling the memory hotplug notifier chain the memory in the
pageblock is isolated.  Currently, if the migrate type is not
MIGRATE_MOVABLE the isolation will not proceed, causing the memory removal
for that page range to fail.

Rather than failing pageblock isolation if the migrateteype is not
MIGRATE_MOVABLE, this patch checks if all of the pages in the pageblock,
and not on the LRU, are owned by a registered balloon driver (or other
entity) using a notifier chain.  If all of the non-movable pages are owned
by a balloon, they can be freed later through the memory notifier chain
and the range can still be isolated in set_migratetype_isolate().

Signed-off-by: Robert Jennings r...@linux.vnet.ibm.com
Cc: Mel Gorman m...@csn.ul.ie
Cc: Ingo Molnar mi...@elte.hu
Cc: Brian King brk...@linux.vnet.ibm.com
Cc: Paul Mackerras pau...@samba.org
Cc: Martin Schwidefsky schwidef...@de.ibm.com
Cc: Gerald Schaefer gera...@linux.vnet.ibm.com
Cc: KAMEZAWA Hiroyuki kamezawa.hir...@jp.fujitsu.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/base/memory.c  |   19 +
 include/linux/memory.h |   27 ++
 mm/page_alloc.c|   57 ++-
 3 files changed, 96 insertions(+), 7 deletions(-)

diff -puN 
drivers/base/memory.c~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
 drivers/base/memory.c
--- 
a/drivers/base/memory.c~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
+++ a/drivers/base/memory.c
@@ -63,6 +63,20 @@ void unregister_memory_notifier(struct n
 }
 EXPORT_SYMBOL(unregister_memory_notifier);
 
+static ATOMIC_NOTIFIER_HEAD(memory_isolate_chain);
+
+int register_memory_isolate_notifier(struct notifier_block *nb)
+{
+   return atomic_notifier_chain_register(memory_isolate_chain, nb);
+}
+EXPORT_SYMBOL(register_memory_isolate_notifier);
+
+void unregister_memory_isolate_notifier(struct notifier_block *nb)
+{
+   atomic_notifier_chain_unregister(memory_isolate_chain, nb);
+}
+EXPORT_SYMBOL(unregister_memory_isolate_notifier);
+
 /*
  * register_memory - Setup a sysfs device for a memory block
  */
@@ -157,6 +171,11 @@ int memory_notify(unsigned long val, voi
return blocking_notifier_call_chain(memory_chain, val, v);
 }
 
+int memory_isolate_notify(unsigned long val, void *v)
+{
+   return atomic_notifier_call_chain(memory_isolate_chain, val, v);
+}
+
 /*
  * MEMORY_HOTPLUG depends on SPARSEMEM in mm/Kconfig, so it is
  * OK to have direct references to sparsemem variables in here.
diff -puN 
include/linux/memory.h~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
 include/linux/memory.h
--- 
a/include/linux/memory.h~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
+++ a/include/linux/memory.h
@@ -50,6 +50,19 @@ struct memory_notify {
int status_change_nid;
 };
 
+/*
+ * During pageblock isolation, count the number of pages within the
+ * range [start_pfn, start_pfn + nr_pages) which are owned by code
+ * in the notifier chain.
+ */
+#define MEM_ISOLATE_COUNT  (10)
+
+struct memory_isolate_notify {
+   unsigned long start_pfn;/* Start of range to check */
+   unsigned int nr_pages;  /* # pages in range to check */
+   unsigned int pages_found;   /* # pages owned found by callbacks */
+};
+
 struct notifier_block;
 struct mem_section;
 
@@ -76,14 +89,28 @@ static inline int memory_notify(unsigned
 {
return 0;
 }
+static inline int register_memory_isolate_notifier(struct notifier_block *nb)
+{
+   return 0;
+}
+static inline void unregister_memory_isolate_notifier(struct notifier_block 
*nb)
+{
+}
+static inline int memory_isolate_notify(unsigned long val, void *v)
+{
+   return 0;
+}
 #else
 extern int register_memory_notifier(struct notifier_block *nb);
 extern void unregister_memory_notifier(struct notifier_block *nb);
+extern int register_memory_isolate_notifier(struct notifier_block *nb);
+extern void unregister_memory_isolate_notifier(struct notifier_block *nb);
 extern int register_new_memory(int, struct mem_section *);
 extern int unregister_memory_section(struct mem_section *);
 extern int memory_dev_init(void);
 extern int remove_memory_block(unsigned long, struct mem_section *, int);
 extern int memory_notify(unsigned long val, void *v);
+extern int memory_isolate_notify(unsigned long val, void *v);
 extern struct memory_block *find_memory_block(struct mem_section *);
 #define CONFIG_MEM_BLOCK_SIZE  (PAGES_PER_SECTIONPAGE_SHIFT)
 enum mem_add_context { BOOT, HOTPLUG };
diff -puN 
mm/page_alloc.c~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers 
mm/page_alloc.c
--- a/mm/page_alloc.c~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
+++ a/mm/page_alloc.c
@@ 

[patch 3/3] powerpc: make the CMM memory hotplug aware

2009-11-17 Thread akpm
From: Robert Jennings r...@linux.vnet.ibm.com

The Collaborative Memory Manager (CMM) module allocates individual pages
over time that are not migratable.  On a long running system this can
severely impact the ability to find enough pages to support a hotplug
memory remove operation.

This patch adds a memory isolation notifier and a memory hotplug notifier.
The memory isolation notifier will return the number of pages found in
the range specified.  This is used to determine if all of the used pages
in a pageblock are owned by the balloon (or other entities in the notifier
chain).  The hotplug notifier will free pages in the range which is to be
removed.  The priority of this hotplug notifier is low so that it will be
called near last, this helps avoids removing loaned pages in operations
that fail due to other handlers.

CMM activity will be halted when hotplug remove operations are active and
resume activity after a delay period to allow the hypervisor time to
adjust.

Signed-off-by: Robert Jennings r...@linux.vnet.ibm.com
Cc: Mel Gorman m...@csn.ul.ie
Cc: Ingo Molnar mi...@elte.hu
Cc: Brian King brk...@linux.vnet.ibm.com
Cc: Paul Mackerras pau...@samba.org
Cc: Martin Schwidefsky schwidef...@de.ibm.com
Cc: Gerald Schaefer gera...@linux.vnet.ibm.com
Cc: KAMEZAWA Hiroyuki kamezawa.hir...@jp.fujitsu.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/platforms/pseries/cmm.c |  221 -
 1 file changed, 215 insertions(+), 6 deletions(-)

diff -puN 
arch/powerpc/platforms/pseries/cmm.c~powerpc-make-the-cmm-memory-hotplug-aware 
arch/powerpc/platforms/pseries/cmm.c
--- 
a/arch/powerpc/platforms/pseries/cmm.c~powerpc-make-the-cmm-memory-hotplug-aware
+++ a/arch/powerpc/platforms/pseries/cmm.c
@@ -38,19 +38,28 @@
 #include asm/mmu.h
 #include asm/pgalloc.h
 #include asm/uaccess.h
+#include linux/memory.h
 
 #include plpar_wrappers.h
 
 #define CMM_DRIVER_VERSION 1.0.0
 #define CMM_DEFAULT_DELAY  1
+#define CMM_HOTPLUG_DELAY  5
 #define CMM_DEBUG  0
 #define CMM_DISABLE0
 #define CMM_OOM_KB 1024
 #define CMM_MIN_MEM_MB 256
 #define KB2PAGES(_p)   ((_p)(PAGE_SHIFT-10))
 #define PAGES2KB(_p)   ((_p)(PAGE_SHIFT-10))
+/*
+ * The priority level tries to ensure that this notifier is called as
+ * late as possible to reduce thrashing in the shared memory pool.
+ */
+#define CMM_MEM_HOTPLUG_PRI1
+#define CMM_MEM_ISOLATE_PRI15
 
 static unsigned int delay = CMM_DEFAULT_DELAY;
+static unsigned int hotplug_delay = CMM_HOTPLUG_DELAY;
 static unsigned int oom_kb = CMM_OOM_KB;
 static unsigned int cmm_debug = CMM_DEBUG;
 static unsigned int cmm_disabled = CMM_DISABLE;
@@ -65,6 +74,10 @@ MODULE_VERSION(CMM_DRIVER_VERSION);
 module_param_named(delay, delay, uint, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(delay, Delay (in seconds) between polls to query hypervisor 
paging requests. 
 [Default= __stringify(CMM_DEFAULT_DELAY) ]);
+module_param_named(hotplug_delay, hotplug_delay, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(delay, Delay (in seconds) after memory hotplug remove 
+before loaning resumes. 
+[Default= __stringify(CMM_HOTPLUG_DELAY) ]);
 module_param_named(oom_kb, oom_kb, uint, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(oom_kb, Amount of memory in kb to free on OOM. 
 [Default= __stringify(CMM_OOM_KB) ]);
@@ -92,6 +105,9 @@ static unsigned long oom_freed_pages;
 static struct cmm_page_array *cmm_page_list;
 static DEFINE_SPINLOCK(cmm_lock);
 
+static DEFINE_MUTEX(hotplug_mutex);
+static int hotplug_occurred; /* protected by the hotplug mutex */
+
 static struct task_struct *cmm_thread_ptr;
 
 /**
@@ -110,6 +126,17 @@ static long cmm_alloc_pages(long nr)
cmm_dbg(Begin request for %ld pages\n, nr);
 
while (nr) {
+   /* Exit if a hotplug operation is in progress or occurred */
+   if (mutex_trylock(hotplug_mutex)) {
+   if (hotplug_occurred) {
+   mutex_unlock(hotplug_mutex);
+   break;
+   }
+   mutex_unlock(hotplug_mutex);
+   } else {
+   break;
+   }
+
addr = __get_free_page(GFP_NOIO | __GFP_NOWARN |
   __GFP_NORETRY | __GFP_NOMEMALLOC);
if (!addr)
@@ -119,8 +146,10 @@ static long cmm_alloc_pages(long nr)
if (!pa || pa-index = CMM_NR_PAGES) {
/* Need a new page for the page list. */
spin_unlock(cmm_lock);
-   npa = (struct cmm_page_array *)__get_free_page(GFP_NOIO 
| __GFP_NOWARN |
-  
__GFP_NORETRY | __GFP_NOMEMALLOC);
+   npa = (struct 

[patch 1/3] powerpc: Sky CPU: redundant or incorrect tests on unsigned

2009-11-17 Thread akpm
From: Roel Kluin roel.kl...@gmail.com

count is unsigned and cannot be less than 0.

Signed-off-by: Roel Kluin roel.kl...@gmail.com
Acked-by: Cyrill Gorcunov gorcu...@gmail.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Kumar Gala ga...@gate.crashing.org
Cc: Brian Waite wa...@skycomputers.com
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/misc/hdpuftrs/hdpu_cpustate.c |5 -
 1 file changed, 5 deletions(-)

diff -puN 
drivers/misc/hdpuftrs/hdpu_cpustate.c~powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned
 drivers/misc/hdpuftrs/hdpu_cpustate.c
--- 
a/drivers/misc/hdpuftrs/hdpu_cpustate.c~powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned
+++ a/drivers/misc/hdpuftrs/hdpu_cpustate.c
@@ -121,8 +121,6 @@ static ssize_t cpustate_read(struct file
 {
unsigned char data;
 
-   if (count  0)
-   return -EFAULT;
if (count == 0)
return 0;
 
@@ -137,9 +135,6 @@ static ssize_t cpustate_write(struct fil
 {
unsigned char data;
 
-   if (count  0)
-   return -EFAULT;
-
if (count == 0)
return 0;
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 2/3] mm: add notifier in pageblock isolation for balloon drivers

2009-11-17 Thread akpm
From: Robert Jennings r...@linux.vnet.ibm.com

Memory balloon drivers can allocate a large amount of memory which is not
movable but could be freed to accomodate memory hotplug remove.

Prior to calling the memory hotplug notifier chain the memory in the
pageblock is isolated.  Currently, if the migrate type is not
MIGRATE_MOVABLE the isolation will not proceed, causing the memory removal
for that page range to fail.

Rather than failing pageblock isolation if the migrateteype is not
MIGRATE_MOVABLE, this patch checks if all of the pages in the pageblock,
and not on the LRU, are owned by a registered balloon driver (or other
entity) using a notifier chain.  If all of the non-movable pages are owned
by a balloon, they can be freed later through the memory notifier chain
and the range can still be isolated in set_migratetype_isolate().

Signed-off-by: Robert Jennings r...@linux.vnet.ibm.com
Cc: Mel Gorman m...@csn.ul.ie
Cc: Ingo Molnar mi...@elte.hu
Cc: Brian King brk...@linux.vnet.ibm.com
Cc: Paul Mackerras pau...@samba.org
Cc: Martin Schwidefsky schwidef...@de.ibm.com
Cc: Gerald Schaefer gera...@linux.vnet.ibm.com
Cc: KAMEZAWA Hiroyuki kamezawa.hir...@jp.fujitsu.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/base/memory.c  |   19 +
 include/linux/memory.h |   27 ++
 mm/page_alloc.c|   57 ++-
 3 files changed, 96 insertions(+), 7 deletions(-)

diff -puN 
drivers/base/memory.c~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
 drivers/base/memory.c
--- 
a/drivers/base/memory.c~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
+++ a/drivers/base/memory.c
@@ -63,6 +63,20 @@ void unregister_memory_notifier(struct n
 }
 EXPORT_SYMBOL(unregister_memory_notifier);
 
+static ATOMIC_NOTIFIER_HEAD(memory_isolate_chain);
+
+int register_memory_isolate_notifier(struct notifier_block *nb)
+{
+   return atomic_notifier_chain_register(memory_isolate_chain, nb);
+}
+EXPORT_SYMBOL(register_memory_isolate_notifier);
+
+void unregister_memory_isolate_notifier(struct notifier_block *nb)
+{
+   atomic_notifier_chain_unregister(memory_isolate_chain, nb);
+}
+EXPORT_SYMBOL(unregister_memory_isolate_notifier);
+
 /*
  * register_memory - Setup a sysfs device for a memory block
  */
@@ -157,6 +171,11 @@ int memory_notify(unsigned long val, voi
return blocking_notifier_call_chain(memory_chain, val, v);
 }
 
+int memory_isolate_notify(unsigned long val, void *v)
+{
+   return atomic_notifier_call_chain(memory_isolate_chain, val, v);
+}
+
 /*
  * MEMORY_HOTPLUG depends on SPARSEMEM in mm/Kconfig, so it is
  * OK to have direct references to sparsemem variables in here.
diff -puN 
include/linux/memory.h~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
 include/linux/memory.h
--- 
a/include/linux/memory.h~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
+++ a/include/linux/memory.h
@@ -50,6 +50,19 @@ struct memory_notify {
int status_change_nid;
 };
 
+/*
+ * During pageblock isolation, count the number of pages within the
+ * range [start_pfn, start_pfn + nr_pages) which are owned by code
+ * in the notifier chain.
+ */
+#define MEM_ISOLATE_COUNT  (10)
+
+struct memory_isolate_notify {
+   unsigned long start_pfn;/* Start of range to check */
+   unsigned int nr_pages;  /* # pages in range to check */
+   unsigned int pages_found;   /* # pages owned found by callbacks */
+};
+
 struct notifier_block;
 struct mem_section;
 
@@ -76,14 +89,28 @@ static inline int memory_notify(unsigned
 {
return 0;
 }
+static inline int register_memory_isolate_notifier(struct notifier_block *nb)
+{
+   return 0;
+}
+static inline void unregister_memory_isolate_notifier(struct notifier_block 
*nb)
+{
+}
+static inline int memory_isolate_notify(unsigned long val, void *v)
+{
+   return 0;
+}
 #else
 extern int register_memory_notifier(struct notifier_block *nb);
 extern void unregister_memory_notifier(struct notifier_block *nb);
+extern int register_memory_isolate_notifier(struct notifier_block *nb);
+extern void unregister_memory_isolate_notifier(struct notifier_block *nb);
 extern int register_new_memory(int, struct mem_section *);
 extern int unregister_memory_section(struct mem_section *);
 extern int memory_dev_init(void);
 extern int remove_memory_block(unsigned long, struct mem_section *, int);
 extern int memory_notify(unsigned long val, void *v);
+extern int memory_isolate_notify(unsigned long val, void *v);
 extern struct memory_block *find_memory_block(struct mem_section *);
 #define CONFIG_MEM_BLOCK_SIZE  (PAGES_PER_SECTIONPAGE_SHIFT)
 enum mem_add_context { BOOT, HOTPLUG };
diff -puN 
mm/page_alloc.c~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers 
mm/page_alloc.c
--- a/mm/page_alloc.c~mm-add-notifier-in-pageblock-isolation-for-balloon-drivers
+++ a/mm/page_alloc.c
@@ 

[patch 2/3] powerpc/fsl-booke: read buffer overflow

2009-08-06 Thread akpm
From: Roel Kluin roel.kl...@gmail.com

cam[tlbcam_index] is checked before tlbcam_index  ARRAY_SIZE(cam)

Signed-off-by: Roel Kluin roel.kl...@gmail.com
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 arch/powerpc/mm/fsl_booke_mmu.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff -puN 
arch/powerpc/mm/fsl_booke_mmu.c~powerpc-fsl-booke-read-buffer-overflow 
arch/powerpc/mm/fsl_booke_mmu.c
--- a/arch/powerpc/mm/fsl_booke_mmu.c~powerpc-fsl-booke-read-buffer-overflow
+++ a/arch/powerpc/mm/fsl_booke_mmu.c
@@ -161,7 +161,7 @@ unsigned long __init mmu_mapin_ram(void)
unsigned long virt = PAGE_OFFSET;
phys_addr_t phys = memstart_addr;
 
-   while (cam[tlbcam_index]  tlbcam_index  ARRAY_SIZE(cam)) {
+   while (tlbcam_index  ARRAY_SIZE(cam)  cam[tlbcam_index]) {
settlbcam(tlbcam_index, virt, phys, cam[tlbcam_index], 
PAGE_KERNEL_X, 0);
virt += cam[tlbcam_index];
phys += cam[tlbcam_index];
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 1/3] powerpc: Sky CPU: redundant or incorrect tests on unsigned

2009-08-06 Thread akpm
From: Roel Kluin roel.kl...@gmail.com

count is unsigned and cannot be less than 0.

Signed-off-by: Roel Kluin roel.kl...@gmail.com
Cc: Cyrill Gorcunov gorcu...@gmail.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Kumar Gala ga...@gate.crashing.org
Cc: Brian Waite wa...@skycomputers.com
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/misc/hdpuftrs/hdpu_cpustate.c |5 -
 1 file changed, 5 deletions(-)

diff -puN 
drivers/misc/hdpuftrs/hdpu_cpustate.c~powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned
 drivers/misc/hdpuftrs/hdpu_cpustate.c
--- 
a/drivers/misc/hdpuftrs/hdpu_cpustate.c~powerpc-sky-cpu-redundant-or-incorrect-tests-on-unsigned
+++ a/drivers/misc/hdpuftrs/hdpu_cpustate.c
@@ -121,8 +121,6 @@ static ssize_t cpustate_read(struct file
 {
unsigned char data;
 
-   if (count  0)
-   return -EFAULT;
if (count == 0)
return 0;
 
@@ -137,9 +135,6 @@ static ssize_t cpustate_write(struct fil
 {
unsigned char data;
 
-   if (count  0)
-   return -EFAULT;
-
if (count == 0)
return 0;
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 3/3] powerpc: avoid calculating possibly-invalid address

2009-08-06 Thread akpm
From: Roel Kluin roel.kl...@gmail.com

Check whether index is within bounds prior to calculating a
possibly-invalid address.

Signed-off-by: Roel Kluin roel.kl...@gmail.com
Cc: Bernd Petrovitsch be...@firmix.at
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Signed-off-by: Andrew Morton a...@linux-foundation.org
---

 drivers/char/hvsi.c |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff -puN 
drivers/char/hvsi.c~powerpc-avoid-calculating-possibly-invalid-address 
drivers/char/hvsi.c
--- a/drivers/char/hvsi.c~powerpc-avoid-calculating-possibly-invalid-address
+++ a/drivers/char/hvsi.c
@@ -1230,11 +1230,12 @@ static struct tty_driver *hvsi_console_d
 
 static int __init hvsi_console_setup(struct console *console, char *options)
 {
-   struct hvsi_struct *hp = hvsi_ports[console-index];
+   struct hvsi_struct *hp;
int ret;
 
if (console-index  0 || console-index = hvsi_count)
return -1;
+   hp = hvsi_ports[console-index];
 
/* give the FSP a chance to change the baud rate when we re-open */
hvsi_close_protocol(hp);
_
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[patch 1/1] arch/powerpc: eliminate NULL test and memset after alloc_bootmem

2008-12-01 Thread akpm
From: Julia Lawall [EMAIL PROTECTED]

As noted by Akinobu Mita in patch b1fceac2b9e04d278316b2faddf276015fc06e3b,
alloc_bootmem and related functions never return NULL and always return a
zeroed region of memory.  Thus a NULL test or memset after calls to these
functions is unnecessary.

This was fixed using the following semantic patch.
(http://www.emn.fr/x-info/coccinelle/)

// smpl
@@
expression E;
statement S;
@@

E = 
\(alloc_bootmem\|alloc_bootmem_low\|alloc_bootmem_pages\|alloc_bootmem_low_pages\|alloc_bootmem_node\|alloc_bootmem_low_pages_node\|alloc_bootmem_pages_node\)(...)
... when != E
(
- BUG_ON (E == NULL);
|
- if (E == NULL) S
)

@@
expression E,E1;
@@

E = 
\(alloc_bootmem\|alloc_bootmem_low\|alloc_bootmem_pages\|alloc_bootmem_low_pages\|alloc_bootmem_node\|alloc_bootmem_low_pages_node\|alloc_bootmem_pages_node\)(...)
... when != E
- memset(E,0,E1);
// /smpl

Signed-off-by: Julia Lawall [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/kernel/setup_64.c |2 --
 1 file changed, 2 deletions(-)

diff -puN 
arch/powerpc/kernel/setup_64.c~arch-powerpc-eliminate-null-test-and-memset-after-alloc_bootmem
 arch/powerpc/kernel/setup_64.c
--- 
a/arch/powerpc/kernel/setup_64.c~arch-powerpc-eliminate-null-test-and-memset-after-alloc_bootmem
+++ a/arch/powerpc/kernel/setup_64.c
@@ -606,8 +606,6 @@ void __init setup_per_cpu_areas(void)
 
for_each_possible_cpu(i) {
ptr = alloc_bootmem_pages_node(NODE_DATA(cpu_to_node(i)), size);
-   if (!ptr)
-   panic(Cannot allocate cpu data for CPU %d\n, i);
 
paca[i].data_offset = ptr - __per_cpu_start;
memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start);
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 1/1] powerpc: hugetlb pgtable cache access cleanup

2008-10-29 Thread akpm
From: Jon Tollefson [EMAIL PROTECTED]

Cleaned up use of macro.  We now reference the pgtable_cache array
directly instead of using a macro.

Signed-off-by: Jon Tollefson [EMAIL PROTECTED]
Cc: Nick Piggin [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/mm/hugetlbpage.c |   22 +++---
 1 file changed, 11 insertions(+), 11 deletions(-)

diff -puN 
arch/powerpc/mm/hugetlbpage.c~powerpc-hugetlb-pgtable-cache-access-cleanup 
arch/powerpc/mm/hugetlbpage.c
--- a/arch/powerpc/mm/hugetlbpage.c~powerpc-hugetlb-pgtable-cache-access-cleanup
+++ a/arch/powerpc/mm/hugetlbpage.c
@@ -53,8 +53,7 @@ unsigned int mmu_huge_psizes[MMU_PAGE_CO
 
 /* Subtract one from array size because we don't need a cache for 4K since
  * is not a huge page size */
-#define huge_pgtable_cache(psize)  (pgtable_cache[HUGEPTE_CACHE_NUM \
-   + psize-1])
+#define HUGE_PGTABLE_INDEX(psize)  (HUGEPTE_CACHE_NUM + psize - 1)
 #define HUGEPTE_CACHE_NAME(psize)  (huge_pgtable_cache_name[psize])
 
 static const char *huge_pgtable_cache_name[MMU_PAGE_COUNT] = {
@@ -113,7 +112,7 @@ static inline pte_t *hugepte_offset(huge
 static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp,
   unsigned long address, unsigned int psize)
 {
-   pte_t *new = kmem_cache_zalloc(huge_pgtable_cache(psize),
+   pte_t *new = kmem_cache_zalloc(pgtable_cache[HUGE_PGTABLE_INDEX(psize)],
  GFP_KERNEL|__GFP_REPEAT);
 
if (! new)
@@ -121,7 +120,7 @@ static int __hugepte_alloc(struct mm_str
 
spin_lock(mm-page_table_lock);
if (!hugepd_none(*hpdp))
-   kmem_cache_free(huge_pgtable_cache(psize), new);
+   kmem_cache_free(pgtable_cache[HUGE_PGTABLE_INDEX(psize)], new);
else
hpdp-pd = (unsigned long)new | HUGEPD_OK;
spin_unlock(mm-page_table_lock);
@@ -760,13 +759,14 @@ static int __init hugetlbpage_init(void)
 
for (psize = 0; psize  MMU_PAGE_COUNT; ++psize) {
if (mmu_huge_psizes[psize]) {
-   huge_pgtable_cache(psize) = kmem_cache_create(
-   HUGEPTE_CACHE_NAME(psize),
-   HUGEPTE_TABLE_SIZE(psize),
-   HUGEPTE_TABLE_SIZE(psize),
-   0,
-   NULL);
-   if (!huge_pgtable_cache(psize))
+   pgtable_cache[HUGE_PGTABLE_INDEX(psize)] =
+   kmem_cache_create(
+   HUGEPTE_CACHE_NAME(psize),
+   HUGEPTE_TABLE_SIZE(psize),
+   HUGEPTE_TABLE_SIZE(psize),
+   0,
+   NULL);
+   if (!pgtable_cache[HUGE_PGTABLE_INDEX(psize)])
panic(hugetlbpage_init(): could not create %s\
  \n, HUGEPTE_CACHE_NAME(psize));
}
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 1/1] powerpc: convert CONFIG_PPC_MERGE to CONFIG_PPC for legacy io checks

2008-09-22 Thread akpm
From: Kumar Gala [EMAIL PROTECTED]

Now that arch/ppc is dead CONFIG_PPC_MERGE is always defined for all
powerpc platforms and we want to get rid of CONFIG_PPC_MERGE use
CONFIG_PPC instead.

Signed-off-by: Kumar Gala [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/block/floppy.c   |2 +-
 drivers/char/ipmi/ipmi_si_intf.c |2 +-
 drivers/i2c/busses/i2c-pca-isa.c |2 +-
 drivers/input/serio/i8042-io.h   |2 +-
 drivers/pnp/isapnp/core.c|2 +-
 drivers/pnp/pnpbios/core.c   |4 ++--
 6 files changed, 7 insertions(+), 7 deletions(-)

diff -puN 
drivers/block/floppy.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
 drivers/block/floppy.c
--- 
a/drivers/block/floppy.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
+++ a/drivers/block/floppy.c
@@ -4165,7 +4165,7 @@ static int __init floppy_init(void)
int i, unit, drive;
int err, dr;
 
-#if defined(CONFIG_PPC_MERGE)
+#if defined(CONFIG_PPC)
if (check_legacy_ioport(FDC1))
return -ENODEV;
 #endif
diff -puN 
drivers/char/ipmi/ipmi_si_intf.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
 drivers/char/ipmi/ipmi_si_intf.c
--- 
a/drivers/char/ipmi/ipmi_si_intf.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
+++ a/drivers/char/ipmi/ipmi_si_intf.c
@@ -2695,7 +2695,7 @@ static __devinit void default_find_bmc(v
for (i = 0; ; i++) {
if (!ipmi_defaults[i].port)
break;
-#ifdef CONFIG_PPC_MERGE
+#ifdef CONFIG_PPC
if (check_legacy_ioport(ipmi_defaults[i].port))
continue;
 #endif
diff -puN 
drivers/i2c/busses/i2c-pca-isa.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
 drivers/i2c/busses/i2c-pca-isa.c
--- 
a/drivers/i2c/busses/i2c-pca-isa.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
+++ a/drivers/i2c/busses/i2c-pca-isa.c
@@ -126,7 +126,7 @@ static int __devinit pca_isa_probe(struc
 
dev_info(dev, i/o base %#08lx. irq %d\n, base, irq);
 
-#ifdef CONFIG_PPC_MERGE
+#ifdef CONFIG_PPC
if (check_legacy_ioport(base)) {
dev_err(dev, I/O address %#08lx is not available\n, base);
goto out;
diff -puN 
drivers/input/serio/i8042-io.h~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
 drivers/input/serio/i8042-io.h
--- 
a/drivers/input/serio/i8042-io.h~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
+++ a/drivers/input/serio/i8042-io.h
@@ -67,7 +67,7 @@ static inline int i8042_platform_init(vo
  * On some platforms touching the i8042 data register region can do really
  * bad things. Because of this the region is always reserved on such boxes.
  */
-#if defined(CONFIG_PPC_MERGE)
+#if defined(CONFIG_PPC)
if (check_legacy_ioport(I8042_DATA_REG))
return -ENODEV;
 #endif
diff -puN 
drivers/pnp/isapnp/core.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
 drivers/pnp/isapnp/core.c
--- 
a/drivers/pnp/isapnp/core.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
+++ a/drivers/pnp/isapnp/core.c
@@ -1012,7 +1012,7 @@ static int __init isapnp_init(void)
printk(KERN_INFO isapnp: ISA Plug  Play support disabled\n);
return 0;
}
-#ifdef CONFIG_PPC_MERGE
+#ifdef CONFIG_PPC
if (check_legacy_ioport(_PIDXR) || check_legacy_ioport(_PNPWRP))
return -EINVAL;
 #endif
diff -puN 
drivers/pnp/pnpbios/core.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
 drivers/pnp/pnpbios/core.c
--- 
a/drivers/pnp/pnpbios/core.c~powerpc-convert-config_ppc_merge-to-config_ppc-for-legacy-io-checks
+++ a/drivers/pnp/pnpbios/core.c
@@ -519,7 +519,7 @@ static int __init pnpbios_init(void)
 {
int ret;
 
-#if defined(CONFIG_PPC_MERGE)
+#if defined(CONFIG_PPC)
if (check_legacy_ioport(PNPBIOS_BASE))
return -ENODEV;
 #endif
@@ -577,7 +577,7 @@ static int __init pnpbios_thread_init(vo
 {
struct task_struct *task;
 
-#if defined(CONFIG_PPC_MERGE)
+#if defined(CONFIG_PPC)
if (check_legacy_ioport(PNPBIOS_BASE))
return 0;
 #endif
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 2/2] powerpc: replace __FUNCTION__ with __func__

2008-07-30 Thread akpm
From: Harvey Harrison [EMAIL PROTECTED]

__FUNCTION__ is gcc-specific, use __func__

[EMAIL PROTECTED]: coding-style fixes]
Signed-off-by: Harvey Harrison [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/kernel/lparcfg.c|8 
 arch/powerpc/platforms/pseries/cmm.c |4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff -puN 
arch/powerpc/kernel/lparcfg.c~powerpc-replace-__function__-with-__func__ 
arch/powerpc/kernel/lparcfg.c
--- a/arch/powerpc/kernel/lparcfg.c~powerpc-replace-__function__-with-__func__
+++ a/arch/powerpc/kernel/lparcfg.c
@@ -505,10 +505,10 @@ static ssize_t update_ppp(u64 *entitleme
return -EINVAL;
 
pr_debug(%s: current_entitled = %lu, current_weight = %u\n,
-__FUNCTION__, ppp_data.entitlement, ppp_data.weight);
+__func__, ppp_data.entitlement, ppp_data.weight);
 
pr_debug(%s: new_entitled = %lu, new_weight = %u\n,
-__FUNCTION__, new_entitled, new_weight);
+__func__, new_entitled, new_weight);
 
retval = plpar_hcall_norets(H_SET_PPP, new_entitled, new_weight);
return retval;
@@ -551,10 +551,10 @@ static ssize_t update_mpp(u64 *entitleme
return -EINVAL;
 
pr_debug(%s: current_entitled = %lu, current_weight = %u\n,
-__FUNCTION__, mpp_data.entitled_mem, mpp_data.mem_weight);
+__func__, mpp_data.entitled_mem, mpp_data.mem_weight);
 
pr_debug(%s: new_entitled = %lu, new_weight = %u\n,
-__FUNCTION__, new_entitled, new_weight);
+__func__, new_entitled, new_weight);
 
rc = plpar_hcall_norets(H_SET_MPP, new_entitled, new_weight);
return rc;
diff -puN 
arch/powerpc/platforms/pseries/cmm.c~powerpc-replace-__function__-with-__func__ 
arch/powerpc/platforms/pseries/cmm.c
--- 
a/arch/powerpc/platforms/pseries/cmm.c~powerpc-replace-__function__-with-__func__
+++ a/arch/powerpc/platforms/pseries/cmm.c
@@ -121,7 +121,7 @@ static long cmm_alloc_pages(long nr)
npa = (struct cmm_page_array *)__get_free_page(GFP_NOIO 
| __GFP_NOWARN |
   
__GFP_NORETRY | __GFP_NOMEMALLOC);
if (!npa) {
-   pr_info(%s: Can not allocate new page list\n, 
__FUNCTION__);
+   pr_info(%s: Can not allocate new page list\n, 
__func__);
free_page(addr);
break;
}
@@ -138,7 +138,7 @@ static long cmm_alloc_pages(long nr)
}
 
if ((rc = plpar_page_set_loaned(__pa(addr {
-   pr_err(%s: Can not set page to loaned. rc=%ld\n, 
__FUNCTION__, rc);
+   pr_err(%s: Can not set page to loaned. rc=%ld\n, 
__func__, rc);
spin_unlock(cmm_lock);
free_page(addr);
break;
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 1/2] ppc: use the common ascii hex helpers

2008-07-30 Thread akpm
From: Harvey Harrison [EMAIL PROTECTED]

[EMAIL PROTECTED]: exclude prom_init.c]
Signed-off-by: Harvey Harrison [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/kernel/btext.c |   34 --
 powerpc/kernel/prom_init.c  |0 
 2 files changed, 16 insertions(+), 18 deletions(-)

diff -puN arch/powerpc/kernel/btext.c~ppc-use-the-common-ascii-hex-helpers 
arch/powerpc/kernel/btext.c
--- a/arch/powerpc/kernel/btext.c~ppc-use-the-common-ascii-hex-helpers
+++ a/arch/powerpc/kernel/btext.c
@@ -442,28 +442,26 @@ void btext_drawtext(const char *c, unsig
 
 void btext_drawhex(unsigned long v)
 {
-   char *hex_table = 0123456789abcdef;
-
if (!boot_text_mapped)
return;
 #ifdef CONFIG_PPC64
-   btext_drawchar(hex_table[(v  60)  0x000FUL]);
-   btext_drawchar(hex_table[(v  56)  0x000FUL]);
-   btext_drawchar(hex_table[(v  52)  0x000FUL]);
-   btext_drawchar(hex_table[(v  48)  0x000FUL]);
-   btext_drawchar(hex_table[(v  44)  0x000FUL]);
-   btext_drawchar(hex_table[(v  40)  0x000FUL]);
-   btext_drawchar(hex_table[(v  36)  0x000FUL]);
-   btext_drawchar(hex_table[(v  32)  0x000FUL]);
+   btext_drawchar(hex_asc_hi(v  56));
+   btext_drawchar(hex_asc_lo(v  56));
+   btext_drawchar(hex_asc_hi(v  48));
+   btext_drawchar(hex_asc_lo(v  48));
+   btext_drawchar(hex_asc_hi(v  40));
+   btext_drawchar(hex_asc_lo(v  40));
+   btext_drawchar(hex_asc_hi(v  32));
+   btext_drawchar(hex_asc_lo(v  32));
 #endif
-   btext_drawchar(hex_table[(v  28)  0x000FUL]);
-   btext_drawchar(hex_table[(v  24)  0x000FUL]);
-   btext_drawchar(hex_table[(v  20)  0x000FUL]);
-   btext_drawchar(hex_table[(v  16)  0x000FUL]);
-   btext_drawchar(hex_table[(v  12)  0x000FUL]);
-   btext_drawchar(hex_table[(v   8)  0x000FUL]);
-   btext_drawchar(hex_table[(v   4)  0x000FUL]);
-   btext_drawchar(hex_table[(v   0)  0x000FUL]);
+   btext_drawchar(hex_asc_hi(v  24));
+   btext_drawchar(hex_asc_lo(v  24));
+   btext_drawchar(hex_asc_hi(v  16));
+   btext_drawchar(hex_asc_lo(v  16));
+   btext_drawchar(hex_asc_hi(v  8));
+   btext_drawchar(hex_asc_lo(v  8));
+   btext_drawchar(hex_asc_hi(v));
+   btext_drawchar(hex_asc_lo(v));
btext_drawchar(' ');
 }
 
diff -puN arch/powerpc/kernel/prom_init.c~ppc-use-the-common-ascii-hex-helpers 
arch/powerpc/kernel/prom_init.c
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 2/5] spufs: convert nopfn to fault

2008-06-09 Thread akpm
From: Nick Piggin [EMAIL PROTECTED]

spufs: convert nopfn to fault

Signed-off-by: Nick Piggin [EMAIL PROTECTED]
Acked-by: Jeremy Kerr [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/platforms/cell/spufs/file.c |   98 -
 arch/powerpc/platforms/cell/spufs/sputrace.c |8 -
 2 files changed, 54 insertions(+), 52 deletions(-)

diff -puN arch/powerpc/platforms/cell/spufs/file.c~spufs-convert-nopfn-to-fault 
arch/powerpc/platforms/cell/spufs/file.c
--- a/arch/powerpc/platforms/cell/spufs/file.c~spufs-convert-nopfn-to-fault
+++ a/arch/powerpc/platforms/cell/spufs/file.c
@@ -238,11 +238,13 @@ spufs_mem_write(struct file *file, const
return size;
 }
 
-static unsigned long spufs_mem_mmap_nopfn(struct vm_area_struct *vma,
- unsigned long address)
+static int
+spufs_mem_mmap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
struct spu_context *ctx = vma-vm_file-private_data;
-   unsigned long pfn, offset, addr0 = address;
+   unsigned long address = (unsigned long)vmf-virtual_address;
+   unsigned long pfn, offset;
+
 #ifdef CONFIG_SPU_FS_64K_LS
struct spu_state *csa = ctx-csa;
int psize;
@@ -260,15 +262,15 @@ static unsigned long spufs_mem_mmap_nopf
}
 #endif /* CONFIG_SPU_FS_64K_LS */
 
-   offset = (address - vma-vm_start) + (vma-vm_pgoff  PAGE_SHIFT);
+   offset = vmf-pgoff  PAGE_SHIFT;
if (offset = LS_SIZE)
-   return NOPFN_SIGBUS;
+   return VM_FAULT_SIGBUS;
 
-   pr_debug(spufs_mem_mmap_nopfn address=0x%lx - 0x%lx, offset=0x%lx\n,
-addr0, address, offset);
+   pr_debug(spufs_mem_mmap_fault address=0x%lx, offset=0x%lx\n,
+   address, offset);
 
if (spu_acquire(ctx))
-   return NOPFN_REFAULT;
+   return VM_FAULT_NOPAGE;
 
if (ctx-state == SPU_STATE_SAVED) {
vma-vm_page_prot = __pgprot(pgprot_val(vma-vm_page_prot)
@@ -283,12 +285,12 @@ static unsigned long spufs_mem_mmap_nopf
 
spu_release(ctx);
 
-   return NOPFN_REFAULT;
+   return VM_FAULT_NOPAGE;
 }
 
 
 static struct vm_operations_struct spufs_mem_mmap_vmops = {
-   .nopfn = spufs_mem_mmap_nopfn,
+   .fault = spufs_mem_mmap_fault,
 };
 
 static int spufs_mem_mmap(struct file *file, struct vm_area_struct *vma)
@@ -351,20 +353,19 @@ static const struct file_operations spuf
 #endif
 };
 
-static unsigned long spufs_ps_nopfn(struct vm_area_struct *vma,
-   unsigned long address,
+static int spufs_ps_fault(struct vm_area_struct *vma,
+   struct vm_fault *vmf,
unsigned long ps_offs,
unsigned long ps_size)
 {
struct spu_context *ctx = vma-vm_file-private_data;
-   unsigned long area, offset = address - vma-vm_start;
+   unsigned long area, offset = vmf-pgoff  PAGE_SHIFT;
int ret = 0;
 
-   spu_context_nospu_trace(spufs_ps_nopfn__enter, ctx);
+   spu_context_nospu_trace(spufs_ps_fault__enter, ctx);
 
-   offset += vma-vm_pgoff  PAGE_SHIFT;
if (offset = ps_size)
-   return NOPFN_SIGBUS;
+   return VM_FAULT_SIGBUS;
 
/*
 * Because we release the mmap_sem, the context may be destroyed while
@@ -378,7 +379,7 @@ static unsigned long spufs_ps_nopfn(stru
 * pages to hand out to the user, but we don't want to wait
 * with the mmap_sem held.
 * It is possible to drop the mmap_sem here, but then we need
-* to return NOPFN_REFAULT because the mappings may have
+* to return VM_FAULT_NOPAGE because the mappings may have
 * hanged.
 */
if (spu_acquire(ctx))
@@ -386,14 +387,15 @@ static unsigned long spufs_ps_nopfn(stru
 
if (ctx-state == SPU_STATE_SAVED) {
up_read(current-mm-mmap_sem);
-   spu_context_nospu_trace(spufs_ps_nopfn__sleep, ctx);
+   spu_context_nospu_trace(spufs_ps_fault__sleep, ctx);
ret = spufs_wait(ctx-run_wq, ctx-state == SPU_STATE_RUNNABLE);
-   spu_context_trace(spufs_ps_nopfn__wake, ctx, ctx-spu);
+   spu_context_trace(spufs_ps_fault__wake, ctx, ctx-spu);
down_read(current-mm-mmap_sem);
} else {
area = ctx-spu-problem_phys + ps_offs;
-   vm_insert_pfn(vma, address, (area + offset)  PAGE_SHIFT);
-   spu_context_trace(spufs_ps_nopfn__insert, ctx, ctx-spu);
+   vm_insert_pfn(vma, (unsigned long)vmf-virtual_address,
+   (area + offset)  PAGE_SHIFT);
+   spu_context_trace(spufs_ps_fault__insert, ctx, ctx-spu);
}
 
if (!ret)
@@ -401,18 +403,18 @@ static unsigned 

[patch 1/5] powerpc: fix for OProfile callgraph for Power 64 bit user apps

2008-06-09 Thread akpm
From: Carl Love [EMAIL PROTECTED]

Fix the 64 bit user code backtrace which currently may hang the system.

Signed-off-by: Carl Love [EMAIL PROTECTED]
Cc: Maynard Johnson [EMAIL PROTECTED]

On Thu, 15 May 2008 10:20:44 +1000
Michael Ellerman [EMAIL PROTECTED] wrote:

 __copy_from_user_inatomic() accepts any value for n, it just has a
 special case for 1, 2, 4 and 8 - but it should still work for other
 values.
 
 The old code copied 24 bytes from sp, and the new code copies 8 bytes
 from sp and 8 bytes from sp + 16 - so I don't see where the 48 bytes
 comes in to it?
 
 \ufeffAlso the comment is a little hard to parse, I think you mean Issue:
 the .., but I read Issue as a verb in that sentence. And Don't read
 more then should be than.

Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/oprofile/backtrace.c |   33 ++--
 1 file changed, 27 insertions(+), 6 deletions(-)

diff -puN 
arch/powerpc/oprofile/backtrace.c~powerpc-fix-for-oprofile-callgraph-for-power-64-bit-user-apps
 arch/powerpc/oprofile/backtrace.c
--- 
a/arch/powerpc/oprofile/backtrace.c~powerpc-fix-for-oprofile-callgraph-for-power-64-bit-user-apps
+++ a/arch/powerpc/oprofile/backtrace.c
@@ -53,19 +53,40 @@ static unsigned int user_getsp32(unsigne
 #ifdef CONFIG_PPC64
 static unsigned long user_getsp64(unsigned long sp, int is_first)
 {
-   unsigned long stack_frame[3];
+   unsigned long stk_frm_lr;
+   unsigned long stk_frm_sp;
+   unsigned long size;
+
+   /* Issue the __copy_from_user_inatomic() third argument currently
+* only takes sizes 1, 2, 4 or 8 bytes.  Don't read more then the
+* first 48 bytes of the stack frame.  That is all that is
+* guaranteed to exist.  Reading more may cause the system to hang.
+*
+* 64 bit stack frame layout:
+* 0-7   bytes is the pointer to previous stack
+* 8-15  bytes condition register save area
+* 16-23 bytes link register save area
+*/
+   size = sizeof(unsigned long);
+   if (!access_ok(VERIFY_READ, (void __user *)sp, size))
+   return 0;
 
-   if (!access_ok(VERIFY_READ, (void __user *)sp, sizeof(stack_frame)))
+   if (__copy_from_user_inatomic(stk_frm_sp, (void __user *)sp,
+   size))
return 0;
 
-   if (__copy_from_user_inatomic(stack_frame, (void __user *)sp,
-   sizeof(stack_frame)))
+   /* get the LR from the user stack */
+   if (!access_ok(VERIFY_READ, (void __user *)(sp+16), size))
+   return 0;
+
+   if (__copy_from_user_inatomic(stk_frm_lr, (void __user *)(sp+16),
+   size))
return 0;
 
if (!is_first)
-   oprofile_add_trace(STACK_LR64(stack_frame));
+   oprofile_add_trace(stk_frm_lr);
 
-   return STACK_SP(stack_frame);
+   return stk_frm_sp;
 }
 #endif
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 5/5] arch/powerpc/platforms/pseries/eeh_driver.c: fix warning

2008-06-09 Thread akpm
From: Andrew Morton [EMAIL PROTECTED]

Fix this:

/usr/src/devel/arch/powerpc/platforms/pseries/eeh_driver.c: In function 
'print_device_node_tree':
/usr/src/devel/arch/powerpc/platforms/pseries/eeh_driver.c:55: warning: ISO C90 
forbids mixed declarations and code

also make that function look like it's part of Linux.  I mean, wtf are you
guys up to down there??

[EMAIL PROTECTED]: coding-style fixes]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/platforms/pseries/eeh_driver.c |   11 +++
 1 file changed, 7 insertions(+), 4 deletions(-)

diff -puN 
arch/powerpc/platforms/pseries/eeh_driver.c~arch-powerpc-platforms-pseries-eeh_driverc-fix-warning
 arch/powerpc/platforms/pseries/eeh_driver.c
--- 
a/arch/powerpc/platforms/pseries/eeh_driver.c~arch-powerpc-platforms-pseries-eeh_driverc-fix-warning
+++ a/arch/powerpc/platforms/pseries/eeh_driver.c
@@ -42,17 +42,20 @@ static inline const char * pcid_name (st
 }
 
 #ifdef DEBUG
-static void print_device_node_tree (struct pci_dn *pdn, int dent)
+static void print_device_node_tree(struct pci_dn *pdn, int dent)
 {
int i;
-   if (!pdn) return;
-   for (i=0;ident; i++)
+   struct device_node *pc;
+
+   if (!pdn)
+   return;
+   for (i = 0; i  dent; i++)
printk( );
printk(dn=%s mode=%x \tcfg_addr=%x pe_addr=%x \tfull=%s\n,
pdn-node-name, pdn-eeh_mode, pdn-eeh_config_addr,
pdn-eeh_pe_config_addr, pdn-node-full_name);
dent += 3;
-   struct device_node *pc = pdn-node-child;
+   pc = pdn-node-child;
while (pc) {
print_device_node_tree(PCI_DN(pc), dent);
pc = pc-sibling;
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 1/1] fsldma: the MPC8377MDS board device tree node for fsldma driver

2008-06-09 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

The fsldma driver is tested on MPC8377MDS board.  The patch adds fsldma driver
support into MPC8377MDS device tree.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Cc: Nelson, Shannon [EMAIL PROTECTED]
Cc: Dan Williams [EMAIL PROTECTED]
Cc: Kumar Gala [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Scott Wood [EMAIL PROTECTED]
Cc: Li Yang [EMAIL PROTECTED]

On Wed, 14 May 2008 18:28:08 -0500
Scott Wood [EMAIL PROTECTED] wrote:


 [EMAIL PROTECTED] wrote:
  From: Zhang Wei [EMAIL PROTECTED]
  
 According to booting-without-of.txt, the interrupts property should be 
 repeated in each channel.  The driver also needs to be fixed to remember 
 whether it registered a DMA-block-level interrupt handler already, and 
 not try to register a channel interrupt.

Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/boot/dts/mpc8377_mds.dts |   27 
 1 file changed, 27 insertions(+)

diff -puN 
arch/powerpc/boot/dts/mpc8377_mds.dts~fsldma-the-mpc8377mds-board-device-tree-node-for-fsldma-driver
 arch/powerpc/boot/dts/mpc8377_mds.dts
--- 
a/arch/powerpc/boot/dts/mpc8377_mds.dts~fsldma-the-mpc8377mds-board-device-tree-node-for-fsldma-driver
+++ a/arch/powerpc/boot/dts/mpc8377_mds.dts
@@ -303,6 +303,33 @@
};
};
 
+   [EMAIL PROTECTED] {
+   #address-cells = 1;
+   #size-cells = 1;
+   compatible = fsl,mpc8349-dma;
+   reg = 0x82a8 4;
+   ranges = 0 0x8100 0x1a8;
+   interrupt-parent = ipic;
+   interrupts = 0x47 8;
+   cell-index = 0;
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8349-dma-channel;
+   reg = 0 0x80;
+   };
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8349-dma-channel;
+   reg = 0x80 0x80;
+   };
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8349-dma-channel;
+   reg = 0x100 0x80;
+   };
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8349-dma-channel;
+   reg = 0x180 0x28;
+   };
+   };
+
/* IPIC
 * interrupts cell = intr #, sense
 * sense values match linux IORESOURCE_IRQ_* defines:
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 4/5] macintosh: media bay: semaphore to mutex

2008-06-09 Thread akpm
From: Daniel Walker [EMAIL PROTECTED]

Signed-off-by: Daniel Walker [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/macintosh/mediabay.c |   27 ++-
 1 file changed, 14 insertions(+), 13 deletions(-)

diff -puN drivers/macintosh/mediabay.c~macintosh-media-bay-semaphore-to-mutex 
drivers/macintosh/mediabay.c
--- a/drivers/macintosh/mediabay.c~macintosh-media-bay-semaphore-to-mutex
+++ a/drivers/macintosh/mediabay.c
@@ -21,6 +21,7 @@
 #include linux/init.h
 #include linux/ide.h
 #include linux/kthread.h
+#include linux/mutex.h
 #include asm/prom.h
 #include asm/pgtable.h
 #include asm/io.h
@@ -77,7 +78,7 @@ struct media_bay_info {
int index;
int cached_gpio;
int sleeping;
-   struct semaphorelock;
+   struct mutexlock;
 #ifdef CONFIG_BLK_DEV_IDE_PMAC
ide_hwif_t  *cd_port;
void __iomem*cd_base;
@@ -459,27 +460,27 @@ int media_bay_set_ide_infos(struct devic
if (bay-mdev  which_bay == bay-mdev-ofdev.node) {
int timeout = 5000, index = hwif-index;

-   down(bay-lock);
+   mutex_lock(bay-lock);
 
bay-cd_port= hwif;
bay-cd_base= (void __iomem *) base;
bay-cd_irq = irq;
 
if ((MB_CD != bay-content_id) || bay-state != mb_up) {
-   up(bay-lock);
+   mutex_unlock(bay-lock);
return 0;
}
printk(KERN_DEBUG Registered ide%d for media bay 
%d\n, index, i);
do {
if (MB_IDE_READY(i)) {
bay-cd_index   = index;
-   up(bay-lock);
+   mutex_unlock(bay-lock);
return 0;
}
mdelay(1);
} while(--timeout);
printk(KERN_DEBUG Timeount waiting IDE in bay %d\n, 
i);
-   up(bay-lock);
+   mutex_unlock(bay-lock);
return -ENODEV;
}
}
@@ -616,10 +617,10 @@ static int media_bay_task(void *x)
 
while (!kthread_should_stop()) {
for (i = 0; i  media_bay_count; ++i) {
-   down(media_bays[i].lock);
+   mutex_lock(media_bays[i].lock);
if (!media_bays[i].sleeping)
media_bay_step(i);
-   up(media_bays[i].lock);
+   mutex_unlock(media_bays[i].lock);
}
 
msleep_interruptible(MB_POLL_DELAY);
@@ -659,7 +660,7 @@ static int __devinit media_bay_attach(st
bay-index = i;
bay-ops = match-data;
bay-sleeping = 0;
-   init_MUTEX(bay-lock);
+   mutex_init(bay-lock);
 
/* Init HW probing */
if (bay-ops-init)
@@ -697,10 +698,10 @@ static int media_bay_suspend(struct maci
 
if (state.event != mdev-ofdev.dev.power.power_state.event
 (state.event  PM_EVENT_SLEEP)) {
-   down(bay-lock);
+   mutex_lock(bay-lock);
bay-sleeping = 1;
set_mb_power(bay, 0);
-   up(bay-lock);
+   mutex_unlock(bay-lock);
msleep(MB_POLL_DELAY);
mdev-ofdev.dev.power.power_state = state;
}
@@ -719,12 +720,12 @@ static int media_bay_resume(struct macio
   they seem to help the 3400 get it right.
 */
/* Force MB power to 0 */
-   down(bay-lock);
+   mutex_lock(bay-lock);
set_mb_power(bay, 0);
msleep(MB_POWER_DELAY);
if (bay-ops-content(bay) != bay-content_id) {
printk(mediabay%d: content changed during sleep...\n, 
bay-index);
-   up(bay-lock);
+   mutex_unlock(bay-lock);
return 0;
}
set_mb_power(bay, 1);
@@ -740,7 +741,7 @@ static int media_bay_resume(struct macio
} while((bay-state != mb_empty) 
(bay-state != mb_up));
bay-sleeping = 0;
-   up(bay-lock);
+   mutex_unlock(bay-lock);
}
return 0;
 }
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 3/5] macintosh: therm_windtunnel: semaphore to mutex

2008-06-09 Thread akpm
From: Daniel Walker [EMAIL PROTECTED]

Signed-off-by: Daniel Walker [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/macintosh/therm_windtunnel.c |   16 
 1 file changed, 8 insertions(+), 8 deletions(-)

diff -puN 
drivers/macintosh/therm_windtunnel.c~macintosh-therm_windtunnel-semaphore-to-mutex
 drivers/macintosh/therm_windtunnel.c
--- 
a/drivers/macintosh/therm_windtunnel.c~macintosh-therm_windtunnel-semaphore-to-mutex
+++ a/drivers/macintosh/therm_windtunnel.c
@@ -62,7 +62,7 @@ static struct {
volatile intrunning;
struct task_struct  *poll_task;

-   struct semaphorelock;
+   struct mutexlock;
struct of_device*of_dev;

struct i2c_client   *thermostat;
@@ -286,23 +286,23 @@ restore_regs( void )
 
 static int control_loop(void *dummy)
 {
-   down(x.lock);
+   mutex_lock(x.lock);
setup_hardware();
-   up(x.lock);
+   mutex_unlock(x.lock);
 
for (;;) {
msleep_interruptible(8000);
if (kthread_should_stop())
break;
 
-   down(x.lock);
+   mutex_lock(x.lock);
poll_temp();
-   up(x.lock);
+   mutex_unlock(x.lock);
}
 
-   down(x.lock);
+   mutex_lock(x.lock);
restore_regs();
-   up(x.lock);
+   mutex_unlock(x.lock);
 
return 0;
 }
@@ -489,7 +489,7 @@ g4fan_init( void )
const struct apple_thermal_info *info;
struct device_node *np;
 
-   init_MUTEX( x.lock );
+   mutex_init(x.lock);
 
if( !(np=of_find_node_by_name(NULL, power-mgt)) )
return -ENODEV;
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 2/4] powerpc: add i2c pins to dts and board setup

2008-05-14 Thread akpm
From: Jochen Friedrich [EMAIL PROTECTED]

Initialize I2C pins on boards with CPM1/CPM2 controllers.

Signed-off-by: Jochen Friedrich [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/boot/dts/mpc8272ads.dts |   10 ++
 arch/powerpc/boot/dts/mpc866ads.dts  |   10 ++
 arch/powerpc/boot/dts/mpc885ads.dts  |   10 ++
 arch/powerpc/platforms/82xx/mpc8272_ads.c|4 
 arch/powerpc/platforms/8xx/mpc86xads_setup.c |4 
 arch/powerpc/platforms/8xx/mpc885ads_setup.c |3 +++
 6 files changed, 41 insertions(+)

diff -puN 
arch/powerpc/boot/dts/mpc8272ads.dts~powerpc-add-i2c-pins-to-dts-and-board-setup
 arch/powerpc/boot/dts/mpc8272ads.dts
--- 
a/arch/powerpc/boot/dts/mpc8272ads.dts~powerpc-add-i2c-pins-to-dts-and-board-setup
+++ a/arch/powerpc/boot/dts/mpc8272ads.dts
@@ -217,6 +217,16 @@
linux,network-index = 1;
fsl,cpm-command = 0x16200300;
};
+
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8272-i2c,
+fsl,cpm2-i2c,
+fsl,cpm-i2c;
+   reg = 11860 20 8afc 2;
+   interrupts = 1 8;
+   interrupt-parent = PIC;
+   fsl,cpm-command = 2960;
+   };
};
 
PIC: [EMAIL PROTECTED] {
diff -puN 
arch/powerpc/boot/dts/mpc866ads.dts~powerpc-add-i2c-pins-to-dts-and-board-setup 
arch/powerpc/boot/dts/mpc866ads.dts
--- 
a/arch/powerpc/boot/dts/mpc866ads.dts~powerpc-add-i2c-pins-to-dts-and-board-setup
+++ a/arch/powerpc/boot/dts/mpc866ads.dts
@@ -171,6 +171,16 @@
fsl,cpm-command = ;
linux,network-index = 1;
};
+
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc866-i2c,
+fsl,cpm1-i2c,
+fsl,cpm-i2c;
+   reg = 860 20 3c80 30;
+   interrupts = 10;
+   interrupt-parent = CPM_PIC;
+   fsl,cpm-command = 0010;
+   };
};
};
 
diff -puN 
arch/powerpc/boot/dts/mpc885ads.dts~powerpc-add-i2c-pins-to-dts-and-board-setup 
arch/powerpc/boot/dts/mpc885ads.dts
--- 
a/arch/powerpc/boot/dts/mpc885ads.dts~powerpc-add-i2c-pins-to-dts-and-board-setup
+++ a/arch/powerpc/boot/dts/mpc885ads.dts
@@ -215,6 +215,16 @@
fsl,cpm-command = 0x80;
linux,network-index = 2;
};
+
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc885-i2c,
+fsl,cpm1-i2c,
+fsl,cpm-i2c;
+   reg = 860 20 3c80 30;
+   interrupts = 10;
+   interrupt-parent = CPM_PIC;
+   fsl,cpm-command = 0010;
+   };
};
};
 
diff -puN 
arch/powerpc/platforms/82xx/mpc8272_ads.c~powerpc-add-i2c-pins-to-dts-and-board-setup
 arch/powerpc/platforms/82xx/mpc8272_ads.c
--- 
a/arch/powerpc/platforms/82xx/mpc8272_ads.c~powerpc-add-i2c-pins-to-dts-and-board-setup
+++ a/arch/powerpc/platforms/82xx/mpc8272_ads.c
@@ -96,6 +96,10 @@ static struct cpm_pin mpc8272_ads_pins[]
{1, 31, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
{2, 16, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
{2, 17, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
+
+   /* I2C */
+   {3, 14, CPM_PIN_INPUT | CPM_PIN_SECONDARY | CPM_PIN_OPENDRAIN},
+   {3, 15, CPM_PIN_INPUT | CPM_PIN_SECONDARY | CPM_PIN_OPENDRAIN},
 };
 
 static void __init init_ioports(void)
diff -puN 
arch/powerpc/platforms/8xx/mpc86xads_setup.c~powerpc-add-i2c-pins-to-dts-and-board-setup
 arch/powerpc/platforms/8xx/mpc86xads_setup.c
--- 
a/arch/powerpc/platforms/8xx/mpc86xads_setup.c~powerpc-add-i2c-pins-to-dts-and-board-setup
+++ a/arch/powerpc/platforms/8xx/mpc86xads_setup.c
@@ -65,6 +65,10 @@ static struct cpm_pin mpc866ads_pins[] =
{CPM_PORTD, 13, CPM_PIN_OUTPUT},
{CPM_PORTD, 14, CPM_PIN_OUTPUT},
{CPM_PORTD, 15, CPM_PIN_OUTPUT},
+
+   /* I2C */
+   {CPM_PORTB, 26, CPM_PIN_INPUT | CPM_PIN_OPENDRAIN},
+   {CPM_PORTB, 27, CPM_PIN_INPUT | CPM_PIN_OPENDRAIN},
 };
 
 static void __init init_ioports(void)
diff -puN 
arch/powerpc/platforms/8xx/mpc885ads_setup.c~powerpc-add-i2c-pins-to-dts-and-board-setup
 arch/powerpc/platforms/8xx/mpc885ads_setup.c
--- 

[patch 1/4] powerpc: fix for OProfile callgraph for Power 64 bit user apps

2008-05-14 Thread akpm
From: Carl Love [EMAIL PROTECTED]

Fix the 64 bit user code backtrace which currently may hang the system.

Signed-off-by: Carl Love [EMAIL PROTECTED]
Cc: Maynard Johnson [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/oprofile/backtrace.c |   33 ++--
 1 file changed, 27 insertions(+), 6 deletions(-)

diff -puN 
arch/powerpc/oprofile/backtrace.c~powerpc-fix-for-oprofile-callgraph-for-power-64-bit-user-apps
 arch/powerpc/oprofile/backtrace.c
--- 
a/arch/powerpc/oprofile/backtrace.c~powerpc-fix-for-oprofile-callgraph-for-power-64-bit-user-apps
+++ a/arch/powerpc/oprofile/backtrace.c
@@ -53,19 +53,40 @@ static unsigned int user_getsp32(unsigne
 #ifdef CONFIG_PPC64
 static unsigned long user_getsp64(unsigned long sp, int is_first)
 {
-   unsigned long stack_frame[3];
+   unsigned long stk_frm_lr;
+   unsigned long stk_frm_sp;
+   unsigned long size;
+
+   /* Issue the __copy_from_user_inatomic() third argument currently
+* only takes sizes 1, 2, 4 or 8 bytes.  Don't read more then the
+* first 48 bytes of the stack frame.  That is all that is
+* guaranteed to exist.  Reading more may cause the system to hang.
+*
+* 64 bit stack frame layout:
+* 0-7   bytes is the pointer to previous stack
+* 8-15  bytes condition register save area
+* 16-23 bytes link register save area
+*/
+   size = sizeof(unsigned long);
+   if (!access_ok(VERIFY_READ, (void __user *)sp, size))
+   return 0;
 
-   if (!access_ok(VERIFY_READ, (void __user *)sp, sizeof(stack_frame)))
+   if (__copy_from_user_inatomic(stk_frm_sp, (void __user *)sp,
+   size))
return 0;
 
-   if (__copy_from_user_inatomic(stack_frame, (void __user *)sp,
-   sizeof(stack_frame)))
+   /* get the LR from the user stack */
+   if (!access_ok(VERIFY_READ, (void __user *)(sp+16), size))
+   return 0;
+
+   if (__copy_from_user_inatomic(stk_frm_lr, (void __user *)(sp+16),
+   size))
return 0;
 
if (!is_first)
-   oprofile_add_trace(STACK_LR64(stack_frame));
+   oprofile_add_trace(stk_frm_lr);
 
-   return STACK_SP(stack_frame);
+   return stk_frm_sp;
 }
 #endif
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 4/4] spufs: convert nopfn to fault

2008-05-14 Thread akpm
From: Nick Piggin [EMAIL PROTECTED]

spufs: convert nopfn to fault

Signed-off-by: Nick Piggin [EMAIL PROTECTED]
Acked-by: Jeremy Kerr [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/platforms/cell/spufs/file.c |   98 -
 arch/powerpc/platforms/cell/spufs/sputrace.c |8 -
 2 files changed, 54 insertions(+), 52 deletions(-)

diff -puN arch/powerpc/platforms/cell/spufs/file.c~spufs-convert-nopfn-to-fault 
arch/powerpc/platforms/cell/spufs/file.c
--- a/arch/powerpc/platforms/cell/spufs/file.c~spufs-convert-nopfn-to-fault
+++ a/arch/powerpc/platforms/cell/spufs/file.c
@@ -237,11 +237,13 @@ spufs_mem_write(struct file *file, const
return size;
 }
 
-static unsigned long spufs_mem_mmap_nopfn(struct vm_area_struct *vma,
- unsigned long address)
+static int
+spufs_mem_mmap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
struct spu_context *ctx = vma-vm_file-private_data;
-   unsigned long pfn, offset, addr0 = address;
+   unsigned long address = (unsigned long)vmf-virtual_address;
+   unsigned long pfn, offset;
+
 #ifdef CONFIG_SPU_FS_64K_LS
struct spu_state *csa = ctx-csa;
int psize;
@@ -259,15 +261,15 @@ static unsigned long spufs_mem_mmap_nopf
}
 #endif /* CONFIG_SPU_FS_64K_LS */
 
-   offset = (address - vma-vm_start) + (vma-vm_pgoff  PAGE_SHIFT);
+   offset = vmf-pgoff  PAGE_SHIFT;
if (offset = LS_SIZE)
-   return NOPFN_SIGBUS;
+   return VM_FAULT_SIGBUS;
 
-   pr_debug(spufs_mem_mmap_nopfn address=0x%lx - 0x%lx, offset=0x%lx\n,
-addr0, address, offset);
+   pr_debug(spufs_mem_mmap_fault address=0x%lx, offset=0x%lx\n,
+   address, offset);
 
if (spu_acquire(ctx))
-   return NOPFN_REFAULT;
+   return VM_FAULT_NOPAGE;
 
if (ctx-state == SPU_STATE_SAVED) {
vma-vm_page_prot = __pgprot(pgprot_val(vma-vm_page_prot)
@@ -282,12 +284,12 @@ static unsigned long spufs_mem_mmap_nopf
 
spu_release(ctx);
 
-   return NOPFN_REFAULT;
+   return VM_FAULT_NOPAGE;
 }
 
 
 static struct vm_operations_struct spufs_mem_mmap_vmops = {
-   .nopfn = spufs_mem_mmap_nopfn,
+   .fault = spufs_mem_mmap_fault,
 };
 
 static int spufs_mem_mmap(struct file *file, struct vm_area_struct *vma)
@@ -350,20 +352,19 @@ static const struct file_operations spuf
 #endif
 };
 
-static unsigned long spufs_ps_nopfn(struct vm_area_struct *vma,
-   unsigned long address,
+static int spufs_ps_fault(struct vm_area_struct *vma,
+   struct vm_fault *vmf,
unsigned long ps_offs,
unsigned long ps_size)
 {
struct spu_context *ctx = vma-vm_file-private_data;
-   unsigned long area, offset = address - vma-vm_start;
+   unsigned long area, offset = vmf-pgoff  PAGE_SHIFT;
int ret = 0;
 
-   spu_context_nospu_trace(spufs_ps_nopfn__enter, ctx);
+   spu_context_nospu_trace(spufs_ps_fault__enter, ctx);
 
-   offset += vma-vm_pgoff  PAGE_SHIFT;
if (offset = ps_size)
-   return NOPFN_SIGBUS;
+   return VM_FAULT_SIGBUS;
 
/*
 * Because we release the mmap_sem, the context may be destroyed while
@@ -377,7 +378,7 @@ static unsigned long spufs_ps_nopfn(stru
 * pages to hand out to the user, but we don't want to wait
 * with the mmap_sem held.
 * It is possible to drop the mmap_sem here, but then we need
-* to return NOPFN_REFAULT because the mappings may have
+* to return VM_FAULT_NOPAGE because the mappings may have
 * hanged.
 */
if (spu_acquire(ctx))
@@ -385,14 +386,15 @@ static unsigned long spufs_ps_nopfn(stru
 
if (ctx-state == SPU_STATE_SAVED) {
up_read(current-mm-mmap_sem);
-   spu_context_nospu_trace(spufs_ps_nopfn__sleep, ctx);
+   spu_context_nospu_trace(spufs_ps_fault__sleep, ctx);
ret = spufs_wait(ctx-run_wq, ctx-state == SPU_STATE_RUNNABLE);
-   spu_context_trace(spufs_ps_nopfn__wake, ctx, ctx-spu);
+   spu_context_trace(spufs_ps_fault__wake, ctx, ctx-spu);
down_read(current-mm-mmap_sem);
} else {
area = ctx-spu-problem_phys + ps_offs;
-   vm_insert_pfn(vma, address, (area + offset)  PAGE_SHIFT);
-   spu_context_trace(spufs_ps_nopfn__insert, ctx, ctx-spu);
+   vm_insert_pfn(vma, (unsigned long)vmf-virtual_address,
+   (area + offset)  PAGE_SHIFT);
+   spu_context_trace(spufs_ps_fault__insert, ctx, ctx-spu);
}
 
if (!ret)
@@ -400,18 +402,18 @@ static unsigned 

[patch 3/4] macintosh: replace deprecated __initcall with device_initcall

2008-05-14 Thread akpm
From: Robert P. J. Day [EMAIL PROTECTED]

Signed-off-by: Robert P. J. Day [EMAIL PROTECTED]
Acked-by: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/macintosh/adb.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff -puN 
drivers/macintosh/adb.c~macintosh-replace-deprecated-__initcall-with-device_initcall
 drivers/macintosh/adb.c
--- 
a/drivers/macintosh/adb.c~macintosh-replace-deprecated-__initcall-with-device_initcall
+++ a/drivers/macintosh/adb.c
@@ -334,7 +334,7 @@ int __init adb_init(void)
return 0;
 }
 
-__initcall(adb_init);
+device_initcall(adb_init);
 
 static int
 do_adb_reset_bus(void)
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 1/1] fsldma: the MPC8377MDS board device tree node for fsldma driver

2008-05-14 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

The fsldma driver is tested on MPC8377MDS board.  The patch adds fsldma driver
support into MPC8377MDS device tree.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Cc: Nelson, Shannon [EMAIL PROTECTED]
Cc: Dan Williams [EMAIL PROTECTED]
Cc: Kumar Gala [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/boot/dts/mpc8377_mds.dts |   27 
 1 file changed, 27 insertions(+)

diff -puN 
arch/powerpc/boot/dts/mpc8377_mds.dts~fsldma-the-mpc8377mds-board-device-tree-node-for-fsldma-driver
 arch/powerpc/boot/dts/mpc8377_mds.dts
--- 
a/arch/powerpc/boot/dts/mpc8377_mds.dts~fsldma-the-mpc8377mds-board-device-tree-node-for-fsldma-driver
+++ a/arch/powerpc/boot/dts/mpc8377_mds.dts
@@ -295,6 +295,33 @@
};
};
 
+   [EMAIL PROTECTED] {
+   #address-cells = 1;
+   #size-cells = 1;
+   compatible = fsl,mpc8349-dma;
+   reg = 0x82a8 4;
+   ranges = 0 0x8100 0x1a8;
+   interrupt-parent = ipic;
+   interrupts = 0x47 8;
+   cell-index = 0;
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8349-dma-channel;
+   reg = 0 0x80;
+   };
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8349-dma-channel;
+   reg = 0x80 0x80;
+   };
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8349-dma-channel;
+   reg = 0x100 0x80;
+   };
+   [EMAIL PROTECTED] {
+   compatible = fsl,mpc8349-dma-channel;
+   reg = 0x180 0x28;
+   };
+   };
+
/* IPIC
 * interrupts cell = intr #, sense
 * sense values match linux IORESOURCE_IRQ_* defines:
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 1/5] macintosh: therm_pm72: driver_lock semaphore to mutex

2008-05-02 Thread akpm
From: Daniel Walker [EMAIL PROTECTED]

Signed-off-by: Daniel Walker [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/macintosh/therm_pm72.c |   31 ---
 1 file changed, 16 insertions(+), 15 deletions(-)

diff -puN 
drivers/macintosh/therm_pm72.c~macintosh-therm_pm72-driver_lock-semaphore-to-mutex
 drivers/macintosh/therm_pm72.c
--- 
a/drivers/macintosh/therm_pm72.c~macintosh-therm_pm72-driver_lock-semaphore-to-mutex
+++ a/drivers/macintosh/therm_pm72.c
@@ -122,6 +122,7 @@
 #include linux/kmod.h
 #include linux/i2c.h
 #include linux/kthread.h
+#include linux/mutex.h
 #include asm/prom.h
 #include asm/machdep.h
 #include asm/io.h
@@ -169,7 +170,7 @@ static int  rackmac;
 static s32 dimm_output_clamp;
 static int fcu_rpm_shift;
 static int fcu_tickle_ticks;
-static DECLARE_MUTEX(driver_lock);
+static DEFINE_MUTEX(driver_lock);
 
 /*
  * We have 3 types of CPU PID control. One is split old style control
@@ -729,9 +730,9 @@ static void fetch_cpu_pumps_minmax(void)
 static ssize_t show_##name(struct device *dev, struct device_attribute *attr, 
char *buf)   \
 {  \
ssize_t r;  \
-   down(driver_lock); \
+   mutex_lock(driver_lock);   \
r = sprintf(buf, %d.%03d, FIX32TOPRINT(data));\
-   up(driver_lock);   \
+   mutex_unlock(driver_lock); \
return r;   \
 }
 #define BUILD_SHOW_FUNC_INT(name, data)\
@@ -1803,11 +1804,11 @@ static int main_control_loop(void *x)
 {
DBG(main_control_loop started\n);
 
-   down(driver_lock);
+   mutex_lock(driver_lock);
 
if (start_fcu()  0) {
printk(KERN_ERR kfand: failed to start FCU\n);
-   up(driver_lock);
+   mutex_unlock(driver_lock);
goto out;
}
 
@@ -1822,14 +1823,14 @@ static int main_control_loop(void *x)
 
fcu_tickle_ticks = FCU_TICKLE_TICKS;
 
-   up(driver_lock);
+   mutex_unlock(driver_lock);
 
while (state == state_attached) {
unsigned long elapsed, start;
 
start = jiffies;
 
-   down(driver_lock);
+   mutex_lock(driver_lock);
 
/* Tickle the FCU just in case */
if (--fcu_tickle_ticks  0) {
@@ -1861,7 +1862,7 @@ static int main_control_loop(void *x)
do_monitor_slots(slots_state);
else
do_monitor_drives(drives_state);
-   up(driver_lock);
+   mutex_unlock(driver_lock);
 
if (critical_state == 1) {
printk(KERN_WARNING Temperature control detected a 
critical condition\n);
@@ -2019,13 +2020,13 @@ static void detach_fcu(void)
  */
 static int therm_pm72_attach(struct i2c_adapter *adapter)
 {
-   down(driver_lock);
+   mutex_lock(driver_lock);
 
/* Check state */
if (state == state_detached)
state = state_attaching;
if (state != state_attaching) {
-   up(driver_lock);
+   mutex_unlock(driver_lock);
return 0;
}
 
@@ -2054,7 +2055,7 @@ static int therm_pm72_attach(struct i2c_
state = state_attached;
start_control_loops();
}
-   up(driver_lock);
+   mutex_unlock(driver_lock);
 
return 0;
 }
@@ -2065,16 +2066,16 @@ static int therm_pm72_attach(struct i2c_
  */
 static int therm_pm72_detach(struct i2c_adapter *adapter)
 {
-   down(driver_lock);
+   mutex_lock(driver_lock);
 
if (state != state_detached)
state = state_detaching;
 
/* Stop control loops if any */
DBG(stopping control loops\n);
-   up(driver_lock);
+   mutex_unlock(driver_lock);
stop_control_loops();
-   down(driver_lock);
+   mutex_lock(driver_lock);
 
if (u3_0 != NULL  !strcmp(adapter-name, u3 0)) {
DBG(lost U3-0, disposing control loops\n);
@@ -2090,7 +2091,7 @@ static int therm_pm72_detach(struct i2c_
if (u3_0 == NULL  u3_1 == NULL)
state = state_detached;
 
-   up(driver_lock);
+   mutex_unlock(driver_lock);
 
return 0;
 }
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 2/5] macintosh: qindfarm_smu_sat: semaphore to mutex

2008-05-02 Thread akpm
From: Daniel Walker [EMAIL PROTECTED]

Signed-off-by: Daniel Walker [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/macintosh/windfarm_smu_sat.c |   10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff -puN 
drivers/macintosh/windfarm_smu_sat.c~macintosh-qindfarm_smu_sat-semaphore-to-mutex
 drivers/macintosh/windfarm_smu_sat.c
--- 
a/drivers/macintosh/windfarm_smu_sat.c~macintosh-qindfarm_smu_sat-semaphore-to-mutex
+++ a/drivers/macintosh/windfarm_smu_sat.c
@@ -13,7 +13,7 @@
 #include linux/init.h
 #include linux/wait.h
 #include linux/i2c.h
-#include linux/semaphore.h
+#include linux/mutex.h
 #include asm/prom.h
 #include asm/smu.h
 #include asm/pmac_low_i2c.h
@@ -36,7 +36,7 @@
 struct wf_sat {
int nr;
atomic_trefcnt;
-   struct semaphoremutex;
+   struct mutexmutex;
unsigned long   last_read; /* jiffies when cache last updated */
u8  cache[16];
struct i2c_client   i2c;
@@ -163,7 +163,7 @@ static int wf_sat_get(struct wf_sensor *
if (sat-i2c.adapter == NULL)
return -ENODEV;
 
-   down(sat-mutex);
+   mutex_lock(sat-mutex);
if (time_after(jiffies, (sat-last_read + MAX_AGE))) {
err = wf_sat_read_cache(sat);
if (err)
@@ -182,7 +182,7 @@ static int wf_sat_get(struct wf_sensor *
err = 0;
 
  fail:
-   up(sat-mutex);
+   mutex_unlock(sat-mutex);
return err;
 }
 
@@ -233,7 +233,7 @@ static void wf_sat_create(struct i2c_ada
sat-nr = -1;
sat-node = of_node_get(dev);
atomic_set(sat-refcnt, 0);
-   init_MUTEX(sat-mutex);
+   mutex_init(sat-mutex);
sat-i2c.addr = (addr  1)  0x7f;
sat-i2c.adapter = adapter;
sat-i2c.driver = wf_sat_driver;
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 4/5] powerpc: devres: Add devm_ioremap_prot()

2008-05-02 Thread akpm
From: Emil Medve [EMAIL PROTECTED]

We provide an ioremap_flags so provide a corresponding devm_ioremap_prot.  The
slight name difference is at Ben Herrenschmidt request as he plans on changing
ioremap_flags to ioremap_prot in the future.

Signed-off-by: Emil Medve [EMAIL PROTECTED]
Signed-off-by: Kumar Gala [EMAIL PROTECTED]
Acked-by: Tejun Heo [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/lib/Makefile |1 
 arch/powerpc/lib/devres.c |   42 
 include/asm-powerpc/io.h  |8 ++
 include/linux/io.h|1 
 lib/devres.c  |2 -
 5 files changed, 52 insertions(+), 2 deletions(-)

diff -puN arch/powerpc/lib/Makefile~devres-add-devm_ioremap_prot 
arch/powerpc/lib/Makefile
--- a/arch/powerpc/lib/Makefile~devres-add-devm_ioremap_prot
+++ a/arch/powerpc/lib/Makefile
@@ -23,3 +23,4 @@ obj-$(CONFIG_SMP) += locks.o
 endif
 
 obj-$(CONFIG_PPC_LIB_RHEAP) += rheap.o
+obj-$(CONFIG_HAS_IOMEM)+= devres.o
diff -puN /dev/null arch/powerpc/lib/devres.c
--- /dev/null
+++ a/arch/powerpc/lib/devres.c
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2008 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include linux/device.h  /* devres_*(), devm_ioremap_release() */
+#include linux/io.h  /* ioremap_flags() */
+#include linux/module.h  /* EXPORT_SYMBOL() */
+
+/**
+ * devm_ioremap_prot - Managed ioremap_flags()
+ * @dev: Generic device to remap IO address for
+ * @offset: BUS offset to map
+ * @size: Size of map
+ * @flags: Page flags
+ *
+ * Managed ioremap_prot().  Map is automatically unmapped on driver
+ * detach.
+ */
+void __iomem *devm_ioremap_prot(struct device *dev, resource_size_t offset,
+size_t size, unsigned long flags)
+{
+   void __iomem **ptr, *addr;
+
+   ptr = devres_alloc(devm_ioremap_release, sizeof(*ptr), GFP_KERNEL);
+   if (!ptr)
+   return NULL;
+
+   addr = ioremap_flags(offset, size, flags);
+   if (addr) {
+   *ptr = addr;
+   devres_add(dev, ptr);
+   } else
+   devres_free(ptr);
+
+   return addr;
+}
+EXPORT_SYMBOL(devm_ioremap_prot);
diff -puN include/asm-powerpc/io.h~devres-add-devm_ioremap_prot 
include/asm-powerpc/io.h
--- a/include/asm-powerpc/io.h~devres-add-devm_ioremap_prot
+++ a/include/asm-powerpc/io.h
@@ -2,7 +2,7 @@
 #define _ASM_POWERPC_IO_H
 #ifdef __KERNEL__
 
-/* 
+/*
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version
@@ -18,6 +18,9 @@ extern int check_legacy_ioport(unsigned 
 #define _PNPWRP0xa79
 #define PNPBIOS_BASE   0xf000
 
+#include linux/device.h
+#include linux/io.h
+
 #include linux/compiler.h
 #include asm/page.h
 #include asm/byteorder.h
@@ -744,6 +747,9 @@ static inline void * bus_to_virt(unsigne
 
 #define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
 
+void __iomem *devm_ioremap_prot(struct device *dev, resource_size_t offset,
+   size_t size, unsigned long flags);
+
 #endif /* __KERNEL__ */
 
 #endif /* _ASM_POWERPC_IO_H */
diff -puN include/linux/io.h~devres-add-devm_ioremap_prot include/linux/io.h
--- a/include/linux/io.h~devres-add-devm_ioremap_prot
+++ a/include/linux/io.h
@@ -65,5 +65,6 @@ void __iomem *devm_ioremap_nocache(struc
 void devm_iounmap(struct device *dev, void __iomem *addr);
 int check_signature(const volatile void __iomem *io_addr,
const unsigned char *signature, int length);
+void devm_ioremap_release(struct device *dev, void *res);
 
 #endif /* _LINUX_IO_H */
diff -puN lib/devres.c~devres-add-devm_ioremap_prot lib/devres.c
--- a/lib/devres.c~devres-add-devm_ioremap_prot
+++ a/lib/devres.c
@@ -2,7 +2,7 @@
 #include linux/io.h
 #include linux/module.h
 
-static void devm_ioremap_release(struct device *dev, void *res)
+void devm_ioremap_release(struct device *dev, void *res)
 {
iounmap(*(void __iomem **)res);
 }
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 5/5] powerpc: assign PDE-data before gluing PDE into /proc tree

2008-05-02 Thread akpm
From: Denis V. Lunev [EMAIL PROTECTED]

Simply replace proc_create and further data assigned with proc_create_data. 
No need to check for data!=NULL after that.

Signed-off-by: Denis V. Lunev [EMAIL PROTECTED]
Cc: Alexey Dobriyan [EMAIL PROTECTED]
Cc: Eric W. Biederman [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/platforms/pseries/scanlog.c |   19 ++-
 1 file changed, 2 insertions(+), 17 deletions(-)

diff -puN 
arch/powerpc/platforms/pseries/scanlog.c~powerpc-assign-pde-data-before-gluing-pde-into-proc-tree
 arch/powerpc/platforms/pseries/scanlog.c
--- 
a/arch/powerpc/platforms/pseries/scanlog.c~powerpc-assign-pde-data-before-gluing-pde-into-proc-tree
+++ a/arch/powerpc/platforms/pseries/scanlog.c
@@ -55,11 +55,6 @@ static ssize_t scanlog_read(struct file 
 dp = PDE(inode);
data = (unsigned int *)dp-data;
 
-   if (!data) {
-   printk(KERN_ERR scanlog: read failed no data\n);
-   return -EIO;
-   }
-
if (count  RTAS_DATA_BUF_SIZE)
count = RTAS_DATA_BUF_SIZE;
 
@@ -146,11 +141,6 @@ static int scanlog_open(struct inode * i
struct proc_dir_entry *dp = PDE(inode);
unsigned int *data = (unsigned int *)dp-data;
 
-   if (!data) {
-   printk(KERN_ERR scanlog: open failed no data\n);
-   return -EIO;
-   }
-
if (data[0] != 0) {
/* This imperfect test stops a second copy of the
 * data (or a reset while data is being copied)
@@ -168,10 +158,6 @@ static int scanlog_release(struct inode 
struct proc_dir_entry *dp = PDE(inode);
unsigned int *data = (unsigned int *)dp-data;
 
-   if (!data) {
-   printk(KERN_ERR scanlog: release failed no data\n);
-   return -EIO;
-   }
data[0] = 0;
 
return 0;
@@ -200,12 +186,11 @@ static int __init scanlog_init(void)
if (!data)
goto err;
 
-   ent = proc_create(ppc64/rtas/scan-log-dump, S_IRUSR, NULL,
- scanlog_fops);
+   ent = proc_create_data(ppc64/rtas/scan-log-dump, S_IRUSR, NULL,
+  scanlog_fops, data);
if (!ent)
goto err;
 
-   ent-data = data;
proc_ppc64_scan_log_dump = ent;
 
return 0;
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 3/5] machintosh: ADB driver: adb_handler_sem semaphore to mutex

2008-05-02 Thread akpm
From: Daniel Walker [EMAIL PROTECTED]

Signed-off-by: Daniel Walker [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/macintosh/adb.c |   30 +++---
 1 file changed, 15 insertions(+), 15 deletions(-)

diff -puN 
drivers/macintosh/adb.c~machintosh-adb-driver-adb_handler_sem-semaphore-to-mutex
 drivers/macintosh/adb.c
--- 
a/drivers/macintosh/adb.c~machintosh-adb-driver-adb_handler_sem-semaphore-to-mutex
+++ a/drivers/macintosh/adb.c
@@ -37,7 +37,7 @@
 #include linux/device.h
 #include linux/kthread.h
 #include linux/platform_device.h
-#include linux/semaphore.h
+#include linux/mutex.h
 
 #include asm/uaccess.h
 #ifdef CONFIG_PPC
@@ -102,7 +102,7 @@ static struct adb_handler {
 } adb_handler[16];
 
 /*
- * The adb_handler_sem mutex protects all accesses to the original_address
+ * The adb_handler_mutex mutex protects all accesses to the original_address
  * and handler_id fields of adb_handler[i] for all i, and changes to the
  * handler field.
  * Accesses to the handler field are protected by the adb_handler_lock
@@ -110,7 +110,7 @@ static struct adb_handler {
  * time adb_unregister returns, we know that the old handler isn't being
  * called.
  */
-static DECLARE_MUTEX(adb_handler_sem);
+static DEFINE_MUTEX(adb_handler_mutex);
 static DEFINE_RWLOCK(adb_handler_lock);
 
 #if 0
@@ -355,7 +355,7 @@ do_adb_reset_bus(void)
msleep(500);
}
 
-   down(adb_handler_sem);
+   mutex_lock(adb_handler_mutex);
write_lock_irq(adb_handler_lock);
memset(adb_handler, 0, sizeof(adb_handler));
write_unlock_irq(adb_handler_lock);
@@ -376,7 +376,7 @@ do_adb_reset_bus(void)
if (adb_controller-autopoll)
adb_controller-autopoll(autopoll_devs);
}
-   up(adb_handler_sem);
+   mutex_unlock(adb_handler_mutex);
 
blocking_notifier_call_chain(adb_client_list,
ADB_MSG_POST_RESET, NULL);
@@ -454,7 +454,7 @@ adb_register(int default_id, int handler
 {
int i;
 
-   down(adb_handler_sem);
+   mutex_lock(adb_handler_mutex);
ids-nids = 0;
for (i = 1; i  16; i++) {
if ((adb_handler[i].original_address == default_id) 
@@ -472,7 +472,7 @@ adb_register(int default_id, int handler
ids-id[ids-nids++] = i;
}
}
-   up(adb_handler_sem);
+   mutex_unlock(adb_handler_mutex);
return ids-nids;
 }
 
@@ -481,7 +481,7 @@ adb_unregister(int index)
 {
int ret = -ENODEV;
 
-   down(adb_handler_sem);
+   mutex_lock(adb_handler_mutex);
write_lock_irq(adb_handler_lock);
if (adb_handler[index].handler) {
while(adb_handler[index].busy) {
@@ -493,7 +493,7 @@ adb_unregister(int index)
adb_handler[index].handler = NULL;
}
write_unlock_irq(adb_handler_lock);
-   up(adb_handler_sem);
+   mutex_unlock(adb_handler_mutex);
return ret;
 }
 
@@ -557,19 +557,19 @@ adb_try_handler_change(int address, int 
 {
int ret;
 
-   down(adb_handler_sem);
+   mutex_lock(adb_handler_mutex);
ret = try_handler_change(address, new_id);
-   up(adb_handler_sem);
+   mutex_unlock(adb_handler_mutex);
return ret;
 }
 
 int
 adb_get_infos(int address, int *original_address, int *handler_id)
 {
-   down(adb_handler_sem);
+   mutex_lock(adb_handler_mutex);
*original_address = adb_handler[address].original_address;
*handler_id = adb_handler[address].handler_id;
-   up(adb_handler_sem);
+   mutex_unlock(adb_handler_mutex);
 
return (*original_address != 0);
 }
@@ -628,10 +628,10 @@ do_adb_query(struct adb_request *req)
case ADB_QUERY_GETDEVINFO:
if (req-nbytes  3)
break;
-   down(adb_handler_sem);
+   mutex_lock(adb_handler_mutex);
req-reply[0] = adb_handler[req-data[2]].original_address;
req-reply[1] = adb_handler[req-data[2]].handler_id;
-   up(adb_handler_sem);
+   mutex_unlock(adb_handler_mutex);
req-complete = 1;
req-reply_len = 2;
adb_write_done(req);
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 02/24] ppc: replace remaining __FUNCTION__ occurrences

2008-03-28 Thread akpm
From: Harvey Harrison [EMAIL PROTECTED]

__FUNCTION__ is gcc-specific, use __func__

Signed-off-by: Harvey Harrison [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/ppc/8xx_io/fec.c   |4 ++--
 arch/ppc/platforms/radstone_ppc7d.c |8 
 2 files changed, 6 insertions(+), 6 deletions(-)

diff -puN arch/ppc/8xx_io/fec.c~ppc-replace-remaining-__function__-occurences 
arch/ppc/8xx_io/fec.c
--- a/arch/ppc/8xx_io/fec.c~ppc-replace-remaining-__function__-occurences
+++ a/arch/ppc/8xx_io/fec.c
@@ -520,7 +520,7 @@ fec_enet_interrupt(int irq, void * dev_i
 #ifdef CONFIG_USE_MDIO
fec_enet_mii(dev);
 #else
-printk(%s[%d] %s: unexpected FEC_ENET_MII event\n, 
__FILE__,__LINE__,__FUNCTION__);
+printk(%s[%d] %s: unexpected FEC_ENET_MII event\n, __FILE__, __LINE__, 
__func__);
 #endif /* CONFIG_USE_MDIO */
}
 
@@ -1441,7 +1441,7 @@ irqreturn_t mii_link_interrupt(int irq, 
fecp-fec_ecntrl = ecntrl;  /* restore old settings */
}
 #else
-printk(%s[%d] %s: unexpected Link interrupt\n, 
__FILE__,__LINE__,__FUNCTION__);
+printk(%s[%d] %s: unexpected Link interrupt\n, __FILE__, __LINE__, __func__);
 #endif /* CONFIG_USE_MDIO */
 
 #ifndef CONFIG_RPXCLASSIC
diff -puN 
arch/ppc/platforms/radstone_ppc7d.c~ppc-replace-remaining-__function__-occurences
 arch/ppc/platforms/radstone_ppc7d.c
--- 
a/arch/ppc/platforms/radstone_ppc7d.c~ppc-replace-remaining-__function__-occurences
+++ a/arch/ppc/platforms/radstone_ppc7d.c
@@ -512,7 +512,7 @@ static void __init ppc7d_init_irq(void)
 {
int irq;
 
-   pr_debug(%s\n, __FUNCTION__);
+   pr_debug(%s\n, __func__);
i8259_init(0, 0);
mv64360_init_irq();
 
@@ -569,7 +569,7 @@ static int __init ppc7d_map_irq(struct p
};
const long min_idsel = 10, max_idsel = 14, irqs_per_slot = 4;
 
-   pr_debug(%s: %04x/%04x/%x: idsel=%hx pin=%hu\n, __FUNCTION__,
+   pr_debug(%s: %04x/%04x/%x: idsel=%hx pin=%hu\n, __func__,
 dev-vendor, dev-device, PCI_FUNC(dev-devfn), idsel, pin);
 
return PCI_IRQ_TABLE_LOOKUP;
@@ -1300,7 +1300,7 @@ static void ppc7d_init2(void)
u32 data;
u8 data8;
 
-   pr_debug(%s: enter\n, __FUNCTION__);
+   pr_debug(%s: enter\n, __func__);
 
/* Wait for debugger? */
if (ppc7d_wait_debugger) {
@@ -1333,7 +1333,7 @@ static void ppc7d_init2(void)
 ppc_md.set_rtc_time = ppc7d_set_rtc_time;
 ppc_md.get_rtc_time = ppc7d_get_rtc_time;
 
-   pr_debug(%s: exit\n, __FUNCTION__);
+   pr_debug(%s: exit\n, __func__);
 }
 
 /* Called from machine_init(), early, before any of the __init functions
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 14/24] rapidio: add RapidIO node probing into MPC86xx_HPCN board id table

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/platforms/86xx/mpc86xx_hpcn.c |1 +
 1 file changed, 1 insertion(+)

diff -puN 
arch/powerpc/platforms/86xx/mpc86xx_hpcn.c~rapidio-add-rapidio-node-probing-into-mpc86xx_hpcn-board-id-table
 arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
--- 
a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c~rapidio-add-rapidio-node-probing-into-mpc86xx_hpcn-board-id-table
+++ a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
@@ -215,6 +215,7 @@ mpc86xx_time_init(void)
 
 static __initdata struct of_device_id of_bus_ids[] = {
{ .compatible = simple-bus, },
+   { .compatible = fsl,rapidio-delta, },
{},
 };
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 13/24] rapidio: add RapidIO node into MPC8641HPCN dts file

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/boot/dts/mpc8641_hpcn.dts |   12 
 1 file changed, 12 insertions(+)

diff -puN 
arch/powerpc/boot/dts/mpc8641_hpcn.dts~rapidio-add-rapidio-node-into-mpc8641hpcn-dts-file
 arch/powerpc/boot/dts/mpc8641_hpcn.dts
--- 
a/arch/powerpc/boot/dts/mpc8641_hpcn.dts~rapidio-add-rapidio-node-into-mpc8641hpcn-dts-file
+++ a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
@@ -26,6 +26,7 @@
serial1 = serial1;
pci0 = pci0;
pci1 = pci1;
+   rapidio0 = rapidio0;
};
 
cpus {
@@ -500,4 +501,15 @@
  0x0 0x0010;
};
};
+   rapidio0: [EMAIL PROTECTED] {
+   #address-cells = 2;
+   #size-cells = 2;
+   compatible = fsl,rapidio-delta;
+   reg = 0xf80c 0x2;
+   ranges = 0 0 0xc000 0 0x2000;
+   interrupt-parent = mpic;
+   /* err_irq bell_outb_irq bell_inb_irq
+   msg1_tx_irq msg1_rx_irq msg2_tx_irq msg2_rx_irq */
+   interrupts = 48 2 49 2 50 2 53 2 54 2 55 2 56 2;
+   };
 };
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 16/24] rapidio: add RapidIO connection info print out and re-training for break connection

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c |   71 
 1 file changed, 71 insertions(+)

diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-add-rapidio-connection-info-print-out-and-re-training-for-break-connection
 arch/powerpc/sysdev/fsl_rio.c
--- 
a/arch/powerpc/sysdev/fsl_rio.c~rapidio-add-rapidio-connection-info-print-out-and-re-training-for-break-connection
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -942,6 +942,48 @@ static int fsl_rio_get_cmdline(char *s)
 
 __setup(riohdid=, fsl_rio_get_cmdline);
 
+static inline void fsl_rio_info(struct device *dev, u32 ccsr)
+{
+   const char *str;
+   if (ccsr  1) {
+   /* Serial phy */
+   switch (ccsr  30) {
+   case 0:
+   str = 1;
+   break;
+   case 1:
+   str = 4;
+   break;
+   default:
+   str = Unknown;
+   break;;
+   }
+   dev_info(dev, Hardware port width: %s\n, str);
+
+   switch ((ccsr  27)  7) {
+   case 0:
+   str = Single-lane 0;
+   break;
+   case 1:
+   str = Single-lane 2;
+   break;
+   case 2:
+   str = Four-lane;
+   break;
+   default:
+   str = Unknown;
+   break;
+   }
+   dev_info(dev, Training connection status: %s\n, str);
+   } else {
+   /* Parallel phy */
+   if (!(ccsr  0x8000))
+   dev_info(dev, Output port operating in 8-bit mode\n);
+   if (!(ccsr  0x0800))
+   dev_info(dev, Input port operating in 8-bit mode\n);
+   }
+}
+
 /**
  * fsl_rio_setup - Setup MPC85xx RapidIO interface
  * @fsl_rio_setup - Setup Freescale PowerPC RapidIO interface
@@ -1055,6 +1097,35 @@ int fsl_rio_setup(struct of_device *dev)
(port-phy_type == RIO_PHY_PARALLEL) ? parallel :
((port-phy_type == RIO_PHY_SERIAL) ? serial :
 unknown));
+   /* Checking the port training status */
+   if (in_be32((priv-regs_win + RIO_ESCSR))  1) {
+   dev_err(dev-dev, Port is not ready. 
+  Try to restart connection...\n);
+   switch (port-phy_type) {
+   case RIO_PHY_SERIAL:
+   /* Disable ports */
+   out_be32(priv-regs_win + RIO_CCSR, 0);
+   /* Set 1x lane */
+   setbits32(priv-regs_win + RIO_CCSR, 0x0200);
+   /* Enable ports */
+   setbits32(priv-regs_win + RIO_CCSR, 0x0060);
+   break;
+   case RIO_PHY_PARALLEL:
+   /* Disable ports */
+   out_be32(priv-regs_win + RIO_CCSR, 0x2200);
+   /* Enable ports */
+   out_be32(priv-regs_win + RIO_CCSR, 0x4400);
+   break;
+   }
+   msleep(100);
+   if (in_be32((priv-regs_win + RIO_ESCSR))  1) {
+   dev_err(dev-dev, Port restart failed.\n);
+   rc = -ENOLINK;
+   goto err;
+   }
+   dev_info(dev-dev, Port restart success!\n);
+   }
+   fsl_rio_info(dev-dev, ccsr);
 
port-sys_size = (in_be32((priv-regs_win + RIO_PEF_CAR))
 RIO_PEF_CTLS)  4;
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 15/24] rapidio: add serial RapidIO controller support, which includes MPC8548, MPC8641

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c |   75 +++-
 include/linux/rio.h   |6 ++
 2 files changed, 70 insertions(+), 11 deletions(-)

diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-add-serial-rapidio-controller-support-which-includes-mpc8548-mpc8641
 arch/powerpc/sysdev/fsl_rio.c
--- 
a/arch/powerpc/sysdev/fsl_rio.c~rapidio-add-serial-rapidio-controller-support-which-includes-mpc8548-mpc8641
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -21,6 +21,7 @@
 #include linux/rio.h
 #include linux/rio_drv.h
 #include linux/of_platform.h
+#include linux/delay.h
 
 #include asm/io.h
 
@@ -30,7 +31,12 @@
 #define IRQ_RIO_RX(m)  (((struct rio_priv *)(m-priv))-rxirq)
 
 #define RIO_ATMU_REGS_OFFSET   0x10c00
-#define RIO_MSG_REGS_OFFSET0x11000
+#define RIO_P_MSG_REGS_OFFSET  0x11000
+#define RIO_S_MSG_REGS_OFFSET  0x13000
+#define RIO_ESCSR  0x158
+#define RIO_CCSR   0x15c
+#define RIO_ISR_AACR   0x10120
+#define RIO_ISR_AACR_AA0x1 /* Accept All ID */
 #define RIO_MAINT_WIN_SIZE 0x40
 #define RIO_DBELL_WIN_SIZE 0x1000
 
@@ -69,7 +75,7 @@
 
 struct rio_atmu_regs {
u32 rowtar;
-   u32 pad1;
+   u32 rowtear;
u32 rowbar;
u32 pad2;
u32 rowar;
@@ -95,7 +101,15 @@ struct rio_msg_regs {
u32 ifqdpar;
u32 pad6;
u32 ifqepar;
-   u32 pad7[250];
+   u32 pad7[226];
+   u32 odmr;
+   u32 odsr;
+   u32 res0[4];
+   u32 oddpr;
+   u32 oddatr;
+   u32 res1[3];
+   u32 odretcr;
+   u32 res2[12];
u32 dmr;
u32 dsr;
u32 pad8;
@@ -175,8 +189,22 @@ static int fsl_rio_doorbell_send(struct 
struct rio_priv *priv = mport-priv;
pr_debug(fsl_doorbell_send: index %d destid %4.4x data %4.4x\n,
 index, destid, data);
-   out_be32(priv-dbell_atmu_regs-rowtar, destid  22);
-   out_be16(priv-dbell_win, data);
+   switch (mport-phy_type) {
+   case RIO_PHY_PARALLEL:
+   out_be32(priv-dbell_atmu_regs-rowtar, destid  22);
+   out_be16(priv-dbell_win, data);
+   break;
+   case RIO_PHY_SERIAL:
+   /* In the serial version silicons, such as MPC8548, MPC8641,
+* below operations is must be.
+*/
+   out_be32(priv-msg_regs-odmr, 0x);
+   out_be32(priv-msg_regs-odretcr, 0x0004);
+   out_be32(priv-msg_regs-oddpr, destid  16);
+   out_be32(priv-msg_regs-oddatr, data);
+   out_be32(priv-msg_regs-odmr, 0x0001);
+   break;
+   }
 
return 0;
 }
@@ -342,11 +370,22 @@ rio_hw_add_outb_message(struct rio_mport
memset(priv-msg_tx_ring.virt_buffer[priv-msg_tx_ring.tx_slot]
+ len, 0, RIO_MAX_MSG_SIZE - len);
 
-   /* Set mbox field for message */
-   desc-dport = mbox  0x3;
+   switch (mport-phy_type) {
+   case RIO_PHY_PARALLEL:
+   /* Set mbox field for message */
+   desc-dport = mbox  0x3;
 
-   /* Enable EOMI interrupt, set priority, and set destid */
-   desc-dattr = 0x2800 | (rdev-destid  2);
+   /* Enable EOMI interrupt, set priority, and set destid */
+   desc-dattr = 0x2800 | (rdev-destid  2);
+   break;
+   case RIO_PHY_SERIAL:
+   /* Set mbox field for message, and set destid */
+   desc-dport = (rdev-destid  16) | (mbox  0x3);
+
+   /* Enable EOMI interrupt and priority */
+   desc-dattr = 0x2800;
+   break;
+   }
 
/* Set transfer size aligned to next power of 2 (in double words) */
desc-dwcnt = is_power_of_2(len) ? len : 1  get_bitmask_order(len);
@@ -920,6 +959,7 @@ int fsl_rio_setup(struct of_device *dev)
const u32 *dt_range, *cell;
struct resource regs;
int rlen;
+   u32 ccsr;
u64 law_start, law_size;
int paw, aw, sw;
 
@@ -1008,6 +1048,14 @@ int fsl_rio_setup(struct of_device *dev)
 
priv-regs_win = ioremap(regs.start, regs.end - regs.start + 1);
 
+   /* Probe the master port phy type */
+   ccsr = in_be32(priv-regs_win + RIO_CCSR);
+   port-phy_type = (ccsr  1) ? RIO_PHY_SERIAL : RIO_PHY_PARALLEL;
+   dev_info(dev-dev, RapidIO PHY type: %s\n,
+   (port-phy_type == RIO_PHY_PARALLEL) ? parallel :
+   ((port-phy_type == RIO_PHY_SERIAL) ? serial :
+unknown));
+
port-sys_size = (in_be32((priv-regs_win + RIO_PEF_CAR))
 RIO_PEF_CTLS)  4;
dev_info(dev-dev, RapidIO Common Transport System size: %d\n,
@@ -1017,8 +1065,13 @@ int fsl_rio_setup(struct of_device *dev)

[patch 12/24] rapidio: change the kernel configurated RapidIO system size to auto-probing

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

The RapidIO system size will auto probe in RIO setup.  The route table and
rionet_active in rionet.c are changed to be allocated dynamically according
the system size.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c |6 +++
 drivers/net/rionet.c  |   16 -
 drivers/rapidio/Kconfig   |8 
 drivers/rapidio/rio-scan.c|   55 ++--
 drivers/rapidio/rio-sysfs.c   |3 +
 drivers/rapidio/rio.c |2 -
 drivers/rapidio/rio.h |9 +
 include/linux/rio.h   |   14 
 8 files changed, 71 insertions(+), 42 deletions(-)

diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-change-the-kernel-configurated-rapidio-system-size-to-auto-probing
 arch/powerpc/sysdev/fsl_rio.c
--- 
a/arch/powerpc/sysdev/fsl_rio.c~rapidio-change-the-kernel-configurated-rapidio-system-size-to-auto-probing
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -1007,6 +1007,12 @@ int fsl_rio_setup(struct of_device *dev)
rio_register_mport(port);
 
priv-regs_win = ioremap(regs.start, regs.end - regs.start + 1);
+
+   port-sys_size = (in_be32((priv-regs_win + RIO_PEF_CAR))
+RIO_PEF_CTLS)  4;
+   dev_info(dev-dev, RapidIO Common Transport System size: %d\n,
+   port-sys_size ? 65536 : 256);
+
priv-atmu_regs = (struct rio_atmu_regs *)(priv-regs_win
+ RIO_ATMU_REGS_OFFSET);
priv-maint_atmu_regs = priv-atmu_regs + 1;
diff -puN 
drivers/net/rionet.c~rapidio-change-the-kernel-configurated-rapidio-system-size-to-auto-probing
 drivers/net/rionet.c
--- 
a/drivers/net/rionet.c~rapidio-change-the-kernel-configurated-rapidio-system-size-to-auto-probing
+++ a/drivers/net/rionet.c
@@ -77,7 +77,7 @@ static int rionet_capable = 1;
  * could be made into a hash table to save memory depending
  * on system trade-offs.
  */
-static struct rio_dev *rionet_active[RIO_MAX_ROUTE_ENTRIES];
+static struct rio_dev **rionet_active;
 
 #define is_rionet_capable(pef, src_ops, dst_ops)   \
((pef  RIO_PEF_INB_MBOX) \
@@ -195,7 +195,8 @@ static int rionet_start_xmit(struct sk_b
}
 
if (eth-h_dest[0]  0x01) {
-   for (i = 0; i  RIO_MAX_ROUTE_ENTRIES; i++)
+   for (i = 0; i  RIO_MAX_ROUTE_ENTRIES(rnet-mport-sys_size);
+   i++)
if (rionet_active[i])
rionet_queue_tx_msg(skb, ndev,
rionet_active[i]);
@@ -385,6 +386,8 @@ static void rionet_remove(struct rio_dev
struct net_device *ndev = NULL;
struct rionet_peer *peer, *tmp;
 
+   free_pages((unsigned long)rionet_active, rdev-net-hport-sys_size ?
+   __ilog2(sizeof(void *)) + 4 : 0);
unregister_netdev(ndev);
kfree(ndev);
 
@@ -443,6 +446,15 @@ static int rionet_setup_netdev(struct ri
goto out;
}
 
+   rionet_active = (struct rio_dev **)__get_free_pages(GFP_KERNEL,
+   mport-sys_size ? __ilog2(sizeof(void *)) + 4 : 0);
+   if (!rionet_active) {
+   rc = -ENOMEM;
+   goto out;
+   }
+   memset((void *)rionet_active, 0, sizeof(void *) *
+   RIO_MAX_ROUTE_ENTRIES(mport-sys_size));
+
/* Set up private area */
rnet = (struct rionet_private *)ndev-priv;
rnet-mport = mport;
diff -puN 
drivers/rapidio/Kconfig~rapidio-change-the-kernel-configurated-rapidio-system-size-to-auto-probing
 drivers/rapidio/Kconfig
--- 
a/drivers/rapidio/Kconfig~rapidio-change-the-kernel-configurated-rapidio-system-size-to-auto-probing
+++ a/drivers/rapidio/Kconfig
@@ -1,14 +1,6 @@
 #
 # RapidIO configuration
 #
-config RAPIDIO_8_BIT_TRANSPORT
-   bool 8-bit transport addressing
-   depends on RAPIDIO
-   ---help---
- By default, the kernel assumes a 16-bit addressed RapidIO
- network. By selecting this option, the kernel will support
- an 8-bit addressed network.
-
 config RAPIDIO_DISC_TIMEOUT
int Discovery timeout duration (seconds)
depends on RAPIDIO
diff -puN 
drivers/rapidio/rio-scan.c~rapidio-change-the-kernel-configurated-rapidio-system-size-to-auto-probing
 drivers/rapidio/rio-scan.c
--- 
a/drivers/rapidio/rio-scan.c~rapidio-change-the-kernel-configurated-rapidio-system-size-to-auto-probing
+++ a/drivers/rapidio/rio-scan.c
@@ -73,7 +73,7 @@ static u16 rio_get_device_id(struct rio_
 
rio_mport_read_config_32(port, destid, hopcount, RIO_DID_CSR, result);
 
-   return RIO_GET_DID(result);
+   return RIO_GET_DID(port-sys_size, result);
 }
 
 /**
@@ -88,7 +88,7 @@ static u16 rio_get_device_id(struct rio_
 static void rio_set_device_id(struct 

[patch 03/24] drivers/block/viodasd.c: Use FIELD_SIZEOF

2008-03-28 Thread akpm
From: Julia Lawall [EMAIL PROTECTED]

Robert P.J. Day proposed to use the macro FIELD_SIZEOF in replace of code
that matches its definition.

The modification was made using the following semantic patch
(http://www.emn.fr/x-info/coccinelle/)

// smpl
@haskernel@
@@

#include linux/kernel.h

@depends on haskernel@
type t;
identifier f;
@@

- (sizeof(((t*)0)-f))
+ FIELD_SIZEOF(t, f)

@depends on haskernel@
type t;
identifier f;
@@

- sizeof(((t*)0)-f)
+ FIELD_SIZEOF(t, f)
// /smpl

Signed-off-by: Julia Lawall [EMAIL PROTECTED]
Cc: Jens Axboe [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Acked-by: Stephen Rothwell [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/block/viodasd.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff -puN drivers/block/viodasd.c~drivers-block-viodasdc-use-field_sizeof 
drivers/block/viodasd.c
--- a/drivers/block/viodasd.c~drivers-block-viodasdc-use-field_sizeof
+++ a/drivers/block/viodasd.c
@@ -69,7 +69,7 @@ MODULE_LICENSE(GPL);
 enum {
PARTITION_SHIFT = 3,
MAX_DISKNO = HVMAXARCHITECTEDVIRTUALDISKS,
-   MAX_DISK_NAME = sizeof(((struct gendisk *)0)-disk_name)
+   MAX_DISK_NAME = FIELD_SIZEOF(struct gendisk, disk_name)
 };
 
 static DEFINE_SPINLOCK(viodasd_spinlock);
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 05/24] ppc: remove redundant display of free swap space in show_mem()

2008-03-28 Thread akpm
From: Johannes Weiner [EMAIL PROTECTED]

show_mem() has no need to print the amount of free swap space manually because
show_free_areas() does this already and is called by the former.

The two outputs only differ in text formatting:

  printk(Free swap  = %lukB\n, ...);
  printk(Free swap:   %6ldkB\n, ...);

Signed-off-by: Johannes Weiner [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/ppc/mm/init.c |1 -
 1 file changed, 1 deletion(-)

diff -puN 
arch/ppc/mm/init.c~ppc-remove-redundant-display-of-free-swap-space-in-show_mem 
arch/ppc/mm/init.c
--- 
a/arch/ppc/mm/init.c~ppc-remove-redundant-display-of-free-swap-space-in-show_mem
+++ a/arch/ppc/mm/init.c
@@ -109,7 +109,6 @@ void show_mem(void)
 
printk(Mem-info:\n);
show_free_areas();
-   printk(Free swap:   %6ldkB\n, nr_swap_pages(PAGE_SHIFT-10));
i = max_mapnr;
while (i--  0) {
total++;
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 04/24] powerpc: remove redundant display of free swap space in show_mem()

2008-03-28 Thread akpm
From: Johannes Weiner [EMAIL PROTECTED]

show_mem() has no need to print the amount of free swap space manually because
show_free_areas() does this already and is called by the former.

The two outputs only differ in text formatting:

  printk(Free swap  = %lukB\n, ...);
  printk(Free swap:   %6ldkB\n, ...);

Signed-off-by: Johannes Weiner [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/mm/mem.c |1 -
 1 file changed, 1 deletion(-)

diff -puN 
arch/powerpc/mm/mem.c~powerpc-remove-redundant-display-of-free-swap-space-in-show_mem
 arch/powerpc/mm/mem.c
--- 
a/arch/powerpc/mm/mem.c~powerpc-remove-redundant-display-of-free-swap-space-in-show_mem
+++ a/arch/powerpc/mm/mem.c
@@ -175,7 +175,6 @@ void show_mem(void)
 
printk(Mem-info:\n);
show_free_areas();
-   printk(Free swap:   %6ldkB\n, nr_swap_pages(PAGE_SHIFT-10));
for_each_online_pgdat(pgdat) {
unsigned long flags;
pgdat_resize_lock(pgdat, flags);
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 22/24] rapidio: change RapidIO doorbell source and target ID field to 16-bit

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Change RapidIO doorbell source and target ID field to 16-bit for
support large system size, which max rio devid is 65535.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c |8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-change-rapidio-doorbell-source-and-target-id-field-to-16-bit
 arch/powerpc/sysdev/fsl_rio.c
--- 
a/arch/powerpc/sysdev/fsl_rio.c~rapidio-change-rapidio-doorbell-source-and-target-id-field-to-16-bit
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -75,13 +75,13 @@
 #define DOORBELL_DSR_TE0x0080
 #define DOORBELL_DSR_QFI   0x0010
 #define DOORBELL_DSR_DIQI  0x0001
-#define DOORBELL_TID_OFFSET0x03
-#define DOORBELL_SID_OFFSET0x05
+#define DOORBELL_TID_OFFSET0x02
+#define DOORBELL_SID_OFFSET0x04
 #define DOORBELL_INFO_OFFSET   0x06
 
 #define DOORBELL_MESSAGE_SIZE  0x08
-#define DBELL_SID(x)   (*(u8 *)(x + DOORBELL_SID_OFFSET))
-#define DBELL_TID(x)   (*(u8 *)(x + DOORBELL_TID_OFFSET))
+#define DBELL_SID(x)   (*(u16 *)(x + DOORBELL_SID_OFFSET))
+#define DBELL_TID(x)   (*(u16 *)(x + DOORBELL_TID_OFFSET))
 #define DBELL_INF(x)   (*(u16 *)(x + DOORBELL_INFO_OFFSET))
 
 struct rio_atmu_regs {
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 08/24] rapidio: add RapidIO option to kernel configuration

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/Kconfig|   13 +
 arch/powerpc/platforms/86xx/Kconfig |1 +
 2 files changed, 14 insertions(+)

diff -puN 
arch/powerpc/Kconfig~rapidio-add-rapidio-option-to-kernel-configuration 
arch/powerpc/Kconfig
--- a/arch/powerpc/Kconfig~rapidio-add-rapidio-option-to-kernel-configuration
+++ a/arch/powerpc/Kconfig
@@ -571,6 +571,19 @@ source drivers/pcmcia/Kconfig
 
 source drivers/pci/hotplug/Kconfig
 
+config HAS_RAPIDIO
+   bool
+   default n
+
+config RAPIDIO
+   bool RapidIO support
+   depends on HAS_RAPIDIO
+   help
+ If you say Y here, the kernel will include drivers and
+ infrastructure code to support RapidIO interconnect devices.
+
+source drivers/rapidio/Kconfig
+
 endmenu
 
 menu Advanced setup
diff -puN 
arch/powerpc/platforms/86xx/Kconfig~rapidio-add-rapidio-option-to-kernel-configuration
 arch/powerpc/platforms/86xx/Kconfig
--- 
a/arch/powerpc/platforms/86xx/Kconfig~rapidio-add-rapidio-option-to-kernel-configuration
+++ a/arch/powerpc/platforms/86xx/Kconfig
@@ -8,6 +8,7 @@ config MPC8641_HPCN
select PPC_I8259
select DEFAULT_UIMAGE
select FSL_ULI1575
+   select HAS_RAPIDIO
help
  This option enables support for the MPC8641 HPCN board.
 
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 09/24] rapidio: move include/asm-ppc/rio.h to include/asm-powerpc/rio.h

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 include/asm-powerpc/rio.h |   18 ++
 include/asm-ppc/rio.h |   18 --
 2 files changed, 18 insertions(+), 18 deletions(-)

diff -puN /dev/null include/asm-powerpc/rio.h
--- /dev/null
+++ a/include/asm-powerpc/rio.h
@@ -0,0 +1,18 @@
+/*
+ * RapidIO architecture support
+ *
+ * Copyright 2005 MontaVista Software, Inc.
+ * Matt Porter [EMAIL PROTECTED]
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ */
+
+#ifndef ASM_PPC_RIO_H
+#define ASM_PPC_RIO_H
+
+extern void platform_rio_init(void);
+
+#endif /* ASM_PPC_RIO_H */
diff -puN 
include/asm-ppc/rio.h~rapidio-move-include-asm-ppc-rioh-to-include-asm-powerpc-rioh
 /dev/null
--- a/include/asm-ppc/rio.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * RapidIO architecture support
- *
- * Copyright 2005 MontaVista Software, Inc.
- * Matt Porter [EMAIL PROTECTED]
- *
- * This program is free software; you can redistribute  it and/or modify it
- * under  the terms of  the GNU General  Public License as published by the
- * Free Software Foundation;  either version 2 of the  License, or (at your
- * option) any later version.
- */
-
-#ifndef ASM_PPC_RIO_H
-#define ASM_PPC_RIO_H
-
-extern void platform_rio_init(void);
-
-#endif /* ASM_PPC_RIO_H */
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 19/24] rapidio: add FSL RapidIO controller memory ops functions

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Add FSL RapidIO controller (MPC85xx, MPC86xx) memory operation functions,
which include map inbound/outbound window and unmap incound/outbound window.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c |  204 
 1 file changed, 204 insertions(+)

diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-add-fsl-rapidio-controller-memory-ops-functions
 arch/powerpc/sysdev/fsl_rio.c
--- 
a/arch/powerpc/sysdev/fsl_rio.c~rapidio-add-fsl-rapidio-controller-memory-ops-functions
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -30,6 +30,8 @@
 #define IRQ_RIO_TX(m)  (((struct rio_priv *)(m-priv))-txirq)
 #define IRQ_RIO_RX(m)  (((struct rio_priv *)(m-priv))-rxirq)
 
+#define IS_64BIT_RES ((sizeof(resource_size_t) == 8) ? 1 : 0)
+
 #define RIO_ATMU_REGS_OFFSET   0x10c00
 #define RIO_P_MSG_REGS_OFFSET  0x11000
 #define RIO_S_MSG_REGS_OFFSET  0x13000
@@ -39,6 +41,15 @@
 #define RIO_ISR_AACR_AA0x1 /* Accept All ID */
 #define RIO_MAINT_WIN_SIZE 0x40
 #define RIO_DBELL_WIN_SIZE 0x1000
+#define RIO_MAX_INB_ATMU   4
+#define RIO_MAX_OUTB_ATMU  8
+#define RIO_INB_ATMU_REGS_OFFSET   0x10de0
+#define RIO_ATMU_EN_MASK   0x8000
+
+#define RIO_NREAD  0x4
+#define RIO_NWRITE 0x4
+#define RIO_NWRITE_R   0x5
+#define RIO_NREAD_R0x5
 
 #define RIO_MSG_OMR_MUI0x0002
 #define RIO_MSG_OSR_TE 0x0080
@@ -82,6 +93,15 @@ struct rio_atmu_regs {
u32 pad3[3];
 };
 
+struct rio_inb_atmu_regs {
+   u32 riwtar;
+   u32 pad1;
+   u32 riwbar;
+   u32 pad2;
+   u32 riwar;
+   u32 pad3[3];
+};
+
 struct rio_msg_regs {
u32 omr;
u32 osr;
@@ -334,6 +354,182 @@ fsl_rio_config_write(struct rio_mport *m
 }
 
 /**
+ * fsl_rio_map_inb_mem -- Mapping inbound memory region.
+ * @lstart: Local memory space start address.
+ * @rstart: RapidIO space start address.
+ * @size: The mapping region size.
+ * @flags: Flags for mapping. 0 for using default flags.
+ *
+ * Return: 0 -- Success.
+ *
+ * This function will create the inbound mapping
+ * from rstart to lstart.
+ */
+static int fsl_rio_map_inb_mem(struct rio_mport *mport, resource_size_t lstart,
+   resource_size_t rstart, resource_size_t size, u32 flags)
+{
+   int i;
+   struct rio_priv *priv = mport-priv;
+   struct rio_inb_atmu_regs __iomem *inbatmu = (struct rio_inb_atmu_regs *)
+   (priv-regs_win + RIO_INB_ATMU_REGS_OFFSET) - 1;
+   int size_ffs;
+   resource_size_t align;
+
+   if (flags == 0)
+   flags = (RIO_NREAD_R  4) | RIO_NWRITE_R;
+
+   align = (size  0x1000) ? 0x1000 : 1  (__ilog2(size - 1) + 1);
+
+   /* Align the size */
+   if ((lstart + size)  (_ALIGN_DOWN(lstart, align) + align)) {
+   size_ffs = __ffs(_ALIGN_DOWN(lstart + size - 1, align));
+   size = 1  (size_ffs + (((_ALIGN_DOWN(lstart, 1  size_ffs) +
+   (1  size_ffs))  (lstart + size)) ? 1 : 0));
+   } else
+   size = align;
+
+   if ((lstart  (size - 1)) != (rstart  (size - 1))) {
+   dev_err(mport-dev, The local address 0x%x can not be aligned 
+   to the same size 0x%x with the RapidIO space 
+   address 0x%x!\n, lstart, size, rstart);
+   return -EINVAL;
+   }
+
+   /* Search for free inbound ATMU */
+   for (i = 1;
+   (i = RIO_MAX_INB_ATMU)  (inbatmu-riwar  RIO_ATMU_EN_MASK);
+   i++, inbatmu--)
+   ;
+
+   if (i  RIO_MAX_INB_ATMU) {
+   dev_err(mport-dev, No free inbound ATMU!\n);
+   return -EBUSY;
+   }
+   out_be32(inbatmu-riwtar, ((IS_64BIT_RES ? (lstart  32)
+0xf : 0)  20) | ((lstart  12)  0xf));
+   out_be32(inbatmu-riwbar, ((IS_64BIT_RES ? (rstart  32)
+0x3 : 0)  20) | ((rstart  12)  0xf));
+   out_be32(inbatmu-riwar, 0x8000 | (0xf  20)
+   | ((flags  0xff)  12)
+   | (__ilog2(size) - 1));
+   return 0;
+}
+
+/**
+ * fsl_rio_map_outb_mem -- Mapping outbound memory region.
+ * @lstart: Local memory space start address.
+ * @rstart: RapidIO space start address.
+ * @size: The mapping region size.
+ * @tid: The target RapidIO device id.
+ * @flags: Flags for mapping. 0 for using default flags.
+ *
+ * Return: 0 -- Success.
+ *
+ * This function will create the outbound mapping
+ * from lstart to rstart.
+ */
+static int fsl_rio_map_outb_mem(struct rio_mport *mport, resource_size_t 
lstart,
+   resource_size_t rstart, resource_size_t size,
+   u16 tid, u32 flags)
+{
+   int i;
+   struct rio_priv *priv = mport-priv;
+   struct 

[patch 20/24] rapidio: add the RapidIO master port maintance and doorbell window to space resources

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Add the RapidIO master port maintance and doorbell IO windows to RIO space
resources.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c |   26 +-
 include/linux/rio.h   |1 +
 2 files changed, 22 insertions(+), 5 deletions(-)

diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-add-the-rapidio-master-port-maintance-and-doorbell-window-to-space-resources
 arch/powerpc/sysdev/fsl_rio.c
--- 
a/arch/powerpc/sysdev/fsl_rio.c~rapidio-add-the-rapidio-master-port-maintance-and-doorbell-window-to-space-resources
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -192,6 +192,8 @@ struct rio_priv {
int bellirq;
int txirq;
int rxirq;
+   struct resource maint_res;
+   struct resource dbell_res;
 };
 
 /**
@@ -1362,15 +1364,29 @@ int fsl_rio_setup(struct of_device *dev)
out_be32((priv-regs_win + RIO_ISR_AACR), RIO_ISR_AACR_AA);
 
/* Configure maintenance transaction window */
-   out_be32(priv-maint_atmu_regs-rowbar, 0x000c);
-   out_be32(priv-maint_atmu_regs-rowar, 0x80077015);
+   rio_init_io_res(priv-maint_res, law_start, RIO_MAINT_WIN_SIZE,
+   maint_win, RIO_RESOURCE_MAINT);
+   rc = rio_request_io_region(port, priv-maint_res);
+   if (rc) {
+   dev_err(dev-dev, request maint window error!\n);
+   goto err;
+   }
+   out_be32(priv-maint_atmu_regs-rowbar, (law_start  12)  0xff);
+   out_be32(priv-maint_atmu_regs-rowar, 0x80077000
+   | (__ilog2(RIO_MAINT_WIN_SIZE) - 1));
 
priv-maint_win = ioremap(law_start, RIO_MAINT_WIN_SIZE);
 
/* Configure outbound doorbell window */
-   out_be32(priv-dbell_atmu_regs-rowbar, 0x000c0400);
-   out_be32(priv-dbell_atmu_regs-rowar, 0x8004200b);
-   fsl_rio_doorbell_init(port);
+   rio_init_io_res(priv-dbell_res, law_start + RIO_MAINT_WIN_SIZE,
+   RIO_DBELL_WIN_SIZE, dbell_win, RIO_RESOURCE_DOORBELL);
+   out_be32(priv-dbell_atmu_regs-rowbar, (priv-dbell_res.start  12)
+0xff);
+   out_be32(priv-dbell_atmu_regs-rowar, 0x80042000
+   | (__ilog2(RIO_DBELL_WIN_SIZE) - 1));
+   rc = fsl_rio_doorbell_init(port);
+   if (rc)
+   goto err;
 
return 0;
 err:
diff -puN 
include/linux/rio.h~rapidio-add-the-rapidio-master-port-maintance-and-doorbell-window-to-space-resources
 include/linux/rio.h
--- 
a/include/linux/rio.h~rapidio-add-the-rapidio-master-port-maintance-and-doorbell-window-to-space-resources
+++ a/include/linux/rio.h
@@ -257,6 +257,7 @@ struct rio_ops {
 #define RIO_RESOURCE_MEM   0x0100
 #define RIO_RESOURCE_DOORBELL  0x0200
 #define RIO_RESOURCE_MAILBOX   0x0400
+#define RIO_RESOURCE_MAINT 0x0800
 
 #define RIO_RESOURCE_CACHEABLE 0x0001
 #define RIO_RESOURCE_PCI   0x0002
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 07/24] rapidio: change RIO function mpc85xx_ to fsl_

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

The driver is also fit for Freescale MPC8641 processor.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c |   80 
 1 file changed, 40 insertions(+), 40 deletions(-)

diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-change-rio-function-mpc85xx_-to-fsl_ 
arch/powerpc/sysdev/fsl_rio.c
--- a/arch/powerpc/sysdev/fsl_rio.c~rapidio-change-rio-function-mpc85xx_-to-fsl_
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -1,5 +1,5 @@
 /*
- * MPC85xx RapidIO support
+ * Freescale MPC85xx/MPC86xx RapidIO support
  *
  * Copyright 2005 MontaVista Software, Inc.
  * Matt Porter [EMAIL PROTECTED]
@@ -145,7 +145,7 @@ static struct rio_msg_rx_ring {
 } msg_rx_ring;
 
 /**
- * mpc85xx_rio_doorbell_send - Send a MPC85xx doorbell message
+ * fsl_rio_doorbell_send - Send a MPC85xx doorbell message
  * @index: ID of RapidIO interface
  * @destid: Destination ID of target device
  * @data: 16-bit info field of RapidIO doorbell message
@@ -153,9 +153,9 @@ static struct rio_msg_rx_ring {
  * Sends a MPC85xx doorbell message. Returns %0 on success or
  * %-EINVAL on failure.
  */
-static int mpc85xx_rio_doorbell_send(int index, u16 destid, u16 data)
+static int fsl_rio_doorbell_send(int index, u16 destid, u16 data)
 {
-   pr_debug(mpc85xx_doorbell_send: index %d destid %4.4x data %4.4x\n,
+   pr_debug(fsl_doorbell_send: index %d destid %4.4x data %4.4x\n,
 index, destid, data);
out_be32((void *)dbell_atmu_regs-rowtar, destid  22);
out_be16((void *)(dbell_win), data);
@@ -164,7 +164,7 @@ static int mpc85xx_rio_doorbell_send(int
 }
 
 /**
- * mpc85xx_local_config_read - Generate a MPC85xx local config space read
+ * fsl_local_config_read - Generate a MPC85xx local config space read
  * @index: ID of RapdiIO interface
  * @offset: Offset into configuration space
  * @len: Length (in bytes) of the maintenance transaction
@@ -173,9 +173,9 @@ static int mpc85xx_rio_doorbell_send(int
  * Generates a MPC85xx local configuration space read. Returns %0 on
  * success or %-EINVAL on failure.
  */
-static int mpc85xx_local_config_read(int index, u32 offset, int len, u32 * 
data)
+static int fsl_local_config_read(int index, u32 offset, int len, u32 *data)
 {
-   pr_debug(mpc85xx_local_config_read: index %d offset %8.8x\n, index,
+   pr_debug(fsl_local_config_read: index %d offset %8.8x\n, index,
 offset);
*data = in_be32((void *)(regs_win + offset));
 
@@ -183,7 +183,7 @@ static int mpc85xx_local_config_read(int
 }
 
 /**
- * mpc85xx_local_config_write - Generate a MPC85xx local config space write
+ * fsl_local_config_write - Generate a MPC85xx local config space write
  * @index: ID of RapdiIO interface
  * @offset: Offset into configuration space
  * @len: Length (in bytes) of the maintenance transaction
@@ -192,10 +192,10 @@ static int mpc85xx_local_config_read(int
  * Generates a MPC85xx local configuration space write. Returns %0 on
  * success or %-EINVAL on failure.
  */
-static int mpc85xx_local_config_write(int index, u32 offset, int len, u32 data)
+static int fsl_local_config_write(int index, u32 offset, int len, u32 data)
 {
pr_debug
-   (mpc85xx_local_config_write: index %d offset %8.8x data %8.8x\n,
+   (fsl_local_config_write: index %d offset %8.8x data %8.8x\n,
 index, offset, data);
out_be32((void *)(regs_win + offset), data);
 
@@ -203,7 +203,7 @@ static int mpc85xx_local_config_write(in
 }
 
 /**
- * mpc85xx_rio_config_read - Generate a MPC85xx read maintenance transaction
+ * fsl_rio_config_read - Generate a MPC85xx read maintenance transaction
  * @index: ID of RapdiIO interface
  * @destid: Destination ID of transaction
  * @hopcount: Number of hops to target device
@@ -215,13 +215,13 @@ static int mpc85xx_local_config_write(in
  * success or %-EINVAL on failure.
  */
 static int
-mpc85xx_rio_config_read(int index, u16 destid, u8 hopcount, u32 offset, int 
len,
+fsl_rio_config_read(int index, u16 destid, u8 hopcount, u32 offset, int len,
u32 * val)
 {
u8 *data;
 
pr_debug
-   (mpc85xx_rio_config_read: index %d destid %d hopcount %d offset 
%8.8x len %d\n,
+   (fsl_rio_config_read: index %d destid %d hopcount %d offset %8.8x 
len %d\n,
 index, destid, hopcount, offset, len);
out_be32((void *)maint_atmu_regs-rowtar,
 (destid  22) | (hopcount  12) | ((offset  ~0x3)  9));
@@ -243,7 +243,7 @@ mpc85xx_rio_config_read(int index, u16 d
 }
 
 /**
- * mpc85xx_rio_config_write - Generate a MPC85xx write maintenance transaction
+ * fsl_rio_config_write - Generate a MPC85xx write maintenance transaction
  * @index: ID of RapdiIO interface
  * @destid: Destination ID of transaction
  * @hopcount: Number of hops to target device
@@ -255,12 +255,12 @@ mpc85xx_rio_config_read(int index, u16 d
  * success 

[patch 21/24] rapidio: add RapidIO proc fs for memory mapping debugging

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Get RapidIO space resource by catting /proc/riores.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/rapidio/Kconfig |8 ++
 drivers/rapidio/rio.c   |  121 ++
 2 files changed, 129 insertions(+)

diff -puN 
drivers/rapidio/Kconfig~rapidio-add-rapidio-proc-fs-for-memory-mapping-debugging
 drivers/rapidio/Kconfig
--- 
a/drivers/rapidio/Kconfig~rapidio-add-rapidio-proc-fs-for-memory-mapping-debugging
+++ a/drivers/rapidio/Kconfig
@@ -9,4 +9,12 @@ config RAPIDIO_DISC_TIMEOUT
  Amount of time a discovery node waits for a host to complete
  enumeration before giving up.
 
+config RAPIDIO_PROC_FS
+   bool I/O and Memory resource debug
+   depends on RAPIDIO  PROC_FS
+   default y
+   ---help---
+ Enable this option, it will create a /proc/riores node for
+ monitoring the RapidIO I/O and Memory resource.
+
 source drivers/rapidio/sallocator/Kconfig
diff -puN 
drivers/rapidio/rio.c~rapidio-add-rapidio-proc-fs-for-memory-mapping-debugging 
drivers/rapidio/rio.c
--- 
a/drivers/rapidio/rio.c~rapidio-add-rapidio-proc-fs-for-memory-mapping-debugging
+++ a/drivers/rapidio/rio.c
@@ -31,6 +31,9 @@
 #include linux/spinlock.h
 #include linux/slab.h
 #include linux/interrupt.h
+#include linux/seq_file.h
+#include linux/fs.h
+#include linux/proc_fs.h
 #include linux/dma-mapping.h
 #include linux/hardirq.h
 
@@ -872,3 +875,121 @@ EXPORT_SYMBOL_GPL(rio_request_inb_mbox);
 EXPORT_SYMBOL_GPL(rio_release_inb_mbox);
 EXPORT_SYMBOL_GPL(rio_request_outb_mbox);
 EXPORT_SYMBOL_GPL(rio_release_outb_mbox);
+
+#ifdef CONFIG_RAPIDIO_PROC_FS
+enum { MAX_IORES_LEVEL = 5 };
+
+struct riors {
+   struct rio_mport *mp;
+   int res;
+   struct resource *p;
+} riomres;
+
+static void *r_next(struct seq_file *m, void *v, loff_t *pos)
+{
+   struct resource *p = v;
+   struct riors *rs = m-private;
+
+   (*pos)++;
+   if (p-child)
+   return p-child;
+   while (!p-sibling  p-parent)
+   p = p-parent;
+   if (p-sibling)
+   return p-sibling;
+   else {
+   rs-res++;
+   if (rs-res = RIO_MAX_MPORT_RESOURCES) {
+   rs-mp = list_entry(rs-mp-node.next, struct rio_mport,
+   node);
+   rs-res = 0;
+   if (rs-mp-node == rio_mports)
+   return NULL;
+   }
+   seq_printf(m, %2d: , rs-res);
+   rs-p = rs-mp-riores[rs-res];
+   p = rs-p;
+
+   return p;
+   }
+}
+
+static void *r_start(struct seq_file *m, loff_t *pos)
+{
+   struct riors *rs = m-private;
+   struct resource *p;
+
+   if (*pos) {
+   *pos = 0;
+   return NULL;
+   }
+
+   rs-mp = list_entry(rio_mports.next, struct rio_mport, node);
+   rs-res = -1;
+   rs-p = rs-mp-iores;
+   p = rs-p;
+
+   seq_printf(m, IO: );
+
+   return p;
+}
+
+static void r_stop(struct seq_file *m, void *v)
+{
+}
+
+static int r_show(struct seq_file *m, void *v)
+{
+   struct riors *rs = m-private;
+   struct resource *root = rs-p;
+   struct resource *r = v, *p;
+   int width = root-end  0x1 ? 4 : 8;
+   int depth;
+
+   for (depth = 0, p = r; p-parent  depth  MAX_IORES_LEVEL; depth++,
+   p = p-parent)
+   if (p == root)
+   break;
+   seq_printf(m, %*s%0*llx-%0*llx : %s\n,
+   depth * 2, ,
+   width, (unsigned long long) r-start,
+   width, (unsigned long long) r-end,
+   r-name ? r-name : BAD);
+   return 0;
+}
+
+static const struct seq_operations resource_op = {
+   .start  = r_start,
+   .next   = r_next,
+   .stop   = r_stop,
+   .show   = r_show,
+};
+
+static int riores_open(struct inode *inode, struct file *file)
+{
+   int res = seq_open(file, resource_op);
+   if (!res) {
+   struct seq_file *m = file-private_data;
+   m-private = riomres;
+   }
+   return res;
+}
+
+static const struct file_operations proc_riores_operations = {
+   .open   = riores_open,
+   .read   = seq_read,
+   .llseek = seq_lseek,
+   .release= seq_release,
+};
+
+static int __init rioresources_init(void)
+{
+   struct proc_dir_entry *entry;
+
+   entry = create_proc_entry(riores, 0, NULL);
+   if (entry)
+   entry-proc_fops = proc_riores_operations;
+   return 0;
+}
+__initcall(rioresources_init);
+#endif
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 23/24] rapidio: add the memory mapping support in rionet driver

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

The user can select memory mapping mode or message mode in CONFIG.  It is also
an example to how-to use memory mapping driver for RapidIO.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 drivers/net/Kconfig  |   10 +
 drivers/net/rionet.c |  324 +
 2 files changed, 334 insertions(+)

diff -puN 
drivers/net/Kconfig~rapidio-add-the-memory-mapping-support-in-rionet-driver 
drivers/net/Kconfig
--- 
a/drivers/net/Kconfig~rapidio-add-the-memory-mapping-support-in-rionet-driver
+++ a/drivers/net/Kconfig
@@ -2719,6 +2719,16 @@ config RIONET_RX_SIZE
depends on RIONET
default 128
 
+config RIONET_MEMMAP
+   bool Use memory map instead of message
+   depends on RIONET
+   default n
+
+config RIONET_DMA
+   bool Use DMA for memory mapping data transfer
+   depends on RIONET_MEMMAP  FSL_DMA
+   default y
+
 config FDDI
bool FDDI driver support
depends on (PCI || EISA || TC)
diff -puN 
drivers/net/rionet.c~rapidio-add-the-memory-mapping-support-in-rionet-driver 
drivers/net/rionet.c
--- 
a/drivers/net/rionet.c~rapidio-add-the-memory-mapping-support-in-rionet-driver
+++ a/drivers/net/rionet.c
@@ -1,6 +1,13 @@
 /*
  * rionet - Ethernet driver over RapidIO messaging services
  *
+ * Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved.
+ * Author: Zhang Wei, [EMAIL PROTECTED], Jun 2007
+ *
+ * Changelog:
+ * Jun 2007 Zhang Wei [EMAIL PROTECTED]
+ * - Added the support to RapidIO memory driver. 2007.
+ *
  * Copyright 2005 MontaVista Software, Inc.
  * Matt Porter [EMAIL PROTECTED]
  *
@@ -8,6 +15,7 @@
  * under  the terms of  the GNU General  Public License as published by the
  * Free Software Foundation;  either version 2 of the  License, or (at your
  * option) any later version.
+ *
  */
 
 #include linux/module.h
@@ -23,6 +31,7 @@
 #include linux/skbuff.h
 #include linux/crc32.h
 #include linux/ethtool.h
+#include linux/dmaengine.h
 
 #define DRV_NAMErionet
 #define DRV_VERSION 0.2
@@ -40,13 +49,47 @@ MODULE_LICENSE(GPL);
 NETIF_MSG_TX_ERR)
 
 #define RIONET_DOORBELL_JOIN   0x1000
+#ifdef CONFIG_RIONET_MEMMAP
+#define RIONET_DOORBELL_SEND   0x1001
+#define RIONET_DOORBELL_LEAVE  0x1002
+#else
 #define RIONET_DOORBELL_LEAVE  0x1001
+#endif
 
 #define RIONET_MAILBOX 0
 
 #define RIONET_TX_RING_SIZECONFIG_RIONET_TX_SIZE
 #define RIONET_RX_RING_SIZECONFIG_RIONET_RX_SIZE
 
+#define ERR(fmt, arg...) \
+   printk(KERN_ERR ERROR %s - %s:  fmt,  __FILE__, __func__, ## arg)
+
+#ifdef CONFIG_RIONET_MEMMAP
+/* Definitions for rionet memory map driver */
+#define RIONET_DRVID   0x101
+#define RIONET_MAX_SK_DATA_SIZE0x1000
+#define RIONET_TX_RX_BUFF_SIZE (0x1000 * (128 + 128))
+#define RIONET_QUEUE_NEXT(x)   (((x)  127) ? ((x) + 1) : 0)
+#define RIONET_QUEUE_INC(x)(x = RIONET_QUEUE_NEXT(x))
+
+struct sk_data {
+   u8  data[0x1000];
+};
+
+#define RIONET_SKDATA_EN   0x8000
+struct rionet_tx_rx_buff {
+   int enqueue;/* enqueue point */
+   int dequeue;/* dequeue point */
+   u32 size[128];  /* size[i] is skdata[i] size
+* the most high bit [31] is
+* enable bit. The
+* max size is 4096.
+*/
+   u8  rev1[3576];
+   struct sk_data  skdata[128];/* all size are 0x1000 * 128 */
+};
+#endif /* CONFIG_RIONET_MEMMAP */
+
 static LIST_HEAD(rionet_peers);
 
 struct rionet_private {
@@ -60,6 +103,18 @@ struct rionet_private {
spinlock_t lock;
spinlock_t tx_lock;
u32 msg_enable;
+#ifdef CONFIG_RIONET_MEMMAP
+   struct rionet_tx_rx_buff *rxbuff;
+   struct rionet_tx_rx_buff __iomem *txbuff;
+   struct rio_mem *rxmem;
+   struct rio_mem *txmem;
+#ifdef CONFIG_RIONET_DMA
+   struct dma_chan *txdmachan;
+   struct dma_chan *rxdmachan;
+   struct dma_client rio_dma_client;
+   spinlock_t rio_dma_event_lock;
+#endif
+#endif
 };
 
 struct rionet_peer {
@@ -90,6 +145,7 @@ static struct rio_dev **rionet_active;
 #define RIONET_MAC_MATCH(x)(*(u32 *)x == 0x00010001)
 #define RIONET_GET_DESTID(x)   (*(u16 *)(x + 4))
 
+#ifndef CONFIG_RIONET_MEMMAP
 static int rionet_rx_clean(struct net_device *ndev)
 {
int i;
@@ -108,9 +164,11 @@ static int rionet_rx_clean(struct net_de
 
rnet-rx_skb[i]-data = data;
skb_put(rnet-rx_skb[i], RIO_MAX_MSG_SIZE);
+   rnet-rx_skb[i]-dev = ndev;
rnet-rx_skb[i]-protocol =
eth_type_trans(rnet-rx_skb[i], ndev);
error = netif_rx(rnet-rx_skb[i]);
+   rnet-rx_skb[i] = 

[patch 11/24] rapidio: add OF-tree support to RapidIO controller driver

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/kernel/Makefile  |1 
 arch/powerpc/kernel/rio.c |   52 ---
 arch/powerpc/sysdev/fsl_rio.c |  110 +---
 arch/powerpc/sysdev/fsl_rio.h |   20 -
 4 files changed, 102 insertions(+), 81 deletions(-)

diff -puN 
arch/powerpc/kernel/Makefile~rapidio-add-of-tree-support-to-rapidio-controller-driver
 arch/powerpc/kernel/Makefile
--- 
a/arch/powerpc/kernel/Makefile~rapidio-add-of-tree-support-to-rapidio-controller-driver
+++ a/arch/powerpc/kernel/Makefile
@@ -72,7 +72,6 @@ pci64-$(CONFIG_PPC64) += pci_dn.o isa-b
 obj-$(CONFIG_PCI)  += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \
   pci-common.o
 obj-$(CONFIG_PCI_MSI)  += msi.o
-obj-$(CONFIG_RAPIDIO)  += rio.o
 obj-$(CONFIG_KEXEC)+= machine_kexec.o crash.o \
   machine_kexec_$(CONFIG_WORD_SIZE).o
 obj-$(CONFIG_AUDIT)+= audit.o
diff -puN 
arch/powerpc/kernel/rio.c~rapidio-add-of-tree-support-to-rapidio-controller-driver
 /dev/null
--- a/arch/powerpc/kernel/rio.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * RapidIO PPC32 support
- *
- * Copyright 2005 MontaVista Software, Inc.
- * Matt Porter [EMAIL PROTECTED]
- *
- * This program is free software; you can redistribute  it and/or modify it
- * under  the terms of  the GNU General  Public License as published by the
- * Free Software Foundation;  either version 2 of the  License, or (at your
- * option) any later version.
- */
-
-#include linux/init.h
-#include linux/kernel.h
-#include linux/rio.h
-
-#include asm/rio.h
-
-/**
- * platform_rio_init - Do platform specific RIO init
- *
- * Any platform specific initialization of RapdIO
- * hardware is done here as well as registration
- * of any active master ports in the system.
- */
-void __attribute__ ((weak))
-platform_rio_init(void)
-{
-   printk(KERN_WARNING RIO: No platform_rio_init() present\n);
-}
-
-/**
- * ppc_rio_init - Do PPC32 RIO init
- *
- * Calls platform-specific RIO init code and then calls
- * rio_init_mports() to initialize any master ports that
- * have been registered with the RIO subsystem.
- */
-static int __init ppc_rio_init(void)
-{
-   printk(KERN_INFO RIO: RapidIO init\n);
-
-   /* Platform specific initialization */
-   platform_rio_init();
-
-   /* Enumerate all registered ports */
-   rio_init_mports();
-
-   return 0;
-}
-
-subsys_initcall(ppc_rio_init);
diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-add-of-tree-support-to-rapidio-controller-driver
 arch/powerpc/sysdev/fsl_rio.c
--- 
a/arch/powerpc/sysdev/fsl_rio.c~rapidio-add-of-tree-support-to-rapidio-controller-driver
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -20,6 +20,7 @@
 #include linux/interrupt.h
 #include linux/rio.h
 #include linux/rio_drv.h
+#include linux/of_platform.h
 
 #include asm/io.h
 
@@ -28,7 +29,6 @@
 #define IRQ_RIO_TX(m)  (((struct rio_priv *)(m-priv))-txirq)
 #define IRQ_RIO_RX(m)  (((struct rio_priv *)(m-priv))-rxirq)
 
-#define RIO_REGS_BASE  (CCSRBAR + 0xc)
 #define RIO_ATMU_REGS_OFFSET   0x10c00
 #define RIO_MSG_REGS_OFFSET0x11000
 #define RIO_MAINT_WIN_SIZE 0x40
@@ -905,19 +905,66 @@ __setup(riohdid=, fsl_rio_get_cmdline)
 
 /**
  * fsl_rio_setup - Setup MPC85xx RapidIO interface
- * @law_start: Starting physical address of RapidIO LAW
- * @law_size: Size of RapidIO LAW
+ * @fsl_rio_setup - Setup Freescale PowerPC RapidIO interface
  *
  * Initializes MPC85xx RapidIO hardware interface, configures
  * master port with system-specific info, and registers the
  * master port with the RapidIO subsystem.
  */
-void fsl_rio_setup(int law_start, int law_size)
+int fsl_rio_setup(struct of_device *dev)
 {
struct rio_ops *ops;
struct rio_mport *port;
-   struct rio_priv *priv = NULL;
-   int rc;
+   struct rio_priv *priv;
+   int rc = 0;
+   const u32 *dt_range, *cell;
+   struct resource regs;
+   int rlen;
+   u64 law_start, law_size;
+   int paw, aw, sw;
+
+   if (!dev-node) {
+   dev_err(dev-dev, Device OF-Node is NULL);
+   return -EFAULT;
+   }
+
+   rc = of_address_to_resource(dev-node, 0, regs);
+   if (rc) {
+   dev_err(dev-dev, Can't get %s property 'reg'\n,
+   dev-node-full_name);
+   return -EFAULT;
+   }
+   dev_info(dev-dev, Of-device full name %s\n, dev-node-full_name);
+   dev_info(dev-dev, Regs start 0x%08x size 0x%08x\n,  regs.start,
+   regs.end - regs.start + 1);
+
+   dt_range = of_get_property(dev-node, ranges, rlen);
+   if (!dt_range) {
+   dev_err(dev-dev, Can't get %s property 'ranges'\n,
+   dev-node-full_name);
+  

[patch 18/24] rapidio: add RapidIO space allocation bitmap arithmetic

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

The bitmap is the simplest RapidIO space allocation arithmetic.  It uses the
fixed size space for each RapidIO device in the inter-connection network.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c   |   11 
 drivers/rapidio/Kconfig |2 
 drivers/rapidio/Makefile|1 
 drivers/rapidio/rio.c   |1 
 drivers/rapidio/sallocator/Kconfig  |9 
 drivers/rapidio/sallocator/Makefile |   12 
 drivers/rapidio/sallocator/bitmap.c |  384 ++
 include/linux/rio.h |6 
 8 files changed, 425 insertions(+), 1 deletion(-)

diff -puN 
arch/powerpc/sysdev/fsl_rio.c~rapidio-add-rapidio-space-allocation-bitmap-arithmetic
 arch/powerpc/sysdev/fsl_rio.c
--- 
a/arch/powerpc/sysdev/fsl_rio.c~rapidio-add-rapidio-space-allocation-bitmap-arithmetic
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -920,6 +920,17 @@ static int fsl_rio_doorbell_init(struct 
return rc;
 }
 
+u32 rio_get_mport_id(struct rio_mport *mport)
+{
+   u32 mport_id;
+
+   rio_local_read_config_32(mport, 0x60, mport_id);
+   mport_id = mport-sys_size ? (mport_id  0x) :
+   ((mport_id  16)  0xff);
+   return mport_id;
+
+}
+
 static char *cmdline = NULL;
 
 static int fsl_rio_get_hdid(int index)
diff -puN 
drivers/rapidio/Kconfig~rapidio-add-rapidio-space-allocation-bitmap-arithmetic 
drivers/rapidio/Kconfig
--- 
a/drivers/rapidio/Kconfig~rapidio-add-rapidio-space-allocation-bitmap-arithmetic
+++ a/drivers/rapidio/Kconfig
@@ -8,3 +8,5 @@ config RAPIDIO_DISC_TIMEOUT
---help---
  Amount of time a discovery node waits for a host to complete
  enumeration before giving up.
+
+source drivers/rapidio/sallocator/Kconfig
diff -puN 
drivers/rapidio/Makefile~rapidio-add-rapidio-space-allocation-bitmap-arithmetic 
drivers/rapidio/Makefile
--- 
a/drivers/rapidio/Makefile~rapidio-add-rapidio-space-allocation-bitmap-arithmetic
+++ a/drivers/rapidio/Makefile
@@ -4,3 +4,4 @@
 obj-y += rio.o rio-access.o rio-driver.o rio-scan.o rio-sysfs.o
 
 obj-$(CONFIG_RAPIDIO)  += switches/
+obj-$(CONFIG_RAPIDIO)  += sallocator/
diff -puN 
drivers/rapidio/rio.c~rapidio-add-rapidio-space-allocation-bitmap-arithmetic 
drivers/rapidio/rio.c
--- 
a/drivers/rapidio/rio.c~rapidio-add-rapidio-space-allocation-bitmap-arithmetic
+++ a/drivers/rapidio/rio.c
@@ -849,6 +849,7 @@ int rio_init_mports(void)
rio_enum_mport(port);
else
rio_disc_mport(port);
+   rio_space_init(port);
}
 
   out:
diff -puN /dev/null drivers/rapidio/sallocator/Kconfig
--- /dev/null
+++ a/drivers/rapidio/sallocator/Kconfig
@@ -0,0 +1,9 @@
+choice
+   prompt Default RapidIO Space Allocator
+   depends on RAPIDIO
+   default RIO_SA_DEFAULT_BITMAP
+
+   config RIO_SA_DEFAULT_BITMAP
+   bool Bitmap
+
+endchoice
diff -puN /dev/null drivers/rapidio/sallocator/Makefile
--- /dev/null
+++ a/drivers/rapidio/sallocator/Makefile
@@ -0,0 +1,12 @@
+#
+# Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved.
+#
+# Author: Zhang Wei, [EMAIL PROTECTED], Jun 2007
+#
+# This is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+
+obj-$(CONFIG_RIO_SA_DEFAULT_BITMAP) += bitmap.o
diff -puN /dev/null drivers/rapidio/sallocator/bitmap.c
--- /dev/null
+++ a/drivers/rapidio/sallocator/bitmap.c
@@ -0,0 +1,384 @@
+/*
+ * Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved.
+ * Author: Zhang Wei, [EMAIL PROTECTED], Jun 2007
+ *
+ * Description:
+ * RapidIO space allocator bitmap arithmetic.
+ *
+ * The Bitmap allocator make the whole RapidIO device have the same fixed
+ * inbound memory window. And on the top of each device inbound window,
+ * there is a sect0 area, which will use for recording the individual
+ * driver owned memory space in device.
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ *
+ */
+
+#include linux/types.h
+#include linux/kernel.h
+
+#include linux/delay.h
+#include linux/init.h
+#include linux/rio.h
+#include linux/rio_drv.h
+#include linux/rio_ids.h
+#include linux/rio_regs.h
+#include linux/module.h
+#include linux/spinlock.h
+#include linux/slab.h
+#include linux/seq_file.h
+#include linux/fs.h
+#include linux/proc_fs.h
+#include linux/dma-mapping.h
+
+#include ../rio.h
+
+#undef DEBUG
+
+#define RIO_SBLOCK_SIZE4096
+
+#define ERR(fmt, arg...) \
+   printk(KERN_ERR ERROR %s - %s:  

[patch 10/24] rapidio: add RapidIO multi mport support

2008-03-28 Thread akpm
From: Zhang Wei [EMAIL PROTECTED]

The original RapidIO driver suppose there is only one mpc85xx RIO controller
in system.  So, some data structures are defined as mpc85xx_rio global, such
as 'regs_win', 'dbell_ring', 'msg_tx_ring'.  Now, I changed them to mport's
private members.  And you can define multi RIO OF-nodes in dts file for multi
RapidIO controller in one processor, such as PCI/PCI-Ex host controllers in
Freescale's silicon.  And the mport operation function declaration should be
changed to know which RapidIO controller is target.

Signed-off-by: Zhang Wei [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/sysdev/fsl_rio.c |  393 +---
 drivers/rapidio/rio-access.c  |   10 
 include/linux/rio.h   |   18 -
 3 files changed, 237 insertions(+), 184 deletions(-)

diff -puN arch/powerpc/sysdev/fsl_rio.c~rapidio-add-rapidio-multi-mport-support 
arch/powerpc/sysdev/fsl_rio.c
--- a/arch/powerpc/sysdev/fsl_rio.c~rapidio-add-rapidio-multi-mport-support
+++ a/arch/powerpc/sysdev/fsl_rio.c
@@ -1,6 +1,9 @@
 /*
  * Freescale MPC85xx/MPC86xx RapidIO support
  *
+ * Copyright (C) 2007, 2008 Freescale Semiconductor, Inc.
+ * Zhang Wei [EMAIL PROTECTED]
+ *
  * Copyright 2005 MontaVista Software, Inc.
  * Matt Porter [EMAIL PROTECTED]
  *
@@ -20,6 +23,11 @@
 
 #include asm/io.h
 
+/* RapidIO definition irq, which read from OF-tree */
+#define IRQ_RIO_BELL(m)(((struct rio_priv 
*)(m-priv))-bellirq)
+#define IRQ_RIO_TX(m)  (((struct rio_priv *)(m-priv))-txirq)
+#define IRQ_RIO_RX(m)  (((struct rio_priv *)(m-priv))-rxirq)
+
 #define RIO_REGS_BASE  (CCSRBAR + 0xc)
 #define RIO_ATMU_REGS_OFFSET   0x10c00
 #define RIO_MSG_REGS_OFFSET0x11000
@@ -112,20 +120,12 @@ struct rio_tx_desc {
u32 res4;
 };
 
-static u32 regs_win;
-static struct rio_atmu_regs *atmu_regs;
-static struct rio_atmu_regs *maint_atmu_regs;
-static struct rio_atmu_regs *dbell_atmu_regs;
-static u32 dbell_win;
-static u32 maint_win;
-static struct rio_msg_regs *msg_regs;
-
-static struct rio_dbell_ring {
+struct rio_dbell_ring {
void *virt;
dma_addr_t phys;
-} dbell_ring;
+};
 
-static struct rio_msg_tx_ring {
+struct rio_msg_tx_ring {
void *virt;
dma_addr_t phys;
void *virt_buffer[RIO_MAX_TX_RING_SIZE];
@@ -133,16 +133,32 @@ static struct rio_msg_tx_ring {
int tx_slot;
int size;
void *dev_id;
-} msg_tx_ring;
+};
 
-static struct rio_msg_rx_ring {
+struct rio_msg_rx_ring {
void *virt;
dma_addr_t phys;
void *virt_buffer[RIO_MAX_RX_RING_SIZE];
int rx_slot;
int size;
void *dev_id;
-} msg_rx_ring;
+};
+
+struct rio_priv {
+   void __iomem *regs_win;
+   struct rio_atmu_regs __iomem *atmu_regs;
+   struct rio_atmu_regs __iomem *maint_atmu_regs;
+   struct rio_atmu_regs __iomem *dbell_atmu_regs;
+   void __iomem *dbell_win;
+   void __iomem *maint_win;
+   struct rio_msg_regs __iomem *msg_regs;
+   struct rio_dbell_ring dbell_ring;
+   struct rio_msg_tx_ring msg_tx_ring;
+   struct rio_msg_rx_ring msg_rx_ring;
+   int bellirq;
+   int txirq;
+   int rxirq;
+};
 
 /**
  * fsl_rio_doorbell_send - Send a MPC85xx doorbell message
@@ -153,12 +169,14 @@ static struct rio_msg_rx_ring {
  * Sends a MPC85xx doorbell message. Returns %0 on success or
  * %-EINVAL on failure.
  */
-static int fsl_rio_doorbell_send(int index, u16 destid, u16 data)
+static int fsl_rio_doorbell_send(struct rio_mport *mport,
+   int index, u16 destid, u16 data)
 {
+   struct rio_priv *priv = mport-priv;
pr_debug(fsl_doorbell_send: index %d destid %4.4x data %4.4x\n,
 index, destid, data);
-   out_be32((void *)dbell_atmu_regs-rowtar, destid  22);
-   out_be16((void *)(dbell_win), data);
+   out_be32(priv-dbell_atmu_regs-rowtar, destid  22);
+   out_be16(priv-dbell_win, data);
 
return 0;
 }
@@ -173,11 +191,13 @@ static int fsl_rio_doorbell_send(int ind
  * Generates a MPC85xx local configuration space read. Returns %0 on
  * success or %-EINVAL on failure.
  */
-static int fsl_local_config_read(int index, u32 offset, int len, u32 *data)
+static int fsl_local_config_read(struct rio_mport *mport,
+   int index, u32 offset, int len, u32 *data)
 {
+   struct rio_priv *priv = mport-priv;
pr_debug(fsl_local_config_read: index %d offset %8.8x\n, index,
 offset);
-   *data = in_be32((void *)(regs_win + offset));
+   *data = in_be32(priv-regs_win + offset);
 
return 0;
 }
@@ -192,12 +212,14 @@ static int fsl_local_config_read(int ind
  * Generates a MPC85xx local configuration space write. Returns %0 on
  * success or %-EINVAL on failure.
  */
-static int fsl_local_config_write(int index, u32 offset, int len, u32 data)
+static int fsl_local_config_write(struct 

[patch 24/24] rapidio: fix docbook references

2008-03-28 Thread akpm
From: Randy Dunlap [EMAIL PROTECTED]

Fix rapidio docbook (file was removed) and fix header file kernel-doc.

Signed-off-by: Randy Dunlap [EMAIL PROTECTED]
Acked-by: Zhang Wei [EMAIL PROTECTED]
Cc: Matt Porter [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 Documentation/DocBook/rapidio.tmpl |1 -
 include/linux/rio.h|4 ++--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff -puN Documentation/DocBook/rapidio.tmpl~rapidio-fix-docbook-references 
Documentation/DocBook/rapidio.tmpl
--- a/Documentation/DocBook/rapidio.tmpl~rapidio-fix-docbook-references
+++ a/Documentation/DocBook/rapidio.tmpl
@@ -133,7 +133,6 @@
 !Idrivers/rapidio/rio-sysfs.c
  /sect1
  sect1 id=PPC32_supporttitlePPC32 support/title
-!Iarch/powerpc/kernel/rio.c
 !Earch/powerpc/sysdev/fsl_rio.c
 !Iarch/powerpc/sysdev/fsl_rio.c
  /sect1
diff -puN include/linux/rio.h~rapidio-fix-docbook-references include/linux/rio.h
--- a/include/linux/rio.h~rapidio-fix-docbook-references
+++ a/include/linux/rio.h
@@ -327,7 +327,7 @@ struct rio_route_ops {
 };
 
 /**
- * Struct for RIO memory definition.
+ * struct rio_mem - struct for RIO memory definition.
  * @node: Node in list of memories
  * @virt: The virtual address for mapped memory accessing.
  * @owner: The owner id of this memory.
@@ -346,7 +346,7 @@ struct rio_mem {
 };
 
 /**
- * Struct for RIO memory definition.
+ * struct rio_mem_ops - Struct for RIO memory operations definition.
  * @map_inb: The function for mapping inbound memory window.
  * @map_outb: The function for mapping outbound memory window.
  * @unmap_inb: The function for unmapping inbound memory window.
_
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


[patch 06/24] lmb: add lmb_alloc_nid()

2008-03-28 Thread akpm
From: David Miller [EMAIL PROTECTED]

A variant of lmb_alloc() that tries to allocate memory on a specified NUMA
node 'nid' but falls back to normal lmb_alloc() if that fails.

The caller provides a 'nid_range' function pointer which assists the
allocator.  It is given args 'start', 'end', and pointer to integer
'this_nid'.

It places at 'this_nid' the NUMA node id that corresponds to 'start', and
returns the end address within 'start' to 'end' at which memory assosciated
with 'nid' ends.

This callback allows a platform to use lmb_alloc_nid() in just about any
context, even ones in which early_pfn_to_nid() might not be working yet.



This function will be used by the NUMA setup code on sparc64, and also it can
be used by powerpc, replacing it's hand crafted careful_allocation()
function in arch/powerpc/mm/numa.c

If x86 ever converts its NUMA support over to using the LMB helpers, it can
use this too as it has something entirely similar.

Signed-off-by: David S. Miller [EMAIL PROTECTED]
Cc: Paul Mackerras [EMAIL PROTECTED]
Cc: Benjamin Herrenschmidt [EMAIL PROTECTED]
Cc: Thomas Gleixner [EMAIL PROTECTED]
Cc: Ingo Molnar [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 include/linux/lmb.h |2 
 lib/lmb.c   |   86 +-
 2 files changed, 78 insertions(+), 10 deletions(-)

diff -puN include/linux/lmb.h~lmb-add-lmb_alloc_nid include/linux/lmb.h
--- a/include/linux/lmb.h~lmb-add-lmb_alloc_nid
+++ a/include/linux/lmb.h
@@ -42,6 +42,8 @@ extern void __init lmb_init(void);
 extern void __init lmb_analyze(void);
 extern long __init lmb_add(u64 base, u64 size);
 extern long __init lmb_reserve(u64 base, u64 size);
+extern u64 __init lmb_alloc_nid(u64 size, u64 align, int nid,
+   u64 (*nid_range)(u64, u64, int *));
 extern u64 __init lmb_alloc(u64 size, u64 align);
 extern u64 __init lmb_alloc_base(u64 size,
u64, u64 max_addr);
diff -puN lib/lmb.c~lmb-add-lmb_alloc_nid lib/lmb.c
--- a/lib/lmb.c~lmb-add-lmb_alloc_nid
+++ a/lib/lmb.c
@@ -232,6 +232,82 @@ long __init lmb_overlaps_region(struct l
return (i  rgn-cnt) ? i : -1;
 }
 
+static u64 lmb_align_down(u64 addr, u64 size)
+{
+   return addr  ~(size - 1);
+}
+
+static u64 lmb_align_up(u64 addr, u64 size)
+{
+   return (addr + (size - 1))  ~(size - 1);
+}
+
+static u64 __init lmb_alloc_nid_unreserved(u64 start, u64 end,
+  u64 size, u64 align)
+{
+   u64 base;
+   long j;
+
+   base = lmb_align_down((end - size), align);
+   while (start = base 
+  ((j = lmb_overlaps_region(lmb.reserved, base, size)) = 0))
+   base = lmb_align_down(lmb.reserved.region[j].base - size,
+ align);
+
+   if (base != 0  start = base) {
+   if (lmb_add_region(lmb.reserved, base,
+  lmb_align_up(size, align))  0)
+   base = ~(u64)0;
+   return base;
+   }
+
+   return ~(u64)0;
+}
+
+static u64 __init lmb_alloc_nid_region(struct lmb_property *mp,
+  u64 (*nid_range)(u64, u64, int *),
+  u64 size, u64 align, int nid)
+{
+   u64 start, end;
+
+   start = mp-base;
+   end = start + mp-size;
+
+   start = lmb_align_up(start, align);
+   while (start  end) {
+   u64 this_end;
+   int this_nid;
+
+   this_end = nid_range(start, end, this_nid);
+   if (this_nid == nid) {
+   u64 ret = lmb_alloc_nid_unreserved(start, this_end,
+  size, align);
+   if (ret != ~(u64)0)
+   return ret;
+   }
+   start = this_end;
+   }
+
+   return ~(u64)0;
+}
+
+u64 __init lmb_alloc_nid(u64 size, u64 align, int nid,
+u64 (*nid_range)(u64 start, u64 end, int *nid))
+{
+   struct lmb_region *mem = lmb.memory;
+   int i;
+
+   for (i = 0; i  mem-cnt; i++) {
+   u64 ret = lmb_alloc_nid_region(mem-region[i],
+  nid_range,
+  size, align, nid);
+   if (ret != ~(u64)0)
+   return ret;
+   }
+
+   return lmb_alloc(size, align);
+}
+
 u64 __init lmb_alloc(u64 size, u64 align)
 {
return lmb_alloc_base(size, align, LMB_ALLOC_ANYWHERE);
@@ -250,16 +326,6 @@ u64 __init lmb_alloc_base(u64 size, u64 
return alloc;
 }
 
-static u64 lmb_align_down(u64 addr, u64 size)
-{
-   return addr  ~(size - 1);
-}
-
-static u64 lmb_align_up(u64 addr, u64 size)
-{
-   return (addr + (size - 1))  ~(size - 1);
-}
-
 u64 __init __lmb_alloc_base(u64 size, u64 align, u64 max_addr)
 {
long i, j;
_

- add-missing-data_data-in-powerpc.patch removed from -mm tree

2007-07-17 Thread akpm

The patch titled
 powerpc: add missing DATA_DATA
has been removed from the -mm tree.  Its filename was
 add-missing-data_data-in-powerpc.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: powerpc: add missing DATA_DATA
From: Mathieu Desnoyers [EMAIL PROTECTED]

Signed-off-by: Mathieu Desnoyers [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Cc: linuxppc-dev@ozlabs.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/powerpc/kernel/vmlinux.lds.S |4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)

diff -puN arch/powerpc/kernel/vmlinux.lds.S~add-missing-data_data-in-powerpc 
arch/powerpc/kernel/vmlinux.lds.S
--- a/arch/powerpc/kernel/vmlinux.lds.S~add-missing-data_data-in-powerpc
+++ a/arch/powerpc/kernel/vmlinux.lds.S
@@ -174,7 +174,9 @@ SECTIONS
}
 #else
.data : {
-   *(.data .data.rel* .toc1)
+   DATA_DATA
+   *(.data.rel*)
+   *(.toc1)
*(.branch_lt)
}
 
_

Patches currently in -mm which might be from [EMAIL PROTECTED] are

origin.patch
git-kbuild.patch

___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev