[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210113115031.GA29376@lst.de>
Date: Wed, 13 Jan 2021 12:50:31 +0100
From: Christoph Hellwig <hch@....de>
To: Claire Chang <tientzu@...omium.org>
Cc: robh+dt@...nel.org, mpe@...erman.id.au, benh@...nel.crashing.org,
paulus@...ba.org, joro@...tes.org, will@...nel.org,
frowand.list@...il.com, konrad.wilk@...cle.com,
boris.ostrovsky@...cle.com, jgross@...e.com,
sstabellini@...nel.org, hch@....de, m.szyprowski@...sung.com,
robin.murphy@....com, grant.likely@....com, xypron.glpk@....de,
treding@...dia.com, mingo@...nel.org, bauerman@...ux.ibm.com,
peterz@...radead.org, gregkh@...uxfoundation.org,
saravanak@...gle.com, rafael.j.wysocki@...el.com,
heikki.krogerus@...ux.intel.com, andriy.shevchenko@...ux.intel.com,
rdunlap@...radead.org, dan.j.williams@...el.com,
bgolaszewski@...libre.com, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org,
iommu@...ts.linux-foundation.org, xen-devel@...ts.xenproject.org,
tfiga@...omium.org, drinkcat@...omium.org
Subject: Re: [RFC PATCH v3 1/6] swiotlb: Add io_tlb_mem struct
On Wed, Jan 06, 2021 at 11:41:19AM +0800, Claire Chang wrote:
> Added a new struct, io_tlb_mem, as the IO TLB memory pool descriptor and
> moved relevant global variables into that struct.
> This will be useful later to allow for restricted DMA pool.
I like where this is going, but a few comments.
Mostly I'd love to be able to entirely hide io_tlb_default_mem
and struct io_tlb_mem inside of swiotlb.c.
> --- a/arch/powerpc/platforms/pseries/svm.c
> +++ b/arch/powerpc/platforms/pseries/svm.c
> @@ -55,8 +55,8 @@ void __init svm_swiotlb_init(void)
> if (vstart && !swiotlb_init_with_tbl(vstart, io_tlb_nslabs, false))
> return;
>
> - if (io_tlb_start)
> - memblock_free_early(io_tlb_start,
> + if (io_tlb_default_mem.start)
> + memblock_free_early(io_tlb_default_mem.start,
> PAGE_ALIGN(io_tlb_nslabs << IO_TLB_SHIFT));
I think this should switch to use the local vstart variable in
prep patch.
> panic("SVM: Cannot allocate SWIOTLB buffer");
> }
> diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
> index 2b385c1b4a99..4d17dff7ffd2 100644
> --- a/drivers/xen/swiotlb-xen.c
> +++ b/drivers/xen/swiotlb-xen.c
> @@ -192,8 +192,8 @@ int __ref xen_swiotlb_init(int verbose, bool early)
> /*
> * IO TLB memory already allocated. Just use it.
> */
> - if (io_tlb_start != 0) {
> - xen_io_tlb_start = phys_to_virt(io_tlb_start);
> + if (io_tlb_default_mem.start != 0) {
> + xen_io_tlb_start = phys_to_virt(io_tlb_default_mem.start);
> goto end;
xen_io_tlb_start is interesting. It is used only in two functions:
1) is_xen_swiotlb_buffer, where I think we should be able to just use
is_swiotlb_buffer instead of open coding it with the extra
phys_to_virt/virt_to_phys cycle.
2) xen_swiotlb_init, where except for the assignment it only is used
locally for the case not touched above and could this be replaced
with a local variable.
Konrad, does this make sense to you?
> static inline bool is_swiotlb_buffer(phys_addr_t paddr)
> {
> - return paddr >= io_tlb_start && paddr < io_tlb_end;
> + struct io_tlb_mem *mem = &io_tlb_default_mem;
> +
> + return paddr >= mem->start && paddr < mem->end;
We'd then have to move this out of line as well.
Powered by blists - more mailing lists