aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2009-02-09 15:05:46 -0500
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2010-10-18 10:40:28 -0400
commitd8e0420603cf1ce9cb459c00ea0b7337de41b968 (patch)
tree10294b14b8f0a432763d2b87c38bd41538923d85 /arch
parent23ace955c22cb9bdf703e4bdc9bf7379166113cd (diff)
xen: define BIOVEC_PHYS_MERGEABLE()
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>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/include/asm/io.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
index 30a3e9776123..0ad29d401565 100644
--- a/arch/x86/include/asm/io.h
+++ b/arch/x86/include/asm/io.h
@@ -41,6 +41,8 @@
41#include <asm-generic/int-ll64.h> 41#include <asm-generic/int-ll64.h>
42#include <asm/page.h> 42#include <asm/page.h>
43 43
44#include <xen/xen.h>
45
44#define build_mmio_read(name, size, type, reg, barrier) \ 46#define build_mmio_read(name, size, type, reg, barrier) \
45static inline type name(const volatile void __iomem *addr) \ 47static inline type name(const volatile void __iomem *addr) \
46{ type ret; asm volatile("mov" size " %1,%0":reg (ret) \ 48{ type ret; asm volatile("mov" size " %1,%0":reg (ret) \
@@ -349,6 +351,17 @@ extern void __iomem *early_memremap(resource_size_t phys_addr,
349extern void early_iounmap(void __iomem *addr, unsigned long size); 351extern void early_iounmap(void __iomem *addr, unsigned long size);
350extern void fixup_early_ioremap(void); 352extern void fixup_early_ioremap(void);
351 353
354#ifdef CONFIG_XEN
355struct bio_vec;
356
357extern bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
358 const struct bio_vec *vec2);
359
360#define BIOVEC_PHYS_MERGEABLE(vec1, vec2) \
361 (__BIOVEC_PHYS_MERGEABLE(vec1, vec2) && \
362 (!xen_domain() || xen_biovec_phys_mergeable(vec1, vec2)))
363#endif /* CONFIG_XEN */
364
352#define IO_SPACE_LIMIT 0xffff 365#define IO_SPACE_LIMIT 0xffff
353 366
354#endif /* _ASM_X86_IO_H */ 367#endif /* _ASM_X86_IO_H */