Skip to contentSkip to conversation

nommu - backward compatibility patch for mm/nommu.c

PATCH In review Hyok S. Choi 3 participants 3 messages May 7, 2005 – May 9, 2005

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 4/4 nommu - backward compatibility patch for mm/nommu.c

nommu patch against 2.6.12-rc3-mm3, for mm/nommu.c :
- need to fix the vmalloc definition.
- most malloc functions in nommu does not provide the 'len'. should consider "zero" len value.
If it does return with error when the 'len' is zero, the whole exist
applications are unable to run, because of the std-c libraries for uClinux.

mm/nommu.c +0 -0
Index: linux-2.6.12-rc3-mm3/mm/nommu.c
================================================================

13:53:54.000000000 +0900
@@ -6,6 +6,7 @@
*
* See Documentation/nommu-mmap.txt
*

+ *  Copyright (c) 2005      Hyok S. Choi <[email protected]>
  *  Copyright (c) 2004-2005 David Howells <[email protected]>
  *  Copyright (c) 2000-2003 David McCullough <[email protected]>
  *  Copyright (c) 2000-2001 D Jeff Dionne <[email protected]>

@@ -146,7 +147,7 @@
kfree(addr);
}

-void *__vmalloc(unsigned long size, int gfp_mask, pgprot_t prot) +void *__vmalloc(unsigned long size, unsigned int gfp_mask, pgprot_t prot)
{
/*
* kmalloc doesn't like __GFP_HIGHMEM for some reason
@@ -901,10 +902,12 @@
#ifdef DEBUG
printk("do_munmap:\n");
#endif
-
+ /* if the len is zero(as some simple-malloc libs does),
+ * treat it with the start addr only.
+ */
for (parent = &mm->context.vmlist; *parent; parent =
&(*parent)->next)
if ((*parent)->vma->vm_start == addr &&
- (*parent)->vma->vm_end == end)
+ (!len || (*parent)->vma->vm_end == end))
goto found;

printk("munmap of non-mmaped memory by process %d (%s): %p\n",
@@ -914,6 +917,9 @@
found:
vml = *parent;

+ if(!len)
+ len = vml->vma->vm_end - addr;
+
put_vma(vml->vma);

*parent = vml->next;

#1 lore raw

Review

Quoted 2 lines · Hyok S. Choi
(quoted diff) +1 -1
-		    (*parent)->vma->vm_end == end)
+		    (!len || (*parent)->vma->vm_end == end))

Please make this configurable. It's bypassing an error case check.

David

#2 lore raw
Quoted 8 lines · David Howells

Review

Quoted 2 lines · Hyok S. Choi
(quoted diff) +1 -1
-		    (*parent)->vma->vm_end == end)
+		    (!len || (*parent)->vma->vm_end == end))

Please make this configurable. It's bypassing an error case check.

I disagree, I don't think it warrents yet another configuration option.

Most uClinux archiectures don't want to do this size error check - at least any that rely on the current implementation of light weight uClibc mmap() based malloc(). And up until recently this was _every_ uClinux architecture.

Regards
Greg

------------------------------------------------------------------------

Greg Ungerer  --  Chief Software Dude       EMAIL:     [email protected]
SnapGear -- a CyberGuard Company            PHONE:       +61 7 3435 2888
825 Stanley St,                             FAX:         +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com