[PATCH v2][impish/linux-azure] UBUNTU: SAUCE: azure: Swiotlb: Add swiotlb_alloc_from_low_pages switch
Thadeu Lima de Souza Cascardo
cascardo at canonical.com
Wed Mar 30 18:16:51 UTC 2022
On Wed, Mar 30, 2022 at 12:09:56PM -0600, Tim Gardner wrote:
>
>
> On 3/30/22 12:00, Thadeu Lima de Souza Cascardo wrote:
> > On Wed, Mar 30, 2022 at 11:50:32AM -0600, Tim Gardner wrote:
> > > From: Tianyu Lan <Tianyu.Lan at microsoft.com>
> > >
> > > v2 - added proper subject
> > >
> > > BugLink: https://bugs.launchpad.net/bugs/1967166
> > >
> > > Hyper-V Isolation VM and AMD SEV VM uses swiotlb bounce buffer to
> > > share memory with hypervisor. Current swiotlb bounce buffer is only
> > > allocated from 0 to ARCH_LOW_ADDRESS_LIMIT which is default to
> > > 0xffffffffUL. Isolation VM and AMD SEV VM needs 1G bounce buffer at most.
> > > This will fail when there is not enough memory from 0 to 4G address
> > > space and devices also may use memory above 4G address space as DMA memory.
> > > Expose swiotlb_alloc_from_low_pages and platform mey set it to false when
> > > it's not necessary to limit bounce buffer from 0 to 4G memory.
> > >
> > > Signed-off-by: Tianyu Lan <Tianyu.Lan at microsoft.com>
> > > Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
> > > ---
> > >
> > > This patch depends on a previous pull request:
> > > [Pull Request] [impish/linux-azure] Azure: Update Hyperv to 5.17
> > >
> > > ---
> > > include/linux/swiotlb.h | 1 +
> > > kernel/dma/swiotlb.c | 17 +++++++++++++++--
> > > 2 files changed, 16 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
> > > index 2356da25c3b9..037356d57abf 100644
> > > --- a/include/linux/swiotlb.h
> > > +++ b/include/linux/swiotlb.h
> > > @@ -38,6 +38,7 @@ enum swiotlb_force {
> > > extern void swiotlb_init(int verbose);
> > > int swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose);
> > > unsigned long swiotlb_size_or_default(void);
> > > +void swiotlb_set_alloc_from_low_pages(bool low);
> > > extern int swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs);
> > > extern int swiotlb_late_init_with_default_size(size_t default_size);
> > > extern void __init swiotlb_update_mem_attributes(void);
> > > diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> > > index c57e78071143..e2c1395740de 100644
> > > --- a/kernel/dma/swiotlb.c
> > > +++ b/kernel/dma/swiotlb.c
> > > @@ -67,6 +67,7 @@ enum swiotlb_force swiotlb_force;
> > > struct io_tlb_mem *io_tlb_default_mem;
> > > phys_addr_t swiotlb_unencrypted_base;
> > > +static bool swiotlb_alloc_from_low_pages = true;
> > > /*
> > > * Max segment that we can provide which (if pages are contingous) will
> > > @@ -109,6 +110,11 @@ void swiotlb_set_max_segment(unsigned int val)
> > > max_segment = rounddown(val, PAGE_SIZE);
> > > }
> > > +void swiotlb_set_alloc_from_low_pages(bool low)
> > > +{
> > > + swiotlb_alloc_from_low_pages = low;
> > > +}
> > > +
> >
> > This looks to be missing the user to this function. Under that condition, this
> > doesn't look like to be changing anything. Is it called by some other commit in
> > that pull request you mentioned? And, in that case, isn't that breaking
> > bisection?
> >
>
> IMHO this patch could use some work. I'm sure it won't get merged intact. I
> agree that there is no user for set_alloc_from_low_pages() yet. The major
> change that this patch makes is to use memblock_alloc_low() by default for
> Azure and Azure-CVM kernels.
>
> rtg
>
> > Cascardo.
> >
> > > unsigned long swiotlb_size_or_default(void)
> > > {
> > > return default_nslabs << IO_TLB_SHIFT;
> > > @@ -253,8 +259,15 @@ swiotlb_init(int verbose)
> > > if (swiotlb_force == SWIOTLB_NO_FORCE)
> > > return;
> > > - /* Get IO TLB memory from the low pages */
> > > - tlb = memblock_alloc_low(bytes, PAGE_SIZE);
^^^
But isn't memblock_alloc_low being used by default already?
Cascardo.
> > > + /*
> > > + * Get IO TLB memory from the low pages if swiotlb_alloc_from_low_pages
> > > + * is set.
> > > + */
> > > + if (swiotlb_alloc_from_low_pages)
> > > + tlb = memblock_alloc_low(bytes, PAGE_SIZE);
> > > + else
> > > + tlb = memblock_alloc(bytes, PAGE_SIZE);
> > > +
> > > if (!tlb)
> > > goto fail;
> > > if (swiotlb_init_with_tbl(tlb, default_nslabs, verbose))
> > > --
> > > 2.35.1
> > >
> > >
> > > --
> > > kernel-team mailing list
> > > kernel-team at lists.ubuntu.com
> > > https://lists.ubuntu.com/mailman/listinfo/kernel-team
>
> --
> -----------
> Tim Gardner
> Canonical, Inc
More information about the kernel-team
mailing list