aboutsummaryrefslogtreecommitdiffstats
path: root/tools/xenpaging
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2011-01-11 10:31:33 +0000
committerKeir Fraser <keir@xen.org>2011-01-11 10:31:33 +0000
commit56f2a91b86c48d976d9e7908b218575da740016d (patch)
tree7ced160eacb280d53f4b7f220f5efadf48dae808 /tools/xenpaging
parenta3b9de49c68310f0633cac62f1ab41813975390a (diff)
downloadxen-56f2a91b86c48d976d9e7908b218575da740016d.tar.gz
xen-56f2a91b86c48d976d9e7908b218575da740016d.tar.bz2
xen-56f2a91b86c48d976d9e7908b218575da740016d.zip
xenpaging: remove domain_id and mfn from struct xenpaging_victim
Remove unused member 'mfn' from struct xenpaging_victim. xenpaging operates on a single guest, so it needs only a single domain_id. Remove domain_id from struct xenpaging_victim and use the one from paging->mem_event where needed. Its not used in the policy. This saves 4MB runtime data with a 1GB pagefile. Signed-off-by: Olaf Hering <olaf@aepfle.de>
Diffstat (limited to 'tools/xenpaging')
-rw-r--r--tools/xenpaging/policy.h7
-rw-r--r--tools/xenpaging/policy_default.c10
-rw-r--r--tools/xenpaging/xenpaging.c26
-rw-r--r--tools/xenpaging/xenpaging.h4
4 files changed, 18 insertions, 29 deletions
diff --git a/tools/xenpaging/policy.h b/tools/xenpaging/policy.h
index 5d7ed6c1db..18a92569ca 100644
--- a/tools/xenpaging/policy.h
+++ b/tools/xenpaging/policy.h
@@ -29,10 +29,9 @@
int policy_init(xenpaging_t *paging);
-int policy_choose_victim(xenpaging_t *paging, domid_t domain_id,
- xenpaging_victim_t *victim);
-void policy_notify_paged_out(domid_t domain_id, unsigned long gfn);
-void policy_notify_paged_in(domid_t domain_id, unsigned long gfn);
+int policy_choose_victim(xenpaging_t *paging, xenpaging_victim_t *victim);
+void policy_notify_paged_out(unsigned long gfn);
+void policy_notify_paged_in(unsigned long gfn);
#endif // __XEN_PAGING_POLICY_H__
diff --git a/tools/xenpaging/policy_default.c b/tools/xenpaging/policy_default.c
index e1e727991d..2ab96b79c5 100644
--- a/tools/xenpaging/policy_default.c
+++ b/tools/xenpaging/policy_default.c
@@ -67,16 +67,12 @@ int policy_init(xenpaging_t *paging)
return rc;
}
-int policy_choose_victim(xenpaging_t *paging, domid_t domain_id,
- xenpaging_victim_t *victim)
+int policy_choose_victim(xenpaging_t *paging, xenpaging_victim_t *victim)
{
xc_interface *xch = paging->xc_handle;
unsigned long wrap = current_gfn;
ASSERT(victim != NULL);
- /* Domain to pick on */
- victim->domain_id = domain_id;
-
do
{
current_gfn++;
@@ -96,13 +92,13 @@ int policy_choose_victim(xenpaging_t *paging, domid_t domain_id,
return 0;
}
-void policy_notify_paged_out(domid_t domain_id, unsigned long gfn)
+void policy_notify_paged_out(unsigned long gfn)
{
set_bit(gfn, bitmap);
clear_bit(gfn, unconsumed);
}
-void policy_notify_paged_in(domid_t domain_id, unsigned long gfn)
+void policy_notify_paged_in(unsigned long gfn)
{
unsigned long old_gfn = mru[i_mru & (MRU_SIZE - 1)];
diff --git a/tools/xenpaging/xenpaging.c b/tools/xenpaging/xenpaging.c
index 4608cf67bd..aae30ebfa3 100644
--- a/tools/xenpaging/xenpaging.c
+++ b/tools/xenpaging/xenpaging.c
@@ -171,7 +171,7 @@ xenpaging_t *xenpaging_init(domid_t domain_id)
goto err;
}
- rc = xc_get_platform_info(xch, domain_id,
+ rc = xc_get_platform_info(xch, paging->mem_event.domain_id,
paging->platform_info);
if ( rc != 1 )
{
@@ -187,7 +187,7 @@ xenpaging_t *xenpaging_init(domid_t domain_id)
goto err;
}
- rc = xc_domain_getinfolist(xch, domain_id, 1,
+ rc = xc_domain_getinfolist(xch, paging->mem_event.domain_id, 1,
paging->domain_info);
if ( rc != 1 )
{
@@ -348,7 +348,7 @@ int xenpaging_evict_page(xenpaging_t *paging,
/* Map page */
gfn = victim->gfn;
ret = -EFAULT;
- page = xc_map_foreign_pages(xch, victim->domain_id,
+ page = xc_map_foreign_pages(xch, paging->mem_event.domain_id,
PROT_READ | PROT_WRITE, &gfn, 1);
if ( page == NULL )
{
@@ -380,7 +380,7 @@ int xenpaging_evict_page(xenpaging_t *paging,
}
/* Notify policy of page being paged out */
- policy_notify_paged_out(paging->mem_event.domain_id, victim->gfn);
+ policy_notify_paged_out(victim->gfn);
out:
return ret;
@@ -397,7 +397,7 @@ static int xenpaging_resume_page(xenpaging_t *paging, mem_event_response_t *rsp,
/* Notify policy of page being paged in */
if ( notify_policy )
- policy_notify_paged_in(paging->mem_event.domain_id, rsp->gfn);
+ policy_notify_paged_in(rsp->gfn);
/* Tell Xen page is ready */
ret = xc_mem_paging_resume(paging->xc_handle, paging->mem_event.domain_id,
@@ -464,7 +464,7 @@ static int xenpaging_populate_page(xenpaging_t *paging,
return ret;
}
-static int evict_victim(xenpaging_t *paging, domid_t domain_id,
+static int evict_victim(xenpaging_t *paging,
xenpaging_victim_t *victim, int fd, int i)
{
xc_interface *xch = paging->xc_handle;
@@ -473,7 +473,7 @@ static int evict_victim(xenpaging_t *paging, domid_t domain_id,
do
{
- ret = policy_choose_victim(paging, domain_id, victim);
+ ret = policy_choose_victim(paging, victim);
if ( ret != 0 )
{
if ( ret != -ENOSPC )
@@ -486,14 +486,13 @@ static int evict_victim(xenpaging_t *paging, domid_t domain_id,
ret = -EINTR;
goto out;
}
- ret = xc_mem_paging_nominate(xch,
- paging->mem_event.domain_id, victim->gfn);
+ ret = xc_mem_paging_nominate(xch, paging->mem_event.domain_id, victim->gfn);
if ( ret == 0 )
ret = xenpaging_evict_page(paging, victim, fd, i);
else
{
if ( j++ % 1000 == 0 )
- if ( xc_mem_paging_flush_ioemu_cache(domain_id) )
+ if ( xc_mem_paging_flush_ioemu_cache(paging->mem_event.domain_id) )
ERROR("Error flushing ioemu cache");
}
}
@@ -578,7 +577,7 @@ int main(int argc, char *argv[])
memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages);
for ( i = 0; i < num_pages; i++ )
{
- rc = evict_victim(paging, domain_id, &victims[i], fd, i);
+ rc = evict_victim(paging, &victims[i], fd, i);
if ( rc == -ENOSPC )
break;
if ( rc == -EINTR )
@@ -619,8 +618,7 @@ int main(int argc, char *argv[])
/* Find where in the paging file to read from */
for ( i = 0; i < num_pages; i++ )
{
- if ( (victims[i].domain_id == paging->mem_event.domain_id) &&
- (victims[i].gfn == req.gfn) )
+ if ( victims[i].gfn == req.gfn )
break;
}
@@ -652,7 +650,7 @@ int main(int argc, char *argv[])
}
/* Evict a new page to replace the one we just paged in */
- evict_victim(paging, domain_id, &victims[i], fd, i);
+ evict_victim(paging, &victims[i], fd, i);
}
else
{
diff --git a/tools/xenpaging/xenpaging.h b/tools/xenpaging/xenpaging.h
index d8451937d3..a6bf556200 100644
--- a/tools/xenpaging/xenpaging.h
+++ b/tools/xenpaging/xenpaging.h
@@ -49,12 +49,8 @@ typedef struct xenpaging {
typedef struct xenpaging_victim {
- /* the domain to evict a page from */
- domid_t domain_id;
/* the gfn of the page to evict */
unsigned long gfn;
- /* the mfn of evicted page */
- unsigned long mfn;
} xenpaging_victim_t;