160727d8bSWarner Losh /*- 251369649SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 351369649SPedro F. Giffuni * 4df8bae1dSRodney W. Grimes * Copyright (c) 1990 University of Utah. 526f9a767SRodney W. Grimes * Copyright (c) 1991 The Regents of the University of California. 626f9a767SRodney W. Grimes * All rights reserved. 7df8bae1dSRodney W. Grimes * 8df8bae1dSRodney W. Grimes * This code is derived from software contributed to Berkeley by 9df8bae1dSRodney W. Grimes * the Systems Programming Group of the University of Utah Computer 10df8bae1dSRodney W. Grimes * Science Department. 11df8bae1dSRodney W. Grimes * 12df8bae1dSRodney W. Grimes * Redistribution and use in source and binary forms, with or without 13df8bae1dSRodney W. Grimes * modification, are permitted provided that the following conditions 14df8bae1dSRodney W. Grimes * are met: 15df8bae1dSRodney W. Grimes * 1. Redistributions of source code must retain the above copyright 16df8bae1dSRodney W. Grimes * notice, this list of conditions and the following disclaimer. 17df8bae1dSRodney W. Grimes * 2. Redistributions in binary form must reproduce the above copyright 18df8bae1dSRodney W. Grimes * notice, this list of conditions and the following disclaimer in the 19df8bae1dSRodney W. Grimes * documentation and/or other materials provided with the distribution. 20fbbd9655SWarner Losh * 3. Neither the name of the University nor the names of its contributors 21df8bae1dSRodney W. Grimes * may be used to endorse or promote products derived from this software 22df8bae1dSRodney W. Grimes * without specific prior written permission. 23df8bae1dSRodney W. Grimes * 24df8bae1dSRodney W. Grimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25df8bae1dSRodney W. Grimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26df8bae1dSRodney W. Grimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27df8bae1dSRodney W. Grimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28df8bae1dSRodney W. Grimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29df8bae1dSRodney W. Grimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30df8bae1dSRodney W. Grimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31df8bae1dSRodney W. Grimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32df8bae1dSRodney W. Grimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33df8bae1dSRodney W. Grimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34df8bae1dSRodney W. Grimes * SUCH DAMAGE. 3526f9a767SRodney W. Grimes */ 3626f9a767SRodney W. Grimes 373ccbf2d5SPoul-Henning Kamp #ifndef _VM_SWAP_PAGER_H_ 3834e2051fSMark Johnston #define _VM_SWAP_PAGER_H_ 39df8bae1dSRodney W. Grimes 4034e2051fSMark Johnston #include <sys/_types.h> 41e8865cafSJohn Baldwin 42e8865cafSJohn Baldwin struct buf; 43e8865cafSJohn Baldwin struct swdevt; 44cdccd11bSWarner Losh struct thread; 45e8865cafSJohn Baldwin typedef void sw_strategy_t(struct buf *, struct swdevt *); 46e8865cafSJohn Baldwin typedef void sw_close_t(struct thread *, struct swdevt *); 47e8865cafSJohn Baldwin 48e8865cafSJohn Baldwin /* 49e8865cafSJohn Baldwin * Swap device table 50e8865cafSJohn Baldwin */ 51e8865cafSJohn Baldwin struct swdevt { 52e8865cafSJohn Baldwin int sw_flags; 53e8865cafSJohn Baldwin int sw_nblks; 54e8865cafSJohn Baldwin int sw_used; 55e8865cafSJohn Baldwin dev_t sw_dev; 56e8865cafSJohn Baldwin struct vnode *sw_vp; 57e8865cafSJohn Baldwin void *sw_id; 5834e2051fSMark Johnston __daddr_t sw_first; 5934e2051fSMark Johnston __daddr_t sw_end; 60e8865cafSJohn Baldwin struct blist *sw_blist; 61e8865cafSJohn Baldwin TAILQ_ENTRY(swdevt) sw_list; 62e8865cafSJohn Baldwin sw_strategy_t *sw_strategy; 63e8865cafSJohn Baldwin sw_close_t *sw_close; 64e8865cafSJohn Baldwin }; 65e8865cafSJohn Baldwin 662cc718a1SKonstantin Belousov #define SW_UNMAPPED 0x01 67e8865cafSJohn Baldwin #define SW_CLOSING 0x04 68e8865cafSJohn Baldwin 6942c43e60SPoul-Henning Kamp #ifdef _KERNEL 7042c43e60SPoul-Henning Kamp 718f60c087SPoul-Henning Kamp extern int swap_pager_avail; 72183f8e1eSGleb Smirnoff extern int nsw_cluster_max; 73bf25be48SBruce Evans 74dda4f960SKonstantin Belousov struct xswdev; 75dda4f960SKonstantin Belousov int swap_dev_info(int name, struct xswdev *xs, char *devname, size_t len); 7611caded3SAlfred Perlstein void swap_pager_copy(vm_object_t, vm_object_t, vm_pindex_t, int); 7734951b0bSDoug Moore bool swap_pager_scan_all_shadowed(vm_object_t object); 78*db08b0b0SDoug Moore vm_pindex_t swap_pager_seek_data(vm_object_t object, vm_pindex_t pindex); 79*db08b0b0SDoug Moore vm_pindex_t swap_pager_seek_hole(vm_object_t object, vm_pindex_t pindex); 80baa1ccceSKonstantin Belousov void swap_pager_freespace(vm_object_t object, vm_pindex_t start, 81baa1ccceSKonstantin Belousov vm_size_t size, vm_size_t *freed); 8211caded3SAlfred Perlstein void swap_pager_swap_init(void); 83b1fd102eSMark Johnston int swap_pager_nswapdev(void); 84686aa928SMark Johnston int swap_pager_reserve(vm_object_t, vm_pindex_t, vm_pindex_t); 85567104a1SPoul-Henning Kamp void swap_pager_status(int *total, int *used); 86ecfbddf0SKonstantin Belousov u_long swap_pager_swapped_pages(vm_object_t object); 870909f38aSPawel Jakub Dawidek void swapoff_all(void); 8828bc23abSKonstantin Belousov bool swap_pager_init_object(vm_object_t object, void *handle, 8928bc23abSKonstantin Belousov struct ucred *cred, vm_ooffset_t size, vm_ooffset_t offset); 90a1287949SEivind Eklund #endif /* _KERNEL */ 913ccbf2d5SPoul-Henning Kamp #endif /* _VM_SWAP_PAGER_H_ */ 92