cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

page_actor.h (1913B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2#ifndef PAGE_ACTOR_H
      3#define PAGE_ACTOR_H
      4/*
      5 * Copyright (c) 2013
      6 * Phillip Lougher <phillip@squashfs.org.uk>
      7 */
      8
      9#ifndef CONFIG_SQUASHFS_FILE_DIRECT
     10struct squashfs_page_actor {
     11	void	**page;
     12	int	pages;
     13	int	length;
     14	int	next_page;
     15};
     16
     17static inline struct squashfs_page_actor *squashfs_page_actor_init(void **page,
     18	int pages, int length)
     19{
     20	struct squashfs_page_actor *actor = kmalloc(sizeof(*actor), GFP_KERNEL);
     21
     22	if (actor == NULL)
     23		return NULL;
     24
     25	actor->length = length ? : pages * PAGE_SIZE;
     26	actor->page = page;
     27	actor->pages = pages;
     28	actor->next_page = 0;
     29	return actor;
     30}
     31
     32static inline void *squashfs_first_page(struct squashfs_page_actor *actor)
     33{
     34	actor->next_page = 1;
     35	return actor->page[0];
     36}
     37
     38static inline void *squashfs_next_page(struct squashfs_page_actor *actor)
     39{
     40	return actor->next_page == actor->pages ? NULL :
     41		actor->page[actor->next_page++];
     42}
     43
     44static inline void squashfs_finish_page(struct squashfs_page_actor *actor)
     45{
     46	/* empty */
     47}
     48#else
     49struct squashfs_page_actor {
     50	union {
     51		void		**buffer;
     52		struct page	**page;
     53	};
     54	void	*pageaddr;
     55	void    *(*squashfs_first_page)(struct squashfs_page_actor *);
     56	void    *(*squashfs_next_page)(struct squashfs_page_actor *);
     57	void    (*squashfs_finish_page)(struct squashfs_page_actor *);
     58	int	pages;
     59	int	length;
     60	int	next_page;
     61};
     62
     63extern struct squashfs_page_actor *squashfs_page_actor_init(void **, int, int);
     64extern struct squashfs_page_actor *squashfs_page_actor_init_special(struct page
     65							 **, int, int);
     66static inline void *squashfs_first_page(struct squashfs_page_actor *actor)
     67{
     68	return actor->squashfs_first_page(actor);
     69}
     70static inline void *squashfs_next_page(struct squashfs_page_actor *actor)
     71{
     72	return actor->squashfs_next_page(actor);
     73}
     74static inline void squashfs_finish_page(struct squashfs_page_actor *actor)
     75{
     76	actor->squashfs_finish_page(actor);
     77}
     78#endif
     79#endif