 /* XXX: do we need the lock? */ spin_lock(&init_mm.page_table_lock); 
void im_free(void * addr){	struct vm_struct **p, *tmp;  	if (!addr)		return;	if ((unsigned long) addr & ~PAGE_MASK) {		printk(KERN_ERR "Trying to %s bad address (%p)\n", __FUNCTION__,			addr);		return;	}	down(&imlist_sem);	for (p = &imlist ; (tmp = *p) ; p = &tmp->next) {		if (tmp->addr == addr) {			*p = tmp->next;			/* XXX: do we need the lock? */			spin_lock(&init_mm.page_table_lock);			unmap_vm_area(tmp);			spin_unlock(&init_mm.page_table_lock);			kfree(tmp);			up(&imlist_sem);			return;		}	}	up(&imlist_sem);	printk(KERN_ERR "Trying to %s nonexistent area (%p)\n", __FUNCTION__,			addr);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/872fec16d9a0ed3b75b8893aa217e49cca575ee5/imalloc.c/buggy/arch/ppc64/mm/imalloc.c