-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Impact: allow Xen control of bio merging When running in Xen domain with device access, we need to make sure the block subsystem doesn't merge requests across pages which aren't machine physically contiguous. To do this, we define our own BIOVEC_PHYS_MERGEABLE. When CONFIG_XEN isn't enabled, or we're not running in a Xen domain, this has identical behaviour to the normal implementation. When running under Xen, we also make sure the underlying machine pages are the same or adjacent. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
- Loading branch information
Jeremy Fitzhardinge
authored and
Konrad Rzeszutek Wilk
committed
Oct 18, 2010
1 parent
23ace95
commit d8e0420
Showing
3 changed files
with
27 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#include <linux/bio.h> | ||
#include <linux/io.h> | ||
#include <xen/page.h> | ||
|
||
bool xen_biovec_phys_mergeable(const struct bio_vec *vec1, | ||
const struct bio_vec *vec2) | ||
{ | ||
unsigned long mfn1 = pfn_to_mfn(page_to_pfn(vec1->bv_page)); | ||
unsigned long mfn2 = pfn_to_mfn(page_to_pfn(vec2->bv_page)); | ||
|
||
return __BIOVEC_PHYS_MERGEABLE(vec1, vec2) && | ||
((mfn1 == mfn2) || ((mfn1+1) == mfn2)); | ||
} |