[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/5] xen: clean up grant_table.h
Many definitions can be moved from xen/grant_table.h to common/grant_table.c now, as they are no longer used in other sources. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- xen/common/grant_table.c | 81 +++++++++++++++++++++++++++++++++++++++- xen/include/xen/grant_table.h | 86 +------------------------------------------ xen/include/xen/sched.h | 1 + 3 files changed, 81 insertions(+), 87 deletions(-) diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index 9e18dc0493..01d09945da 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -40,6 +40,42 @@ #include <xsm/xsm.h> #include <asm/flushtlb.h> +/* Per-domain grant information. */ +struct grant_table { + /* + * Lock protecting updates to grant table state (version, active + * entry list, etc.) + */ + percpu_rwlock_t lock; + /* Table size. Number of frames shared with guest */ + unsigned int nr_grant_frames; + /* Shared grant table (see include/public/grant_table.h). */ + union { + void **shared_raw; + struct grant_entry_v1 **shared_v1; + union grant_entry_v2 **shared_v2; + }; + /* Number of grant status frames shared with guest (for version 2) */ + unsigned int nr_status_frames; + /* State grant table (see include/public/grant_table.h). */ + grant_status_t **status; + /* Active grant table. */ + struct active_grant_entry **active; + /* Mapping tracking table per vcpu. */ + struct grant_mapping **maptrack; + unsigned int maptrack_limit; + /* Lock protecting the maptrack limit */ + spinlock_t maptrack_lock; + /* The defined versions are 1 and 2. Set to 0 if we don't know + what version to use yet. */ + unsigned gt_version; +}; + +#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 + unsigned int __read_mostly max_grant_frames; integer_param("gnttab_max_frames", max_grant_frames); @@ -118,6 +154,18 @@ struct grant_mapping { uint32_t pad; /* round size to a power of 2 */ }; +/* 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 status grant table frames. Caller must hold d's gr. table lock.*/ +static inline unsigned int nr_status_frames(struct grant_table *gt) +{ + return gt->nr_status_frames; +} + #define MAPTRACK_PER_PAGE (PAGE_SIZE / sizeof(struct grant_mapping)) #define maptrack_entry(t, e) \ ((t)->maptrack[(e)/MAPTRACK_PER_PAGE][(e)%MAPTRACK_PER_PAGE]) @@ -197,7 +245,27 @@ static inline void act_set_gfn(struct active_grant_entry *act, gfn_t gfn) #endif } -DEFINE_PERCPU_RWLOCK_GLOBAL(grant_rwlock); +static DEFINE_PERCPU_RWLOCK_GLOBAL(grant_rwlock); + +static inline void grant_read_lock(struct grant_table *gt) +{ + percpu_read_lock(grant_rwlock, >->lock); +} + +static inline void grant_read_unlock(struct grant_table *gt) +{ + percpu_read_unlock(grant_rwlock, >->lock); +} + +static inline void grant_write_lock(struct grant_table *gt) +{ + percpu_write_lock(grant_rwlock, >->lock); +} + +static inline void grant_write_unlock(struct grant_table *gt) +{ + percpu_write_unlock(grant_rwlock, >->lock); +} static inline void gnttab_flush_tlb(const struct domain *d) { @@ -250,6 +318,15 @@ static inline void active_entry_release(struct active_grant_entry *act) spin_unlock(&act->lock); } +#define GRANT_STATUS_PER_PAGE (PAGE_SIZE / sizeof(grant_status_t)) +#define GRANT_PER_PAGE (PAGE_SIZE / sizeof(grant_entry_v2_t)) +/* Number of grant table status entries. Caller must hold d's gr. table lock.*/ +static inline unsigned int grant_to_status_frames(int grant_frames) +{ + return (grant_frames * GRANT_PER_PAGE + GRANT_STATUS_PER_PAGE - 1) / + GRANT_STATUS_PER_PAGE; +} + /* Check if the page has been paged out, or needs unsharing. If rc == GNTST_okay, *page contains the page struct with a ref taken. Caller must do put_page(*page). @@ -1580,7 +1657,7 @@ gnttab_unpopulate_status_frames(struct domain *d, struct grant_table *gt) * Grow the grant table. The caller must hold the grant table's * write lock before calling this function. */ -int +static int gnttab_grow_table(struct domain *d, unsigned int req_nr_frames) { struct grant_table *gt = d->grant_table; diff --git a/xen/include/xen/grant_table.h b/xen/include/xen/grant_table.h index 43ec6c4d80..06faf61a6b 100644 --- a/xen/include/xen/grant_table.h +++ b/xen/include/xen/grant_table.h @@ -29,65 +29,8 @@ #include <asm/page.h> #include <asm/grant_table.h> -#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 /* The maximum size of a grant table. */ -extern unsigned int max_grant_frames; - -DECLARE_PERCPU_RWLOCK_GLOBAL(grant_rwlock); - -/* Per-domain grant information. */ -struct grant_table { - /* - * Lock protecting updates to grant table state (version, active - * entry list, etc.) - */ - percpu_rwlock_t lock; - /* Table size. Number of frames shared with guest */ - unsigned int nr_grant_frames; - /* Shared grant table (see include/public/grant_table.h). */ - union { - void **shared_raw; - struct grant_entry_v1 **shared_v1; - union grant_entry_v2 **shared_v2; - }; - /* Number of grant status frames shared with guest (for version 2) */ - unsigned int nr_status_frames; - /* State grant table (see include/public/grant_table.h). */ - grant_status_t **status; - /* Active grant table. */ - struct active_grant_entry **active; - /* Mapping tracking table per vcpu. */ - struct grant_mapping **maptrack; - unsigned int maptrack_limit; - /* Lock protecting the maptrack limit */ - spinlock_t maptrack_lock; - /* The defined versions are 1 and 2. Set to 0 if we don't know - what version to use yet. */ - unsigned gt_version; -}; - -static inline void grant_read_lock(struct grant_table *gt) -{ - percpu_read_lock(grant_rwlock, >->lock); -} - -static inline void grant_read_unlock(struct grant_table *gt) -{ - percpu_read_unlock(grant_rwlock, >->lock); -} - -static inline void grant_write_lock(struct grant_table *gt) -{ - percpu_write_lock(grant_rwlock, >->lock); -} - -static inline void grant_write_unlock(struct grant_table *gt) -{ - percpu_write_unlock(grant_rwlock, >->lock); -} +extern unsigned int __read_mostly max_grant_frames; /* Create/destroy per-domain grant table context. */ int grant_table_create( @@ -106,33 +49,6 @@ void gnttab_release_mappings( struct domain *d); -/* Increase the size of a domain's grant table. - * Caller must hold d's grant table write 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 status grant table frames. Caller must hold d's gr. table lock.*/ -static inline unsigned int nr_status_frames(struct grant_table *gt) -{ - return gt->nr_status_frames; -} - -#define GRANT_STATUS_PER_PAGE (PAGE_SIZE / sizeof(grant_status_t)) -#define GRANT_PER_PAGE (PAGE_SIZE / sizeof(grant_entry_v2_t)) -/* Number of grant table status entries. Caller must hold d's gr. table lock.*/ -static inline unsigned int grant_to_status_frames(int grant_frames) -{ - return (grant_frames * GRANT_PER_PAGE + GRANT_STATUS_PER_PAGE - 1) / - GRANT_STATUS_PER_PAGE; -} - int mem_sharing_gref_to_gfn(struct grant_table *gt, grant_ref_t ref, gfn_t *gfn, uint16_t *status); diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 5828a0123c..2dc9728993 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -307,6 +307,7 @@ struct vm_event_per_domain }; struct evtchn_port_ops; +struct grant_table; enum guest_type { guest_type_pv, guest_type_hvm -- 2.12.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |