Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-17 Thread Jamie Lokier
Pavel Machek wrote:
 On Mon 2009-09-07 15:22:10, Russell King - ARM Linux wrote:
  On Tue, Aug 18, 2009 at 08:31:49AM +0530, Rabin Vincent wrote:
   Here's a fixed version:
  
  And here's my revised version with these fixes in.  I changed the
  while loop to a do..while loop instead (since we will always have
  at least one memory bank, it's pointless doing that test for the
  first iteration.)
  
  Acks and tested-bys would be useful please.
  
 
  +static int __init meminfo_cmp(const void *_a, const void *_b)
  +{
  +   const struct membank *a = _a, *b = _b;
  +   long cmp = bank_pfn_start(a) - bank_pfn_start(b);
  +   return cmp  0 ? -1 : cmp  0 ? 1 : 0;
  +}
 
 I believe you can just return cmp here.

If this were generic code, the long value might overflow int.
But this is ARM code, limited to 32 bits, so it could.
It'd be asking for trouble if someone copied the code elsewhere, though.

-- Jamie
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-15 Thread Pavel Machek
On Mon 2009-09-07 15:22:10, Russell King - ARM Linux wrote:
 On Tue, Aug 18, 2009 at 08:31:49AM +0530, Rabin Vincent wrote:
  Here's a fixed version:
 
 And here's my revised version with these fixes in.  I changed the
 while loop to a do..while loop instead (since we will always have
 at least one memory bank, it's pointless doing that test for the
 first iteration.)
 
 Acks and tested-bys would be useful please.
 

 +static int __init meminfo_cmp(const void *_a, const void *_b)
 +{
 + const struct membank *a = _a, *b = _b;
 + long cmp = bank_pfn_start(a) - bank_pfn_start(b);
 + return cmp  0 ? -1 : cmp  0 ? 1 : 0;
 +}

I believe you can just return cmp here.

Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-09 Thread Russell King - ARM Linux
On Wed, Sep 09, 2009 at 10:12:48AM +0530, Syed Mohammed, Khasim wrote:
 Hello all,
 
  -Original Message-
  From: Aguirre Rodriguez, Sergio Alberto
  Sent: Wednesday, September 09, 2009 7:35 AM
  To: Russell King - ARM Linux; Rabin Vincent
  Cc: Syed Mohammed, Khasim; linux-arm-ker...@lists.arm.linux.org.uk; linux-
  o...@vger.kernel.org
  Subject: RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
  
  From: Russell King - ARM Linux [li...@arm.linux.org.uk]
  Sent: Tuesday, September 08, 2009 11:23 PM
   
Acks and tested-bys would be useful please.
  
   Haven't heard anything, so I've committed it as is.  It is my intention
   to push it to Linus as is in the next couple of days.
  
  Russell,
  
  I don't have ways of testing this, but I think Khasim's testing will make
  more sense,
  since he reported the bug... anyways, it's probably too late.
  
 I am really sorry, wanted to try this out when RMK returns from vacation 
 meanwhile forgot :(
 
 The below logic from Rabin works great !!! no issues with this as well.

And how about my revised version, which is the version which is going
to be merged?
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-09 Thread Russell King - ARM Linux
On Wed, Sep 09, 2009 at 01:16:48PM +0530, Syed Mohammed, Khasim wrote:
 Hi Russell,
 
  -Original Message-
  From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
  Sent: Wednesday, September 09, 2009 12:47 PM
  To: Syed Mohammed, Khasim
  Cc: Aguirre Rodriguez, Sergio Alberto; Rabin Vincent; linux-arm-
  ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
  Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
  
  And how about my revised version, which is the version which is going
  to be merged?
 
 Sorry for missing this out. This works, no issues reported.

And so can I add a:

Tested-by: Khasim Syed Mohammed kha...@ti.com

or is it a just a Reviewed-by: ?
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-09 Thread Syed Mohammed, Khasim


 -Original Message-
 From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
 Sent: Thursday, September 10, 2009 12:04 AM
 To: Syed Mohammed, Khasim
 Cc: Aguirre Rodriguez, Sergio Alberto; Rabin Vincent; linux-arm-
 ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
 Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 On Wed, Sep 09, 2009 at 01:16:48PM +0530, Syed Mohammed, Khasim wrote:
  Hi Russell,
 
   -Original Message-
   From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
   Sent: Wednesday, September 09, 2009 12:47 PM
   To: Syed Mohammed, Khasim
   Cc: Aguirre Rodriguez, Sergio Alberto; Rabin Vincent; linux-arm-
   ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
   Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
  
   And how about my revised version, which is the version which is going
   to be merged?
 
  Sorry for missing this out. This works, no issues reported.
 
 And so can I add a:
 
 Tested-by: Khasim Syed Mohammed kha...@ti.com

I did test this, please add Tested-by.

Thanks,

Regards,
Khasim


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-08 Thread Russell King - ARM Linux
On Mon, Sep 07, 2009 at 03:22:10PM +0100, Russell King - ARM Linux wrote:
 On Tue, Aug 18, 2009 at 08:31:49AM +0530, Rabin Vincent wrote:
  Here's a fixed version:
 
 And here's my revised version with these fixes in.  I changed the
 while loop to a do..while loop instead (since we will always have
 at least one memory bank, it's pointless doing that test for the
 first iteration.)
 
 Acks and tested-bys would be useful please.

Haven't heard anything, so I've committed it as is.  It is my intention
to push it to Linus as is in the next couple of days.
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-08 Thread Aguirre Rodriguez, Sergio Alberto
From: Russell King - ARM Linux [li...@arm.linux.org.uk]
Sent: Tuesday, September 08, 2009 11:23 PM
 On Mon, Sep 07, 2009 at 03:22:10PM +0100, Russell King - ARM Linux wrote:
  On Tue, Aug 18, 2009 at 08:31:49AM +0530, Rabin Vincent wrote:
   Here's a fixed version:
 
  And here's my revised version with these fixes in.  I changed the
  while loop to a do..while loop instead (since we will always have
  at least one memory bank, it's pointless doing that test for the
  first iteration.)
 
  Acks and tested-bys would be useful please.
 
 Haven't heard anything, so I've committed it as is.  It is my intention
 to push it to Linus as is in the next couple of days.

Russell,

I don't have ways of testing this, but I think Khasim's testing will make more 
sense,
since he reported the bug... anyways, it's probably too late.

Regards,
Sergio--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-08 Thread Syed Mohammed, Khasim
Hello all,

 -Original Message-
 From: Aguirre Rodriguez, Sergio Alberto
 Sent: Wednesday, September 09, 2009 7:35 AM
 To: Russell King - ARM Linux; Rabin Vincent
 Cc: Syed Mohammed, Khasim; linux-arm-ker...@lists.arm.linux.org.uk; linux-
 o...@vger.kernel.org
 Subject: RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 From: Russell King - ARM Linux [li...@arm.linux.org.uk]
 Sent: Tuesday, September 08, 2009 11:23 PM
  
   Acks and tested-bys would be useful please.
 
  Haven't heard anything, so I've committed it as is.  It is my intention
  to push it to Linus as is in the next couple of days.
 
 Russell,
 
 I don't have ways of testing this, but I think Khasim's testing will make
 more sense,
 since he reported the bug... anyways, it's probably too late.
 
I am really sorry, wanted to try this out when RMK returns from vacation 
meanwhile forgot :(

The below logic from Rabin works great !!! no issues with this as well.

File arch/arm/mm/init.c

int pfn_valid(unsigned long pfn)
{
struct meminfo *mi = meminfo;
unsigned int left = 0, right = mi-nr_banks;

while (left  right) {
unsigned int mid = (left + right) / 2;
struct membank *bank = mi-bank[mid];

if (pfn  bank_pfn_start(bank))
right = mid;
else if (pfn = bank_pfn_end(bank))
left = mid + 1;
else
return 1;
}

return 0;
}

Thanks for all the help.

Regards,
Khasim
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-09-07 Thread Russell King - ARM Linux
On Tue, Aug 18, 2009 at 08:31:49AM +0530, Rabin Vincent wrote:
 Here's a fixed version:

And here's my revised version with these fixes in.  I changed the
while loop to a do..while loop instead (since we will always have
at least one memory bank, it's pointless doing that test for the
first iteration.)

Acks and tested-bys would be useful please.

diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
index 376be1a..cefedf0 100644
--- a/arch/arm/include/asm/memory.h
+++ b/arch/arm/include/asm/memory.h
@@ -218,7 +218,6 @@ static inline __deprecated void *bus_to_virt(unsigned long 
x)
  *
  *  page_to_pfn(page)  convert a struct page * to a PFN number
  *  pfn_to_page(pfn)   convert a _valid_ PFN number to struct page *
- *  pfn_valid(pfn) indicates whether a PFN number is valid
  *
  *  virt_to_page(k)convert a _valid_ virtual address to struct page *
  *  virt_addr_valid(k) indicates whether a virtual address is valid
@@ -227,10 +226,6 @@ static inline __deprecated void *bus_to_virt(unsigned long 
x)
 
 #define ARCH_PFN_OFFSETPHYS_PFN_OFFSET
 
-#ifndef CONFIG_SPARSEMEM
-#define pfn_valid(pfn) ((pfn) = PHYS_PFN_OFFSET  (pfn)  
(PHYS_PFN_OFFSET + max_mapnr))
-#endif
-
 #define virt_to_page(kaddr)pfn_to_page(__pa(kaddr)  PAGE_SHIFT)
 #define virt_addr_valid(kaddr) ((unsigned long)(kaddr) = PAGE_OFFSET  
(unsigned long)(kaddr)  (unsigned long)high_memory)
 
