Deleted Added
full compact
uipc_syscalls.c (70599) uipc_syscalls.c (72200)
1/*
2 * Copyright (c) 1982, 1986, 1989, 1990, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * sendfile(2) and related extensions:
6 * Copyright (c) 1998, David Greenman. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 20 unchanged lines hidden (view full) ---

29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)uipc_syscalls.c 8.4 (Berkeley) 2/21/94
1/*
2 * Copyright (c) 1982, 1986, 1989, 1990, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * sendfile(2) and related extensions:
6 * Copyright (c) 1998, David Greenman. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 20 unchanged lines hidden (view full) ---

29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)uipc_syscalls.c 8.4 (Berkeley) 2/21/94
37 * $FreeBSD: head/sys/kern/uipc_syscalls.c 70599 2001-01-02 11:51:55Z phk $
37 * $FreeBSD: head/sys/kern/uipc_syscalls.c 72200 2001-02-09 06:11:45Z bmilekic $
38 */
39
40#include "opt_compat.h"
41#include "opt_ktrace.h"
42
43#include <sys/param.h>
44#include <sys/systm.h>
45#include <sys/kernel.h>

--- 1367 unchanged lines hidden (view full) ---

1413 * other parts of the networking code.
1414 */
1415static void
1416sf_buf_init(void *arg)
1417{
1418 int i;
1419
1420 mtx_init(&sf_freelist.sf_lock, "sf_bufs list lock", MTX_DEF);
38 */
39
40#include "opt_compat.h"
41#include "opt_ktrace.h"
42
43#include <sys/param.h>
44#include <sys/systm.h>
45#include <sys/kernel.h>

--- 1367 unchanged lines hidden (view full) ---

1413 * other parts of the networking code.
1414 */
1415static void
1416sf_buf_init(void *arg)
1417{
1418 int i;
1419
1420 mtx_init(&sf_freelist.sf_lock, "sf_bufs list lock", MTX_DEF);
1421 mtx_enter(&sf_freelist.sf_lock, MTX_DEF);
1421 mtx_lock(&sf_freelist.sf_lock);
1422 SLIST_INIT(&sf_freelist.sf_head);
1423 sf_base = kmem_alloc_pageable(kernel_map, nsfbufs * PAGE_SIZE);
1424 sf_bufs = malloc(nsfbufs * sizeof(struct sf_buf), M_TEMP,
1425 M_NOWAIT | M_ZERO);
1426 for (i = 0; i < nsfbufs; i++) {
1427 sf_bufs[i].kva = sf_base + i * PAGE_SIZE;
1428 SLIST_INSERT_HEAD(&sf_freelist.sf_head, &sf_bufs[i], free_list);
1429 }
1430 sf_buf_alloc_want = 0;
1422 SLIST_INIT(&sf_freelist.sf_head);
1423 sf_base = kmem_alloc_pageable(kernel_map, nsfbufs * PAGE_SIZE);
1424 sf_bufs = malloc(nsfbufs * sizeof(struct sf_buf), M_TEMP,
1425 M_NOWAIT | M_ZERO);
1426 for (i = 0; i < nsfbufs; i++) {
1427 sf_bufs[i].kva = sf_base + i * PAGE_SIZE;
1428 SLIST_INSERT_HEAD(&sf_freelist.sf_head, &sf_bufs[i], free_list);
1429 }
1430 sf_buf_alloc_want = 0;
1431 mtx_exit(&sf_freelist.sf_lock, MTX_DEF);
1431 mtx_unlock(&sf_freelist.sf_lock);
1432}
1433
1434/*
1435 * Get an sf_buf from the freelist. Will block if none are available.
1436 */
1437static struct sf_buf *
1438sf_buf_alloc()
1439{
1440 struct sf_buf *sf;
1441
1432}
1433
1434/*
1435 * Get an sf_buf from the freelist. Will block if none are available.
1436 */
1437static struct sf_buf *
1438sf_buf_alloc()
1439{
1440 struct sf_buf *sf;
1441
1442 mtx_enter(&sf_freelist.sf_lock, MTX_DEF);
1442 mtx_lock(&sf_freelist.sf_lock);
1443 while ((sf = SLIST_FIRST(&sf_freelist.sf_head)) == NULL) {
1444 sf_buf_alloc_want++;
1445 msleep(&sf_freelist, &sf_freelist.sf_lock, PVM, "sfbufa", 0);
1446 }
1447 SLIST_REMOVE_HEAD(&sf_freelist.sf_head, free_list);
1443 while ((sf = SLIST_FIRST(&sf_freelist.sf_head)) == NULL) {
1444 sf_buf_alloc_want++;
1445 msleep(&sf_freelist, &sf_freelist.sf_lock, PVM, "sfbufa", 0);
1446 }
1447 SLIST_REMOVE_HEAD(&sf_freelist.sf_head, free_list);
1448 mtx_exit(&sf_freelist.sf_lock, MTX_DEF);
1448 mtx_unlock(&sf_freelist.sf_lock);
1449 return (sf);
1450}
1451
1452#define dtosf(x) (&sf_bufs[((uintptr_t)(x) - (uintptr_t)sf_base) >> PAGE_SHIFT])
1453
1454/*
1455 * Detatch mapped page and release resources back to the system.
1456 */

--- 13 unchanged lines hidden (view full) ---

1470 * Check for the object going away on us. This can
1471 * happen since we don't hold a reference to it.
1472 * If so, we're responsible for freeing the page.
1473 */
1474 if (m->wire_count == 0 && m->object == NULL)
1475 vm_page_free(m);
1476 splx(s);
1477 sf->m = NULL;
1449 return (sf);
1450}
1451
1452#define dtosf(x) (&sf_bufs[((uintptr_t)(x) - (uintptr_t)sf_base) >> PAGE_SHIFT])
1453
1454/*
1455 * Detatch mapped page and release resources back to the system.
1456 */

