[PATCH 6/7] highmem: remove ->virtual from struct page_address_map
From: Lai Jiangshan
Date: Wed Jun 06 2012 - 04:15:46 EST
The virtual address is (void *)PKMAP_ADDR(kmap_index),
But struct page_address_map is always allocated with the same index
(in page_address_maps) as kmap index.
So the virtual address is (void *)PKMAP_ADDR(pam - page_address_maps) here,
the ->virtual is not needed.
Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxx>
---
mm/highmem.c | 17 ++++++-----------
1 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/mm/highmem.c b/mm/highmem.c
index bd2b9d3..6f028cb 100644
--- a/mm/highmem.c
+++ b/mm/highmem.c
@@ -309,7 +309,6 @@ EXPORT_SYMBOL(kunmap_high);
*/
struct page_address_map {
struct page *page;
- void *virtual;
struct list_head list;
};
@@ -339,6 +338,7 @@ void *page_address(const struct page *page)
unsigned long flags;
void *ret;
struct page_address_slot *pas;
+ struct page_address_map *pam;
if (!PageHighMem(page))
return lowmem_page_address(page);
@@ -346,18 +346,14 @@ void *page_address(const struct page *page)
pas = page_slot(page);
ret = NULL;
spin_lock_irqsave(&pas->lock, flags);
- if (!list_empty(&pas->lh)) {
- struct page_address_map *pam;
-
- list_for_each_entry(pam, &pas->lh, list) {
- if (pam->page == page) {
- ret = pam->virtual;
- goto done;
- }
+ list_for_each_entry(pam, &pas->lh, list) {
+ if (pam->page == page) {
+ ret = (void *)PKMAP_ADDR(pam - page_address_maps);
+ break;
}
}
-done:
spin_unlock_irqrestore(&pas->lock, flags);
+
return ret;
}
@@ -370,7 +366,6 @@ static void set_high_page_map(struct page *page, unsigned int nr)
struct page_address_map *pam = &page_address_maps[nr];
pam->page = page;
- pam->virtual = (void *)PKMAP_ADDR(nr);
spin_lock_irqsave(&pas->lock, flags);
list_add_tail(&pam->list, &pas->lh);
--
1.7.7
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/