⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grant_table.h

📁 xen 3.2.2 源码
💻 H
字号:
/****************************************************************************** * include/xen/grant_table.h *  * Mechanism for granting foreign access to page frames, and receiving * page-ownership transfers. *  * Copyright (c) 2004-2005 K A Fraser *  * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. *  * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#ifndef __XEN_GRANT_TABLE_H__#define __XEN_GRANT_TABLE_H__#include <xen/config.h>#include <public/grant_table.h>#include <asm/grant_table.h>/* Active grant entry - used for shadowing GTF_permit_access grants. */struct active_grant_entry {    u32           pin;    /* Reference count information.  */    domid_t       domid;  /* Domain being granted access.  */    unsigned long frame;  /* Frame being granted.          */}; /* Count of writable host-CPU mappings. */#define GNTPIN_hstw_shift    (0)#define GNTPIN_hstw_inc      (1 << GNTPIN_hstw_shift)#define GNTPIN_hstw_mask     (0xFFU << GNTPIN_hstw_shift) /* Count of read-only host-CPU mappings. */#define GNTPIN_hstr_shift    (8)#define GNTPIN_hstr_inc      (1 << GNTPIN_hstr_shift)#define GNTPIN_hstr_mask     (0xFFU << GNTPIN_hstr_shift) /* Count of writable device-bus mappings. */#define GNTPIN_devw_shift    (16)#define GNTPIN_devw_inc      (1 << GNTPIN_devw_shift)#define GNTPIN_devw_mask     (0xFFU << GNTPIN_devw_shift) /* Count of read-only device-bus mappings. */#define GNTPIN_devr_shift    (24)#define GNTPIN_devr_inc      (1 << GNTPIN_devr_shift)#define GNTPIN_devr_mask     (0xFFU << GNTPIN_devr_shift)/* Initial size of a grant table. */#define INITIAL_NR_GRANT_ENTRIES ((INITIAL_NR_GRANT_FRAMES << PAGE_SHIFT) / \                                     sizeof(grant_entry_t))#ifndef DEFAULT_MAX_NR_GRANT_FRAMES /* to allow arch to override *//* Default maximum size of a grant table. [POLICY] */#define DEFAULT_MAX_NR_GRANT_FRAMES   32#endif#ifndef max_nr_grant_frames /* to allow arch to override *//* The maximum size of a grant table. */extern unsigned int max_nr_grant_frames;#endif/* * Tracks a mapping of another domain's grant reference. Each domain has a * table of these, indexes into which are returned as a 'mapping handle'. */struct grant_mapping {    u32      ref;           /* grant ref */    u16      flags;         /* 0-4: GNTMAP_* ; 5-15: unused */    domid_t  domid;         /* granting domain */};/* Fairly arbitrary. [POLICY] */#define MAPTRACK_MAX_ENTRIES 16384/* Per-domain grant information. */struct grant_table {    /* Table size. Number of frames shared with guest */    unsigned int          nr_grant_frames;    /* Shared grant table (see include/public/grant_table.h). */    struct grant_entry  **shared;    /* Active grant table. */    struct active_grant_entry **active;    /* Mapping tracking table. */    struct grant_mapping **maptrack;    unsigned int          maptrack_head;    unsigned int          maptrack_limit;    unsigned int          map_count;    /* Lock protecting updates to active and shared grant tables. */    spinlock_t            lock;};/* Create/destroy per-domain grant table context. */int grant_table_create(    struct domain *d);void grant_table_destroy(    struct domain *d);/* Domain death release of granted mappings of other domains' memory. */voidgnttab_release_mappings(    struct domain *d);/* Increase the size of a domain's grant table. * Caller must hold d's grant table lock. */intgnttab_grow_table(struct domain *d, unsigned int req_nr_frames);/* Number of grant table frames. Caller must hold d's grant table lock. */static inline unsigned int nr_grant_frames(struct grant_table *gt){    return gt->nr_grant_frames;}/* Number of grant table entries. Caller must hold d's grant table lock. */static inline unsigned int nr_grant_entries(struct grant_table *gt){    return (nr_grant_frames(gt) << PAGE_SHIFT) / sizeof(grant_entry_t);}static inline unsigned intnum_act_frames_from_sha_frames(const unsigned int num){    /* How many frames are needed for the active grant table,     * given the size of the shared grant table?     *     * act_per_page = PAGE_SIZE / sizeof(active_grant_entry_t);     * sha_per_page = PAGE_SIZE / sizeof(grant_entry_t);     * num_sha_entries = num * sha_per_page;     * num_act_frames = (num_sha_entries + (act_per_page-1)) / act_per_page;     */    return ((num * (PAGE_SIZE / sizeof(grant_entry_t))) +            ((PAGE_SIZE / sizeof(struct active_grant_entry))-1))           / (PAGE_SIZE / sizeof(struct active_grant_entry));}static inline unsigned intnr_active_grant_frames(struct grant_table *gt){    return num_act_frames_from_sha_frames(nr_grant_frames(gt));}#endif /* __XEN_GRANT_TABLE_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -