Exemplo n.º 1
0
struct vm_struct *remove_vm_area(void *addr){
  struct vm_struct **p,*tmp;
  for(p = &vmlist; (tmp = *p) != 0; p = &tmp->next){
    if(tmp->addr == addr) goto found;
  }
  return 0;
 found:
  unmap_vm_area(tmp);
  *p = tmp->next;
  return tmp;
}
Exemplo n.º 2
0
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;
	}
	mutex_lock(&imlist_mutex);
	for (p = &imlist ; (tmp = *p) ; p = &tmp->next) {
		if (tmp->addr == addr) {
			*p = tmp->next;
			unmap_vm_area(tmp);
			kfree(tmp);
			mutex_unlock(&imlist_mutex);
			return;
		}
	}
	mutex_unlock(&imlist_mutex);
	printk(KERN_ERR "Trying to %s nonexistent area (%p)\n", __FUNCTION__,
			addr);
}