--- 13 unchanged lines hidden (view full) ---

1470 * Check for the object going away on us. This can
1471 * happen since we don't hold a reference to it.
1472 * If so, we're responsible for freeing the page.
1473 */
1474 if (m->wire_count == 0 && m->object == NULL)
1475 vm_page_free(m);
1476 splx(s);
1477 sf->m = NULL;
1478 mtx_enter(&sf_freelist.sf_lock, MTX_DEF);
1478 mtx_lock(&sf_freelist.sf_lock);
1479 SLIST_INSERT_HEAD(&sf_freelist.sf_head, sf, free_list);
1480 if (sf_buf_alloc_want) {
1481 sf_buf_alloc_want--;
1482 wakeup_one(&sf_freelist);
1483 }
1479 SLIST_INSERT_HEAD(&sf_freelist.sf_head, sf, free_list);
1480 if (sf_buf_alloc_want) {
1481 sf_buf_alloc_want--;
1482 wakeup_one(&sf_freelist);
1483 }
1484 mtx_exit(&sf_freelist.sf_lock, MTX_DEF);
1484 mtx_unlock(&sf_freelist.sf_lock);
1485}
1486
1487/*
1488 * sendfile(2)
1489 * int sendfile(int fd, int s, off_t offset, size_t nbytes,
1490 * struct sf_hdtr *hdtr, off_t *sbytes, int flags)
1491 *
1492 * Send a file specified by 'fd' and starting at 'offset' to a socket

--- 312 unchanged lines hidden ---
1485}
1486
1487/*
1488 * sendfile(2)
1489 * int sendfile(int fd, int s, off_t offset, size_t nbytes,
1490 * struct sf_hdtr *hdtr, off_t *sbytes, int flags)
1491 *
1492 * Send a file specified by 'fd' and starting at 'offset' to a socket

--- 312 unchanged lines hidden ---