-static struct vm_struct * modvmlist = NULL;
-
-static void module_unmap(void * addr)
-{
- struct vm_struct **p, *tmp;
- int i;
-
- if (!addr)
- return;
- if ((PAGE_SIZE-1) & (unsigned long) addr) {
- printk("Trying to unmap module with bad address (%p)\n", addr);
- return;
- }
-
- for (p = &modvmlist; (tmp = *p) != NULL; p = &tmp->next) {
- if (tmp->addr == addr) {
- *p = tmp->next;
- goto found;
- }
- }
- printk("Trying to unmap nonexistent module vm area (%p)\n", addr);
- return;
-
-found:
- unmap_vm_area(tmp);
-
- for (i = 0; i < tmp->nr_pages; i++) {
- if (unlikely(!tmp->pages[i]))
- BUG();
- __free_page(tmp->pages[i]);
- }
-
- kfree(tmp->pages);
- kfree(tmp);
-}
-
-