Linus, lkml,

The following patch is required so that munmap(0x8000, *) does not cause
ARM kernels to hang.  The problem is that the machine vectors are at
virtual address 0.  Unfortunately, when free_pgtables() is called, it
clears first level page tables starting at 0 in this case, and takes
out the machine vectors.  This then results in an unrecoverable hang.

We already have FIRST_USER_PGD_NR to define the first entry in the pgd
which may be cleared, so we use this to clamp "start_index"
appropriately.  The following patch does this.  Tested on ARM.

There is only one concern that I can see with this patch - GCC may warn
about comparison always zero on architectures that define
FIRST_USER_PGD_NR to be zero.

--- orig/mm/mmap.c      Tue Sep  5 22:22:12 2000
+++ linux/mm/mmap.c     Sat Sep 30 14:24:23 2000
@@ -620,6 +620,8 @@
         * old method of shifting the VA >> by PGDIR_SHIFT doesn't work.
         */
        start_index = pgd_index(first);
+       if (start_index < FIRST_USER_PGD_NR)
+               start_index = FIRST_USER_PGD_NR;
        end_index = pgd_index(last);
        if (end_index > start_index) {
                clear_page_tables(mm, start_index, end_index - start_index);

   _____
  |_____| ------------------------------------------------- ---+---+-
  |   |         Russell King        [EMAIL PROTECTED]      --- ---
  | | | | http://www.arm.linux.org.uk/personal/aboutme.html   /  /  |
  | +-+-+                                                     --- -+-
  /   |               THE developer of ARM Linux              |+| /|\
 /  | | |                                                     ---  |
    +-+-+ -------------------------------------------------  /\\\  |
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to