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

xfs_pwork.h (1407B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Copyright (C) 2019 Oracle.  All Rights Reserved.
      4 * Author: Darrick J. Wong <darrick.wong@oracle.com>
      5 */
      6#ifndef __XFS_PWORK_H__
      7#define __XFS_PWORK_H__
      8
      9struct xfs_pwork;
     10struct xfs_mount;
     11
     12typedef int (*xfs_pwork_work_fn)(struct xfs_mount *mp, struct xfs_pwork *pwork);
     13
     14/*
     15 * Parallel work coordination structure.
     16 */
     17struct xfs_pwork_ctl {
     18	struct workqueue_struct	*wq;
     19	struct xfs_mount	*mp;
     20	xfs_pwork_work_fn	work_fn;
     21	struct wait_queue_head	poll_wait;
     22	atomic_t		nr_work;
     23	int			error;
     24};
     25
     26/*
     27 * Embed this parallel work control item inside your own work structure,
     28 * then queue work with it.
     29 */
     30struct xfs_pwork {
     31	struct work_struct	work;
     32	struct xfs_pwork_ctl	*pctl;
     33};
     34
     35#define XFS_PWORK_SINGLE_THREADED	{ .pctl = NULL }
     36
     37/* Have we been told to abort? */
     38static inline bool
     39xfs_pwork_ctl_want_abort(
     40	struct xfs_pwork_ctl	*pctl)
     41{
     42	return pctl && pctl->error;
     43}
     44
     45/* Have we been told to abort? */
     46static inline bool
     47xfs_pwork_want_abort(
     48	struct xfs_pwork	*pwork)
     49{
     50	return xfs_pwork_ctl_want_abort(pwork->pctl);
     51}
     52
     53int xfs_pwork_init(struct xfs_mount *mp, struct xfs_pwork_ctl *pctl,
     54		xfs_pwork_work_fn work_fn, const char *tag);
     55void xfs_pwork_queue(struct xfs_pwork_ctl *pctl, struct xfs_pwork *pwork);
     56int xfs_pwork_destroy(struct xfs_pwork_ctl *pctl);
     57void xfs_pwork_poll(struct xfs_pwork_ctl *pctl);
     58
     59#endif /* __XFS_PWORK_H__ */