From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: the arch/x86 maintainers <x86@kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Xen-devel <xen-devel@lists.xensource.com>,
Greg KH <gregkh@suse.de>, Jens Axboe <jens.axboe@oracle.com>,
Chris Wright <chrisw@redhat.com>,
kurt.hackel@oracle.com, Andrew Morton <akpm@linux-foundation.org>,
Ky Srinivasan <ksrinivasan@novell.com>,
Beulich <jbeulich@novell.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Matthew Wilcox <matthew@wil.cx>,
Jesse Barnes <jbarnes@virtuousgeek.org>,
Jeremy Fitzhardinge <jeremy@goop.org>,
Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Subject: [PATCH 10/10] xen: define BIOVEC_PHYS_MERGEABLE()
Date: Wed, 27 May 2009 00:24:42 -0700 [thread overview]
Message-ID: <1243409082-21349-11-git-send-email-jeremy@goop.org> (raw)
In-Reply-To: <1243409082-21349-1-git-send-email-jeremy@goop.org>
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.
[ Impact: allow Xen control of bio merging ]
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
---
arch/x86/include/asm/io.h | 13 +++++++++++++
drivers/xen/Makefile | 2 +-
drivers/xen/biomerge.c | 14 ++++++++++++++
3 files changed, 28 insertions(+), 1 deletions(-)
create mode 100644 drivers/xen/biomerge.c
diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
index 57c7b26..c75e9eb 100644
--- a/arch/x86/include/asm/io.h
+++ b/arch/x86/include/asm/io.h
@@ -7,6 +7,8 @@
#include <asm-generic/int-ll64.h>
#include <asm/page.h>
+#include <asm/xen/hypervisor.h>
+
extern int isapnp_disable;
#define build_mmio_read(name, size, type, reg, barrier) \
@@ -201,6 +203,17 @@ extern void __iomem *early_memremap(resource_size_t phys_addr,
unsigned long size);
extern void early_iounmap(void __iomem *addr, unsigned long size);
+#ifdef CONFIG_XEN
+struct bio_vec;
+
+extern bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
+ const struct bio_vec *vec2);
+
+#define BIOVEC_PHYS_MERGEABLE(vec1, vec2) \
+ (__BIOVEC_PHYS_MERGEABLE(vec1, vec2) && \
+ (!xen_domain() || xen_biovec_phys_mergeable(vec1, vec2)))
+#endif /* CONFIG_XEN */
+
#define IO_SPACE_LIMIT 0xffff
#endif /* _ASM_X86_IO_H */
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
index ec2a39b..e6c8b85 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
@@ -1,4 +1,4 @@
-obj-y += grant-table.o features.o events.o manage.o
+obj-y += grant-table.o features.o events.o manage.o biomerge.o
obj-y += xenbus/
obj-$(CONFIG_HOTPLUG_CPU) += cpu_hotplug.o
diff --git a/drivers/xen/biomerge.c b/drivers/xen/biomerge.c
new file mode 100644
index 0000000..d40f534
--- /dev/null
+++ b/drivers/xen/biomerge.c
@@ -0,0 +1,14 @@
+#include <linux/bio.h>
+#include <asm/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));
+}
+
--
1.6.0.6
next prev parent reply other threads:[~2009-05-27 7:26 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-27 7:24 [GIT PULL REPOST] xen/dom0/pci - Xen dom0 PCI access Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 01/10] xen: Don't disable the I/O space Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 02/10] xen: Allow unprivileged Xen domains to create iomap pages Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 03/10] Xen: Rename the balloon lock Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 04/10] xen: Add xen_create_contiguous_region Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 05/10] x86/PCI: Clean up pci_cache_line_size Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 06/10] x86/PCI: Enable scanning of all pci functions Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 07/10] Xen/x86/PCI: Add support for the Xen PCI subsystem Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 08/10] x86/pci: make sure _PAGE_IOMAP it set on pci mappings Jeremy Fitzhardinge
2009-05-27 7:24 ` [PATCH 09/10] xen/pci: clean up Kconfig a bit Jeremy Fitzhardinge
2009-05-27 7:24 ` Jeremy Fitzhardinge [this message]
-- strict thread matches above, loose matches on Subject: below --
2009-05-12 21:48 [GIT PULL] xen dom0 PCI access Jeremy Fitzhardinge
2009-05-12 21:48 ` [PATCH 10/10] xen: define BIOVEC_PHYS_MERGEABLE() Jeremy Fitzhardinge
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1243409082-21349-11-git-send-email-jeremy@goop.org \
--to=jeremy@goop.org \
--cc=akpm@linux-foundation.org \
--cc=chrisw@redhat.com \
--cc=gregkh@suse.de \
--cc=jbarnes@virtuousgeek.org \
--cc=jbeulich@novell.com \
--cc=jens.axboe@oracle.com \
--cc=jeremy.fitzhardinge@citrix.com \
--cc=ksrinivasan@novell.com \
--cc=kurt.hackel@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew@wil.cx \
--cc=mingo@elte.hu \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®