From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Chris Wright <chrisw@sous-sol.org>
Cc: Ian.Campbell@eu.citrix.com, jeremy@goop.org,
xen-devel@lists.xensource.com, joerg.roedel@amd.com,
fujita.tomonori@lab.ntt.co.jp, iommu@lists.linux-foundation.org,
dwmw2@infradead.org, alex.williamson@hp.com
Subject: Re: [RFC SWIOTLB-0.2]
Date: Tue, 19 Jan 2010 13:20:57 -0500 [thread overview]
Message-ID: <20100119182057.GS11986@phenom.dumpdata.com> (raw)
In-Reply-To: <20100115022510.GI6021@sequoia.sous-sol.org>
On Thu, Jan 14, 2010 at 06:25:10PM -0800, Chris Wright wrote:
> * Konrad Rzeszutek Wilk (konrad.wilk@oracle.com) wrote:
> > Another approach, which this set of patches explores, is to abstract the
> > address translation and address determination functions away from the
> > SWIOTLB book-keeping functions. This way the core SWIOTLB library functions
> > are present in one place, while the address related functions are in
> > a separate library for different run-time platforms. I would very much
> > appreciate input on this idea and the set of patches.
>
> It seems like it still needs some refinement, since the Xen
Oh yes.
> implementation is hooking into two layers. Both:
>
> + swiotlb_register_engine(&xen_ops);
>
> and
>
> +static struct dma_map_ops xen_swiotlb_dma_ops = {
>
> Wouldn't the idea be to get to the point that you'd use common swiotlb
> and keep the hooks to one layer?
I would love to. Maybe I can extend those two functions (alloc_coherent
and free_coherent) to make an extra call after they have
allocated/de-allocated a page?
The reason is that in virtualized environments
I MUST guarantee that those buffers are linearly contiguous.
Meaning I need to post-processing of this buffer:
ret = (void *)__get_free_pages(flags, order)
If that can't be done, then I need a mix of DMA ops where the majority
is SWIOTLB with the exception of the alloc_coherent and free_coherent).
Hmm, I should follow the lead of what x86_swiotlb_alloc_coherent does
and just make an extra call to 'is_swiotlb_buffer' on the return address
and if not found to be within that SWIOTLB, do the fixup to make sure
the pages are linearly contiguous.
>
> Also, it's unclear when some of the prior global to swiotlb variables
> would actually be useful to a private implementation. For example, overflow,
> which is just 32 * 1024 in both cases. Are those really needed to be
> private to a swiotlb engine?
Unfortunately yes. The same reason as mentioned above:
MUST guarantee that those buffers (start, overflow) are linearly contiguous.
For that I was doing something like:
void __init xen_swiotlb_init(int verbose)
{
int rc = 0;
swiotlb_register_engine(&xen_ops);
swiotlb_init_with_default_size(&xen_ops, 64 * (1<<20), 0);
if ((rc = xen_swiotlb_fixup(xen_ops.start,
xen_ops.nslabs << IO_TLB_SHIFT,
xen_ops.nslabs)))
goto error;
if ((rc = xen_swiotlb_fixup(xen_ops.overflow_buffer,
xen_ops.overflow,
xen_ops.overflow >> IO_TLB_SHIFT)))
goto error;
so that I can "fix" the start and overflow_buffer pages.
>
> Do you think you can reduce the swiotlb_engine to just the relevant ops?
Yes. Let me reduce them.
>
> thanks,
> -chris
prev parent reply other threads:[~2010-01-19 18:20 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-14 23:00 [RFC SWIOTLB-0.2] Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 01/15] [swiotlb] fix: Update 'setup_io_tlb_npages' to accept both arguments in either order Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 02/15] [swiotlb] Add swiotlb_engine structure for tracking multiple software IO TLBs Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 03/15] [swiotlb] Add swiotlb_register_engine function Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 04/15] [swiotlb] Search and replace s/io_tlb/iommu_sw->/ Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 05/15] [swiotlb] Respect the io_tlb_nslabs argument value Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 06/15] [swiotlb] In 'swiotlb_init' take advantage of the default swiotlb_engine support Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 07/15] [swiotlb] In 'swiotlb_free' check iommu_sw pointer Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 08/15] [swiotlb] Add 'is_swiotlb_buffer' to the swiotlb_ops function decleration Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 09/15] [swiotlb] Add 'dma_capable' to the swiotlb_ops structure Konrad Rzeszutek Wilk
2010-01-14 23:00 ` [PATCH 10/15] [swiotlb] Replace the [phys, bus]->virt and virt->[bus, phys] functions with iommu_sw calls Konrad Rzeszutek Wilk
2010-01-14 23:01 ` [PATCH 11/15] [swiotlb] Replace late_alloc with iommu_sw->priv usage Konrad Rzeszutek Wilk
2010-01-14 23:01 ` [PATCH 12/15] [swiotlb] Remove un-used static declerations obsoleted by iommu_sw Konrad Rzeszutek Wilk
2010-01-14 23:01 ` [PATCH 13/15] [swiotlb] Make io_tlb_nslabs visible outside lib/swiotlb.c and rename it Konrad Rzeszutek Wilk
2010-01-14 23:01 ` [PATCH 14/15] [swiotlb] Move initialization (swiotlb_init) and its friends in swiotlb-default.c Konrad Rzeszutek Wilk
2010-01-14 23:01 ` [PATCH 15/15] [swiotlb] Take advantage of iommu_sw->name and add %s to printk's Konrad Rzeszutek Wilk
2010-01-15 2:14 ` [PATCH 14/15] [swiotlb] Move initialization (swiotlb_init) and its friends in swiotlb-default.c Chris Wright
2010-01-19 17:45 ` Konrad Rzeszutek Wilk
2010-01-19 18:55 ` Chris Wright
2010-01-15 2:02 ` [PATCH 07/15] [swiotlb] In 'swiotlb_free' check iommu_sw pointer Chris Wright
2010-01-19 17:45 ` Konrad Rzeszutek Wilk
2010-01-19 18:23 ` Chris Wright
2010-01-15 1:57 ` [PATCH 06/15] [swiotlb] In 'swiotlb_init' take advantage of the default swiotlb_engine support Chris Wright
2010-01-19 17:45 ` Konrad Rzeszutek Wilk
2010-01-15 1:47 ` [PATCH 05/15] [swiotlb] Respect the io_tlb_nslabs argument value Chris Wright
2010-01-15 1:43 ` [PATCH 04/15] [swiotlb] Search and replace s/io_tlb/iommu_sw->/ Chris Wright
2010-01-19 17:45 ` Konrad Rzeszutek Wilk
2010-01-15 1:41 ` [PATCH 03/15] [swiotlb] Add swiotlb_register_engine function Chris Wright
2010-01-19 17:25 ` Konrad Rzeszutek Wilk
2010-01-15 1:33 ` [PATCH 02/15] [swiotlb] Add swiotlb_engine structure for tracking multiple software IO TLBs Chris Wright
2010-01-19 17:46 ` Konrad Rzeszutek Wilk
2010-01-19 18:43 ` Chris Wright
2010-01-22 1:51 ` FUJITA Tomonori
2010-01-26 16:20 ` Konrad Rzeszutek Wilk
2010-02-03 2:04 ` FUJITA Tomonori
2010-02-03 17:08 ` [RFC SWIOTLB-0.4] Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 01/11] [swiotlb] fix: Update 'setup_io_tlb_npages' to accept both arguments in either order Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 02/11] [swiotlb] Make 'setup_io_tlb_npages' accept new 'swiotlb=' syntax Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 03/11] [swiotlb] Normalize the swiotlb_init_* function's naming syntax Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 04/11] [swiotlb] Make printk's use same prefix and include dev_err when possible Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 05/11] [swiotlb] Make internal bookkeeping functions have 'do_' prefix Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 06/11] [swiotlb] do_map_single: abstract out swiotlb_virt_to_bus calls out Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 07/11] [swiotlb] Fix checkpatch warnings Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 08/11] [swiotlb] Re-order the function declerations Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 09/11] [swiotlb] Make swiotlb bookkeeping functions visible in the header file Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 10/11] [swiotlb] Rename swiotlb.c to swiotlb-core.c Konrad Rzeszutek Wilk
2010-02-03 17:08 ` [PATCH 11/11] [swiotlb] move dma_ops functions to swiotlb.c Konrad Rzeszutek Wilk
2010-02-04 0:17 ` [RFC SWIOTLB-0.4] FUJITA Tomonori
2010-02-04 3:07 ` Konrad Rzeszutek Wilk
2010-02-16 23:37 ` Konrad Rzeszutek Wilk
2010-01-15 1:22 ` [PATCH 01/15] [swiotlb] fix: Update 'setup_io_tlb_npages' to accept both arguments in either order Chris Wright
2010-01-19 17:47 ` Konrad Rzeszutek Wilk
2010-01-19 19:00 ` Chris Wright
2010-01-19 19:39 ` Konrad Rzeszutek Wilk
2010-01-15 2:25 ` [RFC SWIOTLB-0.2] Chris Wright
2010-01-19 18:20 ` Konrad Rzeszutek Wilk [this message]
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=20100119182057.GS11986@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=Ian.Campbell@eu.citrix.com \
--cc=alex.williamson@hp.com \
--cc=chrisw@sous-sol.org \
--cc=dwmw2@infradead.org \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=iommu@lists.linux-foundation.org \
--cc=jeremy@goop.org \
--cc=joerg.roedel@amd.com \
--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.