All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joerg Roedel <joro@8bytes.org>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Ingo Molnar <mingo@elte.hu>,
	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
	the arch/x86 maintainers <x86@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Xen-devel <xen-devel@lists.xensource.com>,
	Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Subject: Re: [PATCH 1/9] xen: make sure swiotlb allocation is physically contigious
Date: Mon, 11 May 2009 15:55:33 +0200	[thread overview]
Message-ID: <20090511135532.GA8671@8bytes.org> (raw)
In-Reply-To: <1241741842-7966-2-git-send-email-jeremy@goop.org>

On Thu, May 07, 2009 at 05:17:14PM -0700, Jeremy Fitzhardinge wrote:
> Impact: make swiotlb allocation suitable for Xen
> 
> When allocating the swiotlb buffer under Xen, make sure the memory is
> physically contiguous so that its really suitable for DMA.
> 
> Do this by allocating the memory as usual, but then call a Xen
> function to rearrange the underlying pages to be physically
> contiguous.
> 
> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
> Reviewed-by: "H. Peter Anvin" <hpa@zytor.com>
> Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
> ---
>  arch/x86/kernel/pci-swiotlb.c |   10 ----------
>  arch/x86/xen/Makefile         |    1 +
>  arch/x86/xen/pci-swiotlb.c    |   27 +++++++++++++++++++++++++++
>  drivers/pci/xen-iommu.c       |   16 ++++++++++++++++
>  include/xen/swiotlb.h         |    6 ++++++
>  5 files changed, 50 insertions(+), 10 deletions(-)
>  create mode 100644 arch/x86/xen/pci-swiotlb.c
>  create mode 100644 include/xen/swiotlb.h
> 
> diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c
> index 34f12e9..bc09da7 100644
> --- a/arch/x86/kernel/pci-swiotlb.c
> +++ b/arch/x86/kernel/pci-swiotlb.c
> @@ -13,16 +13,6 @@
>  
>  int swiotlb __read_mostly;
>  
> -void * __init swiotlb_alloc_boot(size_t size, unsigned long nslabs)
> -{
> -	return alloc_bootmem_low_pages(size);
> -}
> -
> -void *swiotlb_alloc(unsigned order, unsigned long nslabs)
> -{
> -	return (void *)__get_free_pages(GFP_DMA | __GFP_NOWARN, order);
> -}
> -
>  dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, phys_addr_t paddr)
>  {
>  	return paddr;
> diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
> index c4cda96..caede49 100644
> --- a/arch/x86/xen/Makefile
> +++ b/arch/x86/xen/Makefile
> @@ -12,3 +12,4 @@ obj-y		:= enlighten.o setup.o multicalls.o mmu.o irq.o \
>  obj-$(CONFIG_SMP)		+= smp.o spinlock.o
>  obj-$(CONFIG_XEN_DEBUG_FS)	+= debugfs.o
>  obj-$(CONFIG_XEN_DOM0)		+= vga.o
> +obj-$(CONFIG_PCI_XEN)		+= pci-swiotlb.o
> \ No newline at end of file
> diff --git a/arch/x86/xen/pci-swiotlb.c b/arch/x86/xen/pci-swiotlb.c
> new file mode 100644
> index 0000000..25f0365
> --- /dev/null
> +++ b/arch/x86/xen/pci-swiotlb.c
> @@ -0,0 +1,27 @@
> +#include <linux/bootmem.h>
> +#include <linux/gfp.h>
> +
> +#include <xen/swiotlb.h>
> +#include <asm/xen/hypervisor.h>
> +
> +/* 
> + * This file defines overrides for weak functions with default
> + * implementations in lib/swiotlb.c.
> + */
> +
> +void * __init swiotlb_alloc_boot(size_t size, unsigned long nslabs)
> +{
> +	void *ret = alloc_bootmem_low_pages(size);
> +
> +	if (ret && xen_pv_domain())
> +		xen_swiotlb_fixup(ret, size, nslabs);
> +
> +	return ret;
> +}
> +
> +void *swiotlb_alloc(unsigned order, unsigned long nslabs)
> +{
> +	/* Never called on x86.  Warn, just in case. */

Can't this function be removed completly then?

> +	WARN_ON(1);
> +	return NULL;
> +}
> diff --git a/drivers/pci/xen-iommu.c b/drivers/pci/xen-iommu.c
> index 32a8b49..c593058 100644
> --- a/drivers/pci/xen-iommu.c
> +++ b/drivers/pci/xen-iommu.c
> @@ -12,6 +12,7 @@
>  #include <xen/grant_table.h>
>  #include <xen/page.h>
>  #include <xen/xen-ops.h>
> +#include <xen/swiotlb.h>
>  
>  #include <asm/iommu.h>
>  #include <asm/swiotlb.h>
> @@ -34,6 +35,21 @@ do {							\
>  	(unsigned long long)addr + size);		\
>  } while (0)
>  
> +
> +void xen_swiotlb_fixup(void *buf, size_t size, unsigned long nslabs)
> +{
> +	unsigned order = get_order(size);
> +
> +	printk(KERN_DEBUG "xen_swiotlb_fixup: buf=%p size=%zu order=%u\n",
> +		buf, size, order);
> +
> +	if (WARN_ON(size != (PAGE_SIZE << order)))
> +		return;
> +
> +	if (xen_create_contiguous_region((unsigned long)buf,
> +					 order, 0xffffffff))
                                                DMA_32BIT_MASK?

> +		printk(KERN_ERR "xen_create_contiguous_region failed\n");
> +}
>  static inline int address_needs_mapping(struct device *hwdev,
>  						dma_addr_t addr)
>  {
> diff --git a/include/xen/swiotlb.h b/include/xen/swiotlb.h
> new file mode 100644
> index 0000000..67b7b42
> --- /dev/null
> +++ b/include/xen/swiotlb.h
> @@ -0,0 +1,6 @@
> +#ifndef _XEN_SWIOTLB_H
> +#define _XEN_SWIOTLB_H
> +
> +extern void xen_swiotlb_fixup(void *buf, size_t size, unsigned long nslabs);
> +
> +#endif /* _XEN_SWIOTLB_H */
> -- 
> 1.6.0.6
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

  parent reply	other threads:[~2009-05-11 13:55 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-08  0:17 [GIT PULL] xen: swiotlb support for Xen dom0 Jeremy Fitzhardinge
2009-05-08  0:17 ` Jeremy Fitzhardinge
2009-05-08  0:17 ` [PATCH 1/9] xen: make sure swiotlb allocation is physically contigious Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-08  7:47   ` [Xen-devel] [PATCH 1/9] xen: make sure swiotlb allocation isphysically contigious Jan Beulich
2009-05-08  7:47     ` Jan Beulich
2009-05-08 15:51     ` [Xen-devel] " Jeremy Fitzhardinge
2009-05-08 15:51       ` Jeremy Fitzhardinge
2009-05-11  3:40   ` [PATCH 1/9] xen: make sure swiotlb allocation is physically contigious FUJITA Tomonori
2009-05-11 13:55   ` Joerg Roedel [this message]
2009-05-11 18:42     ` Jeremy Fitzhardinge
2009-05-08  0:17 ` [PATCH 2/9] xen swiotlb: fixup swiotlb is chunks smaller than MAX_CONTIG_ORDER Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-08  0:17 ` [PATCH 3/9] xen: add hooks for mapping phys<->bus addresses in swiotlb Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-11  3:40   ` FUJITA Tomonori
2009-05-11 14:11   ` Joerg Roedel
2009-05-11 14:11     ` Joerg Roedel
2009-05-08  0:17 ` [PATCH 4/9] xen/swiotlb: add swiotlb_arch_range_needs_mapping hook for xen Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-11  3:40   ` FUJITA Tomonori
2009-05-11 14:16   ` Joerg Roedel
2009-05-11 14:16     ` Joerg Roedel
2009-05-08  0:17 ` [PATCH 5/9] xen: enable swiotlb for xen domain 0 Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-11  3:40   ` FUJITA Tomonori
2009-05-11 14:21   ` Joerg Roedel
2009-05-11 14:21     ` Joerg Roedel
2009-05-08  0:17 ` [PATCH 6/9] swiotlb: use swiotlb_alloc_boot to allocate emergency pool Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-08  0:17 ` [PATCH 7/9] xen/swiotlb: improve comment on gfp flags in xen_alloc_coherent() Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-08  0:17 ` [PATCH 8/9] xen/swiotlb: add sync functions Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-08  0:17 ` [PATCH 9/9] xen/swiotlb: update to new new dma_ops Jeremy Fitzhardinge
2009-05-08  0:17   ` Jeremy Fitzhardinge
2009-05-08 11:19 ` [GIT PULL] xen: swiotlb support for Xen dom0 Ingo Molnar
2009-05-08 11:19   ` Ingo Molnar
2009-05-11  3:40 ` FUJITA Tomonori
2009-05-11 16:59   ` Jeremy Fitzhardinge
2009-05-11 22:45     ` FUJITA Tomonori
2009-05-11 22:45       ` FUJITA Tomonori
2009-05-11 13:04 ` Ingo Molnar
2009-05-11 13:04   ` Ingo Molnar
2009-05-11 16:57   ` Jeremy Fitzhardinge
2009-05-11 16:57     ` Jeremy Fitzhardinge
  -- strict thread matches above, loose matches on Subject: below --
2009-03-31 22:52 [PATCH] swiotlb updates " Jeremy Fitzhardinge
2009-03-31 22:52 ` [PATCH 1/9] xen: make sure swiotlb allocation is physically contigious 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=20090511135532.GA8671@8bytes.org \
    --to=joro@8bytes.org \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=jeremy.fitzhardinge@citrix.com \
    --cc=jeremy@goop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.