From 354db6295f178437201cbbe59b5aa583e04ffbe1 Mon Sep 17 00:00:00 2001 From: Steven Smith Date: Thu, 16 Apr 2009 14:13:16 +0100 Subject: [PATCH] Add a context to the live map track entries. --- drivers/xen/netback/netback.c | 6 ++++-- include/xen/live_maps.h | 14 +++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/xen/netback/netback.c b/drivers/xen/netback/netback.c index 64a015ed169..2ea96223954 100644 --- a/drivers/xen/netback/netback.c +++ b/drivers/xen/netback/netback.c @@ -854,7 +854,8 @@ static struct gnttab_map_grant_ref *netbk_get_requests(struct xen_netif *netif, mmap_pages[pending_idx], netif->domid, pending_tx_info[pending_idx].req.gref, - pending_idx); + pending_idx, + NULL); } return mop; @@ -1197,7 +1198,8 @@ static unsigned net_tx_build_mops(void) mmap_pages[pending_idx], netif->domid, txreq.gref, - pending_idx); + pending_idx, + NULL); memcpy(&pending_tx_info[pending_idx].req, &txreq, sizeof(txreq)); diff --git a/include/xen/live_maps.h b/include/xen/live_maps.h index 54c3dd46d71..130e151a3fb 100644 --- a/include/xen/live_maps.h +++ b/include/xen/live_maps.h @@ -49,6 +49,7 @@ struct page_foreign_tracked { domid_t dom; grant_ref_t gref; + void *ctxt; #ifdef LIVE_MAPS_DEBUG unsigned in_use; #endif @@ -70,6 +71,12 @@ struct page_foreign_tracker *alloc_page_foreign_tracker(unsigned size); should be no tracked pages when this is called. */ void free_page_foreign_tracker(struct page_foreign_tracker *pft); +static inline struct page_foreign_tracker *tracker_for_page(struct page *p) +{ + unsigned idx = page_private(p); + return foreign_trackers[idx >> LIVE_MAP_TRACKER_IDX_BITS]; +} + /* Start tracking a page. @idx is an index in the tracker which is not currently in use, and must be less than the size of the tracker. The page must be marked as foreign before this is called. @@ -80,7 +87,8 @@ static inline void start_tracking_page(struct page_foreign_tracker *pft, struct page *p, domid_t dom, grant_ref_t gref, - unsigned idx) + unsigned idx, + void *ctxt) { BUG_ON(!PageForeign(p)); #ifdef LIVE_MAPS_DEBUG @@ -99,7 +107,7 @@ static inline void stop_tracking_page(struct page *p) struct page_foreign_tracker *pft; unsigned idx = page_private(p); BUG_ON(!PageForeign(p)); - pft = foreign_trackers[idx >> LIVE_MAP_TRACKER_IDX_BITS]; + pft = tracker_for_page(p); BUG_ON((idx & LIVE_MAP_TRACKER_IDX_MASK) >= pft->size); BUG_ON(!pft->contents[idx & LIVE_MAP_TRACKER_IDX_MASK].in_use); pft->contents[idx & LIVE_MAP_TRACKER_IDX_MASK].in_use = 0; @@ -117,7 +125,7 @@ static inline void lookup_tracker_page(struct page *p, domid_t *dom, struct page_foreign_tracker *pft; unsigned idx = page_private(p); BUG_ON(!PageForeign(p)); - pft = foreign_trackers[idx >> LIVE_MAP_TRACKER_IDX_BITS]; + pft = tracker_for_page(p); #ifdef LIVE_MAPS_DEBUG BUG_ON(!pft); BUG_ON((idx & LIVE_MAP_TRACKER_IDX_MASK) >= pft->size); -- 2.39.5