@@ -247,18 +242,6 @@ static inline __deprecated void *bus_to_virt(unsigned long 
x)
 #define arch_pfn_to_nid(pfn)   PFN_TO_NID(pfn)
 #define arch_local_page_offset(pfn, nid) LOCAL_MAP_NR((pfn)  PAGE_SHIFT)
 
-#define pfn_valid(pfn) \
-   ({  \
-   unsigned int nid = PFN_TO_NID(pfn); \
-   int valid = nid  MAX_NUMNODES; \
-   if (valid) {\
-   pg_data_t *node = NODE_DATA(nid);   \
-   valid = (pfn - node-node_start_pfn)   \
-   node-node_spanned_pages;   \
-   }   \
-   valid;  \
-   })
-
 #define virt_to_page(kaddr)\
(ADDR_TO_MAPBASE(kaddr) + LOCAL_MAP_NR(kaddr))
 
diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h
index 9c746af..3a32af4 100644
--- a/arch/arm/include/asm/page.h
+++ b/arch/arm/include/asm/page.h
@@ -194,6 +194,10 @@ typedef unsigned long pgprot_t;
 
 typedef struct page *pgtable_t;
 
+#ifndef CONFIG_SPARSEMEM
+extern int pfn_valid(unsigned long);
+#endif
+
 #include asm/memory.h
 
 #endif /* !__ASSEMBLY__ */
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 8277802..2542583 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -15,6 +15,7 @@
 #include linux/mman.h
 #include linux/nodemask.h
 #include linux/initrd.h
+#include linux/sort.h
 #include linux/highmem.h
 
 #include asm/mach-types.h
@@ -334,12 +335,43 @@ static void __init bootmem_free_node(int node, struct 
meminfo *mi)
free_area_init_node(node, zone_size, start_pfn, zhole_size);
 }
 
