Commit efe08a3e authored by Jan Beulich's avatar Jan Beulich Committed by Konrad Rzeszutek Wilk

xen/blkback: simplify address translations

Cherry-pick and modified from 69d64727c42eecd47fdf82c15a54474d21a4012a
("blkback/blktap2: simplify address translations"):

"There are quite a number of places where e.g. page->va->page
translations happen.

Besides yielding smaller code (source and binary), a second goal is to
make it easier to determine where virtual addresses of pages allocated
through alloc_empty_pages_and_pagevec() are really used (in turn in
order to determine whether using highmem pages would be possible
there)."

The second goal is not the purpose of this patch - it is just to
make it easier to read the code.

linux-2.6-pvops:
 * Stripped drivers/xen/gntdev/*
 * Stripped drivers/xen/netback/*

[v2: Stripped blktap off]
Signed-off-by: default avatarJan Beulich <jbeulich@novell.com>
Signed-off-by: default avatarDaniel Stodden <daniel.stodden@citrix.com>
Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent bc0c081b
...@@ -99,9 +99,11 @@ static inline int vaddr_pagenr(pending_req_t *req, int seg) ...@@ -99,9 +99,11 @@ static inline int vaddr_pagenr(pending_req_t *req, int seg)
return (req - pending_reqs) * BLKIF_MAX_SEGMENTS_PER_REQUEST + seg; return (req - pending_reqs) * BLKIF_MAX_SEGMENTS_PER_REQUEST + seg;
} }
#define pending_page(req, seg) pending_pages[vaddr_pagenr(req, seg)]
static inline unsigned long vaddr(pending_req_t *req, int seg) static inline unsigned long vaddr(pending_req_t *req, int seg)
{ {
unsigned long pfn = page_to_pfn(pending_pages[vaddr_pagenr(req, seg)]); unsigned long pfn = page_to_pfn(pending_page(req, seg));
return (unsigned long)pfn_to_kaddr(pfn); return (unsigned long)pfn_to_kaddr(pfn);
} }
...@@ -463,8 +465,8 @@ static void dispatch_rw_block_io(blkif_t *blkif, ...@@ -463,8 +465,8 @@ static void dispatch_rw_block_io(blkif_t *blkif,
if (ret) if (ret)
continue; continue;
set_phys_to_machine(__pa(vaddr( set_phys_to_machine(
pending_req, i)) >> PAGE_SHIFT, page_to_pfn(pending_page(pending_req, i)),
FOREIGN_FRAME(map[i].dev_bus_addr >> PAGE_SHIFT)); FOREIGN_FRAME(map[i].dev_bus_addr >> PAGE_SHIFT));
seg[i].buf = map[i].dev_bus_addr | seg[i].buf = map[i].dev_bus_addr |
(req->seg[i].first_sect << 9); (req->seg[i].first_sect << 9);
...@@ -495,7 +497,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, ...@@ -495,7 +497,7 @@ static void dispatch_rw_block_io(blkif_t *blkif,
while ((bio == NULL) || while ((bio == NULL) ||
(bio_add_page(bio, (bio_add_page(bio,
virt_to_page(vaddr(pending_req, i)), pending_page(pending_req, i),
seg[i].nsec << 9, seg[i].nsec << 9,
seg[i].buf & ~PAGE_MASK) == 0)) { seg[i].buf & ~PAGE_MASK) == 0)) {
if (bio) { if (bio) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment