Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
ee3db0f2
Commit
ee3db0f2
authored
Oct 22, 2007
by
Rusty Russell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rename "cr3" to "gpgdir" to avoid x86-specific naming.
Signed-off-by:
Rusty Russell
<
rusty@rustcorp.com.au
>
parent
df29f43e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
12 additions
and
12 deletions
+12
-12
drivers/lguest/lg.h
drivers/lguest/lg.h
+3
-3
drivers/lguest/page_tables.c
drivers/lguest/page_tables.c
+9
-9
No files found.
drivers/lguest/lg.h
View file @
ee3db0f2
...
...
@@ -30,7 +30,7 @@ struct lguest_dma_info
struct
pgdir
{
unsigned
long
cr3
;
unsigned
long
gpgdir
;
pgd_t
*
pgdir
;
};
...
...
@@ -154,10 +154,10 @@ void copy_gdt_tls(const struct lguest *lg, struct desc_struct *gdt);
int
init_guest_pagetable
(
struct
lguest
*
lg
,
unsigned
long
pgtable
);
void
free_guest_pagetable
(
struct
lguest
*
lg
);
void
guest_new_pagetable
(
struct
lguest
*
lg
,
unsigned
long
pgtable
);
void
guest_set_pmd
(
struct
lguest
*
lg
,
unsigned
long
cr3
,
u32
i
);
void
guest_set_pmd
(
struct
lguest
*
lg
,
unsigned
long
gpgdir
,
u32
i
);
void
guest_pagetable_clear_all
(
struct
lguest
*
lg
);
void
guest_pagetable_flush_user
(
struct
lguest
*
lg
);
void
guest_set_pte
(
struct
lguest
*
lg
,
unsigned
long
cr3
,
void
guest_set_pte
(
struct
lguest
*
lg
,
unsigned
long
gpgdir
,
unsigned
long
vaddr
,
pte_t
val
);
void
map_switcher_in_guest
(
struct
lguest
*
lg
,
struct
lguest_pages
*
pages
);
int
demand_page
(
struct
lguest
*
info
,
unsigned
long
cr2
,
int
errcode
);
...
...
drivers/lguest/page_tables.c
View file @
ee3db0f2
...
...
@@ -96,7 +96,7 @@ static pte_t *spte_addr(struct lguest *lg, pgd_t spgd, unsigned long vaddr)
static
unsigned
long
gpgd_addr
(
struct
lguest
*
lg
,
unsigned
long
vaddr
)
{
unsigned
int
index
=
vaddr
>>
(
PGDIR_SHIFT
);
return
lg
->
pgdirs
[
lg
->
pgdidx
].
cr3
+
index
*
sizeof
(
pgd_t
);
return
lg
->
pgdirs
[
lg
->
pgdidx
].
gpgdir
+
index
*
sizeof
(
pgd_t
);
}
static
unsigned
long
gpte_addr
(
struct
lguest
*
lg
,
...
...
@@ -365,7 +365,7 @@ static unsigned int find_pgdir(struct lguest *lg, unsigned long pgtable)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
lg
->
pgdirs
);
i
++
)
if
(
lg
->
pgdirs
[
i
].
cr3
==
pgtable
)
if
(
lg
->
pgdirs
[
i
].
gpgdir
==
pgtable
)
break
;
return
i
;
}
...
...
@@ -374,7 +374,7 @@ static unsigned int find_pgdir(struct lguest *lg, unsigned long pgtable)
* allocate a new one (and so the kernel parts are not there), we set
* blank_pgdir. */
static
unsigned
int
new_pgdir
(
struct
lguest
*
lg
,
unsigned
long
cr3
,
unsigned
long
gpgdir
,
int
*
blank_pgdir
)
{
unsigned
int
next
;
...
...
@@ -394,7 +394,7 @@ static unsigned int new_pgdir(struct lguest *lg,
*
blank_pgdir
=
1
;
}
/* Record which Guest toplevel this shadows. */
lg
->
pgdirs
[
next
].
cr3
=
cr3
;
lg
->
pgdirs
[
next
].
gpgdir
=
gpgdir
;
/* Release all the non-kernel mappings. */
flush_user_mappings
(
lg
,
next
);
...
...
@@ -496,7 +496,7 @@ static void do_set_pte(struct lguest *lg, int idx,
* The benefit is that when we have to track a new page table, we can copy keep
* all the kernel mappings. This speeds up context switch immensely. */
void
guest_set_pte
(
struct
lguest
*
lg
,
unsigned
long
cr3
,
unsigned
long
vaddr
,
pte_t
gpte
)
unsigned
long
gpgdir
,
unsigned
long
vaddr
,
pte_t
gpte
)
{
/* Kernel mappings must be changed on all top levels. Slow, but
* doesn't happen often. */
...
...
@@ -507,7 +507,7 @@ void guest_set_pte(struct lguest *lg,
do_set_pte
(
lg
,
i
,
vaddr
,
gpte
);
}
else
{
/* Is this page table one we have a shadow for? */
int
pgdir
=
find_pgdir
(
lg
,
cr3
);
int
pgdir
=
find_pgdir
(
lg
,
gpgdir
);
if
(
pgdir
!=
ARRAY_SIZE
(
lg
->
pgdirs
))
/* If so, do the update. */
do_set_pte
(
lg
,
pgdir
,
vaddr
,
gpte
);
...
...
@@ -528,7 +528,7 @@ void guest_set_pte(struct lguest *lg,
*
* So with that in mind here's our code to to update a (top-level) PGD entry:
*/
void
guest_set_pmd
(
struct
lguest
*
lg
,
unsigned
long
cr3
,
u32
idx
)
void
guest_set_pmd
(
struct
lguest
*
lg
,
unsigned
long
gpgdir
,
u32
idx
)
{
int
pgdir
;
...
...
@@ -538,7 +538,7 @@ void guest_set_pmd(struct lguest *lg, unsigned long cr3, u32 idx)
return
;
/* If they're talking about a page table we have a shadow for... */
pgdir
=
find_pgdir
(
lg
,
cr3
);
pgdir
=
find_pgdir
(
lg
,
gpgdir
);
if
(
pgdir
<
ARRAY_SIZE
(
lg
->
pgdirs
))
/* ... throw it away. */
release_pgd
(
lg
,
lg
->
pgdirs
[
pgdir
].
pgdir
+
idx
);
...
...
@@ -558,7 +558,7 @@ int init_guest_pagetable(struct lguest *lg, unsigned long pgtable)
/* We start on the first shadow page table, and give it a blank PGD
* page. */
lg
->
pgdidx
=
0
;
lg
->
pgdirs
[
lg
->
pgdidx
].
cr3
=
pgtable
;
lg
->
pgdirs
[
lg
->
pgdidx
].
gpgdir
=
pgtable
;
lg
->
pgdirs
[
lg
->
pgdidx
].
pgdir
=
(
pgd_t
*
)
get_zeroed_page
(
GFP_KERNEL
);
if
(
!
lg
->
pgdirs
[
lg
->
pgdidx
].
pgdir
)
return
-
ENOMEM
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment