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

lops.h (2455B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
      4 * Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
      5 */
      6
      7#ifndef __LOPS_DOT_H__
      8#define __LOPS_DOT_H__
      9
     10#include <linux/list.h>
     11#include "incore.h"
     12
     13extern const struct gfs2_log_operations *gfs2_log_ops[];
     14extern void gfs2_log_incr_head(struct gfs2_sbd *sdp);
     15extern u64 gfs2_log_bmap(struct gfs2_jdesc *jd, unsigned int lbn);
     16extern void gfs2_log_write(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd,
     17			   struct page *page, unsigned size, unsigned offset,
     18			   u64 blkno);
     19extern void gfs2_log_submit_bio(struct bio **biop, int opf);
     20extern void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh);
     21extern int gfs2_find_jhead(struct gfs2_jdesc *jd,
     22			   struct gfs2_log_header_host *head, bool keep_cache);
     23extern void gfs2_drain_revokes(struct gfs2_sbd *sdp);
     24static inline unsigned int buf_limit(struct gfs2_sbd *sdp)
     25{
     26	return sdp->sd_ldptrs;
     27}
     28
     29static inline unsigned int databuf_limit(struct gfs2_sbd *sdp)
     30{
     31	return sdp->sd_ldptrs / 2;
     32}
     33
     34static inline void lops_before_commit(struct gfs2_sbd *sdp,
     35				      struct gfs2_trans *tr)
     36{
     37	int x;
     38	for (x = 0; gfs2_log_ops[x]; x++)
     39		if (gfs2_log_ops[x]->lo_before_commit)
     40			gfs2_log_ops[x]->lo_before_commit(sdp, tr);
     41}
     42
     43static inline void lops_after_commit(struct gfs2_sbd *sdp,
     44				     struct gfs2_trans *tr)
     45{
     46	int x;
     47	for (x = 0; gfs2_log_ops[x]; x++)
     48		if (gfs2_log_ops[x]->lo_after_commit)
     49			gfs2_log_ops[x]->lo_after_commit(sdp, tr);
     50}
     51
     52static inline void lops_before_scan(struct gfs2_jdesc *jd,
     53				    struct gfs2_log_header_host *head,
     54				    unsigned int pass)
     55{
     56	int x;
     57	for (x = 0; gfs2_log_ops[x]; x++)
     58		if (gfs2_log_ops[x]->lo_before_scan)
     59			gfs2_log_ops[x]->lo_before_scan(jd, head, pass);
     60}
     61
     62static inline int lops_scan_elements(struct gfs2_jdesc *jd, u32 start,
     63				     struct gfs2_log_descriptor *ld,
     64				     __be64 *ptr,
     65				     unsigned int pass)
     66{
     67	int x, error;
     68	for (x = 0; gfs2_log_ops[x]; x++)
     69		if (gfs2_log_ops[x]->lo_scan_elements) {
     70			error = gfs2_log_ops[x]->lo_scan_elements(jd, start,
     71								  ld, ptr, pass);
     72			if (error)
     73				return error;
     74		}
     75
     76	return 0;
     77}
     78
     79static inline void lops_after_scan(struct gfs2_jdesc *jd, int error,
     80				   unsigned int pass)
     81{
     82	int x;
     83	for (x = 0; gfs2_log_ops[x]; x++)
     84		if (gfs2_log_ops[x]->lo_before_scan)
     85			gfs2_log_ops[x]->lo_after_scan(jd, error, pass);
     86}
     87
     88#endif /* __LOPS_DOT_H__ */
     89