cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

progress_meter.h (2427B)


      1/*
      2 * Helper functionality for some process progress tracking.
      3 *
      4 * Copyright (c) 2011 IBM Corp.
      5 * Copyright (c) 2012, 2018 Red Hat, Inc.
      6 * Copyright (c) 2020 Virtuozzo International GmbH
      7 *
      8 * Permission is hereby granted, free of charge, to any person obtaining a copy
      9 * of this software and associated documentation files (the "Software"), to deal
     10 * in the Software without restriction, including without limitation the rights
     11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     12 * copies of the Software, and to permit persons to whom the Software is
     13 * furnished to do so, subject to the following conditions:
     14 *
     15 * The above copyright notice and this permission notice shall be included in
     16 * all copies or substantial portions of the Software.
     17 *
     18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     24 * THE SOFTWARE.
     25 */
     26
     27#ifndef QEMU_PROGRESS_METER_H
     28#define QEMU_PROGRESS_METER_H
     29
     30#include "qemu/lockable.h"
     31
     32typedef struct ProgressMeter {
     33    /**
     34     * Current progress. The unit is arbitrary as long as the ratio between
     35     * current and total represents the estimated percentage
     36     * of work already done.
     37     */
     38    uint64_t current;
     39
     40    /** Estimated current value at the completion of the process */
     41    uint64_t total;
     42
     43    QemuMutex lock; /* protects concurrent access to above fields */
     44} ProgressMeter;
     45
     46void progress_init(ProgressMeter *pm);
     47void progress_destroy(ProgressMeter *pm);
     48
     49/* Get a snapshot of internal current and total values  */
     50void progress_get_snapshot(ProgressMeter *pm, uint64_t *current,
     51                           uint64_t *total);
     52
     53/* Increases the amount of work done so far by @done */
     54void progress_work_done(ProgressMeter *pm, uint64_t done);
     55
     56/* Sets how much work has to be done to complete to @remaining */
     57void progress_set_remaining(ProgressMeter *pm, uint64_t remaining);
     58
     59/* Increases the total work to do by @delta */
     60void progress_increase_remaining(ProgressMeter *pm, uint64_t delta);
     61
     62#endif /* QEMU_PROGRESS_METER_H */