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

export.h (2495B)


      1/*
      2 * Declarations for block exports
      3 *
      4 * Copyright (c) 2012, 2020 Red Hat, Inc.
      5 *
      6 * Authors:
      7 * Paolo Bonzini <pbonzini@redhat.com>
      8 * Kevin Wolf <kwolf@redhat.com>
      9 *
     10 * This work is licensed under the terms of the GNU GPL, version 2 or
     11 * later.  See the COPYING file in the top-level directory.
     12 */
     13
     14#ifndef BLOCK_EXPORT_H
     15#define BLOCK_EXPORT_H
     16
     17#include "qapi/qapi-types-block-export.h"
     18#include "qemu/queue.h"
     19
     20typedef struct BlockExport BlockExport;
     21
     22typedef struct BlockExportDriver {
     23    /* The export type that this driver services */
     24    BlockExportType type;
     25
     26    /*
     27     * The size of the driver-specific state that contains BlockExport as its
     28     * first field.
     29     */
     30    size_t instance_size;
     31
     32    /* Creates and starts a new block export */
     33    int (*create)(BlockExport *, BlockExportOptions *, Error **);
     34
     35    /*
     36     * Frees a removed block export. This function is only called after all
     37     * references have been dropped.
     38     */
     39    void (*delete)(BlockExport *);
     40
     41    /*
     42     * Start to disconnect all clients and drop other references held
     43     * internally by the export driver. When the function returns, there may
     44     * still be active references while the export is in the process of
     45     * shutting down.
     46     */
     47    void (*request_shutdown)(BlockExport *);
     48} BlockExportDriver;
     49
     50struct BlockExport {
     51    const BlockExportDriver *drv;
     52
     53    /* Unique identifier for the export */
     54    char *id;
     55
     56    /*
     57     * Reference count for this block export. This includes strong references
     58     * both from the owner (qemu-nbd or the monitor) and clients connected to
     59     * the export.
     60     */
     61    int refcount;
     62
     63    /*
     64     * True if one of the references in refcount belongs to the user. After the
     65     * user has dropped their reference, they may not e.g. remove the same
     66     * export a second time (which would decrease the refcount without having
     67     * it incremented first).
     68     */
     69    bool user_owned;
     70
     71    /* The AioContext whose lock protects this BlockExport object. */
     72    AioContext *ctx;
     73
     74    /* The block device to export */
     75    BlockBackend *blk;
     76
     77    /* List entry for block_exports */
     78    QLIST_ENTRY(BlockExport) next;
     79};
     80
     81BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp);
     82BlockExport *blk_exp_find(const char *id);
     83void blk_exp_ref(BlockExport *exp);
     84void blk_exp_unref(BlockExport *exp);
     85void blk_exp_request_shutdown(BlockExport *exp);
     86void blk_exp_close_all(void);
     87void blk_exp_close_all_type(BlockExportType type);
     88
     89#endif