Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -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;
}

#define pending_page(req, seg) pending_pages[vaddr_pagenr(req, 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);
}

@@ -463,8 +465,8 @@ static void dispatch_rw_block_io(blkif_t *blkif,
		if (ret)
			continue;

		set_phys_to_machine(__pa(vaddr(
			pending_req, i)) >> PAGE_SHIFT,
		set_phys_to_machine(
			page_to_pfn(pending_page(pending_req, i)),
			FOREIGN_FRAME(map[i].dev_bus_addr >> PAGE_SHIFT));
		seg[i].buf  = map[i].dev_bus_addr |
			(req->seg[i].first_sect << 9);
@@ -495,7 +497,7 @@ static void dispatch_rw_block_io(blkif_t *blkif,

		while ((bio == NULL) ||
		       (bio_add_page(bio,
				     virt_to_page(vaddr(pending_req, i)),
				     pending_page(pending_req, i),
				     seg[i].nsec << 9,
				     seg[i].buf & ~PAGE_MASK) == 0)) {
			if (bio) {