Deleted Added
full compact
37c37
< * $FreeBSD: head/sys/kern/uipc_syscalls.c 62378 2000-07-02 08:08:09Z green $
---
> * $FreeBSD: head/sys/kern/uipc_syscalls.c 64837 2000-08-19 08:32:59Z dwmalone $
75,76c75
< static void sf_buf_ref(caddr_t addr, u_int size);
< static void sf_buf_free(caddr_t addr, u_int size);
---
> static void sf_buf_free(caddr_t addr, void *args);
1357d1355
< sf->refcnt = 1;
1362,1365d1359
< static void
< sf_buf_ref(caddr_t addr, u_int size)
< {
< struct sf_buf *sf;
1367,1372d1360
< sf = dtosf(addr);
< if (sf->refcnt == 0)
< panic("sf_buf_ref: referencing a free sf_buf");
< sf->refcnt++;
< }
<
1374,1375d1361
< * Lose a reference to an sf_buf. When none left, detach mapped page
< * and release resources back to the system.
1376a1363,1364
> * Detatch mapped page and release resources back to the system.
> *
1380c1368
< sf_buf_free(caddr_t addr, u_int size)
---
> sf_buf_free(caddr_t addr, void *args)
1387,1408c1375,1391
< if (sf->refcnt == 0)
< panic("sf_buf_free: freeing free sf_buf");
< sf->refcnt--;
< if (sf->refcnt == 0) {
< pmap_qremove((vm_offset_t)addr, 1);
< m = sf->m;
< s = splvm();
< vm_page_unwire(m, 0);
< /*
< * Check for the object going away on us. This can
< * happen since we don't hold a reference to it.
< * If so, we're responsible for freeing the page.
< */
< if (m->wire_count == 0 && m->object == NULL)
< vm_page_free(m);
< splx(s);
< sf->m = NULL;
< SLIST_INSERT_HEAD(&sf_freelist, sf, free_list);
< if (sf_buf_alloc_want) {
< sf_buf_alloc_want = 0;
< wakeup(&sf_freelist);
< }
---
> pmap_qremove((vm_offset_t)addr, 1);
> m = sf->m;
> s = splvm();
> vm_page_unwire(m, 0);
> /*
> * Check for the object going away on us. This can
> * happen since we don't hold a reference to it.
> * If so, we're responsible for freeing the page.
> */
> if (m->wire_count == 0 && m->object == NULL)
> vm_page_free(m);
> splx(s);
> sf->m = NULL;
> SLIST_INSERT_HEAD(&sf_freelist, sf, free_list);
> if (sf_buf_alloc_want) {
> sf_buf_alloc_want = 0;
> wakeup(&sf_freelist);
1633,1636c1616,1619
< m->m_ext.ext_free = sf_buf_free;
< m->m_ext.ext_ref = sf_buf_ref;
< m->m_ext.ext_buf = (void *)sf->kva;
< m->m_ext.ext_size = PAGE_SIZE;
---
> /*
> * Setup external storage for mbuf.
> */
> MEXTADD(m, sf->kva, PAGE_SIZE, sf_buf_free, NULL);
1638d1620
< m->m_flags |= M_EXT;