+#ifndef CONFIG_SPARSEMEM
+int pfn_valid(unsigned long pfn)
+{
+   struct meminfo *mi = meminfo;
+   unsigned int left = 0, right = mi-nr_banks;
+
+   do {
+   unsigned int mid = (right + left) / 2;
+   struct membank *bank = mi-bank[mid];
+
+   if (pfn  bank_pfn_start(bank))
+   right = mid;
+   else if (pfn = bank_pfn_end(bank))
+   left = mid + 1;
+   else
+   return 1;
+   } while (left  right);
+   return 0;
+}
+EXPORT_SYMBOL(pfn_valid);
+#endif
+
+static int __init meminfo_cmp(const void *_a, const void *_b)
+{
+   const struct membank *a = _a, *b = _b;
+   long cmp = bank_pfn_start(a) - bank_pfn_start(b);
+   return cmp  0 ? -1 : cmp  0 ? 1 : 0;
+}
+
 void __init bootmem_init(void)
 {
struct meminfo *mi = meminfo;
unsigned long memend_pfn = 0;
int node, initrd_node;
 
+   sort(mi-bank, mi-nr_banks, sizeof(mi-bank[0]), meminfo_cmp, NULL);
+
/*
 * Locate which node contains the ramdisk image, if any.
 */
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-17 Thread Syed Mohammed, Khasim
Hi Russell,

 -Original Message-
 From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
 Sent: Saturday, August 15, 2009 11:47 PM
 To: Syed Mohammed, Khasim
 Cc: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
 Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 On Sat, Aug 15, 2009 at 09:47:18PM +0530, Syed Mohammed, Khasim wrote:
  Backtrace:
  [c002c884] (__flush_dcache_page+0x0/0x3c) from [c002c7c0] 
  (update_mmu_cache+
  0x8c/0xb0)
  [c002c734] (update_mmu_cache+0x0/0xb0) from [c008611c] 
  (handle_mm_fault+0x53
  4/0x5ac)
 
 Bingo!

snip

 The question is how best to handle determining if a PFN (which could be
 somewhere in the range 0 to 0xf for 32-bit address space) is valid
 without eating up too much memory.  One simple way would be to allocate
 a bitmap.  That'll eat up 128K of memory though, and we know that we
 normally have a small amount of that range used...  I think a binary
 search of the meminfo struct might be the best all-round solution.
 
 Could you try this patch please?
 

This patch seem to be working, I don't see any dump like before.

Can you please advice on how to get this patch into kernel? I mean, will you be 
handling it or we need to re-submit them with your signed off?

Please let me know if there are any corrections that you want me to test, I 
will be more happy to do the same.

Thanks for all your help.

Regards,
Khasim


 diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
 index 376be1a..cefedf0 100644
 --- a/arch/arm/include/asm/memory.h
 +++ b/arch/arm/include/asm/memory.h
 @@ -218,7 +218,6 @@ static inline __deprecated void *bus_to_virt(unsigned 
 long x)
   *
   *  page_to_pfn(page)convert a struct page * to a PFN number
   *  pfn_to_page(pfn) convert a _valid_ PFN number to struct page *
 - *  pfn_valid(pfn)   indicates whether a PFN number is valid
   *
   *  virt_to_page(k)  convert a _valid_ virtual address to struct page *
   *  virt_addr_valid(k)   indicates whether a virtual address is valid
 @@ -227,10 +226,6 @@ static inline __deprecated void *bus_to_virt(unsigned 
 long x)
 
  #define ARCH_PFN_OFFSET  PHYS_PFN_OFFSET
 
 -#ifndef CONFIG_SPARSEMEM
 -#define pfn_valid(pfn)   ((pfn) = PHYS_PFN_OFFSET  (pfn)  
 (PHYS_PFN_OFFSET + max_mapnr))
 -#endif
 -
  #define virt_to_page(kaddr)  pfn_to_page(__pa(kaddr)  PAGE_SHIFT)
  #define virt_addr_valid(kaddr)   ((unsigned long)(kaddr) = PAGE_OFFSET 
  (unsigned long)(kaddr)
  (unsigned long)high_memory)
 
 @@ -247,18 +242,6 @@ static inline __deprecated void *bus_to_virt(unsigned 
 long x)
  #define arch_pfn_to_nid(pfn) PFN_TO_NID(pfn)
  #define arch_local_page_offset(pfn, nid) LOCAL_MAP_NR((pfn)  PAGE_SHIFT)
 
 -#define pfn_valid(pfn)   \
 - ({  \
 - unsigned int nid = PFN_TO_NID(pfn); \
 - int valid = nid  MAX_NUMNODES; \
 - if (valid) {\
 - pg_data_t *node = NODE_DATA(nid);   \
 - valid = (pfn - node-node_start_pfn)   \
 - node-node_spanned_pages;   \
 - }   \
 - valid;  \
 - })
 -
  #define virt_to_page(kaddr)  \
   (ADDR_TO_MAPBASE(kaddr) + LOCAL_MAP_NR(kaddr))
 
 diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h
 index 9c746af..3a32af4 100644
 --- a/arch/arm/include/asm/page.h
 +++ b/arch/arm/include/asm/page.h
 @@ -194,6 +194,10 @@ typedef unsigned long pgprot_t;
 
  typedef struct page *pgtable_t;
 
 +#ifndef CONFIG_SPARSEMEM
 +extern int pfn_valid(unsigned long);
 +#endif
 +
  #include asm/memory.h
 
  #endif /* !__ASSEMBLY__ */
 diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
 index 8277802..2542583 100644
 --- a/arch/arm/mm/init.c
 +++ b/arch/arm/mm/init.c
 @@ -15,6 +15,7 @@
  #include linux/mman.h
  #include linux/nodemask.h
  #include linux/initrd.h
 +#include linux/sort.h
  #include linux/highmem.h
 
  #include asm/mach-types.h
 @@ -334,12 +335,42 @@ static void __init bootmem_free_node(int node, struct 
 meminfo *mi)
   free_area_init_node(node, zone_size, start_pfn, zhole_size);
  }
 
 +#ifndef CONFIG_SPARSEMEM
 +int pfn_valid(unsigned long pfn)
 +{
 + struct meminfo *mi = meminfo;
 + unsigned int mid, left = 0, right = mi-nr_banks;
 +
 + while ((mid = (right - left) / 2)  0) {
 + struct membank *bank = mi-bank[mid];
 +
 + if (pfn  bank_pfn_start(bank))
 + right = mid;
 + else if (pfn = bank_pfn_end(bank))
 + left = mid + 1;
 + else
 + return 1;
 + }
 + return 0;
 +}
 +EXPORT_SYMBOL(pfn_valid);
 +#endif

Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-17 Thread Russell King - ARM Linux
On Mon, Aug 17, 2009 at 04:40:27PM +0530, Syed Mohammed, Khasim wrote:
 This patch seem to be working, I don't see any dump like before.

Great.

 Can you please advice on how to get this patch into kernel? I mean,
 will you be handling it or we need to re-submit them with your signed off?

