xref: /freebsd-src/sys/compat/linuxkpi/common/include/linux/shrinker.h (revision a39ed121eab16bd2579422f71df7ef29b55965d1)
12c95fb75SEmmanuel Vadot /*-
22c95fb75SEmmanuel Vadot  * Copyright (c) 2020 Emmanuel Vadot <manu@FreeBSD.org>
32c95fb75SEmmanuel Vadot  *
42c95fb75SEmmanuel Vadot  * Redistribution and use in source and binary forms, with or without
52c95fb75SEmmanuel Vadot  * modification, are permitted provided that the following conditions
62c95fb75SEmmanuel Vadot  * are met:
72c95fb75SEmmanuel Vadot  * 1. Redistributions of source code must retain the above copyright
82c95fb75SEmmanuel Vadot  *    notice, this list of conditions and the following disclaimer.
92c95fb75SEmmanuel Vadot  * 2. Redistributions in binary form must reproduce the above copyright
102c95fb75SEmmanuel Vadot  *    notice, this list of conditions and the following disclaimer in the
112c95fb75SEmmanuel Vadot  *    documentation and/or other materials provided with the distribution.
122c95fb75SEmmanuel Vadot  *
132c95fb75SEmmanuel Vadot  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
142c95fb75SEmmanuel Vadot  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
152c95fb75SEmmanuel Vadot  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
162c95fb75SEmmanuel Vadot  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
172c95fb75SEmmanuel Vadot  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
182c95fb75SEmmanuel Vadot  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
192c95fb75SEmmanuel Vadot  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
202c95fb75SEmmanuel Vadot  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
212c95fb75SEmmanuel Vadot  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
222c95fb75SEmmanuel Vadot  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
232c95fb75SEmmanuel Vadot  * SUCH DAMAGE.
242c95fb75SEmmanuel Vadot  */
252c95fb75SEmmanuel Vadot 
26307f78f3SVladimir Kondratyev #ifndef _LINUXKPI_LINUX_SHRINKER_H_
27307f78f3SVladimir Kondratyev #define	_LINUXKPI_LINUX_SHRINKER_H_
282c95fb75SEmmanuel Vadot 
292c95fb75SEmmanuel Vadot #include <sys/queue.h>
303aa335d0SJean-Sébastien Pédron #include <linux/gfp.h>
312c95fb75SEmmanuel Vadot 
322c95fb75SEmmanuel Vadot struct shrink_control {
333aa335d0SJean-Sébastien Pédron 	gfp_t		gfp_mask;
342c95fb75SEmmanuel Vadot 	unsigned long	nr_to_scan;
352c95fb75SEmmanuel Vadot 	unsigned long	nr_scanned;
362c95fb75SEmmanuel Vadot };
372c95fb75SEmmanuel Vadot 
382c95fb75SEmmanuel Vadot struct shrinker {
392c95fb75SEmmanuel Vadot 	unsigned long		(*count_objects)(struct shrinker *, struct shrink_control *);
402c95fb75SEmmanuel Vadot 	unsigned long		(*scan_objects)(struct shrinker *, struct shrink_control *);
412c95fb75SEmmanuel Vadot 	int			seeks;
422c95fb75SEmmanuel Vadot 	long			batch;
432c95fb75SEmmanuel Vadot 	TAILQ_ENTRY(shrinker)	next;
442c95fb75SEmmanuel Vadot };
452c95fb75SEmmanuel Vadot 
462c95fb75SEmmanuel Vadot #define	SHRINK_STOP	(~0UL)
472c95fb75SEmmanuel Vadot 
482c95fb75SEmmanuel Vadot #define	DEFAULT_SEEKS	2
492c95fb75SEmmanuel Vadot 
502c95fb75SEmmanuel Vadot int	linuxkpi_register_shrinker(struct shrinker *s);
512c95fb75SEmmanuel Vadot void	linuxkpi_unregister_shrinker(struct shrinker *s);
5283636727SJean-Sébastien Pédron void	linuxkpi_synchronize_shrinkers(void);
532c95fb75SEmmanuel Vadot 
54*a39ed121SVladimir Kondratyev #if defined(LINUXKPI_VERSION) && LINUXKPI_VERSION >= 60000
55*a39ed121SVladimir Kondratyev #define	register_shrinker(s, ...)	linuxkpi_register_shrinker(s)
56*a39ed121SVladimir Kondratyev #else
572c95fb75SEmmanuel Vadot #define	register_shrinker(s)	linuxkpi_register_shrinker(s)
58*a39ed121SVladimir Kondratyev #endif
592c95fb75SEmmanuel Vadot #define	unregister_shrinker(s)	linuxkpi_unregister_shrinker(s)
6083636727SJean-Sébastien Pédron #define	synchronize_shrinkers()	linuxkpi_synchronize_shrinkers()
612c95fb75SEmmanuel Vadot 
62307f78f3SVladimir Kondratyev #endif	/* _LINUXKPI_LINUX_SHRINKER_H_ */
63