|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xen/arm: p2m: Don't create new table when the mapping is removed
commit 8672aa8384d18690df62b2cff2627590e93b0359
Author: Julien Grall <julien.grall@xxxxxxxxxx>
AuthorDate: Fri Dec 20 01:41:20 2013 +0000
Commit: Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Fri Dec 20 09:21:57 2013 +0000
xen/arm: p2m: Don't create new table when the mapping is removed
When Xen is removing/relinquishing mapping, it will create second/third
tables
if they don't exist.
Non-existent table means the address range was never mapped, so Xen can
safely
skip them.
Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
xen/arch/arm/p2m.c | 22 ++++++++++++++++++++--
1 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
index d24a6fc..11f4714 100644
--- a/xen/arch/arm/p2m.c
+++ b/xen/arch/arm/p2m.c
@@ -246,10 +246,12 @@ static int create_p2m_entries(struct domain *d,
cur_first_offset = ~0,
cur_second_offset = ~0;
unsigned long count = 0;
+ bool_t populate = (op == INSERT || op == ALLOCATE);
spin_lock(&p2m->lock);
- for(addr = start_gpaddr; addr < end_gpaddr; addr += PAGE_SIZE)
+ addr = start_gpaddr;
+ while ( addr < end_gpaddr )
{
if ( cur_first_page != p2m_first_level_index(addr) )
{
@@ -265,8 +267,15 @@ static int create_p2m_entries(struct domain *d,
if ( !first[first_table_offset(addr)].p2m.valid )
{
+ if ( !populate )
+ {
+ addr = (addr + FIRST_SIZE) & FIRST_MASK;
+ continue;
+ }
+
rc = p2m_create_table(d, &first[first_table_offset(addr)]);
- if ( rc < 0 ) {
+ if ( rc < 0 )
+ {
printk("p2m_populate_ram: L1 failed\n");
goto out;
}
@@ -284,6 +293,12 @@ static int create_p2m_entries(struct domain *d,
if ( !second[second_table_offset(addr)].p2m.valid )
{
+ if ( !populate )
+ {
+ addr = (addr + SECOND_SIZE) & SECOND_MASK;
+ continue;
+ }
+
rc = p2m_create_table(d, &second[second_table_offset(addr)]);
if ( rc < 0 ) {
printk("p2m_populate_ram: L2 failed\n");
@@ -372,6 +387,9 @@ static int create_p2m_entries(struct domain *d,
}
count = 0;
}
+
+ /* Got the next page */
+ addr += PAGE_SIZE;
}
if ( op == ALLOCATE || op == INSERT )
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |