Hi,

please find the patch below.

--- arm.c       2012-06-29 20:29:18.000000000 +0530
+++ arm_section.c       2012-10-04 19:49:01.166889000 +0530
@@ -932,6 +932,13 @@
         */
        page_dir = pgd + PGD_OFFSET(vaddr) * 2;
 
+       /* The unity-mapped region is mapped using 1MB pages,
+        * hence 1-level translation if bit 20 is set,
+        * we are 1MB apart physically,
+        * hence we move the page_dir in case bit 20 is set.
+        */
+        if (((vaddr) >> (20)) & 1)
+               page_dir = page_dir + 1;
        FILL_PGD(PAGEBASE(pgd), KVADDR, PGDIR_SIZE());
        pgd_pte = ULONG(machdep->pgd + PGDIR_OFFSET(page_dir));

Regards,
Oza.

From: Dave Anderson <anderson@redhat.com>
To: paawan oza <paawan1982@yahoo.com>; "Discussion list for crash utility usage, maintenance and development" <crash-utility@redhat.com>
Cc: Thomas Fänge <thomas.fange@sonymobile.com>; Rabin Vincent <rabin@rab.in>; Mika Westerberg <mika.westerberg@iki.fi>; jan karlsson <jan.karlsson@sonymobile.com>
Sent: Thursday, 4 October 2012 6:30 PM
Subject: Re: [Crash-utility] using crash for ARM



----- Original Message -----

> > Paawan, your fix looks sane to me but can you add a small comment describing
> > why this is done?
> >
>
> ok,
> Let us wait for Dave and others to comment on it, and try to see how
> this could be pushed.
>
> Regards,
> Oza.

Oza,

Can you please append your actual patch as Rabin has done?  The only
thing that I have from you is this pseudo-code description:

> then I have to do workaround for section level physical addresses as
> follows.
> page_dir = pgd + PGD_OFFSET(vaddr) * 2;
> if (bit(vaddr,20)) //if bit is set then move to the next pgd */
> page_dir = page_dir + 1;
> FILL_PGD(PAGEBASE(pgd), KVADDR, PGDIR_SIZE());
> pgd_pte = ULONG(machdep->pgd + PGDIR_OFFSET(page_dir));
>

Then Mika can decide on how to proceed with the two patches.

Dave