Yes, I'll be sending it.  However, I believe the patch I sent contains
one error:

  +static int __init meminfo_cmp(const void *_a, const void *_b)
  +{
  +   const struct membank *a = _a, *b = _b;
  +   long cmp = bank_pfn_start(b) - bank_pfn_start(a);

I think this should be bank_pfn_start(a) - bank_pfn_start(b).  When you
tested this unmodified patch, did the Memory: line list the memory
bank sizes in reverse order?
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-17 Thread Syed Mohammed, Khasim


 -Original Message-
 From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
 Sent: Monday, August 17, 2009 10:21 PM
 To: Syed Mohammed, Khasim
 Cc: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
 Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 On Mon, Aug 17, 2009 at 04:40:27PM +0530, Syed Mohammed, Khasim wrote:
  This patch seem to be working, I don't see any dump like before.
 
 Great.
 
  Can you please advice on how to get this patch into kernel? I mean,
  will you be handling it or we need to re-submit them with your signed off?
 
 Yes, I'll be sending it.  However, I believe the patch I sent contains
 one error:
Thanks.

   +static int __init meminfo_cmp(const void *_a, const void *_b)
   +{
   + const struct membank *a = _a, *b = _b;
   + long cmp = bank_pfn_start(b) - bank_pfn_start(a);
 
 I think this should be bank_pfn_start(a) - bank_pfn_start(b).  When you
 tested this unmodified patch, did the Memory: line list the memory
 bank sizes in reverse order?

Unmodified results in

MEM: unordered memory banks.  Not freeing memmap.
Memory: 60MB 88MB = 148MB total

Making it a - b results in

Memory: 88MB 60MB = 148MB total

a-b is correct one, fortunately both worked for me. 

Regards,
Khasim
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-17 Thread Rabin Vincent
On Sat, Aug 15, 2009 at 07:17:11PM +0100, Russell King - ARM Linux wrote:
 +#ifndef CONFIG_SPARSEMEM
 +int pfn_valid(unsigned long pfn)
 +{
 + struct meminfo *mi = meminfo;
 + unsigned int mid, left = 0, right = mi-nr_banks;
 +
 + while ((mid = (right - left) / 2)  0) {
 + struct membank *bank = mi-bank[mid];
 +
 + if (pfn  bank_pfn_start(bank))
 + right = mid;
 + else if (pfn = bank_pfn_end(bank))
 + left = mid + 1;
 + else
 + return 1;
 + }
 + return 0;
 +}
 +EXPORT_SYMBOL(pfn_valid);
 +#endif

The above function will ignore the first bank.  I don't think that was
intended.

Rabin
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-17 Thread Rabin Vincent
On Mon, Aug 17, 2009 at 06:47:18PM +0100, Russell King - ARM Linux wrote:
 On Mon, Aug 17, 2009 at 11:03:44PM +0530, Rabin Vincent wrote:
  On Sat, Aug 15, 2009 at 07:17:11PM +0100, Russell King - ARM Linux wrote:
   +#ifndef CONFIG_SPARSEMEM
   +int pfn_valid(unsigned long pfn)
   +{
   + struct meminfo *mi = meminfo;
   + unsigned int mid, left = 0, right = mi-nr_banks;
   +
   + while ((mid = (right - left) / 2)  0) {
   + struct membank *bank = mi-bank[mid];
   +
   + if (pfn  bank_pfn_start(bank))
   + right = mid;
   + else if (pfn = bank_pfn_end(bank))
   + left = mid + 1;
   + else
   + return 1;
   + }
   + return 0;
   +}
   +EXPORT_SYMBOL(pfn_valid);
   +#endif
  
  The above function will ignore the first bank.  I don't think that was
  intended.
 
 Why do you say that?
 
 Let's start with 4 membank entries - 0 1 2 3.
 
 0 covers 0-10, 1 covers 20-30, 2 covers 40-50 and 3 covers 60-70.
 
 Let's run through the steps looking for 5:
 
 Initally, left = 0, right = 4, so mid=2.  5  40?  Yes, so right becomes 2.
 
 left = 0, right = 2, so mid=1.  5  20?  Yes, so right becomes 1.
 
 left = 0, right = 1, so mid=0.  5  0?  No.  5 = 10?  No.  so return 1.
 
 This doesn't look to me like it ignores the first bank.  I think you're
 wrong.  Please provide me with your proof ASAP because right now it's
 pending for Linus.

When mid == 0, the loop exits because the condition you have is :

  while ((mid = (right - left) / 2)  0) {
  ^^

Thus bank[0] will never be checked.

Rabin
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-17 Thread Russell King - ARM Linux
On Mon, Aug 17, 2009 at 11:31:45PM +0530, Rabin Vincent wrote:
 When mid == 0, the loop exits because the condition you have is :
 
   while ((mid = (right - left) / 2)  0) {
   ^^
 
 Thus bank[0] will never be checked.

Ah yes, right.  Damn it.

Oh well, this will probably have to wait a couple of weeks now (by
which time I expect I will have forgotten about the problem.)
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-17 Thread Aguirre Rodriguez, Sergio Alberto


 -Original Message-
 From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
 ow...@vger.kernel.org] On Behalf Of Russell King - ARM Linux
 Sent: Monday, August 17, 2009 1:05 PM
 To: Rabin Vincent
 Cc: Syed Mohammed, Khasim; linux-arm-ker...@lists.arm.linux.org.uk; linux-
 o...@vger.kernel.org
 Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 On Mon, Aug 17, 2009 at 11:31:45PM +0530, Rabin Vincent wrote:
  When mid == 0, the loop exits because the condition you have is :
 
while ((mid = (right - left) / 2)  0) {
^^
 
  Thus bank[0] will never be checked.
 
 Ah yes, right.  Damn it.
 
 Oh well, this will probably have to wait a couple of weeks now (by
 which time I expect I will have forgotten about the problem.)

How about this?:

#ifndef CONFIG_SPARSEMEM
int pfn_valid(unsigned long pfn)
{
struct meminfo *mi = meminfo;
unsigned int left = 0, right = mi-nr_banks;

while (left = right) {
unsigned int mid = (right - left) / 2;
struct membank *bank = mi-bank[mid];

if (pfn  bank_pfn_start(bank))
right = mid;
else if (pfn = bank_pfn_end(bank))
left = mid + 1;
else
return 1;
}
return 0;
}
EXPORT_SYMBOL(pfn_valid);
#endif

Regards,
Sergio

 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-17 Thread Rabin Vincent
On Mon, Aug 17, 2009 at 03:23:18PM -0500, Aguirre Rodriguez, Sergio Alberto 
wrote:
 #ifndef CONFIG_SPARSEMEM
 int pfn_valid(unsigned long pfn)
 {
   struct meminfo *mi = meminfo;
   unsigned int left = 0, right = mi-nr_banks;
 
   while (left = right) {

This condition will cause the while to loop forever when left == right
and pfn  bank_pfn_start(bank).

   unsigned int mid = (right - left) / 2;

This calculation is incorrect when left != 0 (also in the original
patch).

   struct membank *bank = mi-bank[mid];
 
   if (pfn  bank_pfn_start(bank))
   right = mid;
   else if (pfn = bank_pfn_end(bank))
   left = mid + 1;
   else
   return 1;
   }
   return 0;
 }
 EXPORT_SYMBOL(pfn_valid);
 #endif

Here's a fixed version:

int pfn_valid(unsigned long pfn)
{
struct meminfo *mi = meminfo;
unsigned int left = 0, right = mi-nr_banks;

while (left  right) {
unsigned int mid = (left + right) / 2;
struct membank *bank = mi-bank[mid];

if (pfn  bank_pfn_start(bank))
right = mid;
else if (pfn = bank_pfn_end(bank))
left = mid + 1;
else
return 1;
}

return 0;
}

Rabin
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-15 Thread Sudeep K N
Khasim,

As far as I understand there are two options:
1. memmap

I had intially tried memmap=xxM$yyM to reserve xxM at yyM
This has some issue with 2.6.27 and fixed in later versions(not sure
of exact version) and I have not tried it.
As Russell has mentioned the new option ARCH_HAS_HOLES_MEMORYMODEL is
the part of that fix I believe.
The bug was particular to few architecture including ARM(details at
http://lkml.org/lkml/2009/5/5/64)
With this option its only resevered and you can still mmap that memory.

2. mem

As an alternate, I tried spliting the memory to the kernel similar to
what you have tried.
mem=...@0x8000 mem=1...@0x8800
But if you see how this is parsed by the kernel, you will see that the
kernel doesnot create any virtual
address space for the hole you have created. In otherwords the kernel
is totally unware of that memory.
So you cannot mmap that hole.

This is my understanding and please correct if I am wrong.

-- 
Regards,
Sudeep
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-15 Thread Russell King - ARM Linux
On Sat, Aug 15, 2009 at 06:33:20PM +0530, Sudeep K N wrote:
 I had intially tried memmap=xxM$yyM to reserve xxM at yyM
 This has some issue with 2.6.27 and fixed in later versions(not sure
 of exact version) and I have not tried it.

memmap= is not supported on ARM - there is no code to parse or use the
option except on x86 and blackfin, so it gets passed to the init program
when userspace starts.

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-15 Thread Syed Mohammed, Khasim

 
 On Sat, Aug 15, 2009 at 06:33:20PM +0530, Sudeep K N wrote:
  I had intially tried memmap=xxM$yyM to reserve xxM at yyM
  This has some issue with 2.6.27 and fixed in later versions(not sure
  of exact version) and I have not tried it.
 
 memmap= is not supported on ARM - there is no code to parse or use the
 option except on x86 and blackfin, so it gets passed to the init program
 when userspace starts.

I am just wondering if there is something extra that needs to be done in my 
kernel or app, below are the lines that I feel will matter,

In driver module:
- request_mem_region(start_addr, length, name);
- ioremap_nocache (start_addr,length);
(in mmap function)
- vma-vm_flags |= VM_RESERVED | VM_IO;
- remap_pfn_range(vma,vma-vm_start,vma-vm_pgoff,vma-vm_end-vma-vm_start, 
vma-vm_page_prot);

In my app:
- userp = mmap((void *)0x0, size, 
PROT_WRITE|PROT_READ,MAP_SHARED,fd,0x8580);
- memset((void *)userp,0,0x100);

Few Observations:
- When my bootargs doesn't is just mem=...@0x8000, I don't see any issues 
it works great
- When my bootargs is mem=...@0x8000 mem=...@0x8c40 it crashes at user 
space. Where as when I do same memset in driver (kernel space) it passes, the 
issue is only with user space (over mmap)
- With hole, when I use mmap with MAP_PRIVATE it passes fine.

I can give both driver and app that I have, but it has nothing but the above 
lines.

Thanks for the comments.

Regards,
Khasim

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-15 Thread Russell King - ARM Linux
On Fri, Aug 14, 2009 at 04:43:21PM +0530, Syed Mohammed, Khasim wrote:
 Unable to handle kernel paging request at virtual address c5d0
 pgd = cf858000
 [c5d0] *pgd=
 Internal error: Oops: 805 [#1]
 Modules linked in: cmemk
 CPU: 0Not tainted  (2.6.31-rc5-omap1 #2)
 PC is at v7_flush_kern_dcache_page+0x14/0x2c
 LR is at __flush_dcache_page+0x28/0x34
 pc : [c002c268]lr : [c002a8b0]psr: 0113
 sp : c1d1de70  ip : c0356000  fp : ce8ce060
 r10: cf858000  r9 : 0200  r8 : 40168000
 r7 : ce95b8b8  r6 : ce95b8b8  r5 : c041  r4 : 5d00
 r3 : 0002  r2 : 0040  r1 : c5d01000  r0 : c5d0
 Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
 Control: 10c5387d  Table: 8f858019  DAC: 0015
 Process a.out (pid: 889, stack limit = 0xc1d1c2e8)
 Stack: (0xc1d1de70 to 0xc1d1e000)
 de60: 5d00 c002a7e4 85d00383 
 de80: ce95b8b8 c007e680 c031a3f0 e94f704f 0011 00165a0c c1d1debc 0168
 dea0: 0001 05a0 cf859000 c1d1dee0 0726 c0311d20 cf8d9360 ce95b8b8
 dec0: ce8ce094 ce8ce060 c1d1dfb0 40168000 081f c002a118 1405ffdc 0017
 dee0: 13920cdc 0800 c0312aa0 c0311d20 c0311e10 081f c1d1dfb0 40168000
 df00:  40023000 beeafce4 c00231e8 139195a6 0017 c031c3f8 c005f6f4
 df20:  0017 c0341820 0100 0004 0081 0001 c004ce30
 df40: c1d1df40 c1d1df40 0013 c1d1c000 c0324924 c0324958 0020 c006b67c
 df60: c1d1c000 0100 0020 c0049478 8000 c0312b20 005f 
 df80:    c1d1c000 beeafce4 c0049544  
 dfa0:    c0023c9c 40149000  002e0ff4 40168000
 dfc0: 40022e08      40023000 beeafce4
 dfe0: 4009eac0 beeafce0 98c4 4009eaec 2010  47d63e68 9cfcabf3

Okay, this is perfect, up until here:

 [c002c268] (v7_flush_kern_dcache_page+0x14/0x2c) from [e94f704f] 
 (0xe94f704f
 )

where we don't have the full backtrace, and therefore don't know how we
got to this function.  Gah, this is intensely frustrating.

As Catalin has recently pointed out, this could be because of a toolchain
which doesn't know how to emit the unwind information.  I'm sure there's
other reasons.  But, at the end of the day, if this is the kind of oops
dump we can now expect, bug hunting is going to become a very frustrating
business.

Can you rebuild your kernel yet again, this time with the unwinder
disabled (and therefore frame pointers enabled) please, and reproduce
yet again?
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-15 Thread Syed Mohammed, Khasim
Hi Russell,

Thanks for the review,

 -Original Message-
 From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
 Sent: Saturday, August 15, 2009 9:04 PM
 To: Syed Mohammed, Khasim
 Cc: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
 Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 On Fri, Aug 14, 2009 at 04:43:21PM +0530, Syed Mohammed, Khasim wrote:
  Unable to handle kernel paging request at virtual address c5d0
  pgd = cf858000
snip
 
 Can you rebuild your kernel yet again, this time with the unwinder
 disabled (and therefore frame pointers enabled) please, and reproduce
 yet again?

Attached below, hope this is correct.

ioremap_nocache(0x8580, 16777216)=0xd100
mmap: vma-vm_start = 0x40149000
mmap: vma-vm_pgoff = 0x85800
mmap: vma-vm_end   = 0x41149000
mmap: size  = 0x100

Unable to handle kernel paging request at virtual address c580
pgd = cf874000
[c580] *pgd=
Internal error: Oops: 805 [#1]
Modules linked in: cmemk
CPU: 0Not tainted  (2.6.31-rc5-omap1 #1)
PC is at v7_flush_kern_dcache_page+0x14/0x2c
LR is at __flush_dcache_page+0x30/0x3c
pc : [c002e388]lr : [c002c8b4]psr: 0113
sp : c1737e38  ip : c1737e48  fp : c1737e44
r10: cf874000  r9 : 0200  r8 : 40149000
r7 : ce9b95a0  r6 : ce9b95a0  r5 : c0414000  r4 : 5800
r3 : 0002  r2 : 0040  r1 : c5801000  r0 : c580
Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 10c5387d  Table: 8f874019  DAC: 0015
Process a.out (pid: 889, stack limit = 0xc17362e8)
Stack: (0xc1737e38 to 0xc1738000)
7e20:   c1737e64 c1737e48
7e40: c002c7c0 c002c890 85800383  ce9b95a0 ce9b95a0 c1737ebc c1737e68
7e60: c008611c c002c740 c1737e8c c1737e78 c01a00e0 c01a0084 0149 0001
7e80: ce90a7e0 0524 cf875000 c01a00d4  c031fd38 cf864040 ce9b95a0
7ea0: ce90a814 ce90a7e0 c1737fb0 40149000 c1737efc c1737ec0 c002c098 c0085bf4
7ec0:  c1737ed0 081f 0800 c1737ef4 c031fd38 c031fe28 081f
7ee0: c1737fb0 40149000  40023000 c1737fac c1737f00 c0025210 c002bfb8
7f00: c018e4c8   cf8f1410 0200 0002  cf415538
7f20: cf8f1410 000f c1736000  c1737f6c c1737f40 c009866c c00c0d80
7f40:      cf8dd5a0 000f 4001c000
7f60: c1737fa4 c1737f70 c0098744 c0098528   c002c274 
7f80:  000f 4001c000     
7fa0:  c1737fb0 c0025d40 c00251e4 40149000  00f8 40149000
7fc0: 40022e08      40023000 bee89ce4
7fe0: 4009eac0 bee89cb8 86dc 4009eaec 2010  80566021 80566421
Backtrace:
[c002c884] (__flush_dcache_page+0x0/0x3c) from [c002c7c0] (update_mmu_cache+
0x8c/0xb0)
[c002c734] (update_mmu_cache+0x0/0xb0) from [c008611c] (handle_mm_fault+0x53
4/0x5ac)
 r7:ce9b95a0 r6:ce9b95a0 r5: r4:85800383
[c0085be8] (handle_mm_fault+0x0/0x5ac) from [c002c098] (do_page_fault+0xec/0
x234)
[c002bfac] (do_page_fault+0x0/0x234) from [c0025210] (do_DataAbort+0x38/0x98
)
[c00251d8] (do_DataAbort+0x0/0x98) from [c0025d40] (ret_from_exception+0x0/0
x10)
Exception stack(0xc1737fb0 to 0xc1737ff8)
7fa0: 40149000  00f8 40149000
7fc0: 40022e08      40023000 bee89ce4
7fe0: 4009eac0 bee89cb8 86dc 4009eaec 2010 
 r8: r7: r6: r5: r4:
Code: e2033007 e3a02010 e1a02312 e2801a01 (ee070f3e)
---[ end trace b534dcb6339fe900 ]---

Regards,
Khasim
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-15 Thread Russell King - ARM Linux
On Sat, Aug 15, 2009 at 09:47:18PM +0530, Syed Mohammed, Khasim wrote:
 Backtrace:
 [c002c884] (__flush_dcache_page+0x0/0x3c) from [c002c7c0] 
 (update_mmu_cache+
 0x8c/0xb0)
 [c002c734] (update_mmu_cache+0x0/0xb0) from [c008611c] 
 (handle_mm_fault+0x53
 4/0x5ac)

Bingo!

void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte)
{
unsigned long pfn = pte_pfn(pte);
struct address_space *mapping;
struct page *page;

#define pfn_valid(pfn) ((pfn) = PHYS_PFN_OFFSET  (pfn)  (PHYS_PFN_OFFSET + 
max_mapnr))
if (!pfn_valid(pfn))
return;

page = pfn_to_page(pfn);
mapping = page_mapping(page);

The problem with the above is that in your case is that pfn_valid returns
true for pages in the hole, which causes update_mmu_cache() to try to
dereference a pointer to them.

Normally, when we have such holes, no one ever maps them (because they
tend to be just an alias of existing memory.)

The real answer to all this is to get pfn_valid() working properly in
_every_ case - that'll also solve the problem which Mel Gorman has been
having to fix several times as well.

The question is how best to handle determining if a PFN (which could be
somewhere in the range 0 to 0xf for 32-bit address space) is valid
without eating up too much memory.  One simple way would be to allocate
a bitmap.  That'll eat up 128K of memory though, and we know that we
normally have a small amount of that range used...  I think a binary
search of the meminfo struct might be the best all-round solution.

Could you try this patch please?

diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
index 376be1a..cefedf0 100644
--- a/arch/arm/include/asm/memory.h
+++ b/arch/arm/include/asm/memory.h
@@ -218,7 +218,6 @@ static inline __deprecated void *bus_to_virt(unsigned long 
x)
  *
  *  page_to_pfn(page)  convert a struct page * to a PFN number
  *  pfn_to_page(pfn)   convert a _valid_ PFN number to struct page *
- *  pfn_valid(pfn) indicates whether a PFN number is valid
  *
  *  virt_to_page(k)convert a _valid_ virtual address to struct page *
  *  virt_addr_valid(k) indicates whether a virtual address is valid
@@ -227,10 +226,6 @@ static inline __deprecated void *bus_to_virt(unsigned long 
x)
 
 #define ARCH_PFN_OFFSETPHYS_PFN_OFFSET
 
-#ifndef CONFIG_SPARSEMEM
-#define pfn_valid(pfn) ((pfn) = PHYS_PFN_OFFSET  (pfn)  
(PHYS_PFN_OFFSET + max_mapnr))
-#endif
-
 #define virt_to_page(kaddr)pfn_to_page(__pa(kaddr)  PAGE_SHIFT)
 #define virt_addr_valid(kaddr) ((unsigned long)(kaddr) = PAGE_OFFSET  
(unsigned long)(kaddr)  (unsigned long)high_memory)
 
@@ -247,18 +242,6 @@ static inline __deprecated void *bus_to_virt(unsigned long 
x)
 #define arch_pfn_to_nid(pfn)   PFN_TO_NID(pfn)
 #define arch_local_page_offset(pfn, nid) LOCAL_MAP_NR((pfn)  PAGE_SHIFT)
 
-#define pfn_valid(pfn) \
-   ({  \
-   unsigned int nid = PFN_TO_NID(pfn); \
-   int valid = nid  MAX_NUMNODES; \
-   if (valid) {\
-   pg_data_t *node = NODE_DATA(nid);   \
-   valid = (pfn - node-node_start_pfn)   \
-   node-node_spanned_pages;   \
-   }   \
-   valid;  \
-   })
-
 #define virt_to_page(kaddr)\
(ADDR_TO_MAPBASE(kaddr) + LOCAL_MAP_NR(kaddr))
 
diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h
index 9c746af..3a32af4 100644
--- a/arch/arm/include/asm/page.h
+++ b/arch/arm/include/asm/page.h
@@ -194,6 +194,10 @@ typedef unsigned long pgprot_t;
 
 typedef struct page *pgtable_t;
 
+#ifndef CONFIG_SPARSEMEM
+extern int pfn_valid(unsigned long);
+#endif
+
 #include asm/memory.h
 
 #endif /* !__ASSEMBLY__ */
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 8277802..2542583 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -15,6 +15,7 @@
 #include linux/mman.h
 #include linux/nodemask.h
 #include linux/initrd.h
+#include linux/sort.h
 #include linux/highmem.h
 
 #include asm/mach-types.h
@@ -334,12 +335,42 @@ static void __init bootmem_free_node(int node, struct 
meminfo *mi)
free_area_init_node(node, zone_size, start_pfn, zhole_size);
 }
 
+#ifndef CONFIG_SPARSEMEM
+int pfn_valid(unsigned long pfn)
+{
+   struct meminfo *mi = meminfo;
+   unsigned int mid, left = 0, right = mi-nr_banks;
+
+   while ((mid = (right - left) / 2)  0) {
+   struct membank *bank = mi-bank[mid];
+
+   if (pfn  bank_pfn_start(bank))
+   right = mid;
+   else if (pfn = bank_pfn_end(bank))
+   left = mid + 1;
+   

RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-14 Thread Syed Mohammed, Khasim


 -Original Message-
 From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
 Sent: Thursday, August 13, 2009 11:03 PM
 To: Syed Mohammed, Khasim
 Cc: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
 Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 On Thu, Aug 13, 2009 at 10:51:43PM +0530, Syed Mohammed, Khasim wrote:
  1Unable to handle kernel paging request at virtual address c5cef000 
  Unable to handle kernel
 paging request at virtual address c5cef000
 
  Internal error: Oops: 805 [#4]
  Internal error: Oops: 805 [#4]
  dModules linked in:Modules linked in: cmemk cmemk
 
 Please.  If you've got the kernel booting.  Turn off printascii support.
 This oops dump is almost unreadable as a result of keeping printascii
 support enabled.

Sorry, here is the one with out DEBUG_LL

r...@beagleboard:/media/mmcblk0p1# ./a.out
mmap: vma-vm_start = 0x40149000
mmap: vma-vm_pgoff = 0x85ce1
mmap: vma-vm_end   = 0x404b8000
mmap: size  = 0x36f000
mmap: calling set_noncached(ce95b8b8) ...
mmap: vma-vm_start = 0x404b8000
mmap: vma-vm_pgoff = 0x85972
mmap: vma-vm_end   = 0x40827000
mmap: size  = 0x36f000
mmap: calling set_noncached(ce95bc28) ...


Unable to handle kernel paging request at virtual address c5d0
pgd = cf858000
[c5d0] *pgd=
Internal error: Oops: 805 [#1]
Modules linked in: cmemk
CPU: 0Not tainted  (2.6.31-rc5-omap1 #2)
PC is at v7_flush_kern_dcache_page+0x14/0x2c
LR is at __flush_dcache_page+0x28/0x34
pc : [c002c268]lr : [c002a8b0]psr: 0113
sp : c1d1de70  ip : c0356000  fp : ce8ce060
r10: cf858000  r9 : 0200  r8 : 40168000
r7 : ce95b8b8  r6 : ce95b8b8  r5 : c041  r4 : 5d00
r3 : 0002  r2 : 0040  r1 : c5d01000  r0 : c5d0
Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 10c5387d  Table: 8f858019  DAC: 0015
Process a.out (pid: 889, stack limit = 0xc1d1c2e8)
Stack: (0xc1d1de70 to 0xc1d1e000)
de60: 5d00 c002a7e4 85d00383 
de80: ce95b8b8 c007e680 c031a3f0 e94f704f 0011 00165a0c c1d1debc 0168
dea0: 0001 05a0 cf859000 c1d1dee0 0726 c0311d20 cf8d9360 ce95b8b8
dec0: ce8ce094 ce8ce060 c1d1dfb0 40168000 081f c002a118 1405ffdc 0017
dee0: 13920cdc 0800 c0312aa0 c0311d20 c0311e10 081f c1d1dfb0 40168000
df00:  40023000 beeafce4 c00231e8 139195a6 0017 c031c3f8 c005f6f4
df20:  0017 c0341820 0100 0004 0081 0001 c004ce30
df40: c1d1df40 c1d1df40 0013 c1d1c000 c0324924 c0324958 0020 c006b67c
df60: c1d1c000 0100 0020 c0049478 8000 c0312b20 005f 
df80:    c1d1c000 beeafce4 c0049544  
dfa0:    c0023c9c 40149000  002e0ff4 40168000
dfc0: 40022e08      40023000 beeafce4
dfe0: 4009eac0 beeafce0 98c4 4009eaec 2010  47d63e68 9cfcabf3
[c002c268] (v7_flush_kern_dcache_page+0x14/0x2c) from [e94f704f] (0xe94f704f
)
Code: e2033007 e3a02010 e1a02312 e2801a01 (ee070f3e)
---[ end trace 58a066cdb6c0f78c ]---
Segmentation fault

Regards,
Khasim
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-08 Thread Syed Mohammed, Khasim


 -Original Message-
 From: Woodruff, Richard
 Sent: Saturday, August 08, 2009 2:49 AM
 To: Syed Mohammed, Khasim; linux-arm-ker...@lists.arm.linux.org.uk; 
 linux-omap@vger.kernel.org
 Subject: RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 Used to be you needed to build with CONFIG_ARCH_DISCONTIGMEM_ENABLE did you 
 do this?
 
Hi Richard,

This shows as deprecated,

# Discontigmem is deprecated 
config ARCH_DISCONTIGMEM_ENABLE

I tried this today, enabling this for ARCH_OMAP results in compilation error

In file included from arch/arm/kernel/asm-offsets.c:14:
include/linux/mm.h: In function 'virt_to_head_page':
include/linux/mm.h:310: error: implicit declaration of function 'KVADDR_TO_NID'
include/linux/mm.h:310: error: implicit declaration of function 'LOCAL_MAP_NR'

This is because NODE_MEM_SIZE_BITS is not enabled, I didn't get a proper value 
just tried copying others with 24 and 26, - THIS Just didn't boot to prompt. 

Should we fix this up? -or leave it out as it is getting deprecated ?

Thanks for the input.

Regards,
Khasim


 
  -Original Message-
  From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
  ow...@vger.kernel.org] On Behalf Of Syed Mohammed, Khasim
  Sent: Friday, August 07, 2009 3:17 PM
  To: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
  Subject: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
  Hi all,
 
  On OMAP3 we are creating a space for DSP components to have shared buffers
  using the boot arguments.
 
  mem=...@0x8000 mem=1...@0x8800
 
  This creates a 40M hole for DSP components, the drivers dynamically do a
  request mem region and ioremap of pre-defined address space with in the 40M
  region.
 
  With the above setup, we see the system running for a while but then ends up
  with exception.
 
  Unable to handle kernel paging request at virtual address c7381000
 
  The address reported here is not in kernel space, and this doesn't result 
  in a
  kernel panic.
 
  Other observation:
  - The same setup works fine with no hole or space created. The 40M space for
  DSP components will be allocated at the end (216M).
  - If we increase the mem hole region we can make the system fail with in 
  less
  time.
  - Free returns expected memory map
 
  While I am still debugging the issue, I thought of posting this message to
  know if there are any known issues with ARM architecture in handling such 
  non
  contiguous space / mem hole.
 
  I see some special boot parameters for other architectures like exactmap, we
  don't see similar stuff on ARM. Do we need to port any such support for ARM 
  ?
 
  Kindly advice,
 
  Thanks.
 
  Regards,
  Khasim
 
  --
  To unsubscribe from this list: send the line unsubscribe linux-omap in
  the body of a message to majord...@vger.kernel.org
  More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-08 Thread Syed Mohammed, Khasim
Hi Russell,

 -Original Message-
 From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
 Sent: Saturday, August 08, 2009 3:30 AM
 To: Syed Mohammed, Khasim
 Cc: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
 Subject: Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8
 
 On Sat, Aug 08, 2009 at 01:46:35AM +0530, Syed Mohammed, Khasim wrote:
  On OMAP3 we are creating a space for DSP components to have shared
  buffers using the boot arguments.
 
  mem=...@0x8000 mem=1...@0x8800
 
 Ensure that you have ARCH_HAS_HOLES_MEMORYMODEL enabled in the
 configuration - you need OMAP3 to select this symbol.

We are on 2.6.29 on beagleboard, this kernel doesn't support 
ARCH_HAS_HOLES_MEMORYMODEL so I applied the patch from 

http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=commitdiff;h=eb33575cf67d3f35fa2510210ef92631266e2465

Didn't help, still fails, do you suggest us to move to latest kernel and try 
the same instead of patch alone?

Regards,
Khasim
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-07 Thread Woodruff, Richard
Used to be you needed to build with CONFIG_ARCH_DISCONTIGMEM_ENABLE did you do 
this?

Regards,
Richard W.

 -Original Message-
 From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
 ow...@vger.kernel.org] On Behalf Of Syed Mohammed, Khasim
 Sent: Friday, August 07, 2009 3:17 PM
 To: linux-arm-ker...@lists.arm.linux.org.uk; linux-omap@vger.kernel.org
 Subject: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

 Hi all,

 On OMAP3 we are creating a space for DSP components to have shared buffers
 using the boot arguments.

 mem=...@0x8000 mem=1...@0x8800

 This creates a 40M hole for DSP components, the drivers dynamically do a
 request mem region and ioremap of pre-defined address space with in the 40M
 region.

 With the above setup, we see the system running for a while but then ends up
 with exception.

 Unable to handle kernel paging request at virtual address c7381000

 The address reported here is not in kernel space, and this doesn't result in a
 kernel panic.

 Other observation:
 - The same setup works fine with no hole or space created. The 40M space for
 DSP components will be allocated at the end (216M).
 - If we increase the mem hole region we can make the system fail with in less
 time.
 - Free returns expected memory map

 While I am still debugging the issue, I thought of posting this message to
 know if there are any known issues with ARM architecture in handling such non
 contiguous space / mem hole.

 I see some special boot parameters for other architectures like exactmap, we
 don't see similar stuff on ARM. Do we need to port any such support for ARM ?

 Kindly advice,

 Thanks.

 Regards,
 Khasim

 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Exception while handling MEM Hole on OMAP3 / ARM Cortex A8

2009-08-07 Thread Russell King - ARM Linux
On Sat, Aug 08, 2009 at 01:46:35AM +0530, Syed Mohammed, Khasim wrote:
 On OMAP3 we are creating a space for DSP components to have shared
 buffers using the boot arguments.
 
 mem=...@0x8000 mem=1...@0x8800

Ensure that you have ARCH_HAS_HOLES_MEMORYMODEL enabled in the
configuration - you need OMAP3 to select this symbol.
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html