Print this page
5508 move segvn #defines into seg_vn.c
Reviewed by: Marcel Telka <marcel@telka.sk>
*** 18,27 ****
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1986, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
*** 71,80 ****
--- 72,102 ----
#include <sys/proc.h>
#include <sys/task.h>
#include <sys/project.h>
#include <sys/zone.h>
#include <sys/shm_impl.h>
+
+ /*
+ * segvn_fault needs a temporary page list array. To avoid calling kmem all
+ * the time, it creates a small (PVN_GETPAGE_NUM entry) array and uses it if
+ * it can. In the rare case when this page list is not large enough, it
+ * goes and gets a large enough array from kmem.
+ *
+ * This small page list array covers either 8 pages or 64kB worth of pages -
+ * whichever is smaller.
+ */
+ #define PVN_MAX_GETPAGE_SZ 0x10000
+ #define PVN_MAX_GETPAGE_NUM 0x8
+
+ #if PVN_MAX_GETPAGE_SZ > PVN_MAX_GETPAGE_NUM * PAGESIZE
+ #define PVN_GETPAGE_SZ ptob(PVN_MAX_GETPAGE_NUM)
+ #define PVN_GETPAGE_NUM PVN_MAX_GETPAGE_NUM
+ #else
+ #define PVN_GETPAGE_SZ PVN_MAX_GETPAGE_SZ
+ #define PVN_GETPAGE_NUM btop(PVN_MAX_GETPAGE_SZ)
+ #endif
+
/*
* Private seg op routines.
*/
static int segvn_dup(struct seg *seg, struct seg *newseg);
static int segvn_unmap(struct seg *seg, caddr_t addr, size_t len);