diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-02-15 10:54:12 +0000 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-02-15 10:54:12 +0000 |
commit | 5ce8fafa947c186e7ce002cfa05cfb730cdab408 (patch) | |
tree | 559d232571d34b6c4fa5f03a7511b0c1f9d41f34 /xen/include/xen/grant_table.h | |
parent | 5e5b5b68b45edee6fad4c8cc3d0d3dfa65b9c248 (diff) | |
download | xen-5ce8fafa947c186e7ce002cfa05cfb730cdab408.tar.gz xen-5ce8fafa947c186e7ce002cfa05cfb730cdab408.tar.bz2 xen-5ce8fafa947c186e7ce002cfa05cfb730cdab408.zip |
Dynamic grant-table sizing.
Signed-off-by: Christopher CLark <christopher.clark@cl.cam.ac.uk>
Signed-off-by: Andrei Petrov <andrei.petrov@xensource.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/include/xen/grant_table.h')
-rw-r--r-- | xen/include/xen/grant_table.h | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/xen/include/xen/grant_table.h b/xen/include/xen/grant_table.h index 9fc63a0cbb..54ea021683 100644 --- a/xen/include/xen/grant_table.h +++ b/xen/include/xen/grant_table.h @@ -52,9 +52,14 @@ struct active_grant_entry { #define GNTPIN_devr_inc (1 << GNTPIN_devr_shift) #define GNTPIN_devr_mask (0xFFU << GNTPIN_devr_shift) -#define NR_GRANT_FRAMES (1U << ORDER_GRANT_FRAMES) -#define NR_GRANT_ENTRIES \ - ((NR_GRANT_FRAMES << PAGE_SHIFT) / sizeof(grant_entry_t)) +/* Initial size of a grant table. */ +#define INITIAL_NR_GRANT_ENTRIES ((INITIAL_NR_GRANT_FRAMES << PAGE_SHIFT) / \ + sizeof(grant_entry_t)) + +/* Default maximum size of a grant table. [POLICY] */ +#define DEFAULT_MAX_NR_GRANT_FRAMES 32 +/* The maximum size of a grant table. */ +extern unsigned int max_nr_grant_frames; /* * Tracks a mapping of another domain's grant reference. Each domain has a @@ -71,14 +76,15 @@ struct grant_mapping { /* 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; + struct grant_entry **shared; /* Active grant table. */ - struct active_grant_entry *active; + struct active_grant_entry **active; /* Mapping tracking table. */ - struct grant_mapping *maptrack; + struct grant_mapping **maptrack; unsigned int maptrack_head; - unsigned int maptrack_order; unsigned int maptrack_limit; unsigned int map_count; /* Lock protecting updates to active and shared grant tables. */ @@ -96,4 +102,22 @@ void gnttab_release_mappings( struct domain *d); +/* Increase the size of a domain's grant table. + * Caller must hold d's grant table lock. + */ +int +gnttab_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); +} + #endif /* __XEN_GRANT_TABLE_H__ */ |